KiCad PCB EDA Suite
Loading...
Searching...
No Matches
RECTWAVEGUIDE Class Reference

Rectangular waveguide calculation. More...

#include <rectwaveguide.h>

Inheritance diagram for RECTWAVEGUIDE:
TRANSLINE_CALCULATION_BASE

Public Member Functions

 RECTWAVEGUIDE ()
 
void Analyse () override
 Analyse waveguide geometry to produce Z0, electrical length, loss, and mode cutoffs.
 
bool Synthesize (SYNTHESIZE_OPTS aOpts) override
 Synthesize the broad dimension a from a target Z0. Only PHYS_WIDTH is a valid target.
 
void SetSynthesizeTarget (TRANSLINE_PARAMETERS aTarget) override
 Choose which geometry parameter will be solved for during synthesis.
 
std::string GetTEModes () const
 Returns a UI-friendly string enumerating propagating TE_mn modes at the current frequency.
 
std::string GetTMModes () const
 Returns a UI-friendly string enumerating propagating TM_mn modes at the current frequency.
 
void SetParameter (const TRANSLINE_PARAMETERS aParam, const double aValue)
 Sets the given calculation property.
 
double GetParameter (const TRANSLINE_PARAMETERS aParam) const
 Gets the given calculation property.
 
double & GetParameterRef (const TRANSLINE_PARAMETERS aParam)
 Adds a constant to the given parameter.
 
std::unordered_map< TRANSLINE_PARAMETERS, std::pair< double, TRANSLINE_STATUS > > & GetAnalysisResults ()
 Gets the output parameters following analysis.
 
std::unordered_map< TRANSLINE_PARAMETERS, std::pair< double, TRANSLINE_STATUS > > & GetSynthesisResults ()
 Gets the output parameters following synthesis.
 
TRANSLINE_PARAMETERS GetSynthesizeTarget () const
 Returns the parameter that will be solved for during synthesis.
 
void UpdateDielectricModel ()
 Refit the Djordjevic-Sarkar model from the current parameter map.
 
double GetDispersedEpsilonR (double aF) const
 Dispersed permittivity at aF. Returns raw EPSILONR when the model is inactive.
 
double GetDispersedTanDelta (double aF) const
 Dispersed loss tangent at aF. Returns raw TAND when the model is inactive.
 
virtual double GetSoldermaskDeltaQ (double, double) const
 Incremental filling factor Delta q_mask representing the fraction of the un-coated above-trace air region that a mask of thickness C displaces when laid on top of the substrate.
 
std::pair< double, double > ApplySoldermaskCorrection (double aEpsEffUncoated, double aTanDeltaSubstrate, double aEpsRSubstrate, double aWOverH, double aF) const
 Apply a three-layer (substrate / soldermask / air) correction to an un-coated (eps_eff, tan_delta) pair using the air-replacement decomposition of Bahl and Stuchly 1980, with the mask filling factor computed from Svacina 1992 as improved by Wan and Hoorfar 2000.
 

Static Public Member Functions

static double WanHoorfarQ2 (double aU, double aHBarTop)
 Wan-Hoorfar 2000 eq.
 

Protected Member Functions

void InitProperties (const std::initializer_list< TRANSLINE_PARAMETERS > &aParams)
 Initialises the properties used (as inputs or outputs) by the calculation.
 
void SetAnalysisResult (TRANSLINE_PARAMETERS aParam, const double aValue, const TRANSLINE_STATUS aStatus=TRANSLINE_STATUS::OK)
 Sets an analysis result.
 
void SetSynthesisResult (TRANSLINE_PARAMETERS aParam, const double aValue, const TRANSLINE_STATUS aStatus=TRANSLINE_STATUS::OK)
 Sets a synthesis result.
 
bool MinimiseZ0Error1D (TRANSLINE_PARAMETERS aOptimise, TRANSLINE_PARAMETERS aMeasure, bool aRecalculateLength=false)
 minimizeZ0Error1D
 
