14 use regrid_consts,
only : coordinatemode, default_coordinate_mode
18 implicit none ;
private
20 #include <MOM_memory.h>
23 character(len=40) :: mdl =
"soliton_initialization"
25 public soliton_initialize_thickness
26 public soliton_initialize_velocity
31 subroutine soliton_initialize_thickness(h, G, GV, US)
35 real,
dimension(SZI_(G),SZJ_(G),SZK_(GV)), &
38 integer :: i, j, k, is, ie, js, je, nz
40 real :: val1, val2, val3, val4
41 character(len=40) :: verticalcoordinate
43 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = g%ke
45 call mom_mesg(
"soliton_initialization.F90, soliton_initialize_thickness: setting thickness")
47 x0 = 2.0*g%len_lon/3.0
50 val2 = us%m_to_Z * 0.771*(val1*val1)
52 do j = g%jsc,g%jec ;
do i = g%isc,g%iec
57 val4 = val2 * ( 2.0*val3 / (1.0 + (val3*val3)) )**2
58 h(i,j,k) = gv%Z_to_H * (0.25*val4*(6.0*y*y + 3.0) * exp(-0.5*y*y) + g%bathyT(i,j))
62 end subroutine soliton_initialize_thickness
66 subroutine soliton_initialize_velocity(u, v, h, G)
68 real,
dimension(SZIB_(G),SZJ_(G),SZK_(G)),
intent(out) :: u
69 real,
dimension(SZI_(G),SZJB_(G),SZK_(G)),
intent(out) :: v
70 real,
dimension(SZI_(G),SZJ_(G), SZK_(G)),
intent(in) :: h
73 real :: val1, val2, val3, val4
74 integer :: i, j, k, is, ie, js, je, nz
76 is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = g%ke
78 x0 = 2.0*g%len_lon/3.0
81 val2 = 0.771*(val1*val1)
86 do j = g%jsc,g%jec ;
do i = g%isc-1,g%iec+1
88 x = 0.5*(g%geoLonT(i+1,j)+g%geoLonT(i,j))-x0
89 y = 0.5*(g%geoLatT(i+1,j)+g%geoLatT(i,j))-y0
91 val4 = val2*((2.0*val3/(1.0+(val3*val3)))**2)
92 u(i,j,k) = 0.25*val4*(6.0*y*y-9.0) * exp(-0.5*y*y)
95 do j = g%jsc-1,g%jec+1 ;
do i = g%isc,g%iec
97 x = 0.5*(g%geoLonT(i,j+1)+g%geoLonT(i,j))-x0
98 y = 0.5*(g%geoLatT(i,j+1)+g%geoLatT(i,j))-y0
100 val4 = val2*((2.0*val3/(1.0+(val3*val3)))**2)
101 v(i,j,k) = 2.0*val4*y*(-2.0*val1*tanh(val1*x)) * exp(-0.5*y*y)
105 end subroutine soliton_initialize_velocity