This is an old revision of the document!
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
! 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[]
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)
</code>
Go to your informants window in SAMM and load the informs.samm file from your sub-routine directory