~emmanuel-lambert/python-meep/intec

« back to all changes in this revision

Viewing changes to tests-intec/.svn/text-base/symmetry.py.svn-base

  • Committer: emmanuel.lambert at ugent
  • Date: 2009-11-23 10:23:17 UTC
  • Revision ID: emmanuel.lambert@intec.ugent.be-20091123102317-m00vrwyw0m6kpcmm
further merging with NS / replacing tests dir with default tests and creating new 'tests-intec' subdir

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/env python 
 
2
# passed, is polarizability set correctly ?
 
3
from meep import *
 
4
from math import fabs,sqrt
 
5
 
 
6
eps_compare = 1e-9
 
7
thresh_compare = 1e-15
 
8
 
 
9
class sigma(Callback):
 
10
    def __init__(self, sig):
 
11
        Callback.__init__(self)
 
12
        self.sig=sig
 
13
    def double_vec(self,x):
 
14
        return self.sig
 
15
        
 
16
class epsilon(Callback):
 
17
    def __init__(self):
 
18
        Callback.__init__(self)
 
19
        self.the_center = vec()
 
20
        
 
21
    def double_vec(self,vec):
 
22
        return self.eps(vec)
 
23
        
 
24
    def eps(self,pp):
 
25
        p = pp - self.the_center
 
26
        while (p.x() > 0.5):
 
27
            p = p - vec(1.0,0)
 
28
        while (p.x() <-0.5):
 
29
            p = p + vec(1.0,0)
 
30
        while (p.y() > 0.5):
 
31
            p = p - vec(0,1.0)
 
32
        while (p.y() <-0.5):
 
33
            p = p + vec(0,1.0)
 
34
        if (fabs(p.x()) < 0.314):
 
35
            return 12.0
 
36
        if (fabs(p.y()) < 0.314):
 
37
            return 12.0
 
38
 
 
39
        return 1.0  
 
40
 
 
41
 
 
42
trg = epsilon()
 
43
set_EPS_Callback(trg.__disown__())
 
44
rods_2d = EPS
 
45
 
 
46
def compare(a, b, n):
 
47
    if (fabs(a-b) > fabs(b)*eps_compare and max(fabs(a),fabs(b)) > thresh_compare) :
 
48
 
 
49
        master_printf("%s differs by\t%g out of\t%g\n", n, a-b, b);
 
50
        master_printf("This gives a fractional error of %g\n", fabs(a-b)/fabs(b));
 
51
        return False
 
52
    else:
 
53
        return True
 
54
 
 
55
def compare_point(f1, f2, p):
 
56
    m1 = monitor_point()
 
57
    m_test = monitor_point()
 
58
    f1.get_point(m_test,p)
 
59
    f2.get_point(m1, p)
 
60
 
 
61
    for i in range(0,10) :
 
62
        c = i
 
63
        if (f1.gv.has_field(c)): 
 
64
            v1 = m_test.get_component(c)
 
65
            v2 = m1.get_component(c)
 
66
            if (abs(v1 - v2) > eps_compare*abs(v2) and abs(v2) > thresh_compare):
 
67
                #print 'At:',f1.time(),'Component:',component_name(c),'v1:',v1,"v2:",v2
 
68
                #print p 
 
69
                master_printf("%s differs:  %g %g out of %g %g\n", component_name(c), (v2-v1).real, (v2-v1).imag, v2.real, v2.imag)
 
70
                master_printf("This comes out to a fractional error of %g\n",abs(v1 - v2)/abs(v2))
 
71
                master_printf("Right now I'm looking at ")
 
72
                #LOOP_OVER_DIRECTIONS(p.dim,d) ??? how to implement ?
 
73
                #master_printf("%s = %g, ", direction_name(d), p.in_direction(d))
 
74
                master_printf("time %g\n", f1.time())
 
75
                return False
 
76
      
 
77
    return True
 
78
 
 
79
def check_unequal_layout(f1, f2):
 
80
    if (f1.equal_layout(f2)) or (not f1.equal_layout(f1)) or (not f2.equal_layout(f2)):
 
81
        abort("fields::equal_layout did not return expected result");
 
82
 
 
83
def test_cyl_metal_mirror(eps):
 
84
    master_printf("Testing Z mirror symmetry in Cylindrical...\n")
 
85
    a = 8.0;
 
86
    ttot = 3.0;
 
87
 
 
88
    v = volcyl(1.0, 1.0, a)
 
89
    trg.the_center = v.center()
 
90
    S = mirror(Z,v)
 
91
    s= structure(v, eps, no_pml(), S)
 
92
    s1 = structure(v, eps)
 
93
 
 
94
    f1=fields(s1)
 
95
    f1.add_point_source(Er, 0.7, 2.5, 0.0, 4.0, veccyl(0.5,0.5))
 
96
    f1.add_point_source(Ep, 0.8, 0.6, 0.0, 4.0, veccyl(0.401,0.5))
 
97
    f=fields(s)
 
98
    f.add_point_source(Er, 0.7, 2.5, 0.0, 4.0, veccyl(0.5,0.5))
 
99
    f.add_point_source(Ep, 0.8, 0.6, 0.0, 4.0, veccyl(0.401,0.5))
 
100
    check_unequal_layout(f, f1)
 
101
    total_energy_check_time = 1.0
 
102
    while (f.time() < ttot):
 
103
        f.step()
 
104
        f1.step()
 
105
        if not compare_point(f, f1, veccyl(0.01,  0.5  )):
 
106
            return False
 
107
        if not compare_point(f, f1, veccyl(0.21,  0.5  )):
 
108
            return False
 
109
        if not compare_point(f, f1, veccyl(0.501, 0.5  )):
 
110
            return False
 
111
        if not compare_point(f, f1, veccyl(0.33,  0.46 )):
 
112
            return False
 
