OSErr ComponentMover_c::PrepareForModelStep(const Seconds& model_time, const Seconds& time_step, bool uncertain, int numLESets, int* LESetsSizesList) { char errmsg[256]; OSErr err = 0; err = CurrentMover_c::PrepareForModelStep(model_time, time_step, uncertain, numLESets, LESetsSizesList); // note: this calls UpdateUncertainty() // AH 07/10/2012 errmsg[0]=0; err = SetOptimizeVariables (errmsg, model_time, time_step); // code goes here, jump to done? //if (err) goto done; this -> fOptimize.isOptimizedForStep = true; //this -> fOptimize.isFirstStep = (model_time == start_time); // code goes here, I think this is redundant /*if (this -> fOptimize.isFirstStep) { if (bUseAveragedWinds) { if (fAveragedWindsHdl) { // should dispose at end of run?? DisposeHandle((Handle)fAveragedWindsHdl); fAveragedWindsHdl = 0; } err = CalculateAveragedWindsHdl(errmsg); if (err) {if (!errmsg[0]) strcpy(errmsg,"There is a problem with the averaged winds. Please check your inputs.");} } }*/ done: if (err) { if(!errmsg[0]) strcpy(errmsg,"An error occurred in TComponentMover::PrepareForModelStep"); printError(errmsg); } return err; }
WorldPoint3D ComponentMover_c::GetMove (const Seconds& model_time, Seconds timeStep,long setIndex,long leIndex,LERec *theLE,LETYPE leType) { double dLat, dLong; WorldPoint3D deltaPoint = {0,0,0.}; WorldPoint refPoint = (*theLE).p; WorldPoint3D refPoint3D = {0,0,0.}; VelocityRec finalVel, pat1Val,pat2Val; OSErr err = 0; char errmsg[256]; refPoint3D.p = refPoint; pat1Val = pattern1 -> GetPatValue (refPoint3D); if (pattern2) pat2Val = pattern2 -> GetPatValue (refPoint3D); else { pat2Val.u = pat2Val.v = 0; } if (!fOptimize.isOptimizedForStep) { err = SetOptimizeVariables (errmsg, model_time, timeStep); if (err) return deltaPoint; } finalVel.u = pat1Val.u * fOptimize.pat1ValScale + pat2Val.u * fOptimize.pat2ValScale; finalVel.v = pat1Val.v * fOptimize.pat1ValScale + pat2Val.v * fOptimize.pat2ValScale; if(leType == UNCERTAINTY_LE) { AddUncertainty(setIndex,leIndex,&finalVel,timeStep); } dLong = ((finalVel.u / METERSPERDEGREELAT) * timeStep) / LongToLatRatio3 (refPoint.pLat); dLat = (finalVel.v / METERSPERDEGREELAT) * timeStep; deltaPoint.p.pLong = dLong * 1000000; deltaPoint.p.pLat = dLat * 1000000; return deltaPoint; }