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 
85  !$omp parallel do private(am1,s)
86  do j = ojs, oje
87  do i = ois, oie
88  am1 = max( min( cossza(i,j), 0.961_rp ), 0.0349_rp )
89 ! tr1 = max( min( cosSZA(i,j) / ( 4.0_RP * tau(i,j) ), 1.0_RP ), 0.05_RP )
90 
91  s = 0.0_rp
92 !OCL UNROLL
93  do n = 1, 5
94  ! power of am1 is different form the paper, in which the number is wrong.
95 ! s = s + c_ocean_albedo(n,1) * tr1**(n-1) &
96 ! + c_ocean_albedo(n,2) * tr1**(n-1) * am1 &
97 ! + c_ocean_albedo(n,3) * tr1**(n-1) * am1**2
98  s = s + c_ocean_albedo(n,1) &
99  + c_ocean_albedo(n,2) * am1 &
100  + c_ocean_albedo(n,3) * am1**2
101  enddo
102 
103  sfc_albedo(i,j,i_r_direct ) = exp(s)
104  sfc_albedo(i,j,i_r_diffuse) = sfc_albedo(i,j,i_r_direct)
105  enddo
106  enddo
107 
108  return
109  end subroutine ocean_phy_albedo_nakajima00
110 
module ocean / physics / surface albedo / nakajima00
module coupler / surface-atmospehre
subroutine, public ocean_phy_albedo_nakajima00(OIA, OIS, OIE, OJA, OJS, OJE, cosSZA, SFC_albedo)
integer, parameter, public n_rad_dir
integer, parameter, public i_r_direct
module profiler
Definition: scale_prof.F90:11
module PRECISION
module STDIO
Definition: scale_io.F90:10
integer, parameter, public i_r_diffuse