def clean_up_diags_dirs(self): from pyphare.cpp import cpp_lib cpp_lib().mpi_barrier() # synchronize first if cpp_lib().mpi_rank() > 0: return # only delete h5 files for rank 0 if self.success: import os import shutil for diag_dir in self.diag_dirs: if os.path.exists(diag_dir): shutil.rmtree(diag_dir)
def initialize(self): if self.cpp_sim is not None: raise ValueError( "Simulator already initialized: requires reset to re-initialize" ) try: from pyphare.cpp import cpp_lib from pyphare.pharein import populateDict startMPI() populateDict() self.cpp_hier = cpp_lib().make_hierarchy() self.cpp_sim = make_cpp_simulator( self.simulation.ndim, self.simulation.interp_order, self.simulation.refined_particle_nbr, self.cpp_hier) self.cpp_sim.initialize() self._auto_dump() # first dump might be before first advance return self except: import sys print('Exception caught in "Simulator.initialize()": {}'.format( sys.exc_info()[0])) raise ValueError( "Error in Simulator.initialize(), see previous error")
def __init__(self, simulator): from .. import pharein as ph from pyphare.cpp import cpp_lib self.dim = ph.global_vars.sim.ndim self.interp = ph.global_vars.sim.interp_order self.refined_particle_nbr = ph.global_vars.sim.refined_particle_nbr self.cpp = getattr(cpp_lib(), f"DataWrangler_{self.dim}_{self.interp}_{self.refined_particle_nbr}")\ (simulator.cpp_sim, simulator.cpp_hier)
def main(): from pyphare.cpp import cpp_lib cpp = cpp_lib() from pyphare.pharesee.run import Run from pyphare.pharesee.hierarchy import flat_finest_field config() Simulator(gv.sim).run() if cpp.mpi_rank() == 0: vphi, t, phi, a, k = phase_speed(".", 0.01, 1000) r = Run(".") t = get_times_from_h5("EM_B.h5") fig, ax = plt.subplots(figsize=(9, 5), nrows=1) B = r.GetB(t[int(len(t) / 2)]) by, xby = flat_finest_field(B, "By") ax.plot(xby, by, label="t = 500", alpha=0.6) sorted_patches = sorted(B.patch_levels[1].patches, key=lambda p: p.box.lower[0]) x0 = sorted_patches[0].patch_datas["By"].x[0] x1 = sorted_patches[-1].patch_datas["By"].x[-1] B = r.GetB(t[-1]) by, xby = flat_finest_field(B, "By") ax.plot(xby, by, label="t = 1000", alpha=0.6) ax.plot(xby, wave(xby, 0.01, 2 * np.pi / 1000., 2 * np.pi / 1000 * 500), color="k", ls="--", label="T=500 (theory)") B = r.GetB(t[0]) by, xby = flat_finest_field(B, "By") ax.plot(xby, by, label="t = 0", color="k") ax.set_xlabel("x") ax.set_ylabel(r"$B_y$") ax.legend(ncol=4, loc="upper center") ax.set_ylim((-0.012, 0.013)) ax.set_title(r"$V_\phi = {:6.4f}$".format(vphi.mean())) ax.axvspan(x0, x1, alpha=0.2) fig.tight_layout() fig.savefig("alfven_wave.png", dpi=200) assert np.mean(np.abs(vphi - 1) < 5e-2)
def _log_to_file(self): """ send C++ std::cout logs to files with env var PHARE_LOG Support keys: RANK_FILES - logfile per rank DATETIME_FILES - logfile with starting datetime timestamp per rank NONE - no logging files, display to cout """ import os if "PHARE_LOG" not in os.environ: os.environ["PHARE_LOG"] = "RANK_FILES" from pyphare.cpp import cpp_lib if os.environ["PHARE_LOG"] != "NONE" and cpp_lib().mpi_rank() == 0: from pathlib import Path Path(".log").mkdir(exist_ok=True)
def run(self): from pyphare.cpp import cpp_lib self._check_init() perf = [] end_time = self.cpp_sim.endTime() t = 0. while t < end_time: tick = timem.time() self.advance() tock = timem.time() ticktock = tock - tick perf.append(ticktock) t = self.cpp_sim.currentTime() if cpp_lib().mpi_rank() == 0: print("t = {:8.5f} - {:6.5f}sec - total {:7.4}sec".format( t, ticktock, np.sum(perf))) print("mean advance time = {}".format(np.mean(perf))) print("total advance time = {}".format(np.sum(perf))) return self.reset()
def _throw(self, e): import sys from pyphare.cpp import cpp_lib if cpp_lib().mpi_rank() == 0: print(e) sys.exit(1)
def startMPI(): if "samrai" not in life_cycles: from pyphare.cpp import cpp_lib life_cycles["samrai"] = cpp_lib().SamraiLifeCycle()
def make_cpp_simulator(dim, interp, nbrRefinedPart, hier): from pyphare.cpp import cpp_lib make_sim = f"make_simulator_{dim}_{interp}_{nbrRefinedPart}" return getattr(cpp_lib(), make_sim)(hier)
#!/usr/bin/env python3 from pyphare.cpp import cpp_lib cpp = cpp_lib() from tests.diagnostic import dump_all_diags from tests.simulator import populate_simulation from pyphare.pharein import ElectronModel from pyphare.pharein import ElectromagDiagnostics, FluidDiagnostics, ParticleDiagnostics from pyphare.simulator.simulator import Simulator, startMPI from pyphare.pharesee.hierarchy import hierarchy_from, h5_filename_from, h5_time_grp_key import pyphare.pharein as ph import unittest import os import h5py import numpy as np from ddt import ddt, data from pyphare.core.box import Box, Box1D from tests.simulator.config import project_root def setup_model(ppc): def density(x): return 1. def by(x): return 0. def bz(x): return 0.
import numpy as np from pyphare.cpp import cpp_lib # must be first cpp_lib("pybindlibs.cpp_sim_2_1_4") import pyphare.pharein as ph seed = 133333333337 cells, dl = 100, .2 patch_sizes = [50,100] diag_outputs="tools/bench/real/harris/outputs" def density(x, y): L = ph.global_vars.sim.simulation_domain()[1] return 0.2 + 1./np.cosh((y-L*0.3)/0.5)**2 + 1./np.cosh((y-L*0.7)/0.5)**2 def by(x, y): sim = ph.global_vars.sim Lx = sim.simulation_domain()[0] Ly = sim.simulation_domain()[1] w1, w2 = 0.2, 1.0 x0 = (x - 0.5 * Lx) y1 = (y - 0.3 * Ly) y2 = (y - 0.7 * Ly) w3 = np.exp(-(x0*x0 + y1*y1) / (w2*w2)) w4 = np.exp(-(x0*x0 + y2*y2) / (w2*w2)) w5 = 2.0*w1/w2 return (w5 * x0 * w3) + ( -w5 * x0 * w4) def S(y, y0, l): return 0.5*(1. + np.tanh((y-y0)/l)) def bx(x, y):
def __call__(self, *xyz): from pyphare.cpp import cpp_lib # convert numpy array to C++ SubSpan # couples vector init functions to C++ return cpp_lib().makePyArrayWrapper(super().__call__(*xyz))
def try_cpp_dep_vers(): try: from pyphare.cpp import cpp_lib return cpp_lib().phare_deps() except ImportError: return {}