示例#1
0
def withTagging(**kwargs):

    Simulation(smallest_patch_size=20,
               largest_patch_size=20,
               time_step_nbr=2000,
               final_time=20.,
               boundary_types="periodic",
               cells=200,
               dl=1.0,
               refinement="tagging",
               max_nbr_levels=3,
               diag_options={
                   "format": "phareh5",
                   "options": {
                       "dir": kwargs["diagdir"],
                       "mode": "overwrite"
                   }
               })

    MaxwellianFluidModel(bx=bx,
                         by=by,
                         bz=bz,
                         protons={
                             "charge": 1,
                             "density": density,
                             **vvv
                         })

    ElectronModel(closure="isothermal", Te=0.12)

    sim = ph.global_vars.sim

    timestamps = all_timestamps(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,
        )
示例#2
0
def config():

    # most unstable mode at k=0.19, that is lambda = 33
    # hence the length of the box is 33, and the fourier mode will be 1

    Simulation(
        smallest_patch_size=20,
        largest_patch_size=60,
        final_time=50,
        time_step=0.0005,
        boundary_types="periodic",
        cells=165,
        dl=0.2,
        hyper_resistivity = 0.01,
        refinement_boxes={"L0": {"B0": [( 50, ), (110, )]},
                          "L1": {"B0": [(140, ), (180, )]} },
        diag_options={"format": "phareh5",
                      "options": {"dir": "ion_ion_beam1d", "mode": "overwrite"}}
    )

    def densityMain(x):
        return 1.

    def densityBeam(x):
        return .01

    def bx(x):
        return 1.

    def by(x):
        return 0.

    def bz(x):
        return 0.

    def vB(x):
        return 5.

    def v0(x):
        return 0.

    def vth(x):
        return np.sqrt(0.1)


    vMain = {
        "vbulkx": v0, "vbulky": v0, "vbulkz": v0,
        "vthx": vth, "vthy": vth, "vthz": vth
    }


    vBulk = {
        "vbulkx": vB, "vbulky": v0, "vbulkz": v0,
        "vthx": vth, "vthy": vth, "vthz": vth
    }


    MaxwellianFluidModel(
        bx=bx, by=by, bz=bz,
        main={"charge": 1, "density": densityMain, **vMain},
        beam={"charge": 1, "density": densityBeam, **vBulk}
    )

    ElectronModel(closure="isothermal", Te=0.0)

    sim = ph.global_vars.sim

    timestamps = np.arange(0, sim.final_time, 1.)

    for quantity in ["B"]:
        ElectromagDiagnostics(
            quantity=quantity,
            write_timestamps=timestamps,
            compute_timestamps=timestamps,
        )
示例#3
0

vvv = {
    "vbulkx": vx,
    "vbulky": vy,
    "vbulkz": vz,
    "vthx": vthx,
    "vthy": vthy,
    "vthz": vthz
}

MaxwellianFluidModel(bx=bx,
                     by=by,
                     bz=bz,
                     protons={
                         "charge": 1,
                         "density": density,
                         **vvv, "init": {
                             "seed": 1337
                         }
                     })

ElectronModel(closure="isothermal", Te=0.12)

sim = ph.global_vars.sim

timestamps = np.arange(0, sim.final_time + sim.time_step, 10 * sim.time_step)

