Source code for src.spyice.preprocess.modify_initial_boundary
from __future__ import annotations
from spyice.parameters.user_input import UserInput
from spyice.preprocess.initial_boundary_conditions import temperature_gradient
ui = UserInput()
(
temperature_melt,
boundary_top_temperature,
boundary_salinity,
boundary_top_temperature,
dz,
phi_c,
) = (
ui.temperature_melt,
ui.boundary_top_temperature,
ui.boundary_salinity,
ui.boundary_top_temperature,
ui.grid_resolution_dz,
ui.critical_liquid_fraction,
)
[docs]
class ModifyInitialBoundary:
"""Defines functions for managing initial boundary conditions in a sea ice model."""
[docs]
def __init__(self) -> None:
pass
[docs]
def bc_neumann(self, phi_k, nz, bc_condition=None):
"""Applies Neumann boundary condition to the given field.
Args:
phi_k (numpy.ndarray): The field to which the boundary condition is applied.
nz (int): The number of grid points in the vertical direction.
bc_condition (str, optional): The type of boundary condition. Defaults to None.
Returns:
None
"""
if bc_condition == "Neumann":
self.temp_grad = temperature_gradient(
phi_k, nz
) # T_bottom - T_top / depth according to Buffo
else:
self.temp_grad = None
[docs]
def set_boundary_condition_type(self, critical_depth, bc_type="Neumann"):
"""Sets the boundary condition type for the given critical depth.
Args:
critical_depth (float): The critical depth value.
bc_type (str, optional): The type of boundary condition. Defaults to "Neumann".
Raises:
None
Returns:
None
"""
if bc_type == "Neumann":
self.temp_grad = (
dz * (temperature_melt - boundary_top_temperature) / critical_depth
)
else:
self.temp_grad = None