Table of Contents

Projecting Share Variables into Simulation Time

Projecting share variables from history into the simulation time using a saturating projection is a common way to create the business as usual data for these variables.

To find the sub-routine related files look in: \\maxwell\whatif\whatifdocs\toolSubroutines\satProj

Example call to the sub-routine

! NOTE these informants should be put into your model then these lines should not be included when calling the sub routine
skipto afterInformants
localinformant yearInfoSet[] = create (; object=set, \
	desc="defaults wrt projection year", \
	elemName1 = "min", \
	elemName2 = "max", \
	elemName3 = "default", \
	elemName4 = "timeDimNum")
localinformant boundsInfoSet[] = create (; object=set, \
	desc="defaults wrt bounds checking", \
	elemName1 = "setMax", \
	elemName2 = "maxVal", \
	elemName3 = "setMin", \
	elemName4 = "minVal")
localinformant normInfoSet[] = create (; object=set, \
	desc="defaults wrt normalizing", \
	elemName1 = "doRenorm", \
	elemName2 = "normDimNum") 		
afterInformants:

local varHis[upperdims,timeseq] = newSizeShrPU[cr,vcld,t][1]
local varResult[upperdims,timeseq] = newSizeShrPU[cr,vcld,t][3]

local yearInfoForProj[yearInfoSet] = create (; dim=yearInfoSet, dataType=integer)
yearInfoForProj[yearInfoSet] = insert (1982; yearInfoSet:min)
yearInfoForProj[yearInfoSet] = insert (2000; yearInfoSet:max)
yearInfoForProj[yearInfoSet] = insert (1982; yearInfoSet:default)
yearInfoForProj[yearInfoSet] = insert (3; yearInfoSet:timeDimNum)

local boundsChecking[boundsInfoSet] = create (; dim=boundsInfoSet)
boundsChecking[boundsInfoSet] = insert (1.0; boundsInfoSet:setMax)
boundsChecking[boundsInfoSet] = insert (1.0; boundsInfoSet:maxVal)
boundsChecking[boundsInfoSet] = insert (1.0; boundsInfoSet:setMin)
boundsChecking[boundsInfoSet] = insert (0.0; boundsInfoSet:minVal)

local normInfo[normInfoSet] = create (; dim=normInfoSet, dataType=integer)
normInfo[yearInfoSet] = insert (1; normInfoSet:doRenorm)
normInfo[yearInfoSet] = insert (2; normInfoSet:normDimNum)

local percentChgFromLYHis[] = create (; data=50.0)

local defaultJoin[] = create (; data=2) ! join trend 

local firstHisYearForProjection[], asymtoticPercentChange[], joinMethod[]

string $viewDesc = "view myViewName: "

tool $informPath/satProjFromHist.t \
		yearInfoForProj[yearInfoSet] \
		boundsChecking[boundsInfoSet] \
		normInfo[normInfoSet] \
		percentChgFromLYHis[] \
		defaultJoin[] \
		varHis[upperdims,timeseq] \
		varResult[upperdims,timeseq] \
		firstHisYearForProjection[] \
		asymtoticPercentChange[] \
		joinMethod[]
		

integer $firstHisYearForProjection
getobjinfo (firstHisYearForProjection[], $firstHisYearForProjection; info=dataElement)
buildstring ($viewDesc,$viewDesc,"first year of history for projection = ",$firstHisYearForProjection,": ")

string $asymtoticPercentChange
getobjinfo (asymtoticPercentChange[], $asymtoticPercentChange; info=dataElement)
buildstring ($viewDesc,$viewDesc,"asymtotic percent change = ",$asymtoticPercentChange,": ")

integer $joinMethod
getobjinfo (joinMethod[], $joinMethod; info=dataElement)
if $joinMethod == 1
	buildstring ($viewDesc,$viewDesc,"join to projection of last 2 years of history")
endif
if $joinMethod == 2
	buildstring ($viewDesc,$viewDesc,"join to trend line")
endif
if $joinMethod == 3
	buildstring ($viewDesc,$viewDesc,"join to trend projection of last history year")
endif

newSizeShrPU[cr,vcld,t][3] = assign (varResult[upperdims,timeseq]; 	desc=$viewDesc)

newPUVehShr[cr,vcld->vpsld,ts][3] = mapcat (newSizeShrPU[cr,vcld,t][3] * \
	newEngineShrPU[cr,vcld,vpsld,th][2]; category=vcldCOvpsld, \
desc=$viewMenuChoices)


How to load

Go to your informants window in SAMM and load the informs.samm file from your sub-routine directory