for quantity in ["E", "B"]:
    ph.ElectromagDiagnostics(
        quantity=quantity,
        write_timestamps=timestamps,
示例#4
0
def config():
    """ Configure the simulation

    This function defines the Simulation object,
    user initialization model and diagnostics.
    """
    Simulation(
        smallest_patch_size=20,
        largest_patch_size=20,
        time_step_nbr=
        6000,  # number of time steps (not specified if time_step and final_time provided)
        final_time=
        30,  # simulation final time (not specified if time_step and time_step_nbr provided)
        boundary_types=
        "periodic",  # boundary condition, string or tuple, length == len(cell) == len(dl)
        cells=2500,  # integer or tuple length == dimension
        dl=0.2,  # mesh size of the root level, float or tuple
        #max_nbr_levels=1,          # (default=1) max nbr of levels in the AMR hierarchy
        nesting_buffer=0,
        refinement_boxes={"L0": {
            "B0": [(125, ), (750, )]
        }},
        diag_options={
            "format": "phareh5",
            "options": {
                "dir": "shock_20dx_dx02_refined",
                "mode": "overwrite"
            }
        })

    def density(x):
        from pyphare.pharein.global_vars import sim
        L = sim.simulation_domain()[0]
        v1 = 1
        v2 = 1.
        return v1 + (v2 - v1) * (S(x, L * 0.2, 1) - S(x, L * 0.8, 1))

    def S(x, x0, l):
        return 0.5 * (1 + np.tanh((x - x0) / l))

    def bx(x):
        return 0.

    def by(x):
        from pyphare.pharein.global_vars import sim
        L = sim.simulation_domain()[0]
        v1 = 0.125
        v2 = 4.0
        return v1 + (v2 - v1) * (S(x, L * 0.2, 1) - S(x, L * 0.8, 1))

    def bz(x):
        return 0.

    def T(x):
        return 0.1

    def vx(x):
        from pyphare.pharein.global_vars import sim
        L = sim.simulation_domain()[0]
        v1 = 0.
        v2 = 0.
        return v1 + (v2 - v1) * (S(x, L * 0.25, 1) - S(x, L * 0.75, 1))

    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)

    vvv = {
        "vbulkx": vx,
        "vbulky": vy,
        "vbulkz": vz,
        "vthx": vthx,
        "vthy": vthy,
        "vthz": vthz
    }

    MaxwellianFluidModel(bx=bx,
                         by=by,
                         bz=bz,
                         protons={
                             "charge": 1,
                             "density": density,
                             **vvv
                         })

    ElectronModel(closure="isothermal", Te=0.12)

    sim = ph.global_vars.sim

    timestamps = np.arange(0, sim.final_time + sim.time_step, 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,
        )
示例#5
0
文件: td1d.py 项目: rochSmets/PHARE
def config():
    """ Configure the simulation

    This function defines the Simulation object,
    user initialization model and diagnostics.
    """
    Simulation(
        smallest_patch_size=20,
        largest_patch_size=20,
        time_step_nbr=
        2000,  # number of time steps (not specified if time_step and final_time provided)
        final_time=
        20.,  # simulation final time (not specified if time_step and time_step_nbr provided)
        boundary_types=
        "periodic",  # boundary condition, string or tuple, length == len(cell) == len(dl)
        cells=500,  # integer or tuple length == dimension
        dl=1.,  # mesh size of the root level, float or tuple
        refinement_boxes={
            "L0": {
                "B0": [(80, ), (180, )]
            },
            "L1": {
                "B0": [(200, ), (300, )]
            }
        },
        diag_options={
            "format": "phareh5",
            "options": {
                "dir": "td_noflow",
                "mode": "overwrite"
            }
        })

    def density(x):
        return 1.

    def S(x, x0, l):
        return 0.5 * (1 + np.tanh((x - x0) / l))

    def bx(x):
        return 0.

    def by(x):
        from pyphare.pharein.global_vars import sim
        L = 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)

    vvv = {
        "vbulkx": vx,
        "vbulky": vy,
        "vbulkz": vz,
        "vthx": vthx,
        "vthy": vthy,
        "vthz": vthz
    }

    MaxwellianFluidModel(bx=bx,
                         by=by,
                         bz=bz,
                         protons={
                             "charge": 1,
                             "density": density,
                             **vvv
                         })

    ElectronModel(closure="isothermal", Te=0.12)

    sim = ph.global_vars.sim

    dt_dump = 0.1
    n_dump = int(sim.final_time / dt_dump) + 1
    timestamps = np.linspace(0, sim.final_time, n_dump)

    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,
        )