113
        if not compare_point(f, f1, veccyl(0.2,   0.2  )):
 
114
            return False
 
115
 
 
116
        if (f.time() >= total_energy_check_time): 
 
117
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
118
                return False
 
119
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
120
                return False
 
121
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
122
                return False
 
123
            total_energy_check_time += 1.0;
 
124
        
 
125
    return True
 
126
 
 
127
def test_cyl_metal_mirror_nonlinear(eps):
 
128
    master_printf("Testing Z mirror symmetry in Cylindrical...\n")
 
129
    a = 16.0;
 
130
    ttot = 3.0;
 
131
 
 
132
    v = volcyl(1.0, 1.0, a)
 
133
    trg.the_center = v.center()
 
134
    S = mirror(Z,v)
 
135
    s= structure(v, eps, no_pml(), S)
 
136
    s1 = structure(v, eps)
 
137
 
 
138
    s.set_chi3(ONE)
 
139
    s1.set_chi3(ONE)
 
140
 
 
141
    f1=fields(s1)
 
142
    f1.add_point_source(Er, 0.7, 2.5, 0.0, 4.0, veccyl(0.5,0.5))
 
143
    f=fields(s)
 
144
    f.add_point_source(Er, 0.7, 2.5, 0.0, 4.0, veccyl(0.5,0.5))
 
145
    check_unequal_layout(f, f1);
 
146
    total_energy_check_time = 1.0;
 
147
 
 
148
    while (f.time() < ttot):
 
149
        f.step()
 
150
        f1.step()
 
151
        if not compare_point(f, f1, veccyl(0.01,  0.5  )):
 
152
            return False
 
153
        if not compare_point(f, f1, veccyl(0.21,  0.5  )):
 
154
            return False
 
155
        if not compare_point(f, f1, veccyl(0.501, 0.5  )):
 
156
            return False
 
157
        if not compare_point(f, f1, veccyl(0.33,  0.46 )):
 
158
            return False
 
159
        if not compare_point(f, f1, veccyl(0.2,   0.2  )):
 
160
            return False
 
161
 
 
162
        if (f.time() >= total_energy_check_time):
 
163
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
164
                return False
 
165
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
166
                return False
 
167
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
168
                return False
 
169
            total_energy_check_time += 1.0;
 
170
        
 
171
    return True
 
172
 
 
173
def test_1d_periodic_mirror(eps):
 
174
    master_printf("Testing Z mirror symmetry in 1D...\n");
 
175
    a = 16.0
 
176
    ttot = 3.0
 
177
 
 
178
    v = volone(1.0, a)
 
179
    trg.the_center = v.center()
 
180
    S = mirror(Z,v)
 
181
 
 
182
    s=structure (v, eps, no_pml(), S)
 
183
    s1=structure(v, eps)
 
184
 
 
185
    f1=  fields (s1)
 
186
    f1.use_bloch(vec(0.0))
 
187
    f1.add_point_source(Ex, 0.7, 2.5, 0.0, 4.0, vec(0.5))
 
188
    f = fields(s)
 
189
    f.use_bloch(vec(0.0))
 
190
    f.add_point_source(Ex, 0.7, 2.5, 0.0, 4.0, vec(0.5))
 
191
    check_unequal_layout(f, f1)
 
192
    total_energy_check_time = 1.0
 
193
 
 
194
    while (f.time() < ttot):
 
195
        f.step()
 
196
        f1.step()
 
197
        if not compare_point(f, f1, vec(0.01)):
 
198
            return False
 
199
        if not compare_point(f, f1, vec(0.33)):
 
200
            return False
 
201
        if not compare_point(f, f1, vec(0.50)):
 
202
            return False
 
203
        if (f.time() >= total_energy_check_time):
 
204
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
205
                return False
 
206
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
207
                return False
 
208
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
209
                return False
 
210
            total_energy_check_time += 1.0;
 
211
 
 
212
    return True
 
213
 
 
214
 
 
215
def test_origin_shift():
 
216
    master_printf("Testing origin shift in 2D...\n")
 
217
    a = 8.0
 
218
    ttot = 3.0
 
219
 
 
220
    v = voltwo(1.0, 1.0, a)
 
221
 
 
222
    vcentered = voltwo(1.0,1.0,a) 
 
223
    # vcentered = v causes that both identificators point to the same object, so shift in one's center is visible in both
 
224
    vcentered.shift_origin(-v.center())
 
225
 
 
226
    s = structure(vcentered, ONE)
 
227
    s1 = structure(v, ONE)
 
228
 
 
229
    f1=fields(s1)
 
230
    f= fields(s)
 
231
    f1.add_point_source(Ey, 0.7, 2.5, 0.0, 4.0, v.center())
 
232
    f1.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, v.center())
 
233
    f.add_point_source(Ey, 0.7, 2.5, 0.0, 4.0, vec(0.0,0.0))
 
234
    f.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(0.0,0.0))
 
235
    check_unequal_layout(f, f1)
 
236
    while (f.time() < ttot):
 
237
        f.step()
 
238
        f1.step()
 
239
        if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
240
            master_printf("Time is %g\n", f.time())
 
241
            return False
 
242
  
 
243
    return True
 
244
 
 
245
def test_metal_xmirror(eps):
 
246
    master_printf("Testing X mirror symmetry...\n")
 
247
    a = 8.0
 
248
    ttot = 3.0
 
249
 
 
250
    v = voltwo(1.0, 1.0, a)
 
251
    trg.the_center = v.center()
 
252
    S = mirror(X,v)
 
253
    s=structure(v, eps, no_pml(), S)
 
254
    s1=structure(v, eps)
 
255
 
 
256
    f1=fields (s1)
 
257
    f1.add_point_source(Ey, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5))
 
258
    f1.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.401))
 
259
    f=fields (s)
 
260
    f.add_point_source(Ey, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5))
 
