51 TRANSLINE_CALCULATION_BASE( {
TCP::H,
59 void Analyse()
override {}
62 double GetSoldermaskDeltaQ(
double aWOverH,
double aCOverH )
const override
64 if( m_useMicrostripDeltaQ )
66 const double q2Coated = WanHoorfarQ2( aWOverH, 1.0 + aCOverH );
67 const double q2Base = WanHoorfarQ2( aWOverH, 1.0 );
68 return std::max( 0.0, q2Coated - q2Base );
74 std::pair<double, double> CallPair(
double aEpsEffUncoated,
double aTanDSub,
double aEpsRSub,
75 double aWOverH )
const
77 return ApplySoldermaskCorrection( aEpsEffUncoated, aTanDSub, aEpsRSub, aWOverH, 1.0e9 );
81 void SetAnalysisResults()
override {}
82 void SetSynthesisResults()
override {}
85 bool m_useMicrostripDeltaQ{
false };
86 double m_fixedDeltaQ{ 0.0 };
130COPLANAR MakeFr4Cpw(
bool aBackMetal )
151 double aTanD = 0.025 )
169 PROBE_TRANSLINE probe;
170 probe.SetParameter(
TCP::H, 1.0e-3 );
175 probe.m_fixedDeltaQ = 0.1;
177 const auto result = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
188 PROBE_TRANSLINE probe;
189 probe.SetParameter(
TCP::H, 1.0e-3 );
194 probe.m_fixedDeltaQ = 0.1;
196 const auto result = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
207 PROBE_TRANSLINE probe;
208 probe.SetParameter(
TCP::H, 1.0e-3 );
213 probe.m_fixedDeltaQ = 0.0;
215 const auto result = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
244 PROBE_TRANSLINE probe;
245 probe.SetParameter(
TCP::H, 1.0e-3 );
250 probe.m_useMicrostripDeltaQ =
true;
252 const auto result = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
256 const double deltaQ = q2Coated - q2Base;
257 const double expected = 3.3 + deltaQ * ( 3.5 - 1.0 );
263 BOOST_CHECK_CLOSE_FRACTION(
result.first, 3.4166, 1.0e-3 );
264 BOOST_CHECK_CLOSE_FRACTION( deltaQ, 0.0466, 2.0e-3 );
274 PROBE_TRANSLINE probe;
275 probe.SetParameter(
TCP::H, 1.0e-3 );
280 probe.m_useMicrostripDeltaQ =
true;
282 const double epsEffUncoated = 3.3;
283 const double epsRSub = 4.4;
284 const auto result = probe.CallPair( epsEffUncoated, 0.02, epsRSub, 1.75 );
286 const double qSub = ( epsEffUncoated - 1.0 ) / ( epsRSub - 1.0 );
287 const double limit = qSub * epsRSub + ( 1.0 - qSub ) * 3.5;
294 BOOST_CHECK_CLOSE_FRACTION(
result.first, limit, 5.0e-2 );
310 EnableMask( withMaskOff, 25.0e-6 );
347 const double drop1 = z0Open - z0One;
348 const double drop2 = z0Open - z0Two;
387 COPLANAR open = MakeFr4Cpw(
false );
391 COPLANAR tracesOnly = MakeFr4Cpw(
false );
397 COPLANAR gapsFilled = MakeFr4Cpw(
false );
427 BOOST_TEST( ( aLossy - aLossless ) > 1.0e-6 );
437 PROBE_TRANSLINE probe;
438 probe.SetParameter(
TCP::H, 1.0e-3 );
443 probe.m_useMicrostripDeltaQ =
true;
445 const double epsEffUncoated = 3.3;
446 const double epsRSub = 4.4;
447 const double tanDSub = 0.02;
449 const auto result = probe.CallPair( epsEffUncoated, tanDSub, epsRSub, 1.75 );
453 const double deltaQ = q2Coated - q2Base;
454 const double epsEffCoated = epsEffUncoated + deltaQ * ( 3.5 - 1.0 );
455 const double qSub = ( epsEffUncoated - 1.0 ) / ( epsRSub - 1.0 );
456 const double expectedTanD =
457 ( qSub * epsRSub * tanDSub + deltaQ * 3.5 * 0.025 ) / epsEffCoated;
459 BOOST_CHECK_CLOSE_FRACTION(
result.first, epsEffCoated, 1.0e-9 );
460 BOOST_CHECK_CLOSE_FRACTION(
result.second, expectedTanD, 1.0e-9 );
472 PROBE_TRANSLINE probe;
473 probe.SetParameter(
TCP::H, 1.0e-3 );
477 probe.m_useMicrostripDeltaQ =
true;
480 const auto losslessMask = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
483 const auto lossyMask = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
486 BOOST_TEST( lossyMask.second > losslessMask.second );
489 const auto losslessSub = probe.CallPair( 3.3, 0.0, 4.4, 1.75 );
500 PROBE_TRANSLINE probe;
501 probe.SetParameter(
TCP::H, 1.0e-3 );
505 probe.m_useMicrostripDeltaQ =
true;
508 auto r1 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
513 auto r2 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
518 auto r3 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
523 auto r4 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
531 PROBE_TRANSLINE probe;
532 probe.SetParameter(
TCP::H, 1.0e-3 );
536 probe.m_useMicrostripDeltaQ =
true;
539 auto r1 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
544 auto r2 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
549 auto r3 = probe.CallPair( 3.3, 0.02, 4.4, 1.75 );
559 COPLANAR cpwOpen = MakeFr4Cpw(
false );
561 COPLANAR cpwCoated = MakeFr4Cpw(
false );
567 COPLANAR cbcpwOpen = MakeFr4Cpw(
true );
569 COPLANAR cbcpwCoated = MakeFr4Cpw(
true );
Coplanar waveguide (CPW) and conductor-backed coplanar waveguide (CBCPW) calculation.
void Analyse() override
Analyse trace geometry to produce Z0, electrical length, effective permittivity, and losses.
void Analyse() override
Analyse track geometry parameters to output Z0 and Ang_L.
void Analyse() override
Analyse track geometry parameters to output Z0 and Ang_L.
The base class for all transmission line calculations.
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.
static double WanHoorfarQ2(double aU, double aHBarTop)
Wan-Hoorfar 2000 eq.
std::unordered_map< TRANSLINE_PARAMETERS, std::pair< double, TRANSLINE_STATUS > > & GetAnalysisResults()
Gets the output parameters following analysis.
constexpr double UNIT_MIL
BOOST_AUTO_TEST_CASE(HorizontalAlignment)
BOOST_AUTO_TEST_SUITE(CadstarPartParser)
BOOST_TEST(contains==c.ExpectedContains)
BOOST_AUTO_TEST_SUITE_END()
VECTOR3I expected(15, 30, 45)
BOOST_AUTO_TEST_CASE(MaskAbsentReturnsInputsUnchanged)
wxString result
Test unit parsing edge cases and error handling.
BOOST_CHECK_EQUAL(result, "25.4")
SYNTHESIZE_OPTS
Options for specifying synthesis inputs, targets, or strategies.
TRANSLINE_PARAMETERS
All possible parameters used (as inputs or outputs) by the transmission line calculations.