6 implicit none ;
private 19 real,
allocatable,
dimension(:) :: coordinateresolution
29 integer,
intent(in) :: nk
30 real,
dimension(:),
intent(in) :: coordinateResolution
32 if (
associated(cs))
call mom_error(fatal,
"init_coord_zlike: CS already associated!")
34 allocate(cs%coordinateResolution(nk))
37 cs%coordinateResolution = coordinateresolution
44 if (.not.
associated(cs))
return 45 deallocate(cs%coordinateResolution)
51 real,
optional,
intent(in) :: min_thickness
53 if (.not.
associated(cs))
call mom_error(fatal,
"set_zlike_params: CS not associated")
55 if (
present(min_thickness)) cs%min_thickness = min_thickness
59 subroutine build_zstar_column(CS, nz, depth, total_thickness, zInterface, z_rigid_top, eta_orig)
61 integer,
intent(in) :: nz
62 real,
intent(in) :: depth
63 real,
intent(in) :: total_thickness
64 real,
dimension(nz+1),
intent(inout) :: zInterface
65 real,
optional,
intent(in) :: z_rigid_top
66 real,
optional,
intent(in) :: eta_orig
68 real :: eta, stretching, dh, min_thickness, z0_top, z_star
70 logical :: new_zstar_def
72 new_zstar_def = .false.
73 min_thickness = min( cs%min_thickness, total_thickness/
real(nz) )
75 if (
present(z_rigid_top))
then 77 new_zstar_def = .true.
81 eta = total_thickness - depth
82 if (
present(eta_orig)) eta = eta_orig
91 stretching = total_thickness / ( depth + z0_top )
93 if (new_zstar_def)
then 98 z_star = z_star - cs%coordinateResolution(k-1)
100 zinterface(k) = min( eta + stretching * ( z_star - z0_top ), z0_top )
102 zinterface(k) = min( zinterface(k), zinterface(k-1) - min_thickness )
104 zinterface(k) = max( zinterface(k), -depth +
real(nz+1-k) * min_thickness )
106 zinterface(nz+1) = -depth
114 dh = stretching * cs%coordinateResolution(k)
115 zinterface(k+1) = zinterface(k) - dh
120 zinterface(nz+1) = -depth
122 if ( zinterface(k) < (zinterface(k+1) + min_thickness) )
then 123 zinterface(k) = zinterface(k+1) + min_thickness
subroutine, public end_coord_zlike(CS)
subroutine, public set_zlike_params(CS, min_thickness)
subroutine, public init_coord_zlike(CS, nk, coordinateResolution)
Initialise a zlike_CS with pointers to parameters.
subroutine, public build_zstar_column(CS, nz, depth, total_thickness, zInterface, z_rigid_top, eta_orig)
Builds a z* coordinate with a minimum thickness.
Regrid columns for a z-like coordinate (z-star, z-level)
Control structure containing required parameters for a z-like coordinate.
subroutine, public mom_error(level, message, all_print)