CG  Version 25
polynomialTZ.h
Go to the documentation of this file.
1 
2  // ********** initialize3DPolyTW is a bpp macro that sets up the E and H polynomial tw function
3 
4 #beginMacro initialize3DPolyTW(ux,uy,uz)
5 
6  if( false && (degreeSpaceX==0 || degreeSpaceY==0 || degreeSpaceZ==0)
7  && (degreeSpaceX!=0 || degreeSpaceY!=0 || degreeSpaceZ!=0) )
8  {
9  // For testing we can set the TZ function in 3D to equal that of the 2D function
10 
11  int e1,e2;
12  if( degreeSpaceX==0 )
13  { // here we rotate about the y-axis so (x->z, y->y)
14  e1=uz; e2=uy;
15  }
16  else if( degreeSpaceY==0 )
17  { // here we rotate about the x-axis (y->z x->x
18  e1=ux; e2=uz;
19  }
20  else
21  {
22  e1=ux; e2=uy;
23  }
24  int degreeSpace2=max(degreeSpaceX,degreeSpaceY,degreeSpaceZ);
25 
26  if( degreeSpace2==1 )
27  {
28  spatialCoefficientsForTZ(0,0,0,e1)=1.; // u=1+x+y
29  spatialCoefficientsForTZ(1,0,0,e1)=1.;
30  spatialCoefficientsForTZ(0,1,0,e1)=1.;
31 
32  spatialCoefficientsForTZ(0,0,0,e2)= 2.; // v=2+x-y
33  spatialCoefficientsForTZ(1,0,0,e2)= 1.;
34  spatialCoefficientsForTZ(0,1,0,e2)=-1.;
35 
36  }
37  else if( degreeSpace2==2 )
38  {
39  spatialCoefficientsForTZ(2,0,0,e1)=1.; // u=x^2 + 2xy + y^2
40  spatialCoefficientsForTZ(1,1,0,e1)=2.;
41  spatialCoefficientsForTZ(0,2,0,e1)=1.;
42 
43  spatialCoefficientsForTZ(2,0,0,e2)= 1.; // v=x^2 -2xy - y^2
44  spatialCoefficientsForTZ(1,1,0,e2)=-2.;
45  spatialCoefficientsForTZ(0,2,0,e2)=-1.;
46  }
47  else if( degreeSpace2==3 )
48  {
49  spatialCoefficientsForTZ(2,0,0,e1)=1.; // u=x^2 + 2xy + y^2 + .5*y^3 + .25*x^2*y + .2*x^3 - .3*x*y^2
50  spatialCoefficientsForTZ(1,1,0,e1)=2.;
51  spatialCoefficientsForTZ(0,2,0,e1)=1.;
52  spatialCoefficientsForTZ(0,3,0,e1)=.5;
53  spatialCoefficientsForTZ(2,1,0,e1)=.25;
54  spatialCoefficientsForTZ(3,0,0,0,e1)=.2;
55  spatialCoefficientsForTZ(1,2,0,0,e1)=-.3;
56 
57  spatialCoefficientsForTZ(2,0,0,e2)= 1.; // v=x^2 -2xy - y^2 -.5*x^3 -.25*x*y^2 -.6*x^2*y + .1*y^3
58  spatialCoefficientsForTZ(1,1,0,e2)=-2.;
59  spatialCoefficientsForTZ(0,2,0,e2)=-1.;
60  spatialCoefficientsForTZ(3,0,0,e2)=-.5;
61  spatialCoefficientsForTZ(1,2,0,e2)=-.25;
62  spatialCoefficientsForTZ(2,1,0,e2)=-.6;
63  spatialCoefficientsForTZ(0,3,0,e2)= .1;
64 
65  }
66  else if( degreeSpace2==4 )
67  {
68  if( degreeSpaceZ==0 )
69  {
70  spatialCoefficientsForTZ(2,0,0,e1)=1.; // u=x^2 + 2xy + y^2 + .2*x^4 + .5*y^4 + xy^3
71  spatialCoefficientsForTZ(1,1,0,e1)=2.;
72  spatialCoefficientsForTZ(0,2,0,e1)=1.;
73 
74  spatialCoefficientsForTZ(4,0,0,e1)=.2;
75  spatialCoefficientsForTZ(0,4,0,e1)=.5;
76  spatialCoefficientsForTZ(1,3,0,e1)=1.;
77 
78 
79  spatialCoefficientsForTZ(2,0,0,e2)= 1.; // v=x^2 -2xy - y^2 +.125*x^4 -.25*y^4 -.8*x^3 y
80  spatialCoefficientsForTZ(1,1,0,e2)=-2.;
81  spatialCoefficientsForTZ(0,2,0,e2)=-1.;
82 
83  spatialCoefficientsForTZ(4,0,0,e2)=.125;
84  spatialCoefficientsForTZ(0,4,0,e2)=-.25;
85  spatialCoefficientsForTZ(3,1,0,e2)=-.8;
86  }
87  else if( degreeSpaceX==0 )// degreeSpaceX==0
88  {
89 
90  // switch x->z
91  spatialCoefficientsForTZ(0,0,2,e1)=1.; // u=x^2 + 2xy + y^2 + .2*x^4 + .5*y^4 + xy^3
92  spatialCoefficientsForTZ(0,1,1,e1)=2.;
93  spatialCoefficientsForTZ(0,2,0,e1)=1.;
94 
95  spatialCoefficientsForTZ(0,0,4,e1)=.2;
96  spatialCoefficientsForTZ(0,4,0,e1)=.5;
97  spatialCoefficientsForTZ(0,3,1,e1)=1.;
98 
99 
100  spatialCoefficientsForTZ(0,0,2,e2)= 1.; // v=x^2 -2xy - y^2 +.125*x^4 -.25*y^4 -.8*x^3 y
101  spatialCoefficientsForTZ(0,1,1,e2)=-2.;
102  spatialCoefficientsForTZ(0,2,0,e2)=-1.;
103 
104  spatialCoefficientsForTZ(0,0,4,e2)=.125;
105  spatialCoefficientsForTZ(0,4,0,e2)=-.25;
106  spatialCoefficientsForTZ(0,1,3,e2)=-.8;
107  }
108  else // degreeY==0
109  {
110  spatialCoefficientsForTZ(2,0,0,e1)=1.; // u=x^2 + 2xy + y^2 + .2*x^4 + .5*y^4 + xy^3
111  spatialCoefficientsForTZ(1,0,1,e1)=2.;
112  spatialCoefficientsForTZ(0,0,2,e1)=1.;
113 
114  spatialCoefficientsForTZ(4,0,0,e1)=.2;
115  spatialCoefficientsForTZ(0,0,4,e1)=.5;
116  spatialCoefficientsForTZ(1,0,3,e1)=1.;
117 
118 
119  spatialCoefficientsForTZ(2,0,0,e2)= 1.; // v=x^2 -2xy - y^2 +.125*x^4 -.25*y^4 -.8*x^3 y
120  spatialCoefficientsForTZ(1,0,1,e2)=-2.;
121  spatialCoefficientsForTZ(0,0,2,e2)=-1.;
122 
123  spatialCoefficientsForTZ(4,0,0,e2)=.125;
124  spatialCoefficientsForTZ(0,0,4,e2)=-.25;
125  spatialCoefficientsForTZ(3,0,1,e2)=-.8;
126  }
127 
128  }
129  else
130  {
131  Overture::abort("unimplemented values of degreeSpace");
132  }
133  }
134  else if( degreeSpace==1 )
135  {
136  spatialCoefficientsForTZ(0,0,0,ux)=1.; // u=1 + x + y + z
137  spatialCoefficientsForTZ(1,0,0,ux)=1.;
138  spatialCoefficientsForTZ(0,1,0,ux)=1.;
139  spatialCoefficientsForTZ(0,0,1,ux)=1.;
140 
141  spatialCoefficientsForTZ(0,0,0,uy)= 2.; // v=2+x-2y+z
142  spatialCoefficientsForTZ(1,0,0,uy)= 1.;
143  spatialCoefficientsForTZ(0,1,0,uy)=-2.;
144  spatialCoefficientsForTZ(0,0,1,uy)= 1.;
145 
146  spatialCoefficientsForTZ(1,0,0,uz)=-1.; // w=-x+y+z
147  spatialCoefficientsForTZ(0,1,0,uz)= 1.;
148  spatialCoefficientsForTZ(0,0,1,uz)= 1.;
149 
150  // eps and mu should remain positive
151  spatialCoefficientsForTZ(1,0,0,epsc)=eps*.01; // x
152  spatialCoefficientsForTZ(0,1,0,epsc)=eps*.02; // y
153  spatialCoefficientsForTZ(0,0,1,epsc)=eps*.12; // z
154 
155  spatialCoefficientsForTZ(1,0,0,muc )=mu*.015; // x
156  spatialCoefficientsForTZ(0,1,0,muc )=mu*.0125; // y
157  spatialCoefficientsForTZ(0,0,1,muc )=mu*.095; // z
158 
159  }
160  else if( degreeSpace==2 )
161  {
162  spatialCoefficientsForTZ(2,0,0,ux)=1.; // u=x^2 + 2xy + y^2 + xz - .25*yz -.5*z^2
163  spatialCoefficientsForTZ(1,1,0,ux)=2.;
164  spatialCoefficientsForTZ(0,2,0,ux)=1.;
165  spatialCoefficientsForTZ(1,0,1,ux)=1.;
166  spatialCoefficientsForTZ(0,1,1,ux)=-.25;
167  spatialCoefficientsForTZ(0,0,2,ux)=-.5;
168 
169  spatialCoefficientsForTZ(2,0,0,uy)= 1.; // v=x^2 -2xy - y^2 + 3yz + .25*xz +.5*z^2
170  spatialCoefficientsForTZ(1,1,0,uy)=-2.;
171  spatialCoefficientsForTZ(0,2,0,uy)=-1.;
172  spatialCoefficientsForTZ(0,1,1,uy)=+3.;
173  spatialCoefficientsForTZ(1,0,1,uy)=.25;
174  spatialCoefficientsForTZ(0,0,2,uy)=.5;
175 
176  spatialCoefficientsForTZ(2,0,0,uz)= 1.; // w=x^2 + y^2 - 2 z^2 + .25*xy
177  spatialCoefficientsForTZ(0,2,0,uz)= 1.;
178  spatialCoefficientsForTZ(0,0,2,uz)=-2.;
179  spatialCoefficientsForTZ(1,1,0,uz)=.25;
180 
181  // eps and mu should remain positive
182  spatialCoefficientsForTZ(1,0,0,epsc)=eps*.01; // x
183  spatialCoefficientsForTZ(0,1,0,epsc)=eps*.02; // y
184  spatialCoefficientsForTZ(0,0,1,epsc)=eps*.12; // z
185  spatialCoefficientsForTZ(2,0,0,epsc)=eps*.1; // x^2
186  spatialCoefficientsForTZ(0,2,0,epsc)=eps*.15; // y^2
187  spatialCoefficientsForTZ(0,0,2,epsc)=eps*.11; // z^2
188 
189  spatialCoefficientsForTZ(1,0,0,muc )=mu*.015; // x
190  spatialCoefficientsForTZ(0,1,0,muc )=mu*.0125; // y
191  spatialCoefficientsForTZ(0,0,1,muc )=mu*.095; // z
192  spatialCoefficientsForTZ(2,0,0,muc )=mu*.125; // x^2
193  spatialCoefficientsForTZ(0,2,0,muc )=mu*.15; // y^2
194  spatialCoefficientsForTZ(0,0,2,muc )=mu*.13; // z^2
195 
196  }
197  else if( degreeSpace==0 )
198  {
199  spatialCoefficientsForTZ(0,0,0,ux)=1.; // -1.;
200  spatialCoefficientsForTZ(0,0,0,uy)=1.; //-.5;
201  spatialCoefficientsForTZ(0,0,0,uz)=1.; //.75;
202  }
203  else if( degreeSpace==3 )
204  {
205  spatialCoefficientsForTZ(2,0,0,ux)=1.; // u=x^2 + 2xy + y^2 + xz
206  spatialCoefficientsForTZ(1,1,0,ux)=2.; // + .125( x^3 + y^3 + z^3 ) -.75*x*y^2 + x^2*z +.4yz
207  spatialCoefficientsForTZ(0,2,0,ux)=1.;
208  spatialCoefficientsForTZ(1,0,1,ux)=1.;
209 
210  spatialCoefficientsForTZ(3,0,0,ux)=.125;
211  spatialCoefficientsForTZ(0,3,0,ux)=.125;
212  spatialCoefficientsForTZ(0,0,3,ux)=.125;
213  spatialCoefficientsForTZ(1,2,0,ux)=-.75;
214  spatialCoefficientsForTZ(2,0,1,ux)=+1.;
215  spatialCoefficientsForTZ(0,1,1,ux)=.4;
216 
217 
218  spatialCoefficientsForTZ(2,0,0,uy)= 1.; // v=x^2 -2xy - y^2 + 3yz
219  spatialCoefficientsForTZ(1,1,0,uy)=-2.; // + .25( x^3 + y^3 + z^3 ) -.375*x^2 y -.375*y*z^2
220  spatialCoefficientsForTZ(0,2,0,uy)=-1.;
221  spatialCoefficientsForTZ(0,1,1,uy)=+3.;
222 
223  spatialCoefficientsForTZ(3,0,0,uy)=.25;
224  spatialCoefficientsForTZ(0,3,0,uy)=.25;
225  spatialCoefficientsForTZ(0,0,3,uy)=.25;
226  spatialCoefficientsForTZ(2,1,0,uy)=-3.*.125;
227  spatialCoefficientsForTZ(0,1,2,uy)=-3.*.125;
228 
229 
230  spatialCoefficientsForTZ(2,0,0,uz)= 1.; // w=x^2 + y^2 - 2 z^2
231  spatialCoefficientsForTZ(0,2,0,uz)= 1.; // + .25x^3 -.2y^3 +.125 z^3 - x z^2 -.6*xy^2
232  spatialCoefficientsForTZ(0,0,2,uz)=-2.;
233 
234  spatialCoefficientsForTZ(3,0,0,uz)=.25;
235  spatialCoefficientsForTZ(0,3,0,uz)=-.2;
236  spatialCoefficientsForTZ(0,0,3,uz)=.125;
237  spatialCoefficientsForTZ(1,0,2,uz)=-1.;
238  spatialCoefficientsForTZ(1,2,0,uz)=-.6;
239 
240  }
241  else if( degreeSpace==4 )
242  {
243  spatialCoefficientsForTZ(2,0,0,ux)=1.; // u=x^2 + 2xy + y^2 + xz
244  spatialCoefficientsForTZ(1,1,0,ux)=2.;
245  spatialCoefficientsForTZ(0,2,0,ux)=1.;
246  spatialCoefficientsForTZ(1,0,1,ux)=1.;
247  spatialCoefficientsForTZ(3,0,0,ux)=.5; // + .5*x^3
248 
249  spatialCoefficientsForTZ(4,0,0,ux)=.125; // + .125*x^4 + .125*y^4 + .125*z^4 -.5*xz^3
250  spatialCoefficientsForTZ(0,4,0,ux)=.125;
251  spatialCoefficientsForTZ(0,0,4,ux)=.125;
252  spatialCoefficientsForTZ(1,0,3,ux)=-.5;
253  spatialCoefficientsForTZ(0,1,3,ux)=.25; // + .25*y*z^3 -.25*y^2*z^2 +.25*y^3z
254  spatialCoefficientsForTZ(0,2,2,ux)=-.25;
255  spatialCoefficientsForTZ(0,3,1,ux)=.25;
256 
257 
258  spatialCoefficientsForTZ(2,0,0,uy)= 1.; // v=x^2 -2xy - y^2 + 3yz
259  spatialCoefficientsForTZ(1,1,0,uy)=-2.;
260  spatialCoefficientsForTZ(0,2,0,uy)=-1.;
261  spatialCoefficientsForTZ(0,1,1,uy)=+3.;
262 
263  spatialCoefficientsForTZ(2,1,0,uy)=-1.5; // -1.5x^2*y
264 
265  spatialCoefficientsForTZ(4,0,0,uy)=.25;
266  spatialCoefficientsForTZ(0,4,0,uy)=.25;
267  spatialCoefficientsForTZ(0,0,4,uy)=.25;
268  spatialCoefficientsForTZ(3,1,0,uy)=-.5;
269  spatialCoefficientsForTZ(1,0,3,uy)=.25; // + .25*x*z^3 -.25*x^2*z^2 +.25*x^3z
270  spatialCoefficientsForTZ(2,0,2,uy)=-.25;
271  spatialCoefficientsForTZ(3,0,1,uy)=.25;
272 
273 
274  spatialCoefficientsForTZ(2,0,0,uz)= 1.; // w=x^2 + y^2 - 2 z^2
275  spatialCoefficientsForTZ(0,2,0,uz)= 1.;
276  spatialCoefficientsForTZ(0,0,2,uz)=-2.;
277 
278  spatialCoefficientsForTZ(4,0,0,uz)=.25;
279  spatialCoefficientsForTZ(0,4,0,uz)=-.2;
280  spatialCoefficientsForTZ(0,0,4,uz)=.125;
281  spatialCoefficientsForTZ(0,3,1,uz)=-1.;
282  spatialCoefficientsForTZ(1,3,0,uz)=.25; // + .25*x*y^3 -.25*x^2*y^2 +.25*x^3y
283  spatialCoefficientsForTZ(2,2,0,uz)=-.25;
284  spatialCoefficientsForTZ(3,1,0,uz)=.25;
285  }
286  else if( degreeSpace>=5 )
287  {
288  if( true || degreeSpace!=5 ) printF(" ****WARNING***** using a TZ function with degree=5 in space *****\n");
289 
290  spatialCoefficientsForTZ(2,0,0,ux)=1.; // u=x^2 + 2xy + y^2 + xz
291  spatialCoefficientsForTZ(1,1,0,ux)=2.;
292  spatialCoefficientsForTZ(0,2,0,ux)=1.;
293  spatialCoefficientsForTZ(1,0,1,ux)=1.;
294 
295  spatialCoefficientsForTZ(4,0,0,ux)=.125; // + .125*x^4 + .125*y^4 + .125*z^4 -.5*xz^3
296  spatialCoefficientsForTZ(0,4,0,ux)=.125;
297  spatialCoefficientsForTZ(0,0,4,ux)=.125;
298  spatialCoefficientsForTZ(1,0,3,ux)=-.5;
299  spatialCoefficientsForTZ(0,1,3,ux)=.25; // + .25*y*z^3 -.25*y^2*z^2 +.25*y^3z
300  spatialCoefficientsForTZ(0,2,2,ux)=-.25;
301  spatialCoefficientsForTZ(0,3,1,ux)=.25;
302 
303  spatialCoefficientsForTZ(0,5,0,ux)=.125; // y^5
304 
305 
306  spatialCoefficientsForTZ(2,0,0,uy)= 1.; // v=x^2 -2xy - y^2 + 3yz
307  spatialCoefficientsForTZ(1,1,0,uy)=-2.;
308  spatialCoefficientsForTZ(0,2,0,uy)=-1.;
309  spatialCoefficientsForTZ(0,1,1,uy)=+3.;
310 
311  spatialCoefficientsForTZ(4,0,0,uy)=.25;
312  spatialCoefficientsForTZ(0,4,0,uy)=.25;
313  spatialCoefficientsForTZ(0,0,4,uy)=.25;
314  spatialCoefficientsForTZ(3,1,0,uy)=-.5;
315  spatialCoefficientsForTZ(1,0,3,uy)=.25; // + .25*x*z^3 -.25*x^2*z^2 +.25*x^3z
316  spatialCoefficientsForTZ(2,0,2,uy)=-.25;
317  spatialCoefficientsForTZ(3,0,1,uy)=.25;
318 
319  // spatialCoefficientsForTZ(5,0,0,uy)=.125; // x^5
320 
321 
322  spatialCoefficientsForTZ(2,0,0,uz)= 1.; // w=x^2 + y^2 - 2 z^2
323  spatialCoefficientsForTZ(0,2,0,uz)= 1.;
324  spatialCoefficientsForTZ(0,0,2,uz)=-2.;
325 
326  spatialCoefficientsForTZ(4,0,0,uz)=.25;
327  spatialCoefficientsForTZ(0,4,0,uz)=-.2;
328  spatialCoefficientsForTZ(0,0,4,uz)=.125;
329  spatialCoefficientsForTZ(0,3,1,uz)=-1.;
330  spatialCoefficientsForTZ(1,3,0,uz)=.25; // + .25*x*y^3 -.25*x^2*y^2 +.25*x^3y
331  spatialCoefficientsForTZ(2,2,0,uz)=-.25;
332  spatialCoefficientsForTZ(3,1,0,uz)=.25;
333 
334  // spatialCoefficientsForTZ(5,0,0,uz)=.125;
335  }
336  else
337  {
338  printF("Maxwell:: not implemented for degree in space =%i \n",degreeSpace);
339  Overture::abort("error");
340  }
341 
342 // *** end the initialize3DPolyTW bpp macro
343 #endMacro
344 
345 
346 // ********************************************************
347 // *** This macro defines the polynomial TZ functions *****
348 // ********************************************************
349 #beginMacro definePolynomialTZMacro()
350 
351 tz = new OGPolyFunction(degreeSpace,numberOfDimensions,numberOfComponentsForTZ,degreeTime);
352 
353 const int ndp=max(max(5,degreeSpace+1),degreeTime+1);
354 
355 printF("\n $$$$$$$ assignInitialConditions: build OGPolyFunction: degreeSpace=%i, degreeTime=%i ndp=%i $$$$\n",
356  degreeSpace,degreeTime,ndp);
357 
358 RealArray spatialCoefficientsForTZ(ndp,ndp,ndp,numberOfComponentsForTZ);
360 RealArray timeCoefficientsForTZ(ndp,numberOfComponentsForTZ);
362 
363 // Default coefficients for eps, mu, sigmaE and sigmaH:
364 assert( epsc>=0 && muc>=0 && sigmaEc>=0 && sigmaHc>=0 );
365 printF(" *** numberOfComponentsForTZ=%i, epsc,muc,sigmaEc,sigmaHc=%i,%i,%i,%i, eps,mu=%e,%e\n",numberOfComponentsForTZ,epsc,muc,sigmaEc,sigmaHc,eps,mu);
366 
367 spatialCoefficientsForTZ(0,0,0,epsc)=eps;
368 spatialCoefficientsForTZ(0,0,0,muc )=mu;
369 spatialCoefficientsForTZ(0,0,0,sigmaEc)=0.;
370 spatialCoefficientsForTZ(0,0,0,sigmaHc)=0.;
371 
372 if( numberOfDimensions==2 )
373 {
374  if( degreeSpace==0 )
375  {
376  spatialCoefficientsForTZ(0,0,0,ex)=1.; // u=1
377  spatialCoefficientsForTZ(0,0,0,ey)= 2.; // v=2
378  spatialCoefficientsForTZ(0,0,0,hz)=-1.; // w=-1
379  }
380  else if( degreeSpace==1 )
381  {
382  spatialCoefficientsForTZ(0,0,0,ex)=1.; // u=1+x+y
383  spatialCoefficientsForTZ(1,0,0,ex)=1.;
384  spatialCoefficientsForTZ(0,1,0,ex)=1.;
385 
386  spatialCoefficientsForTZ(0,0,0,ey)= 2.; // v=2+x-y
387  spatialCoefficientsForTZ(1,0,0,ey)= 1.;
388  spatialCoefficientsForTZ(0,1,0,ey)=-1.;
389 
390  spatialCoefficientsForTZ(0,0,0,hz)=-1.; // w=-1+x + y
391  spatialCoefficientsForTZ(1,0,0,hz)= 1.;
392  spatialCoefficientsForTZ(0,1,0,hz)= 1.;
393 
394  // eps and mu should remain positive but do this for now:
395  spatialCoefficientsForTZ(1,0,0,epsc)=eps*.01; // x*eps*.01
396  spatialCoefficientsForTZ(0,1,0,epsc)=eps*.02; // y*eps*.02
397 
398  spatialCoefficientsForTZ(1,0,0,muc )=mu*.015; // x
399  spatialCoefficientsForTZ(0,1,0,muc )=mu*.0125; // y
400 
401  }
402  else if( degreeSpace==2 )
403  {
404  spatialCoefficientsForTZ(2,0,0,ex)=1.; // u=x^2 + 2xy + y^2
405  spatialCoefficientsForTZ(1,1,0,ex)=2.;
406  spatialCoefficientsForTZ(0,2,0,ex)=1.;
407 
408  spatialCoefficientsForTZ(2,0,0,ey)= 1.; // v=x^2 -2xy - y^2
409  spatialCoefficientsForTZ(1,1,0,ey)=-2.;
410  spatialCoefficientsForTZ(0,2,0,ey)=-1.;
411 
412  spatialCoefficientsForTZ(2,0,0,hz)= 1.; // w=x^2 + y^2 -1 +.5 xy
413  spatialCoefficientsForTZ(0,2,0,hz)= 1.;
414  spatialCoefficientsForTZ(0,0,0,hz)=-1.;
415  spatialCoefficientsForTZ(1,1,0,hz)= .5;
416 
417  // eps and mu should remain positive
418  spatialCoefficientsForTZ(1,0,0,epsc)=eps*.01; // x
419  spatialCoefficientsForTZ(0,1,0,epsc)=eps*.02; // y
420  spatialCoefficientsForTZ(2,0,0,epsc)=eps*.1; // x^2
421  spatialCoefficientsForTZ(0,2,0,epsc)=eps*.15; // y^2
422 
423  spatialCoefficientsForTZ(1,0,0,muc )=mu*.015; // x
424  spatialCoefficientsForTZ(0,1,0,muc )=mu*.0125; // y
425  spatialCoefficientsForTZ(2,0,0,muc )=mu*.125; // x^2
426  spatialCoefficientsForTZ(0,2,0,muc )=mu*.15; // y^2
427 
428  }
429  else if( degreeSpace==3 )
430  {
431  spatialCoefficientsForTZ(2,0,0,ex)=1.; // u=x^2 + 2xy + y^2 + .5*y^3 + .25*x^2*y + .2*x^3 - .3*x*y^2
432  spatialCoefficientsForTZ(1,1,0,ex)=2.;
433  spatialCoefficientsForTZ(0,2,0,ex)=1.;
434  spatialCoefficientsForTZ(0,3,0,ex)=.5;
435  spatialCoefficientsForTZ(2,1,0,ex)=.25;
436  spatialCoefficientsForTZ(3,0,0,0,ex)=.2;
437  spatialCoefficientsForTZ(1,2,0,0,ex)=-.3;
438 
439  spatialCoefficientsForTZ(2,0,0,ey)= 1.; // v=x^2 -2xy - y^2 -.5*x^3 -.25*x*y^2 -.6*x^2*y + .1*y^3
440  spatialCoefficientsForTZ(1,1,0,ey)=-2.;
441  spatialCoefficientsForTZ(0,2,0,ey)=-1.;
442  spatialCoefficientsForTZ(3,0,0,ey)=-.5;
443  spatialCoefficientsForTZ(1,2,0,ey)=-.25;
444  spatialCoefficientsForTZ(2,1,0,ey)=-.6;
445  spatialCoefficientsForTZ(0,3,0,ey)= .1;
446 
447  spatialCoefficientsForTZ(2,0,0,hz)= 1.; // w=x^2 + y^2 -1 +.5 xy + .25*x^3 - .25*y^3
448  spatialCoefficientsForTZ(0,2,0,hz)= 1.;
449  spatialCoefficientsForTZ(0,0,0,hz)=-1.;
450  spatialCoefficientsForTZ(1,1,0,hz)= .5;
451  spatialCoefficientsForTZ(3,0,0,hz)= .25;
452  spatialCoefficientsForTZ(0,3,0,hz)=-.25;
453 
454  }
455  else if( degreeSpace==4 || degreeSpace==5 )
456  {
457  if( degreeSpace!=4 ) printF(" ****WARNING***** using a TZ function with degree=4 in space *****\n");
458 
459  spatialCoefficientsForTZ(2,0,0,hz)= 1.; // p=x^2 + y^2 -1 +.5 xy + x^4 + y^4
460  spatialCoefficientsForTZ(0,2,0,hz)= 1.;
461  spatialCoefficientsForTZ(0,0,0,hz)=-1.;
462  spatialCoefficientsForTZ(1,1,0,hz)= .5;
463 
464  spatialCoefficientsForTZ(4,0,0,hz)= 1.;
465  spatialCoefficientsForTZ(0,4,0,hz)= 1.;
466  spatialCoefficientsForTZ(2,2,0,hz)= -.3;
467 
468 
469  spatialCoefficientsForTZ(2,0,0,ex)=1.; // u=x^2 + 2xy + y^2 + .2*x^4 + .5*y^4 + xy^3
470  spatialCoefficientsForTZ(1,1,0,ex)=2.;
471  spatialCoefficientsForTZ(0,2,0,ex)=1.;
472 
473  spatialCoefficientsForTZ(4,0,0,ex)=.2;
474  spatialCoefficientsForTZ(0,4,0,ex)=.5;
475  spatialCoefficientsForTZ(1,3,0,ex)=1.;
476 
477 
478  spatialCoefficientsForTZ(2,0,0,ey)= 1.; // v=x^2 -2xy - y^2 +.125*x^4 -.25*y^4 -.8*x^3 y
479  spatialCoefficientsForTZ(1,1,0,ey)=-2.;
480  spatialCoefficientsForTZ(0,2,0,ey)=-1.;
481 
482  spatialCoefficientsForTZ(4,0,0,ey)=.125;
483  spatialCoefficientsForTZ(0,4,0,ey)=-.25;
484  spatialCoefficientsForTZ(3,1,0,ey)=-.8;
485 
486  }
487  else if( degreeSpace>=6 )
488  {
489  if( degreeSpace!=6 ) printF(" ****WARNING***** using a TZ function with degree=4 in space *****\n");
490 
491  spatialCoefficientsForTZ(1,0,0,hz)= 1.;
492  spatialCoefficientsForTZ(0,0,0,hz)= 1.;
493 
494  spatialCoefficientsForTZ(2,0,0,hz)= 1.; // p=x^2 + y^2 -1 +.5 xy + x^4 + y^4
495  spatialCoefficientsForTZ(0,2,0,hz)= 1.;
496  spatialCoefficientsForTZ(0,0,0,hz)=-1.;
497  spatialCoefficientsForTZ(1,1,0,hz)= .5;
498 
499  spatialCoefficientsForTZ(4,0,0,hz)= .2;
500  spatialCoefficientsForTZ(0,4,0,hz)= .4;
501  spatialCoefficientsForTZ(2,2,0,hz)= -.3;
502 
503  spatialCoefficientsForTZ(3,2,0,hz)= .4;
504  spatialCoefficientsForTZ(2,3,0,hz)= .8;
505  spatialCoefficientsForTZ(3,3,0,hz)= .7;
506 
507  spatialCoefficientsForTZ(5,1,0,hz)= .25;
508  spatialCoefficientsForTZ(1,5,0,hz)=-.25;
509 
510  spatialCoefficientsForTZ(6,0,0,hz)= .2;
511  spatialCoefficientsForTZ(0,6,0,hz)=-.2;
512 
513  // spatialCoefficientsForTZ=0.; // ************************************************
514 
515  //spatialCoefficientsForTZ(2,4,0,hz)= 1.;
516  //spatialCoefficientsForTZ(4,2,0,hz)= 1.;
517 
518  spatialCoefficientsForTZ(2,0,0,ex)=1.; // u=x^2 + 2xy + y^2 + .2*x^4 + .5*y^4 + xy^3
519  spatialCoefficientsForTZ(1,1,0,ex)=2.;
520  spatialCoefficientsForTZ(0,2,0,ex)=1.;
521 
522  spatialCoefficientsForTZ(4,0,0,ex)=.2;
523  spatialCoefficientsForTZ(0,4,0,ex)=.5;
524  spatialCoefficientsForTZ(1,3,0,ex)=1.;
525 
526  spatialCoefficientsForTZ(3,2,0,ex)=.1; // .1*x^3*y^2
527 
528  spatialCoefficientsForTZ(4,2,0,ex)=.3; // .3 x^4 y^2 ** III
529  spatialCoefficientsForTZ(3,3,0,ex)=.4; // .4 x^3 y^3 ** IV
530 
531  spatialCoefficientsForTZ(6,0,0,ex)=.1; // + .1*x^6 +.25*y^6 -.6*x*y^5
532  spatialCoefficientsForTZ(0,6,0,ex)=.25;
533  spatialCoefficientsForTZ(1,5,0,ex)=-.6;
534 
535 
536  spatialCoefficientsForTZ(2,0,0,ey)= 1.; // v=x^2 -2xy - y^2 +.125*x^4 -.25*y^4 -.8*x^3 y
537  spatialCoefficientsForTZ(1,1,0,ey)=-2.;
538  spatialCoefficientsForTZ(0,2,0,ey)=-1.;
539 
540  spatialCoefficientsForTZ(2,3,0,ey)=-.1; // -.1*x^2*y^3
541 
542  spatialCoefficientsForTZ(3,3,0,ey)=-.4; //-.4 x^3 y^3 ** III
543  spatialCoefficientsForTZ(2,4,0,ey)=-.3; //-.3 x^2 y^4 ** IV
544 
545  spatialCoefficientsForTZ(4,0,0,ey)=.125;
546  spatialCoefficientsForTZ(0,4,0,ey)=-.25;
547  spatialCoefficientsForTZ(3,1,0,ey)=-.8;
548 
549  spatialCoefficientsForTZ(6,0,0,ey)=.3; // .3*x^6 +.1*y^6 + .6*x^5*y
550  spatialCoefficientsForTZ(0,6,0,ey)=.1;
551  spatialCoefficientsForTZ(5,1,0,ey)=-.6;
552 
553 
554  }
555  else
556  {
557  printF("Maxwell:: not implemented for degree in space =%i \n",degreeSpace);
558  Overture::abort("error");
559  }
560 }
561 // *****************************************************************
562 // ******************* Three Dimensions ****************************
563 // *****************************************************************
564 else if( numberOfDimensions==3 )
565 {
566  // ** finish me -- make the E and H poly's be different
567  printF("*** initTZ functions: solveForElectricField=%i solveForMagneticField=%i\n",solveForElectricField,solveForMagneticField);
568 
569  if ( solveForElectricField )
570  {
571  initialize3DPolyTW(ex,ey,ez);
572  }
573 
574  if ( solveForMagneticField )
575  {
576  initialize3DPolyTW(hx,hy,hz);
577  }
578 
579 
580 }
581 else
582 {
583  Overture::abort("ERROR:unimplemented number of dimensions");
584 }
585 
586 
587 for( int n=0; n<numberOfComponents; n++ )
588 {
589  for( int i=0; i<ndp; i++ )
590  timeCoefficientsForTZ(i,n)= i<=degreeTime ? 1./(i+1) : 0. ;
591 
592 }
593 
594 if( method==sosup )
595 {
596  // Set the TZ function for (ext,eyt,...) equal to the time derivative of (ex,ey,...)
597  const int numberOfFieldComponents=3; // 2D: (ex,ey,hz), 3D: (ex,ey,ez)
598  for( int n=ex, nt=ext; n<ex+numberOfFieldComponents; n++, nt++ )
599  {
600  for( int i1=0; i1<ndp; i1++ )for( int i2=0; i2<ndp; i2++ )for( int i3=0; i3<ndp; i3++ )
601  {
603  }
604  // E = a0 + a1*t + a2*t^2 + ... = [a0,a1,a2,...
605  // E_t = a1 +2*a2*t + 3*a3*t^2 = [a1,2*a2,3*a3
606  for( int i=0; i<ndp; i++ )
607  timeCoefficientsForTZ(i,nt)= i<degreeTime ? real(i+1.)/(i+2.) : 0. ;
608 
609  }
610 }
611 
612 
613 
614 // Make eps, mu, .. constant in time :
615 timeCoefficientsForTZ(0,rc)=1.;
616 timeCoefficientsForTZ(0,epsc)=1.;
617 timeCoefficientsForTZ(0,muc)=1.;
618 timeCoefficientsForTZ(0,sigmaEc)=1.;
619 timeCoefficientsForTZ(0,sigmaHc)=1.;
620 
621 // ::display(spatialCoefficientsForTZ,"spatialCoefficientsForTZ","%6.2f ");
622 
623 ((OGPolyFunction*)tz)->setCoefficients( spatialCoefficientsForTZ,timeCoefficientsForTZ );
624 
625 // real epsEx = ((OGPolyFunction*)tz)->gd(0,0,0,0,.0,0.,0.,epsc,0.);
626 // printF(" ********** epsEx = %e *********\n",epsEx);
627 
628 #endMacro // polynomial TZ macro
629