SCALE-RM
Functions/Subroutines
scale_ocean_phy_roughness_moon07 Module Reference

module ocean / physics / surface roughness length / moon07 More...

Functions/Subroutines

subroutine, public ocean_phy_roughness_moon07_setup
 
subroutine, public ocean_phy_roughness_moon07 (OIA, OIS, OIE, OJA, OJS, OJE, Uabs, Z1, mask, Z0M, Z0H, Z0E)
 

Detailed Description

module ocean / physics / surface roughness length / moon07

Description
surface roughness length Moon07 scheme IL-JU MOON, ISAAC GINIS, TETSU HARA, AND BIJU THOMAS, 2007: A Physics-Based Parameterization of Air-Sea Momentum Flux at High Wind Speeds and Its Impact on Hurricane Intensity Predictions, Mon. Wea. Rev., 135, 2869-2878
Author
Team SCALE
NAMELIST
  • PARAM_OCEAN_PHY_ROUGHNESS_MOON07
    nametypedefault valuecomment
    OCEAN_PHY_ROUGHNESS_MOON07_ITELIM integer 10 maximum iteration number

History Output
No history output

Function/Subroutine Documentation

◆ ocean_phy_roughness_moon07_setup()

subroutine, public scale_ocean_phy_roughness_moon07::ocean_phy_roughness_moon07_setup

Definition at line 51 of file scale_ocean_phy_roughness_moon07.F90.

51  use scale_prc, only: &
52  prc_abort
53  use scale_ocean_phy_roughness, only: &
55  implicit none
56 
57  namelist / param_ocean_phy_roughness_moon07 / &
58  ocean_phy_roughness_moon07_itelim
59 
60  integer :: ierr
61  !---------------------------------------------------------------------------
62 
63  ! common setup
65 
66  !--- read namelist
67  rewind(io_fid_conf)
68  read(io_fid_conf,nml=param_ocean_phy_roughness_moon07,iostat=ierr)
69  if( ierr < 0 ) then !--- missing
70  log_info("OCEAN_PHY_ROUGHNESS_moon07_setup",*) 'Not found namelist. Default used.'
71  elseif( ierr > 0 ) then !--- fatal error
72  log_error("OCEAN_PHY_ROUGHNESS_moon07_setup",*) 'Not appropriate names in namelist PARAM_OCEAN_PHY_ROUGHNESS_MOON07. Check!'
73  call prc_abort
74  endif
75  log_nml(param_ocean_phy_roughness_moon07)
76 
77  return

References scale_io::io_fid_conf, scale_ocean_phy_roughness::ocean_phy_roughness_setup(), and scale_prc::prc_abort().

Referenced by mod_ocean_driver::ocean_driver_setup().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ocean_phy_roughness_moon07()

subroutine, public scale_ocean_phy_roughness_moon07::ocean_phy_roughness_moon07 ( integer, intent(in)  OIA,
integer, intent(in)  OIS,
integer, intent(in)  OIE,
integer, intent(in)  OJA,
integer, intent(in)  OJS,
integer, intent(in)  OJE,
real(rp), dimension(oia,oja), intent(in)  Uabs,
real(rp), dimension (oia,oja), intent(in)  Z1,
logical, dimension(oia,oja), intent(in)  mask,
real(rp), dimension(oia,oja), intent(inout)  Z0M,
real(rp), dimension(oia,oja), intent(out)  Z0H,
real(rp), dimension(oia,oja), intent(out)  Z0E 
)

Definition at line 86 of file scale_ocean_phy_roughness_moon07.F90.