bool MinimiseZ0Error2D (TRANSLINE_PARAMETERS aParam1, TRANSLINE_PARAMETERS aParam2)
 minimizeZ0Error2D
 
double SkinDepth () const
 Calculate skin depth.
 

Static Protected Member Functions

static double UnitPropagationDelay (double aEpsilonEff)
 Calculates the unit propagation delay (ps/cm) for the given effective permittivity.
 
static std::pair< double, double > EllipticIntegral (double arg)
 Computes the complete elliptic integral of first kind K() and the second kind E() using the arithmetic-geometric mean algorithm (AGM) by Abramowitz and Stegun.
 
static double coth (const double x)
 Calculates cosh of the given argument.
 
static double sech (const double x)
 Calculates sech of the given argument.
 

Protected Attributes

std::unordered_map< TRANSLINE_PARAMETERS, double > m_parameters
 All input and output properties used by the calculation.
 
std::unordered_map< TRANSLINE_PARAMETERS, std::pair< double, TRANSLINE_STATUS > > m_analysisStatus
 Analysis results.
 
std::unordered_map< TRANSLINE_PARAMETERS, std::pair< double, TRANSLINE_STATUS > > m_synthesisStatus
 Synthesis results.
 
TRANSLINE_PARAMETERS m_synthesizeTarget { TRANSLINE_PARAMETERS::UNKNOWN_ID }
 Which geometry parameter is the unknown during synthesis (set by the UI)
 
std::optional< DIELECTRIC_DJORDJEVIC_SARKARm_dsModel
 Fitted Djordjevic-Sarkar model. Empty unless DIELECTRIC_MODEL_SEL selects it.
 

Static Protected Attributes

static constexpr double m_maxError { 0.000001 }
 The maximum error for Z0 optimisations.
 

Private Types

using TCP = TRANSLINE_PARAMETERS
 

Private Member Functions

void SetAnalysisResults () override
 Sets the output values and status following analysis.
 
void SetSynthesisResults () override
 Sets the output values and status following synthesis.
 
double KvalSquare () const
 Square of the free-space wavenumber k = omega * sqrt(mu * eps)
 
double KcSquare (int aM, int aN) const
 Square of the transverse cutoff wavenumber kc for mode (m, n)
 
double Fc (int aM, int aN) const
 Cutoff frequency for mode (m, n), in Hz.
 
double AlphaC () const
 Conductor loss summed over all propagating TE_mn and TM_mn modes, in dB/m.
 
double AlphaCCutoff () const
 Evanescent attenuation below TE10 cutoff, in dB/m.
 
double AlphaD () const
 Dielectric loss of the dominant TE10 mode, in dB/m.
 
void UpdateModeStrings ()
 Populates m_teModes and m_tmModes with all propagating modes at the current frequency.
 

Private Attributes

std::string m_teModes
 Cached TE_mn propagating-modes string produced by UpdateModeStrings.
 
std::string m_tmModes
 Cached TM_mn propagating-modes string produced by UpdateModeStrings.
 

Detailed Description

Rectangular waveguide calculation.

PHYS_WIDTH is the broad dimension a, PHYS_S is the narrow dimension b. Analysis evaluates the TE10 dominant-mode characteristic impedance (fictive-voltage definition), electrical length, conductor loss (Ramo / Whinnery / Van Duzer summation over every propagating TE_mn and TM_mn mode), and dielectric loss. Below TE10 cutoff the conductor-loss term collapses to the evanescent attenuation per unit length.

Synthesis is the closed-form inverse of the TE10 Z0 expression and solves for a from a target Z0; the narrow dimension b is a free input with no synthesis path (choosing b is a power-handling / higher-mode-suppression tradeoff rather than a Z0 constraint).

CUTOFF_FREQUENCY is populated with the TE10 cutoff so the UI can display it alongside the propagating-mode string accessors GetTEModes / GetTMModes.