示例#6
0
def config():
    """ Configure the simulation

    This function defines the Simulation object,
    user initialization model and diagnostics.
    """
    Simulation(
        smallest_patch_size=10,
        largest_patch_size=20,
        time_step_nbr=2000,        # number of time steps (not specified if time_step and final_time provided)
        final_time=20,             # simulation final time (not specified if time_step and time_step_nbr provided)
        boundary_types="periodic", # boundary condition, string or tuple, length == len(cell) == len(dl)
        cells=400,                # integer or tuple length == dimension
        dl=0.5,                  # mesh size of the root level, float or tuple
        max_nbr_levels=3,          # (default=1) max nbr of levels in the AMR hierarchy
        nesting_buffer=2,
        refinement = "tagging",
        diag_options={"format": "phareh5", "options": {"dir": "refine_dx05_lvl3","mode":"overwrite"}}
    )


    def density(x):
        return 1.


    def S(x,x0,l):
        return 0.5*(1+np.tanh((x-x0)/l))


    def bx(x):
        return 0.


    def by(x):
        from pyphare.pharein.global_vars import sim
        L = 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 1.


    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)


    vvv = {
        "vbulkx": vx, "vbulky": vy, "vbulkz": vz,
        "vthx": vthx, "vthy": vthy, "vthz": vthz
    }

    MaxwellianFluidModel(
        bx=bx, by=by, bz=bz,
        protons={"charge": 1, "density": density, **vvv}
    )

    ElectronModel(closure="isothermal", Te=0.12)



    timestamps = all_timestamps(gv.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,
            )
示例#7
0
def prescribedModes():

    # in this configuration there user prescribed
    # wavelength, at which more energy is thus expected
    # than in modes naturally present in the simulation noise

    Simulation(
        smallest_patch_size=20,
        largest_patch_size=20,

        # the following time step number
        # and final time mean that the
        # smallest frequency will be 2/100
        # and the largest 2/dt  = 2e3
        time_step_nbr=100000,
        final_time=100.,

        boundary_types="periodic",

        # smallest wavelength will be 2*0.2=0.4
        # and largest 50
        cells=500,
        dl=0.2,
        diag_options={"format": "phareh5", "options": {"dir": "dispersion",
                                                       "mode":"overwrite"}}
    )

    def density(x):
        return 1.


    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):
        return 0.


    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


    def vthy(x):
        return 0.01


    def vthz(x):
        return 0.01


    vvv = {
        "vbulkx": vx, "vbulky": vy, "vbulkz": vz,
        "vthx": vthx, "vthy": vthy, "vthz": vthz
    }

    MaxwellianFluidModel(
        bx=bx, by=by, bz=bz,
        protons={"charge": 1, "density": density, **vvv}
    )

    ElectronModel(closure="isothermal", Te=0.)



    sim = ph.global_vars.sim

    timestamps = np.arange(0, sim.final_time +sim.time_step, 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,
            )
示例#8
0
def uniform(vth, dl, cells, nbr_steps):

    Simulation(
        smallest_patch_size=20,
        largest_patch_size=20,
        time_step_nbr=nbr_steps,
        final_time=50.,
        boundary_types="periodic",
        cells=cells,
        dl=dl,
        diag_options={"format": "phareh5",
                      "options": {"dir": "vth{}dx{}".format(vth,dl),
                                  "mode":"overwrite"}}
    )

    def density(x):
        return 1.

    def by(x):
        return 0.

    def bz(x):
        return 0.

    def bx(x):
        return 1.

    def vx(x):
        return 0.

    def vy(x):
        return 0.

    def vz(x):
        return 0.

    def vthx(x):
        return vth

    def vthy(x):
        return vth

    def vthz(x):
        return vth


    vvv = {
        "vbulkx": vx, "vbulky": vy, "vbulkz": vz,
        "vthx": vthx, "vthy": vthy, "vthz": vthz
    }

    MaxwellianFluidModel(
        bx=bx, by=by, bz=bz,
        protons={"charge": 1, "density": density, **vvv}
    )

    ElectronModel(closure="isothermal", Te=0.)

    sim = ph.global_vars.sim

    timestamps = np.arange(0, sim.final_time, 50*sim.time_step)

    for quantity in ["B"]:
        ElectromagDiagnostics(
            quantity=quantity,
            write_timestamps=timestamps,
            compute_timestamps=timestamps,
        )

    for name in ["domain", "levelGhost", "patchGhost"]:
        ParticleDiagnostics(quantity=name,
                            compute_timestamps=timestamps,
                            write_timestamps=timestamps,
                            population_name="protons")
