Jspice3
ltraacld.c File Reference
#include "spice.h"
#include <stdio.h>
#include <math.h>
#include "util.h"
#include "ltradefs.h"
#include "sperror.h"
Include dependency graph for ltraacld.c:

Go to the source code of this file.

Macros

#define M_PI   3.14159265
 

Functions

int LTRAacLoad (GENmodel *inModel, CKTcircuit *ckt)
 

Macro Definition Documentation

#define M_PI   3.14159265

Definition at line 16 of file ltraacld.c.

Function Documentation

int LTRAacLoad ( GENmodel inModel,
CKTcircuit ckt 
)

Definition at line 20 of file ltraacld.c.

27 {
28  LTRAmodel *model = (LTRAmodel *)inModel;
29  LTRAinstance *here;
30  double y0_r, y0_i, lambda_r, lambda_i, mag, theta;
31  double exparg_r, exparg_i, explambda_r, explambda_i;
32  double y0exp_r, y0exp_i;
33  int savemode, error;
34 
35 /*
36  * LTRAacLoad - loads for LTRA lines for the s.s. ac case
37  * the equations are the following:
38  *
39  * Y_0(s) * V_1(s) - I_1(s) =
40  * exp(-lambda(s)*length) * (Y_0(s) * V_2(s) + I_2(s))
41  * Y_0(s) * V_2(s) - I_2(s) =
42  * exp(-lambda(s)*length) * (Y_0(s) * V_1(s) + I_1(s))
43  *
44  * where Y_0(s) and lambda(s) are as follows:
45  *
46  * Y_0(s) = sqrt( (sC+G)/(sL+R) )
47  * lambda(s) = sqrt( (sC+G)*(sL+R) )
48  *
49  * for the RC, RLC, and LC cases, G=0. The RG case is handled
50  * exactly as the DC case, (and the above equations require
51  * reformulation because they become identical for the DC case.)
52  */
53 
54  /* loop through all the transmission line models */
55  for ( ; model != NULL; model = model->LTRAnextModel) {
56 
57  switch (model->LTRAspecialCase) {
58 
59  case LTRA_MOD_LC:
60 
61  y0_r = model->LTRAadmit;
62  y0_i = 0.0;
63  lambda_i = model->LTRAtd*ckt->CKTomega;
64  lambda_r = 0.0;
65  break;
66 
67  case LTRA_MOD_RLC:
68 
69  theta = 0.5*atan(model->LTRAresist/(ckt->CKTomega*
70  model->LTRAinduct));
71  mag = sqrt(ckt->CKTomega*model->LTRAcapac/
72  sqrt(model->LTRAresist*model->LTRAresist +
73  ckt->CKTomega*ckt->CKTomega*model->LTRAinduct*
74  model->LTRAinduct));
75  y0_r = mag*cos(theta);
76  y0_i = mag*sin(theta);
77 
78  theta = M_PI/2 - theta;
79  mag *= sqrt(model->LTRAresist*model->LTRAresist +
80  ckt->CKTomega*ckt->CKTomega*model->LTRAinduct*
81  model->LTRAinduct);
82  lambda_r = mag*cos(theta);
83  lambda_i = mag*sin(theta);
84  break;
85 
86  case LTRA_MOD_RC:
87 
88  y0_r = y0_i = sqrt(0.5*ckt->CKTomega*model->LTRAcByR);
89  lambda_r = lambda_i =
90  sqrt(0.5*ckt->CKTomega*model->LTRAresist*model->LTRAcapac);
91  break;
92 
93  case LTRA_MOD_RG:
94 
95  savemode = ckt->CKTmode;
96  ckt->CKTmode |= MODEDC;
97  error = LTRAload(inModel,ckt);
98  ckt->CKTmode = savemode;
99  return(error);
100  break;
101 
102  default:
103  return(E_BADPARM);
104  }
105 
106  exparg_r = -lambda_r*model->LTRAlength;
107  exparg_i = -lambda_i*model->LTRAlength;
108  explambda_r = exp(exparg_r) * cos(exparg_i);
109  explambda_i = exp(exparg_r) * sin(exparg_i);
110  y0exp_r = y0_r*explambda_r - y0_i*explambda_i;
111  y0exp_i = y0_r*explambda_i + y0_i*explambda_r;
112 
113  /* loop through all the instances of the model */
114  for (here = model->LTRAinstances; here != NULL;
115  here = here->LTRAnextInstance) {
116 
117 
118  *(here->LTRAibr1Pos1Ptr + 0) += y0_r;
119  *(here->LTRAibr1Pos1Ptr + 1) += y0_i;
120  *(here->LTRAibr1Neg1Ptr + 0) -= y0_r;
121  *(here->LTRAibr1Neg1Ptr + 1) -= y0_i;
122 
123  *(here->LTRAibr1Ibr1Ptr + 0) -= 1.0;
124 
125  *(here->LTRAibr1Pos2Ptr + 0) -= y0exp_r;
126  *(here->LTRAibr1Pos2Ptr + 1) -= y0exp_i;
127  *(here->LTRAibr1Neg2Ptr + 0) += y0exp_r;
128  *(here->LTRAibr1Neg2Ptr + 1) += y0exp_i;
129 
130  *(here->LTRAibr1Ibr2Ptr + 0) -= explambda_r;
131  *(here->LTRAibr1Ibr2Ptr + 1) -= explambda_i;
132 
133 
134  *(here->LTRAibr2Pos2Ptr + 0) += y0_r;
135  *(here->LTRAibr2Pos2Ptr + 1) += y0_i;
136  *(here->LTRAibr2Neg2Ptr + 0) -= y0_r;
137  *(here->LTRAibr2Neg2Ptr + 1) -= y0_i;
138 
139  *(here->LTRAibr2Ibr2Ptr + 0) -= 1.0;
140 
141  *(here->LTRAibr2Pos1Ptr + 0) -= y0exp_r;
142  *(here->LTRAibr2Pos1Ptr + 1) -= y0exp_i;
143  *(here->LTRAibr2Neg1Ptr + 0) += y0exp_r;
144  *(here->LTRAibr2Neg1Ptr + 1) += y0exp_i;
145 
146  *(here->LTRAibr2Ibr1Ptr + 0) -= explambda_r;
147  *(here->LTRAibr2Ibr1Ptr + 1) -= explambda_i;
148 
149  *(here->LTRApos1Ibr1Ptr + 0) += 1.0;
150  *(here->LTRAneg1Ibr1Ptr + 0) -= 1.0;
151  *(here->LTRApos2Ibr2Ptr + 0) += 1.0;
152  *(here->LTRAneg2Ibr2Ptr + 0) -= 1.0;
153  }
154  }
155  return (OK);
156 }
double * LTRAibr2Ibr2Ptr
Definition: ltradefs.h:52
#define MODEDC
Definition: cktdefs.h:149
double LTRAcapac
Definition: ltradefs.h:109
double LTRAinduct
Definition: ltradefs.h:108
double * LTRAibr2Neg2Ptr
Definition: ltradefs.h:56
double * LTRAibr1Neg2Ptr
Definition: ltradefs.h:50
double LTRAlength
Definition: ltradefs.h:110
#define LTRA_MOD_RG
Definition: ltradefs.h:163
#define E_BADPARM
Definition: iferrmsg.h:26
struct sLTRAinstance * LTRAnextInstance
Definition: ltradefs.h:21
double * LTRAibr2Ibr1Ptr
Definition: ltradefs.h:51
double * LTRAibr2Pos2Ptr
Definition: ltradefs.h:55
#define LTRA_MOD_LC
Definition: ltradefs.h:164
double * LTRAibr1Pos1Ptr
Definition: ltradefs.h:47
#define OK
Definition: iferrmsg.h:17
int LTRAload()
LTRAinstance * LTRAinstances
Definition: ltradefs.h:84
#define NULL
Definition: spdefs.h:121
double * LTRAibr1Ibr2Ptr
Definition: ltradefs.h:46
double cos()
double CKTomega
Definition: cktdefs.h:198
double * LTRAibr2Neg1Ptr
Definition: ltradefs.h:54
double LTRAcByR
Definition: ltradefs.h:117
double sin()
double * LTRAneg1Ibr1Ptr
Definition: ltradefs.h:57
double * LTRAibr1Pos2Ptr
Definition: ltradefs.h:49
double * LTRAibr2Pos1Ptr
Definition: ltradefs.h:53
static char model[32]
Definition: subckt.c:76
double * LTRApos2Ibr2Ptr
Definition: ltradefs.h:60
double LTRAtd
Definition: ltradefs.h:111
#define M_PI
Definition: ltraacld.c:16
double LTRAadmit
Definition: ltradefs.h:113
#define LTRA_MOD_RLC
Definition: ltradefs.h:161
double * LTRAneg2Ibr2Ptr
Definition: ltradefs.h:58
struct sLTRAmodel * LTRAnextModel
Definition: ltradefs.h:82
double * LTRAibr1Neg1Ptr
Definition: ltradefs.h:48
long CKTmode
Definition: cktdefs.h:139
double * LTRApos1Ibr1Ptr
Definition: ltradefs.h:59
#define LTRA_MOD_RC
Definition: ltradefs.h:162
double * LTRAibr1Ibr1Ptr
Definition: ltradefs.h:45
double LTRAresist
Definition: ltradefs.h:107
int LTRAspecialCase
Definition: ltradefs.h:158