KiCad PCB EDA Suite
RECTWAVEGUIDE Class Reference

#include <rectwaveguide.h>

Inheritance diagram for RECTWAVEGUIDE:
TRANSLINE

Public Member Functions

 RECTWAVEGUIDE ()
 
void setProperty (enum PRMS_ID aPrmId, double aValue)
 
double getProperty (enum PRMS_ID aPrmId)
 
void getProperties ()
 @function getProperties More...
 
void checkProperties ()
 @function checkProperties More...
 
void setResult (int, double, const char *)
 
void setResult (int, const char *)
 
bool isSelected (enum PRMS_ID aPrmId)
 
void Init ()
 
virtual void synthesize ()
 
virtual void calc ()
 
void analyze ()
 

Public Attributes

const char * m_Name
 
KIGFX::COLOR4D errCol = KIGFX::COLOR4D( 1, 0.63, 0.63, 1 )
 
KIGFX::COLOR4D warnCol = KIGFX::COLOR4D( 1, 1, 0.57, 1 )
 
KIGFX::COLOR4D okCol = KIGFX::COLOR4D( 1, 1, 1, 1 )
 

Protected Member Functions

bool minimizeZ0Error1D (double *)
 @function minimizeZ0Error1D More...
 
double skin_depth ()
 @function skin_depth calculate skin depth More...
 
void ellipke (double, double &, double &)
 
double ellipk (double)
 
void setErrorLevel (PRMS_ID, char)
 @function setErrorLevel More...
 

Protected Attributes

double m_parameters [EXTRA_PRMS_COUNT]
 
double len
 
double er_eff
 
double ang_l
 

Private Member Functions

double kval_square ()
 
double kc_square (int, int)
 
double fc (int, int)
 
double alphac ()
 
double alphac_cutoff ()
 
double alphad ()
 
void get_rectwaveguide_sub ()
 
void get_rectwaveguide_comp ()
 
void get_rectwaveguide_phys ()
 
void get_rectwaveguide_elec ()
 
void show_results () override
 Shows results. More...
 
void calcAnalyze () override
 Computation for analysis. More...
 
void calcSynthesize () override
 Computation for synthesis. More...
 
void showAnalyze () override
 Shows synthesis results and checks for errors / warnings. More...
 
void showSynthesize () override
 Shows analysis results and checks for errors / warnings. More...
 

Private Attributes

double mur
 
double a
 
double b
 
double l
 
double Z0
 
double Z0EH
 
double mur_eff
 
double atten_dielectric
 
double atten_cond
 
double fc10
 

Detailed Description

Definition at line 33 of file rectwaveguide.h.

Constructor & Destructor Documentation

◆ RECTWAVEGUIDE()

RECTWAVEGUIDE::RECTWAVEGUIDE ( )

Definition at line 31 of file rectwaveguide.cpp.

31 : TRANSLINE(),
32 mur( 0.0 ), // magnetic permeability of substrate
33 a( 0.0 ), // width of waveguide
34 b( 0.0 ), // height of waveguide
35 l( 0.0 ), // length of waveguide
36 Z0( 0.0 ), // characteristic impedance
37 Z0EH( 0.0 ), // characteristic impedance of field quantities*/
38 mur_eff( 0.0 ), // Effective mag. permeability
39 atten_dielectric( 0.0 ), // Loss in dielectric (dB)
40 atten_cond( 0.0 ), // Loss in conductors (dB)
41 fc10( 1.0 ) // Cutoff frequency for TE10 mode
42{
43 m_Name = "RectWaveGuide";
44 Init();
45}
double atten_dielectric
Definition: rectwaveguide.h:49
double atten_cond
Definition: rectwaveguide.h:50
void Init()
Definition: transline.cpp:90
const char * m_Name
Definition: transline.h:84

References TRANSLINE::Init(), and TRANSLINE::m_Name.

Member Function Documentation

◆ alphac()

double RECTWAVEGUIDE::alphac ( )
private

Definition at line 88 of file rectwaveguide.cpp.