示例#9
0
def config_uni(**kwargs):
    """ Configure the simulation

    This function defines the Simulation object,
    user initialization model and diagnostics.
    """
    Simulation(
        smallest_patch_size=20,
        largest_patch_size=20,
        time_step_nbr=2000,        # number of time steps (not specified if time_step and final_time provided)
        final_time=20.,             # simulation final time (not specified if time_step and time_step_nbr provided)
        boundary_types="periodic", # boundary condition, string or tuple, length == len(cell) == len(dl)
        cells=500,                # integer or tuple length == dimension
        dl=1.0,                  # mesh size of the root level, float or tuple
        refinement_boxes={"L0": {"B0": [(100, ), (200, )]},
                          "L1":{"B0":[(300,),(350,)]}},
        diag_options={"format": "phareh5", "options": {"dir": kwargs["diagdir"],"mode":"overwrite"}}
    )


    def density(x):
        return 1.

    def bx(x):
        return 0.

    def by(x):
        return 1.

    def bz(x):
        return 0.5


    def vx(x):
        return kwargs["vx"]

    def vy(x):
        return 0.

    def vz(x):
        return 0.


    def vthx(x):
        return 0.1


    def vthy(x):
        return 0.1


    def vthz(x):
        return 0.1


    vvv = {
        "vbulkx": vx, "vbulky": vy, "vbulkz": vz,
        "vthx": vthx, "vthy": vthy, "vthz": vthz
    }

    MaxwellianFluidModel(
        bx=bx, by=by, bz=bz,
        protons={"charge": 1, "density": density, **vvv}
    )

    ElectronModel(closure="isothermal", Te=0.12)



    timestamps = all_timestamps(gv.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,
            )
示例#10
0
    def getHierarchy(self,
                     interp_order,
                     refinement_boxes,
                     qty,
                     diag_outputs,
                     nbr_part_per_cell=100,
                     density=_density,
                     extra_diag_options={},
                     beam=False,
                     time_step_nbr=1,
                     smallest_patch_size=None,
                     largest_patch_size=10,
                     cells=120,
                     dl=0.1,
                     ndim=1):
        diag_outputs = f"phare_outputs/init/{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)

        extra_diag_options["mode"] = "overwrite"
        extra_diag_options["dir"] = diag_outputs
        self.register_diag_dir_for_cleanup(diag_outputs)
        Simulation(
            smallest_patch_size=smallest_patch_size,
            largest_patch_size=largest_patch_size,
            time_step_nbr=time_step_nbr,
            final_time=30.,
            boundary_types=["periodic"] * ndim,
            cells=[cells] * ndim,
            dl=[dl] * ndim,
            interp_order=interp_order,
            refinement_boxes=refinement_boxes,
            diag_options={
                "format": "phareh5",
                "options": extra_diag_options
            },
            strict=True,
        )

        def beam_density(*xyz):
            return np.zeros_like(xyz[0]) + 0.3

        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.sin(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.sin(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)

        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(time_step_nbr),
                                  compute_timestamps=np.zeros(time_step_nbr))

        for quantity in ["density", "bulkVelocity"]:
            FluidDiagnostics(quantity=quantity,
                             write_timestamps=np.zeros(time_step_nbr),
                             compute_timestamps=np.zeros(time_step_nbr))

        poplist = ["protons", "beam"] if beam else ["protons"]
        for pop in poplist:
            for quantity in ["density", "flux"]:
                FluidDiagnostics(quantity=quantity,
                                 write_timestamps=np.zeros(time_step_nbr),
                                 compute_timestamps=np.zeros(time_step_nbr),
                                 population_name=pop)

            for quantity in ['domain', 'levelGhost', 'patchGhost']:
                ParticleDiagnostics(quantity=quantity,
                                    compute_timestamps=np.zeros(time_step_nbr),
                                    write_timestamps=np.zeros(time_step_nbr),
                                    population_name=pop)

        Simulator(global_vars.sim).initialize().reset()

        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)
            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
