36 cpwline::cpwline () : circuit (2) {
54 else if (std::isinf (arg) && arg < 0) {
59 nr_double_t a, b,
c, f,
s, fk = 1, fe = 1,
t, da =
arg;
64 da = -arg / (1 -
arg);
71 for (i = 0; i < iMax; i++) {
78 if (c / a < NR_EPSI)
break;
127 nr_double_t er = subst->getPropertyDouble (
"er");
128 nr_double_t
h = subst->getPropertyDouble (
"h");
129 nr_double_t
t = subst->getPropertyDouble (
"t");
133 tand = subst->getPropertyDouble (
"tand");
134 rho = subst->getPropertyDouble (
"rho");
138 nr_double_t k1, kk1, kpk1, k2, k3, q1, q2, q3 = 0, qz, er0 = 0;
141 k1 = W / (W + s +
s);
159 er0 = 1 + q3 * qz * (er - 1);
170 er0 = 1 + (er - 1) / 2 * q2 / q1;
176 nr_double_t
d, se, We, ke, qe;
182 ke = We / (We + se + se);
191 er0 = 1 + q3 * qz * (er - 1);
200 er0 = er0 - (0.7 * (er0 - 1) * t / s) / (q1 + (0.7 * t /
s));
212 nr_double_t u = 0.54 - (0.64 - 0.015 * p) * p;
213 nr_double_t
v = 0.43 - (0.86 - 0.54 * p) * p;
220 nr_double_t
n = (1 - k1) * 8 *
M_PI / (t * (1 + k1));
221 nr_double_t a = W / 2;
222 nr_double_t b = a +
s;
225 ac_factor = ac / (4 *
Z0 * kk1 * kpk1 * (1 - k1 * k1));
234 nr_double_t sr_er_f =
sr_er0;
249 ad *= f * (sr_er_f - 1 / sr_er_f);
270 calcAB (frequency, zl, alpha, beta);
273 nr_double_t z = zl /
z0;
274 nr_double_t
y = 1 / z;
288 nr_double_t
t, nr_double_t er,
int backMetal,
289 nr_double_t& ZlEff, nr_double_t& ErEff) {
292 nr_double_t k1, k2, k3, q1, q2, q3 = 0, qz;
298 k1 = W / (W + s +
s);
306 ErEff = 1 + q3 * qz * (er - 1);
313 ErEff = 1 + (er - 1) / 2 * q2 / q1;
319 nr_double_t
d, se, We, ke, qe;
325 ke = We / (We + se + se);
331 ErEff = 1 + q3 * qz * (er - 1);
340 ErEff = ErEff - (0.7 * (ErEff - 1) * t / s) / (q1 + (0.7 * t /
s));
350 nr_double_t er, nr_double_t ZlEff,
351 nr_double_t ErEff, nr_double_t frequency,
352 nr_double_t& ZlEffFreq,
353 nr_double_t& ErEffFreq) {
358 ZlEffFreq = ZlEff * ErEff;
365 nr_double_t u = 0.54 - (0.64 - 0.015 * p) * p;
366 nr_double_t
v = 0.43 - (0.86 - 0.54 * p) * p;
373 ZlEffFreq /= ErEffFreq;
409 calcAB (frequency, zl, alpha, beta);
std::complex< nr_double_t > nr_complex_t
static nr_double_t ellipk(nr_double_t)
#define MU0
magnetic constant of vacuum ( )
matrix real(matrix a)
Real part matrix.
#define T0
standard temperature
#define PROP_RNG_STR2(s1, s2)
nr_complex_t coth(const nr_complex_t z)
Compute complex hyperbolic cotangent.
nr_double_t getPropertyDouble(const char *)
nr_complex_t pow(const nr_complex_t z, const nr_double_t d)
Compute power function with real exponent.
substrate * getSubstrate(void)
void setInternalVoltageSource(bool i)
void setVoltageSources(int)
#define K
Absolute 0 in centigrade.
#define M_SQRT1_2
Inverse of Square root of 2 ( )
static const nr_double_t z0
int getSize(void)
Get the number of ports the circuit element has.
nr_complex_t cosh(const nr_complex_t z)
Compute complex hyperbolic cosine.
nr_complex_t sqr(const nr_complex_t z)
Square of complex number.
#define M_PI_2
Half of Archimedes' constant ( )
void initPropagation(void)
nr_complex_t sqrt(const nr_complex_t z)
Compute principal value of square root.
void calcAB(nr_double_t, nr_double_t &, nr_double_t &, nr_double_t &)
void saveCharacteristics(nr_double_t)
static void analyseDispersion(nr_double_t, nr_double_t, nr_double_t, nr_double_t, nr_double_t, nr_double_t, nr_double_t, nr_double_t &, nr_double_t &)
nr_complex_t cosech(const nr_complex_t z)
Compute complex argument hyperbolic cosec.
nr_complex_t tanh(const nr_complex_t z)
Compute complex hyperbolic tangent.
void calcNoiseSP(nr_double_t)
static void ellipke(nr_double_t, nr_double_t &, nr_double_t &)
#define M_PI
Archimedes' constant ( )
matrix transpose(matrix a)
Matrix transposition.
void setY(int, int, nr_complex_t)
void calcNoiseAC(nr_double_t)
void allocMatrixMNA(void)
nr_complex_t sinh(const nr_complex_t z)
Compute complex hyperbolic sine.
static void analyseQuasiStatic(nr_double_t, nr_double_t, nr_double_t, nr_double_t, nr_double_t, int, nr_double_t &, nr_double_t &)
#define C0
speed of light in vacuum ( )
void voltageSource(int, int, int, nr_double_t value=0.0)
matrix eye(int rs, int cs)
Create identity matrix with specified number of rows and columns.
nr_complex_t exp(const nr_complex_t z)
Compute complex exponential.
void setS(int, int, nr_complex_t)
matrix conj(matrix a)
Conjugate complex matrix.
void setCharacteristic(const char *, nr_double_t)
char * getPropertyString(const char *)
nr_complex_t log(const nr_complex_t z)
Compute principal value of natural logarithm of z.
void initSP(void)
placehoder for S-Parameter initialisation function
#define Z0
Wave impedance in vacuum ( )
matrix arg(matrix a)
Computes the argument of each matrix element.
static nr_double_t ellipa(nr_double_t)