Definition at line 48 of file common/transline_calculations/rectwaveguide.h.

Member Typedef Documentation

◆ TCP

Constructor & Destructor Documentation

◆ RECTWAVEGUIDE()

Member Function Documentation

◆ AlphaC()

double RECTWAVEGUIDE::AlphaC ( ) const
private

Conductor loss summed over all propagating TE_mn and TM_mn modes, in dB/m.

Definition at line 69 of file common/transline_calculations/rectwaveguide.cpp.

References Fc(), FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), TRANSLINE_CALCULATIONS::LOG2DB, M_PI, TRANSLINE_CALCULATIONS::MU0, MURC, PHYS_S, PHYS_WIDTH, SIGMA, and TRANSLINE_CALCULATIONS::ZF0.

Referenced by Analyse(), and Synthesize().

◆ AlphaCCutoff()

double RECTWAVEGUIDE::AlphaCCutoff ( ) const
private

Evanescent attenuation below TE10 cutoff, in dB/m.

Definition at line 132 of file common/transline_calculations/rectwaveguide.cpp.

References KcSquare(), KvalSquare(), and TRANSLINE_CALCULATIONS::LOG2DB.

Referenced by Analyse(), and Synthesize().

◆ AlphaD()

double RECTWAVEGUIDE::AlphaD ( ) const
private

Dielectric loss of the dominant TE10 mode, in dB/m.

Definition at line 140 of file common/transline_calculations/rectwaveguide.cpp.

References TRANSLINE_CALCULATION_BASE::GetParameter(), KcSquare(), KvalSquare(), TRANSLINE_CALCULATIONS::LOG2DB, and TAND.

Referenced by Analyse(), and Synthesize().

◆ Analyse()

◆ ApplySoldermaskCorrection()

std::pair< double, double > TRANSLINE_CALCULATION_BASE::ApplySoldermaskCorrection ( double aEpsEffUncoated,
double aTanDeltaSubstrate,
double aEpsRSubstrate,
double aWOverH,
double aF ) const
inherited

Apply a three-layer (substrate / soldermask / air) correction to an un-coated (eps_eff, tan_delta) pair using the air-replacement decomposition of Bahl and Stuchly 1980, with the mask filling factor computed from Svacina 1992 as improved by Wan and Hoorfar 2000.

eps_eff_coated   = eps_eff_uncoated + Delta q_mask * (eps_mask - 1)
tan_delta_coated = [ q_sub * eps_sub * tan_delta_sub
                     + Delta q_mask * eps_mask * tan_delta_mask ] / eps_eff_coated

q_sub is inferred from eps_eff_uncoated using the standard filling factor relation q_sub = (eps_eff_uncoated - 1) / (eps_sub - 1), which is exact to within the quasi- TEM assumption that produces eps_eff in the first place. Returns the inputs unchanged when SOLDERMASK_PRESENT is 0, the mask thickness is 0, the mask parameters are non-physical, or the subclass reports Delta q_mask <= 0. aF is reserved for a future frequency-dependent mask model and currently unused.

Definition at line 274 of file transline_calculation_base.cpp.

References GetParameter(), GetSoldermaskDeltaQ(), H, SOLDERMASK_EPSILONR, SOLDERMASK_PRESENT, SOLDERMASK_TAND, and SOLDERMASK_THICKNESS.

Referenced by COPLANAR::Analyse(), COUPLED_MICROSTRIP::Analyse(), and MICROSTRIP::Analyse().

◆ coth()

static double TRANSLINE_CALCULATION_BASE::coth ( const double x)
inlinestaticprotectedinherited

Calculates cosh of the given argument.

Definition at line 328 of file transline_calculation_base.h.

Referenced by COUPLED_STRIPLINE::calcZeroThicknessCoupledImpedances().

◆ EllipticIntegral()

