79 virtual void OdeFcn(
const double T,
const double *
const X,
double *
const XDot,
const bool isMajorTimeStep);
80 virtual void InitialConditionSetup(
const double T,
const double *
const currentIC,
double *
const updatedIC, ISimObjectCreator *
const creator);
81 virtual void FinalSetup(
const double T,
const double *
const X, ISimObjectCreator *
const creator);
83 void PreOdeFcn(
const double T,
const double *
const X, IStateUpdater* updater);
86 bool GetRayIntersection(
const Eigen::Vector3d& rayOrigin,
const Eigen::Vector3d& rayVector,
double& outDistance);
89 const virtual double* DragForceNet(
const double T,
const double *
const X);
90 const virtual double* DragForceSkirt(
const double T,
const double *
const X);
91 const virtual double* DragForceDepth(
const double T,
const double *
const X);
92 const virtual double* TopOutForceNet(
const double T,
const double*
const X,
int iTop);
93 const virtual double* BotOutPosition(
const double T,
const double*
const X);
94 const virtual double* RingOutPosition(
const double T,
const double*
const X);
95 const virtual double* NetOutPosition(
const double T,
const double*
const X);
96 const virtual double* NetOutPositionMat(
const double T,
const double*
const X,
int iIndex);
97 const virtual double* IngestionNumber(
const double T,
const double*
const X);
98 const virtual double* ObstacleOutPosition(
const double T,
const double*
const X);
99 const virtual double* ObstacleOutNormal(
const double T,
const double*
const X);
100 const virtual double* ObstacleOutDistance(
const double T,
const double*
const X);
101 const virtual double* ObstacleOutGuidance(
const double T,
const double*
const X);
102 const virtual double* ObstacleOutEtaReference(
const double T,
const double*
const X);
103 const virtual double* ObstacleOutVelocity(
const double T,
const double*
const X);
104 const virtual double* ObstacleOutVertical(
const double T,
const double*
const X);
105 const virtual double* TopBodyForce(
const double T,
const double *
const X);
106 const virtual double* PortOutForceNet(
const double T,
const double*
const X,
int iCon);
107 const virtual double* PortOutPositionNet(
const double T,
const double*
const X,
int iCon);
108 const virtual double* PortOutVelocityNet(
const double T,
const double*
const X,
int iCon);
109 const virtual double* PortOutCageVolume(
const double T,
const double*
const X);
110 const virtual double* PortOutCD(
const double T,
const double*
const X,
int iCon);
111 const virtual double* BotOutVelocity(
const double T,
const double*
const X);
112 const virtual double* CageTopCentre(
const double T,
const double*
const X);
113 const virtual double* FishDensity(
const double T,
const double*
const X);
114 const virtual double* FishSpeed(
const double T,
const double*
const X);
115 const virtual double* FishSpeedRel(
const double T,
const double*
const X);
116 const virtual double* RingOutForce(
const double T,
const double*
const X,
int iIndex);
117 const virtual double* NetTrackOutPosition(
const double T,
const double*
const X);
118 const virtual double* ChainOutForce(
const double T,
const double*
const X,
int iIndex);
119 const virtual double* OutCageWakePos(
const double T,
const double*
const X);
120 const virtual double* OutFishMeanPos(
const double T,
const double*
const X);
121 const virtual double* OutFishPosStd(
const double T,
const double*
const X);
124 environmentmodels::CNCField* m_ncField;
126 double m_ncOutput[3];
127 const virtual double* NetCDFOutput(
const double T,
const double*
const X);
131#ifdef FH_VISUALIZATION
133 virtual void RenderInit(Ogre::Root *
const ogreRoot, ISimObjectCreator *
const creator);
135 virtual void RenderUpdate(
const double T,
const double *
const X);
140 CPrintDuringExec* m_logger;
145 int m_baseStateIndex;
146 int m_totalNumberOfPelletsEaten;
153 std::vector<Fish::IndividualFish> m_individuals;
154 std::vector<Fish::IndividualFish> temp_individuals;
158 bool m_useTemperatureAndLight;
159 double m_fractionOfWaveVelAddedToMovementAsBias;
162 long m_totalIngestionAttempts, m_successfulIngestionAttempts;
163 std::vector<int> m_ingestionList;
166 double m_DisOutTimeInt;
167 std::string m_DisOutFile;
169 double m_DisOutStart;
172 double m_IngestionNumber[2];
175 double m_ObstacleCirRate;
176 double m_ObstacleCirVel;
177 double m_ObstacleVerVel[2];
178 double m_ObstacleDisTK;
179 double m_ObstacleDepTK;
180 double m_ObstacleDepGR;
181 double m_ObstacleRefDT;
182 ISignalPort* m_ObstacleInPos;
183 ISignalPort* m_ObstacleInVel;
184 double m_ObstacleOutP[3];
185 double m_ObstacleOutN[3];
186 double m_ObstacleOutD;
187 double m_ObstacleOutG[3];
188 double m_ObstacleOutV[3];
189 double m_ObstacleOutVV[3];
190 double m_ObstacleOutGR[4];
193 Fish::vec3 m_FishObstVel;
195 double m_UpdateStepSize;
198 double m_FishInitialPos[4];
200 std::vector<int> m_FishID;
202 double m_SchoolVar[2];
203 Fish::vec3 m_SchoolVarP;
204 Fish::vec3 m_SchoolVarN;
206 bool m_BoolFishInVel;
207 ISignalPort* m_FishInVelN;
208 ISignalPort* m_FishInVelE;
209 ISignalPort* m_FishInVelD;
210 ISignalPort* m_FishInVelC;
212 bool m_BoolFishInWave;
213 ISignalPort* m_FishInWaveHm;
214 ISignalPort* m_FishInWaveTm;
216 bool m_BoolFishInSchool;
217 ISignalPort* m_FishInSchoolSpd;
220 bool m_BoolFishDirChk;
221 double m_FishDirChkTime;
223 double m_WaveWallResPar[3];
225 double m_OutFishDensityGrid;
227 double* m_OutFishDensityData;
228 double m_OutFishDensity[4];
229 double m_OutFishSpeed[3];
230 double m_OutFishSpeedRel[3];
236 double* m_OutCageNodePos;
237 const virtual double* PortOutCageNodePos(
const double T,
const double*
const X,
int index);
239 double m_CageWakePos[3];
241 double m_FishMeanPos[3];
243 double m_FishPosStd[3];
247 double m_prev_time = 0.0;
252#ifdef FH_VISUALIZATION
253 bool m_advancedFishAnim;
254 Ogre::SceneNode* m_childNode;
255 Ogre::ManualObject* m_fishRenderObj;
256 CFhCamera* m_FhCamera;
257 double m_FishColor[3];
260 double m_ParticleGridOrigin[3];
261 double m_ParticleGridDim[3];
262 double m_ParticleGridSize[3];
263 int m_ParticleGridNum[3];
266 Ogre::ParticleSystem* m_ParticleSystem;
267 Ogre::SceneNode* m_ParticleNode;
268 Ogre::ParticleEmitter* m_ParticleEmitter;
269 double m_ParticleSize[2];
270 double m_ParticleMultiplier;
271 double m_ParticleSpeedMultiplier;
272 double m_ParticleFadeRate;
274 double m_ParticleAngleSpread;
275 double m_ParticleColor[3];
276 double m_ParticleTimeToLive;
277 int m_ParticleSetTime;
278 double m_ParticleFlowReduction;
283 ISignalPort** m_wakeObjPort;
284 ISignalPort* m_wakeDirPort;
285 ISignalPort* m_wakeRatioPort;
286 ISignalPort* m_wakeValuePort;
287 double m_wakeObjRadius[3];
288 double m_wakeObjDepth[3];
289 double m_wakeMaxVisValue;
290 bool m_wakeVisReduction;
291 double m_wakeObjPower;
292 double GetWakeRatio(
const double T,
const double*
const X,
const double adPos[3]);