261
    f.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.401))
 
262
    check_unequal_layout(f, f1)
 
263
    total_energy_check_time = 1.0;
 
264
    while (f.time() < ttot):
 
265
        f.step()
 
266
        f1.step()
 
267
        if not compare_point(f, f1, vec(0.5  , 0.01)):
 
268
            return False
 
269
        if not compare_point(f, f1, vec(0.5  , 0.21)):
 
270
            return False
 
271
        if not compare_point(f, f1, vec(0.5  , 0.501)):
 
272
            return False
 
273
        if not compare_point(f, f1, vec(0.46 , 0.33)):
 
274
            return False
 
275
        if not compare_point(f, f1, vec(0.2  , 0.2 )):
 
276
            return False
 
277
        if (f.time() >= total_energy_check_time):
 
278
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
279
                return False
 
280
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
281
                return False
 
282
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
283
                return False
 
284
            total_energy_check_time += 1.0
 
285
 
 
286
    return True 
 
287
 
 
288
 
 
289
def test_3D_metal_xmirror(eps):
 
290
    a = 8.0
 
291
    ttot = 3.0
 
292
 
 
293
    v = vol3d(1.0, 1.0, 1.0, a)
 
294
    S = mirror(X,v)
 
295
    s=structure(v, eps, no_pml(), S)
 
296
    s1=structure(v, eps)
 
297
    master_printf("Testing X mirror symmetry in 3D...\n");
 
298
 
 
299
    f1=fields(s1)
 
300
    f1.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.51,0.55))
 
301
    f1.add_point_source(Hx, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.401,0.43))
 
302
    f=fields(s)
 
303
    f.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.51,0.55))
 
304
    f.add_point_source(Hx, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.401,0.43))
 
305
    check_unequal_layout(f, f1)
 
306
    total_energy_check_time = 1.0
 
307
 
 
308
    while (f.time() < ttot):
 
309
        f.step()
 
310
        f1.step()
 
311
        if not compare_point(f, f1, vec(0.5  , 0.01 , 0.5)):
 
312
            return 0
 
313
        if not compare_point(f, f1, vec(0.5  , 0.21 , 0.5)):
 
314
            return 0
 
315
        if not compare_point(f, f1, vec(0.5  , 0.501, 0.5)): 
 
316
            return 0
 
317
        if not compare_point(f, f1, vec(0.46 , 0.33 , 0.5)): 
 
318
            return 0
 
319
        if not compare_point(f, f1, vec(0.2  , 0.2  , 0.5)): 
 
320
            return 0
 
321
        if (f.time() >= total_energy_check_time):
 
322
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
323
                return False
 
324
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
325
                return False
 
326
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
327
                return False
 
328
            total_energy_check_time += 1.0
 
329
 
 
330
    return True
 
331
 
 
332
def test_3D_metal_zmirror(eps):
 
333
    a = 8.0
 
334
    ttot = 3.0
 
335
 
 
336
    v = vol3d(1.1, 0.6, 1.0, a)
 
337
    S = mirror(Z,v)
 
338
    s=structure(v, eps, no_pml(), S)
 
339
    s1=structure(v, eps)
 
340
    master_printf("Testing Z mirror symmetry in 3D...\n");
 
341
 
 
342
    f1=fields(s1)
 
343
    f1.add_point_source(Ex, 0.7, 2.5, 0.0, 4.0, vec(0.55,0.51,0.5))
 
344
    f1.add_point_source(Ey, 0.8, 0.6, 0.0, 4.0, vec(0.43,0.401,0.5))
 
345
    f=fields(s)
 
346
    f.add_point_source(Ex, 0.7, 2.5, 0.0, 4.0, vec(0.55,0.51,0.5))
 
347
    f.add_point_source(Ey, 0.8, 0.6, 0.0, 4.0, vec(0.43,0.401,0.5))
 
348
 
 
349
    check_unequal_layout(f, f1)
 
350
    total_energy_check_time = 1.0
 
351
 
 
352
    while (f.time() < ttot):
 
353
        f.step()
 
354
        f1.step()
 
355
        if not compare_point(f, f1, vec(0.5  , 0.01 , 0.75)):
 
356
            return 0
 
357
        if not compare_point(f, f1, vec(0.5  , 0.21 , 0.15)):
 
358
            return 0
 
359
        if not compare_point(f, f1, vec(0.5  , 0.501, 0.5)): 
 
360
            return 0
 
361
        if not compare_point(f, f1, vec(0.46 , 0.33 , 0.51)): 
 
362
            return 0
 
363
        if not compare_point(f, f1, vec(0.2  , 0.2  , 0.05)): 
 
364
            return 0
 
365
        if (f.time() >= total_energy_check_time):
 
366
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
367
                return False
 
368
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
369
                return False
 
370
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
371
                return False
 
372
            total_energy_check_time += 1.0
 
373
 
 
374
    return True
 
375
 
 
376
def test_3D_metal_odd_zmirror(eps):
 
377
 
 
378
    a = 8.0
 
379
    ttot = 3.0
 
380
 
 
381
    v = vol3d(1.1, 0.6, 1.0, a)
 
382
    S = - mirror(Z,v)
 
383
    s=structure(v, eps, no_pml(), S)
 
384
    s1=structure(v, eps)
 
385
    master_printf("Testing odd Z mirror symmetry in 3D...\n");
 
386
 
 
387
    f1=fields(s1)
 
388
    f1.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.55,0.51,0.5))
 
389
    f=fields(s)
 
390
    f.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.55,0.51,0.5))
 
391
 
 
392
    check_unequal_layout(f, f1)
 
393
    total_energy_check_time = 1.0
 
394
 
 
395
    while (f.time() < ttot):
 
396
        f.step()
 
397
        f1.step()
 
398
        if not compare_point(f, f1, vec(0.5  , 0.01 , 0.75)):
 
