82 virtual void OdeFcn(
const double T,
const double *
const X,
double *
const XDot,
const bool isMajorTimeStep);
83 virtual void InitialConditionSetup(
const double T,
const double *
const currentIC,
double *
const updatedIC, ISimObjectCreator *
const creator);
84 virtual void FinalSetup(
const double T,
const double *
const X, ISimObjectCreator *
const creator);
86 void PreOdeFcn(
const double T,
const double *
const X, IStateUpdater* updater);
89 bool GetRayIntersection(
const Eigen::Vector3d& rayOrigin,
const Eigen::Vector3d& rayVector,
double& outDistance);
92 const virtual double* DragForceNet(
const double T,
const double *
const X);
93 const virtual double* DragForceSkirt(
const double T,
const double *
const X);
94 const virtual double* DragForceDepth(
const double T,
const double *
const X);
95 const virtual double* TopOutForceNet(
const double T,
const double*
const X,
int iTop);
96 const virtual double* BotOutPosition(
const double T,
const double*
const X);
97 const virtual double* RingOutPosition(
const double T,
const double*
const X);
98 const virtual double* NetOutPosition(
const double T,
const double*
const X);
99 const virtual double* NetOutPositionMat(
const double T,
const double*
const X,
int iIndex);
100 const virtual double* IngestionNumber(
const double T,
const double*
const X);
101 const virtual double* ObstacleOutPosition(
const double T,
const double*
const X);
102 const virtual double* ObstacleOutNormal(
const double T,
const double*
const X);
103 const virtual double* ObstacleOutDistance(
const double T,
const double*
const X);
104 const virtual double* ObstacleOutGuidance(
const double T,
const double*
const X);
105 const virtual double* ObstacleOutEtaReference(
const double T,
const double*
const X);
106 const virtual double* ObstacleOutVelocity(
const double T,
const double*
const X);
107 const virtual double* ObstacleOutVertical(
const double T,
const double*
const X);
108 const virtual double* TopBodyForce(
const double T,
const double *
const X);
109 const virtual double* PortOutForceNet(
const double T,
const double*
const X,
int iCon);
110 const virtual double* PortOutPositionNet(
const double T,
const double*
const X,
int iCon);
111 const virtual double* PortOutVelocityNet(
const double T,
const double*
const X,
int iCon);
112 const virtual double* PortOutCageVolume(
const double T,
const double*
const X);
113 const virtual double* PortOutCD(
const double T,
const double*
const X,
int iCon);
114 const virtual double* BotOutVelocity(
const double T,
const double*
const X);
115 const virtual double* CageTopCentre(
const double T,
const double*
const X);
116 const virtual double* FishDensity(
const double T,
const double*
const X);
117 const virtual double* FishSpeed(
const double T,
const double*
const X);
118 const virtual double* FishSpeedRel(
const double T,
const double*
const X);
119 const virtual double* RingOutForce(
const double T,
const double*
const X,
int iIndex);
120 const virtual double* NetTrackOutPosition(
const double T,
const double*
const X);
121 const virtual double* ChainOutForce(
const double T,
const double*
const X,
int iIndex);
122 const virtual double* OutCageWakePos(
const double T,
const double*
const X);
123 const virtual double* OutFishMeanPos(
const double T,
const double*
const X);
124 const virtual double* OutFishPosStd(
const double T,
const double*
const X);
129 double m_ncOutput[3];
130 const virtual double* NetCDFOutput(
const double T,
const double*
const X);
134#ifdef FH_VISUALIZATION
136 virtual void RenderInit(Ogre::Root *
const ogreRoot, ISimObjectCreator *
const creator);
138 virtual void RenderUpdate(
const double T,
const double *
const X);
143 CPrintDuringExec* m_logger;
148 int m_baseStateIndex;
149 int m_totalNumberOfPelletsEaten;
156 std::vector<Fish::IndividualFish> m_individuals;
157 std::vector<Fish::IndividualFish> temp_individuals;
161 bool m_useTemperatureAndLight;
162 double m_fractionOfWaveVelAddedToMovementAsBias;
165 long m_totalIngestionAttempts, m_successfulIngestionAttempts;
166 std::vector<int> m_ingestionList;
169 double m_DisOutTimeInt;
170 std::string m_DisOutFile;
172 double m_DisOutStart;
175 double m_IngestionNumber[2];
178 double m_ObstacleCirRate;
179 double m_ObstacleCirVel;
180 double m_ObstacleVerVel[2];
181 double m_ObstacleDisTK;
182 double m_ObstacleDepTK;
183 double m_ObstacleDepGR;
184 double m_ObstacleRefDT;
185 ISignalPort* m_ObstacleInPos;
186 ISignalPort* m_ObstacleInVel;
187 double m_ObstacleOutP[3];
188 double m_ObstacleOutN[3];
189 double m_ObstacleOutD;
190 double m_ObstacleOutG[3];
191 double m_ObstacleOutV[3];
192 double m_ObstacleOutVV[3];
193 double m_ObstacleOutGR[4];
196 Fish::vec3 m_FishObstVel;
198 double m_UpdateStepSize;
201 double m_FishInitialPos[4];
203 std::vector<int> m_FishID;
205 double m_SchoolVar[2];
206 Fish::vec3 m_SchoolVarP;
207 Fish::vec3 m_SchoolVarN;
209 bool m_BoolFishInVel;
210 ISignalPort* m_FishInVelN;
211 ISignalPort* m_FishInVelE;
212 ISignalPort* m_FishInVelD;
213 ISignalPort* m_FishInVelC;
215 bool m_BoolFishInWave;
216 ISignalPort* m_FishInWaveHm;
217 ISignalPort* m_FishInWaveTm;
219 bool m_BoolFishInSchool;
220 ISignalPort* m_FishInSchoolSpd;
223 bool m_BoolFishDirChk;
224 double m_FishDirChkTime;
226 double m_WaveWallResPar[3];
228 double m_OutFishDensityGrid;
230 double* m_OutFishDensityData;
231 double m_OutFishDensity[4];
232 double m_OutFishSpeed[3];
233 double m_OutFishSpeedRel[3];
239 double* m_OutCageNodePos;
240 const virtual double* PortOutCageNodePos(
const double T,
const double*
const X,
int index);
242 double m_CageWakePos[3];
244 double m_FishMeanPos[3];
246 double m_FishPosStd[3];
250 double m_prev_time = 0.0;
255#ifdef FH_VISUALIZATION
256 bool m_advancedFishAnim;
257 Ogre::SceneNode* m_childNode;
258 Ogre::ManualObject* m_fishRenderObj;
259 CFhCamera* m_FhCamera;
260 double m_FishColor[3];
263 double m_ParticleGridOrigin[3];
264 double m_ParticleGridDim[3];
265 double m_ParticleGridSize[3];
266 int m_ParticleGridNum[3];
269 Ogre::ParticleSystem* m_ParticleSystem;
270 Ogre::SceneNode* m_ParticleNode;
271 Ogre::ParticleEmitter* m_ParticleEmitter;
272 double m_ParticleSize[2];
273 double m_ParticleMultiplier;
274 double m_ParticleSpeedMultiplier;
275 double m_ParticleFadeRate;
277 double m_ParticleAngleSpread;
278 double m_ParticleColor[3];
279 double m_ParticleTimeToLive;
280 int m_ParticleSetTime;
281 double m_ParticleFlowReduction;
286 ISignalPort** m_wakeObjPort;
287 ISignalPort* m_wakeDirPort;
288 ISignalPort* m_wakeRatioPort;
289 ISignalPort* m_wakeValuePort;
290 double m_wakeObjRadius[3];
291 double m_wakeObjDepth[3];
292 double m_wakeMaxVisValue;
293 bool m_wakeVisReduction;
294 double m_wakeObjPower;
295 double GetWakeRatio(
const double T,
const double*
const X,
const double adPos[3]);