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