399
            return 0
 
400
        if not compare_point(f, f1, vec(0.5  , 0.21 , 0.15)):
 
401
            return 0
 
402
        if not compare_point(f, f1, vec(0.5  , 0.501, 0.5)): 
 
403
            return 0
 
404
        if not compare_point(f, f1, vec(0.46 , 0.33 , 0.51)): 
 
405
            return 0
 
406
        if not compare_point(f, f1, vec(0.2  , 0.2  , 0.05)): 
 
407
            return 0
 
408
        if (f.time() >= total_energy_check_time):
 
409
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
410
                return False
 
411
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
412
                return False
 
413
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
414
                return False
 
415
            total_energy_check_time += 1.0
 
416
 
 
417
    return True
 
418
 
 
419
def test_3D_metal_rot4z(eps):
 
420
    a = 8.0
 
421
    ttot = 3.0
 
422
 
 
423
    v = vol3d(1.0, 1.0, 1.0, a)
 
424
    S = rotate4(Z,v)
 
425
    s=structure(v, eps, no_pml(), S)
 
426
    s1=structure(v, eps)
 
427
    master_printf("Testing Z fourfold rotational symmetry in 3D...\n");
 
428
    f1=fields(s1)
 
429
    f1.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5,0.52))
 
430
    f1.add_point_source(Hz, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.5,0.43))
 
431
    f=fields(s)
 
432
    f.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5,0.52))
 
433
    f.add_point_source(Hz, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.5,0.43))
 
434
 
 
435
    check_unequal_layout(f, f1)
 
436
    total_energy_check_time = 1.0
 
437
 
 
438
    while (f.time() < ttot):
 
439
        f.step()
 
440
        f1.step()
 
441
        if not compare_point(f, f1, vec(0.5  , 0.01 , 0.75)):
 
442
            return 0
 
443
        if not compare_point(f, f1, vec(0.5  , 0.21 , 0.15)):
 
444
            return 0
 
445
        if not compare_point(f, f1, vec(0.5  , 0.501, 0.5)): 
 
446
            return 0
 
447
        if not compare_point(f, f1, vec(0.46 , 0.33 , 0.51)): 
 
448
            return 0
 
449
        if not compare_point(f, f1, vec(0.2  , 0.2  , 0.05)): 
 
450
            return 0
 
451
        if (f.time() >= total_energy_check_time):
 
452
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
453
                return False
 
454
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
455
                return False
 
456
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
457
                return False
 
458
            total_energy_check_time += 1.0
 
459
 
 
460
    return True
 
461
 
 
462
def test_3D_metal_rot4z_mirror(eps):
 
463
    a = 8.0
 
464
    ttot = 3.0
 
465
 
 
466
    v = vol3d(1.0, 1.0, 1.0, a)
 
467
    S = rotate4(Z,v) + mirror(Z,v)
 
468
    s=structure(v, eps, no_pml(), S)
 
469
    s1=structure(v, eps)
 
470
    master_printf("Testing Z fourfold rotational symmetry in 3D with horizontal mirror ...\n");
 
471
    f1=fields(s1)
 
472
    f1.add_point_source(Hz, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5,0.5))
 
473
    f=fields (s)
 
474
    f.add_point_source(Hz, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5,0.5))
 
475
 
 
476
    check_unequal_layout(f, f1)
 
477
    total_energy_check_time = 1.0
 
478
 
 
479
    while (f.time() < ttot):
 
480
        f.step()
 
481
        f1.step()
 
482
        if not compare_point(f, f1, vec(0.5  , 0.01 , 0.75)):
 
483
            return 0
 
484
        if not compare_point(f, f1, vec(0.5  , 0.21 , 0.15)):
 
485
            return 0
 
486
        if not compare_point(f, f1, vec(0.5  , 0.501, 0.5)): 
 
487
            return 0
 
488
        if not compare_point(f, f1, vec(0.46 , 0.33 , 0.51)): 
 
489
            return 0
 
490
        if not compare_point(f, f1, vec(0.2  , 0.2  , 0.05)): 
 
491
            return 0
 
492
        if (f.time() >= total_energy_check_time):
 
493
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
494
                return False
 
495
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
496
                return False
 
497
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
498
                return False
 
499
            total_energy_check_time += 1.0
 
500
 
 
501
    return True
 
502
 
 
503
def test_3D_metal_3mirror(eps):
 
504
    a = 8.0
 
505
    ttot = 3.0
 
506
 
 
507
    v = vol3d(1.0, 1.0, 1.0, a)
 
508
    S = mirror(Z,v) - mirror(Y,v) - mirror(X,v)
 
509
    s= structure(v, eps, no_pml(), S)
 
510
    s1=structure(v, eps)
 
511
    master_printf("Testing three mirror planes in 3D...\n");
 
512
 
 
513
    f1=fields(s1)
 
514
    f1.add_point_source(Hz, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5,0.5))
 
515
    f=fields(s)
 
516
    f.add_point_source(Hz, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5,0.5))
 
517
 
 
518
    check_unequal_layout(f, f1)
 
519
    total_energy_check_time = 1.0
 
520
 
 
521
    while (f.time() < ttot):
 
522
        f.step()
 
523
        f1.step()
 
524
        if not compare_point(f, f1, vec(0.5  , 0.01 , 0.75)):
 
525
            return 0
 
526
        if not compare_point(f, f1, vec(0.5  , 0.21 , 0.15)):
 
527
            return 0
 
528
        if not compare_point(f, f1, vec(0.5  , 0.501, 0.5)): 
 
529
            return 0
 
530
        if not compare_point(f, f1, vec(0.46 , 0.33 , 0.51)): 
 
531
            return 0
 
532
        if not compare_point(f, f1, vec(0.2  , 0.2  , 0.05)): 
 
533
            return 0
 
