WSF
WsfEM_ALARM_Propagation.hpp
Go to the documentation of this file.
1// ****************************************************************************
2// CUI//REL TO USA ONLY
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// ****************************************************************************
13// This module was designed by Science Applications International
14// Corporation (SAIC) for the US Air Force, for use in the
15// Advanced Low Altitude Radar Model (ALARM), owned by Wright
16// Labs, Analysis and Evaluation Branch (WL/AAWA-1).
17//
18// This module is derived from algorithms and code developed for
19// the Air Force by the Massachusetts Institute of Technology's
20// (MIT) Lincoln Laboratory. Under the terms ofthe license
21// granted by MIT, the following restriction applies:
22//
23// COPYRIGHT (C) 1985,1988 MIT LINCOLN LABORATORY ALL RIGHTS RESERVED
24// ****************************************************************************
25
26#ifndef WSFEM_ALARM_PROPAGATION_HPP
27#define WSFEM_ALARM_PROPAGATION_HPP
28
29#include <complex>
30#include <string>
31#include <vector>
32
33class WsfEM_Antenna;
35#include "WsfEM_Interaction.hpp"
36#include "WsfEM_Propagation.hpp"
37#include "WsfEM_Types.hpp"
38class WsfEM_XmtrRcvr;
39class WsfSimulation;
40
44
46{
47public:
50 ~WsfEM_ALARM_Propagation() override = default;
51
52 static void ResetState();
53
54 static WsfEM_Propagation* ObjectFactory(const std::string& aTypeName);
55
56 WsfEM_Propagation* Clone() const override;
57
58 double ComputePropagationFactor(WsfEM_Interaction& aInteraction, WsfEnvironment& aEnvironment) override;
59
60 bool Initialize(WsfEM_XmtrRcvr* aXmtrRcvrPtr) override;
61
62 bool ProcessInput(UtInput& aInput) override;
63
64protected:
66
67private:
68 using COMPLEX = std::complex<float>;
69 using antenna = WsfEM_ALARM_Antenna::antenna;
70
72 //{@
73 void laprop(antenna& ant_data,
74 double alphat,
75 double const3,
76 double const4,
77 double deltag,
78 double epslnt,
79 double epsln1,
80 COMPLEX& fsquared,
81 double grangt,
82 double htmmsl,
83 int ipolar,
84 bool water_cover,
85 bool lpprop,
86 bool& masked,
87 double pulwid,
88 double ranget,
89 double rkfact,
90 double rlamda,
91 double rrough,
92 double sigmho,
93 double sitlam,
94 double sitphi,
95 double tanept,
96 double tarlam,
97 double tarphi,
98 double taurlx,
99 double wndkno,
100 double xtprof,
101 double ztprof,
102 bool diff_sw,
103 bool use_surface_height,
104 double surface_height,
105 double soil_moisture,
106 double water_temp,
107 bool sea_water);
108 static void first(std::vector<double>& dratio,
109 double& frcmin,
110 double hammsl,
111 int& indxfc,
112 int nprofl,
113 double rlamda,
114 double tanept,
115 const std::vector<double>& xprofl,
116 double xtprof,
117 const std::vector<double>& zprofl);
118
119 static void second(double deltag,
120 const std::vector<double>& elvmsl,
121 double grangt,
122 double& hmdzro,
123 int indxfc,
124 int nprofl,
125 double rlamda);
126
127 static void linfit(double& aline0, double& aline1, double deltag, const std::vector<double>& elvmsl, int nprofl);
129
131
132 void sediff(antenna& ant_data,
133 double alphat,
134 double const3,
135 double const4,
136 bool& convrg,
137 double deltag,
138 const std::vector<double>& dratio,
139 const std::vector<double>& elvmsl,
140 double epslnt,
141 double& fsubs,
142 double grangt,
143 double hammsl,
144 double htmmsl,
145 int indxfc,
146 int nprofl,
147 double rkfact,
148 double rlamda,
149 const std::vector<double>& xprofl,
150 const std::vector<double>& zprofl);
151
152 void kediff(antenna& ant_data,
153 double alphat,
154 std::vector<double>& dratio,
155 double epslnt,
156 double& fsubk,
157 double hammsl,
158 int indxfc,
159 int nprofl,
160 double rlamda,
161 const std::vector<double>& xprofl,
162 double xtprof,
163 const std::vector<double>& zprofl,
164 double ztprof);
165
166 static COMPLEX airy(const COMPLEX& zargmt);
167
168 static COMPLEX conect(const COMPLEX& zargmt);
169
170 static COMPLEX gaussq(const COMPLEX& zargmt);
171
172 static COMPLEX powers(const COMPLEX& zargmt);
173
174 static void
175 parfit(double& apara0, double& apara1, double& apara2, double deltag, const std::vector<double>& elvmsl, int nprofl);
176
177 static void deygou(antenna& ant_data,
178 double alphat,
179 const std::vector<double>& dratio,
180 double epslnt,
181 double& fsubk,
182 double hammsl,
183 int ileft,
184 int imain,
185 int indxfc,
186 int iright,
187 double rlamda,
188 const std::vector<double>& xprofl,
189 double xtprof,
190 const std::vector<double>& zprofl,
191 double ztprof);
192
193 static void fresnl(double& cosint, double& sinint, double xargmt);
195
197
198 void mltpth(antenna& ant_data,
199 double alphat,
200 double epslnt,
201 double epsln1,
202 COMPLEX& fsubm,
203 double hammsl,
204 std::vector<int>& iend,
205 int ipolar,
206 std::vector<int>& istart,
207 bool water_cover,
208 int& nareas,
209 int nprofl,
210 double pulwid,
211 double ranget,
212 double rlamda,
213 double rrough_i,
214 double sigmho,
215 const std::vector<double>& tanepp,
216 double taurlx,
217 std::vector<bool>& visibl,
218 double wndkno,
219 const std::vector<double>& xprofl,
220 double xtprof,
221 const std::vector<double>& zprofl,
222 double ztprof,
223 const std::vector<double>& elvmsl,
224 bool use_surface_height,
225 double surface_height,
226 double soil_moisture,
227 double water_temp,
228 bool sea_water);
229
230 static void rflect(double gamma, int ipolar, COMPLEX& rcoeff, COMPLEX ysquar);
231
232 static COMPLEX water_dielectric(double freq, bool sea_water, double water_temp);
233
234 static COMPLEX soil_dielectric(double freq, double soil_moisture);
235
236 static double stddev(int n, const std::vector<double>& a);
238
240
241 static void GetLandCoverData(int aLandCover, double& aDielectricConstant, double& aConductivity);
243
245
246 static double RoughSurfaceReflection(int aLandForm, bool aOnWater, int aSeaState, double aWavelength, double aPsi);
248
249 std::string water_type;
250 double soil_moisture;
251 double surface_height;
252 double water_temp;
253 double epsilon_one;
254 double sigma_zero;
255 double roughness;
256 double sea_relaxation;
257 double wind_speed;
258
259 bool diff_sw;
260 bool prop_sw;
261 bool sea_water;
262 bool use_surface_height;
263
270
271 static bool uninit;
272 static int aprofile;
273 static std::vector<double> dratio;
274 static std::vector<double> elvmsl;
275 static std::vector<int> iend;
276 static std::vector<int> istart;
277 static std::vector<double> tanepp;
278 static std::vector<bool> visibl;
279 static std::vector<double> xprofl;
280 static std::vector<double> zprofl;
281
282 static int indxmx_size;
283 static std::vector<int> indxmx;
285
286 bool mUseMIT_LL_DataTables; // true if to use MIT-LL data tables (from SALRAM)
287 bool mAllowCalculationShortcuts;
288 int mWSF_LandCover; // land cover from WSF environment
289 int mWSF_LandForm; // land form from WSF environment
290 int mWSF_SeaState; // sea state from WSF environment
291 WsfSimulation* mSimulationPtr;
292};
293#endif
#define gamma
Definition WsfNORAD_OrbitalPropagator.cpp:676
Definition WsfEM_ALARM_Antenna.hpp:23
WsfEM_Propagation * Clone() const override
Definition WsfEM_ALARM_Propagation.cpp:179
double ComputePropagationFactor(WsfEM_Interaction &aInteraction, WsfEnvironment &aEnvironment) override
Definition WsfEM_ALARM_Propagation.cpp:186
static void ResetState()
Reset all the global/static data to default values.
Definition WsfEM_ALARM_Propagation.cpp:147
bool Initialize(WsfEM_XmtrRcvr *aXmtrRcvrPtr) override
Definition WsfEM_ALARM_Propagation.cpp:462
static WsfEM_Propagation * ObjectFactory(const std::string &aTypeName)
Factory method called by WsfEM_PropagationTypes.
Definition WsfEM_ALARM_Propagation.cpp:167
bool ProcessInput(UtInput &aInput) override
Definition WsfEM_ALARM_Propagation.cpp:482
~WsfEM_ALARM_Propagation() override=default
WsfEM_ALARM_Propagation & operator=(const WsfEM_ALARM_Propagation &)=delete
WsfEM_ALARM_Propagation()
Definition WsfEM_ALARM_Propagation.cpp:95
Definition WsfEM_Antenna.hpp:49
Definition WsfEM_Interaction.hpp:68
WsfEM_Propagation()
Constructor.
Definition WsfEM_Propagation.cpp:20
Definition WsfEM_XmtrRcvr.hpp:42
Definition WsfEnvironment.hpp:37
The main controller for a simulation.
Definition WsfSimulation.hpp:109
Copyrights Multiple, All Rights Reserved