KiCad PCB EDA Suite
Loading...
Searching...
No Matches
dielectric_djordjevic_sarkar.h
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright The KiCad Developers, see AUTHORS.TXT for contributors.
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 */
19
20#ifndef TRANSLINE_CALCULATIONS_DIELECTRIC_DJORDJEVIC_SARKAR_H
21#define TRANSLINE_CALCULATIONS_DIELECTRIC_DJORDJEVIC_SARKAR_H
22
23#include <complex>
24
25
39{
40public:
48 void Fit( double aEpsRSpec, double aTanDSpec, double aFSpec, double aF1 = 1.0e3,
49 double aF2 = 1.0e12 );
50
52 std::complex<double> ComplexEpsilonAt( double aF ) const;
53
55 double EpsilonRealAt( double aF ) const;
56
58 double TanDeltaAt( double aF ) const;
59
60 double GetEpsilonInf() const { return m_epsInf; }
61 double GetM() const { return m_m; }
62 bool IsLossless() const { return m_lossless; }
63
64private:
65 double m_epsInf = 1.0;
66 double m_m = 0.0;
67 double m_f1 = 1.0e3;
68 double m_f2 = 1.0e12;
69
70 // Avoids a complex-log evaluation on every query when tan delta is zero.
71 bool m_lossless = true;
72};
73
74#endif
Kramers-Kronig-consistent wideband dielectric model after Djordjevic et al.
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.