def _test_patch_ghost_on_refined_level_case(self, has_patch_ghost, **kwargs): import pyphare.pharein as ph from pybindlibs import cpp from pyphare.simulator.simulator import startMPI startMPI() out = "phare_outputs" test_id = self.ddt_test_id() for dim in [1]: for interp in [1, 2, 3]: b0 = [[10 for i in range(dim)], [19 for i in range(dim)]] refinement_boxes = {"L0": {"B0": b0}} local_out = f"{out}/dim{dim}_interp{interp}_mpi_n_{cpp.mpi_size()}_id{test_id}/{str(has_patch_ghost)}" kwargs["diag_outputs"] = local_out datahier = self.getHierarchy(interp, refinement_boxes, "particles_patch_ghost", **kwargs) self.assertTrue( any([ diagInfo.quantity.endswith("patchGhost") for diagInfo in ph.global_vars.sim.diagnostics ])) key = "protons_particles" self.assertTrue((1 in datahier.levels()) == has_patch_ghost)
def _test_patch_ghost_on_refined_level_case(self, dim, has_patch_ghost, **kwargs): import pyphare.pharein as ph from pyphare.simulator.simulator import startMPI startMPI() out = "phare_outputs" test_id = self.ddt_test_id() refinement_boxes = {"L0": [nDBox(dim, 10, 19)]} kwargs["interp_order"] = kwargs.get("interp_order", 1) local_out = f"{out}/dim{dim}_interp{kwargs['interp_order']}_mpi_n_{cpp.mpi_size()}_id{test_id}/{str(has_patch_ghost)}" kwargs["diag_outputs"] = local_out datahier = self.getHierarchy(refinement_boxes=refinement_boxes, qty="particles_patch_ghost", ndim=dim, **kwargs) self.assertTrue( any([ diagInfo.quantity.endswith("patchGhost") for diagInfo in ph.global_vars.sim.diagnostics ])) self.assertTrue((1 in datahier.levels()) == has_patch_ghost)
def main(): import random startMPI() rando = random.randint(0, 1e10) Simulator(config(L0_diags, {"seed": rando})).run().reset() refinement_boxes={"L0": {"B0": [( 7, 40), ( 20, 60)]}} sim = config(L0L1_diags, {"seed": rando}, refinement_boxes) Simulator(sim, post_advance=post_advance).run()
def main(): import random startMPI() rando = random.randint(0, 1e10) refinement_boxes = {"L0": {"B0": [(10, 10), (14, 14)]}} Simulator(config(L0_diags, {"seed": rando}), post_advance=post_advance_0).run().reset() sim = config(L0L1_diags, {"seed": rando}, refinement_boxes) Simulator(sim, post_advance=post_advance_1).run()
def getHierarchy(self, interp_order, refinement_boxes, qty, nbr_part_per_cell=100, diag_outputs="phare_outputs", density=lambda x: 0.3 + 1. / np.cosh((x - 6) / 4.)**2, beam=False, smallest_patch_size=10, largest_patch_size=10, cells=120, dl=0.1): from pyphare.pharein import global_vars global_vars.sim = None startMPI() Simulation(smallest_patch_size=smallest_patch_size, largest_patch_size=largest_patch_size, time_step_nbr=30000, final_time=30., boundary_types="periodic", cells=cells, dl=dl, interp_order=interp_order, refinement_boxes=refinement_boxes, diag_options={ "format": "phareh5", "options": { "dir": diag_outputs, "mode": "overwrite" } }) def beam_density(x): return np.zeros_like(x) + 0.3 def by(x): from pyphare.pharein.global_vars import sim L = sim.simulation_domain() return 0.1 * np.cos(2 * np.pi * x / L[0]) def bz(x): from pyphare.pharein.global_vars import sim L = sim.simulation_domain() return 0.1 * np.sin(2 * np.pi * x / L[0]) def bx(x): return 1. def vx(x): from pyphare.pharein.global_vars import sim L = sim.simulation_domain() return 0.1 * np.cos(2 * np.pi * x / L[0]) + 0.2 def vy(x): from pyphare.pharein.global_vars import sim L = sim.simulation_domain() return 0.1 * np.cos(2 * np.pi * x / L[0]) def vz(x): from pyphare.pharein.global_vars import sim L = sim.simulation_domain() return 0.1 * np.sin(2 * np.pi * x / L[0]) def vthx(x): return 0.01 + np.zeros_like(x) def vthy(x): return 0.01 + np.zeros_like(x) def vthz(x): return 0.01 + np.zeros_like(x) if beam: MaxwellianFluidModel(bx=bx, by=by, bz=bz, protons={ "charge": 1, "density": density, "vbulkx": vx, "vbulky": vy, "vbulkz": vz, "vthx": vthx, "vthy": vthy, "vthz": vthz, "nbr_part_per_cell": nbr_part_per_cell, "init": { "seed": 1337 } }, beam={ "charge": 1, "density": beam_density, "vbulkx": vx, "vbulky": vy, "vbulkz": vz, "vthx": vthx, "vthy": vthy, "vthz": vthz, "nbr_part_per_cell": nbr_part_per_cell, "init": { "seed": 1337 } }) else: MaxwellianFluidModel(bx=bx, by=by, bz=bz, protons={ "charge": 1, "density": density, "vbulkx": vx, "vbulky": vy, "vbulkz": vz, "vthx": vthx, "vthy": vthy, "vthz": vthz, "nbr_part_per_cell": nbr_part_per_cell, "init": { "seed": 1337 } }) ElectronModel(closure="isothermal", Te=0.12) for quantity in ["E", "B"]: ElectromagDiagnostics(quantity=quantity, write_timestamps=np.zeros(1), compute_timestamps=np.zeros(1)) for quantity in ["density", "bulkVelocity"]: FluidDiagnostics(quantity=quantity, write_timestamps=np.zeros(1), compute_timestamps=np.zeros(1)) poplist = ["protons", "beam"] if beam else ["protons"] for pop in poplist: for quantity in ["density", "flux"]: FluidDiagnostics(quantity=quantity, write_timestamps=np.zeros(1), compute_timestamps=np.zeros(1), population_name=pop) for quantity in ['domain', 'levelGhost', 'patchGhost']: ParticleDiagnostics(quantity=quantity, compute_timestamps=np.zeros(1), write_timestamps=np.zeros(1), population_name=pop) simulator = Simulator(global_vars.sim) simulator.initialize() if qty == "b": b_hier = hierarchy_from(h5_filename=diag_outputs + "/EM_B.h5") return b_hier is_particle_type = qty == "particles" or qty == "particles_patch_ghost" if is_particle_type: particle_hier = None if qty == "particles": particle_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_pop_protons_domain.h5") particle_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_pop_protons_levelGhost.h5", hier=particle_hier) if is_particle_type: particle_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_pop_protons_patchGhost.h5", hier=particle_hier) if qty == "particles": merge_particles(particle_hier) if is_particle_type: return particle_hier if qty == "moments": mom_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_density.h5") mom_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_bulkVelocity.h5", hier=mom_hier) mom_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_pop_protons_density.h5", hier=mom_hier) mom_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_pop_protons_flux.h5", hier=mom_hier) if beam: mom_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_pop_beam_density.h5", hier=mom_hier) mom_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_pop_beam_flux.h5", hier=mom_hier) return mom_hier
def setUp(self): from pyphare.simulator.simulator import startMPI startMPI()
from pyphare.pharein import Simulation from pyphare.pharein import MaxwellianFluidModel from pyphare.pharein import ElectromagDiagnostics, FluidDiagnostics, ParticleDiagnostics from pyphare.pharein import ElectronModel from pyphare.simulator.simulator import Simulator, startMPI from pyphare.pharein import global_vars as gv import numpy as np import matplotlib.pyplot as plt import matplotlib as mpl mpl.use('Agg') from pyphare.cpp import cpp_lib cpp = cpp_lib() startMPI() if cpp.mpi_rank() == 0: # log per mpi proc import os from pathlib import Path os.environ["PHARE_LOG"] = "RANK_FILES" Path(".log").mkdir(exist_ok=True) diag_outputs = "phare_outputs/test/harris/2d" from datetime import datetime def config(): Simulation( smallest_patch_size=15,
def __init__(self, *args, **kwargs): super(DiagnosticsTest, self).__init__(*args, **kwargs) startMPI() self.simulator = None
def getHierarchy(self, interp_order, refinement_boxes, qty, diag_outputs, nbr_part_per_cell=100, density=_density, smallest_patch_size=None, largest_patch_size=20, cells=120, time_step=0.001, model_init={}, dl=0.2, extra_diag_options={}, time_step_nbr=1, timestamps=None, ndim=1): diag_outputs = f"phare_outputs/advance/{diag_outputs}" from pyphare.pharein import global_vars global_vars.sim = None if smallest_patch_size is None: from pyphare.pharein.simulation import check_patch_size _, smallest_patch_size = check_patch_size( ndim, interp_order=interp_order, cells=cells) startMPI() extra_diag_options["mode"] = "overwrite" extra_diag_options["dir"] = diag_outputs Simulation( smallest_patch_size=smallest_patch_size, largest_patch_size=largest_patch_size, time_step_nbr=time_step_nbr, time_step=time_step, boundary_types=["periodic"] * ndim, cells=np_array_ify(cells, ndim), dl=np_array_ify(dl, ndim), interp_order=interp_order, refinement_boxes=refinement_boxes, diag_options={ "format": "phareh5", "options": extra_diag_options }, strict=True, ) def S(x, x0, l): return 0.5 * (1 + np.tanh((x - x0) / l)) def bx(*xyz): return 1. def by(*xyz): from pyphare.pharein.global_vars import sim L = sim.simulation_domain() _ = lambda i: 0.1 * np.cos(2 * np.pi * xyz[i] / L[i]) return np.asarray([_(i) for i, v in enumerate(xyz)]).prod(axis=0) def bz(*xyz): from pyphare.pharein.global_vars import sim L = sim.simulation_domain() _ = lambda i: 0.1 * np.cos(2 * np.pi * xyz[i] / L[i]) return np.asarray([_(i) for i, v in enumerate(xyz)]).prod(axis=0) def vx(*xyz): from pyphare.pharein.global_vars import sim L = sim.simulation_domain() _ = lambda i: 0.1 * np.cos(2 * np.pi * xyz[i] / L[i]) return np.asarray([_(i) for i, v in enumerate(xyz)]).prod(axis=0) def vy(*xyz): from pyphare.pharein.global_vars import sim L = sim.simulation_domain() _ = lambda i: 0.1 * np.cos(2 * np.pi * xyz[i] / L[i]) return np.asarray([_(i) for i, v in enumerate(xyz)]).prod(axis=0) def vz(*xyz): from pyphare.pharein.global_vars import sim L = sim.simulation_domain() _ = lambda i: 0.1 * np.cos(2 * np.pi * xyz[i] / L[i]) return np.asarray([_(i) for i, v in enumerate(xyz)]).prod(axis=0) def vth(*xyz): return 0.01 + np.zeros_like(xyz[0]) def vthx(*xyz): return vth(*xyz) def vthy(*xyz): return vth(*xyz) def vthz(*xyz): return vth(*xyz) MaxwellianFluidModel(bx=bx, by=by, bz=bz, protons={ "charge": 1, "density": density, "vbulkx": vx, "vbulky": vy, "vbulkz": vz, "vthx": vthx, "vthy": vthy, "vthz": vthz, "nbr_part_per_cell": nbr_part_per_cell, "init": model_init, }) ElectronModel(closure="isothermal", Te=0) #0.12) if timestamps is None: timestamps = all_timestamps(global_vars.sim) for quantity in ["E", "B"]: ElectromagDiagnostics(quantity=quantity, write_timestamps=timestamps, compute_timestamps=timestamps) for quantity in ["density", "bulkVelocity"]: FluidDiagnostics(quantity=quantity, write_timestamps=timestamps, compute_timestamps=timestamps) poplist = ["protons"] for pop in poplist: for quantity in ["density", "flux"]: FluidDiagnostics(quantity=quantity, write_timestamps=timestamps, compute_timestamps=timestamps, population_name=pop) for quantity in ['domain', 'levelGhost', 'patchGhost']: ParticleDiagnostics(quantity=quantity, compute_timestamps=timestamps, write_timestamps=timestamps, population_name=pop) Simulator(global_vars.sim).run() eb_hier = None if qty in ["e", "eb", "fields"]: eb_hier = hierarchy_from(h5_filename=diag_outputs + "/EM_E.h5", hier=eb_hier) if qty in ["b", "eb", "fields"]: eb_hier = hierarchy_from(h5_filename=diag_outputs + "/EM_B.h5", hier=eb_hier) if qty in ["e", "b", "eb"]: return eb_hier is_particle_type = qty == "particles" or qty == "particles_patch_ghost" if is_particle_type: particle_hier = None if qty == "particles": particle_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_pop_protons_domain.h5") particle_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_pop_protons_levelGhost.h5", hier=particle_hier) if is_particle_type: particle_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_pop_protons_patchGhost.h5", hier=particle_hier) if qty == "particles": merge_particles(particle_hier) if is_particle_type: return particle_hier if qty == "moments" or qty == "fields": mom_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_density.h5", hier=eb_hier) mom_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_bulkVelocity.h5", hier=mom_hier) mom_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_pop_protons_density.h5", hier=mom_hier) mom_hier = hierarchy_from(h5_filename=diag_outputs + "/ions_pop_protons_flux.h5", hier=mom_hier) return mom_hier
def getHierarchy(self, interp_order, refinement_boxes, qty, nbr_part_per_cell=100, diag_outputs="phare_outputs", smallest_patch_size=5, largest_patch_size=20, cells=120, time_step=0.001, model_init={}, dl=0.1, extra_diag_options={}, time_step_nbr=1, timestamps=None): from pyphare.pharein import global_vars global_vars.sim = None startMPI() extra_diag_options["mode"] = "overwrite" extra_diag_options["dir"] = diag_outputs Simulation( smallest_patch_size=smallest_patch_size, largest_patch_size=largest_patch_size, time_step_nbr=time_step_nbr, time_step=time_step, boundary_types="periodic", cells=cells, dl=dl, interp_order=interp_order, refinement_boxes=refinement_boxes, diag_options={"format": "phareh5", "options": extra_diag_options} ) def density(x): return 1. def S(x,x0,l): return 0.5*(1+np.tanh((x-x0)/l)) def bx(x): return 1. def by(x): L = global_vars.sim.simulation_domain()[0] v1=-1 v2=1. return v1 + (v2-v1)*(S(x,L*0.25,1) -S(x, L*0.75, 1)) def bz(x): return 0.5 def b2(x): return bx(x)**2 + by(x)**2 + bz(x)**2 def T(x): K = 1 return 1/density(x)*(K - b2(x)*0.5) def vx(x): return 0. def vy(x): return 0. def vz(x): return 0. def vthx(x): return T(x) def vthy(x): return T(x) def vthz(x): return T(x) MaxwellianFluidModel(bx=bx, by=by, bz=bz, protons={"charge": 1, "density": density, "vbulkx": vx, "vbulky": vy, "vbulkz": vz, "vthx": vthx, "vthy": vthy, "vthz": vthz, "nbr_part_per_cell": nbr_part_per_cell, "init": model_init}) ElectronModel(closure="isothermal", Te=0.12) if timestamps is None: timestamps = np.arange(0, global_vars.sim.final_time + global_vars.sim.time_step, global_vars.sim.time_step) for quantity in ["E", "B"]: ElectromagDiagnostics( quantity=quantity, write_timestamps=timestamps, compute_timestamps=timestamps ) for quantity in ["density", "bulkVelocity"]: FluidDiagnostics( quantity=quantity, write_timestamps=timestamps, compute_timestamps=timestamps ) poplist = ["protons"] for pop in poplist: for quantity in ["density", "flux"]: FluidDiagnostics(quantity=quantity, write_timestamps=timestamps, compute_timestamps=timestamps, population_name=pop) for quantity in ['domain', 'levelGhost', 'patchGhost']: ParticleDiagnostics(quantity=quantity, compute_timestamps=timestamps, write_timestamps=timestamps, population_name=pop) Simulator(global_vars.sim).initialize().run() eb_hier = None if qty in ["e", "eb"]: eb_hier = hierarchy_from(h5_filename=diag_outputs+"/EM_E.h5", hier=eb_hier) if qty in ["b", "eb"]: eb_hier = hierarchy_from(h5_filename=diag_outputs+"/EM_B.h5", hier=eb_hier) if qty in ["e", "b", "eb"]: return eb_hier is_particle_type = qty == "particles" or qty == "particles_patch_ghost" if is_particle_type: particle_hier = None if qty == "particles": particle_hier = hierarchy_from(h5_filename=diag_outputs+"/ions_pop_protons_domain.h5") particle_hier = hierarchy_from(h5_filename=diag_outputs+"/ions_pop_protons_levelGhost.h5", hier=particle_hier) if is_particle_type: particle_hier = hierarchy_from(h5_filename=diag_outputs+"/ions_pop_protons_patchGhost.h5", hier=particle_hier) if qty == "particles": merge_particles(particle_hier) if is_particle_type: return particle_hier if qty == "moments": mom_hier = hierarchy_from(h5_filename=diag_outputs+"/ions_density.h5") mom_hier = hierarchy_from(h5_filename=diag_outputs+"/ions_bulkVelocity.h5", hier=mom_hier) mom_hier = hierarchy_from(h5_filename=diag_outputs+"/ions_pop_protons_density.h5", hier=mom_hier) mom_hier = hierarchy_from(h5_filename=diag_outputs+"/ions_pop_protons_flux.h5", hier=mom_hier) return mom_hier