Jspice3
ltra.c
Go to the documentation of this file.
1 /***************************************************************************
2 JSPICE3 adaptation of Spice3f2 - Copyright (c) Stephen R. Whiteley 1992
3 Copyright 1990 Regents of the University of California. All rights reserved.
4 Authors: 1990 Jaijeet S. Roychowdhury
5  1993 Stephen R. Whiteley
6 ****************************************************************************/
7 
8 /*
9  * This file defines the LTRA data structures that are available to the
10  * next level(s) up the calling hierarchy
11  */
12 
13 #include "spice.h"
14 #include <stdio.h>
15 #include <math.h>
16 #include "ltradefs.h"
17 #include "uflags.h"
18 
19 
20 static IFparm LTRApTable[] = { /* parameters */
21  IOPAU("v1", LTRA_V1, IF_REAL, "Initial voltage at end 1"),
22  IOPAU("i1", LTRA_I1, IF_REAL, "Initial current at end 1"),
23  IOPAU("v2", LTRA_V2, IF_REAL, "Initial voltage at end 2"),
24  IOPAU("i2", LTRA_I2, IF_REAL, "Initial current at end 2"),
25  IP( "ic", LTRA_IC, IF_REALVEC,"Initial condition vector:v1,i1,v2,i2"),
26  OPU( "pos_node1", LTRA_POS_NODE1,IF_INTEGER,
27  "Positive node of end 1 of line"),
28  OPU( "neg_node1", LTRA_NEG_NODE1,IF_INTEGER,
29  "Negative node of end 1 of line"),
30  OPU( "pos_node2", LTRA_POS_NODE2,IF_INTEGER,
31  "Positive node of end 2 of line"),
32  OPU( "neg_node2", LTRA_NEG_NODE2,IF_INTEGER,
33  "Negative node of end 2 of line"),
34  OPU( "br_eq1", LTRA_BR_EQ1, IF_INTEGER, "Branch equation 1"),
35  OPU( "br_eq2", LTRA_BR_EQ2, IF_INTEGER, "Branch equation 2"),
36 };
37 
38 static IFparm LTRAmPTable[] = { /* model parameters */
39  IP( "ltra", LTRA_MOD_LTRA, IF_FLAG, "LTRA model"),
40  IOPU( "r", LTRA_MOD_R, IF_REAL, "Resistance per metre"),
41  IOPAU("l", LTRA_MOD_L, IF_REAL, "Inductance per metre"),
42  IOPU( "g", LTRA_MOD_G, IF_REAL, "Conductance per metre"),
43  IOPAU("c", LTRA_MOD_C, IF_REAL, "Capacitance per metre"),
44  IOPU( "len", LTRA_MOD_LEN, IF_REAL, "length of line"),
45  IOP( "rel", LTRA_MOD_RELTOL, IF_REAL,
46  "Rel. rate of change of deriv. for bkpt"),
47  IOP( "abs", LTRA_MOD_ABSTOL, IF_REAL,
48  "Abs. rate of change of deriv. for bkpt"),
49  IOPU( "nocontrol", LTRA_MOD_NOCONTROL, IF_FLAG, "No timestep control"),
50  IOPU( "halfcontrol",LTRA_MOD_HALFCONTROL, IF_FLAG, "Half timestep control"),
51  IOPU( "fullcontrol",LTRA_MOD_FULLCONTROL, IF_FLAG, "Full timestep control"),
52  IOPU( "steplimit", LTRA_MOD_STEPLIMIT, IF_FLAG,
53  "always limit timestep to 0.8*(delay of line)"),
54  IOPU( "nosteplimit",LTRA_MOD_NOSTEPLIMIT,IF_FLAG,
55  "don't always limit timestep to 0.8*(delay of line)"),
56  IOPU( "lininterp", LTRA_MOD_LININTERP, IF_FLAG,
57  "use linear interpolation"),
58  IOPU( "quadinterp", LTRA_MOD_QUADINTERP, IF_FLAG,
59  "use quadratic interpolation"),
60  IOPU( "mixedinterp",LTRA_MOD_MIXEDINTERP,IF_FLAG,
61  "use linear or quadratic interpolation"),
62  IOPU( "truncnr", LTRA_MOD_TRUNCNR, IF_FLAG,
63  "use N-R iterations for timestep calculation"),
64  IOPU( "truncdontcut",LTRA_MOD_TRUNCDONTCUT, IF_FLAG,
65  "don't limit timestep for accuracy"),
66  IOPAU("compactrel", LTRA_MOD_STLINEREL, IF_REAL,
67  "special reltol for straight line checking"),
68  IOPAU("compactabs", LTRA_MOD_STLINEABS, IF_REAL,
69  "special abstol for straight line checking"),
70  OP( "z0", LTRA_MOD_Z0, IF_REAL, "transmission line impedance"),
71  OP( "delay", LTRA_MOD_TD, IF_REAL, "transmission line delay")
72 };
73 
74 static char *LTRAnames[] = {
75  "P1+",
76  "P1-",
77  "P2+",
78  "P2-"
79 };
80 
81 static char *LTRAmodNames[] = {
82  "ltra",
83  NULL
84 };
85 
86 static IFkeys LTRAkeys[] = {
87  { 'o', NUMELEMS(LTRAnames), LTRAnames, 0, 0 },
88 };
89 
90 
91 static int LTRAkSize = NUMELEMS(LTRAkeys);
92 static int LTRApTSize = NUMELEMS(LTRApTable);
93 static int LTRAmPTSize = NUMELEMS(LTRAmPTable);
94 static int LTRAiSize = sizeof(LTRAinstance);
95 static int LTRAmSize = sizeof(LTRAmodel);
96 
97 
99  { "LTRA",
100  "Lossy transmission line",
101 
102  &LTRAkSize,
103  LTRAkeys,
104  1,
105  LTRAmodNames,
106  LTRAparse,
107 
108  &LTRApTSize,
109  LTRApTable,
110 
111  &LTRAmPTSize,
112  LTRAmPTable,
113  },
114 
115  LTRAparam,
116  LTRAmParam,
117  LTRAload,
118  LTRAsetup,
119  LTRAsetup,
120  NULL,
121  LTRAtrunc,
122  NULL,
123  LTRAacLoad,
124  LTRAaccept,
125  LTRAdestroy,
126  LTRAmDelete,
127  LTRAdelete,
128  NULL, /* getic */
129  LTRAask,
130  LTRAmAsk,
131  NULL, /* pzLoad */
132  NULL, /* convTest */
133  NULL, /* disto */
134  NULL, /* noise */
135 
136  &LTRAiSize,
137  &LTRAmSize
138 };
#define LTRA_MOD_MIXEDINTERP
Definition: ltradefs.h:199
#define LTRA_V1
Definition: ltradefs.h:171
static IFkeys LTRAkeys[]
Definition: ltra.c:86
#define LTRA_MOD_NOSTEPLIMIT
Definition: ltradefs.h:196
#define LTRA_NEG_NODE1
Definition: ltradefs.h:177
#define LTRA_MOD_TRUNCNR
Definition: ltradefs.h:200
static int LTRAkSize
Definition: ltra.c:91
#define LTRA_MOD_RELTOL
Definition: ltradefs.h:190
#define LTRA_MOD_L
Definition: ltradefs.h:186
static IFparm LTRAmPTable[]
Definition: ltra.c:38
void LTRAdestroy()
static int LTRApTSize
Definition: ltra.c:92
#define IOP(a, b, c, d)
Definition: devdefs.h:120
int LTRAmParam()
#define LTRA_MOD_LININTERP
Definition: ltradefs.h:197
#define LTRA_MOD_C
Definition: ltradefs.h:188
#define OPU(a, b, c, d)
Definition: uflags.h:65
#define NUMELEMS(ARRAY)
Definition: spice.h:157
#define LTRA_MOD_LTRA
Definition: ltradefs.h:184
#define LTRA_MOD_LEN
Definition: ltradefs.h:189
#define LTRA_MOD_STLINEREL
Definition: ltradefs.h:202
int LTRAaccept()
#define LTRA_I2
Definition: ltradefs.h:174
static int LTRAmSize
Definition: ltra.c:95
#define LTRA_MOD_TD
Definition: ltradefs.h:207
int LTRAsetup()
#define LTRA_BR_EQ1
Definition: ltradefs.h:180
#define LTRA_V2
Definition: ltradefs.h:173
#define LTRA_MOD_FULLCONTROL
Definition: ltradefs.h:194
#define LTRA_BR_EQ2
Definition: ltradefs.h:181
#define LTRA_POS_NODE1
Definition: ltradefs.h:176
SPICEdev LTRAinfo
Definition: ltra.c:98
#define LTRA_I1
Definition: ltradefs.h:172
int LTRAload()
struct sLTRAinstance LTRAinstance
int LTRAask()
#define NULL
Definition: spdefs.h:121
static IFparm LTRApTable[]
Definition: ltra.c:20
int LTRAacLoad()
#define IF_INTEGER
Definition: ifsim.h:107
#define LTRA_MOD_G
Definition: ltradefs.h:187
#define LTRA_IC
Definition: ltradefs.h:175
#define LTRA_POS_NODE2
Definition: ltradefs.h:178
#define LTRA_MOD_HALFCONTROL
Definition: ltradefs.h:193
Definition: ifsim.h:54
Definition: ifsim.h:267
int LTRAmDelete()
#define LTRA_MOD_Z0
Definition: ltradefs.h:206
static int LTRAiSize
Definition: ltra.c:94
#define IF_REAL
Definition: ifsim.h:108
#define IP(a, b, c, d)
Definition: devdefs.h:118
static int LTRAmPTSize
Definition: ltra.c:93
#define IF_FLAG
Definition: ifsim.h:106
#define IF_REALVEC
Definition: ifsim.h:125
static char * LTRAnames[]
Definition: ltra.c:74
#define LTRA_MOD_R
Definition: ltradefs.h:185
#define LTRA_MOD_TRUNCDONTCUT
Definition: ltradefs.h:201
static char * LTRAmodNames[]
Definition: ltra.c:81
#define LTRA_MOD_NOCONTROL
Definition: ltradefs.h:192
#define IOPAU(a, b, c, d)
Definition: uflags.h:51
int LTRAtrunc()
#define LTRA_NEG_NODE2
Definition: ltradefs.h:179
struct sLTRAmodel LTRAmodel
int LTRAparam()
#define OP(a, b, c, d)
Definition: devdefs.h:119
int LTRAdelete()
#define IOPU(a, b, c, d)
Definition: uflags.h:48
#define LTRA_MOD_QUADINTERP
Definition: ltradefs.h:198
void LTRAparse()
#define LTRA_MOD_STLINEABS
Definition: ltradefs.h:203
int LTRAmAsk()
#define LTRA_MOD_ABSTOL
Definition: ltradefs.h:191
#define LTRA_MOD_STEPLIMIT
Definition: ltradefs.h:195