aboutsummaryrefslogtreecommitdiff
path: root/Examples
diff options
context:
space:
mode:
Diffstat (limited to 'Examples')
-rwxr-xr-xExamples/Tests/collision/analysis_collision.py67
-rw-r--r--Examples/Tests/collision/inputs65
2 files changed, 132 insertions, 0 deletions
diff --git a/Examples/Tests/collision/analysis_collision.py b/Examples/Tests/collision/analysis_collision.py
new file mode 100755
index 000000000..25fa26e4b
--- /dev/null
+++ b/Examples/Tests/collision/analysis_collision.py
@@ -0,0 +1,67 @@
+#! /usr/bin/env python
+
+# This script tests the collision module
+# using electron-ion temperature relaxation.
+# Initially, electrons and ions are both in equilibrium
+# (gaussian) distributions, but have different temperatures.
+# Relaxation occurs to bring the two temeratures to be
+# a final same temperature through collisions.
+# The code was tested to be valid, more detailed results
+# were used to obtian an exponential fit with
+# coefficients a and b.
+# This automated test compares the results with the fit.
+
+# Possible errors:
+# tolerance: 0.001
+# Possible running time: ~ 30.0 s
+
+import sys
+import yt
+import re
+import math
+import statistics
+from glob import glob
+
+tolerance = 0.001
+
+ng = 512
+ne = ng * 200
+ni = ng * 200
+np = ne + ni
+
+c = 299792458.0
+me = 9.10938356e-31
+mi = me * 5.0
+
+# exponential fit coefficients
+a = 0.041817463099883
+b = -0.083851393560288
+
+last_fn = sys.argv[1]
+temp = re.compile("([a-zA-Z_]+)([0-9]+)")
+res = temp.match(last_fn).groups()
+fn_list = glob(res[0] + "?????")
+
+error = 0.0
+nt = 0
+for fn in fn_list:
+ # load file
+ ds = yt.load( fn )
+ ad = ds.all_data()
+ px = ad['particle_momentum_x'].to_ndarray()
+ # get time index j
+ buf = temp.match(fn).groups()
+ j = int(buf[1])
+ # compute error
+ vxe = statistics.mean(px[ 0:ne])/me/c
+ vxi = statistics.mean(px[ne:np])/mi/c
+ vxd = vxe - vxi
+ fit = a*math.exp(b*j)
+ error = error + abs(fit-vxd)
+ nt = nt + 1
+
+error = error / nt
+
+print('error = ', error)
+print('tolerance = ', tolerance)
+assert(error < tolerance)
diff --git a/Examples/Tests/collision/inputs b/Examples/Tests/collision/inputs
new file mode 100644
index 000000000..906f50b21
--- /dev/null
+++ b/Examples/Tests/collision/inputs
@@ -0,0 +1,65 @@
+#################################
+####### GENERAL PARAMETERS ######
+#################################
+max_step = 150
+amr.n_cell = 8 8 8
+amr.max_grid_size = 8
+amr.blocking_factor = 8
+amr.max_level = 0
+geometry.coord_sys = 0
+geometry.is_periodic = 1 1 1
+geometry.prob_lo = 0. 0. 0.
+geometry.prob_hi = 4.154046151855669e2 4.154046151855669e2 4.154046151855669e2
+warpx.do_pml = 0
+
+#################################
+############ NUMERICS ###########
+#################################
+warpx.serialize_ics = 1
+warpx.verbose = 1
+warpx.cfl = 1.0
+amr.plot_int = 10
+warpx.plot_raw_fields = 0
+
+#################################
+############ PLASMA #############
+#################################
+particles.nspecies = 2
+particles.species_names = electron ion
+
+electron.charge = -q_e
+electron.mass = m_e
+electron.injection_style = "NRandomPerCell"
+electron.num_particles_per_cell = 200
+electron.profile = constant
+electron.density = 1.0e21
+electron.momentum_distribution_type = "gaussian"
+electron.ux_th = 0.044237441120300
+electron.uy_th = 0.044237441120300
+electron.uz_th = 0.044237441120300
+electron.ux_m = 0.044237441120300
+electron.do_not_deposit = 1
+
+ion.charge = q_e
+ion.mass = 4.554691780000000e-30
+ion.injection_style = "NRandomPerCell"
+ion.num_particles_per_cell = 200
+ion.profile = constant
+ion.density = 1.0e21
+ion.momentum_distribution_type = "gaussian"
+ion.ux_th = 0.006256118919701
+ion.uy_th = 0.006256118919701
+ion.uz_th = 0.006256118919701
+ion.do_not_deposit = 1
+
+#################################
+############ COLLISION ##########
+#################################
+collisions.ncollisions = 3
+collisions.collision_names = collision1 collision2 collision3
+collision1.species = electron ion
+collision2.species = electron electron
+collision3.species = ion ion
+collision1.CoulombLog = 15.9
+collision2.CoulombLog = 15.9
+collision3.CoulombLog = 15.9