77 const double theta_rad = std::atan( twist *
M_PI * Dout );
78 const double theta_deg = theta_rad * ( 180.0 /
M_PI );
80 const double beta = 0.25 + 0.0007 * theta_deg * theta_deg;
81 const double epsEff = epsrEnv + beta * ( epsr - epsrEnv );
84 const double z0 = (
TC::ZF0 /
M_PI / std::sqrt( epsEff ) ) * std::acosh( Dout / Din );
91 const double currentDepth = std::min( skinDepth, Din / 2.0 );
95 const double spacing = Dout / Din;
96 const double proximity = spacing / std::sqrt( spacing * spacing - 1.0 );
97 const double crowding = 1.0 + ( proximity - 1.0 ) * ( 1.0 - 2.0 * currentDepth / Din );
102 / ( Din - currentDepth ) );
106 const double lossFraction = std::min( 1.0, beta * epsr / epsEff );
143 const bool Z0_invalid = !std::isfinite(
Z0 ) ||
Z0 <= 0;
144 const bool angL_invalid = !std::isfinite( angL ) || angL < 0;
145 const bool len_invalid = !std::isfinite( len ) || len < 0;
146 const bool Din_invalid = !std::isfinite( Din ) || Din <= 0.0;
147 const bool Dout_invalid = !std::isfinite( Dout ) || Dout <= 0.0;
148 const bool geometry_invalid = Din >= Dout;
173 const bool Z0_invalid = !std::isfinite(
Z0 ) ||
Z0 <= 0;
174 const bool angL_invalid = !std::isfinite( angL ) || angL < 0;
175 const bool len_invalid = !std::isfinite( len ) || len < 0;
176 const bool Din_invalid = !std::isfinite( Din ) || Din <= 0.0;
177 const bool Dout_invalid = !std::isfinite( Dout ) || Dout <= 0.0;
178 const bool geometry_invalid = Din >= Dout;
double GetDispersedEpsilonR(double aF) const
Dispersed permittivity at aF. Returns raw EPSILONR when the model is inactive.
TRANSLINE_PARAMETERS m_synthesizeTarget
Which geometry parameter is the unknown during synthesis (set by the UI)
double GetDispersedTanDelta(double aF) const
Dispersed loss tangent at aF. Returns raw TAND when the model is inactive.
double GetParameter(const TRANSLINE_PARAMETERS aParam) const
Gets the given calculation property.
void SetParameter(const TRANSLINE_PARAMETERS aParam, const double aValue)
Sets the given calculation property.
void SetSynthesisResult(TRANSLINE_PARAMETERS aParam, const double aValue, const TRANSLINE_STATUS aStatus=TRANSLINE_STATUS::OK)
Sets a synthesis result.
void UpdateDielectricModel()
Refit the Djordjevic-Sarkar model from the current parameter map.
double SkinDepth() const
Calculate skin depth.
bool MinimiseZ0Error1D(TRANSLINE_PARAMETERS aOptimise, TRANSLINE_PARAMETERS aMeasure, bool aRecalculateLength=false)
minimizeZ0Error1D
void SetAnalysisResult(TRANSLINE_PARAMETERS aParam, const double aValue, const TRANSLINE_STATUS aStatus=TRANSLINE_STATUS::OK)
Sets an analysis result.
static double UnitPropagationDelay(double aEpsilonEff)
Calculates the unit propagation delay (ps/cm) for the given effective permittivity.
bool Synthesize(SYNTHESIZE_OPTS aOpts) override
Synthesize Din or Dout to hit the target Z0. Length is recomputed from ANG_L.
void Analyse() override
Analyse pair geometry to output Z0, electrical length, losses, skin depth, εeff.
void SetSynthesisResults() override
Sets the output values and status following synthesis.
void SetAnalysisResults() override
Sets the output values and status following analysis.
SYNTHESIZE_OPTS
Options for specifying synthesis inputs, targets, or strategies.
TRANSLINE_STATUS
Parameter status values.
TRANSLINE_PARAMETERS
All possible parameters used (as inputs or outputs) by the transmission line calculations.
@ TWISTEDPAIR_EPSILONR_ENV