SCALE-RM
scale_ocean_phy_albedo_nakajima00.F90
Go to the documentation of this file.
1 !-------------------------------------------------------------------------------
13 !-------------------------------------------------------------------------------
14 #include "scalelib.h"
16  !-----------------------------------------------------------------------------
17  !
18  !++ used modules
19  !
20  use scale_precision
21  use scale_io
22  use scale_prof
23  !-----------------------------------------------------------------------------
24  implicit none
25  private
26  !-----------------------------------------------------------------------------
27  !
28  !++ Public procedure
29  !
32 
33  !-----------------------------------------------------------------------------
34  !
35  !++ Public parameters & variables
36  !
37  !-----------------------------------------------------------------------------
38  !
39  !++ Private procedure
40  !
41  !-----------------------------------------------------------------------------
42  !
43  !++ Private parameters & variables
44  !
45  !-----------------------------------------------------------------------------
46 contains
47 
49 
50  log_newline
51  log_info("OCEAN_PHY_ALBEDO_nakajima00_setup",*) 'Setup'
52 
53  return
55 
56  !-----------------------------------------------------------------------------
57  subroutine ocean_phy_albedo_nakajima00( &
58  OIA, OIS, OIE, &
59  OJA, OJS, OJE, &
60  cosSZA, &
61 ! tau, &
62  SFC_albedo )
64  implicit none
65 
66  integer, intent(in) :: oia, ois, oie
67  integer, intent(in) :: oja, ojs, oje
68  real(rp), intent(in) :: cossza (oia,oja) ! cos(solar zenith angle) (0-1)
69 ! real(RP), intent(in) :: tau (OIA,OJA) ! cloud optical thickness
70  real(rp), intent(out) :: sfc_albedo(oia,oja,n_rad_dir) ! sea surface albedo (short wave) (0-1)
71 
72  real(rp), parameter :: c_ocean_albedo(5,3) = reshape( &
73  (/ -2.8108_rp , -1.3651_rp, 2.9210e1_rp, -4.3907e1_rp, 1.8125e1_rp, &
74  6.5626e-1_rp, -8.7253_rp, -2.7749e1_rp, 4.9486e1_rp, -1.8345e1_rp, &
75  -6.5423e-1_rp, 9.9967_rp, 2.7769_rp , -1.7620e1_rp, 7.0838_rp /), &
76  (/ 5,3 /) )
77 
78  real(rp) :: am1
79 ! real(RP) :: tr1
80  real(rp) :: s
81 
82  integer :: i, j, n
83  !---------------------------------------------------------------------------
84  !$acc data copyin(cosSZA) copyout(SFC_albedo)
85 
86  !$acc kernels
87  !$omp parallel do private(am1,s)
88  do j = ojs, oje
89  do i = ois, oie
90  am1 = max( min( cossza(i,j), 0.961_rp ), 0.0349_rp )
91 ! tr1 = max( min( cosSZA(i,j) / ( 4.0_RP * tau(i,j) ), 1.0_RP ), 0.05_RP )
92 
93  s = 0.0_rp
94 !OCL UNROLL
95  !$acc loop seq
96  do n = 1, 5
97  ! power of am1 is different form the paper, in which the number is wrong.
98 ! s = s + c_ocean_albedo(n,1) * tr1**(n-1) &
99 ! + c_ocean_albedo(n,2) * tr1**(n-1) * am1 &
100 ! + c_ocean_albedo(n,3) * tr1**(n-1) * am1**2
101  s = s + c_ocean_albedo(n,1) &
102  + c_ocean_albedo(n,2) * am1 &
103  + c_ocean_albedo(n,3) * am1**2
104  enddo
105 
106  sfc_albedo(i,j,i_r_direct ) = exp(s)
107  sfc_albedo(i,j,i_r_diffuse) = sfc_albedo(i,j,i_r_direct)
108  enddo
109  enddo
110  !$acc end kernels
111 
112  !$acc end data
113  return
114  end subroutine ocean_phy_albedo_nakajima00
115 
scale_cpl_sfc_index::n_rad_dir
integer, parameter, public n_rad_dir
Definition: scale_cpl_sfc_index.F90:36
scale_cpl_sfc_index::i_r_direct
integer, parameter, public i_r_direct
Definition: scale_cpl_sfc_index.F90:37
scale_cpl_sfc_index::i_r_diffuse
integer, parameter, public i_r_diffuse
Definition: scale_cpl_sfc_index.F90:38
scale_precision
module PRECISION
Definition: scale_precision.F90:14
scale_ocean_phy_albedo_nakajima00::ocean_phy_albedo_nakajima00_setup
subroutine, public ocean_phy_albedo_nakajima00_setup
Definition: scale_ocean_phy_albedo_nakajima00.F90:49
scale_ocean_phy_albedo_nakajima00
module ocean / physics / surface albedo / nakajima00
Definition: scale_ocean_phy_albedo_nakajima00.F90:15
scale_precision::rp
integer, parameter, public rp
Definition: scale_precision.F90:41
scale_io
module STDIO
Definition: scale_io.F90:10
scale_ocean_phy_albedo_nakajima00::ocean_phy_albedo_nakajima00
subroutine, public ocean_phy_albedo_nakajima00(OIA, OIS, OIE, OJA, OJS, OJE, cosSZA, SFC_albedo)
Definition: scale_ocean_phy_albedo_nakajima00.F90:63
scale_prof
module profiler
Definition: scale_prof.F90:11
scale_cpl_sfc_index
module coupler / surface-atmospehre
Definition: scale_cpl_sfc_index.F90:11