72 use mom_cpu_clock, only : cpu_clock_id, cpu_clock_begin, cpu_clock_end
74 use mom_cpu_clock, only : clock_module_driver, clock_module, clock_routine
90 use mom_time_manager, only : time_type, set_time, time_type_to_real,
operator(+)
91 use mom_time_manager, only :
operator(-),
operator(>),
operator(*),
operator(/)
114 implicit none ;
private 116 #include <MOM_memory.h> 119 real allocable_,
dimension(NIMEMB_PTR_,NJMEM_,NKMEM_) :: &
124 real allocable_,
dimension(NIMEM_,NJMEMB_PTR_,NKMEM_) :: &
131 real,
pointer,
dimension(:,:) :: taux_bot => null(), tauy_bot => null()
142 logical :: module_is_initialized = .false.
144 integer :: id_uh = -1, id_vh = -1
145 integer :: id_pfu = -1, id_pfv = -1, id_cau = -1, id_cav = -1
173 type(
ale_cs),
pointer :: ale_csp => null()
190 p_surf_begin, p_surf_end, uh, vh, uhtr, vhtr, eta_av, G, GV, CS, &
195 real,
dimension(SZIB_(G),SZJ_(G),SZK_(G)), &
196 intent(inout) :: u_in
198 real,
dimension(SZI_(G),SZJB_(G),SZK_(G)), &
199 intent(inout) :: v_in
201 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)), &
202 intent(inout) :: h_in
210 type(time_type),
intent(in) :: Time_local
212 real,
intent(in) :: dt
214 type(
forcing),
intent(in) :: fluxes
217 real,
dimension(:,:),
pointer :: p_surf_begin
220 real,
dimension(:,:),
pointer :: p_surf_end
223 real,
dimension(SZIB_(G),SZJ_(G),SZK_(G)), &
226 real,
dimension(SZI_(G),SZJB_(G),SZK_(G)), &
229 real,
dimension(SZIB_(G),SZJ_(G),SZK_(G)), &
230 intent(inout) :: uhtr
233 real,
dimension(SZI_(G),SZJB_(G),SZK_(G)), &
234 intent(inout) :: vhtr
237 real,
dimension(SZI_(G),SZJ_(G)),
intent(out) :: eta_av
278 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)) :: h_av, hp
279 real,
dimension(SZIB_(G),SZJ_(G),SZK_(G)) :: up
280 real,
dimension(SZI_(G),SZJB_(G),SZK_(G)) :: vp
281 real,
dimension(:,:),
pointer :: p_surf
284 logical :: dyn_p_surf
285 integer :: i, j, k, is, ie, js, je, Isq, Ieq, Jsq, Jeq, nz
286 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = g%ke
287 isq = g%IscB ; ieq = g%IecB ; jsq = g%JscB ; jeq = g%JecB
290 h_av(:,:,:) = 0; hp(:,:,:) = 0
294 dyn_p_surf =
associated(p_surf_begin) .and.
associated(p_surf_end)
296 call safe_alloc_ptr(p_surf,g%isd,g%ied,g%jsd,g%jed) ; p_surf(:,:) = 0.0
298 p_surf => fluxes%p_surf
309 call enable_averaging(dt,time_local, cs%diag)
312 g, gv, cs%hor_visc_CSp)
314 call disable_averaging(cs%diag)
326 call continuity(u_in, v_in, h_in, hp, uh, vh, dt_pred, g, gv, cs%continuity_CSp, &
337 do j=js-2,je+2 ;
do i=is-2,ie+2
338 h_av(i,j,k) = (h_in(i,j,k) + hp(i,j,k)) * 0.5
339 enddo ;
enddo ;
enddo 344 call coradcalc(u_in, v_in, h_av, uh, vh, cs%CAu, cs%CAv, cs%OBC, cs%ADp, &
345 g, gv, cs%CoriolisAdv_CSp)
350 if (dyn_p_surf)
then ;
do j=js-2,je+2 ;
do i=is-2,ie+2
351 p_surf(i,j) = 0.5*p_surf_begin(i,j) + 0.5*p_surf_end(i,j)
352 enddo ;
enddo ;
endif 354 cs%PressureForce_CSp, cs%ALE_CSp, p_surf)
361 if (
associated(cs%OBC)) then;
if (cs%OBC%update_OBC)
then 362 call update_obc_data(cs%OBC, g, gv, tv, h_in, cs%update_OBC_CSp, time_local)
364 if (
associated(cs%OBC))
then 372 do k=1,nz ;
do j=js,je ;
do i=isq,ieq
373 up(i,j,k) = g%mask2dCu(i,j) * (u_in(i,j,k) + dt_pred * &
374 ((cs%PFu(i,j,k) + cs%CAu(i,j,k)) + cs%diffu(i,j,k)))
375 enddo ;
enddo ;
enddo 376 do k=1,nz ;
do j=jsq,jeq ;
do i=is,ie
377 vp(i,j,k) = g%mask2dCv(i,j) * (v_in(i,j,k) + dt_pred * &
378 ((cs%PFv(i,j,k) + cs%CAv(i,j,k)) + cs%diffv(i,j,k)))
379 enddo ;
enddo ;
enddo 384 cs%diffu, cs%diffv, g, gv)
388 call enable_averaging(dt, time_local, cs%diag)
389 call set_viscous_ml(up, vp, h_av, tv, fluxes, visc, dt_pred, g, gv, &
391 call disable_averaging(cs%diag)
392 call vertvisc_coef(up, vp, h_av, fluxes, visc, dt_pred, g, gv, &
393 cs%vertvisc_CSp, cs%OBC)
394 call vertvisc(up, vp, h_av, fluxes, visc, dt_pred, cs%OBC, cs%ADp, cs%CDp, &
395 g, gv, cs%vertvisc_CSp)
405 dt, g, gv, cs%continuity_CSp, obc=cs%OBC)
413 do k=1,nz ;
do j=js-2,je+2 ;
do i=is-2,ie+2
414 h_av(i,j,k) = (h_in(i,j,k) + hp(i,j,k)) * 0.5
415 enddo ;
enddo ;
enddo 422 call coradcalc(up, vp, h_av, uh, vh, cs%CAu, cs%CAv, cs%OBC, cs%ADp, &
423 g, gv, cs%CoriolisAdv_CSp)
425 if (
associated(cs%OBC))
then 433 do k=1,nz ;
do j=js,je ;
do i=isq,ieq
434 up(i,j,k) = g%mask2dCu(i,j) * (u_in(i,j,k) + dt * (1.+cs%begw) * &
435 ((cs%PFu(i,j,k) + cs%CAu(i,j,k)) + cs%diffu(i,j,k)))
436 u_in(i,j,k) = g%mask2dCu(i,j) * (u_in(i,j,k) + dt * &
437 ((cs%PFu(i,j,k) + cs%CAu(i,j,k)) + cs%diffu(i,j,k)))
438 enddo ;
enddo ;
enddo 439 do k=1,nz ;
do j=jsq,jeq ;
do i=is,ie
440 vp(i,j,k) = g%mask2dCv(i,j) * (v_in(i,j,k) + dt * (1.+cs%begw) * &
441 ((cs%PFv(i,j,k) + cs%CAv(i,j,k)) + cs%diffv(i,j,k)))
442 v_in(i,j,k) = g%mask2dCv(i,j) * (v_in(i,j,k) + dt * &
443 ((cs%PFv(i,j,k) + cs%CAv(i,j,k)) + cs%diffv(i,j,k)))
444 enddo ;
enddo ;
enddo 449 call vertvisc_coef(up, vp, h_av, fluxes, visc, dt, g, gv, &
450 cs%vertvisc_CSp, cs%OBC)
451 call vertvisc(up, vp, h_av, fluxes, visc, dt, cs%OBC, cs%ADp, cs%CDp, &
452 g, gv, cs%vertvisc_CSp, cs%taux_bot, cs%tauy_bot)
453 call vertvisc_coef(u_in, v_in, h_av, fluxes, visc, dt, g, gv, &
454 cs%vertvisc_CSp, cs%OBC)
455 call vertvisc(u_in, v_in, h_av, fluxes, visc, dt, cs%OBC, cs%ADp, cs%CDp,&
456 g, gv, cs%vertvisc_CSp, cs%taux_bot, cs%tauy_bot)
467 dt, g, gv, cs%continuity_CSp, obc=cs%OBC)
476 do j=js-2,je+2 ;
do i=isq-2,ieq+2
477 uhtr(i,j,k) = uhtr(i,j,k) + dt*uh(i,j,k)
479 do j=jsq-2,jeq+2 ;
do i=is-2,ie+2
480 vhtr(i,j,k) = vhtr(i,j,k) + dt*vh(i,j,k)
487 cs%diffu, cs%diffv, g, gv)
490 if (gv%Boussinesq)
then 491 do j=js,je ;
do i=is,ie ; eta_av(i,j) = -g%bathyT(i,j) ;
enddo ;
enddo 493 do j=js,je ;
do i=is,ie ; eta_av(i,j) = 0.0 ;
enddo ;
enddo 495 do k=1,nz ;
do j=js,je ;
do i=is,ie
496 eta_av(i,j) = eta_av(i,j) + h_av(i,j,k)
497 enddo ;
enddo ;
enddo 499 if (dyn_p_surf)
deallocate(p_surf)
503 if (cs%id_PFu > 0)
call post_data(cs%id_PFu, cs%PFu, cs%diag)
504 if (cs%id_PFv > 0)
call post_data(cs%id_PFv, cs%PFv, cs%diag)
505 if (cs%id_CAu > 0)
call post_data(cs%id_CAu, cs%CAu, cs%diag)
506 if (cs%id_CAv > 0)
call post_data(cs%id_CAv, cs%CAv, cs%diag)
509 if (cs%id_uh > 0)
call post_data(cs%id_uh, uh, cs%diag)
510 if (cs%id_vh > 0)
call post_data(cs%id_vh, vh, cs%diag)
517 type(hor_index_type),
intent(in) :: HI
518 type(verticalgrid_type),
intent(in) :: GV
519 type(param_file_type),
intent(in) :: param_file
523 type(mom_restart_cs),
pointer :: restart_CS
537 character(len=48) :: thickness_units, flux_units
538 integer :: isd, ied, jsd, jed, nz, IsdB, IedB, JsdB, JedB
539 isd = hi%isd ; ied = hi%ied ; jsd = hi%jsd ; jed = hi%jed ; nz = gv%ke
540 isdb = hi%IsdB ; iedb = hi%IedB ; jsdb = hi%JsdB ; jedb = hi%JedB
543 if (
associated(cs))
then 544 call mom_error(warning,
"register_restarts_dyn_unsplit_RK2 called with an associated "// &
545 "control structure.")
550 alloc_(cs%diffu(isdb:iedb,jsd:jed,nz)) ; cs%diffu(:,:,:) = 0.0
551 alloc_(cs%diffv(isd:ied,jsdb:jedb,nz)) ; cs%diffv(:,:,:) = 0.0
552 alloc_(cs%CAu(isdb:iedb,jsd:jed,nz)) ; cs%CAu(:,:,:) = 0.0
553 alloc_(cs%CAv(isd:ied,jsdb:jedb,nz)) ; cs%CAv(:,:,:) = 0.0
554 alloc_(cs%PFu(isdb:iedb,jsd:jed,nz)) ; cs%PFu(:,:,:) = 0.0
555 alloc_(cs%PFv(isd:ied,jsdb:jedb,nz)) ; cs%PFv(:,:,:) = 0.0
557 thickness_units = get_thickness_units(gv)
558 flux_units = get_flux_units(gv)
565 restart_CS, Accel_diag, Cont_diag, MIS, &
566 OBC, update_OBC_CSp, ALE_CSp, setVisc_CSp, &
568 type(ocean_grid_type),
intent(inout) :: G
569 type(verticalgrid_type),
intent(in) :: GV
571 real,
dimension(SZIB_(G),SZJ_(G),SZK_(G)),
intent(inout) :: u
572 real,
dimension(SZI_(G),SZJB_(G),SZK_(G)),
intent(inout) :: v
574 real,
dimension(SZI_(G),SZJ_(G),SZK_(G)) ,
intent(inout) :: h
576 type(time_type),
target,
intent(in) :: Time
577 type(param_file_type),
intent(in) :: param_file
579 type(diag_ctrl),
target,
intent(inout) :: diag
583 type(mom_restart_cs),
pointer :: restart_CS
585 type(accel_diag_ptrs),
target,
intent(inout) :: Accel_diag
588 type(cont_diag_ptrs),
target,
intent(inout) :: Cont_diag
591 type(ocean_internal_state),
intent(inout) :: MIS
594 type(ocean_obc_type),
pointer :: OBC
597 type(update_obc_cs),
pointer :: update_OBC_CSp
600 type(ale_cs),
pointer :: ALE_CSp
602 type(set_visc_cs),
pointer :: setVisc_CSp
605 type(vertvisc_type),
intent(inout) :: visc
608 type(directories),
intent(in) :: dirs
610 integer,
target,
intent(inout) :: ntrunc
646 character(len=40) :: mdl =
"MOM_dynamics_unsplit_RK2" 647 character(len=48) :: thickness_units, flux_units
649 integer :: isd, ied, jsd, jed, nz, IsdB, IedB, JsdB, JedB
650 isd = g%isd ; ied = g%ied ; jsd = g%jsd ; jed = g%jed ; nz = g%ke
651 isdb = g%IsdB ; iedb = g%IedB ; jsdb = g%JsdB ; jedb = g%JedB
653 if (.not.
associated(cs))
call mom_error(fatal, &
654 "initialize_dyn_unsplit_RK2 called with an unassociated control structure.")
655 if (cs%module_is_initialized)
then 656 call mom_error(warning,
"initialize_dyn_unsplit_RK2 called with a control "// &
657 "structure that has already been initialized.")
660 cs%module_is_initialized = .true.
664 call get_param(param_file, mdl,
"BE", cs%be, &
665 "If SPLIT is true, BE determines the relative weighting \n"//&
666 "of a 2nd-order Runga-Kutta baroclinic time stepping \n"//&
667 "scheme (0.5) and a backward Euler scheme (1) that is \n"//&
668 "used for the Coriolis and inertial terms. BE may be \n"//&
669 "from 0.5 to 1, but instability may occur near 0.5. \n"//&
670 "BE is also applicable if SPLIT is false and USE_RK2 \n"//&
671 "is true.", units=
"nondim", default=0.6)
672 call get_param(param_file, mdl,
"BEGW", cs%begw, &
673 "If SPLIT is true, BEGW is a number from 0 to 1 that \n"//&
674 "controls the extent to which the treatment of gravity \n"//&
675 "waves is forward-backward (0) or simulated backward \n"//&
676 "Euler (1). 0 is almost always used.\n"//&
677 "If SPLIT is false and USE_RK2 is true, BEGW can be \n"//&
678 "between 0 and 0.5 to damp gravity waves.", &
679 units=
"nondim", default=0.0)
680 call get_param(param_file, mdl,
"DEBUG", cs%debug, &
681 "If true, write out verbose debugging data.", default=.false.)
682 call get_param(param_file, mdl,
"TIDES", use_tides, &
683 "If true, apply tidal momentum forcing.", default=.false.)
685 allocate(cs%taux_bot(isdb:iedb,jsd:jed)) ; cs%taux_bot(:,:) = 0.0
686 allocate(cs%tauy_bot(isd:ied,jsdb:jedb)) ; cs%tauy_bot(:,:) = 0.0
688 mis%diffu => cs%diffu ; mis%diffv => cs%diffv
689 mis%PFu => cs%PFu ; mis%PFv => cs%PFv
690 mis%CAu => cs%CAu ; mis%CAv => cs%CAv
692 cs%ADp => accel_diag ; cs%CDp => cont_diag
693 accel_diag%diffu => cs%diffu ; accel_diag%diffv => cs%diffv
694 accel_diag%PFu => cs%PFu ; accel_diag%PFv => cs%PFv
695 accel_diag%CAu => cs%CAu ; accel_diag%CAv => cs%CAv
697 call continuity_init(time, g, gv, param_file, diag, cs%continuity_CSp)
698 call coriolisadv_init(time, g, param_file, diag, cs%ADp, cs%CoriolisAdv_CSp)
699 if (use_tides)
call tidal_forcing_init(time, g, param_file, cs%tides_CSp)
700 call pressureforce_init(time, g, gv, param_file, diag, cs%PressureForce_CSp, &
702 call hor_visc_init(time, g, param_file, diag, cs%hor_visc_CSp)
703 call vertvisc_init(mis, time, g, gv, param_file, diag, cs%ADp, dirs, &
704 ntrunc, cs%vertvisc_CSp)
705 if (.not.
associated(setvisc_csp))
call mom_error(fatal, &
706 "initialize_dyn_unsplit_RK2 called with setVisc_CSp unassociated.")
707 cs%set_visc_CSp => setvisc_csp
709 if (
associated(ale_csp)) cs%ALE_CSp => ale_csp
710 if (
associated(obc)) cs%OBC => obc
712 flux_units = get_flux_units(gv)
713 cs%id_uh = register_diag_field(
'ocean_model',
'uh', diag%axesCuL, time, &
714 'Zonal Thickness Flux', flux_units, y_cell_method=
'sum', v_extensive=.true.)
715 cs%id_vh = register_diag_field(
'ocean_model',
'vh', diag%axesCvL, time, &
716 'Meridional Thickness Flux', flux_units, x_cell_method=
'sum', v_extensive=.true.)
717 cs%id_CAu = register_diag_field(
'ocean_model',
'CAu', diag%axesCuL, time, &
718 'Zonal Coriolis and Advective Acceleration',
'meter second-2')
719 cs%id_CAv = register_diag_field(
'ocean_model',
'CAv', diag%axesCvL, time, &
720 'Meridional Coriolis and Advective Acceleration',
'meter second-2')
721 cs%id_PFu = register_diag_field(
'ocean_model',
'PFu', diag%axesCuL, time, &
722 'Zonal Pressure Force Acceleration',
'meter second-2')
723 cs%id_PFv = register_diag_field(
'ocean_model',
'PFv', diag%axesCvL, time, &
724 'Meridional Pressure Force Acceleration',
'meter second-2')
726 id_clock_cor = cpu_clock_id(
'(Ocean Coriolis & mom advection)', grain=clock_module)
728 id_clock_pres = cpu_clock_id(
'(Ocean pressure force)', grain=clock_module)
729 id_clock_vertvisc = cpu_clock_id(
'(Ocean vertical viscosity)', grain=clock_module)
730 id_clock_horvisc = cpu_clock_id(
'(Ocean horizontal viscosity)', grain=clock_module)
732 id_clock_pass = cpu_clock_id(
'(Ocean message passing)', grain=clock_module)
733 id_clock_pass_init = cpu_clock_id(
'(Ocean init message passing)', grain=clock_routine)
741 dealloc_(cs%diffu) ; dealloc_(cs%diffv)
742 dealloc_(cs%CAu) ; dealloc_(cs%CAv)
743 dealloc_(cs%PFu) ; dealloc_(cs%PFv)
subroutine, public mom_io_init(param_file)
Initialize the MOM_io module.
integer id_clock_mom_update
subroutine, public step_mom_dyn_unsplit_rk2(u_in, v_in, h_in, tv, visc, Time_local, dt, fluxes, p_surf_begin, p_surf_end, uh, vh, uhtr, vhtr, eta_av, G, GV, CS, VarMix, MEKE)
subroutine, public mom_thermo_chksum(mesg, tv, G, haloshift)
subroutine, public coradcalc(u, v, h, uh, vh, CAu, CAv, OBC, AD, G, GV, CS)
Calculates the Coriolis and momentum advection contributions to the acceleration. ...
subroutine, public end_dyn_unsplit_rk2(CS)
This module contains the main regridding routines. Regridding comprises two steps: (1) Interpolation ...
character(len=48) function, public get_flux_units(GV)
Returns the model's thickness flux units, usually m^3/s or kg/s.
This module implements boundary forcing for MOM6.
integer id_clock_continuity
subroutine, public register_restarts_dyn_unsplit_rk2(HI, GV, param_file, CS, restart_CS)
subroutine, public continuity_init(Time, G, GV, param_file, diag, CS)
Initializes continuity_cs.
integer, parameter, public to_all
subroutine, public hor_visc_init(Time, G, param_file, diag, CS)
This subroutine allocates space for and calculates static variables used by this module. The metrics may be 0, 1, or 2-D arrays, while fields like the background viscosities are 2-D arrays. ALLOC is a macro defined in MOM_memory.h to either allocate for dynamic memory, or do nothing when using static memory.
Ocean grid type. See mom_grid for details.
subroutine, public initialize_dyn_unsplit_rk2(u, v, h, Time, G, GV, param_file, diag, CS, restart_CS, Accel_diag, Cont_diag, MIS, OBC, update_OBC_CSp, ALE_CSp, setVisc_CSp, visc, dirs, ntrunc)
integer id_clock_pass_init
Solve the layer continuity equation.
Controls where open boundary conditions are applied.
Implements vertical viscosity (vertvisc)
Provides the ocean grid type.
The vertvisc_type structure contains vertical viscosities, drag coefficients, and related fields...
subroutine, public pressureforce_init(Time, G, GV, param_file, diag, CS, tides_CSp)
Initialize the pressure force control structure.
Accelerations due to the Coriolis force and momentum advection.
A thin wrapper for Boussinesq/non-Boussinesq forms of the pressure force calculation.
This module contains I/O framework code.
Defines the horizontal index type (hor_index_type) used for providing index ranges.
subroutine, public mom_accel_chksum(mesg, CAu, CAv, PFu, PFv, diffu, diffv, G, GV, pbce, u_accel_bt, v_accel_bt, symmetric)
The accel_diag_ptrs structure contains pointers to arrays with accelerations, which can later be used...
Variable mixing coefficients.
subroutine, public coriolisadv_init(Time, G, param_file, diag, AD, CS)
Initializes the control structure for coriolisadv_cs.
character(len=48) function, public get_tr_flux_units(GV, tr_units, tr_vol_conc_units, tr_mass_conc_units)
Returns the model's tracer flux units.
Container for horizontal index ranges for data, computational and global domains. ...
Control structure for mom_coriolisadv.
Variable mixing coefficients.
subroutine, public horizontal_viscosity(u, v, h, diffu, diffv, MEKE, VarMix, G, GV, CS, OBC)
This subroutine determines the acceleration due to the horizontal viscosity. A combination of biharmo...
integer id_clock_vertvisc
Control structure for mom_continuity.
subroutine, public open_boundary_zero_normal_flow(OBC, G, u, v)
Applies zero values to 3d u,v fields on OBC segments.
subroutine, public radiation_open_bdry_conds(OBC, u_new, u_old, v_new, v_old, G, dt)
Apply radiation conditions to 3D u,v at open boundaries.
subroutine, public mom_domains_init(MOM_dom, param_file, symmetric, static_memory, NIHALO, NJHALO, NIGLOBAL, NJGLOBAL, NIPROC, NJPROC, min_halo, domain_name, include_name, param_suffix)
logical function, public is_root_pe()
The cont_diag_ptrs structure contains pointers to arrays with transports, which can later be used for...
subroutine, public pressureforce(h, tv, PFu, PFv, G, GV, CS, ALE_CSp, p_atm, pbce, eta)
A thin layer between the model and the Boussinesq and non-Boussinesq pressure force routines...
subroutine, public mom_set_verbosity(verb)
character(len=48) function, public get_thickness_units(GV)
Returns the model's thickness units, usually m or kg/m^2.
The ocean_internal_state structure contains pointers to all of the prognostic variables allocated in ...
subroutine, public vertvisc_coef(u, v, h, fluxes, visc, dt, G, GV, CS, OBC)
Calculate the coupling coefficients (CSa_u and CSa_v) and effective layer thicknesses (CSh_u and CSh_...
subroutine, public update_obc_data(OBC, G, GV, tv, h, CS, Time)
Calls appropriate routine to update the open boundary conditions.
Structure that contains pointers to the boundary forcing used to drive the liquid ocean simulated by ...
subroutine, public vertvisc_init(MIS, Time, G, GV, param_file, diag, ADp, dirs, ntrunc, CS)
Initialise the vertical friction module.
subroutine, public set_viscous_ml(u, v, h, tv, fluxes, visc, dt, G, GV, CS)
The following subroutine calculates the thickness of the surface boundary layer for applying an eleva...
subroutine, public mom_mesg(message, verb, all_print)
Type for describing a variable, typically a tracer.
subroutine, public tidal_forcing_init(Time, G, param_file, CS)
This subroutine allocates space for the static variables used by this module. The metrics may be effe...
subroutine, public continuity(u, v, hin, h, uh, vh, dt, G, GV, CS, uhbt, vhbt, OBC, visc_rem_u, visc_rem_v, u_cor, v_cor, uhbt_aux, vhbt_aux, u_cor_aux, v_cor_aux, BT_cont)
Time steps the layer thicknesses, using a monotonically limited, directionally split PPM scheme...
subroutine, public save_restart(directory, time, G, CS, time_stamped, filename, GV)
subroutine, public vertvisc_limit_vel(u, v, h, ADp, CDp, fluxes, visc, dt, G, GV, CS)
Velocity components which exceed a threshold for physically reasonable values are truncated...
The thermo_var_ptrs structure contains pointers to an assortment of thermodynamic fields that may be ...
Controls where open boundary conditions are applied.
subroutine, public restart_init(param_file, CS, restart_root)
subroutine, public vertvisc(u, v, h, fluxes, visc, dt, OBC, ADp, CDp, G, GV, CS, taux_bot, tauy_bot)
Perform a fully implicit vertical diffusion of momentum. Stress top and bottom boundary conditions ar...
subroutine, public mom_error(level, message, all_print)