update to new fdtd approach
This commit is contained in:
		
							parent
							
								
									faecc79179
								
							
						
					
					
						commit
						71d6ceec1e
					
				@ -11,6 +11,7 @@ import numpy
 | 
				
			|||||||
import h5py
 | 
					import h5py
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from meanas import fdtd
 | 
					from meanas import fdtd
 | 
				
			||||||
 | 
					from meanas.fdtd import cpml_params, updates_with_cpml
 | 
				
			||||||
from masque import Pattern, shapes
 | 
					from masque import Pattern, shapes
 | 
				
			||||||
import gridlock
 | 
					import gridlock
 | 
				
			||||||
import pcgen
 | 
					import pcgen
 | 
				
			||||||
@ -127,19 +128,15 @@ def main():
 | 
				
			|||||||
    e = [numpy.zeros_like(epsilon[0], dtype=dtype) for _ in range(3)]
 | 
					    e = [numpy.zeros_like(epsilon[0], dtype=dtype) for _ in range(3)]
 | 
				
			||||||
    h = [numpy.zeros_like(epsilon[0], dtype=dtype) for _ in range(3)]
 | 
					    h = [numpy.zeros_like(epsilon[0], dtype=dtype) for _ in range(3)]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    update_e = fdtd.maxwell_e(dt)
 | 
					    dxes = [grid.dxyz, grid.autoshifted_dxyz()]
 | 
				
			||||||
    update_h = fdtd.maxwell_h(dt)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # PMLs in every direction
 | 
					    # PMLs in every direction
 | 
				
			||||||
    pml_e_funcs = []
 | 
					    pml_params = [[cpml_params(axis=dd, polarity=pp, dt=dt,
 | 
				
			||||||
    pml_h_funcs = []
 | 
					                               thickness=pml_thickness, epsilon_eff=1.0**2)
 | 
				
			||||||
    pml_fields = {}
 | 
					                   for pp in (-1, +1)]
 | 
				
			||||||
    for d in (0, 1, 2):
 | 
					                  for dd in range(3)]
 | 
				
			||||||
        for p in (-1, 1):
 | 
					    update_E, update_H = updates_with_cpml(cpml_params=pml_params, dt=dt,
 | 
				
			||||||
            ef, hf, psis = fdtd.cpml(direction=d, polarity=p, dt=dt, epsilon=epsilon, epsilon_eff=n_slab**2, dtype=dtype)
 | 
					                                           dxes=dxes, epsilon=epsilon)
 | 
				
			||||||
            pml_e_funcs.append(ef)
 | 
					 | 
				
			||||||
            pml_h_funcs.append(hf)
 | 
					 | 
				
			||||||
            pml_fields.update(psis)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Source parameters and function
 | 
					    # Source parameters and function
 | 
				
			||||||
    w = 2 * numpy.pi * dx / wl
 | 
					    w = 2 * numpy.pi * dx / wl
 | 
				
			||||||
@ -155,12 +152,10 @@ def main():
 | 
				
			|||||||
    output_file = h5py.File('simulation_output.h5', 'w')
 | 
					    output_file = h5py.File('simulation_output.h5', 'w')
 | 
				
			||||||
    start = time.perf_counter()
 | 
					    start = time.perf_counter()
 | 
				
			||||||
    for t in range(max_t):
 | 
					    for t in range(max_t):
 | 
				
			||||||
        [f(e, h, epsilon) for f in pml_e_funcs]
 | 
					        update_E(e, h, epsilon)
 | 
				
			||||||
        update_e(e, h, epsilon)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        e[1][tuple(grid.shape//2)] += field_source(t)
 | 
					        e[1][tuple(grid.shape//2)] += field_source(t)
 | 
				
			||||||
        [f(e, h) for f in pml_h_funcs]
 | 
					        update_H(e, h)
 | 
				
			||||||
        update_h(e, h)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        print('iteration {}: average {} iterations per sec'.format(t, (t+1)/(time.perf_counter()-start)))
 | 
					        print('iteration {}: average {} iterations per sec'.format(t, (t+1)/(time.perf_counter()-start)))
 | 
				
			||||||
        sys.stdout.flush()
 | 
					        sys.stdout.flush()
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user