Source code for roger.diagnostics.snapshot

import os
import copy

from roger import time, logger
from roger.diagnostics.base import RogerDiagnostic


DEFAULT_OUTPUT_VARS = [
    "ta",
]


[docs]class Snapshot(RogerDiagnostic): """Writes snapshots of the current solution. Also reads and writes the main restart data required for restarting a Roger simulation. """ output_path = "{identifier}.snapshot.nc" """File to write to. May contain format strings that are replaced with Roger 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 reset(self): pass 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)