std::pair< double, double > TRANSLINE_CALCULATION_BASE::EllipticIntegral ( double arg)
staticprotectedinherited

Computes the complete elliptic integral of first kind K() and the second kind E() using the arithmetic-geometric mean algorithm (AGM) by Abramowitz and Stegun.

Returns
std::pair<K, E> where K = first kind integral, E = second kind integral

Definition at line 340 of file transline_calculation_base.cpp.

Referenced by COPLANAR::Analyse(), COUPLED_STRIPLINE::calcSingleStripImpedances(), and COUPLED_STRIPLINE::calcZeroThicknessCoupledImpedances().

◆ Fc()

double RECTWAVEGUIDE::Fc ( int aM,
int aN ) const
private

◆ GetAnalysisResults()

◆ GetDispersedEpsilonR()

double TRANSLINE_CALCULATION_BASE::GetDispersedEpsilonR ( double aF) const
inherited

◆ GetDispersedTanDelta()

double TRANSLINE_CALCULATION_BASE::GetDispersedTanDelta ( double aF) const
inherited

◆ GetParameter()

double TRANSLINE_CALCULATION_BASE::GetParameter ( const TRANSLINE_PARAMETERS aParam) const
inlineinherited

Gets the given calculation property.

Definition at line 165 of file transline_calculation_base.h.

References m_parameters.

Referenced by COAX::AlphaC(), RECTWAVEGUIDE::AlphaC(), COAX::AlphaD(), RECTWAVEGUIDE::AlphaD(), COAX::Analyse(), COPLANAR::Analyse(), COUPLED_MICROSTRIP::Analyse(), COUPLED_STRIPLINE::Analyse(), MICROSTRIP::Analyse(), RECTWAVEGUIDE::Analyse(), STRIPLINE::Analyse(), TWISTEDPAIR::Analyse(), ApplySoldermaskCorrection(), MICROSTRIP::attenuation(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), COUPLED_STRIPLINE::calcDielectrics(), COUPLED_STRIPLINE::calcLosses(), COUPLED_STRIPLINE::calcOffsetVirtualBranch(), COUPLED_STRIPLINE::calcSingleStripImpedances(), COUPLED_STRIPLINE::calcZ0SymmetricStripline(), COUPLED_MICROSTRIP::compute_single_line(), COUPLED_MICROSTRIP::conductor_losses(), MICROSTRIP::conductor_losses(), COUPLED_MICROSTRIP::delta_u_thickness(), COUPLED_MICROSTRIP::dielectric_losses(), MICROSTRIP::dielectric_losses(), COUPLED_MICROSTRIP::diff_impedance(), MICROSTRIP::dispersion(), COUPLED_MICROSTRIP::er_eff_freq(), COUPLED_MICROSTRIP::er_eff_static(), RECTWAVEGUIDE::Fc(), GetDispersedEpsilonR(), GetDispersedTanDelta(), COPLANAR::GetSoldermaskDeltaQ(), COPLANAR::hasBackMetal(), RECTWAVEGUIDE::KcSquare(), RECTWAVEGUIDE::KvalSquare(), COUPLED_MICROSTRIP::line_angle(), MICROSTRIP::line_angle(), STRIPLINE::lineImpedance(), MICROSTRIP::microstrip_Z0(), MinimiseZ0Error1D(), MICROSTRIP::mur_eff_ms(), COUPLED_STRIPLINE::publishResults(), COAX::SetAnalysisResults(), COPLANAR::SetAnalysisResults(), COUPLED_MICROSTRIP::SetAnalysisResults(), MICROSTRIP::SetAnalysisResults(), RECTWAVEGUIDE::SetAnalysisResults(), STRIPLINE::SetAnalysisResults(), TWISTEDPAIR::SetAnalysisResults(), COAX::SetSynthesisResults(), COPLANAR::SetSynthesisResults(), COUPLED_MICROSTRIP::SetSynthesisResults(), MICROSTRIP::SetSynthesisResults(), RECTWAVEGUIDE::SetSynthesisResults(), STRIPLINE::SetSynthesisResults(), TWISTEDPAIR::SetSynthesisResults(), SkinDepth(), COUPLED_MICROSTRIP::syn_fun(), COUPLED_MICROSTRIP::synth_width(), COAX::Synthesize(), COUPLED_MICROSTRIP::Synthesize(), COUPLED_STRIPLINE::Synthesize(), MICROSTRIP::Synthesize(), RECTWAVEGUIDE::Synthesize(), MICROSTRIP::SynthesizeWidth(), UpdateDielectricModel(), COAX::UpdateModeCutoffs(), RECTWAVEGUIDE::UpdateModeStrings(), COUPLED_MICROSTRIP::Z0_dispersion(), and COUPLED_MICROSTRIP::Z0_even_odd().

