MOM6
soliton_initialization Module Reference

Detailed Description

Initial conditions for the Equatorial Rossby soliton test (Boyd).

Description of the equatorial Rossby soliton initial

conditions

Functions/Subroutines

subroutine, public soliton_initialize_thickness (h, G, GV, US)
 Initialization of thicknesses in Equatorial Rossby soliton test. More...
 
subroutine, public soliton_initialize_velocity (u, v, h, G)
 Initialization of u and v in the equatorial Rossby soliton test. More...
 

Variables

character(len=40) mdl = "soliton_initialization"
 This module's name.
 

Function/Subroutine Documentation

◆ soliton_initialize_thickness()

subroutine, public soliton_initialization::soliton_initialize_thickness ( real, dimension(szi_(g),szj_(g),szk_(gv)), intent(out)  h,
type(ocean_grid_type), intent(in)  G,
type(verticalgrid_type), intent(in)  GV,
type(unit_scale_type), intent(in)  US 
)

Initialization of thicknesses in Equatorial Rossby soliton test.

Parameters
[in]gThe ocean's grid structure.
[in]gvThe ocean's vertical grid structure.
[in]usA dimensional unit scaling type
[out]hThe thickness that is being initialized [H ~> m or kg m-2].

Definition at line 32 of file soliton_initialization.F90.

32  type(ocean_grid_type), intent(in) :: G !< The ocean's grid structure.
33  type(verticalGrid_type), intent(in) :: GV !< The ocean's vertical grid structure.
34  type(unit_scale_type), intent(in) :: US !< A dimensional unit scaling type
35  real, dimension(SZI_(G),SZJ_(G),SZK_(GV)), &
36  intent(out) :: h !< The thickness that is being initialized [H ~> m or kg m-2].
37 
38  integer :: i, j, k, is, ie, js, je, nz
39  real :: x, y, x0, y0
40  real :: val1, val2, val3, val4
41  character(len=40) :: verticalCoordinate
42 
43  is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = g%ke
44 
45  call mom_mesg("soliton_initialization.F90, soliton_initialize_thickness: setting thickness")
46 
47  x0 = 2.0*g%len_lon/3.0
48  y0 = 0.0
49  val1 = 0.395
50  val2 = us%m_to_Z * 0.771*(val1*val1)
51 
52  do j = g%jsc,g%jec ; do i = g%isc,g%iec
53  do k = 1, nz
54  x = g%geoLonT(i,j)-x0
55  y = g%geoLatT(i,j)-y0
56  val3 = exp(-val1*x)
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))
59  enddo
60  enddo ; enddo
61 

◆ soliton_initialize_velocity()

subroutine, public soliton_initialization::soliton_initialize_velocity ( real, dimension(szib_(g),szj_(g),szk_(g)), intent(out)  u,
real, dimension(szi_(g),szjb_(g),szk_(g)), intent(out)  v,
real, dimension(szi_(g),szj_(g), szk_(g)), intent(in)  h,
type(ocean_grid_type), intent(in)  G 
)

Initialization of u and v in the equatorial Rossby soliton test.

Parameters
[in]gGrid structure
[out]ui-component of velocity [m s-1]
[out]vj-component of velocity [m s-1]
[in]hThickness [H ~> m or kg m-2]

Definition at line 67 of file soliton_initialization.F90.

67  type(ocean_grid_type), intent(in) :: G !< Grid structure
68  real, dimension(SZIB_(G),SZJ_(G),SZK_(G)), intent(out) :: u !< i-component of velocity [m s-1]
69  real, dimension(SZI_(G),SZJB_(G),SZK_(G)), intent(out) :: v !< j-component of velocity [m s-1]
70  real, dimension(SZI_(G),SZJ_(G), SZK_(G)), intent(in) :: h !< Thickness [H ~> m or kg m-2]
71 
72  real :: x, y, x0, y0
73  real :: val1, val2, val3, val4
74  integer :: i, j, k, is, ie, js, je, nz
75 
76  is = g%isc ; ie = g%iec ; js = g%jsc ; je = g%jec ; nz = g%ke
77 
78  x0 = 2.0*g%len_lon/3.0
79  y0 = 0.0
80  val1 = 0.395
81  val2 = 0.771*(val1*val1)
82 
83  v(:,:,:) = 0.0
84  u(:,:,:) = 0.0
85 
86  do j = g%jsc,g%jec ; do i = g%isc-1,g%iec+1
87  do k = 1, nz
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
90  val3 = exp(-val1*x)
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)
93  enddo
94  enddo ; enddo
95  do j = g%jsc-1,g%jec+1 ; do i = g%isc,g%iec
96  do k = 1, nz
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
99  val3 = exp(-val1*x)
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)
102  enddo
103  enddo ; enddo
104