30 double aF1,
double aF2 )
33 throw std::invalid_argument(
"DIELECTRIC_DJORDJEVIC_SARKAR: f1 must be positive" );
36 throw std::invalid_argument(
"DIELECTRIC_DJORDJEVIC_SARKAR: f2 must exceed f1" );
38 if( aFSpec < aF1 || aFSpec > aF2 )
39 throw std::invalid_argument(
"DIELECTRIC_DJORDJEVIC_SARKAR: f_spec outside [f1, f2]" );
45 if( aTanDSpec == 0.0 )
56 const std::complex<double> j{ 0.0, 1.0 };
57 const std::complex<double> k = std::log( ( aF2 + j * aFSpec ) / ( aF1 + j * aFSpec ) );
59 m_m = -aTanDSpec * aEpsRSpec / k.imag();
60 m_epsInf = aEpsRSpec * ( 1.0 + aTanDSpec * k.real() / k.imag() );
71 const std::complex<double> j{ 0.0, 1.0 };
90 return -eps.imag() / eps.real();
std::complex< double > ComplexEpsilonAt(double aF) const
Complex relative permittivity at aF. Imag part is non-positive (loss).
double TanDeltaAt(double aF) const
Loss tangent tan delta = -Im(eps) / Re(eps) at aF.
double EpsilonRealAt(double aF) const
Real part of relative permittivity at aF.
void Fit(double aEpsRSpec, double aTanDSpec, double aFSpec, double aF1=1.0e3, double aF2=1.0e12)
Fit the model from a single (epsR, tan delta) datapoint at f_spec.