Пример #1
0
    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)
Пример #2
0
    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")
Пример #3
0
    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)
Пример #4
0
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)
Пример #5
0
    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)
Пример #6
0
    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()
Пример #7
0
 def _throw(self, e):
     import sys
     from pyphare.cpp import cpp_lib
     if cpp_lib().mpi_rank() == 0:
         print(e)
     sys.exit(1)
Пример #8
0
def startMPI():
    if "samrai" not in life_cycles:
        from pyphare.cpp import cpp_lib
        life_cycles["samrai"] = cpp_lib().SamraiLifeCycle()
Пример #9
0
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)
Пример #10
0
#!/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.
Пример #11
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):
Пример #12
0
 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))
Пример #13
0
def try_cpp_dep_vers():
    try:
        from pyphare.cpp import cpp_lib
        return cpp_lib().phare_deps()
    except ImportError:
        return {}