WSF
WsfEM_GroundWavePropagation.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 WSFEM_GROUNDWAVEPROPAGATION_HPP
13#define WSFEM_GROUNDWAVEPROPAGATION_HPP
14
15#include "wsf_export.h"
16
17#include <complex>
18
19#include "WsfEM_Antenna.hpp"
20#include "WsfEM_Interaction.hpp"
21#include "WsfEM_Propagation.hpp"
22#include "WsfEM_Types.hpp"
23class WsfEM_XmtrRcvr;
24
27{
28public:
31 ~WsfEM_GroundWavePropagation() override = default;
33
34 static WsfEM_Propagation* ObjectFactory(const std::string& aTypeName);
35
36 WsfEM_Propagation* Clone() const override;
37
38 bool ProcessInput(UtInput& aInput) override;
39
40 double ComputePropagationFactor(WsfEM_Interaction& aInteraction, WsfEnvironment& aEnvironment) override;
41
42protected:
43 void SetupExponentialAtmosphere(double& aScale, double& aD1P0);
44
45 void ModifyValuesForVerticalPol(double aScale,
46 double aD1P0,
47 std::complex<double>& aImpedance,
48 double& aD1P0V,
49 std::complex<double>& aImpedanceV);
50
52 double aScale,
53 double aD1P0,
54 std::complex<double>& aImpedance,
55 double& aPropagationFactor);
56
57 void GeometricalOptics(WsfEM_Interaction& aInteraction,
58 double aScale,
59 double aD1P0,
60 std::complex<double>& aImpedance,
61 double& aPropagationFactor);
62
64 int aMode,
65 std::complex<double>& aImpedance,
66 double aScale,
67 double aD1P0,
68 std::complex<double> aFid[9]);
69
70 double BasicTransmissionLoss(WsfEM_Interaction& aInteraction);
71
72 double ComputeGroundDistance(WsfEM_Interaction& aInteraction);
73
74 static std::complex<double> Zxi(WsfEM_GroundWavePropagation* aPtr,
75 int dummy,
76 int dummy1,
77 double dummy2,
78 std::complex<double>& aX,
79 std::complex<double>* aZ);
80
81 static std::complex<double> Zpsi(WsfEM_GroundWavePropagation* aPtr,
82 int dummy,
83 int dummy1,
84 double dummy2,
85 std::complex<double>& aY,
86 std::complex<double>* aZ);
87
89 int aMode,
90 std::complex<double>& aImpedance,
91 double aScale,
92 double aD1P0);
93
94 std::complex<double> PhaseIntegral(int aCode, std::complex<double>& aHeight, int aMode, double aScale);
95
96 void PFunctions(int aN, int aMode, double aScale, const std::complex<double>& aHeight);
97
98 void TurningPoint(double aScale, int aMode);
99
100 static void Integrate(
102 std::complex<double> (*aF)(WsfEM_GroundWavePropagation*, int, int, double, std::complex<double>&, std::complex<double>*),
103 std::complex<double>* aYi,
104 std::complex<double>* aYf,
105 std::complex<double> aXi,
106 std::complex<double> aXf,
107 double aError2,
108 double aStepIn,
109 int aN,
110 int aMode,
111 double aScale,
112 int aMStep);
113
114 static void IntegrationStep(
116 std::complex<double> (*aF)(WsfEM_GroundWavePropagation*, int, int, double, std::complex<double>&, std::complex<double>*),
117 std::complex<double>* aY1,
118 std::complex<double>* aY2,
119 std::complex<double> aX1,
120 std::complex<double> aH,
121 int aMode,
122 double aScale,
123 int aN);
124
125 void Height(int aMode,
126 double aScale,
127 std::complex<double>& aReflection,
128 std::complex<double>& aHeightGainFunction,
129 double aHeightA,
130 double aHeightB);
131
132 static std::complex<double> Hr(WsfEM_GroundWavePropagation* aPtr,
133 int aCode,
134 int aMode,
135 double aScale,
136 std::complex<double>& aHeight,
137 std::complex<double>* aReflection);
138
139 static std::complex<double> HTau(WsfEM_GroundWavePropagation* aPtr,
140 int aCode,
141 int aMode,
142 double aScale,
143 std::complex<double>& aHeight,
144 std::complex<double>* aHeightChangeFunction);
145
146 static std::complex<double> HrTau(WsfEM_GroundWavePropagation* aPtr,
147 int aCode,
148 int aMode,
149 double aScale,
150 std::complex<double>& aHeight,
151 std::complex<double>* aFunction);
152
153 std::complex<double> WaveReflection(int aFunctionCode,
154 int aCode,
155 int aMode,
156 double aScale,
157 std::complex<double>& aHeight,
158 std::complex<double>* aFunction);
159
160 static std::complex<double> Hfi(WsfEM_GroundWavePropagation* aPtr,
161 int aCode,
162 int aMode,
163 double aScale,
164 std::complex<double>& aHeight,
165 std::complex<double>* aFunction);
166
167 static std::complex<double> HfiTau(WsfEM_GroundWavePropagation* aPtr,
168 int aCode,
169 int aMode,
170 double aScale,
171 std::complex<double>& aHeight,
172 std::complex<double>* aFunction);
173
174 std::complex<double> WaveImpedanceFunction(int aFunctionCode,
175 int aCode,
176 int aMode,
177 double aScale,
178 std::complex<double>& aHeight,
179 std::complex<double>* aFunction);
180
181 double FlatEarthPropagation(WsfEM_Interaction& aInteraction,
182 double aScale,
183 std::complex<double>& aImpedance,
184 std::complex<double> aHeightLowC,
185 std::complex<double> aHeightHighC);
186
187 void YCalculation(std::complex<double> aHeightLow,
188 std::complex<double> aHeightHigh,
189 double aScale,
190 std::complex<double> aYd[7],
191 std::complex<double> aYr[3][7]);
192
193 void JCalculation(int aMaxN, std::complex<double>& aTau, std::complex<double>* aJ);
194
195 void JRCalculation(std::complex<double>& aTauP, std::complex<double>& aTauR, std::complex<double> aJrp[4][7]);
196
197 std::complex<double> WFunction(std::complex<double> aZ);
198
199 std::complex<double>
200 PhaseIntegralAB(int aCode, int aMode, double aScale, std::complex<double>& aHeightA, std::complex<double>& aHeightB);
201
202 std::complex<double> PhaseIntegralCombinations(int aCode,
203 int aMode,
204 double aScale,
205 std::complex<double> aHeightLow,
206 std::complex<double> aHeightHigh);
207
208 double DirectRayFunction(double aX, double aB, double aDistanceH, double aDistance);
209
210 void DirectRay(double aScale,
211 double aD1P0,
212 int aMode,
213 std::complex<double>& aHeightLow,
214 std::complex<double>& aHeightHigh,
215 double aDistance,
216 double aDistanceC,
217 double aDistanceH,
218 double aDistanceL,
219 std::complex<double> aF[9],
220 std::complex<double> aFdd[9],
221 std::complex<double> aG[9]);
222
232 double mDel;
240 std::complex<double> mWavenumberImaginary;
242 std::complex<double> mP;
246 std::complex<double> mIntegrationStep;
248 unsigned int mImpedanceCounter;
250 std::complex<double> mImpedanceFunction[9];
252 std::complex<double> mReflectionFunction[9];
254 std::complex<double> mReflectionDerivativeFunction[9];
256 unsigned int mReflectionCounter;
258 unsigned int mReflectionNF;
260 std::complex<double> mP0[9];
262 std::complex<double> mTurningPoint[9];
264 double mHeightChange[9];
266 std::complex<double> mDp[4];
268 double mXmtrAlt;
270 double mRcvrAlt;
271};
272
273#endif
#define WSF_EXPORT
Definition WsfXIO_Export.hpp:35
std::complex< double > PhaseIntegralAB(int aCode, int aMode, double aScale, std::complex< double > &aHeightA, std::complex< double > &aHeightB)
Definition WsfEM_GroundWavePropagation.cpp:2290
~WsfEM_GroundWavePropagation() override=default
double mWavenumber
frequency wavenumber
Definition WsfEM_GroundWavePropagation.hpp:238
double mConductivity
conductivity of Earth's surface
Definition WsfEM_GroundWavePropagation.hpp:226
static std::complex< double > Zxi(WsfEM_GroundWavePropagation *aPtr, int dummy, int dummy1, double dummy2, std::complex< double > &aX, std::complex< double > *aZ)
Definition WsfEM_GroundWavePropagation.cpp:763
std::complex< double > mReflectionDerivativeFunction[9]
Definition WsfEM_GroundWavePropagation.hpp:254
double BasicTransmissionLoss(WsfEM_Interaction &aInteraction)
Definition WsfEM_GroundWavePropagation.cpp:687
unsigned int mReflectionCounter
counter inside reflection function
Definition WsfEM_GroundWavePropagation.hpp:256
static void IntegrationStep(WsfEM_GroundWavePropagation *aPtr, std::complex< double >(*aF)(WsfEM_GroundWavePropagation *, int, int, double, std::complex< double > &, std::complex< double > *), std::complex< double > *aY1, std::complex< double > *aY2, std::complex< double > aX1, std::complex< double > aH, int aMode, double aScale, int aN)
Definition WsfEM_GroundWavePropagation.cpp:1341
std::complex< double > mTurningPoint[9]
turning point
Definition WsfEM_GroundWavePropagation.hpp:262
double FlatEarthPropagation(WsfEM_Interaction &aInteraction, double aScale, std::complex< double > &aImpedance, std::complex< double > aHeightLowC, std::complex< double > aHeightHighC)
Definition WsfEM_GroundWavePropagation.cpp:1699
static std::complex< double > HrTau(WsfEM_GroundWavePropagation *aPtr, int aCode, int aMode, double aScale, std::complex< double > &aHeight, std::complex< double > *aFunction)
Definition WsfEM_GroundWavePropagation.cpp:1494
void YCalculation(std::complex< double > aHeightLow, std::complex< double > aHeightHigh, double aScale, std::complex< double > aYd[7], std::complex< double > aYr[3][7])
Definition WsfEM_GroundWavePropagation.cpp:1822
void StartPropagation(WsfEM_GroundWavePropagation *aPtr, int aMode, std::complex< double > &aImpedance, double aScale, double aD1P0)
Definition WsfEM_GroundWavePropagation.cpp:792
static std::complex< double > Zpsi(WsfEM_GroundWavePropagation *aPtr, int dummy, int dummy1, double dummy2, std::complex< double > &aY, std::complex< double > *aZ)
Definition WsfEM_GroundWavePropagation.cpp:777
void PFunctions(int aN, int aMode, double aScale, const std::complex< double > &aHeight)
Definition WsfEM_GroundWavePropagation.cpp:1061
void JCalculation(int aMaxN, std::complex< double > &aTau, std::complex< double > *aJ)
Definition WsfEM_GroundWavePropagation.cpp:2020
std::complex< double > PhaseIntegralCombinations(int aCode, int aMode, double aScale, std::complex< double > aHeightLow, std::complex< double > aHeightHigh)
Definition WsfEM_GroundWavePropagation.cpp:2363
static std::complex< double > Hr(WsfEM_GroundWavePropagation *aPtr, int aCode, int aMode, double aScale, std::complex< double > &aHeight, std::complex< double > *aReflection)
Definition WsfEM_GroundWavePropagation.cpp:1468
double mXmtrAlt
altitude of "transmitter"
Definition WsfEM_GroundWavePropagation.hpp:268
void SetupExponentialAtmosphere(double &aScale, double &aD1P0)
Definition WsfEM_GroundWavePropagation.cpp:243
bool FarFieldTransmissionLoss(WsfEM_Interaction &aInteraction, double aScale, double aD1P0, std::complex< double > &aImpedance, double &aPropagationFactor)
Definition WsfEM_GroundWavePropagation.cpp:284
int mIntegrationPhase
integration phase in Runge-Kutta integration
Definition WsfEM_GroundWavePropagation.hpp:244
double mRcvrAlt
altitude of "receiver"
Definition WsfEM_GroundWavePropagation.hpp:270
std::complex< double > PhaseIntegral(int aCode, std::complex< double > &aHeight, int aMode, double aScale)
Definition WsfEM_GroundWavePropagation.cpp:932
double mTroposphereHeightScale
troposphere scale height (km's)
Definition WsfEM_GroundWavePropagation.hpp:230
std::complex< double > mImpedanceFunction[9]
Definition WsfEM_GroundWavePropagation.hpp:250
double mRelativePermittivity
relative permittivity of Earth's surface
Definition WsfEM_GroundWavePropagation.hpp:224
double mDel
del - unknown
Definition WsfEM_GroundWavePropagation.hpp:232
unsigned int mReflectionNF
Definition WsfEM_GroundWavePropagation.hpp:258
double mHeightChange[9]
height change
Definition WsfEM_GroundWavePropagation.hpp:264
double DirectRayFunction(double aX, double aB, double aDistanceH, double aDistance)
Definition WsfEM_GroundWavePropagation.cpp:2419
unsigned int mImpedanceCounter
counter inside impedance function
Definition WsfEM_GroundWavePropagation.hpp:248
WsfEM_GroundWavePropagation & operator=(const WsfEM_GroundWavePropagation &aRhs)=delete
void Eigen(WsfEM_GroundWavePropagation *aPtr, int aMode, std::complex< double > &aImpedance, double aScale, double aD1P0, std::complex< double > aFid[9])
Definition WsfEM_GroundWavePropagation.cpp:584
void JRCalculation(std::complex< double > &aTauP, std::complex< double > &aTauR, std::complex< double > aJrp[4][7])
Definition WsfEM_GroundWavePropagation.cpp:2087
std::complex< double > mWavenumberImaginary
Definition WsfEM_GroundWavePropagation.hpp:240
std::complex< double > mReflectionFunction[9]
Definition WsfEM_GroundWavePropagation.hpp:252
void TurningPoint(double aScale, int aMode)
Definition WsfEM_GroundWavePropagation.cpp:1139
double mWavenumberSquared
Definition WsfEM_GroundWavePropagation.hpp:239
WsfEM_GroundWavePropagation()
Definition WsfEM_GroundWavePropagation.cpp:35
void Height(int aMode, double aScale, std::complex< double > &aReflection, std::complex< double > &aHeightGainFunction, double aHeightA, double aHeightB)
Definition WsfEM_GroundWavePropagation.cpp:1386
std::complex< double > WFunction(std::complex< double > aZ)
Definition WsfEM_GroundWavePropagation.cpp:2171
static void Integrate(WsfEM_GroundWavePropagation *aPtr, std::complex< double >(*aF)(WsfEM_GroundWavePropagation *, int, int, double, std::complex< double > &, std::complex< double > *), std::complex< double > *aYi, std::complex< double > *aYf, std::complex< double > aXi, std::complex< double > aXf, double aError2, double aStepIn, int aN, int aMode, double aScale, int aMStep)
Definition WsfEM_GroundWavePropagation.cpp:1205
void ModifyValuesForVerticalPol(double aScale, double aD1P0, std::complex< double > &aImpedance, double &aD1P0V, std::complex< double > &aImpedanceV)
Definition WsfEM_GroundWavePropagation.cpp:261
std::complex< double > mIntegrationStep
integration step in Runge-Kutta integration
Definition WsfEM_GroundWavePropagation.hpp:246
double mTroposphereRefractivity
troposphere refractivity
Definition WsfEM_GroundWavePropagation.hpp:228
double mDistanceInterval
distance interval for computing transmission loss (km's)
Definition WsfEM_GroundWavePropagation.hpp:236
static std::complex< double > HTau(WsfEM_GroundWavePropagation *aPtr, int aCode, int aMode, double aScale, std::complex< double > &aHeight, std::complex< double > *aHeightChangeFunction)
Definition WsfEM_GroundWavePropagation.cpp:1481
static std::complex< double > HfiTau(WsfEM_GroundWavePropagation *aPtr, int aCode, int aMode, double aScale, std::complex< double > &aHeight, std::complex< double > *aFunction)
Definition WsfEM_GroundWavePropagation.cpp:1606
double ComputeGroundDistance(WsfEM_Interaction &aInteraction)
Definition WsfEM_GroundWavePropagation.cpp:743
double mMinDistance
minimum distance for computing transmission loss (km's)
Definition WsfEM_GroundWavePropagation.hpp:234
std::complex< double > mP
Definition WsfEM_GroundWavePropagation.hpp:242
std::complex< double > WaveImpedanceFunction(int aFunctionCode, int aCode, int aMode, double aScale, std::complex< double > &aHeight, std::complex< double > *aFunction)
Definition WsfEM_GroundWavePropagation.cpp:1622
void DirectRay(double aScale, double aD1P0, int aMode, std::complex< double > &aHeightLow, std::complex< double > &aHeightHigh, double aDistance, double aDistanceC, double aDistanceH, double aDistanceL, std::complex< double > aF[9], std::complex< double > aFdd[9], std::complex< double > aG[9])
Definition WsfEM_GroundWavePropagation.cpp:2429
static std::complex< double > Hfi(WsfEM_GroundWavePropagation *aPtr, int aCode, int aMode, double aScale, std::complex< double > &aHeight, std::complex< double > *aFunction)
Definition WsfEM_GroundWavePropagation.cpp:1593
std::complex< double > mP0[9]
function
Definition WsfEM_GroundWavePropagation.hpp:260
static WsfEM_Propagation * ObjectFactory(const std::string &aTypeName)
Factory method called by WsfEM_PropagationTypes.
Definition WsfEM_GroundWavePropagation.cpp:111
std::complex< double > mDp[4]
derivative of function P
Definition WsfEM_GroundWavePropagation.hpp:266
std::complex< double > WaveReflection(int aFunctionCode, int aCode, int aMode, double aScale, std::complex< double > &aHeight, std::complex< double > *aFunction)
virtual protected
Definition WsfEM_GroundWavePropagation.cpp:1506
void GeometricalOptics(WsfEM_Interaction &aInteraction, double aScale, double aD1P0, std::complex< double > &aImpedance, double &aPropagationFactor)
Definition WsfEM_GroundWavePropagation.cpp:454
Definition WsfEM_Interaction.hpp:68
WsfEM_Propagation()
Constructor.
Definition WsfEM_Propagation.cpp:20
virtual double ComputePropagationFactor(WsfEM_Interaction &aInteraction, WsfEnvironment &aEnvironment)=0
bool ProcessInput(UtInput &aInput) override
Definition WsfEM_Propagation.cpp:57
WsfEM_Propagation * Clone() const override=0
Definition WsfEM_XmtrRcvr.hpp:42
Definition WsfEnvironment.hpp:37
Copyrights Multiple, All Rights Reserved