86  use scale_const, only: &
87  undef => const_undef, &
88  grav => const_grav, &
89  karman => const_karman
90  use scale_ocean_phy_roughness, only: &
96  implicit none
97  integer, intent(in) :: OIA, OIS, OIE
98  integer, intent(in) :: OJA, OJS, OJE
99 
100  real(RP), intent(in) :: Uabs(OIA,OJA) ! velocity at the lowest atomspheric layer [m/s]
101  real(RP), intent(in) :: Z1 (OIA,OJA) ! cell center height at the lowest atmospheric layer [m]
102  logical, intent(in) :: mask(OIA,OJA)
103 
104  real(RP), intent(inout) :: Z0M(OIA,OJA) ! roughness length for momentum [m]
105  real(RP), intent(out) :: Z0H(OIA,OJA) ! roughness length for heat [m]
106  real(RP), intent(out) :: Z0E(OIA,OJA) ! roughness length for vapor [m]
107 
108  ! works
109  real(RP) :: Ustar
110  real(RP) :: U10M
111 
112  integer :: ite
113  integer :: i, j
114  !---------------------------------------------------------------------------
115  !$acc data copyin(Uabs,Z1,mask) copyout(Z0H,Z0E) copy(Z0M)
116 
117  !$omp parallel do default(none) OMP_SCHEDULE_ &
118  !$omp shared(OJS,OJE,OIS,OIE, &
119  !$omp GRAV,UNDEF, &
120  !$omp OCEAN_PHY_ROUGHNESS_Z0M_min,OCEAN_PHY_ROUGHNESS_Z0H_min,OCEAN_PHY_ROUGHNESS_Z0E_min, &
121  !$omp OCEAN_PHY_ROUGHNESS_Ustar_min,OCEAN_PHY_ROUGHNESS_visck,OCEAN_PHY_ROUGHNESS_moon07_itelim, &
122  !$omp Z0M,Z0H,Z0E,Uabs,Z1,mask) &
123  !$omp private(i,j,ite,U10M,Ustar)
124  !$acc kernels
125  do j = ojs, oje
126  !$acc loop private(ite,U10M,Ustar)
127  do i = ois, oie
128  if ( mask(i,j) ) then
129 
130  z0m(i,j) = max( z0m(i,j), ocean_phy_roughness_z0m_min )
131 
132  !$acc loop seq
133  do ite = 1, ocean_phy_roughness_moon07_itelim
134  ustar = max( karman * uabs(i,j) / log( z1(i,j)/z0m(i,j) ), ocean_phy_roughness_ustar_min )
135  u10m = ustar / karman * log( 10.0_rp/z0m(i,j) )
136 
137  if ( u10m <= 12.5_rp ) then
138  z0m(i,j) = 0.0185_rp * ustar**2 / grav
139  else
140  z0m(i,j) = ( 0.085_rp * ( - 0.56_rp * ustar**2 &
141  + 20.255_rp * ustar &
142  + 2.458_rp ) &
143  - 0.58_rp ) * 1.0e-3_rp
144  end if
145  z0m(i,j) = max( z0m(i,j), ocean_phy_roughness_z0m_min )
146  enddo
147 
148  ! Fairall et al. TOGA V3.0
149  ! Fairall et al. (2003) JCLI, vol. 16, 571-591. Eq. (28)
150  z0h(i,j) = min( 5.5e-5_rp / ( z0m(i,j) * ustar / ocean_phy_roughness_visck )**0.6_rp, &
151  1.1e-4_rp )
152  z0e(i,j) = z0h(i,j)
153  z0h(i,j) = max( z0h(i,j), ocean_phy_roughness_z0h_min )
154  z0e(i,j) = max( z0e(i,j), ocean_phy_roughness_z0e_min )
155 
156  else
157  z0h(i,j) = undef
158  z0e(i,j) = undef
159  end if
160  enddo
161  enddo
162  !$acc end kernels
163 
164  !$acc end data
165  return

References scale_const::const_grav, scale_const::const_karman, scale_const::const_undef, scale_ocean_phy_roughness::ocean_phy_roughness_ustar_min, scale_ocean_phy_roughness::ocean_phy_roughness_visck, scale_ocean_phy_roughness::ocean_phy_roughness_z0e_min, scale_ocean_phy_roughness::ocean_phy_roughness_z0h_min, and scale_ocean_phy_roughness::ocean_phy_roughness_z0m_min.

Referenced by mod_ocean_driver::ocean_driver_calc_tendency().

Here is the caller graph for this function:
scale_const::const_grav
real(rp), public const_grav
standard acceleration of gravity [m/s2]
Definition: scale_const.F90:49
scale_prc::prc_abort
subroutine, public prc_abort
Abort Process.
Definition: scale_prc.F90:350
scale_ocean_phy_roughness::ocean_phy_roughness_setup
subroutine, public ocean_phy_roughness_setup
Definition: scale_ocean_phy_roughness.F90:63
scale_ocean_phy_roughness::ocean_phy_roughness_z0m_min
real(rp), public ocean_phy_roughness_z0m_min
Definition: scale_ocean_phy_roughness.F90:47
scale_ocean_phy_roughness::ocean_phy_roughness_ustar_min
real(rp), public ocean_phy_roughness_ustar_min
Definition: scale_ocean_phy_roughness.F90:46
scale_ocean_phy_roughness::ocean_phy_roughness_visck
real(rp), public ocean_phy_roughness_visck
Definition: scale_ocean_phy_roughness.F90:45
scale_ocean_phy_roughness::ocean_phy_roughness_z0h_min
real(rp), public ocean_phy_roughness_z0h_min
Definition: scale_ocean_phy_roughness.F90:48
scale_prc
module PROCESS
Definition: scale_prc.F90:11
scale_const
module CONSTANT
Definition: scale_const.F90:11
scale_ocean_phy_roughness
module ocean / physics / surface roughness length
Definition: scale_ocean_phy_roughness.F90:12
scale_const::const_karman
real(rp), parameter, public const_karman
von Karman constant
Definition: scale_const.F90:54
scale_const::const_undef
real(rp), public const_undef
Definition: scale_const.F90:43
scale_ocean_phy_roughness::ocean_phy_roughness_z0e_min
real(rp), public ocean_phy_roughness_z0e_min
Definition: scale_ocean_phy_roughness.F90:49