89{
90 double Rs, f_c;
91 double ac;
92 short m, n, mmax, nmax;
93 double* a = &m_parameters[PHYS_A_PRM];
94 double* b = &m_parameters[PHYS_B_PRM];
95 double* f = &m_parameters[FREQUENCY_PRM];
96 double* murc = &m_parameters[MURC_PRM];
97 double* sigma = &m_parameters[SIGMA_PRM];
98
99 Rs = sqrt( M_PI * *f * *murc * MU0 / *sigma );
100 ac = 0.0;
101 mmax = (int) floor( *f / fc( 1, 0 ) );
102 nmax = mmax;
103
104 /* below from Ramo, Whinnery & Van Duzer */
105
106 /* TE(m,n) modes */
107 for( n = 0; n <= nmax; n++ )
108 {
109 for( m = 1; m <= mmax; m++ )
110 {
111 f_c = fc( m, n );
112
113 if( *f > f_c )
114 {
115 switch( n )
116 {
117 case 0:
118 ac += ( Rs / ( *b * ZF0 * sqrt( 1.0 - pow( ( f_c / *f ), 2.0 ) ) ) )
119 * ( 1.0 + ( ( 2 * *b / *a ) * pow( ( f_c / *f ), 2.0 ) ) );
120 break;
121
122 default:
123 ac += ( ( 2. * Rs ) / ( *b * ZF0 * sqrt( 1.0 - pow( ( f_c / *f ), 2.0 ) ) ) )
124 * ( ( ( 1. + ( *b / *a ) ) * pow( ( f_c / *f ), 2.0 ) )
125 + ( ( 1. - pow( ( f_c / *f ), 2.0 ) )
126 * ( ( ( *b / *a )
127 * ( ( ( *b / *a ) * pow( m, 2. ) )
128 + pow( n, 2. ) ) )
129 / ( pow( ( *b * m / *a ), 2.0 )
130 + pow( n, 2.0 ) ) ) ) );
131 break;
132 }
133 }
134 }
135 }
136
137 /* TM(m,n) modes */
138 for( n = 1; n <= nmax; n++ )
139 {
140 for( m = 1; m <= mmax; m++ )
141 {
142 f_c = fc( m, n );
143
144 if( *f > f_c )
145 {
146 ac += ( ( 2. * Rs ) / ( *b * ZF0 * sqrt( 1.0 - pow( ( f_c / *f ), 2.0 ) ) ) )
147 * ( ( ( pow( m, 2.0 ) * pow( ( *b / *a ), 3.0 ) ) + pow( n, 2. ) )
148 / ( ( pow( ( m * *b / *a ), 2. ) ) + pow( n, 2.0 ) ) );
149 }
150 }
151 }
152
153 ac = ac * 20.0 * log10( exp( 1. ) ); /* convert from Np/m to db/m */
154 return ac;
155}
double fc(int, int)
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
#define PHYS_B_PRM
Definition: rectwaveguide.h:31
#define PHYS_A_PRM
Definition: rectwaveguide.h:30
@ SIGMA_PRM
Definition: transline.h:69
@ FREQUENCY_PRM
Definition: transline.h:51
@ MURC_PRM
Definition: transline.h:50
#define ZF0
Definition: units.h:62
#define MU0
Definition: units.h:60

References a, b, fc(), FREQUENCY_PRM, TRANSLINE::m_parameters, MU0, MURC_PRM, PHYS_A_PRM, PHYS_B_PRM, SIGMA_PRM, and ZF0.

Referenced by calcAnalyze(), and calcSynthesize().

◆ alphac_cutoff()

double RECTWAVEGUIDE::alphac_cutoff ( )
private

Definition at line 161 of file rectwaveguide.cpp.

162{
163 double acc;
164
165 acc = sqrt( kc_square( 1, 0 ) - kval_square() );
166 acc = 20 * log10( exp( 1.0 ) ) * acc;
167 return acc;
168}
double kc_square(int, int)
double kval_square()

References kc_square(), and kval_square().

Referenced by calcAnalyze(), and calcSynthesize().

◆ alphad()

double RECTWAVEGUIDE::alphad ( )
private

Definition at line 174 of file rectwaveguide.cpp.

175{
176 double k_square, beta;
177 double ad;
178
179 k_square = kval_square();
180 beta = sqrt( k_square - kc_square( 1, 0 ) );
181
182 ad = ( k_square * m_parameters[TAND_PRM] ) / ( 2.0 * beta );
183 ad = ad * 20.0 * log10( exp( 1. ) ); /* convert from Np/m to db/m */
184 return ad;
185}
@ TAND_PRM
Definition: transline.h:40

References kc_square(), kval_square(), TRANSLINE::m_parameters, and TAND_PRM.

Referenced by calcAnalyze(), and calcSynthesize().

◆ analyze()

void TRANSLINE::analyze ( )
inherited

Definition at line 211 of file transline.cpp.

212{
215 calcAnalyze();
216 showAnalyze();
217 show_results();
218}
void getProperties()
@function getProperties
Definition: transline.cpp:150
void checkProperties()
@function checkProperties
Definition: transline.cpp:169
virtual void showAnalyze()
Shows synthesis results and checks for errors / warnings.
Definition: transline.h:112
virtual void show_results()
Shows results.
Definition: transline.h:122
virtual void calcAnalyze()
Computation for analysis.
Definition: transline.h:102

References TRANSLINE::calcAnalyze(), TRANSLINE::checkProperties(), TRANSLINE::getProperties(), TRANSLINE::show_results(), and TRANSLINE::showAnalyze().

Referenced by PANEL_TRANSLINE::OnTranslineAnalyse().

◆ calc()

virtual void TRANSLINE::calc ( )
inlinevirtualinherited

Definition at line 97 of file transline.h.

97{}

◆ calcAnalyze()

void RECTWAVEGUIDE::calcAnalyze ( )
overrideprivatevirtual

Computation for analysis.

Reimplemented from TRANSLINE.

Definition at line 243 of file rectwaveguide.cpp.