◆ GetParameterRef()

double & TRANSLINE_CALCULATION_BASE::GetParameterRef ( const TRANSLINE_PARAMETERS aParam)
inlineinherited

Adds a constant to the given parameter.

Definition at line 168 of file transline_calculation_base.h.

References m_parameters.

Referenced by MinimiseZ0Error1D().

◆ GetSoldermaskDeltaQ()

virtual double TRANSLINE_CALCULATION_BASE::GetSoldermaskDeltaQ ( double ,
double  ) const
inlinevirtualinherited

Incremental filling factor Delta q_mask representing the fraction of the un-coated above-trace air region that a mask of thickness C displaces when laid on top of the substrate.

Default zero means the subclass is not mask-eligible (stripline, coax, rectangular waveguide, twisted pair) and ApplySoldermaskCorrection will return its inputs unchanged. Mask-eligible subclasses (microstrip, coupled microstrip, CPW) override using the Wan-Hoorfar 2000 improved Svacina formula or a CPW-specific empirical form.

Reimplemented in COPLANAR, COUPLED_MICROSTRIP, and MICROSTRIP.

Definition at line 216 of file transline_calculation_base.h.

Referenced by ApplySoldermaskCorrection().

◆ GetSynthesisResults()

std::unordered_map< TRANSLINE_PARAMETERS, std::pair< double, TRANSLINE_STATUS > > & TRANSLINE_CALCULATION_BASE::GetSynthesisResults ( )
inherited

Gets the output parameters following synthesis.

Definition at line 48 of file transline_calculation_base.cpp.

References m_synthesisStatus, and SetSynthesisResults().

◆ GetSynthesizeTarget()

TRANSLINE_PARAMETERS TRANSLINE_CALCULATION_BASE::GetSynthesizeTarget ( ) const
inlineinherited

Returns the parameter that will be solved for during synthesis.

Definition at line 192 of file transline_calculation_base.h.

References m_synthesizeTarget.

◆ GetTEModes()

std::string RECTWAVEGUIDE::GetTEModes ( ) const
inline

Returns a UI-friendly string enumerating propagating TE_mn modes at the current frequency.

Definition at line 82 of file common/transline_calculations/rectwaveguide.h.

References m_teModes.

Referenced by BOOST_AUTO_TEST_CASE(), and BOOST_AUTO_TEST_CASE().

◆ GetTMModes()

std::string RECTWAVEGUIDE::GetTMModes ( ) const
inline

Returns a UI-friendly string enumerating propagating TM_mn modes at the current frequency.

Definition at line 85 of file common/transline_calculations/rectwaveguide.h.

References m_tmModes.

Referenced by BOOST_AUTO_TEST_CASE(), and BOOST_AUTO_TEST_CASE().

◆ InitProperties()

void TRANSLINE_CALCULATION_BASE::InitProperties ( const std::initializer_list< TRANSLINE_PARAMETERS > & aParams)
protectedinherited

Initialises the properties used (as inputs or outputs) by the calculation.

Definition at line 32 of file transline_calculation_base.cpp.

References m_parameters.

