KiCad PCB EDA Suite
transline.h
Go to the documentation of this file.
1/*
2 * transline.h - base for a transmission line class definition
3 *
4 * Copyright (C) 2005 Stefan Jahn <[email protected]>
5 * Modifications 2018 for Kicad: Jean-Pierre Charras
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this package; see the file COPYING. If not, write to
19 * the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
20 * Boston, MA 02110-1301, USA.
21 *
22 */
23
24#ifndef __TRANSLINE_H
25#define __TRANSLINE_H
26
27#include <gal/color4d.h>
28
29#define TRANSLINE_OK 0
30#define TRANSLINE_WARNING 1
31#define TRANSLINE_ERROR 2
32
33// IDs for lines parameters used in calculation:
34// (Used to retrieve these parameters from UI.
35// DUMMY_PRM is used to skip a param line in dialogs. It is not really a parameter
37{
39 EPSILONR_PRM, // dielectric constant
40 TAND_PRM, // Dielectric Loss Tangent
41 RHO_PRM, // Conductivity of conductor
42 H_PRM, // height of substrate
43 TWISTEDPAIR_TWIST_PRM, // Twists per length
45 STRIPLINE_A_PRM, // Stripline : distance from line to top metal
46 T_PRM, // thickness of top metal
48 MUR_PRM, // magnetic permeability of substrate
50 MURC_PRM, // magnetic permeability of conductor
51 FREQUENCY_PRM, // Frequency of operation
52 Z0_PRM, // characteristic impedance
55 ANG_L_PRM, // Electrical length in angle
57 PHYS_DIAM_IN_PRM, // Inner diameter of cable
58 PHYS_S_PRM, // width of gap between line and ground
59 PHYS_DIAM_OUT_PRM, // Outer diameter of cable
60 PHYS_LEN_PRM, // Length of cable
62};
63
64
65// IDs for lines parameters used in calculation that are not given by the UI
67{
69 SIGMA_PRM, // Conductivity of the metal
70 SKIN_DEPTH_PRM, // Skin depth
71 LOSS_DIELECTRIC_PRM, // Loss in dielectric (dB)
72 LOSS_CONDUCTOR_PRM, // Loss in conductors (dB)
73 CUTOFF_FREQUENCY_PRM, // Cutoff frequency for higher order modes
74 EPSILON_EFF_PRM, // Effective dielectric constant
76};
77
79{
80public:
81 TRANSLINE();
82 virtual ~TRANSLINE();
83
84 const char* m_Name;
85 void setProperty( enum PRMS_ID aPrmId, double aValue );
86 double getProperty( enum PRMS_ID aPrmId );
87
88
89 void getProperties();
90 void checkProperties();
91 void setResult( int, double, const char* );
92 void setResult( int, const char* );
93 bool isSelected( enum PRMS_ID aPrmId );
94
95 void Init();
96 virtual void synthesize();
97 virtual void calc() {}
98
102 virtual void calcAnalyze(){};
103
107 virtual void calcSynthesize() {}
108
112 virtual void showAnalyze() {}
113
117 virtual void showSynthesize() {}
118
122 virtual void show_results() {}
123
124 void analyze();
125
126 KIGFX::COLOR4D errCol = KIGFX::COLOR4D( 1, 0.63, 0.63, 1 );
129
130protected:
132 double len; // length of line
133 double er_eff; // effective dielectric constant
134 double ang_l; // Electrical length in angle
135
136 bool minimizeZ0Error1D( double* );
137 double skin_depth();
138 void ellipke( double, double&, double& );
139 double ellipk( double );
140 void setErrorLevel( PRMS_ID, char );
141};
142
143#endif /* __TRANSLINE_H */
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
virtual ~TRANSLINE()
Definition: transline.cpp:85
virtual void showSynthesize()
Shows analysis results and checks for errors / warnings.
Definition: transline.h:117
bool isSelected(enum PRMS_ID aPrmId)
Definition: transline.cpp:119
virtual void calc()
Definition: transline.h:97
double ellipk(double)
Definition: transline.cpp:324
KIGFX::COLOR4D warnCol
Definition: transline.h:127
double getProperty(enum PRMS_ID aPrmId)
Definition: transline.cpp:140
void Init()
Definition: transline.cpp:90
virtual void calcSynthesize()
Computation for synthesis.
Definition: transline.h:107
KIGFX::COLOR4D okCol
Definition: transline.h:128
void setResult(int, double, const char *)
Definition: transline.cpp:133
bool minimizeZ0Error1D(double *)
@function minimizeZ0Error1D
Definition: transline.cpp:349
double m_parameters[EXTRA_PRMS_COUNT]
Definition: transline.h:131
KIGFX::COLOR4D errCol
Definition: transline.h:126
void getProperties()
@function getProperties
Definition: transline.cpp:150
void checkProperties()
@function checkProperties
Definition: transline.cpp:169
void analyze()
Definition: transline.cpp:211
virtual void synthesize()
Definition: transline.cpp:220
double len
Definition: transline.h:132
void ellipke(double, double &, double &)
Definition: transline.cpp:259
const char * m_Name
Definition: transline.h:84
void setProperty(enum PRMS_ID aPrmId, double aValue)
Definition: transline.cpp:109
virtual void showAnalyze()
Shows synthesis results and checks for errors / warnings.
Definition: transline.h:112
double skin_depth()
@function skin_depth calculate skin depth
Definition: transline.cpp:237
double er_eff
Definition: transline.h:133
virtual void show_results()
Shows results.
Definition: transline.h:122
double ang_l
Definition: transline.h:134
virtual void calcAnalyze()
Computation for analysis.
Definition: transline.h:102
void setErrorLevel(PRMS_ID, char)
@function setErrorLevel
Definition: transline.cpp:435
EXTRA_PRMS_ID
Definition: transline.h:67
@ LOSS_DIELECTRIC_PRM
Definition: transline.h:71
@ EPSILON_EFF_PRM
Definition: transline.h:74
@ LOSS_CONDUCTOR_PRM
Definition: transline.h:72
@ SIGMA_PRM
Definition: transline.h:69
@ CUTOFF_FREQUENCY_PRM
Definition: transline.h:73
@ SKIN_DEPTH_PRM
Definition: transline.h:70
@ EXTRA_PRMS_START
Definition: transline.h:68
@ EXTRA_PRMS_COUNT
Definition: transline.h:75
PRMS_ID
Definition: transline.h:37
@ UNKNOWN_ID
Definition: transline.h:38
@ TWISTEDPAIR_EPSILONR_ENV_PRM
Definition: transline.h:49
@ Z0_O_PRM
Definition: transline.h:54
@ FREQUENCY_PRM
Definition: transline.h:51
@ DUMMY_PRM
Definition: transline.h:61
@ RHO_PRM
Definition: transline.h:41
@ PHYS_DIAM_OUT_PRM
Definition: transline.h:59
@ T_PRM
Definition: transline.h:46
@ Z0_E_PRM
Definition: transline.h:53
@ MURC_PRM
Definition: transline.h:50
@ MUR_PRM
Definition: transline.h:48
@ STRIPLINE_A_PRM
Definition: transline.h:45
@ Z0_PRM
Definition: transline.h:52
@ TAND_PRM
Definition: transline.h:40
@ PHYS_LEN_PRM
Definition: transline.h:60
@ ANG_L_PRM
Definition: transline.h:55
@ H_T_PRM
Definition: transline.h:44
@ TWISTEDPAIR_TWIST_PRM
Definition: transline.h:43
@ PHYS_DIAM_IN_PRM
Definition: transline.h:57
@ ROUGH_PRM
Definition: transline.h:47
@ EPSILONR_PRM
Definition: transline.h:39
@ PHYS_S_PRM
Definition: transline.h:58
@ H_PRM
Definition: transline.h:42
@ PHYS_WIDTH_PRM
Definition: transline.h:56