from pathlib import Path import gprMax # File path for output fn = Path(__file__) # Discretisation dl = 0.001 # Domain x = 0.100 y = 0.100 z = 0.100 domain = gprMax.Domain(p1=(x, y, z)) dxdydz = gprMax.Discretisation(p1=(dl, dl, dl)) time_window = gprMax.TimeWindow(time=3e-9) waveform = gprMax.Waveform(wave_type='gaussian', amp=1, freq=1e9, id='mypulse') hertzian_dipole = gprMax.HertzianDipole(polarisation='z', p1=(0.050, 0.050, 0.050), waveform_id='mypulse') rx = gprMax.Rx(p1=(0.070, 0.070, 0.070)) # PML cases thick = 10 # thickness cases = {'off': {'x0': 0, 'y0': 0, 'z0': 0, 'xmax': 0, 'ymax': 0, 'zmax':0}, 'x0': {'x0': thick, 'y0': 0, 'z0': 0, 'xmax': 0, 'ymax': 0, 'zmax':0}, 'y0': {'x0': 0, 'y0': thick, 'z0': 0, 'xmax': 0, 'ymax': 0, 'zmax':0}, 'z0': {'x0': 0, 'y0': 0, 'z0': thick, 'xmax': 0, 'ymax': 0, 'zmax':0}, 'xmax': {'x0': 0, 'y0': 0, 'z0': 0, 'xmax': thick, 'ymax': 0, 'zmax':0}, 'ymax': {'x0': 0, 'y0': 0, 'z0': 0, 'xmax': 0, 'ymax': thick, 'zmax':0}, 'zmax': {'x0': 0, 'y0': 0, 'z0': 0, 'xmax': 0, 'ymax': 0, 'zmax': thick}} # PML formulation pml_type = gprMax.PMLFormulation(pml='HORIPML') ## Built-in 1st order PML pml_cfs = gprMax.PMLCFS(alphascalingprofile='constant', alphascalingdirection='forward', alphamin=0, alphamax=0, kappascalingprofile='constant', kappascalingdirection='forward', kappamin=1, kappamax=1, sigmascalingprofile='quartic', sigmascalingdirection='forward', sigmamin=0, sigmamax=None) ## PMLs from http://dx.doi.org/10.1109/TAP.2011.2180344 ## Standard PML # pml_cfs = gprMax.PMLCFS(alphascalingprofile='constant', # alphascalingdirection='forward', # alphamin=0, alphamax=0, # kappascalingprofile='quartic', # kappascalingdirection='forward', # kappamin=1, kappamax=11, # sigmascalingprofile='quartic', # sigmascalingdirection='forward', # sigmamin=0, sigmamax=7.427) ## CFS PML # pml_cfs = gprMax.PMLCFS(alphascalingprofile='constant', # alphascalingdirection='forward', # alphamin=0.05, alphamax=0.05, # kappascalingprofile='quartic', # kappascalingdirection='forward', # kappamin=1, kappamax=7, # sigmascalingprofile='quartic', # sigmascalingdirection='forward', # sigmamin=0, sigmamax=11.671) ## 2nd order RIPML # pml_cfs1 = gprMax.PMLCFS(alphascalingprofile='constant', # alphascalingdirection='forward', # alphamin=0, alphamax=0, # kappascalingprofile='constant', # kappascalingdirection='forward', # kappamin=1, kappamax=1, # sigmascalingprofile='sextic', # sigmascalingdirection='forward', # sigmamin=0, sigmamax=0.5836) # pml_cfs2 = gprMax.PMLCFS(alphascalingprofile='constant', # alphascalingdirection='forward', # alphamin=0.05, alphamax=0.05, # kappascalingprofile='cubic', # kappascalingdirection='forward', # kappamin=1, kappamax=8, # sigmascalingprofile='quadratic', # sigmascalingdirection='forward', # sigmamin=0, sigmamax=5.8357) scenes = [] for k, v in cases.items(): scene = gprMax.Scene() title = gprMax.Title(name=fn.with_suffix('').name + '_' + k) scene.add(title) scene.add(domain) scene.add(dxdydz) scene.add(time_window) scene.add(waveform) scene.add(hertzian_dipole) scene.add(rx) pml_cells = gprMax.PMLCells(**v) scene.add(pml_cells) scene.add(pml_type) scene.add(pml_cfs) scenes.append(scene) # Run model gprMax.run(scenes=scenes, n=len(cases), geometry_only=False, outputfile=fn)