Referenced by TRANSLINE_CALCULATION_BASE().

◆ KcSquare()

double RECTWAVEGUIDE::KcSquare ( int aM,
int aN ) const
private

Square of the transverse cutoff wavenumber kc for mode (m, n)

Definition at line 52 of file common/transline_calculations/rectwaveguide.cpp.

References TRANSLINE_CALCULATION_BASE::GetParameter(), M_PI, PHYS_S, and PHYS_WIDTH.

Referenced by AlphaCCutoff(), AlphaD(), Analyse(), Fc(), and Synthesize().

◆ KvalSquare()

double RECTWAVEGUIDE::KvalSquare ( ) const
private

Square of the free-space wavenumber k = omega * sqrt(mu * eps)

Definition at line 43 of file common/transline_calculations/rectwaveguide.cpp.

References TRANSLINE_CALCULATIONS::C0, EPSILONR, FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), M_PI, and MUR.

Referenced by AlphaCCutoff(), AlphaD(), Analyse(), and Synthesize().

◆ MinimiseZ0Error1D()

bool TRANSLINE_CALCULATION_BASE::MinimiseZ0Error1D ( TRANSLINE_PARAMETERS aOptimise,
TRANSLINE_PARAMETERS aMeasure,
bool aRecalculateLength = false )
protectedinherited

minimizeZ0Error1D

Tries to find a parameter that minimizes the error on Z0. This function only works with a single parameter. Calls Analyse several times until the error is acceptable.

This function does not change Z0 / Angl_L

Parameters
aOptimiseParameter to optimise
aMeasureThe parameter to measure / optimise against
aRecalculateLengthTrue if the angular length should be recalculated (not for differential pair usage)
Returns
true if error < MAX_ERROR, otherwise false

Definition at line 69 of file transline_calculation_base.cpp.

References Analyse(), ANG_L, TRANSLINE_CALCULATIONS::C0, EPSILON_EFF, FREQUENCY, GetParameter(), GetParameterRef(), m_maxError, M_PI, PHYS_LEN, and SetParameter().

Referenced by COPLANAR::Synthesize(), COUPLED_MICROSTRIP::Synthesize(), COUPLED_STRIPLINE::Synthesize(), MICROSTRIP::Synthesize(), STRIPLINE::Synthesize(), and TWISTEDPAIR::Synthesize().

◆ MinimiseZ0Error2D()

bool TRANSLINE_CALCULATION_BASE::MinimiseZ0Error2D ( TRANSLINE_PARAMETERS aParam1,
TRANSLINE_PARAMETERS aParam2 )
protectedinherited

minimizeZ0Error2D

Tries to find the parameters that minimizes the error on Z_Diff. This function only works with two parameters. Calls Analyse several times until the error is acceptable. While the error is unacceptable, changes slightly the parameter.

This function does not change Z0 / Angl_L

Parameters
aParam1First parameter to optimise
aParam2Secpmd parameter to optimise
Returns
true if error < MAX_ERROR, otherwise false

◆ sech()

static double TRANSLINE_CALCULATION_BASE::sech ( const double x)
inlinestaticprotectedinherited

Calculates sech of the given argument.

Definition at line 331 of file transline_calculation_base.h.

Referenced by COUPLED_STRIPLINE::calcSingleStripImpedances().

◆ SetAnalysisResult()

◆ SetAnalysisResults()

void RECTWAVEGUIDE::SetAnalysisResults ( )
overrideprivatevirtual

◆ SetParameter()

void TRANSLINE_CALCULATION_BASE::SetParameter ( const TRANSLINE_PARAMETERS aParam,
const double aValue )
inlineinherited

Sets the given calculation property.

Definition at line 162 of file transline_calculation_base.h.

References m_parameters.