示例#11
0
    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,
                     block_merging_particles=False):

        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)

        extra_diag_options["mode"] = "overwrite"
        extra_diag_options["dir"] = diag_outputs
        self.register_diag_dir_for_cleanup(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.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 not block_merging_particles and 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
示例#12
0
def setup(**kwargs):
    from pyphare.pharein import Simulation, MaxwellianFluidModel
    from pyphare.pharein import ElectronModel, ElectromagDiagnostics, FluidDiagnostics
    import matplotlib as mpl

    mpl.use("Agg")

    def getFn(key):
        return kwargs.get(key, globals()["_" + key])

    density = getFn("density")
    bx, by, bz = getFn("bx"), getFn("by"), getFn("bz")
    vx, vy, vz = getFn("vx"), getFn("vy"), getFn("vz")
    vthx, vthy, vthz = getFn("vthx"), getFn("vthy"), getFn("vthz")

    ndim = kwargs.get("ndim", 1)
    interp = kwargs.get("ndim", 1)
    smallest_patch_size = kwargs.get("smallest_patch_size", 20)
    largest_patch_size = kwargs.get("largest_patch_size", 20)
    time_step_nbr = kwargs.get("time_step_nbr", 100)
    final_time = kwargs.get("final_time", 0.1)
    cells = [kwargs.get("cells", 100)] * ndim
    dl = [kwargs.get("dl", 0.2)] * ndim
    Te = kwargs.get("Te", 0.12)
    charge = kwargs.get("charge", 1)
    ppc = kwargs.get("ppc", 10)
    boundary_types = [kwargs.get("boundary_types", "periodic")] * ndim
    diag_dir = kwargs.get("diag_dir", ".")

    Simulation(
        interp_order=interp,
        smallest_patch_size=smallest_patch_size,
        largest_patch_size=largest_patch_size,
        time_step_nbr=time_step_nbr,
        final_time=final_time,
        boundary_types=boundary_types,
        cells=cells,
        dl=dl,
        diag_options={
            "format": "phareh5",
            "options": {
                "dir": diag_dir,
                "mode": "overwrite"
            },
        },
    )
    MaxwellianFluidModel(
        bx=bx,
        by=by,
        bz=bz,
        protons={
            "charge": charge,
            "density": density,
            "nbr_part_per_cell": ppc,
            **{
                "vbulkx": vx,
                "vbulky": vy,
                "vbulkz": vz,
                "vthx": vthx,
                "vthy": vthy,
                "vthz": vthz,
            },
        },
    )
    ElectronModel(closure="isothermal", Te=Te)
示例#13
0
def fromNoise():

    # in this configuration there are no prescribed waves
    # and only eigen modes existing in the simulation noise
    # will be visible

    Simulation(
        smallest_patch_size=20,
        largest_patch_size=20,

        # the following time step number
        # and final time mean that the
        # smallest frequency will be 2/100
        # and the largest 2/dt  = 2e3
        time_step_nbr=100000,
        final_time=100.,

        boundary_types="periodic",

        # smallest wavelength will be 2*0.2=0.4
        # and largest 50
        cells=500,
        dl=0.2,
        diag_options={"format": "phareh5",
                      "options": {"dir": "dispersion",
                                  "mode":"overwrite"}}
    )

    def density(x):
        return 1.


    def by(x):
        return 0.


    def bz(x):
        return 0.


    def bx(x):
        return 1.


    def vx(x):
        return 0.


    def vy(x):
        return 0.

    def vz(x):
        return 0.


    def vthx(x):
        return 0.01


    def vthy(x):
        return 0.01


    def vthz(x):
        return 0.01


    vvv = {
        "vbulkx": vx, "vbulky": vy, "vbulkz": vz,
        "vthx": vthx, "vthy": vthy, "vthz": vthz
    }

    MaxwellianFluidModel(
        bx=bx, by=by, bz=bz,
        protons={"charge": 1, "density": density, **vvv}
    )

    ElectronModel(closure="isothermal", Te=0.)


    sim = ph.global_vars.sim

    timestamps = np.arange(0, sim.final_time +sim.time_step, sim.time_step)

    for quantity in ["E", "B"]:
        ElectromagDiagnostics(
            quantity=quantity,
            write_timestamps=timestamps,
            compute_timestamps=timestamps,
        )
示例#14
0
def config():

    # configure the simulation

    Simulation(
        smallest_patch_size=50,
        largest_patch_size=50,
        time_step_nbr=
        100000,  # number of time steps (not specified if time_step and final_time provided)
        final_time=
        1000,  # simulation final time (not specified if time_step and time_step_nbr provided)
        boundary_types=
        "periodic",  # boundary condition, string or tuple, length == len(cell) == len(dl)
        cells=1000,  # integer or tuple length == dimension
        dl=1,  # mesh size of the root level, float or tuple
        hyper_resistivity=0.001,
        refinement_boxes={"L0": {
            "B0": [(450, ), (550, )]
        }},
        diag_options={
            "format": "phareh5",
            "options": {
                "dir": ".",
                "mode": "overwrite"
            }
        })

    def density(x):
        return 1.

    def by(x):
        from pyphare.pharein.global_vars import sim
        L = sim.simulation_domain()
        return 0.01 * np.cos(2 * np.pi * x / L[0])

    def bz(x):
        from pyphare.pharein.global_vars import sim
        L = sim.simulation_domain()
        return 0.01 * np.sin(2 * np.pi * x / L[0])

    def bx(x):
        return 1.

    def vx(x):
        return 0.

    def vy(x):
        from pyphare.pharein.global_vars import sim
        L = sim.simulation_domain()
        return 0.01 * np.cos(2 * np.pi * x / L[0])

    def vz(x):
        from pyphare.pharein.global_vars import sim
        L = sim.simulation_domain()
        return 0.01 * np.sin(2 * np.pi * x / L[0])

    def vthx(x):
        return 0.01

    def vthy(x):
        return 0.01

    def vthz(x):
        return 0.01

    vvv = {
        "vbulkx": vx,
        "vbulky": vy,
        "vbulkz": vz,
        "vthx": vthx,
        "vthy": vthy,
        "vthz": vthz
    }

    MaxwellianFluidModel(bx=bx,
                         by=by,
                         bz=bz,
                         protons={
                             "charge": 1,
                             "density": density,
                             **vvv
                         })

    ElectronModel(closure="isothermal", Te=0.0)

    timestamps = all_timestamps(gv.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,
        )
示例#15
0
def config(diag_outputs, model_init={}, refinement_boxes=None):
    ph.global_vars.sim = None

    Simulation(
        smallest_patch_size=10,
        largest_patch_size=20,
        time_step_nbr= 1,
        final_time= 0.001,
        #boundary_types="periodic",
        cells=(50, 100),
        dl=(0.40, 0.40),
        #refinement="tagging",
        #max_nbr_levels = 3,
        refinement_boxes=refinement_boxes,
        hyper_resistivity=0.0050,
        resistivity=0.001,
        diag_options={"format": "phareh5",
                      "options": {"dir": diag_outputs,
                                  "mode":"overwrite", "fine_dump_lvl_max": 10}}
    )
    def density(x, y):
        from pyphare.pharein.global_vars import sim
        Lx = sim.simulation_domain()[0]
        return 1.

    def bx(x, y):
        return 0.1

    def by(x, y):
        from pyphare.pharein.global_vars import sim
        Lx = sim.simulation_domain()[0]
        Ly = sim.simulation_domain()[1]
        return 0.2

    def bz(x, y):
        return 1.

    def T(x, y):
        return 1.

    def vx(x, y):
        return 1.0

    def vy(x, y):
        return 0.

    def vz(x, y):
        return 0.

    def vthx(x, y):
        return np.sqrt(T(x, y))

    def vthy(x, y):
        return np.sqrt(T(x, y))

    def vthz(x, y):
        return np.sqrt(T(x, y))

    vvv = {
        "vbulkx": vx, "vbulky": vy, "vbulkz": vz,
        "vthx": vthx, "vthy": vthy, "vthz": vthz,
        "nbr_part_per_cell":100,
        "init": model_init,
    }

    MaxwellianFluidModel(
        bx=bx, by=by, bz=bz,
        protons={"charge": 1, "density": density,  **vvv}
    )

    ElectronModel(closure="isothermal", Te=0.0)
    sim = ph.global_vars.sim
    dt =  1*sim.time_step
    nt = sim.final_time/dt+1
    timestamps = dt * np.arange(nt)

    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,
            )

    return sim