244{
245 double lambda_g;
246 double k_square;
247
248 k_square = kval_square();
249
250 if( kc_square( 1, 0 ) <= k_square )
251 {
252 /* propagating modes */
253
254 // Z0 definition using fictive voltages and currents
257 / sqrt( 1.0 - pow( ( fc( 1, 0 ) / m_parameters[FREQUENCY_PRM] ), 2.0 ) );
258
259 /* calculate electrical angle */
260 lambda_g = 2.0 * M_PI / sqrt( k_square - kc_square( 1, 0 ) );
262 2.0 * M_PI * m_parameters[PHYS_LEN_PRM] / lambda_g; /* in radians */
266 ( 1.0 - pow( fc( 1, 0 ) / m_parameters[FREQUENCY_PRM], 2.0 ) );
267 }
268 else
269 {
270 /* evanascent modes */
271 m_parameters[Z0_PRM] = 0;
276 }
277}
double alphac_cutoff()
@ LOSS_DIELECTRIC_PRM
Definition: transline.h:71
@ EPSILON_EFF_PRM
Definition: transline.h:74
@ LOSS_CONDUCTOR_PRM
Definition: transline.h:72
@ MUR_PRM
Definition: transline.h:48
@ Z0_PRM
Definition: transline.h:52
@ PHYS_LEN_PRM
Definition: transline.h:60
@ ANG_L_PRM
Definition: transline.h:55
@ EPSILONR_PRM
Definition: transline.h:39

References alphac(), alphac_cutoff(), alphad(), ANG_L_PRM, EPSILON_EFF_PRM, EPSILONR_PRM, fc(), FREQUENCY_PRM, kc_square(), kval_square(), LOSS_CONDUCTOR_PRM, LOSS_DIELECTRIC_PRM, TRANSLINE::m_parameters, MUR_PRM, PHYS_LEN_PRM, Z0_PRM, and ZF0.

◆ calcSynthesize()

void RECTWAVEGUIDE::calcSynthesize ( )
overrideprivatevirtual

Computation for synthesis.

Reimplemented from TRANSLINE.

Definition at line 286 of file rectwaveguide.cpp.

