WSF
WsfGENAP_AntennaPattern.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#ifndef WSFGENAP_ANTENNAPATTERN_HPP
13#define WSFGENAP_ANTENNAPATTERN_HPP
14
16
31
33{
34public:
44
53
55 {
56 public:
57 enum
58 {
59 cNAZMAX = 3601, // As defined in genap.f
60 cNELMAX = 1801 // As defined in genap.f
61 };
62
63 GENAP_Data();
64 ~GENAP_Data() override = default;
65 ;
66
67 bool ProcessInput(WsfAntennaPattern& aPattern, UtInput& aInput) override;
68 bool Initialize(WsfAntennaPattern& aAntennaPattern) override;
69
72
74
84
97
100
101 private:
102 void GeneratePattern();
103
104 void ComputeApertureWeights(double aWavelength);
105
106 void ComputeCrudePattern(double aWavelength);
107
108 void PatternComplexFourierTransform(const double* aWeightingFunction,
109 int aNumApertureSamples,
110 double aApertureLength,
111 int aNumOutputSamples,
112 double aFirstAngle,
113 double aAngleSpacing,
114 double* aGainPattern);
115
116 void PatternFourierTransform(const double* aWeightingFunction,
117 int aNumSamples,
118 double aApertureLength,
119 int aNumOutputSamples,
120 double aFirstAngle,
121 double aAngleSpacing,
122 bool aVolt,
123 double* aGainPattern);
124
125 void CalculateBeamwidth(Distribution aDistributionFunction,
126 int aMaxNumPoints,
127 double aMinAngle,
128 double aAngularSpacing,
129 const double* aAntennaPattern,
130 double& aBeamwidth,
131 double& aMaxSidelobe,
132 double& aSidelobePosition,
133 double& aNullPosition);
134
135 void ComputeApertureSize(double aBeamwidth, double aSidelobeLevelDB, double aWavelength, double& aApertureSize);
136
137 void ApertureDistribution(Distribution aDistributionFunction,
138 double aExponent,
139 double aBroadside,
140 double aApertureSize,
141 double& aEfficiency,
142 double aSidelobeLevelDB,
143 int aNumSamples,
144 double* aWeightingFunction);
145
146 void ModifyApertureDistribution(double* aXAxisDistribution,
147 int aNumXPoints,
148 const double* aYAxisDistribution,
149 int aNumYPoints,
150 double aBlockageX,
151 double aBlockageY,
152 ApertureShape aApertureShape,
153 BlockageShape aBlockageShape,
154 double* aModifiedXDistribution);
155
156 double IlluminationEfficiency(double* aXAxisDistribution,
157 int aNumXPoints,
158 const double* aYAxisDistribution,
159 int aNumYPoints,
160 double aBlockageX,
161 double aBlockageY,
162 ApertureShape aApertureShape,
163 BlockageShape aBlockageShape);
164
165 void CosecantBeam(double aExponent,
166 double aBroadside,
167 double aApertureSize,
168 int aNumSamples,
169 double* aRealPattern,
170 double* aImagPattern,
171 double& aEfficiency);
172
173 void CosecantRolloff(int aVectorSize,
174 double aMinimumAngle,
175 double aAngularSpacing,
176 double* aPattern,
177 double aBeamwidth,
178 double aRolloff);
179
180 void CosecantFix(int aVectorSize, double aAngularSpacing, double& aMinimumAngle, double* aPattern);
181
182 double InterpolatedValue(const double* aVector, int aNumPoints, double aX);
183
184 void VectorReplace(int aVectorSize, const double* aInputVector, double* aOutputVector);
185
186 void VectorProduct(int aVectorSize, const double* aFirstVector, const double* aSecondVector, double* aOutputVector);
187
188 double ZSum(int aVectorSize, const double* aVector);
189
190 void TaylorOne(double aSidelobeRatio, int aVectorSize, double* aDistribution);
191
192 double BetaFunction(double aBeta);
193
194 double ZeroBessel(double aX);
195
196 double KFactor(Distribution aDistribution, double aExponent);
197
198 double Energy(int aNum, const double* aRealPattern, const double* aImagPattern);
199 };
200
202
203 static WsfAntennaPattern* ObjectFactory(const std::string& aTypeName);
204
205 WsfAntennaPattern* Clone() const override;
206
207 bool ProcessInput(UtInput& aInput) override;
208
213 ApertureShape GetApertureShape() const override { return GenapData()->mApertureShape; }
214 Distribution GetAzDistribution() const { return GenapData()->mAzDistribution; }
215 Distribution GetElDistribution() const { return GenapData()->mElDistribution; }
216 double GetAzExponent() const { return GenapData()->mAzExponent; }
217 double GetElExponent() const { return GenapData()->mElExponent; }
218 double GetElCosecantLimit() const { return GenapData()->mElCosecantLimit; }
219 double GetAzSidelobeLevelInput() const { return GenapData()->mAzSidelobeLevelInput; }
220 double GetElSidelobeLevelInput() const { return GenapData()->mElSidelobeLevelInput; }
222
223protected:
225
228
229private:
230 GENAP_Data* GenapData() const { return dynamic_cast<GENAP_Data*>(mSharedDataPtr); }
231};
232
233#endif
Data that is shared amongst all instances of a given ALARM antenna pattern.
Definition WsfALARM_AntennaPattern.hpp:60
ApertureShape
Definition WsfALARM_AntennaPattern.hpp:50
WsfALARM_AntennaPattern(ALARM_Data *aBaseDataPtr)
Definition WsfALARM_AntennaPattern.cpp:27
BaseData * mSharedDataPtr
Definition WsfAntennaPattern.hpp:123
WsfAntennaPattern()
Definition WsfAntennaPattern.cpp:25
Data that is shared amongst all instances of a given ALARM antenna pattern.
Definition WsfGENAP_AntennaPattern.hpp:55
double mAzExponent
Definition WsfGENAP_AntennaPattern.hpp:75
double mAzSidelobePosition
Definition WsfGENAP_AntennaPattern.hpp:82
GENAP_Data()
Definition WsfGENAP_AntennaPattern.cpp:57
double mAzBlockage
Definition WsfGENAP_AntennaPattern.hpp:81
@ cNELMAX
Definition WsfGENAP_AntennaPattern.hpp:60
@ cNAZMAX
Definition WsfGENAP_AntennaPattern.hpp:59
double mApertureHeight
Definition WsfGENAP_AntennaPattern.hpp:99
int mAzSamples
Definition WsfGENAP_AntennaPattern.hpp:78
double mElBlockageWeights[cNELMAX]
Definition WsfGENAP_AntennaPattern.hpp:92
double mAzSidelobeLevel
Definition WsfGENAP_AntennaPattern.hpp:77
double mElRotation
Definition WsfGENAP_AntennaPattern.hpp:85
Distribution mElDistribution
Definition WsfGENAP_AntennaPattern.hpp:71
bool Initialize(WsfAntennaPattern &aAntennaPattern) override
Definition WsfGENAP_AntennaPattern.cpp:103
int mElSamples
Definition WsfGENAP_AntennaPattern.hpp:90
double mElSidelobeLevel
Definition WsfGENAP_AntennaPattern.hpp:88
Distribution mAzDistribution
Definition WsfGENAP_AntennaPattern.hpp:70
BlockageShape mBlockageShape
Definition WsfGENAP_AntennaPattern.hpp:73
double mApertureWidth
Definition WsfGENAP_AntennaPattern.hpp:98
double mElSidelobePosition
Definition WsfGENAP_AntennaPattern.hpp:95
double mElSidelobeLevelInput
Definition WsfGENAP_AntennaPattern.hpp:87
double mAzBlockageWeights[cNAZMAX]
Definition WsfGENAP_AntennaPattern.hpp:80
double mAzSidelobeLevelInput
Definition WsfGENAP_AntennaPattern.hpp:76
double mElCosecantLimit
Definition WsfGENAP_AntennaPattern.hpp:89
double mElNullPosition
Definition WsfGENAP_AntennaPattern.hpp:96
double mElWeights[cNELMAX]
Definition WsfGENAP_AntennaPattern.hpp:91
bool ProcessInput(WsfAntennaPattern &aPattern, UtInput &aInput) override
Definition WsfGENAP_AntennaPattern.cpp:174
double mAzNullPosition
Definition WsfGENAP_AntennaPattern.hpp:83
double mElBlockage
Definition WsfGENAP_AntennaPattern.hpp:93
double mElExponent
Definition WsfGENAP_AntennaPattern.hpp:86
double mAzWeights[cNAZMAX]
Definition WsfGENAP_AntennaPattern.hpp:79
double mElEfficiency
Definition WsfGENAP_AntennaPattern.hpp:94
WsfGENAP_AntennaPattern operator=(const WsfGENAP_AntennaPattern &aRhs) const
Assignment is not supported.
double GetElSidelobeLevelInput() const
Definition WsfGENAP_AntennaPattern.hpp:220
bool ProcessInput(UtInput &aInput) override
Definition WsfGENAP_AntennaPattern.cpp:46
Distribution GetElDistribution() const
Definition WsfGENAP_AntennaPattern.hpp:215
double GetAzExponent() const
Definition WsfGENAP_AntennaPattern.hpp:216
WsfGENAP_AntennaPattern()
Definition WsfGENAP_AntennaPattern.cpp:20
Distribution GetAzDistribution() const
Definition WsfGENAP_AntennaPattern.hpp:214
ApertureShape GetApertureShape() const override
Definition WsfGENAP_AntennaPattern.hpp:213
WsfGENAP_AntennaPattern(const WsfGENAP_AntennaPattern &aSrc)=default
double GetAzSidelobeLevelInput() const
Definition WsfGENAP_AntennaPattern.hpp:219
double GetElCosecantLimit() const
Definition WsfGENAP_AntennaPattern.hpp:218
Distribution
Illumination distribution function.
Definition WsfGENAP_AntennaPattern.hpp:37
@ cDF_COSINE
Definition WsfGENAP_AntennaPattern.hpp:40
@ cDF_UNIFORM
Definition WsfGENAP_AntennaPattern.hpp:39
@ cDF_COSECANT
Definition WsfGENAP_AntennaPattern.hpp:41
@ cDF_UNKNOWN
Definition WsfGENAP_AntennaPattern.hpp:38
@ cDF_BW_SLL
Definition WsfGENAP_AntennaPattern.hpp:42
double GetElExponent() const
Definition WsfGENAP_AntennaPattern.hpp:217
WsfAntennaPattern * Clone() const override
Definition WsfGENAP_AntennaPattern.cpp:40
static WsfAntennaPattern * ObjectFactory(const std::string &aTypeName)
Definition WsfGENAP_AntennaPattern.cpp:29
BlockageShape
aperture blockage shape
Definition WsfGENAP_AntennaPattern.hpp:47
@ cBS_RECTANGULAR
Definition WsfGENAP_AntennaPattern.hpp:50
@ cBS_ELLIPTICAL
Definition WsfGENAP_AntennaPattern.hpp:49
@ cBS_NONE
Definition WsfGENAP_AntennaPattern.hpp:48
@ cBS_DIAMOND
Definition WsfGENAP_AntennaPattern.hpp:51
Copyrights Multiple, All Rights Reserved