534
        if (f.time() >= total_energy_check_time):
 
535
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
536
                return False
 
537
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
538
                return False
 
539
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
540
                return False
 
541
            total_energy_check_time += 1.0
 
542
 
 
543
    return True
 
544
 
 
545
def test_metal_ymirror(eps):
 
546
    master_printf("Testing Y mirror symmetry...\n")
 
547
    a = 8.0
 
548
    ttot = 5.0
 
549
 
 
550
    v = voltwo(1.0, 1.0, a)
 
551
    trg.the_center = v.center()
 
552
    S = mirror(Y,v)
 
553
    s=structure(v, eps, no_pml(), S)
 
554
    s1=structure(v, eps)
 
555
    f1 = fields(s1)
 
556
    f1.add_point_source(Ex, 0.7, 2.5, 0.0, 4.0, vec(0.85 ,0.5))
 
557
    f1.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(0.401,0.5))
 
558
    f = fields(s)
 
559
    f.add_point_source(Ex, 0.7, 2.5, 0.0, 4.0, vec(0.85 ,0.5))
 
560
    f.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(0.401,0.5))
 
561
 
 
562
    check_unequal_layout(f, f1)
 
563
    total_energy_check_time = 1.0;
 
564
    while (f.time() < ttot):
 
565
        f.step()
 
566
        f1.step()
 
567
        if not compare_point(f, f1, vec(0.01  , 0.5)):
 
568
            return False
 
569
        if not compare_point(f, f1, vec(0.21  , 0.5)):
 
570
            return False
 
571
        if not compare_point(f, f1, vec(0.46 , 0.33)):
 
572
            return False
 
573
        if not compare_point(f, f1, vec(0.2  , 0.2 )):
 
574
            return False
 
575
        if (f.time() >= total_energy_check_time):
 
576
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
577
                return False
 
578
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
579
                return False
 
580
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
581
                return False
 
582
            total_energy_check_time += 1.0
 
583
 
 
584
    return True 
 
585
 
 
586
 
 
587
def test_yperiodic_ymirror(eps):
 
588
    a = 8.0
 
589
    ttot = 5.0
 
590
 
 
591
    v = voltwo(1.0, 1.0, a)
 
592
    v1 = voltwo(1.0, 1.0, a)
 
593
    trg.the_center = v.center()
 
594
    S = mirror(Y,v)
 
595
    #S = identity()
 
596
    s1 = structure(v1, eps)
 
597
    s = structure(v, eps, no_pml(), S)
 
598
 
 
599
    master_printf("Testing Y periodic with mirror symmetry...\n");
 
600
 
 
601
    f1=fields(s1)
 
602
    #f1.use_bloch(vec(0.1*pi/2,0.0))
 
603
    f1.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(0.401,0.5))
 
604
    f = fields(s)
 
605
    #f.use_bloch(vec(0.1*pi/2,0.0))
 
606
    f.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(0.401,0.5))
 
607
    check_unequal_layout(f, f1)
 
608
    total_energy_check_time = 1.0
 
609
    while (f.time() < ttot):
 
610
        f.step()
 
611
        f1.step()
 
612
        if not compare_point(f, f1, vec(0.951  , 0.5)):
 
613
            return False
 
614
        if not compare_point(f, f1, vec(0.01  , 0.5)):
 
615
            return False
 
616
        if not compare_point(f, f1, vec(0.21  , 0.5)):
 
617
            return False
 
618
        if not compare_point(f, f1, vec(0.46 , 0.33)):
 
619
            return False
 
620
        if not compare_point(f, f1, vec(0.2  , 0.2 )):
 
621
            return False
 
622
        if (f.time() >= total_energy_check_time):
 
623
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
624
                return False
 
625
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
626
                return False
 
627
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
628
                return False
 
629
            total_energy_check_time += 1.0
 
630
 
 
631
    return True 
 
632
 
 
633
 
 
634
def test_metal_rot2y(eps):
 
635
    a = 16.0
 
636
    ttot = 5.0
 
637
    v = voltwo(1.0, 1.0, a)
 
638
    trg.the_center = v.center()
 
639
    S = rotate2(Y,v)
 
640
    s=structure(v, eps, no_pml(), S)
 
641
    s1=structure(v, eps)
 
642
    master_printf("Testing Y twofold rotational symmetry...\n")
 
643
 
 
644
    f1=fields(s1)
 
645
    f1.add_point_source(Hz, 0.7, 2.5, 0.0, 4.0, vec(0.25, 0.875), 1.0)
 
646
    f1.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(0.25,0.375), 1.0)
 
647
    f1.add_point_source(Hz, 0.7, 2.5, 0.0, 4.0, vec(0.75, 0.875),-1.0)
 
648
    f1.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(0.75,0.375),-1.0)
 
649
    f=fields(s)
 
650
    f.add_point_source(Hz, 0.7, 2.5, 0.0, 4.0, vec(0.25,0.875 ), 1.0)
 
651
    f.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(0.25,0.375), 1.0)
 
652
    f.add_point_source(Hz, 0.7, 2.5, 0.0, 4.0, vec(0.75,0.875 ),-1.0)
 
653
    f.add_point_source(Ez, 0.8, 0.6, 0.0, 4.0, vec(0.75,0.375),-1.0)
 
654
    check_unequal_layout(f, f1)
 
655
    total_energy_check_time = 1.0
 
656
    while (f.time() < ttot):
 
657
        f.step()
 
658
        f1.step()
 
659
        if not compare_point(f, f1, vec(0.01  , 0.5)):
 
660
            return False
 
661
        if not compare_point(f, f1, vec(0.21  , 0.5)):
 
662
            return False
 
663
        if not compare_point(f, f1, vec(0.46 , 0.33)):
 
664
            return False
 
665
        if not compare_point(f, f1, vec(0.2  , 0.2 )):
 