287{
288 double lambda_g, k_square, beta;
289 /* solve for a */
291 C0
292 / ( sqrt( ( m_parameters[MUR_PRM] * m_parameters[EPSILONR_PRM] ) ) * 2
293 * m_parameters[FREQUENCY_PRM] * sqrt( 1
294 - pow( ( ZF0 * sqrt( m_parameters[MUR_PRM]
297 ,2.0 ) ) );
298
299 k_square = kval_square();
300 beta = sqrt( k_square - kc_square( 1, 0 ) );
301 lambda_g = 2.0 * M_PI / beta;
302 m_parameters[PHYS_LEN_PRM] = ( m_parameters[ANG_L_PRM] * lambda_g ) / ( 2.0 * M_PI ); /* in m */
303
304 if( kc_square( 1, 0 ) <= k_square )
305 {
306 /*propagating modes */
307 beta = sqrt( k_square - kc_square( 1, 0 ) );
308 lambda_g = 2.0 * M_PI / beta;
312 ( 1.0 - pow( ( fc( 1, 0 ) / m_parameters[FREQUENCY_PRM] ), 2.0 ) );
313 }
314 else
315 {
316 /*evanascent modes */
317 m_parameters[Z0_PRM] = 0;
322 }
323}
#define C0
Definition: units.h:61

References alphac(), alphac_cutoff(), alphad(), ANG_L_PRM, C0, EPSILON_EFF_PRM, EPSILONR_PRM, fc(), FREQUENCY_PRM, kc_square(), kval_square(), LOSS_CONDUCTOR_PRM, LOSS_DIELECTRIC_PRM, TRANSLINE::m_parameters, MUR_PRM, PHYS_A_PRM, PHYS_LEN_PRM, Z0_PRM, and ZF0.

◆ checkProperties()

void TRANSLINE::checkProperties ( )
inherited

@function checkProperties

Checks the input parameters (ie: negative length). Does not check for incompatibility between values as this depends on the line shape.

Definition at line 169 of file transline.cpp.

170{
171 // Do not check for values that are results of analyzing / synthesizing
172 // Do not check for transline specific incompatibilities ( like " conductor height should be lesser than dielectric height")
173 if( !std::isfinite( m_parameters[EPSILONR_PRM] ) || m_parameters[EPSILONR_PRM] <= 0 )
175
176 if( !std::isfinite( m_parameters[TAND_PRM] ) || m_parameters[TAND_PRM] < 0 )
178
179 if( !std::isfinite( m_parameters[RHO_PRM] ) || m_parameters[RHO_PRM] < 0 )
181
182 if( !std::isfinite( m_parameters[H_PRM] ) || m_parameters[H_PRM] < 0 )
184
185 if( !std::isfinite( m_parameters[TWISTEDPAIR_TWIST_PRM] )
188
189 if( !std::isfinite( m_parameters[STRIPLINE_A_PRM] ) || m_parameters[STRIPLINE_A_PRM] <= 0 )
191
192 if( !std::isfinite( m_parameters[H_T_PRM] ) || m_parameters[H_T_PRM] <= 0 )
194
195 // How can we check ROUGH_PRM ?
196
197 if( !std::isfinite( m_parameters[MUR_PRM] ) || m_parameters[MUR_PRM] < 0 )
199
200 if( !std::isfinite( m_parameters[TWISTEDPAIR_EPSILONR_ENV_PRM] )
203
204 if( !std::isfinite( m_parameters[MURC_PRM] ) || m_parameters[MURC_PRM] < 0 )
206
207 if( !std::isfinite( m_parameters[FREQUENCY_PRM] ) || m_parameters[FREQUENCY_PRM] <= 0 )
209}
void setErrorLevel(PRMS_ID, char)
@function setErrorLevel
Definition: transline.cpp:435
@ TWISTEDPAIR_EPSILONR_ENV_PRM
Definition: transline.h:49
@ RHO_PRM
Definition: transline.h:41
@ STRIPLINE_A_PRM
Definition: transline.h:45
@ H_T_PRM
Definition: transline.h:44
@ TWISTEDPAIR_TWIST_PRM
Definition: transline.h:43
@ H_PRM
Definition: transline.h:42
#define TRANSLINE_WARNING
Definition: transline.h:30

References EPSILONR_PRM, FREQUENCY_PRM, H_PRM, H_T_PRM, TRANSLINE::m_parameters, MUR_PRM, MURC_PRM, RHO_PRM, TRANSLINE::setErrorLevel(), STRIPLINE_A_PRM, TAND_PRM, TRANSLINE_WARNING, TWISTEDPAIR_EPSILONR_ENV_PRM, and TWISTEDPAIR_TWIST_PRM.

Referenced by TRANSLINE::analyze(), and TRANSLINE::synthesize().

◆ ellipk()

double TRANSLINE::ellipk ( double  k)
protectedinherited

Definition at line 324 of file transline.cpp.

325{
326 double r, lost;
327
328 ellipke( k, r, lost );
329 return r;
330}
void ellipke(double, double &, double &)
Definition: transline.cpp:259
E_SERIE r
Definition: eserie.cpp:41

References TRANSLINE::ellipke(), and r.

Referenced by COPLANAR::calcAnalyze().

◆ ellipke()

void TRANSLINE::ellipke ( double  arg,
double &  k,
double &  e 
)
protectedinherited

Definition at line 259 of file transline.cpp.

260{
261 int iMax = 16;
262
263 if( arg == 1.0 )
264 {
265 k = INFINITY; // infinite
266 e = 0;
267 }
268 else if( std::isinf( arg ) && arg < 0 )
269 {
270 k = 0;
271 e = INFINITY; // infinite
272 }
273 else
274 {
275 double a, b, c, fr, s, fk = 1, fe = 1, t, da = arg;
276 int i;
277
278 if( arg < 0 )
279 {
280 fk = 1 / sqrt( 1 - arg );
281 fe = sqrt( 1 - arg );
282 da = -arg / ( 1 - arg );
283 }
284
285 a = 1;
286 b = sqrt( 1 - da );
287 c = sqrt( da );
288 fr = 0.5;
289 s = fr * c * c;
290
291 for( i = 0; i < iMax; i++ )
292 {
293 t = ( a + b ) / 2;
294 c = ( a - b ) / 2;
295 b = sqrt( a * b );
296 a = t;
297 fr *= 2;
298 s += fr * c * c;
299
300 if( c / a < NR_EPSI )
301 break;
302 }
303
304 if( i >= iMax )
305 {
306 k = 0;
307 e = 0;
308 }
309 else
310 {
311 k = M_PI_2 / a;
312 e = M_PI_2 * ( 1 - s ) / a;
313 if( arg < 0 )
314 {
315 k *= fk;
316 e *= fe;
317 }
318 }
319 }
320}
#define NR_EPSI
Definition: transline.cpp:253
#define INFINITY
Definition: transline.cpp:35
#define M_PI_2
Definition: transline.cpp:40

References INFINITY, M_PI_2, and NR_EPSI.

Referenced by TRANSLINE::ellipk().

◆ fc()

double RECTWAVEGUIDE::fc ( int  m,
int  n 
)
private

Definition at line 77 of file rectwaveguide.cpp.

78{
79 return sqrt( kc_square( m, n ) / m_parameters[MUR_PRM] / m_parameters[EPSILONR_PRM] ) * C0 / 2.0
80 / M_PI;
81}

References C0, EPSILONR_PRM, kc_square(), TRANSLINE::m_parameters, and MUR_PRM.

Referenced by alphac(), calcAnalyze(), calcSynthesize(), and show_results().

◆ get_rectwaveguide_comp()

void RECTWAVEGUIDE::get_rectwaveguide_comp ( )
private

Definition at line 208 of file rectwaveguide.cpp.

209{
211}
double getProperty(enum PRMS_ID aPrmId)
Definition: transline.cpp:140

References FREQUENCY_PRM, TRANSLINE::getProperty(), and TRANSLINE::m_parameters.

◆ get_rectwaveguide_elec()

void RECTWAVEGUIDE::get_rectwaveguide_elec ( )
private

◆ get_rectwaveguide_phys()

void RECTWAVEGUIDE::get_rectwaveguide_phys ( )
private

◆ get_rectwaveguide_sub()

◆ getProperties()

void TRANSLINE::getProperties ( )
inherited

@function getProperties

Get all properties from the UI. Computes some extra ones.

Definition at line 150 of file transline.cpp.

151{
152 for( int i = 0; i < DUMMY_PRM; ++i )
153 {
154 m_parameters[i] = getProperty( (PRMS_ID) i );
156 }
157
161}
double skin_depth()
@function skin_depth calculate skin depth
Definition: transline.cpp:237
@ SKIN_DEPTH_PRM
Definition: transline.h:70
PRMS_ID
Definition: transline.h:37
@ DUMMY_PRM
Definition: transline.h:61
#define TRANSLINE_OK
Definition: transline.h:29

References DUMMY_PRM, EPSILON_EFF_PRM, TRANSLINE::getProperty(), TRANSLINE::m_parameters, RHO_PRM, TRANSLINE::setErrorLevel(), SIGMA_PRM, TRANSLINE::skin_depth(), SKIN_DEPTH_PRM, and TRANSLINE_OK.

Referenced by TRANSLINE::analyze(), and TRANSLINE::synthesize().

◆ getProperty()

double TRANSLINE::getProperty ( enum PRMS_ID  aPrmId)
inherited

Definition at line 140 of file transline.cpp.

141{
142 return GetPropertyInDialog( aPrmId );
143}
double GetPropertyInDialog(enum PRMS_ID aPrmId)

References GetPropertyInDialog().

Referenced by get_rectwaveguide_comp(), get_rectwaveguide_elec(), get_rectwaveguide_phys(), get_rectwaveguide_sub(), and TRANSLINE::getProperties().

◆ Init()

void TRANSLINE::Init ( )
inherited

Definition at line 90 of file transline.cpp.

91{
92 wxColour wxcol = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOW );
93 okCol = KIGFX::COLOR4D( wxcol );
94 okCol.r = wxcol.Red() / 255.0;
95 okCol.g = wxcol.Green() / 255.0;
96 okCol.b = wxcol.Blue() / 255.0;
97 int i;
98 // Initialize these variables mainly to avoid warnings from a static analyzer
99 for( i = 0; i < EXTRA_PRMS_COUNT; ++i )
100 {
101 m_parameters[i] = 0;
102 }
103}
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
double r
Red component.
Definition: color4d.h:384
double g
Green component.
Definition: color4d.h:385
double b
Blue component.
Definition: color4d.h:386
KIGFX::COLOR4D okCol
Definition: transline.h:128
@ EXTRA_PRMS_COUNT
Definition: transline.h:75

References KIGFX::COLOR4D::b, EXTRA_PRMS_COUNT, KIGFX::COLOR4D::g, TRANSLINE::m_parameters, TRANSLINE::okCol, and KIGFX::COLOR4D::r.

Referenced by C_MICROSTRIP::C_MICROSTRIP(), COAX::COAX(), COPLANAR::COPLANAR(), MICROSTRIP::MICROSTRIP(), RECTWAVEGUIDE(), STRIPLINE::STRIPLINE(), TRANSLINE::TRANSLINE(), and TWISTEDPAIR::TWISTEDPAIR().

◆ isSelected()

bool TRANSLINE::isSelected ( enum PRMS_ID  aPrmId)
inherited

◆ kc_square()

double RECTWAVEGUIDE::kc_square ( int  m,
int  n 
)
private

Definition at line 66 of file rectwaveguide.cpp.

67{
68 return pow( ( m * M_PI / m_parameters[PHYS_A_PRM] ), 2.0 )
69 + pow( ( n * M_PI / m_parameters[PHYS_B_PRM] ), 2.0 );
70}

References TRANSLINE::m_parameters, PHYS_A_PRM, and PHYS_B_PRM.

Referenced by alphac_cutoff(), alphad(), calcAnalyze(), calcSynthesize(), fc(), and show_results().

◆ kval_square()

double RECTWAVEGUIDE::kval_square ( )
private

Definition at line 51 of file rectwaveguide.cpp.

52{
53 double kval;
54
55 kval = 2.0 * M_PI * m_parameters[FREQUENCY_PRM]
57
58 return kval * kval;
59}

References C0, EPSILONR_PRM, FREQUENCY_PRM, TRANSLINE::m_parameters, and MUR_PRM.

Referenced by alphac_cutoff(), alphad(), calcAnalyze(), calcSynthesize(), and show_results().

◆ minimizeZ0Error1D()

bool TRANSLINE::minimizeZ0Error1D ( double *  aVar)
protectedinherited

@function minimizeZ0Error1D

Tries to find a parameter that minimizes the error ( on Z0 ). This function only works with a single parameter. Calls calcAnalyze several times until the error is acceptable. While the error is unnacceptable, changes slightly the parameter.

This function does not change Z0 / Angl_L.

Parameters
avarParameter to synthesize
Returns
'true' if error < MAX_ERROR, else 'false'

Definition at line 349 of file transline.cpp.

350{
351 double Z0_dest, Z0_current, Z0_result, angl_l_dest, increment, slope, error;
352 int iteration;
353
354 if( !std::isfinite( m_parameters[Z0_PRM] ) )
355 {
356 *aVar = NAN;
357 return false;
358 }
359
360 if( ( !std::isfinite( *aVar ) ) || ( *aVar == 0 ) )
361 *aVar = 0.001;
362
363 /* required value of Z0 */
364 Z0_dest = m_parameters[Z0_PRM];
365
366 /* required value of angl_l */
367 angl_l_dest = m_parameters[ANG_L_PRM];
368
369 /* Newton's method */
370 iteration = 0;
371
372 /* compute parameters */
373 calcAnalyze();
374 Z0_current = m_parameters[Z0_PRM];
375
376 error = fabs( Z0_dest - Z0_current );
377
378 while( error > MAX_ERROR )
379 {
380 iteration++;
381 increment = *aVar / 100.0;
382 *aVar += increment;
383 /* compute parameters */
384 calcAnalyze();
385 Z0_result = m_parameters[Z0_PRM];
386 /* f(w(n)) = Z0 - Z0(w(n)) */
387 /* f'(w(n)) = -f'(Z0(w(n))) */
388 /* f'(Z0(w(n))) = (Z0(w(n)) - Z0(w(n+delw))/delw */
389 /* w(n+1) = w(n) - f(w(n))/f'(w(n)) */
390 slope = ( Z0_result - Z0_current ) / increment;
391 slope = ( Z0_dest - Z0_current ) / slope - increment;
392 *aVar += slope;
393
394 if( *aVar <= 0.0 )
395 *aVar = increment;
396
397 /* find new error */
398 /* compute parameters */
399 calcAnalyze();
400 Z0_current = m_parameters[Z0_PRM];
401 error = fabs( Z0_dest - Z0_current );
402
403 if( iteration > 100 )
404 break;
405 }
406
407 /* Compute one last time, but with correct length */
408 m_parameters[Z0_PRM] = Z0_dest;
409 m_parameters[ANG_L_PRM] = angl_l_dest;
412 / 2.0 / M_PI; /* in m */
413 calcAnalyze();
414
415 /* Restore parameters */
416 m_parameters[Z0_PRM] = Z0_dest;
417 m_parameters[ANG_L_PRM] = angl_l_dest;
420 / 2.0 / M_PI; /* in m */
421 return error <= MAX_ERROR;
422}
#define MAX_ERROR
Definition: transline.cpp:332

References ANG_L_PRM, C0, TRANSLINE::calcAnalyze(), EPSILON_EFF_PRM, FREQUENCY_PRM, TRANSLINE::m_parameters, MAX_ERROR, PHYS_LEN_PRM, and Z0_PRM.

Referenced by COPLANAR::calcSynthesize(), MICROSTRIP::calcSynthesize(), STRIPLINE::calcSynthesize(), and TWISTEDPAIR::calcSynthesize().

◆ setErrorLevel()

void TRANSLINE::setErrorLevel ( PRMS_ID  aP,
char  aErrorLevel 
)
protectedinherited

@function setErrorLevel

set an error / warning level for a given parameter.

See also
TRANSLINE_OK
TRANSLINE_WARNING
TRANSLINE_ERROR
Parameters
aPparameter
aErrorLevelError level

Definition at line 435 of file transline.cpp.

436{
437 switch( aErrorLevel )
438 {
441 default: SetPropertyBgColorInDialog( aP, &okCol ); break;
442 }
443}
KIGFX::COLOR4D warnCol
Definition: transline.h:127
KIGFX::COLOR4D errCol
Definition: transline.h:126
void SetPropertyBgColorInDialog(enum PRMS_ID aPrmId, const KIGFX::COLOR4D *aCol)
Function SetPropertyBgColorInDialog Set the background color of a parameter.
#define TRANSLINE_ERROR
Definition: transline.h:31

References TRANSLINE::errCol, TRANSLINE::okCol, SetPropertyBgColorInDialog(), TRANSLINE_ERROR, TRANSLINE_WARNING, and TRANSLINE::warnCol.

Referenced by TRANSLINE::checkProperties(), TRANSLINE::getProperties(), C_MICROSTRIP::showAnalyze(), COAX::showAnalyze(), COPLANAR::showAnalyze(), MICROSTRIP::showAnalyze(), showAnalyze(), STRIPLINE::showAnalyze(), TWISTEDPAIR::showAnalyze(), C_MICROSTRIP::showSynthesize(), COAX::showSynthesize(), COPLANAR::showSynthesize(), MICROSTRIP::showSynthesize(), showSynthesize(), STRIPLINE::showSynthesize(), and TWISTEDPAIR::showSynthesize().

◆ setProperty()

◆ setResult() [1/2]

void TRANSLINE::setResult ( int  line,
const char *  text 
)
inherited

Definition at line 127 of file transline.cpp.

128{
129 SetResultInDialog( line, text );
130}
void SetResultInDialog(int line, const char *text)

References SetResultInDialog(), and text.

◆ setResult() [2/2]

void TRANSLINE::setResult ( int  line,
double  value,
const char *  text 
)
inherited

◆ show_results()

void RECTWAVEGUIDE::show_results ( )
overrideprivatevirtual

Shows results.

Reimplemented from TRANSLINE.

Definition at line 373 of file rectwaveguide.cpp.

374{
375 int m, n, max = 6;
376 char text[MAXSTRLEN], txt[32];
377
378 // Z0EH = Ey / Hx (definition with field quantities)
379 Z0EH = ZF0 * sqrt( kval_square() / ( kval_square() - kc_square( 1, 0 ) ) );
380 setResult( 0, Z0EH, "Ohm" );
381
385
386 // show possible TE modes (H modes)
387 if( m_parameters[FREQUENCY_PRM] < fc( 1, 0 ) )
388 {
389 strcpy( text, "none" );
390 }
391 else
392 {
393 strcpy( text, "" );
394 for( m = 0; m <= max; m++ )
395 {
396 for( n = 0; n <= max; n++ )
397 {
398 if( ( m == 0 ) && ( n == 0 ) )
399 continue;
400
401 if( m_parameters[FREQUENCY_PRM] >= ( fc( m, n ) ) )
402 {
403 sprintf( txt, "H(%d,%d) ", m, n );
404 if( ( strlen( text ) + strlen( txt ) + 5 ) < MAXSTRLEN )
405 {
406 strcat( text, txt );
407 }
408 else
409 {
410 strcat( text, "..." );
411 m = n = max + 1; // print no more modes
412 }
413 }
414 }
415 }
416 }
417 setResult( 4, text );
418
419 // show possible TM modes (E modes)
420 if( m_parameters[FREQUENCY_PRM] < fc( 1, 1 ) )
421 {
422 strcpy( text, "none" );
423 }
424 else
425 {
426 strcpy( text, "" );
427 for( m = 1; m <= max; m++ )
428 {
429 for( n = 1; n <= max; n++ )
430 {
431 if( m_parameters[FREQUENCY_PRM] >= fc( m, n ) )
432 {
433 sprintf( txt, "E(%d,%d) ", m, n );
434 if( ( strlen( text ) + strlen( txt ) + 5 ) < MAXSTRLEN )
435 {
436 strcat( text, txt );
437 }
438 else
439 {
440 strcat( text, "..." );
441 m = n = max + 1; // print no more modes
442 }
443 }
444 }
445 }
446 }
447 setResult( 5, text );
448}
void setResult(int, double, const char *)
Definition: transline.cpp:133
#define MAXSTRLEN

References EPSILON_EFF_PRM, fc(), FREQUENCY_PRM, kc_square(), kval_square(), LOSS_CONDUCTOR_PRM, LOSS_DIELECTRIC_PRM, TRANSLINE::m_parameters, MAXSTRLEN, TRANSLINE::setResult(), text, Z0EH, and ZF0.

◆ showAnalyze()

void RECTWAVEGUIDE::showAnalyze ( )
overrideprivatevirtual

Shows synthesis results and checks for errors / warnings.

Reimplemented from TRANSLINE.

Definition at line 351 of file rectwaveguide.cpp.

352{
355
356 // Check for errors
357 if( !std::isfinite( m_parameters[Z0_PRM] ) || m_parameters[Z0_PRM] < 0 )
359
360 if( !std::isfinite( m_parameters[ANG_L_PRM] ) || m_parameters[ANG_L_PRM] < 0 )
362
363 // Check for warnings
364 if( !std::isfinite( m_parameters[PHYS_A_PRM] ) || m_parameters[PHYS_A_PRM] <= 0 )
366
367 if( !std::isfinite( m_parameters[PHYS_B_PRM] ) || m_parameters[PHYS_B_PRM] <= 00 )
369}
void setProperty(enum PRMS_ID aPrmId, double aValue)
Definition: transline.cpp:109

References ANG_L_PRM, TRANSLINE::m_parameters, PHYS_A_PRM, PHYS_B_PRM, TRANSLINE::setErrorLevel(), TRANSLINE::setProperty(), TRANSLINE_ERROR, TRANSLINE_WARNING, and Z0_PRM.

◆ showSynthesize()

void RECTWAVEGUIDE::showSynthesize ( )
overrideprivatevirtual

Shows analysis results and checks for errors / warnings.

Reimplemented from TRANSLINE.

Definition at line 325 of file rectwaveguide.cpp.

326{
327 if( isSelected( PHYS_A_PRM ) )
329
330 if( isSelected( PHYS_B_PRM ) )
332
334
335 // Check for errors
336 if( !std::isfinite( m_parameters[PHYS_A_PRM] ) || m_parameters[PHYS_A_PRM] <= 0 )
338
339 if( !std::isfinite( m_parameters[PHYS_B_PRM] ) || m_parameters[PHYS_B_PRM] <= 00 )
341
342 // Check for warnings
343 if( !std::isfinite( m_parameters[Z0_PRM] ) || m_parameters[Z0_PRM] < 0 )
345
346 if( !std::isfinite( m_parameters[ANG_L_PRM] ) || m_parameters[ANG_L_PRM] < 0 )
348}
bool isSelected(enum PRMS_ID aPrmId)
Definition: transline.cpp:119

References ANG_L_PRM, TRANSLINE::isSelected(), TRANSLINE::m_parameters, PHYS_A_PRM, PHYS_B_PRM, PHYS_LEN_PRM, TRANSLINE::setErrorLevel(), TRANSLINE::setProperty(), TRANSLINE_ERROR, TRANSLINE_WARNING, and Z0_PRM.

◆ skin_depth()

double TRANSLINE::skin_depth ( )
protectedinherited

@function skin_depth calculate skin depth

$ \frac{1}{\sqrt{ \pi \cdot f \cdot \mu \cdot \sigma }} $

Definition at line 237 of file transline.cpp.

238{
239 double depth;
240 depth = 1.0
243 return depth;
244}

References FREQUENCY_PRM, TRANSLINE::m_parameters, MU0, MURC_PRM, and SIGMA_PRM.

Referenced by C_MICROSTRIP::attenuation(), MICROSTRIP::attenuation(), COPLANAR::calcAnalyze(), STRIPLINE::calcAnalyze(), and TRANSLINE::getProperties().

◆ synthesize()

void TRANSLINE::synthesize ( )
virtualinherited

Definition at line 220 of file transline.cpp.

221{
226 show_results();
227}
virtual void showSynthesize()
Shows analysis results and checks for errors / warnings.
Definition: transline.h:117
virtual void calcSynthesize()
Computation for synthesis.
Definition: transline.h:107

References TRANSLINE::calcSynthesize(), TRANSLINE::checkProperties(), TRANSLINE::getProperties(), TRANSLINE::show_results(), and TRANSLINE::showSynthesize().

Referenced by PANEL_TRANSLINE::OnTranslineSynthetize().

Member Data Documentation

◆ a

double RECTWAVEGUIDE::a
private

Definition at line 41 of file rectwaveguide.h.

Referenced by alphac().

◆ ang_l

double TRANSLINE::ang_l
protectedinherited

Definition at line 134 of file transline.h.

Referenced by TRANSLINE::TRANSLINE().

◆ atten_cond

double RECTWAVEGUIDE::atten_cond
private

Definition at line 50 of file rectwaveguide.h.

◆ atten_dielectric

double RECTWAVEGUIDE::atten_dielectric
private

Definition at line 49 of file rectwaveguide.h.

◆ b

double RECTWAVEGUIDE::b
private

Definition at line 42 of file rectwaveguide.h.

Referenced by alphac().

◆ er_eff

◆ errCol

KIGFX::COLOR4D TRANSLINE::errCol = KIGFX::COLOR4D( 1, 0.63, 0.63, 1 )
inherited

Definition at line 126 of file transline.h.

Referenced by TRANSLINE::setErrorLevel().

◆ fc10

double RECTWAVEGUIDE::fc10
private

Definition at line 51 of file rectwaveguide.h.

◆ l

double RECTWAVEGUIDE::l
private

Definition at line 43 of file rectwaveguide.h.

◆ len

double TRANSLINE::len
protectedinherited

Definition at line 132 of file transline.h.

Referenced by TRANSLINE::TRANSLINE().

◆ m_Name

◆ m_parameters

double TRANSLINE::m_parameters[EXTRA_PRMS_COUNT]
protectedinherited

Definition at line 131 of file transline.h.

Referenced by alphac(), COAX::alphac_coax(), alphad(), COAX::alphad_coax(), C_MICROSTRIP::attenuation(), MICROSTRIP::attenuation(), COAX::calcAnalyze(), COPLANAR::calcAnalyze(), calcAnalyze(), STRIPLINE::calcAnalyze(), TWISTEDPAIR::calcAnalyze(), C_MICROSTRIP::calcSynthesize(), COAX::calcSynthesize(), COPLANAR::calcSynthesize(), MICROSTRIP::calcSynthesize(), calcSynthesize(), STRIPLINE::calcSynthesize(), TWISTEDPAIR::calcSynthesize(), TRANSLINE::checkProperties(), C_MICROSTRIP::compute_single_line(), C_MICROSTRIP::conductor_losses(), MICROSTRIP::conductor_losses(), C_MICROSTRIP::delta_u_thickness(), C_MICROSTRIP::dielectric_losses(), MICROSTRIP::dielectric_losses(), MICROSTRIP::dispersion(), C_MICROSTRIP::er_eff_freq(), C_MICROSTRIP::er_eff_static(), fc(), get_rectwaveguide_comp(), get_rectwaveguide_elec(), get_rectwaveguide_phys(), get_rectwaveguide_sub(), TRANSLINE::getProperties(), TRANSLINE::Init(), kc_square(), kval_square(), C_MICROSTRIP::line_angle(), MICROSTRIP::line_angle(), STRIPLINE::lineImpedance(), MICROSTRIP::microstrip_Z0(), TRANSLINE::minimizeZ0Error1D(), MICROSTRIP::mur_eff_ms(), C_MICROSTRIP::show_results(), COAX::show_results(), COPLANAR::show_results(), MICROSTRIP::show_results(), show_results(), STRIPLINE::show_results(), TWISTEDPAIR::show_results(), C_MICROSTRIP::showAnalyze(), COAX::showAnalyze(), COPLANAR::showAnalyze(), MICROSTRIP::showAnalyze(), showAnalyze(), STRIPLINE::showAnalyze(), TWISTEDPAIR::showAnalyze(), C_MICROSTRIP::showSynthesize(), COAX::showSynthesize(), COPLANAR::showSynthesize(), MICROSTRIP::showSynthesize(), showSynthesize(), STRIPLINE::showSynthesize(), TWISTEDPAIR::showSynthesize(), TRANSLINE::skin_depth(), C_MICROSTRIP::syn_fun(), C_MICROSTRIP::synth_width(), MICROSTRIP::synth_width(), TRANSLINE::TRANSLINE(), C_MICROSTRIP::Z0_dispersion(), and C_MICROSTRIP::Z0_even_odd().

◆ mur

double RECTWAVEGUIDE::mur
private

Definition at line 40 of file rectwaveguide.h.

◆ mur_eff

double RECTWAVEGUIDE::mur_eff
private

Definition at line 48 of file rectwaveguide.h.

◆ okCol

KIGFX::COLOR4D TRANSLINE::okCol = KIGFX::COLOR4D( 1, 1, 1, 1 )
inherited

Definition at line 128 of file transline.h.

Referenced by TRANSLINE::Init(), and TRANSLINE::setErrorLevel().

◆ warnCol

KIGFX::COLOR4D TRANSLINE::warnCol = KIGFX::COLOR4D( 1, 1, 0.57, 1 )
inherited

Definition at line 127 of file transline.h.

Referenced by TRANSLINE::setErrorLevel().

◆ Z0

double RECTWAVEGUIDE::Z0
private

Definition at line 44 of file rectwaveguide.h.

◆ Z0EH

double RECTWAVEGUIDE::Z0EH
private

Definition at line 45 of file rectwaveguide.h.

Referenced by show_results().


The documentation for this class was generated from the following files: