def my_write_viz(step,
                  t,
                  dt,
                  state,
                  ts_field=None,
                  dv=None,
                  production_rates=None,
                  cfl=None):
     if dv is None:
         dv = eos.dependent_vars(state)
     if production_rates is None:
         production_rates = eos.get_production_rates(state)
     if ts_field is None:
         ts_field, cfl, dt = my_get_timestep(t=t, dt=dt, state=state)
     viz_fields = [("cv", state), ("dv", dv),
                   ("production_rates", production_rates),
                   ("dt" if constant_cfl else "cfl", ts_field)]
     write_visfile(discr,
                   viz_fields,
                   visualizer,
                   vizname=casename,
                   step=step,
                   t=t,
                   overwrite=True,
                   vis_timer=vis_timer)
Beispiel #2
0
 def my_write_viz(step, t, state, dv=None):
     if dv is None:
         dv = eos.dependent_vars(state)
     viz_fields = [("cv", state),
                   ("dv", dv)]
     from mirgecom.simutil import write_visfile
     write_visfile(discr, viz_fields, visualizer, vizname=casename,
                   step=step, t=t, overwrite=True, vis_timer=vis_timer)
Beispiel #3
0
 def my_write_viz(step, t, state, dv, exact=None, resid=None):
     if exact is None:
         exact = initializer(x_vec=nodes, eos=eos, time=t)
     if resid is None:
         resid = state - exact
     viz_fields = [("cv", state), ("dv", dv)]
     from mirgecom.simutil import write_visfile
     write_visfile(discr, viz_fields, visualizer, vizname=casename,
                   step=step, t=t, overwrite=True, vis_timer=vis_timer)
 def my_write_viz(step, t, dt, state, ts_field, dv, production_rates, cfl):
     viz_fields = [("cv", state), ("dv", dv),
                   ("production_rates", production_rates),
                   ("dt" if constant_cfl else "cfl", ts_field)]
     write_visfile(discr,
                   viz_fields,
                   visualizer,
                   vizname=casename,
                   step=step,
                   t=t,
                   overwrite=True,
                   vis_timer=vis_timer)
Beispiel #5
0
 def my_write_viz(step, t, state, dv=None, exact=None, resid=None):
     viz_fields = [("cv", state)]
     if dv is None:
         dv = eos.dependent_vars(state)
     if exact is None:
         exact = initializer(x_vec=nodes, eos=eos, time=t)
     if resid is None:
         resid = state - exact
     viz_fields = [("cv", state),
                   ("dv", dv),
                   ("exact_soln", exact),
                   ("residual", resid)]
     from mirgecom.simutil import write_visfile
     write_visfile(discr, viz_fields, visualizer, vizname=casename,
                   step=step, t=t, overwrite=True, vis_timer=vis_timer)
Beispiel #6
0
    def my_checkpoint(step, t, dt, state, force=False):
        do_health = force or check_step(step, nhealth) and step > 0
        do_viz = force or check_step(step, nviz)
        do_restart = force or check_step(step, nrestart)
        do_status = force or check_step(step, nstatus)

        if do_viz or do_health:
            dv = eos.dependent_vars(state)

        errors = False
        if do_health:
            health_message = ""
            if check_naninf_local(discr, "vol", dv.pressure):
                errors = True
                health_message += "Invalid pressure data found.\n"
            elif check_range_local(discr,
                                   "vol",
                                   dv.pressure,
                                   min_value=1,
                                   max_value=2.e6):
                errors = True
                health_message += "Pressure data failed health check.\n"

        errors = comm.allreduce(errors, MPI.LOR)
        if errors:
            if rank == 0:
                logger.info("Fluid solution failed health check.")
            if health_message:
                logger.info(f"{rank=}:  {health_message}")

        #if check_step(step, nrestart) and step != restart_step and not errors:
        if do_restart or errors:
            filename = restart_path + snapshot_pattern.format(
                step=step, rank=rank, casename=casename)
            restart_dictionary = {
                "local_mesh": local_mesh,
                "order": order,
                "state": state,
                "t": t,
                "step": step,
                "global_nelements": global_nelements,
                "num_parts": nparts
            }
            write_restart_file(actx, restart_dictionary, filename, comm)

        if do_status or do_viz or errors:
            local_cfl = get_inviscid_cfl(discr, eos=eos, dt=dt, cv=state)
            max_cfl = nodal_max(discr, "vol", local_cfl)
            log_cfl.set_quantity(max_cfl)

        #if ((check_step(step, nviz) and step != restart_step) or errors):
        if do_viz or errors:

            def loc_fn(t):
                return flame_start_loc + flame_speed * t

            #exact_soln =  PlanarDiscontinuity(dim=dim, disc_location=loc_fn,
            #sigma=0.0000001, nspecies=nspecies,
            #temperature_left=temp_ignition, temperature_right=temp_unburned,
            #pressure_left=pres_burned, pressure_right=pres_unburned,
            #velocity_left=vel_burned, velocity_right=vel_unburned,
            #species_mass_left=y_burned, species_mass_right=y_unburned)

            reaction_rates = eos.get_production_rates(cv=state)

            # conserved quantities
            viz_fields = [
                #("cv", state),
                ("CV_rho", state.mass),
                ("CV_rhoU", state.momentum[0]),
                ("CV_rhoV", state.momentum[1]),
                ("CV_rhoE", state.energy)
            ]
            # species mass fractions
            viz_fields.extend(
                ("Y_" + species_names[i], state.species_mass[i] / state.mass)
                for i in range(nspecies))
            # dependent variables
            viz_fields.extend([
                ("DV", eos.dependent_vars(state)),
                #("exact_soln", exact_soln),
                ("reaction_rates", reaction_rates),
                ("cfl", local_cfl)
            ])

            write_visfile(discr,
                          viz_fields,
                          visualizer,
                          vizname=viz_path + casename,
                          step=step,
                          t=t,
                          overwrite=True,
                          vis_timer=vis_timer)

        if errors:
            raise RuntimeError("Error detected by user checkpoint, exiting.")