1 /**********
2 Copyright 1990 Regents of the University of California. All rights reserved.
3 Author: 1988 Jaijeet S Roychowdhury
4 **********/
5
6 #include "ngspice/ngspice.h"
7 #include "ngspice/distodef.h"
8
9
10 /*
11 * all subFns are local to this file so they need not be renamed to
12 * the awful 7 letter standard; however, for reasons of uniformity,
13 * they are being renamed, losing all readability in the process.
14 * the renaming convention is as follows:
15 * example: 3v3F1m2
16 * 3v => 3 variable term xyz
17 * 2F1m2 => Two F1 minus F2
18 * therefore the old name would be : S3v3F1minusF2
19 * for the imaginary sub functions, the v is replaced by an i
20 *
21 */
22 static double
S2v2F1(double cxy,double r1h1x,double i1h1x,double r1h1y,double i1h1y)23 S2v2F1(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y)
24
25 /* 5 arguments */
26
27 {
28 return(cxy*(r1h1x*r1h1y - i1h1x*i1h1y));
29 }
30
31 static double
S2i2F1(double cxy,double r1h1x,double i1h1x,double r1h1y,double i1h1y)32 S2i2F1(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y)
33
34 /* 5 arguments */
35
36 {
37 return(cxy*(r1h1x*i1h1y + i1h1x*r1h1y));
38 }
39
40 static double
S2v3F1(double cxy,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r2h11x,double i2h11x,double r2h11y,double i2h11y)41 S2v3F1(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r2h11x, double i2h11x, double r2h11y, double i2h11y)
42
43 /* 9 arguments */
44
45
46 {
47 return(cxy*(r1h1x*r2h11y - i1h1x*i2h11y + r1h1y*r2h11x - i1h1y*
48 i2h11x));
49 }
50
51
52 static double
S2i3F1(double cxy,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r2h11x,double i2h11x,double r2h11y,double i2h11y)53 S2i3F1(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r2h11x, double i2h11x, double r2h11y, double i2h11y)
54
55 /* 9 arguments */
56
57
58 {
59 return(cxy*(r1h1x*i2h11y + i1h1x*r2h11y + r1h1y*i2h11x + i1h1y*
60 r2h11x));
61 }
62
63 static double
S2vF12(double cxy,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h2x,double i1h2x,double r1h2y,double i1h2y)64 S2vF12(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h2x, double i1h2x, double r1h2y, double i1h2y)
65
66 /* 9 arguments */
67
68
69 {
70 return(cxy*(r1h1x*r1h2y - i1h1x*i1h2y + r1h1y*r1h2x - i1h1y*i1h2x));
71 }
72
73 static double
S2iF12(double cxy,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h2x,double i1h2x,double r1h2y,double i1h2y)74 S2iF12(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h2x, double i1h2x, double r1h2y, double i1h2y)
75
76 /* 9 arguments */
77
78
79 {
80 return(cxy*(r1h1x*i1h2y + i1h1x*r1h2y + r1h1y*i1h2x + i1h1y*r1h2x));
81 }
82
83 static double
S2v2F12(double cxy,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h2x,double i1h2x,double r1h2y,double i1h2y,double r2h11x,double i2h11x,double r2h11y,double i2h11y,double h2f1f2x,double ih2f1f2x,double h2f1f2y,double ih2f1f2y)84 S2v2F12(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h2x, double i1h2x, double r1h2y, double i1h2y, double r2h11x, double i2h11x, double r2h11y, double i2h11y, double h2f1f2x, double ih2f1f2x, double h2f1f2y, double ih2f1f2y)
85
86 /* 17 arguments */
87
88
89
90
91 {
92 return ( cxy * (
93 2*(r1h1x*h2f1f2y - i1h1x*ih2f1f2y
94 +r1h1y*h2f1f2x - i1h1y*ih2f1f2x)
95 + r1h2x*r2h11y - i1h2x*i2h11y
96 + r1h2y*r2h11x - i1h2y*i2h11x
97 ));
98 }
99
100 static double
S2i2F12(double cxy,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h2x,double i1h2x,double r1h2y,double i1h2y,double r2h11x,double i2h11x,double r2h11y,double i2h11y,double h2f1f2x,double ih2f1f2x,double h2f1f2y,double ih2f1f2y)101 S2i2F12(double cxy, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h2x, double i1h2x, double r1h2y, double i1h2y, double r2h11x, double i2h11x, double r2h11y, double i2h11y, double h2f1f2x, double ih2f1f2x, double h2f1f2y, double ih2f1f2y)
102
103 /* 17 arguments */
104
105
106
107
108 {
109 return ( cxy * (
110 2*(r1h1x*ih2f1f2y + i1h1x*h2f1f2y
111 +r1h1y*ih2f1f2x + i1h1y*h2f1f2x)
112 + r1h2x*i2h11y + i1h2x*r2h11y
113 + r1h2y*i2h11x + i1h2y*r2h11x
114 ));
115 }
116
117 static double
S3v3F1(double cxyz,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h1z,double i1h1z)118 S3v3F1(double cxyz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z)
119
120 /* 7 arguments */
121
122
123 {
124 return( cxyz * (
125 (r1h1x*r1h1y - i1h1x*i1h1y)*r1h1z - (i1h1x*r1h1y + r1h1x*i1h1y)*i1h1z
126 ));
127 }
128
129 static double
S3i3F1(double cxyz,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h1z,double i1h1z)130 S3i3F1(double cxyz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z)
131
132 /* 7 arguments */
133
134
135 {
136 return( cxyz * (
137 (r1h1x*r1h1y - i1h1x*i1h1y)*i1h1z + (i1h1x*r1h1y + r1h1x*i1h1y)*r1h1z
138 ));
139 }
140
141 static double
S3v2F12(double cxyz,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h1z,double i1h1z,double r1h2x,double i1h2x,double r1h2y,double i1h2y,double r1h2z,double i1h2z)142 S3v2F12(double cxyz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z, double r1h2x, double i1h2x, double r1h2y, double i1h2y, double r1h2z, double i1h2z)
143
144 /* 13 arguments */
145
146
147
148 {
149 return ( cxyz * (
150 (r1h1x*r1h1y - i1h1x*i1h1y)*r1h2z - (i1h1x*r1h1y + r1h1x*i1h1y)*i1h2z
151 +
152 (r1h1x*r1h1z - i1h1x*i1h1z)*r1h2y - (i1h1x*r1h1z + r1h1x*i1h1z)*i1h2y
153 +
154 (r1h1z*r1h1y - i1h1z*i1h1y)*r1h2x - (i1h1z*r1h1y + r1h1z*i1h1y)*i1h2x
155 ));
156 }
157
158 static double
S3i2F12(double cxyz,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h1z,double i1h1z,double r1h2x,double i1h2x,double r1h2y,double i1h2y,double r1h2z,double i1h2z)159 S3i2F12(double cxyz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z, double r1h2x, double i1h2x, double r1h2y, double i1h2y, double r1h2z, double i1h2z)
160
161 /* 13 arguments */
162
163
164
165 {
166 return ( cxyz * (
167 (r1h1x*r1h1y - i1h1x*i1h1y)*i1h2z + (i1h1x*r1h1y + r1h1x*i1h1y)*r1h2z
168 +
169 (r1h1x*r1h1z - i1h1x*i1h1z)*i1h2y + (i1h1x*r1h1z + r1h1x*i1h1z)*r1h2y
170 +
171 (r1h1z*r1h1y - i1h1z*i1h1y)*i1h2x + (i1h1z*r1h1y + r1h1z*i1h1y)*r1h2x
172 ));
173 }
174
175 /* the load functions */
176 /* also renamed... */
177 double
DFn2F1(double cxx,double cyy,double czz,double cxy,double cyz,double cxz,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h1z,double i1h1z)178 DFn2F1(double cxx, double cyy, double czz, double cxy, double cyz, double cxz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z)
179
180 /* 12 variables */
181
182
183 {
184 double temp;
185
186 temp = S2v2F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x) +
187 S2v2F1(cyy,r1h1y,i1h1y,r1h1y,i1h1y) +
188 S2v2F1(czz,r1h1z,i1h1z,r1h1z,i1h1z) +
189 S2v2F1(cxy,r1h1x,i1h1x,r1h1y,i1h1y) +
190 S2v2F1(cyz,r1h1y,i1h1y,r1h1z,i1h1z) +
191 S2v2F1(cxz,r1h1x,i1h1x,r1h1z,i1h1z);
192
193 return(temp);
194 }
195
196 double
DFi2F1(double cxx,double cyy,double czz,double cxy,double cyz,double cxz,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h1z,double i1h1z)197 DFi2F1(double cxx, double cyy, double czz, double cxy, double cyz, double cxz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z)
198
199 /* 12 variables */
200
201
202 {
203 double temp;
204
205 temp = S2i2F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x) +
206 S2i2F1(cyy,r1h1y,i1h1y,r1h1y,i1h1y) +
207 S2i2F1(czz,r1h1z,i1h1z,r1h1z,i1h1z) +
208 S2i2F1(cxy,r1h1x,i1h1x,r1h1y,i1h1y) +
209 S2i2F1(cyz,r1h1y,i1h1y,r1h1z,i1h1z) +
210 S2i2F1(cxz,r1h1x,i1h1x,r1h1z,i1h1z);
211
212 return(temp);
213 }
214
215 double
DFn3F1(double cxx,double cyy,double czz,double cxy,double cyz,double cxz,double cxxx,double cyyy,double czzz,double cxxy,double cxxz,double cxyy,double cyyz,double cxzz,double cyzz,double cxyz,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h1z,double i1h1z,double r2h11x,double i2h11x,double r2h11y,double i2h11y,double r2h11z,double i2h11z)216 DFn3F1(double cxx, double cyy, double czz, double cxy, double cyz, double cxz, double cxxx, double cyyy, double czzz, double cxxy, double cxxz, double cxyy, double cyyz, double cxzz, double cyzz, double cxyz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z, double r2h11x, double i2h11x, double r2h11y, double i2h11y, double r2h11z, double i2h11z)
217 /* 28 args - 16 + 6 + 6 */
218
219
220
221 {
222 double temp;
223
224 temp = S2v3F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r2h11x,i2h11x,r2h11x,i2h11x)
225 +S2v3F1(cyy,r1h1y,i1h1y,r1h1y,i1h1y,r2h11y,i2h11y,r2h11y,i2h11y)
226 +S2v3F1(czz,r1h1z,i1h1z,r1h1z,i1h1z,r2h11z,i2h11z,r2h11z,i2h11z);
227 temp +=
228 S2v3F1(cxy,r1h1x,i1h1x,r1h1y,i1h1y,r2h11x,i2h11x,r2h11y,i2h11y)
229 +S2v3F1(cyz,r1h1y,i1h1y,r1h1z,i1h1z,r2h11y,i2h11y,r2h11z,i2h11z)
230 +S2v3F1(cxz,r1h1x,i1h1x,r1h1z,i1h1z,r2h11x,i2h11x,r2h11z,i2h11z)
231 +S3v3F1(cxxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h1x,i1h1x);
232 temp +=
233 S3v3F1(cyyy,r1h1y,i1h1y,r1h1y,i1h1y,r1h1y,i1h1y)
234 +S3v3F1(czzz,r1h1z,i1h1z,r1h1z,i1h1z,r1h1z,i1h1z)
235 +S3v3F1(cxxy,r1h1x,i1h1x,r1h1x,i1h1x,r1h1y,i1h1y)
236 +S3v3F1(cxxz,r1h1x,i1h1x,r1h1x,i1h1x,r1h1z,i1h1z)
237 +S3v3F1(cxyy,r1h1x,i1h1x,r1h1y,i1h1y,r1h1y,i1h1y);
238 temp +=
239 S3v3F1(cyyz,r1h1y,i1h1y,r1h1y,i1h1y,r1h1z,i1h1z)
240 +S3v3F1(cxzz,r1h1x,i1h1x,r1h1z,i1h1z,r1h1z,i1h1z)
241 +S3v3F1(cyzz,r1h1y,i1h1y,r1h1z,i1h1z,r1h1z,i1h1z)
242 +S3v3F1(cxyz,r1h1x,i1h1x,r1h1y,i1h1y,r1h1z,i1h1z);
243
244 return(temp);
245 }
246
247 double
DFi3F1(double cxx,double cyy,double czz,double cxy,double cyz,double cxz,double cxxx,double cyyy,double czzz,double cxxy,double cxxz,double cxyy,double cyyz,double cxzz,double cyzz,double cxyz,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h1z,double i1h1z,double r2h11x,double i2h11x,double r2h11y,double i2h11y,double r2h11z,double i2h11z)248 DFi3F1(double cxx, double cyy, double czz, double cxy, double cyz, double cxz, double cxxx, double cyyy, double czzz, double cxxy, double cxxz, double cxyy, double cyyz, double cxzz, double cyzz, double cxyz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z, double r2h11x, double i2h11x, double r2h11y, double i2h11y, double r2h11z, double i2h11z)
249 /* 28 args - 10 + 6 + 6 */
250
251
252
253 {
254 double temp;
255
256 temp = S2i3F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r2h11x,i2h11x,r2h11x,i2h11x)
257 +S2i3F1(cyy,r1h1y,i1h1y,r1h1y,i1h1y,r2h11y,i2h11y,r2h11y,i2h11y)
258 +S2i3F1(czz,r1h1z,i1h1z,r1h1z,i1h1z,r2h11z,i2h11z,r2h11z,i2h11z)
259 +S2i3F1(cxy,r1h1x,i1h1x,r1h1y,i1h1y,r2h11x,i2h11x,r2h11y,i2h11y);
260 temp +=
261 S2i3F1(cyz,r1h1y,i1h1y,r1h1z,i1h1z,r2h11y,i2h11y,r2h11z,i2h11z)
262 +S2i3F1(cxz,r1h1x,i1h1x,r1h1z,i1h1z,r2h11x,i2h11x,r2h11z,i2h11z)
263 +S3i3F1(cxxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h1x,i1h1x)
264 +S3i3F1(cyyy,r1h1y,i1h1y,r1h1y,i1h1y,r1h1y,i1h1y);
265 temp +=
266 S3i3F1(czzz,r1h1z,i1h1z,r1h1z,i1h1z,r1h1z,i1h1z)
267 +S3i3F1(cxxy,r1h1x,i1h1x,r1h1x,i1h1x,r1h1y,i1h1y)
268 +S3i3F1(cxxz,r1h1x,i1h1x,r1h1x,i1h1x,r1h1z,i1h1z)
269 +S3i3F1(cxyy,r1h1x,i1h1x,r1h1y,i1h1y,r1h1y,i1h1y);
270 temp +=
271 S3i3F1(cyyz,r1h1y,i1h1y,r1h1y,i1h1y,r1h1z,i1h1z)
272 +S3i3F1(cxzz,r1h1x,i1h1x,r1h1z,i1h1z,r1h1z,i1h1z)
273 +S3i3F1(cyzz,r1h1y,i1h1y,r1h1z,i1h1z,r1h1z,i1h1z)
274 +S3i3F1(cxyz,r1h1x,i1h1x,r1h1y,i1h1y,r1h1z,i1h1z);
275
276 return(temp);
277 }
278
279 double
DFnF12(double cxx,double cyy,double czz,double cxy,double cyz,double cxz,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h1z,double i1h1z,double r1h2x,double i1h2x,double r1h2y,double i1h2y,double r1h2z,double i1h2z)280 DFnF12(double cxx, double cyy, double czz, double cxy, double cyz, double cxz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z, double r1h2x, double i1h2x, double r1h2y, double i1h2y, double r1h2z, double i1h2z)
281
282 /* 18 args - 6 + 6 + 6 */
283
284
285
286 {
287 double temp;
288
289 temp = S2vF12(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h2x,i1h2x,r1h2x,i1h2x)
290 +S2vF12(cyy,r1h1y,i1h1y,r1h1y,i1h1y,r1h2y,i1h2y,r1h2y,i1h2y)
291 +S2vF12(czz,r1h1z,i1h1z,r1h1z,i1h1z,r1h2z,i1h2z,r1h2z,i1h2z);
292 temp +=
293 S2vF12(cxy,r1h1x,i1h1x,r1h1y,i1h1y,r1h2x,i1h2x,r1h2y,i1h2y)
294 +S2vF12(cyz,r1h1y,i1h1y,r1h1z,i1h1z,r1h2y,i1h2y,r1h2z,i1h2z)
295 +S2vF12(cxz,r1h1x,i1h1x,r1h1z,i1h1z,r1h2x,i1h2x,r1h2z,i1h2z);
296
297 return(0.5*temp);
298 }
299
300 double
DFiF12(double cxx,double cyy,double czz,double cxy,double cyz,double cxz,double r1h1x,double i1h1x,double r1h1y,double i1h1y,double r1h1z,double i1h1z,double r1h2x,double i1h2x,double r1h2y,double i1h2y,double r1h2z,double i1h2z)301 DFiF12(double cxx, double cyy, double czz, double cxy, double cyz, double cxz, double r1h1x, double i1h1x, double r1h1y, double i1h1y, double r1h1z, double i1h1z, double r1h2x, double i1h2x, double r1h2y, double i1h2y, double r1h2z, double i1h2z)
302
303 /* 18 args - 6 + 6 + 6 */
304
305
306
307 {
308 double temp;
309
310 temp = S2iF12(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h2x,i1h2x,r1h2x,i1h2x)
311 +S2iF12(cyy,r1h1y,i1h1y,r1h1y,i1h1y,r1h2y,i1h2y,r1h2y,i1h2y)
312 +S2iF12(czz,r1h1z,i1h1z,r1h1z,i1h1z,r1h2z,i1h2z,r1h2z,i1h2z);
313 temp +=
314 S2iF12(cxy,r1h1x,i1h1x,r1h1y,i1h1y,r1h2x,i1h2x,r1h2y,i1h2y)
315 +S2iF12(cyz,r1h1y,i1h1y,r1h1z,i1h1z,r1h2y,i1h2y,r1h2z,i1h2z)
316 +S2iF12(cxz,r1h1x,i1h1x,r1h1z,i1h1z,r1h2x,i1h2x,r1h2z,i1h2z);
317
318 return(temp*0.5); /* divided by two to scale down */
319 }
320
321 double
DFn2F12(DpassStr * p)322 DFn2F12(DpassStr *p)
323
324 /* 40 vars - 16 + 6 + 6 + 6 + 6 */
325 /*
326 * a structure because a standard C compiler can handle only
327 * 32 variables.
328 *
329 */
330 {
331 double temp;
332
333 temp = S2v2F12(p->cxx,p->r1h1x,p->i1h1x,
334 p->r1h1x,p->i1h1x,
335 p->r1h2x,p->i1h2x,
336 p->r1h2x,p->i1h2x,
337 p->r2h11x,p->i2h11x,
338 p->r2h11x,p->i2h11x,
339 p->h2f1f2x,p->ih2f1f2x,
340 p->h2f1f2x,p->ih2f1f2x);
341 temp +=
342 S2v2F12(p->cyy,p->r1h1y,p->i1h1y,
343 p->r1h1y,p->i1h1y,
344 p->r1h2y,p->i1h2y,
345 p->r1h2y,p->i1h2y,
346 p->r2h11y,p->i2h11y,
347 p->r2h11y,p->i2h11y,
348 p->h2f1f2y,p->ih2f1f2y,
349 p->h2f1f2y,p->ih2f1f2y);
350 temp +=
351 S2v2F12(p->czz,p->r1h1z,p->i1h1z,
352 p->r1h1z,p->i1h1z,
353 p->r1h2z,p->i1h2z,
354 p->r1h2z,p->i1h2z,
355 p->r2h11z,p->i2h11z,
356 p->r2h11z,p->i2h11z,
357 p->h2f1f2z,p->ih2f1f2z,
358 p->h2f1f2z,p->ih2f1f2z);
359 temp +=
360 S2v2F12(p->cxy,p->r1h1x,p->i1h1x,
361 p->r1h1y,p->i1h1y,
362 p->r1h2x,p->i1h2x,
363 p->r1h2y,p->i1h2y,
364 p->r2h11x,p->i2h11x,
365 p->r2h11y,p->i2h11y,
366 p->h2f1f2x,p->ih2f1f2x,
367 p->h2f1f2y,p->ih2f1f2y);
368 temp +=
369 S2v2F12(p->cyz,p->r1h1y,p->i1h1y,
370 p->r1h1z,p->i1h1z,
371 p->r1h2y,p->i1h2y,
372 p->r1h2z,p->i1h2z,
373 p->r2h11y,p->i2h11y,
374 p->r2h11z,p->i2h11z,
375 p->h2f1f2y,p->ih2f1f2y,
376 p->h2f1f2z,p->ih2f1f2z);
377 temp +=
378 S2v2F12(p->cxz,p->r1h1x,p->i1h1x,
379 p->r1h1z,p->i1h1z,
380 p->r1h2x,p->i1h2x,
381 p->r1h2z,p->i1h2z,
382 p->r2h11x,p->i2h11x,
383 p->r2h11z,p->i2h11z,
384 p->h2f1f2x,p->ih2f1f2x,
385 p->h2f1f2z,p->ih2f1f2z);
386 temp +=
387 S3v2F12(p->cxxx,p->r1h1x,
388 p->i1h1x,p->r1h1x,p->i1h1x,p->r1h1x,p->i1h1x,
389 p->r1h2x,p->i1h2x,
390 p->r1h2x,p->i1h2x,p->r1h2x,p->i1h2x)
391 +S3v2F12(p->cyyy,p->r1h1y,
392 p->i1h1y,p->r1h1y,p->i1h1y,p->r1h1y,p->i1h1y,
393 p->r1h2y,p->i1h2y,
394 p->r1h2y,p->i1h2y,p->r1h2y,p->i1h2y);
395 temp +=
396 S3v2F12(p->czzz,p->r1h1z,
397 p->i1h1z,p->r1h1z,p->i1h1z,p->r1h1z,p->i1h1z,
398 p->r1h2z,p->i1h2z,
399 p->r1h2z,p->i1h2z,p->r1h2z,p->i1h2z)
400 +S3v2F12(p->cxxy,p->r1h1x,
401 p->i1h1x,p->r1h1x,p->i1h1x,p->r1h1y,p->i1h1y,
402 p->r1h2x,p->i1h2x,
403 p->r1h2x,p->i1h2x,p->r1h2y,p->i1h2y);
404 temp +=
405 S3v2F12(p->cxxz,p->r1h1x,
406 p->i1h1x,p->r1h1x,p->i1h1x,p->r1h1z,p->i1h1z,
407 p->r1h2x,p->i1h2x,
408 p->r1h2x,p->i1h2x,p->r1h2z,p->i1h2z)
409 +S3v2F12(p->cxyy,p->r1h1x,
410 p->i1h1x,p->r1h1y,p->i1h1y,p->r1h1y,p->i1h1y,
411 p->r1h2x,p->i1h2x,
412 p->r1h2y,p->i1h2y,p->r1h2y,p->i1h2y);
413 temp +=
414 S3v2F12(p->cyyz,p->r1h1y,
415 p->i1h1y,p->r1h1y,p->i1h1y,p->r1h1z,p->i1h1z,
416 p->r1h2y,p->i1h2y,
417 p->r1h2y,p->i1h2y,p->r1h2z,p->i1h2z)
418 +S3v2F12(p->cxzz,p->r1h1x,
419 p->i1h1x,p->r1h1z,p->i1h1z,p->r1h1z,p->i1h1z,
420 p->r1h2x,p->i1h2x,
421 p->r1h2z,p->i1h2z,p->r1h2z,p->i1h2z);
422 temp +=
423 S3v2F12(p->cyzz,p->r1h1y,
424 p->i1h1y,p->r1h1z,p->i1h1z,p->r1h1z,p->i1h1z,
425 p->r1h2y,p->i1h2y,
426 p->r1h2z,p->i1h2z,p->r1h2z,p->i1h2z)
427 +S3v2F12(p->cxyz,p->r1h1x,
428 p->i1h1x,p->r1h1y,p->i1h1y,p->r1h1z,p->i1h1z,
429 p->r1h2x,p->i1h2x,
430 p->r1h2y,p->i1h2y,p->r1h2z,p->i1h2z);
431
432 return(temp/3.); /* divided by 3 to get kernel (otherwise we get 3*kernel) */
433 }
434
435 double
DFi2F12(DpassStr * p)436 DFi2F12(DpassStr *p)
437
438 /* 40 vars - 16 + 6 + 6 + 6 + 6 */
439 {
440 double temp;
441
442 temp = S2i2F12(p->cxx,p->r1h1x,p->i1h1x,
443 p->r1h1x,p->i1h1x,
444 p->r1h2x,p->i1h2x,
445 p->r1h2x,p->i1h2x,
446 p->r2h11x,p->i2h11x,
447 p->r2h11x,p->i2h11x,
448 p->h2f1f2x,p->ih2f1f2x,
449 p->h2f1f2x,p->ih2f1f2x);
450 temp +=
451 S2i2F12(p->cyy,p->r1h1y,p->i1h1y,
452 p->r1h1y,p->i1h1y,
453 p->r1h2y,p->i1h2y,
454 p->r1h2y,p->i1h2y,
455 p->r2h11y,p->i2h11y,
456 p->r2h11y,p->i2h11y,
457 p->h2f1f2y,p->ih2f1f2y,
458 p->h2f1f2y,p->ih2f1f2y);
459 temp +=
460 S2i2F12(p->czz,p->r1h1z,p->i1h1z,
461 p->r1h1z,p->i1h1z,
462 p->r1h2z,p->i1h2z,
463 p->r1h2z,p->i1h2z,
464 p->r2h11z,p->i2h11z,
465 p->r2h11z,p->i2h11z,
466 p->h2f1f2z,p->ih2f1f2z,
467 p->h2f1f2z,p->ih2f1f2z);
468 temp +=
469 S2i2F12(p->cxy,p->r1h1x,p->i1h1x,
470 p->r1h1y,p->i1h1y,
471 p->r1h2x,p->i1h2x,
472 p->r1h2y,p->i1h2y,
473 p->r2h11x,p->i2h11x,
474 p->r2h11y,p->i2h11y,
475 p->h2f1f2x,p->ih2f1f2x,
476 p->h2f1f2y,p->ih2f1f2y);
477 temp +=
478 S2i2F12(p->cyz,p->r1h1y,p->i1h1y,
479 p->r1h1z,p->i1h1z,
480 p->r1h2y,p->i1h2y,
481 p->r1h2z,p->i1h2z,
482 p->r2h11y,p->i2h11y,
483 p->r2h11z,p->i2h11z,
484 p->h2f1f2y,p->ih2f1f2y,
485 p->h2f1f2z,p->ih2f1f2z);
486 temp +=
487 S2i2F12(p->cxz,p->r1h1x,p->i1h1x,
488 p->r1h1z,p->i1h1z,
489 p->r1h2x,p->i1h2x,
490 p->r1h2z,p->i1h2z,
491 p->r2h11x,p->i2h11x,
492 p->r2h11z,p->i2h11z,
493 p->h2f1f2x,p->ih2f1f2x,
494 p->h2f1f2z,p->ih2f1f2z);
495 temp +=
496 S3i2F12(p->cxxx,p->r1h1x,
497 p->i1h1x,p->r1h1x,p->i1h1x,p->r1h1x,p->i1h1x,
498 p->r1h2x,p->i1h2x,
499 p->r1h2x,p->i1h2x,p->r1h2x,p->i1h2x);
500 temp +=
501 S3i2F12(p->cyyy,p->r1h1y,
502 p->i1h1y,p->r1h1y,p->i1h1y,p->r1h1y,p->i1h1y,
503 p->r1h2y,p->i1h2y,
504 p->r1h2y,p->i1h2y,p->r1h2y,p->i1h2y)
505 +S3i2F12(p->czzz,p->r1h1z,
506 p->i1h1z,p->r1h1z,p->i1h1z,p->r1h1z,p->i1h1z,
507 p->r1h2z,p->i1h2z,
508 p->r1h2z,p->i1h2z,p->r1h2z,p->i1h2z);
509 temp +=
510 S3i2F12(p->cxxy,p->r1h1x,
511 p->i1h1x,p->r1h1x,p->i1h1x,p->r1h1y,p->i1h1y,
512 p->r1h2x,p->i1h2x,
513 p->r1h2x,p->i1h2x,p->r1h2y,p->i1h2y)
514 +S3i2F12(p->cxxz,p->r1h1x,
515 p->i1h1x,p->r1h1x,p->i1h1x,p->r1h1z,p->i1h1z,
516 p->r1h2x,p->i1h2x,
517 p->r1h2x,p->i1h2x,p->r1h2z,p->i1h2z);
518 temp +=
519 S3i2F12(p->cxyy,p->r1h1x,
520 p->i1h1x,p->r1h1y,p->i1h1y,p->r1h1y,p->i1h1y,
521 p->r1h2x,p->i1h2x,
522 p->r1h2y,p->i1h2y,p->r1h2y,p->i1h2y)
523 +S3i2F12(p->cyyz,p->r1h1y,
524 p->i1h1y,p->r1h1y,p->i1h1y,p->r1h1z,p->i1h1z,
525 p->r1h2y,p->i1h2y,
526 p->r1h2y,p->i1h2y,p->r1h2z,p->i1h2z);
527 temp +=
528 S3i2F12(p->cxzz,p->r1h1x,
529 p->i1h1x,p->r1h1z,p->i1h1z,p->r1h1z,p->i1h1z,
530 p->r1h2x,p->i1h2x,
531 p->r1h2z,p->i1h2z,p->r1h2z,p->i1h2z);
532 temp += S3i2F12(p->cyzz,p->r1h1y,
533 p->i1h1y,p->r1h1z,p->i1h1z,p->r1h1z,p->i1h1z,
534 p->r1h2y,p->i1h2y,
535 p->r1h2z,p->i1h2z,p->r1h2z,p->i1h2z)
536 +S3i2F12(p->cxyz,p->r1h1x,
537 p->i1h1x,p->r1h1y,p->i1h1y,p->r1h1z,p->i1h1z,
538 p->r1h2x,p->i1h2x,
539 p->r1h2y,p->i1h2y,p->r1h2z,p->i1h2z);
540
541 return(temp/3.); /* divided by 3 to get kernel (otherwise we get 3*kernel) */
542 }
543
544 double
D1n2F1(double cxx,double r1h1x,double i1h1x)545 D1n2F1(double cxx, double r1h1x, double i1h1x)
546
547 /* 12 variables */
548
549
550 {
551 double temp;
552
553 temp = S2v2F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x);
554
555 return(temp);
556 }
557
558 double
D1n3F1(double cxx,double cxxx,double r1h1x,double i1h1x,double r2h11x,double i2h11x)559 D1n3F1(double cxx, double cxxx, double r1h1x, double i1h1x, double r2h11x, double i2h11x)
560 {
561 double temp;
562
563 temp = S2v3F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r2h11x,i2h11x,r2h11x,i2h11x)
564 +S3v3F1(cxxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h1x,i1h1x);
565
566 return(temp);
567 }
568
569
570 double
D1nF12(double cxx,double r1h1x,double i1h1x,double r1h2x,double i1h2x)571 D1nF12(double cxx, double r1h1x, double i1h1x, double r1h2x, double i1h2x)
572
573 /* 18 args - 6 + 6 + 6 */
574
575
576
577 {
578 double temp;
579
580 temp = S2vF12(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h2x,i1h2x,r1h2x,i1h2x);
581
582 return(0.5*temp);
583 }
584
585
586 double
D1n2F12(double cxx,double cxxx,double r1h1x,double i1h1x,double r1h2x,double i1h2x,double r2h11x,double i2h11x,double h2f1f2x,double ih2f1f2x)587 D1n2F12(double cxx, double cxxx, double r1h1x, double i1h1x, double r1h2x, double i1h2x, double r2h11x, double i2h11x, double h2f1f2x, double ih2f1f2x)
588
589 /* 40 vars - 16 + 6 + 6 + 6 + 6 */
590
591
592
593
594
595 {
596 double temp;
597
598 temp = S2v2F12(cxx,r1h1x,i1h1x,r1h1x,i1h1x,
599 r1h2x,i1h2x,r1h2x,i1h2x,
600 r2h11x,i2h11x,r2h11x,i2h11x,
601 h2f1f2x,ih2f1f2x,h2f1f2x,ih2f1f2x)
602 +S3v2F12(cxxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h1x,i1h1x,
603 r1h2x,i1h2x,r1h2x,i1h2x,r1h2x,i1h2x);
604
605 return(temp/3.); /* divided by 3 to get kernel (otherwise we get 3*kernel) */
606 }
607
608
609 double
D1i2F1(double cxx,double r1h1x,double i1h1x)610 D1i2F1(double cxx, double r1h1x, double i1h1x)
611
612 /* 12 variables */
613
614
615 {
616 double temp;
617
618 temp = S2i2F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x);
619
620 return(temp);
621 }
622
623
624 double
D1i3F1(double cxx,double cxxx,double r1h1x,double i1h1x,double r2h11x,double i2h11x)625 D1i3F1(double cxx, double cxxx, double r1h1x, double i1h1x, double r2h11x, double i2h11x)
626 {
627 double temp;
628
629 temp = S2i3F1(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r2h11x,i2h11x,r2h11x,i2h11x)
630 +S3i3F1(cxxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h1x,i1h1x);
631
632 return(temp);
633 }
634
635
636 double
D1iF12(double cxx,double r1h1x,double i1h1x,double r1h2x,double i1h2x)637 D1iF12(double cxx, double r1h1x, double i1h1x, double r1h2x, double i1h2x)
638
639 /* 18 args - 6 + 6 + 6 */
640
641
642
643 {
644 double temp;
645
646 temp = S2iF12(cxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h2x,i1h2x,r1h2x,i1h2x);
647
648 return(0.5*temp);
649 }
650
651
652 double
D1i2F12(double cxx,double cxxx,double r1h1x,double i1h1x,double r1h2x,double i1h2x,double r2h11x,double i2h11x,double h2f1f2x,double ih2f1f2x)653 D1i2F12(double cxx, double cxxx, double r1h1x, double i1h1x, double r1h2x, double i1h2x, double r2h11x, double i2h11x, double h2f1f2x, double ih2f1f2x)
654
655 /* 40 vars - 16 + 6 + 6 + 6 + 6 */
656
657
658
659
660
661 {
662 double temp;
663
664 temp = S2i2F12(cxx,r1h1x,i1h1x,r1h1x,i1h1x,
665 r1h2x,i1h2x,r1h2x,i1h2x,
666 r2h11x,i2h11x,r2h11x,i2h11x,
667 h2f1f2x,ih2f1f2x,h2f1f2x,ih2f1f2x)
668 +S3i2F12(cxxx,r1h1x,i1h1x,r1h1x,i1h1x,r1h1x,i1h1x,
669 r1h2x,i1h2x,r1h2x,i1h2x,r1h2x,i1h2x);
670
671 return(temp/3.); /* divided by 3 to get kernel (otherwise we get 3*kernel) */
672 }
673
674