FhSim  3.1.0
Marine systems simulation
Loading...
Searching...
No Matches
PorousDiscWakeSource.h
1#pragma once
2
8#include <fhsim/ISimObjectLogger.h>
9#include <fhsim/simobject/SimObject.h>
10#include <marenv/wake/WakeTypes.h>
11#include <memory>
12#include <string>
13
14namespace marenv::wake
15{
16class SourceSetWake;
17} // namespace marenv::wake
18
19namespace environment
20{
21class EnvironmentProvider;
22} // namespace environment
23
24namespace environmentmodels
25{
26
85class PorousDiscWakeSource : public SimObject
86{
87public:
95 PorousDiscWakeSource(std::string SimObjectName, ISimObjectCreator* Creator);
96 ~PorousDiscWakeSource() override;
97
109 void FinalSetup(double T, const double* X, ISimObjectCreator* Creator) override;
110
121 void PreOdeFcn(double T, const double* X, IStateUpdater* updater) override;
122
124 void OdeFcn(double T, const double* X, double* XDot) const override;
125
126private:
132 void WidenAboveMaxThrustCoefficient(ISimObjectCreator* creator, const std::string& strengthName);
133
138 void FollowRelativeFlow(double T);
139
141 void PublishFixedAxis();
142
144 void UpdateSeabedImage();
145
146 environment::EnvironmentProvider* m_pEnvironment = nullptr;
147 std::shared_ptr<marenv::wake::SourceSetWake> m_pWake;
148
150 double m_sourceVelocity[3] {};
151 marenv::wake::KernelParams m_kernelParams;
152 double m_setupTime = 0.0;
153 double m_seabedDepth = 0.0;
154 bool m_followFlow = true;
155 bool m_seabedChecked = false;
156 ISimObjectLogger* m_logger = nullptr;
157};
158
159} // namespace environmentmodels
Definition PorousDiscWakeSource.h:86
void OdeFcn(double T, const double *X, double *XDot) const override
No state: nothing to integrate.
void FinalSetup(double T, const double *X, ISimObjectCreator *Creator) override
PorousDiscWakeSource(std::string SimObjectName, ISimObjectCreator *Creator)
void PreOdeFcn(double T, const double *X, IStateUpdater *updater) override
Environment SimObjects.
Definition Environment.h:25
Definition WakeTypes.h:36
Definition WakeTypes.h:102