2
# passed, is polarizability set correctly ?
4
from math import fabs,sqrt
10
def __init__(self, sig):
11
Callback.__init__(self)
13
def double_vec(self,x):
16
class epsilon(Callback):
18
Callback.__init__(self)
19
self.the_center = vec()
21
def double_vec(self,vec):
25
p = pp - self.the_center
34
if (fabs(p.x()) < 0.314):
36
if (fabs(p.y()) < 0.314):
43
set_EPS_Callback(trg.__disown__())
47
if (fabs(a-b) > fabs(b)*eps_compare and max(fabs(a),fabs(b)) > thresh_compare) :
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));
55
def compare_point(f1, f2, p):
57
m_test = monitor_point()
58
f1.get_point(m_test,p)
61
for i in range(0,10) :
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
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())
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");
83
def test_cyl_metal_mirror(eps):
84
master_printf("Testing Z mirror symmetry in Cylindrical...\n")
88
v = volcyl(1.0, 1.0, a)
89
trg.the_center = v.center()
91
s= structure(v, eps, no_pml(), S)
92
s1 = structure(v, eps)
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))
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):
105
if not compare_point(f, f1, veccyl(0.01, 0.5 )):
107
if not compare_point(f, f1, veccyl(0.21, 0.5 )):
109
if not compare_point(f, f1, veccyl(0.501, 0.5 )):
111
if not compare_point(f, f1, veccyl(0.33, 0.46 )):
113
if not compare_point(f, f1, veccyl(0.2, 0.2 )):
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"):
119
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
121
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
123
total_energy_check_time += 1.0;
127
def test_cyl_metal_mirror_nonlinear(eps):
128
master_printf("Testing Z mirror symmetry in Cylindrical...\n")
132
v = volcyl(1.0, 1.0, a)
133
trg.the_center = v.center()
135
s= structure(v, eps, no_pml(), S)
136
s1 = structure(v, eps)
142
f1.add_point_source(Er, 0.7, 2.5, 0.0, 4.0, veccyl(0.5,0.5))
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;
148
while (f.time() < ttot):
151
if not compare_point(f, f1, veccyl(0.01, 0.5 )):
153
if not compare_point(f, f1, veccyl(0.21, 0.5 )):
155
if not compare_point(f, f1, veccyl(0.501, 0.5 )):
157
if not compare_point(f, f1, veccyl(0.33, 0.46 )):
159
if not compare_point(f, f1, veccyl(0.2, 0.2 )):
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"):
165
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
167
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
169
total_energy_check_time += 1.0;
173
def test_1d_periodic_mirror(eps):
174
master_printf("Testing Z mirror symmetry in 1D...\n");
179
trg.the_center = v.center()
182
s=structure (v, eps, no_pml(), S)
186
f1.use_bloch(vec(0.0))
187
f1.add_point_source(Ex, 0.7, 2.5, 0.0, 4.0, vec(0.5))
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
194
while (f.time() < ttot):
197
if not compare_point(f, f1, vec(0.01)):
199
if not compare_point(f, f1, vec(0.33)):
201
if not compare_point(f, f1, vec(0.50)):
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"):
206
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
208
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
210
total_energy_check_time += 1.0;
215
def test_origin_shift():
216
master_printf("Testing origin shift in 2D...\n")
220
v = voltwo(1.0, 1.0, a)
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())
226
s = structure(vcentered, ONE)
227
s1 = structure(v, ONE)
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):
239
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
240
master_printf("Time is %g\n", f.time())
245
def test_metal_xmirror(eps):
246
master_printf("Testing X mirror symmetry...\n")
250
v = voltwo(1.0, 1.0, a)
251
trg.the_center = v.center()
253
s=structure(v, eps, no_pml(), S)
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))
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):
267
if not compare_point(f, f1, vec(0.5 , 0.01)):
269
if not compare_point(f, f1, vec(0.5 , 0.21)):
271
if not compare_point(f, f1, vec(0.5 , 0.501)):
273
if not compare_point(f, f1, vec(0.46 , 0.33)):
275
if not compare_point(f, f1, vec(0.2 , 0.2 )):
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"):
280
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
282
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
284
total_energy_check_time += 1.0
289
def test_3D_metal_xmirror(eps):
293
v = vol3d(1.0, 1.0, 1.0, a)
295
s=structure(v, eps, no_pml(), S)
297
master_printf("Testing X mirror symmetry in 3D...\n");
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))
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
308
while (f.time() < ttot):
311
if not compare_point(f, f1, vec(0.5 , 0.01 , 0.5)):
313
if not compare_point(f, f1, vec(0.5 , 0.21 , 0.5)):
315
if not compare_point(f, f1, vec(0.5 , 0.501, 0.5)):
317
if not compare_point(f, f1, vec(0.46 , 0.33 , 0.5)):
319
if not compare_point(f, f1, vec(0.2 , 0.2 , 0.5)):
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"):
324
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
326
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
328
total_energy_check_time += 1.0
332
def test_3D_metal_zmirror(eps):
336
v = vol3d(1.1, 0.6, 1.0, a)
338
s=structure(v, eps, no_pml(), S)
340
master_printf("Testing Z mirror symmetry in 3D...\n");
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))
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))
349
check_unequal_layout(f, f1)
350
total_energy_check_time = 1.0
352
while (f.time() < ttot):
355
if not compare_point(f, f1, vec(0.5 , 0.01 , 0.75)):
357
if not compare_point(f, f1, vec(0.5 , 0.21 , 0.15)):
359
if not compare_point(f, f1, vec(0.5 , 0.501, 0.5)):
361
if not compare_point(f, f1, vec(0.46 , 0.33 , 0.51)):
363
if not compare_point(f, f1, vec(0.2 , 0.2 , 0.05)):
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"):
368
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
370
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
372
total_energy_check_time += 1.0
376
def test_3D_metal_odd_zmirror(eps):
381
v = vol3d(1.1, 0.6, 1.0, a)
383
s=structure(v, eps, no_pml(), S)
385
master_printf("Testing odd Z mirror symmetry in 3D...\n");
388
f1.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.55,0.51,0.5))
390
f.add_point_source(Ez, 0.7, 2.5, 0.0, 4.0, vec(0.55,0.51,0.5))
392
check_unequal_layout(f, f1)
393
total_energy_check_time = 1.0
395
while (f.time() < ttot):
398
if not compare_point(f, f1, vec(0.5 , 0.01 , 0.75)):
400
if not compare_point(f, f1, vec(0.5 , 0.21 , 0.15)):
402
if not compare_point(f, f1, vec(0.5 , 0.501, 0.5)):
404
if not compare_point(f, f1, vec(0.46 , 0.33 , 0.51)):
406
if not compare_point(f, f1, vec(0.2 , 0.2 , 0.05)):
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"):
411
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
413
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
415
total_energy_check_time += 1.0
419
def test_3D_metal_rot4z(eps):
423
v = vol3d(1.0, 1.0, 1.0, a)
425
s=structure(v, eps, no_pml(), S)
427
master_printf("Testing Z fourfold rotational symmetry in 3D...\n");
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))
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))
435
check_unequal_layout(f, f1)
436
total_energy_check_time = 1.0
438
while (f.time() < ttot):
441
if not compare_point(f, f1, vec(0.5 , 0.01 , 0.75)):
443
if not compare_point(f, f1, vec(0.5 , 0.21 , 0.15)):
445
if not compare_point(f, f1, vec(0.5 , 0.501, 0.5)):
447
if not compare_point(f, f1, vec(0.46 , 0.33 , 0.51)):
449
if not compare_point(f, f1, vec(0.2 , 0.2 , 0.05)):
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"):
454
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
456
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
458
total_energy_check_time += 1.0
462
def test_3D_metal_rot4z_mirror(eps):
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)
470
master_printf("Testing Z fourfold rotational symmetry in 3D with horizontal mirror ...\n");
472
f1.add_point_source(Hz, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5,0.5))
474
f.add_point_source(Hz, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5,0.5))
476
check_unequal_layout(f, f1)
477
total_energy_check_time = 1.0
479
while (f.time() < ttot):
482
if not compare_point(f, f1, vec(0.5 , 0.01 , 0.75)):
484
if not compare_point(f, f1, vec(0.5 , 0.21 , 0.15)):
486
if not compare_point(f, f1, vec(0.5 , 0.501, 0.5)):
488
if not compare_point(f, f1, vec(0.46 , 0.33 , 0.51)):
490
if not compare_point(f, f1, vec(0.2 , 0.2 , 0.05)):
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"):
495
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
497
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
499
total_energy_check_time += 1.0
503
def test_3D_metal_3mirror(eps):
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)
511
master_printf("Testing three mirror planes in 3D...\n");
514
f1.add_point_source(Hz, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5,0.5))
516
f.add_point_source(Hz, 0.7, 2.5, 0.0, 4.0, vec(0.5,0.5,0.5))
518
check_unequal_layout(f, f1)
519
total_energy_check_time = 1.0
521
while (f.time() < ttot):
524
if not compare_point(f, f1, vec(0.5 , 0.01 , 0.75)):
526
if not compare_point(f, f1, vec(0.5 , 0.21 , 0.15)):
528
if not compare_point(f, f1, vec(0.5 , 0.501, 0.5)):
530
if not compare_point(f, f1, vec(0.46 , 0.33 , 0.51)):
532
if not compare_point(f, f1, vec(0.2 , 0.2 , 0.05)):
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"):
537
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
539
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
541
total_energy_check_time += 1.0
545
def test_metal_ymirror(eps):
546
master_printf("Testing Y mirror symmetry...\n")
550
v = voltwo(1.0, 1.0, a)
551
trg.the_center = v.center()
553
s=structure(v, eps, no_pml(), S)
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))
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))
562
check_unequal_layout(f, f1)
563
total_energy_check_time = 1.0;
564
while (f.time() < ttot):
567
if not compare_point(f, f1, vec(0.01 , 0.5)):
569
if not compare_point(f, f1, vec(0.21 , 0.5)):
571
if not compare_point(f, f1, vec(0.46 , 0.33)):
573
if not compare_point(f, f1, vec(0.2 , 0.2 )):
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"):
578
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
580
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
582
total_energy_check_time += 1.0
587
def test_yperiodic_ymirror(eps):
591
v = voltwo(1.0, 1.0, a)
592
v1 = voltwo(1.0, 1.0, a)
593
trg.the_center = v.center()
596
s1 = structure(v1, eps)
597
s = structure(v, eps, no_pml(), S)
599
master_printf("Testing Y periodic with mirror symmetry...\n");
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))
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):
612
if not compare_point(f, f1, vec(0.951 , 0.5)):
614
if not compare_point(f, f1, vec(0.01 , 0.5)):
616
if not compare_point(f, f1, vec(0.21 , 0.5)):
618
if not compare_point(f, f1, vec(0.46 , 0.33)):
620
if not compare_point(f, f1, vec(0.2 , 0.2 )):
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"):
625
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
627
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
629
total_energy_check_time += 1.0
634
def test_metal_rot2y(eps):
637
v = voltwo(1.0, 1.0, a)
638
trg.the_center = v.center()
640
s=structure(v, eps, no_pml(), S)
642
master_printf("Testing Y twofold rotational symmetry...\n")
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)
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):
659
if not compare_point(f, f1, vec(0.01 , 0.5)):
661
if not compare_point(f, f1, vec(0.21 , 0.5)):
663
if not compare_point(f, f1, vec(0.46 , 0.33)):
665
if not compare_point(f, f1, vec(0.2 , 0.2 )):
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"):
670
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
672
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
674
total_energy_check_time += 1.0
678
def exact_metal_rot2y(eps):
682
v = voltwo(1.0, 1.5, a)
683
trg.the_center = v.center()
685
s=structure(v, eps, no_pml(), S)
687
master_printf("Testing exact Y twofold rotational symmetry...\n")
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))
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):
700
if not compare_point(f, f1, vec(0.01 , 0.5)):
702
if not compare_point(f, f1, vec(0.21 , 0.5)):
704
if not compare_point(f, f1, vec(0.46 , 0.33)):
706
if not compare_point(f, f1, vec(0.2 , 0.2 )):
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"):
711
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
713
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
715
total_energy_check_time += 1.0
719
def pml_twomirrors(eps):
723
v = voltwo(2.0, 2.0, a)
724
trg.the_center = v.center()
725
S = mirror(X,v) + mirror(Y,v)
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")
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))
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))
745
check_unequal_layout(f_mm, f1)
746
total_energy_check_time = 3.0
748
while (f_mm.time() < ttot):
751
if not compare_point(f_mm, f1, vec(0.01 , 0.5)):
753
if not compare_point(f_mm, f1, vec(0.21 , 0.5)):
755
if not compare_point(f_mm, f1, vec(0.46 , 0.33)):
757
if not compare_point(f_mm, f1, vec(0.2 , 0.2 )):
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"):
762
total_energy_check_time += 3.0
766
def exact_metal_rot4z(eps):
770
v = voltwo(1.0, 1.0, a)
771
trg.the_center = v.center()
774
s=structure(v, eps, no_pml(), S)
776
master_printf("Testing Z fourfold rotational symmetry...\n");
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))
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
787
while (f.time() < ttot):
790
if not compare_point(f, f1, vec(0.01 , 0.5)):
792
if not compare_point(f, f1, vec(0.21 , 0.5)):
794
if not compare_point(f, f1, vec(0.46 , 0.33)):
796
if not compare_point(f, f1, vec(0.2 , 0.2 )):
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"):
801
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
803
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
805
total_energy_check_time += 1.0
809
def exact_metal_rot4z_nonlinear(eps):
813
v = voltwo(1.0, 1.0, a)
814
trg.the_center = v.center()
817
s=structure(v, eps, no_pml(), S)
821
master_printf("Testing nonlinear Z fourfold rotational symmetry...\n")
824
f1.add_point_source(Hz, 0.8, 0.6, 0.0, 4.0, vec(0.5,0.5))
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
830
while (f.time() < ttot):
833
if not compare_point(f, f1, vec(0.01 , 0.5)):
835
if not compare_point(f, f1, vec(0.21 , 0.5)):
837
if not compare_point(f, f1, vec(0.46 , 0.33)):
839
if not compare_point(f, f1, vec(0.2 , 0.2 )):
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"):
844
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
846
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
848
total_energy_check_time += 1.0
852
def exact_pml_rot2x_tm(eps):
856
v = voltwo(3.0, 3.0, a)
857
trg.the_center = v.center()
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")
865
f1.add_point_source(Hx, 0.7, 2.5, 0.0, 4.0, vec(1.3,1.5))
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
871
while (f.time() < ttot):
874
if not compare_point(f, f1, vec(0.01 , 1.5)):
876
if not compare_point(f, f1, vec(1.21 , 1.5)):
878
if not compare_point(f, f1, vec(1.46 , 0.33)):
880
if not compare_point(f, f1, vec(1.2 , 1.2 )):
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"):
885
if not compare(f.magnetic_energy_in_box(v.surroundings()), f1.magnetic_energy_in_box(v.surroundings()), "magnetic energy"):
887
if not compare(f.total_energy(), f1.total_energy(), " total energy"):
889
total_energy_check_time += 1.0
893
def polariton_ex(v,eps):
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()
900
sS=structure(v, eps, no_pml(), S)
902
# previous (meep-0.20.4) polarisability setting was much easier
904
set_DBL1_Callback(pol1.__disown__())
906
set_DBL2_Callback(pol2.__disown__())
908
s.add_polarizability(DBL1, 0.3, 0.1)
909
sS.add_polarizability(DBL2, 0.3, 0.1)
912
f.add_point_source(Ex, 0.2, 3.0, 0.0, 2.0, v.center())
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):
922
if not compare_point(fS, f, v.center()):
924
if not compare_point(fS, f, zero_vec(v.dim)):
926
if not compare_point(fS, f, v.center()*0.3):
930
def nonlinear_ex(v,eps):
932
master_printf("Testing nonlinear in %s...\n", dimension_name(v.dim))
933
trg.the_center = v.center()
936
sS=structure(v, eps, no_pml(), S)
941
f.add_point_source(Ex, 0.2, 3.0, 0.0, 2.0, v.center())
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):
951
if not compare_point(fS, f, v.center()):
953
if not compare_point(fS, f, zero_vec(v.dim)):
955
if not compare_point(fS, f, v.center()*0.3):
959
master_printf("Testing with various kinds of symmetry...\n")
963
if not test_1d_periodic_mirror(ONE):
964
abort("error in test_1d_periodic_mirror vacuum\n")
966
if not test_cyl_metal_mirror(ONE):
967
abort("error in test_cyl_metal_mirror vacuum\n")
969
if not test_yperiodic_ymirror(ONE):
970
abort("error in test_yperiodic_ymirror vacuum\n")
972
if not test_yperiodic_ymirror(rods_2d):
973
abort("error in test_yperiodic_ymirror rods2d\n")
975
if not pml_twomirrors(ONE):
976
abort("error in pml_twomirrors vacuum\n")
978
if not test_origin_shift():
979
abort("error in test_origin_shift\n")
981
if not exact_pml_rot2x_tm(ONE):
982
abort("error in exact_pml_rot2x_tm vacuum\n")
984
if not test_metal_xmirror(rods_2d):
985
abort("error in test_metal_xmirror rods_2d\n")
987
if not test_metal_xmirror(ONE):
988
abort("error in test_metal_xmirror vacuum\n")
990
if not test_metal_ymirror(ONE):
991
abort("error in test_metal_ymirror vacuum\n")
993
if not test_metal_ymirror(rods_2d):
994
abort("error in test_metal_ymirror rods_2d\n")
996
if not test_metal_rot2y(ONE):
997
abort("error in test_metal_rot2y vacuum\n")
999
if not test_metal_rot2y(rods_2d):
1000
abort("error in test_metal_rot2y rods_2d\n")
1002
if not exact_metal_rot2y(ONE):
1003
abort("error in exact_metal_rot2y vacuum\n")
1005
if not exact_metal_rot2y(rods_2d):
1006
abort("error in exact_metal_rot2y rods_2d\n")
1008
if not exact_metal_rot4z(ONE):
1009
abort("error in exact_metal_rot4z vacuum\n")
1011
if not exact_metal_rot4z(rods_2d):
1012
abort("error in exact_metal_rot4z rods_2d\n")
1014
if not test_3D_metal_xmirror(ONE):
1015
abort("error in test_3D_metal_xmirror vacuum\n")
1017
if not test_3D_metal_zmirror(ONE):
1018
abort("error in test_3D_metal_zmirror vacuum\n")
1020
if not test_3D_metal_odd_zmirror(ONE):
1021
abort("error in test_3D_metal_odd_zmirror vacuum\n")
1023
if not test_3D_metal_rot4z(ONE):
1025
abort("error in test_3D_metal_rot4z vacuum\n")
1027
if not test_3D_metal_rot4z_mirror(ONE):
1028
abort("error in test_3D_metal_rot4z_mirror vacuum\n")
1030
if not test_3D_metal_3mirror(ONE):
1031
abort("error in test_3D_metal_3mirror\n")
1033
thresh_compare = 1e-10
1035
if not nonlinear_ex(vol1d(1.0, 30.0), ONE):
1036
abort("error in 1D nonlinear vacuum\n")
1038
if not nonlinear_ex(vol3d(1.0, 1.2, 0.8, 10.0), ONE):
1039
abort("error in 3D nonlinear vacuum\n")
1041
if not test_cyl_metal_mirror_nonlinear(ONE):
1042
abort("error in test_cyl_metal_mirror nonlinear vacuum\n")
1044
if not exact_metal_rot4z_nonlinear(ONE):
1045
abort("error in exact_metal_rot4z nonlinear vacuum\n")
1047
if not exact_metal_rot4z_nonlinear(rods_2d):
1048
abort("error in exact_metal_rot4z nonlinear rods_2d\n")
1050
if not polariton_ex(vol1d(1.0, 30.0), ONE):
1051
abort("error in 1D polariton vacuum\n")
1053
if not polariton_ex(vol3d(1.0, 1.2, 0.8, 10.0), ONE):
1054
abort("error in 3D polariton vacuum\n")
1057
print 'All tests passed succesfully'