Example #1
0
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;
}