Source code for fridom.nonhydro.modules.diagnostics
from fridom.framework.modules.module import Module, module_method
from fridom.framework.model_state import ModelState
[docs]
class Diagnostics(Module):
name = "Diagnostics"
[docs]
def __init__(self,
interval = 50,
energy_info = True,
cfl_info = True,
):
super().__init__()
self.interval = interval
self.energy_info = energy_info
self.cfl_info = cfl_info
return
[docs]
@module_method
def update(self, mz: ModelState) -> ModelState:
"""
Print diagnostic information.
"""
# check if it is time to print diagnostic information
if mz.clock.it % self.interval != 0:
return
# print diagnostic information
out = "Diagnostic at t = {:.2f}\n".format(mz.clock.time)
if self.energy_info:
out += "MKE = {:.2e}, ".format(mz.z.mean_ekin())
out += "MPE = {:.2e}, ".format(mz.z.mean_epot())
out += "MTE = {:.2e}\n".format(mz.z.mean_etot())
if self.cfl_info:
out += "hor. CFL = {:.2f}, ".format(mz.z.max_cfl_h())
out += "vert. CFL = {:.2f}".format(mz.z.max_cfl_v())
print(out)
return mz
def __repr__(self) -> str:
res = super().__repr__()
res += " interval: {}\n".format(self.interval)
res += " energy_info: {}\n".format(self.energy_info)
res += " cfl_info: {}\n".format(self.cfl_info)
return res