aboutsummaryrefslogtreecommitdiff
path: root/Examples/Modules/embedded_boundary_cube/analysis_fields_2d.py
diff options
context:
space:
mode:
authorGravatar Lorenzo Giacomel <47607756+lgiacome@users.noreply.github.com> 2021-11-12 22:02:03 +0100
committerGravatar GitHub <noreply@github.com> 2021-11-12 13:02:03 -0800
commit5e1b4f4f694396df21b32f09bbccc74235bf861a (patch)
treea0fa926de2a0bfb822a35e719be37c31ff2f8519 /Examples/Modules/embedded_boundary_cube/analysis_fields_2d.py
parent8edeb87183ee672548db7741a5625883499317ab (diff)
downloadWarpX-5e1b4f4f694396df21b32f09bbccc74235bf861a.tar.gz
WarpX-5e1b4f4f694396df21b32f09bbccc74235bf861a.tar.zst
WarpX-5e1b4f4f694396df21b32f09bbccc74235bf861a.zip
2D EM solver with EB (#2401)
* adding the FieldProbe * adding missing file * updating makefile * fixing host-device problem * Revert "fixing host-device problem" This reverts commit 801e6fc47f19cfc42ec46e5ef1a18dcf86be3e5a. * fixing host-device problem * making some variables const * adding a few comments * Adding the FieldProbe to the documentation * making the probe mpi-safe * added field probe to reduced diag test * added field probe to reduced diag analysis * using cell-centered fields in probe diag * removed a few typos * Interpolating to the point instead oof cell center * bug fix * improved a comment * updated documentation * Undone an outdated change * improving some variable names * improving the box extraction * making the interpolation order an input parameter * fix a typo * setting the field values to zero if the point is not in the domain * skipping the communication if probe proc is IO prcessor * Fixed typo in documentation Co-authored-by: Neïl Zaim <49716072+NeilZaim@users.noreply.github.com> * Updating an header * Added a comment on the probe position * tidying up the analysis script * fixed a comment * removing an unused include * improving the parsing of parameters * fixing some comments * making some variables const * changed some ParticleReal into Real * using better tags in MPI communication * Making field probe work in 2D * making a variable const * initializing y_probe only in 3D * tidying up a line which is common to 2D and 3D * making a variable constexpr * adding a _rt * checking that the probe location is in one of the processors * removing a useless if condition * Fixing the initialization in 2D * Avoiding scrape particles in 2D (it segfaults) * Adding a test for 2D EB * Fixed the areas initialization * Initializing to zero some multifabs * Modified the ECT solver to make it work in 2D * Modified the cell extensions to make them work in 2D * Improved 2D cube test * Added 2D rotated cube test * Adding the 2d analysis script and CI * Removed an unused import from the analysis script * Ignoring some unused variables * Fixing the number of dimensions in the 2d test * Added missing analysis for ECT * Enabled again 2d particles scraping * Fixing the test_name with the general logic * Fixing the test_name with the general logic * Removed some commented code * Modified several preprocessor directives to check consistency EB-dimension * Added missing semicolons * Fixed a preprocessor directivew * Fix typo: WARPX_DIM_XZ * Improving some comments Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja> * Adding some more consistency checks * Adding some more consistency checks * Fixed a typo Co-authored-by: Neïl Zaim <49716072+NeilZaim@users.noreply.github.com> Co-authored-by: Axel Huebl <axel.huebl@plasma.ninja>
Diffstat (limited to 'Examples/Modules/embedded_boundary_cube/analysis_fields_2d.py')
-rwxr-xr-xExamples/Modules/embedded_boundary_cube/analysis_fields_2d.py60
1 files changed, 60 insertions, 0 deletions
diff --git a/Examples/Modules/embedded_boundary_cube/analysis_fields_2d.py b/Examples/Modules/embedded_boundary_cube/analysis_fields_2d.py
new file mode 100755
index 000000000..ebf303601
--- /dev/null
+++ b/Examples/Modules/embedded_boundary_cube/analysis_fields_2d.py
@@ -0,0 +1,60 @@
+#! /usr/bin/env python
+
+import yt
+import os
+import sys
+from scipy.constants import mu_0, pi, c
+import numpy as np
+
+sys.path.insert(1, '../../../../warpx/Regression/Checksum/')
+import checksumAPI
+
+# This is a script that analyses the simulation results from
+# the script `inputs_3d`. This simulates a TMmnp mode in a PEC cubic resonator.
+# The magnetic field in the simulation is given (in theory) by:
+# $$ B_y = \mu \cos(k_x x)\cos(k_z z)\cos( \omega_p t)$$
+# with
+# $$ k_x = \frac{m\pi}{L}$$
+# $$ k_y = \frac{n\pi}{L}$$
+# $$ k_z = \frac{p\pi}{L}$$
+
+hi = [0.8, 0.8]
+lo = [-0.8, -0.8]
+ncells = [32, 32, 1]
+dx = (hi[0] - lo[0]) / ncells[0]
+dz = (hi[1] - lo[1]) / ncells[1]
+m = 0
+n = 1
+Lx = 1
+Lz = 1
+
+# Open the right plot file
+filename = sys.argv[1]
+ds = yt.load(filename)
+data = ds.covering_grid(level=0, left_edge=ds.domain_left_edge, dims=ds.domain_dimensions)
+
+t = ds.current_time.to_value()
+
+# Compute the analytic solution
+By_th = np.zeros(ncells)
+for i in range(ncells[0]):
+ for j in range(ncells[1]):
+ x = (i+0.5) * dx + lo[0]
+ z = (j+0.5) * dz + lo[1]
+
+ By_th[i, j, 0] = mu_0 * (np.cos(m * pi / Lx * (x - Lx / 2)) *
+ np.cos(n * pi / Lz * (z - Lz / 2)) *
+ (-Lx / 2 <= x < Lx / 2) *
+ (-Lz / 2 <= z < Lz / 2) *
+ np.cos(np.pi / Lx * c * t))
+
+rel_tol_err = 1e-3
+
+# Compute relative l^2 error on By
+By_sim = data['By'].to_ndarray()
+rel_err_y = np.sqrt(np.sum(np.square(By_sim - By_th)) / np.sum(np.square(By_th)))
+assert (rel_err_y < rel_tol_err)
+
+test_name = os.path.split(os.getcwd())[1]
+
+checksumAPI.evaluate_checksum(test_name, filename)