Referenced by COAX::Analyse(), COPLANAR::Analyse(), COUPLED_MICROSTRIP::Analyse(), COUPLED_STRIPLINE::Analyse(), MICROSTRIP::Analyse(), RECTWAVEGUIDE::Analyse(), STRIPLINE::Analyse(), TWISTEDPAIR::Analyse(), COUPLED_MICROSTRIP::attenuation(), MICROSTRIP::attenuation(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), COUPLED_STRIPLINE::calcLosses(), COUPLED_STRIPLINE::calcOffsetVirtualBranch(), COUPLED_STRIPLINE::calcZ0EvenMode(), COUPLED_STRIPLINE::calcZ0OddMode(), MICROSTRIP::dispersion(), MICROSTRIP::line_angle(), MICROSTRIP::microstrip_Z0(), MinimiseZ0Error1D(), TRANSLINE::pushSoldermaskParameters(), COUPLED_MICROSTRIP::syn_fun(), COUPLED_MICROSTRIP::synth_width(), COAX::Synthesize(), COUPLED_MICROSTRIP::Synthesize(), COUPLED_STRIPLINE::Synthesize(), MICROSTRIP::Synthesize(), RECTWAVEGUIDE::Synthesize(), COAX::UpdateModeCutoffs(), and COUPLED_MICROSTRIP::Z0_dispersion().

◆ SetSynthesisResult()

◆ SetSynthesisResults()

◆ SetSynthesizeTarget()

void RECTWAVEGUIDE::SetSynthesizeTarget ( TRANSLINE_PARAMETERS aTarget)
inlineoverridevirtual

Choose which geometry parameter will be solved for during synthesis.

Only PHYS_WIDTH (a) is supported. b is a free input because the TE10 Z0 expression is independent of b. Any other value is ignored.

Reimplemented from TRANSLINE_CALCULATION_BASE.

Definition at line 75 of file common/transline_calculations/rectwaveguide.h.

References TRANSLINE_CALCULATION_BASE::m_synthesizeTarget, and PHYS_WIDTH.

Referenced by BOOST_AUTO_TEST_CASE().

◆ SkinDepth()

◆ Synthesize()

◆ UnitPropagationDelay()

double TRANSLINE_CALCULATION_BASE::UnitPropagationDelay ( double aEpsilonEff)
staticprotectedinherited

Calculates the unit propagation delay (ps/cm) for the given effective permittivity.

@aEpsilonEff is the effective permittivity of the material

Definition at line 160 of file transline_calculation_base.cpp.

Referenced by COPLANAR::Analyse(), STRIPLINE::Analyse(), TWISTEDPAIR::Analyse(), COUPLED_STRIPLINE::calcDielectrics(), MICROSTRIP::dispersion(), and COUPLED_MICROSTRIP::er_eff_freq().

◆ UpdateDielectricModel()

void TRANSLINE_CALCULATION_BASE::UpdateDielectricModel ( )
inherited

Refit the Djordjevic-Sarkar model from the current parameter map.

Clears the fitted model when DIELECTRIC_MODEL_SEL is CONSTANT or the spec frequency is non-positive so the accessors fall through to the raw EPSILONR / TAND values.

Definition at line 166 of file transline_calculation_base.cpp.

References DIELECTRIC_MODEL_SEL, DJORDJEVIC_SARKAR, EPSILONR, EPSILONR_SPEC_FREQ, DIELECTRIC_DJORDJEVIC_SARKAR::Fit(), GetParameter(), m_dsModel, and TAND.

Referenced by COAX::Analyse(), COPLANAR::Analyse(), COUPLED_MICROSTRIP::Analyse(), COUPLED_STRIPLINE::Analyse(), MICROSTRIP::Analyse(), RECTWAVEGUIDE::Analyse(), STRIPLINE::Analyse(), TWISTEDPAIR::Analyse(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), COAX::Synthesize(), and RECTWAVEGUIDE::Synthesize().

◆ UpdateModeStrings()

void RECTWAVEGUIDE::UpdateModeStrings ( )
private

