#!/usr/bin/env python3 # Copyright 2021 # # This file is part of WarpX. # # License: BSD-3-Clause-LBNL """ This tests verifies the Silver-Mueller boundary condition. A laser pulse is emitted and propagates towards the boundaries ; the test check that the reflected field at the boundary is negligible. """ import os import re import sys import numpy as np import yt ; yt.funcs.mylog.setLevel(0) sys.path.insert(1, '../../../../warpx/Regression/Checksum/') import checksumAPI filename = sys.argv[1] ds = yt.load( filename ) all_data_level_0 = ds.covering_grid(level=0,left_edge=ds.domain_left_edge, dims=ds.domain_dimensions) warpx_used_inputs = open('./warpx_used_inputs', 'r').read() geom_RZ = re.search('geometry.dims = RZ', warpx_used_inputs) if geom_RZ: Er = all_data_level_0['boxlib', 'Er'].v.squeeze() Et = all_data_level_0['boxlib', 'Et'].v.squeeze() Ez = all_data_level_0['boxlib', 'Ez'].v.squeeze() else: Ex = all_data_level_0['boxlib', 'Ex'].v.squeeze() Ey = all_data_level_0['boxlib', 'Ey'].v.squeeze() Ez = all_data_level_0['boxlib', 'Ez'].v.squeeze() # The peak of the initial laser pulse is on the order of 6 V/m # Check that the amplitude after reflection is less than 0.01 V/m max_reflection_amplitude = 0.01 if geom_RZ: assert np.all( abs(Er) < max_reflection_amplitude ) assert np.all( abs(Et) < max_reflection_amplitude ) assert np.all( abs(Ez) < max_reflection_amplitude ) else: assert np.all( abs(Ex) < max_reflection_amplitude ) assert np.all( abs(Ey) < max_reflection_amplitude ) assert np.all( abs(Ez) < max_reflection_amplitude ) test_name = os.path.split(os.getcwd())[1] checksumAPI.evaluate_checksum(test_name, filename)