666
            return False
 
667
        if (f.time() >= total_energy_check_time):
 
668
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
669
                return False
 
670
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
671
                return False
 
672
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
673
                return False
 
674
            total_energy_check_time += 1.0
 
675
 
 
676
    return True 
 
677
 
 
678
def exact_metal_rot2y(eps): 
 
679
    a = 16.0
 
680
    ttot = 5.0
 
681
 
 
682
    v = voltwo(1.0, 1.5, a)
 
683
    trg.the_center = v.center()
 
684
    S = rotate2(Y,v)
 
685
    s=structure(v, eps, no_pml(), S)
 
686
    s1=structure(v, eps)
 
687
    master_printf("Testing exact Y twofold rotational symmetry...\n")
 
688
 
 
689
    f1=fields(s1)
 
690
    f1.add_point_source(Ey, 0.7, 2.5, 0.0, 4.0, vec(0.5, 0.875))
 
691
    f1.add_point_source(Hy, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.375))
 
692
    f=fields(s)
 
693
    f.add_point_source(Ey, 0.7, 2.5, 0.0, 4.0, vec(0.5, 0.875))
 
694
    f.add_point_source(Hy, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.375))
 
695
    check_unequal_layout(f, f1)
 
696
    total_energy_check_time = 1.0
 
697
    while (f.time() < ttot):
 
698
        f.step()
 
699
        f1.step()
 
700
        if not compare_point(f, f1, vec(0.01  , 0.5)):
 
701
            return False
 
702
        if not compare_point(f, f1, vec(0.21  , 0.5)):
 
703
            return False
 
704
        if not compare_point(f, f1, vec(0.46 , 0.33)):
 
705
            return False
 
706
        if not compare_point(f, f1, vec(0.2  , 0.2 )):
 
707
            return False
 
708
        if (f.time() >= total_energy_check_time):
 
709
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
710
                return False
 
711
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
712
                return False
 
713
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
714
                return False
 
715
            total_energy_check_time += 1.0
 
716
 
 
717
    return True 
 
718
 
 
719
def pml_twomirrors(eps):
 
720
    a = 16.0
 
721
    ttot = 10.0
 
722
 
 
723
    v = voltwo(2.0, 2.0, a)
 
724
    trg.the_center = v.center()
 
725
    S = mirror(X,v) + mirror(Y,v)
 
726
 
 
727
    s_mm=structure(v, eps, pml(0.5), S)
 
728
    s1=structure(v, eps, pml(0.5), identity())
 
729
    master_printf("Testing two mirrors with PML...\n")
 
730
    f_mm=fields(s_mm)
 
731
    f1=fields(s1)
 
732
 
 
733
    f_mm.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(1.0,1.0),-1.5)
 
734
    f_mm.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.75,0.75))
 
735
    f_mm.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.75,1.25))
 
736
    f_mm.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(1.25,0.75))
 
737
    f_mm.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(1.25,1.25))
 
738
 
 
739
    f1.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(1.0,1.0),-1.5)
 
740
    f1.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.75,0.75))
 
741
    f1.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.75,1.25))
 
742
    f1.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(1.25,0.75))
 
743
    f1.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(1.25,1.25))
 
744
 
 
745
    check_unequal_layout(f_mm, f1)
 
746
    total_energy_check_time = 3.0
 
747
 
 
748
    while (f_mm.time() < ttot):
 
749
        f_mm.step()
 
750
        f1.step()
 
751
        if not compare_point(f_mm, f1, vec(0.01  , 0.5)):
 
752
            return False
 
753
        if not compare_point(f_mm, f1, vec(0.21  , 0.5)):
 
754
            return False
 
755
        if not compare_point(f_mm, f1, vec(0.46 , 0.33)):
 
756
            return False
 
757
        if not compare_point(f_mm, f1, vec(0.2  , 0.2 )):
 
758
            return False
 
759
        if (f_mm.time() >= total_energy_check_time):
 
760
            if not compare(f_mm.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
761
                return False
 
762
            total_energy_check_time += 3.0
 
763
 
 
764
    return True 
 
765
 
 
766
def exact_metal_rot4z(eps):
 
767
    a = 8.0
 
768
    ttot = 5.0
 
769
 
 
770
    v = voltwo(1.0, 1.0, a)
 
771
    trg.the_center = v.center()
 
772
    S = rotate4(Z,v)
 
773
 
 
774
    s=structure(v, eps, no_pml(), S)
 
775
    s1=structure(v, eps)
 
776
    master_printf("Testing Z fourfold rotational symmetry...\n");
 
777
 
 
778
    f1=fields(s1)
 
779
    f1.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5))
 
780
    f1.add_point_source(Hz, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.5))
 
781
    f=fields(s)
 
782
    f.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5))
 
783
    f.add_point_source(Hz, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.5))
 
784
    check_unequal_layout(f, f1)
 
785
    total_energy_check_time = 1.0
 
786
 
 
787
    while (f.time() < ttot):
 
788
        f.step()
 
789
        f1.step()
 
790
        if not compare_point(f, f1, vec(0.01  , 0.5)):
 
791
            return False
 
792
        if not compare_point(f, f1, vec(0.21  , 0.5)):
 
793
            return False
 
794
        if not compare_point(f, f1, vec(0.46 , 0.33)):
 
795
            return False
 
796
        if not compare_point(f, f1, vec(0.2  , 0.2 )):
 
797
            return False
 
798
        if (f.time() >= total_energy_check_time):
 
799
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
800
                return False
 
801
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
802
                return False
 
803
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
804
                return False
 
805
            total_energy_check_time += 1.0
 
806
 
 
807
    return True 
 
808
 
 
809
def exact_metal_rot4z_nonlinear(eps):
 
810
    a = 8.0
 
811
    ttot = 5.0
 
