Marine systems simulation
Loading...
Searching...
No Matches
FishPopulation.h
1#ifndef FISH_POPULATION_H
2#define FISH_POPULATION_H
3
4//#define CNetStructure_DO_PROFILE
5
6// Includes
7#include <string>
8#include <math.h>
9
10#include "SimObject.h"
11#include "sfh/timers/ProfilerWallclock.h"
12#include "sfh/math/math.h"
13
14#include "IndividualFish.h"
15#include "particles/PelletField.h"
16#include "fish/FishParameters.h"
17#include "environment/ArtificialLightSource.h"
18#include "fish/Z_Tree.h"
19#include <CIntegratorOptions.h>
20#include <CFhSimMgr.h>
21#include "fish/FishCage.h"
22#include <CPrintDuringExec.h>
23
24#include <CNCField.h> // BS_Temporary
25
26
27#ifdef FH_VISUALIZATION
28#include "CFhCamera.h"
29#endif
30
71//Class definition
72class FishPopulation : public SimObject
73{
74public:
76 FishPopulation(std::string simObjectName, ISimObjectCreator *creator);
78 virtual ~FishPopulation();
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);
82 //const double *outBehaviouralState(const double T, const double *const X, int iFish);
83 void PreOdeFcn(const double T, const double *const X, IStateUpdater* updater);
84
85 //============================================================ Herman_dev
86 bool GetRayIntersection(const Eigen::Vector3d& rayOrigin, const Eigen::Vector3d& rayVector, double& outDistance);
87 //============================================================ Herman_dev
88
89 const virtual double* DragForceNet(const double T, const double *const X); // Output function for drag force on the net
90 const virtual double* DragForceSkirt(const double T, const double *const X); // Output function for drag force on the skirt
91 const virtual double* DragForceDepth(const double T, const double *const X); // Output function for drag force on the net above a given depth
92 const virtual double* TopOutForceNet(const double T, const double* const X, int iTop); // Output function for top connection force on the net
93 const virtual double* BotOutPosition(const double T, const double* const X); // Output function for bottom positions
94 const virtual double* RingOutPosition(const double T, const double* const X); // Output function for ring positions
95 const virtual double* NetOutPosition(const double T, const double* const X); // Output function for net positions (single)
96 const virtual double* NetOutPositionMat(const double T, const double* const X, int iIndex); // Output function for net positions (multiple)
97 const virtual double* IngestionNumber(const double T, const double* const X); // Output function for number of ingestion
98 const virtual double* ObstacleOutPosition(const double T, const double* const X); // Output function for obstacle positions
99 const virtual double* ObstacleOutNormal(const double T, const double* const X); // Output function for obstacle normal
100 const virtual double* ObstacleOutDistance(const double T, const double* const X); // Output function for obstacle distance
101 const virtual double* ObstacleOutGuidance(const double T, const double* const X); // Output function for obstacle center
102 const virtual double* ObstacleOutEtaReference(const double T, const double* const X); // Output function for obstacle EtaReference
103 const virtual double* ObstacleOutVelocity(const double T, const double* const X); // Output function for obstacle velocities
104 const virtual double* ObstacleOutVertical(const double T, const double* const X); // Output function for obstacle vertical vector
105 const virtual double* TopBodyForce(const double T, const double *const X); // Output function for top body force
106 const virtual double* PortOutForceNet(const double T, const double* const X, int iCon); // Output function for port connection force on the net
107 const virtual double* PortOutPositionNet(const double T, const double* const X, int iCon); // Output function for port connection position on the net
108 const virtual double* PortOutVelocityNet(const double T, const double* const X, int iCon); // Output function for port connection velocity on the net
109 const virtual double* PortOutCageVolume(const double T, const double* const X); // Output function for cage volume
110 const virtual double* PortOutCD(const double T, const double* const X, int iCon); // Output function for drag coefficient
111 const virtual double* BotOutVelocity(const double T, const double* const X); // Output function for bottom velocities
112 const virtual double* CageTopCentre(const double T, const double* const X); // Output function for cage top centre
113 const virtual double* FishDensity(const double T, const double* const X); // Output function for fish density
114 const virtual double* FishSpeed(const double T, const double* const X); // Output function for fish swimming speed
115 const virtual double* FishSpeedRel(const double T, const double* const X); // Output function for fish swimming speed relative to flow
116 const virtual double* RingOutForce(const double T, const double* const X, int iIndex); // Output function for connection forces to external bottom ring
117 const virtual double* NetTrackOutPosition(const double T, const double* const X); // Output function for net track positions (6DOF x 2)
118 const virtual double* ChainOutForce(const double T, const double* const X, int iIndex); // Output function for connection forces to external chain
119 const virtual double* OutCageWakePos(const double T, const double* const X); // Output function for cage wake position
120 const virtual double* OutFishMeanPos(const double T, const double* const X); // Output function for fish mean position
121 const virtual double* OutFishPosStd(const double T, const double* const X); // Output function for fish position standard deviation
122
123 // BS_Temporary =========================
124 environmentmodels::CNCField* m_ncField;
125 double m_ncInput[3];
126 double m_ncOutput[3];
127 const virtual double* NetCDFOutput(const double T, const double* const X);
128 // BS_Temporary =========================
129
130 //EIGEN_MAKE_ALIGNED_OPERATOR_NEW
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);
136#endif
137
138protected:
139 // Fhsim logger
140 CPrintDuringExec* m_logger;
141
142 //std::mt19937& RNG(){return m_rng;}
143
144 // States
145 int m_baseStateIndex;
146 int m_totalNumberOfPelletsEaten;
147
148 FishResources m_resources;
149
150 std::mt19937 m_rng;
151
152 //double m_prevTextOutputTime;
153 std::vector<Fish::IndividualFish> m_individuals;
154 std::vector<Fish::IndividualFish> temp_individuals;
155 //ISimObjectCreator* m_creator;
156
157 //double* m_fishStatuses;
158 bool m_useTemperatureAndLight;
159 double m_fractionOfWaveVelAddedToMovementAsBias;
160 //long m_numPelletsForTimeStep;
161
162 long m_totalIngestionAttempts, m_successfulIngestionAttempts;
163 std::vector<int> m_ingestionList;
164
165 //============================================================================ biao_dev
166 double m_DisOutTimeInt;
167 std::string m_DisOutFile;
168 int m_DisOutNum;
169 double m_DisOutStart;
170 double m_DisOutStop;
171
172 double m_IngestionNumber[2];
173
174 int m_ObstacleNum;
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];
191
192 int m_FishObstNum;
193 Fish::vec3 m_FishObstVel;
194
195 double m_UpdateStepSize;
196 int m_UpdateNum;
197
198 double m_FishInitialPos[4];
199
200 std::vector<int> m_FishID;
201
202 double m_SchoolVar[2];
203 Fish::vec3 m_SchoolVarP;
204 Fish::vec3 m_SchoolVarN;
205
206 bool m_BoolFishInVel;
207 ISignalPort* m_FishInVelN;
208 ISignalPort* m_FishInVelE;
209 ISignalPort* m_FishInVelD;
210 ISignalPort* m_FishInVelC;
211
212 bool m_BoolFishInWave;
213 ISignalPort* m_FishInWaveHm;
214 ISignalPort* m_FishInWaveTm;
215
216 bool m_BoolFishInSchool;
217 ISignalPort* m_FishInSchoolSpd;
218 //double m_FishSpdHC;
219
220 bool m_BoolFishDirChk;
221 double m_FishDirChkTime;
222
223 double m_WaveWallResPar[3];
224
225 double m_OutFishDensityGrid;
226 int m_OutDataNum[4];
227 double* m_OutFishDensityData;
228 double m_OutFishDensity[4];
229 double m_OutFishSpeed[3];
230 double m_OutFishSpeedRel[3];
231 double m_MeanWeight;
232
233 double m_debStaTime;
234
235 bool m_OutCageNode;
236 double* m_OutCageNodePos;
237 const virtual double* PortOutCageNodePos(const double T, const double* const X, int index);
238
239 double m_CageWakePos[3];
240
241 double m_FishMeanPos[3];
242
243 double m_FishPosStd[3];
244 //============================================================================ biao_dev
245
246 //============================================================================ herman_dev
247 double m_prev_time = 0.0;
248 //============================================================================ herman_dev
249
250
251
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];
258
259 //============================================================================ biao_dev
260 double m_ParticleGridOrigin[3];
261 double m_ParticleGridDim[3];
262 double m_ParticleGridSize[3];
263 int m_ParticleGridNum[3];
264 int m_ParticleNum;
265
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;
273 int m_ParticleQuota;
274 double m_ParticleAngleSpread;
275 double m_ParticleColor[3];
276 double m_ParticleTimeToLive;
277 int m_ParticleSetTime;
278 double m_ParticleFlowReduction;
279
280 // ==================== Wake effect (BiaoSu)
281 bool m_wakeEffect;
282 int m_wakeObjNum;
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]);
293 // ==================== Wake effect (BiaoSu)
294 //============================================================================ biao_dev
295#endif
296};
297
298
299#endif
Definition FishPopulation.h:73
FishPopulation(std::string simObjectName, ISimObjectCreator *creator)
The constructor sets the pointer to the output object and the parser object.
virtual ~FishPopulation()
The destructor deletes dynamically allocated memory.
Definition IndividualFish.h:29