Source code for veros.diagnostics.snapshot

import os
import copy

from veros import time, logger
from veros.diagnostics.base import VerosDiagnostic


DEFAULT_OUTPUT_VARS = [
    "dxt",
    "dxu",
    "dyt",
    "dyu",
    "zt",
    "zw",
    "dzt",
    "dzw",
    "ht",
    "hu",
    "hv",
    "beta",
    "area_t",
    "area_u",
    "area_v",
    "rho",
    "prho",
    "int_drhodT",
    "int_drhodS",
    "Nsqr",
    "Hd",
    "temp",
    "salt",
    "forc_temp_surface",
    "forc_salt_surface",
    "u",
    "v",
    "w",
    "p_hydro",
    "kappaM",
    "kappaH",
    "surface_taux",
    "surface_tauy",
    "forc_rho_surface",
    "psi",
    "isle",
    "psin",
    "xt",
    "xu",
    "yt",
    "yu",
    "temp_source",
    "salt_source",
    "u_source",
    "v_source",
    "tke",
    "forc_tke_surface",
    "eke",
    "E_iw",
    "forc_iw_surface",
    "forc_iw_bottom",
]


[docs]class Snapshot(VerosDiagnostic): """Writes snapshots of the current solution. Also reads and writes the main restart data required for restarting a Veros simulation. """ output_path = "{identifier}.snapshot.nc" """File to write to. May contain format strings that are replaced with Veros attributes.""" name = "snapshot" #: output_frequency = None #: Frequency (in seconds) in which output is written. def __init__(self, state): self.output_variables = [] for var in DEFAULT_OUTPUT_VARS: active = state.var_meta[var].active if callable(active): active = active(state.settings) if active: self.output_variables.append(var) def initialize(self, state): vs = state.variables self.var_meta = {var: copy.copy(state.var_meta[var]) for var in self.output_variables} for var in self.var_meta.values(): var.write_to_restart = False self.variables = vs self.initialize_output(state) def diagnose(self, state): pass def output(self, state): vs = state.variables time_length, time_unit = time.format_time(vs.time) logger.info(f" Writing snapshot at {time_length:.2f} {time_unit}") if not os.path.isfile(self.get_output_file_name(state)): self.initialize_output(state) self.write_output(state)