812
 
 
813
    v = voltwo(1.0, 1.0, a)
 
814
    trg.the_center = v.center()
 
815
    S = rotate4(Z,v)
 
816
 
 
817
    s=structure(v, eps, no_pml(), S)
 
818
    s1=structure(v, eps)
 
819
    s.set_chi3(ONE)
 
820
    s1.set_chi3(ONE)
 
821
    master_printf("Testing nonlinear Z fourfold rotational symmetry...\n")
 
822
 
 
823
    f1=fields(s1)
 
824
    f1.add_point_source(Hz, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.5))
 
825
    f=fields(s)
 
826
    f.add_point_source(Hz, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.5))
 
827
    check_unequal_layout(f, f1)
 
828
    total_energy_check_time = 1.0
 
829
 
 
830
    while (f.time() < ttot):
 
831
        f.step()
 
832
        f1.step()
 
833
        if not compare_point(f, f1, vec(0.01  , 0.5)):
 
834
            return False
 
835
        if not compare_point(f, f1, vec(0.21  , 0.5)):
 
836
            return False
 
837
        if not compare_point(f, f1, vec(0.46 , 0.33)):
 
838
            return False
 
839
        if not compare_point(f, f1, vec(0.2  , 0.2 )):
 
840
            return False
 
841
        if (f.time() >= total_energy_check_time):
 
842
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
843
                return False
 
844
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
845
                return False
 
846
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
847
                return False
 
848
            total_energy_check_time += 1.0
 
849
 
 
850
    return True 
 
851
 
 
852
def exact_pml_rot2x_tm(eps):
 
853
    a = 8.0
 
854
    ttot = 30.0
 
855
 
 
856
    v = voltwo(3.0, 3.0, a)
 
857
    trg.the_center = v.center()
 
858
    S = rotate2(X,v)
 
859
 
 
860
    s=structure(v, eps, pml(1.0), S)
 
861
    s1=structure(v, eps, pml(1.0), identity())
 
862
    master_printf("Testing X twofold rotational symmetry with PML...\n")
 
863
 
 
864
    f1=fields(s1)
 
865
    f1.add_point_source(Hx, 0.7, 2.5, 0.0, 4.0, vec(1.3,1.5))
 
866
    f=fields(s)
 
867
    f.add_point_source(Hx, 0.7, 2.5, 0.0, 4.0, vec(1.3,1.5))
 
868
    check_unequal_layout(f, f1)
 
869
    total_energy_check_time = 1.0
 
870
 
 
871
    while (f.time() < ttot):
 
872
        f.step()
 
873
        f1.step()
 
874
        if not compare_point(f, f1, vec(0.01  , 1.5)):
 
875
            return False
 
876
        if not compare_point(f, f1, vec(1.21  , 1.5)):
 
877
            return False
 
878
        if not compare_point(f, f1, vec(1.46 , 0.33)):
 
879
            return False
 
880
        if not compare_point(f, f1, vec(1.2  , 1.2 )):
 
881
            return False
 
882
        if (f.time() >= total_energy_check_time):
 
883
            if not compare(f.electric_energy_in_box(v.surroundings()), f1.electric_energy_in_box(v.surroundings()), "electric energy"):
 
884
                return False
 
885
            if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
 
886
                return False
 
887
            if not compare(f.total_energy(), f1.total_energy(), "   total energy"):
 
888
                return False
 
889
            total_energy_check_time += 1.0
 
890
 
 
891
    return True 
 
892
 
 
893
def polariton_ex(v,eps):
 
894
    ttot = 10.0
 
895
    #print v.dim, dimension_name(v.dim)
 
896
    master_printf("Testing polariton in %s...\n", dimension_name(v.dim))
 
897
    trg.the_center = v.center()
 
898
    S = mirror(Z,v)
 
899
    s=structure(v, eps)
 
900
    sS=structure(v, eps, no_pml(), S)
 
901
    
 
902
    # previous (meep-0.20.4) polarisability setting was much easier  
 
903
    pol1 = sigma(7.63)
 
904
    set_DBL1_Callback(pol1.__disown__())
 
905
    pol2 = sigma(7.63)
 
906
    set_DBL2_Callback(pol2.__disown__())
 
907
    
 
908
    s.add_polarizability(DBL1, 0.3, 0.1)
 
909
    sS.add_polarizability(DBL2, 0.3, 0.1)
 
910
    f=fields(s)
 
911
    f.use_real_fields()
 
912
    f.add_point_source(Ex, 0.2, 3.0, 0.0, 2.0, v.center())
 
913
    fS=fields(sS)
 
914
    fS.use_real_fields()
 
915
    fS.add_point_source(Ex, 0.2, 3.0, 0.0, 2.0, v.center())
 
916
    f.use_bloch(zero_vec(v.dim))
 
917
    fS.use_bloch(zero_vec(v.dim))
 
918
    check_unequal_layout(f, fS)
 
919
    while (f.time() < ttot):
 
920
        f.step()
 
921
        fS.step()
 
922
        if not compare_point(fS, f, v.center()):
 
923
            return False
 
924
        if not compare_point(fS, f, zero_vec(v.dim)):
 
925
            return False
 
926
        if not compare_point(fS, f, v.center()*0.3):
 
927
            return False
 
928
    return True
 
929
 
 
930
def nonlinear_ex(v,eps):
 
931
    ttot = 10.0;
 
932
    master_printf("Testing nonlinear in %s...\n", dimension_name(v.dim))
 
933
    trg.the_center = v.center()
 
934
    S = mirror(Z,v)
 
935
    s=structure(v, eps)
 
936
    sS=structure(v, eps, no_pml(), S)
 
937
    s.set_chi3(ONE)
 
938
    sS.set_chi3(ONE)
 
939
    f=fields(s)
 
940
    f.use_real_fields()
 
