32 implicit none ;
private 34 #include <MOM_memory.h> 44 real,
dimension(SZI_(G),SZJ_(G), SZK_(GV)), &
48 logical,
optional,
intent(in) :: just_read_params
51 real :: e0(szk_(gv)+1)
53 real :: eta1D(szk_(gv)+1)
55 real :: diskrad, rad, xCenter, xRadius, lonC, latC
58 #include "version_variable.h" 59 character(len=40) :: mdl =
"circle_obcs_initialization" 60 integer :: i, j, k, is, ie, js, je, nz
62 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = g%ke
64 just_read = .false. ;
if (
present(just_read_params)) just_read = just_read_params
67 call mom_mesg(
" circle_obcs_initialization.F90, circle_obcs_initialize_thickness: setting thickness", 5)
69 if (.not.just_read)
call log_version(param_file, mdl, version,
"")
71 call get_param(param_file, mdl,
"DISK_RADIUS", diskrad, &
72 "The radius of the initially elevated disk in the \n"//&
73 "circle_obcs test case.", units=g%x_axis_units, &
74 fail_if_missing=.not.just_read, do_not_log=just_read)
79 e0(k) = -g%max_depth *
real(k-1) /
real(nz)
83 do j=js,je ;
do i=is,ie
84 eta1d(nz+1) = -1.0*g%bathyT(i,j)
87 if (eta1d(k) < (eta1d(k+1) + gv%Angstrom_z))
then 88 eta1d(k) = eta1d(k+1) + gv%Angstrom_z
89 h(i,j,k) = gv%Angstrom_z
91 h(i,j,k) = eta1d(k) - eta1d(k+1)
98 latc = g%south_lat + 0.5*g%len_lat
99 lonc = g%west_lon + 0.5*g%len_lon
100 do j=js,je ;
do i=is,ie
101 rad = sqrt((g%geoLonT(i,j)-lonc)**2+(g%geoLatT(i,j)-latc)**2)/(diskrad)
104 rad = rad*(2.*asin(1.))
107 h(i,j,k) = h(i,j,k) + 1.0*0.5*(1.+cos(rad))
111 h(i,j,k) = h(i,j,k) - 0.5*(1.+cos(rad)) &
112 * 5.0 *
real( 2*k-nz )
subroutine, public circle_obcs_initialize_thickness(h, G, GV, param_file, just_read_params)
This subroutine initializes layer thicknesses for the circle_obcs experiment.
Ocean grid type. See mom_grid for details.
Calculates density of sea water from T, S and P.
Provides the ocean grid type.
This module contains the tracer_registry_type and the subroutines that handle registration of tracers...
subroutine, public calculate_density_derivs(T, S, pressure, drho_dT, drho_dS, start, npts, EOS)
Calls the appropriate subroutine to calculate density derivatives for 1-D array inputs.
subroutine, public initialize_sponge(Iresttime, int_height, G, param_file, CS, Iresttime_i_mean, int_height_i_mean)
subroutine, public set_up_sponge_field(sp_val, f_ptr, G, nlay, CS, sp_val_i_mean)
Type to carry basic tracer information.
logical function, public is_root_pe()
The module configures the model for the "circle_obcs" experiment. circle_obcs = Test of Open Boundary...
subroutine, public mom_mesg(message, verb, all_print)
Provides subroutines for quantities specific to the equation of state.
The thermo_var_ptrs structure contains pointers to an assortment of thermodynamic fields that may be ...
subroutine, public mom_error(level, message, all_print)
A control structure for the equation of state.