WSF
WsfDirectedEnergyWeapon.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI
3//
4// The Advanced Framework for Simulation, Integration, and Modeling (AFSIM)
5//
6// Copyright 2003-2015 The Boeing Company. All rights reserved.
7//
8// The use, dissemination or disclosure of data in this file is subject to
9// limitation or restriction. See accompanying README and LICENSE for details.
10// ****************************************************************************
11
12#ifndef WSFDIRECTEDENERGYWEAPON_HPP
13#define WSFDIRECTEDENERGYWEAPON_HPP
14
15#include "wsf_mil_export.h"
16
17#include "WsfImplicitWeapon.hpp"
19
26class WSF_MIL_EXPORT WsfDirectedEnergyWeapon : public WsfImplicitWeapon
27{
28public:
29 WsfDirectedEnergyWeapon(const WsfScenario& aScenario);
31 ~WsfDirectedEnergyWeapon() override;
32
33 WsfWeapon* Clone() const override { return new WsfDirectedEnergyWeapon(*this); }
34
35 class Beam;
36
39 Beam* GetBeam() const { return mBeamPtr; }
40
41 void SetBeam(Beam* aBeamPtr);
42
43 FireResult Fire(double aSimTime, const FireTarget& aTarget, const FireOptions& aSettings) override;
44
45 void CeaseFire(double aSimTime) override;
46
48 virtual bool IsFiring() const;
49
50 void EngagementComplete(double aSimTime, WsfWeaponEngagement* aEngagementPtr) override;
51
53
54 WsfComponent* CloneComponent() const override { return Clone(); }
55 const int* GetComponentRoles() const override;
56 void* QueryInterface(int aRole) override;
58
64 class WSF_MIL_EXPORT Beam : public WsfObject
65 {
66 public:
67 Beam();
68 Beam(const Beam& aSrc);
69 Beam& operator=(const Beam&) = delete;
70 ~Beam() override = default;
71
72 bool ProcessInput(UtInput& aInput) override;
73
74 void Initialize();
75
78 virtual void Propagate(double /*aSimTime*/){}; // Should define in child classes
79
81 Beam* Clone() const override { return new Beam(*this); }
82
84 double GetPeakFluence() const { return mPeakFluence; }
85
87 void SetPeakFluence(double aPeakFluence) { mPeakFluence = aPeakFluence; }
88
91 double GetEdgeFluence() const { return mEdgeFluence; }
92
94 void SetEdgeFluence(double aEdgeFluence) { mEdgeFluence = aEdgeFluence; }
95
97 double GetEdgeRadius() const { return mEdgeRadius; }
98
100 void SetEdgeRadius(double aEdgeRadius) { mEdgeRadius = aEdgeRadius; }
101
103 double GetSemiMinorAxis() const { return mSpotSize; }
104
106 void SetSpotRadius(double aRadius) { mSpotSize = aRadius; }
107
109 double GetSpotRadius() const { return mSpotSize; }
110
111 double GetSemiMajorAxis() const;
112
114 virtual double GetIncidenceAngle() const { return mIncidenceAngle; }
115
116 virtual void SetIncidenceAngle(double aIncidenceAngle);
117
119 virtual double GetWavelength() const { return mWavelength; }
120
122 unsigned GetWavelength_nm() const { return mWavelength_nm; }
123
125 virtual void SetWavelength(double aWavelength);
126
128 virtual double GetApertureDiameter() const { return mApertureDiameter; } // todo deconflict with diameter
129
131 virtual void SetApertureDiameter(double aApertureDiameter) { mApertureDiameter = aApertureDiameter; }
132
134 virtual double GetInitialPower() const { return mInitialPower; }
135
137 virtual void SetInitialPower(double aInitialPower) { mInitialPower = aInitialPower; }
138
140 double GetPeakIrradiance() const { return mPeakIrradiance; }
141
143 void SetPeakIrradiance(double aPeakIrradiance) { mPeakIrradiance = aPeakIrradiance; }
144
146 double GetAverageIrradiance() const { return mAverageIrradiance; }
147
149 void SetAverageIrradiance(double aAverageIrradiance) { mAverageIrradiance = aAverageIrradiance; }
150
152 double GetEdgeIrradiance() const { return mEdgeIrradiance; }
153
155 void SetEdgeIrradiance(double aEdgeIrradiance) { mEdgeIrradiance = aEdgeIrradiance; }
156
158 virtual double GetPulseRepetitionFrequency() const { return mPulseRepetitionFrequency; }
159
161 virtual void SetPulseRepetitionFrequency(double aPRF) { mPulseRepetitionFrequency = aPRF; }
162
164 virtual double GetPulseWidth() const { return mPulseWidth; }
165
167 virtual void SetPulseWidth(double aPulseWidth) { mPulseWidth = aPulseWidth; }
168
169 virtual double GetEnergyDensity() const;
170
172 double GetEnergy() const { return mEnergyInSpot; }
173
175 void SetEnergy(double aEnergy) { mEnergyInSpot = aEnergy; }
176
178 double GetAveragePower() const { return mAveragePower; }
179
181 void SetAveragePower(double aAveragePower) { mAveragePower = aAveragePower; }
182
183 void GetOffsetLocationECS(double aLocationECS[3]) const;
184
185 void SetOffsetLocationECS(const double aLocationECS[3]);
186
187 private:
188 double mAveragePower;
189 double mInitialPower;
190 double mEnergyInSpot;
191 double mPeakFluence;
192 double mEdgeFluence;
193 double mPeakIrradiance;
194 double mAverageIrradiance;
195 double mEdgeIrradiance;
196 double mPulseRepetitionFrequency;
197 double mPulseWidth;
198 double mEdgeRadius;
199 double mSpotSize;
200 double mIncidenceAngle;
201 double mCosIncidenceAngle;
202 double mWavelength;
203 unsigned int mWavelength_nm;
204 double mApertureDiameter;
205 double mOffsetLocationECS[3];
206 };
207
208protected:
210
211 virtual bool BeginEngagement(double aSimTime, EngagementData* aEngagementDataPtr);
212
213private:
214 Beam* mBeamPtr;
215 bool mIsFiring;
216};
217
219
220#endif
#define WSF_DECLARE_COMPONENT_ROLE_TYPE(TYPE, ROLE)
Definition WsfComponentRoles.hpp:44
@ cWSF_COMPONENT_DIRECTED_ENERGY_WEAPON
Directed energy weapon component.
Definition WsfMilComponentRoles.hpp:31
Definition WsfComponent.hpp:39
Definition WsfDirectedEnergyWeapon.hpp:65
virtual double GetApertureDiameter() const
Return the diameter of the exit aperture of the beam producing the spot.
Definition WsfDirectedEnergyWeapon.hpp:128
Beam & operator=(const Beam &)=delete
virtual void Propagate(double)
Definition WsfDirectedEnergyWeapon.hpp:78
virtual double GetIncidenceAngle() const
Return the spot orientation angle.
Definition WsfDirectedEnergyWeapon.hpp:114
virtual double GetPulseWidth() const
Return the Pulse Width.
Definition WsfDirectedEnergyWeapon.hpp:164
void SetAveragePower(double aAveragePower)
Set the average power on target, integrated over the beam spot.
Definition WsfDirectedEnergyWeapon.hpp:181
void SetEnergy(double aEnergy)
Set the energy deposited during the engagement in the beam spot (J).
Definition WsfDirectedEnergyWeapon.hpp:175
void SetEdgeFluence(double aEdgeFluence)
Set the edge fluence, in W/m^2.
Definition WsfDirectedEnergyWeapon.hpp:94
double GetSemiMinorAxis() const
Same as GetEdgeRadius, above.
Definition WsfDirectedEnergyWeapon.hpp:103
virtual void SetPulseRepetitionFrequency(double aPRF)
Set the pulse repetition frequency.
Definition WsfDirectedEnergyWeapon.hpp:161
unsigned GetWavelength_nm() const
Return the characteristic wavelength of the beam as a string in nm.
Definition WsfDirectedEnergyWeapon.hpp:122
Beam()
Definition WsfDirectedEnergyWeapon.cpp:115
double GetAverageIrradiance() const
Return the average irradiance over the beam spot (W/m2).
Definition WsfDirectedEnergyWeapon.hpp:146
virtual double GetWavelength() const
Return the characteristic wavelength of the beam.
Definition WsfDirectedEnergyWeapon.hpp:119
virtual double GetPulseRepetitionFrequency() const
Return the Pulse Repetition Frequency.
Definition WsfDirectedEnergyWeapon.hpp:158
virtual void SetInitialPower(double aInitialPower)
Set initial power of the beam before any losses.
Definition WsfDirectedEnergyWeapon.hpp:137
double GetPeakIrradiance() const
Return the average irradiance.
Definition WsfDirectedEnergyWeapon.hpp:140
double GetSpotRadius() const
Return the spot radius, which for an elliptical spot is the same as the semi-minor axis.
Definition WsfDirectedEnergyWeapon.hpp:109
Beam * Clone() const override
Clone this object.
Definition WsfDirectedEnergyWeapon.hpp:81
void SetAverageIrradiance(double aAverageIrradiance)
Set the average irradiance over the beam spot.
Definition WsfDirectedEnergyWeapon.hpp:149
double GetEdgeIrradiance() const
Return the average irradiance over the beam spot (W/m2).
Definition WsfDirectedEnergyWeapon.hpp:152
void SetSpotRadius(double aRadius)
Set the spot radius, which for an elliptical spot is the same as the semi-minor axis.
Definition WsfDirectedEnergyWeapon.hpp:106
void SetPeakFluence(double aPeakFluence)
Set the peak fluence, in W/m^2.
Definition WsfDirectedEnergyWeapon.hpp:87
virtual void SetPulseWidth(double aPulseWidth)
Set the pulse width (0 == CW).
Definition WsfDirectedEnergyWeapon.hpp:167
double GetEdgeFluence() const
Definition WsfDirectedEnergyWeapon.hpp:91
void SetEdgeRadius(double aEdgeRadius)
Set the edge radius (i.e., the radius at which the edge fluence is calculated).
Definition WsfDirectedEnergyWeapon.hpp:100
void SetEdgeIrradiance(double aEdgeIrradiance)
Set the average irradiance over the beam spot.
Definition WsfDirectedEnergyWeapon.hpp:155
double GetAveragePower() const
Return the average power on target, integrated over the beam spot.
Definition WsfDirectedEnergyWeapon.hpp:178
void SetPeakIrradiance(double aPeakIrradiance)
Set the peak irradiance (W/m^2).
Definition WsfDirectedEnergyWeapon.hpp:143
double GetEdgeRadius() const
Return the edge radius (i.e., the radius at which the edge fluence is calculated).
Definition WsfDirectedEnergyWeapon.hpp:97
virtual double GetInitialPower() const
Return the initial power of the beam before any losses.
Definition WsfDirectedEnergyWeapon.hpp:134
~Beam() override=default
double GetPeakFluence() const
Return the peak fluence (i.e., the peak irradiance on target integrated over time).
Definition WsfDirectedEnergyWeapon.hpp:84
double GetEnergy() const
Return the total energy (i.e., the average irradiance on target integrated over time and area; J).
Definition WsfDirectedEnergyWeapon.hpp:172
virtual void SetApertureDiameter(double aApertureDiameter)
Set the diameter of the aperture through which the beam exits (m^2).
Definition WsfDirectedEnergyWeapon.hpp:131
Definition WsfDirectedEnergyWeapon.hpp:27
WsfDirectedEnergyWeapon(const WsfScenario &aScenario)
Definition WsfDirectedEnergyWeapon.cpp:26
WsfComponent * CloneComponent() const override
Definition WsfDirectedEnergyWeapon.hpp:54
Beam * GetBeam() const
Definition WsfDirectedEnergyWeapon.hpp:39
WsfWeapon * Clone() const override
Definition WsfDirectedEnergyWeapon.hpp:33
WsfDirectedEnergyWeapon & operator=(const WsfDirectedEnergyWeapon &)=delete
void EngagementComplete(double aSimTime, WsfWeaponEngagement *aEngagementPtr) override
Definition WsfImplicitWeapon.cpp:401
void CeaseFire(double aSimTime) override
Definition WsfImplicitWeapon.cpp:380
FireResult Fire(double aSimTime, const FireTarget &aTarget, const FireOptions &aSettings) override
Definition WsfImplicitWeapon.cpp:76
WsfImplicitWeapon(const WsfScenario &aScenario)
Definition WsfImplicitWeapon.cpp:27
WsfWeapon * Clone() const override
Definition WsfImplicitWeapon.cpp:56
bool Initialize(double aSimTime) override
Definition WsfImplicitWeapon.cpp:62
bool BeginEngagement(double aSimTime, EngagementData *aEngagementDataPtr)
Definition WsfImplicitWeapon.cpp:161
WsfObject()
This is the constructor for the WsfObject class.
Definition WsfObject.cpp:88
Contains the data required to create a simulation, and acts as the entry point for input file process...
Definition WsfScenario.hpp:111
Definition WsfWeaponEngagement.hpp:43
bool ProcessInput(UtInput &aInput) override
Definition WsfWeapon.cpp:276
WsfWeapon(const WsfScenario &aScenario)
Definition WsfWeapon.cpp:48
const int * GetComponentRoles() const override
Definition WsfWeapon.cpp:144
void * QueryInterface(int aRole) override
Definition WsfWeapon.cpp:154
Copyrights Multiple, All Rights Reserved