====== 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