Populates m_teModes and m_tmModes with all propagating modes at the current frequency.

Definition at line 151 of file common/transline_calculations/rectwaveguide.cpp.

References Fc(), FREQUENCY, TRANSLINE_CALCULATION_BASE::GetParameter(), m_teModes, and m_tmModes.

Referenced by Analyse(), and Synthesize().

◆ WanHoorfarQ2()

double TRANSLINE_CALCULATION_BASE::WanHoorfarQ2 ( double aU,
double aHBarTop )
staticinherited

Wan-Hoorfar 2000 eq.

(12) / (13): filling factor q_2 for the second dielectric layer of a multilayer microstrip with normalised strip width aU = w/h and normalised cumulative layer boundary aHBarTop = h_2/h (so aHBarTop = 1 corresponds to the top of the substrate and aHBarTop > 1 means a mask of thickness (aHBarTop - 1) * h sits on top). This is the corrected form valid for any number of layers, replacing Svacina's original eq (3) / (7) which is only correct for two-layer structures.

Definition at line 218 of file transline_calculation_base.cpp.

References correction, and M_PI.

Referenced by BOOST_AUTO_TEST_CASE(), BOOST_AUTO_TEST_CASE(), COPLANAR::GetSoldermaskDeltaQ(), COUPLED_MICROSTRIP::GetSoldermaskDeltaQ(), and MICROSTRIP::GetSoldermaskDeltaQ().

Member Data Documentation

◆ m_analysisStatus

std::unordered_map<TRANSLINE_PARAMETERS, std::pair<double, TRANSLINE_STATUS> > TRANSLINE_CALCULATION_BASE::m_analysisStatus
protectedinherited

Analysis results.

Definition at line 337 of file transline_calculation_base.h.

Referenced by GetAnalysisResults(), and SetAnalysisResult().

◆ m_dsModel

std::optional<DIELECTRIC_DJORDJEVIC_SARKAR> TRANSLINE_CALCULATION_BASE::m_dsModel
protectedinherited

Fitted Djordjevic-Sarkar model. Empty unless DIELECTRIC_MODEL_SEL selects it.

Definition at line 349 of file transline_calculation_base.h.

Referenced by GetDispersedEpsilonR(), GetDispersedTanDelta(), and UpdateDielectricModel().

◆ m_maxError

double TRANSLINE_CALCULATION_BASE::m_maxError { 0.000001 }
staticconstexprprotectedinherited

The maximum error for Z0 optimisations.

Definition at line 343 of file transline_calculation_base.h.

Referenced by MinimiseZ0Error1D().

◆ m_parameters

std::unordered_map<TRANSLINE_PARAMETERS, double> TRANSLINE_CALCULATION_BASE::m_parameters
protectedinherited

All input and output properties used by the calculation.

Definition at line 334 of file transline_calculation_base.h.

Referenced by GetParameter(), GetParameterRef(), InitProperties(), and SetParameter().

◆ m_synthesisStatus

std::unordered_map<TRANSLINE_PARAMETERS, std::pair<double, TRANSLINE_STATUS> > TRANSLINE_CALCULATION_BASE::m_synthesisStatus
protectedinherited

Synthesis results.

Definition at line 340 of file transline_calculation_base.h.

Referenced by GetSynthesisResults(), and SetSynthesisResult().

◆ m_synthesizeTarget

◆ m_teModes

std::string RECTWAVEGUIDE::m_teModes
private

Cached TE_mn propagating-modes string produced by UpdateModeStrings.

Definition at line 116 of file common/transline_calculations/rectwaveguide.h.

Referenced by GetTEModes(), and UpdateModeStrings().

◆ m_tmModes

std::string RECTWAVEGUIDE::m_tmModes
private

Cached TM_mn propagating-modes string produced by UpdateModeStrings.

Definition at line 119 of file common/transline_calculations/rectwaveguide.h.

Referenced by GetTMModes(), and UpdateModeStrings().


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