941
    f.add_point_source(Ex, 0.2, 3.0, 0.0, 2.0, v.center())
 
942
    fS=fields(sS)
 
943
    fS.use_real_fields()
 
944
    fS.add_point_source(Ex, 0.2, 3.0, 0.0, 2.0, v.center())
 
945
    f.use_bloch(zero_vec(v.dim))
 
946
    fS.use_bloch(zero_vec(v.dim))
 
947
    check_unequal_layout(f, fS)
 
948
    while (f.time() < ttot):
 
949
        f.step()
 
950
        fS.step()
 
951
        if not compare_point(fS, f, v.center()):
 
952
            return False
 
953
        if not compare_point(fS, f, zero_vec(v.dim)):
 
954
            return False
 
955
        if not compare_point(fS, f, v.center()*0.3):
 
956
            return False
 
957
    return True
 
958
 
 
959
master_printf("Testing with various kinds of symmetry...\n")
 
960
 
 
961
use_averaging(False)
 
962
 
 
963
if not test_1d_periodic_mirror(ONE):
 
964
    abort("error in test_1d_periodic_mirror vacuum\n")
 
965
 
 
966
if not test_cyl_metal_mirror(ONE):
 
967
    abort("error in test_cyl_metal_mirror vacuum\n")
 
968
 
 
969
if not test_yperiodic_ymirror(ONE):
 
970
    abort("error in test_yperiodic_ymirror vacuum\n")
 
971
 
 
972
if not test_yperiodic_ymirror(rods_2d):
 
973
    abort("error in test_yperiodic_ymirror rods2d\n")
 
974
 
 
975
if not pml_twomirrors(ONE):
 
976
    abort("error in pml_twomirrors vacuum\n")
 
977
 
 
978
if not test_origin_shift():
 
979
    abort("error in test_origin_shift\n")
 
980
 
 
981
if not exact_pml_rot2x_tm(ONE):
 
982
    abort("error in exact_pml_rot2x_tm vacuum\n")
 
983
 
 
984
if not test_metal_xmirror(rods_2d):
 
985
    abort("error in test_metal_xmirror rods_2d\n")
 
986
 
 
987
if not test_metal_xmirror(ONE):
 
988
    abort("error in test_metal_xmirror vacuum\n")
 
989
    
 
990
if not test_metal_ymirror(ONE):
 
991
    abort("error in test_metal_ymirror vacuum\n")
 
992
 
 
993
if not test_metal_ymirror(rods_2d):
 
994
    abort("error in test_metal_ymirror rods_2d\n")
 
995
 
 
996
if not test_metal_rot2y(ONE):
 
997
    abort("error in test_metal_rot2y vacuum\n")
 
998
 
 
999
if not test_metal_rot2y(rods_2d):
 
1000
    abort("error in test_metal_rot2y rods_2d\n")
 
1001
 
 
1002
if not exact_metal_rot2y(ONE):
 
1003
    abort("error in exact_metal_rot2y vacuum\n")
 
1004
 
 
1005
if not exact_metal_rot2y(rods_2d):
 
1006
    abort("error in exact_metal_rot2y rods_2d\n")
 
1007
 
 
1008
if not exact_metal_rot4z(ONE):
 
1009
    abort("error in exact_metal_rot4z vacuum\n")
 
1010
 
 
1011
if not exact_metal_rot4z(rods_2d):
 
1012
    abort("error in exact_metal_rot4z rods_2d\n")
 
1013
 
 
1014
if not test_3D_metal_xmirror(ONE):
 
1015
    abort("error in test_3D_metal_xmirror vacuum\n")
 
1016
 
 
1017
if not test_3D_metal_zmirror(ONE):
 
1018
    abort("error in test_3D_metal_zmirror vacuum\n")
 
1019
 
 
1020
if not test_3D_metal_odd_zmirror(ONE):
 
1021
    abort("error in test_3D_metal_odd_zmirror vacuum\n")
 
1022
 
 
1023
if not test_3D_metal_rot4z(ONE):
 
1024
    all_wait()
 
1025
    abort("error in test_3D_metal_rot4z vacuum\n")
 
1026
 
 
1027
if not test_3D_metal_rot4z_mirror(ONE):
 
1028
    abort("error in test_3D_metal_rot4z_mirror vacuum\n")
 
1029
 
 
1030
if not test_3D_metal_3mirror(ONE):
 
1031
    abort("error in test_3D_metal_3mirror\n")
 
1032
 
 
1033
thresh_compare = 1e-10
 
1034
 
 
1035
if not nonlinear_ex(vol1d(1.0, 30.0), ONE):
 
1036
    abort("error in 1D nonlinear vacuum\n")
 
1037
    
 
1038
if not nonlinear_ex(vol3d(1.0, 1.2, 0.8, 10.0), ONE):
 
1039
    abort("error in 3D nonlinear vacuum\n")
 
1040
 
 
1041
if not test_cyl_metal_mirror_nonlinear(ONE):
 
1042
    abort("error in test_cyl_metal_mirror nonlinear vacuum\n")
 
1043
 
 
1044
if not exact_metal_rot4z_nonlinear(ONE):
 
1045
    abort("error in exact_metal_rot4z nonlinear vacuum\n")
 
1046
 
 
1047
if not exact_metal_rot4z_nonlinear(rods_2d):
 
1048
    abort("error in exact_metal_rot4z nonlinear rods_2d\n")
 
1049
 
 
1050
if not polariton_ex(vol1d(1.0, 30.0), ONE):
 
1051
    abort("error in 1D polariton vacuum\n")
 
1052
 
 
1053
if not polariton_ex(vol3d(1.0, 1.2, 0.8, 10.0), ONE):
 
1054
    abort("error in 3D polariton vacuum\n")
 
1055
 
 
1056
 
 
1057
print 'All tests passed succesfully'
 
1058
 
 
1059