示例#16
0
文件: job.py 项目: jeandet/PHARE
import numpy as np

Te = 0.12

def n(x):
    return 1.

def bx(x):
    xmax = getSimulation().simulation_domain()[0]
    return np.cos(2*np.pi/xmax * x)




MaxwellianFluidModel(bx=bx,
                     protons={"density":n},
                     background={})


ElectronModel(closure="isothermal",Te = Te)



ElectromagDiagnostics(
    diag_type="E",                  # available : ("E", "B")
    write_every=10,
    compute_every=5,
    start_teration=0,
    last_iteration=990,
    path = 'ElectromagDiagnostics1'   # where output files will be written, [default: name]
)
示例#17
0
def config():

    Simulation(
        smallest_patch_size=15,
        largest_patch_size=25,
        time_step_nbr=1000,
        time_step=0.001,
        # boundary_types="periodic",
        cells=(100, 100),
        dl=(0.2, 0.2),
        refinement_boxes={},
        hyper_resistivity=0.001,
        resistivity=0.001,
        diag_options={
            "format": "phareh5",
            "options": {
                "dir": diag_outputs,
                "mode": "overwrite"
            }
        },
        strict=True,
    )

    def density(x, y):
        from pyphare.pharein.global_vars import sim
        L = 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 S(y, y0, l):
        return 0.5 * (1. + np.tanh((y - y0) / l))

    def by(x, y):
        from pyphare.pharein.global_vars import sim
        Lx = sim.simulation_domain()[0]
        Ly = sim.simulation_domain()[1]
        w1 = 0.2
        w2 = 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 bx(x, y):
        from pyphare.pharein.global_vars import sim
        Lx = sim.simulation_domain()[0]
        Ly = sim.simulation_domain()[1]
        w1 = 0.2
        w2 = 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
        v1 = -1
        v2 = 1.
        return v1 + (v2 - v1) * (S(y, Ly * 0.3, 0.5) - S(y, Ly * 0.7, 0.5)) + (
            -w5 * y1 * w3) + (+w5 * y2 * w4)

    def bz(x, y):
        return 0.

    def b2(x, y):
        return bx(x, y)**2 + by(x, y)**2 + bz(x, y)**2

    def T(x, y):
        K = 1
        temp = 1. / density(x, y) * (K - b2(x, y) * 0.5)
        assert np.all(temp > 0)
        return temp

    def vx(x, y):
        return 0.

    def vy(x, y):
        return 0.

    def vz(x, y):
        return 0.

    def vthx(x, y):
        return np.sqrt(T(x, y))

    def vthy(x, y):
        return np.sqrt(T(x, y))

    def vthz(x, y):
        return np.sqrt(T(x, y))

    vvv = {
        "vbulkx": vx,
        "vbulky": vy,
        "vbulkz": vz,
        "vthx": vthx,
        "vthy": vthy,
        "vthz": vthz,
        "nbr_part_per_cell": 100
    }

    MaxwellianFluidModel(
        bx=bx,
        by=by,
        bz=bz,
        protons={
            "charge": 1,
            "density": density,
            **vvv, "init": {
                "seed": 12334
            }
        },
    )

    ElectronModel(closure="isothermal", Te=0.0)

    sim = ph.global_vars.sim
    dt = 10 * sim.time_step
    nt = sim.final_time / dt + 1
    timestamps = (dt * np.arange(nt))

    for quantity in ["E", "B"]:
        ElectromagDiagnostics(
            quantity=quantity,
            write_timestamps=timestamps,
            compute_timestamps=timestamps,
        )
示例#18
0
    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
示例#19
0
    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