Skip to content

Commit 774947a

Browse files
Theresa MorrisonTheresa Morrison
Theresa Morrison
authored and
Theresa Morrison
committed
Add MOM_SIS_ files from previous version
Add copies of the MOM_SIS_* files from the commit 734c7f7 of the refactor_bts_tmp branch.
1 parent bb05814 commit 774947a

File tree

2 files changed

+923
-0
lines changed

2 files changed

+923
-0
lines changed

src/core/MOM_SIS_C_dyn_CS_type.F90

+126
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
!> Update sea-ice dynamics using elastic-viscous-plastic rheology with a C-grid discretization
2+
module MOM_SIS_C_dyn_CS_type
3+
4+
use MOM_time_manager, only : time_type
5+
use SIS_diag_mediator, only : SIS_diag_ctrl
6+
7+
implicit none ; private
8+
9+
#include <SIS2_memory.h>
10+
11+
!> The control structure with parameters regulating C-grid ice dynamics
12+
type, public :: SIS_C_dyn_CS ; ! private
13+
real, allocatable, dimension(:,:) :: &
14+
str_t, & !< The tension stress tensor component [R Z L2 T-2 ~> Pa m].
15+
str_d, & !< The divergence stress tensor component [R Z L2 T-2 ~> Pa m].
16+
str_s !< The shearing stress tensor component (cross term) [R Z L2 T-2 ~> Pa m].
17+
18+
! parameters for calculating water drag and internal ice stresses
19+
real :: p0 !< Pressure constant in the Hibler rheology [R L2 T-2 ~> Pa]
20+
real :: p0_rho !< The pressure constant divided by ice density [L2 T-2 ~> N m kg-1].
21+
real :: c0 !< another pressure constant, c* in Hunke & Dukowicz 1997 [nondim]
22+
real :: cdw !< The drag coefficient between the sea ice and water. [nondim]
23+
real :: EC = 2.0 !< yield curve axis ratio [nondim]
24+
real :: Rho_ocean !< The nominal density of sea water [R ~> kg m-3].
25+
real :: Rho_ice !< The nominal density of sea ice [R ~> kg m-3].
26+
real :: drag_bg_vel2 = 0.0 !< A background (subgridscale) velocity for drag with the ocean
27+
!< squared [L2 T-2 ~> m2 s-2]. This is always 0 for now.
28+
real :: min_ocn_inertial_h !< A minimum ocean thickness used to limit the viscous coupling
29+
!! rate implied for the ocean by the ice-ocean stress [Z ~> m].
30+
real :: Tdamp !< The damping timescale of the stress tensor components toward their
31+
!! equilibrium solution due to the elastic terms [T ~> s] or [nondim].
32+
real :: del_sh_min_scale !< A scaling factor for the minimum permitted value of minimum
33+
!! shears used in the denominator of the stress equations [nondim].
34+
! I suspect that this needs to be greater than 1. -RWH
35+
real :: vel_underflow !< Velocity components smaller than vel_underflow
36+
!! are set to 0 [L T-1 ~> m s-1].
37+
real :: str_underflow !< Stress tensor components smaller than str_underflow
38+
!! are set to 0 [R Z L2 T-2 ~> Pa m].
39+
real :: CFL_trunc !< Velocity components will be truncated when they are large enough
40+
!! that the corresponding CFL number exceeds this value [nondim].
41+
logical :: CFL_check_its !< If true, check the CFL number for every iteration
42+
!! of the rheology solver; otherwise only check the
43+
!! final velocities that are used for transport.
44+
logical :: debug !< If true, write verbose checksums for debugging purposes.
45+
logical :: debug_EVP !< If true, write out verbose debugging data for each of
46+
!! the steps within the EVP solver.
47+
logical :: debug_redundant !< If true, debug redundant points.
48+
logical :: project_drag_vel !< If true, project forward the ice velocity used in the drag
49+
!! calculation to avoid an instability that can occur when an finite
50+
!! stress is applied to thin ice moving with the velocity of the ocean.
51+
logical :: project_ci !< If true, project the ice concentration and related ice strength
52+
!! changes due to the convergent or divergent ice flow.
53+
logical :: weak_coast_stress = .false. !< If true, do not use land masks in determining the area
54+
!! for stress convergence, which acts to weaken the stress-driven
55+
!! acceleration in coastal points.
56+
logical :: weak_low_shear = .false. !< If true, the divergent stresses go toward 0 in the C-grid
57+
!! dynamics when the shear magnitudes are very weak.
58+
!! Otherwise they go to -P_ice. This setting is temporary.
59+
integer :: evp_sub_steps !< The number of iterations in the EVP dynamics
60+
!! for each slow time step.
61+
real :: dt_Rheo !< The maximum sub-cycling time step for the EVP dynamics [T ~> s].
62+
type(time_type), pointer :: Time => NULL() !< A pointer to the ice model's clock.
63+
type(SIS_diag_ctrl), pointer :: diag => NULL() !< A structure that is used to regulate the
64+
!! timing of diagnostic output.
65+
integer, pointer :: ntrunc => NULL() !< The number of times the velocity has been truncated
66+
!! since the last call to write_ice_statistics.
67+
character(len = 200) :: u_trunc_file !< The complete path to the file in which a column's worth
68+
!! of u-accelerations are written if velocity truncations occur.
69+
character(len = 200) :: v_trunc_file !< The complete path to the file in which a column's worth
70+
!! of v-accelerations are written if velocity truncations occur.
71+
integer :: u_file = -1 !< The unit number for an opened u-truncation file, or -1 if it has
72+
!! not been opened.
73+
integer :: v_file = -1 !< The unit number for an opened v-truncation file, or -1 if it has
74+
!! not been opened.
75+
integer :: cols_written !< The number of columns whose output has been
76+
!! written by this PE during the current run.
77+
integer :: max_writes !< The maximum number of times any PE can write out
78+
!! a column's worth of accelerations during a run.
79+
logical :: lemieux_landfast !< If true, use the Lsemieux landfast ice parameterization.
80+
real :: lemieux_k1 !< 1st free parameter for landfast parameterization [nondim]
81+
real :: lemieux_k2 !< second free parameter (N/m^3) for landfast parametrization [R L T-2 ~> N m-3]
82+
real :: lemieux_alphab !< Cb factor in Lemieux et al 2015 [nondim]
83+
real :: lemieux_threshold_hw !< max water depth for grounding [Z ~> m]
84+
!! see keel data from Amundrud et al. 2004 (JGR)
85+
real :: lemieux_u0 !< residual velocity for basal stress [L T-1 ~> m s-1]
86+
logical :: itd_landfast !< If true, use the probabilistic landfast ice parameterization.
87+
real :: basal_stress_min_thick !< min ice thickness for grounding [Z ~> m]
88+
real :: basal_stress_max_depth !< max water depth for grounding [Z ~> m]
89+
real :: basal_stress_mu_s !< bottom drag parameter [L Z-1 ~> nondim]
90+
real :: bathy_roughness_min !< minimum bathymetric roughness [z ~> m]
91+
real :: bathy_roughness_max !< maximum bathymetric roughness [z ~> m]
92+
real :: puny !< small number [nondim]
93+
real :: onemeter !< make the units work out (hopefully) [Z ~> m]
94+
real :: basal_stress_cutoff !< tunable parameter for the bottom drag [nondim]
95+
integer :: ncat_b ! number of bathymetry categories
96+
integer :: ncat_i ! number of ice thickness categories (log-normal)
97+
98+
real, pointer, dimension(:,:) :: Tb_u=>NULL() !< Basal stress component at u-points
99+
!! [R Z L T-2 -> kg m-1 s-2]
100+
real, pointer, dimension(:,:) :: Tb_v=>NULL() !< Basal stress component at v-points
101+
!! [R Z L T-2 -> kg m-1 s-2]
102+
real, pointer, dimension(:,:) :: sigma_b=>NULL() !< !< Bottom depth variance [Z ~> m].
103+
104+
logical :: FirstCall = .true. !< If true, this module has not been called before
105+
!>@{ Diagnostic IDs
106+
integer :: id_fix = -1, id_fiy = -1, id_fcx = -1, id_fcy = -1
107+
integer :: id_fwx = -1, id_fwy = -1, id_sigi = -1, id_sigii = -1
108+
integer :: id_flfx = -1, id_flfy = -1, id_stren = -1, id_stren0 = -1
109+
integer :: id_ui = -1, id_vi = -1, id_Coru = -1, id_Corv = -1
110+
integer :: id_PFu = -1, id_PFv = -1, id_fpx = -1, id_fpy = -1
111+
integer :: id_fix_d = -1, id_fix_t = -1, id_fix_s = -1
112+
integer :: id_fiy_d = -1, id_fiy_t = -1, id_fiy_s = -1
113+
integer :: id_str_d = -1, id_str_t = -1, id_str_s = -1
114+
integer :: id_sh_d = -1, id_sh_t = -1, id_sh_s = -1
115+
integer :: id_del_sh = -1, id_del_sh_min = -1
116+
integer :: id_mis = -1, id_ci = -1, id_ci0 = -1, id_miu = -1, id_miv = -1
117+
integer :: id_ui_hifreq = -1, id_vi_hifreq = -1
118+
integer :: id_str_d_hifreq = -1, id_str_t_hifreq = -1, id_str_s_hifreq = -1
119+
integer :: id_sh_d_hifreq = -1, id_sh_t_hifreq = -1, id_sh_s_hifreq = -1
120+
integer :: id_sigi_hifreq = -1, id_sigii_hifreq = -1
121+
integer :: id_stren_hifreq = -1, id_ci_hifreq = -1
122+
integer :: id_siu = -1, id_siv = -1, id_sispeed = -1 ! SIMIP diagnostics
123+
!!@}
124+
end type SIS_C_dyn_CS
125+
126+
end module MOM_SIS_C_dyn_CS_type

0 commit comments

Comments
 (0)