12#ifndef WSFEM_GROUNDWAVEPROPAGATION_HPP
13#define WSFEM_GROUNDWAVEPROPAGATION_HPP
15#include "wsf_export.h"
47 std::complex<double>& aImpedance,
49 std::complex<double>& aImpedanceV);
54 std::complex<double>& aImpedance,
55 double& aPropagationFactor);
60 std::complex<double>& aImpedance,
61 double& aPropagationFactor);
65 std::complex<double>& aImpedance,
68 std::complex<double> aFid[9]);
78 std::complex<double>& aX,
79 std::complex<double>* aZ);
85 std::complex<double>& aY,
86 std::complex<double>* aZ);
90 std::complex<double>& aImpedance,
94 std::complex<double>
PhaseIntegral(
int aCode, std::complex<double>& aHeight,
int aMode,
double aScale);
96 void PFunctions(
int aN,
int aMode,
double aScale,
const std::complex<double>& aHeight);
103 std::complex<double>* aYi,
104 std::complex<double>* aYf,
105 std::complex<double> aXi,
106 std::complex<double> aXf,
117 std::complex<double>* aY1,
118 std::complex<double>* aY2,
119 std::complex<double> aX1,
120 std::complex<double> aH,
127 std::complex<double>& aReflection,
128 std::complex<double>& aHeightGainFunction,
136 std::complex<double>& aHeight,
137 std::complex<double>* aReflection);
143 std::complex<double>& aHeight,
144 std::complex<double>* aHeightChangeFunction);
150 std::complex<double>& aHeight,
151 std::complex<double>* aFunction);
157 std::complex<double>& aHeight,
158 std::complex<double>* aFunction);
164 std::complex<double>& aHeight,
165 std::complex<double>* aFunction);
171 std::complex<double>& aHeight,
172 std::complex<double>* aFunction);
178 std::complex<double>& aHeight,
179 std::complex<double>* aFunction);
183 std::complex<double>& aImpedance,
184 std::complex<double> aHeightLowC,
185 std::complex<double> aHeightHighC);
188 std::complex<double> aHeightHigh,
190 std::complex<double> aYd[7],
191 std::complex<double> aYr[3][7]);
193 void JCalculation(
int aMaxN, std::complex<double>& aTau, std::complex<double>* aJ);
195 void JRCalculation(std::complex<double>& aTauP, std::complex<double>& aTauR, std::complex<double> aJrp[4][7]);
197 std::complex<double>
WFunction(std::complex<double> aZ);
200 PhaseIntegralAB(
int aCode,
int aMode,
double aScale, std::complex<double>& aHeightA, std::complex<double>& aHeightB);
205 std::complex<double> aHeightLow,
206 std::complex<double> aHeightHigh);
208 double DirectRayFunction(
double aX,
double aB,
double aDistanceH,
double aDistance);
213 std::complex<double>& aHeightLow,
214 std::complex<double>& aHeightHigh,
219 std::complex<double> aF[9],
220 std::complex<double> aFdd[9],
221 std::complex<double> aG[9]);
242 std::complex<double>
mP;
260 std::complex<double>
mP0[9];
266 std::complex<double>
mDp[4];
#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