Changeset 1551 for palm/trunk/SOURCE/radiation_model.f90
- Timestamp:
- Mar 3, 2015 2:18:16 PM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/radiation_model.f90
r1497 r1551 20 20 ! Current revisions: 21 21 ! ----------------- 22 ! 22 ! Added support for data output. Various variables have been renamed. Added 23 ! interface for different radiation schemes (currently: clear-sky, constant, and 24 ! RRTM (not yet implemented). 23 25 ! 24 26 ! Former revisions: … … 46 48 USE kinds 47 49 50 USE netcdf_control, & 51 ONLY: dots_label, dots_num, dots_unit 52 48 53 49 54 IMPLICIT NONE 50 55 56 CHARACTER(10) :: radiation_scheme = 'clear-sky' ! 'constant', 'clear-sky', or 'rrtm' 57 51 58 INTEGER(iwp) :: i, j, k 52 59 53 60 54 INTEGER(iwp) :: day_init = 1 !: day of the year at model start 61 INTEGER(iwp) :: day_init = 172, & !: day of the year at model start (21/06) 62 dots_rad = 0, & !: starting index for timeseries output 63 irad_scheme = 0 55 64 56 65 LOGICAL :: radiation = .FALSE. !: flag parameter indicating wheather the radiation model is used … … 61 70 62 71 REAL(wp) :: albedo = 0.2_wp, & !: NAMELIST alpha 63 dt_radiation = 9999999.9_wp, &72 dt_radiation = 0.0_wp, & !: radiation model timestep 64 73 exn, & !: Exner function 65 74 lon = 0.0_wp, & !: longitude in radians … … 69 78 decl_3, & !: declination coef. 3 70 79 time_utc, & !: current time in UTC 71 time_utc_init = 0.0_wp, & !: UTC time at model start80 time_utc_init = 43200.0_wp, & !: UTC time at model start (noon) 72 81 day, & !: current day of the year 73 82 lambda = 0.0_wp, & !: longitude in degrees 74 83 declination, & !: solar declination angle 84 net_radiation = 0.0_wp, & !: net radiation at surface 75 85 hour_angle, & !: solar hour angle 76 86 time_radiation = 0.0_wp, & … … 80 90 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: & 81 91 alpha, & !: surface albedo 82 Rn, & !: net radiation at the surface 83 LW_in, & !: incoming longwave radiation 84 LW_out, & !: outgoing longwave radiation 85 SW_in, & !: incoming shortwave radiation 86 SW_out !: outgoing shortwave radiation 92 rad_net, & !: net radiation at the surface 93 rad_net_av, & !: average of rad_net 94 rad_lw_in, & !: incoming longwave radiation 95 rad_lw_out, & !: outgoing longwave radiation 96 rad_sw_in, & !: incoming shortwave radiation 97 rad_sw_in_av, & !: average of rad_sw_in 98 rad_sw_out !: outgoing shortwave radiation 87 99 88 100 … … 91 103 END INTERFACE init_radiation 92 104 93 INTERFACE lsm_radiation 94 MODULE PROCEDURE lsm_radiation 95 END INTERFACE lsm_radiation 105 INTERFACE radiation_clearsky 106 MODULE PROCEDURE radiation_clearsky 107 END INTERFACE radiation_clearsky 108 109 INTERFACE radiation_constant 110 MODULE PROCEDURE radiation_constant 111 END INTERFACE radiation_constant 112 113 INTERFACE radiation_rrtm 114 MODULE PROCEDURE radiation_rrtm 115 END INTERFACE radiation_rrtm 116 96 117 97 118 SAVE … … 99 120 PRIVATE 100 121 101 PUBLIC albedo, day_init, dt_radiation, init_radiation, lambda, & 102 lsm_radiation, Rn, radiation, SW_in, sigma_SB, time_radiation, & 103 time_utc_init 122 PUBLIC albedo, day_init, dots_rad, dt_radiation, init_radiation, & 123 irad_scheme, lambda, net_radiation, rad_net, rad_net_av, radiation, & 124 radiation_clearsky, radiation_constant, radiation_rrtm, & 125 radiation_scheme, rad_sw_in, rad_sw_in_av, sigma_SB, & 126 time_radiation, time_utc_init 104 127 105 128 … … 118 141 119 142 ALLOCATE ( alpha(nysg:nyng,nxlg:nxrg) ) 120 ALLOCATE ( Rn(nysg:nyng,nxlg:nxrg) ) 121 ALLOCATE ( LW_in(nysg:nyng,nxlg:nxrg) ) 122 ALLOCATE ( LW_out(nysg:nyng,nxlg:nxrg) ) 123 ALLOCATE ( SW_in(nysg:nyng,nxlg:nxrg) ) 124 ALLOCATE ( SW_out(nysg:nyng,nxlg:nxrg) ) 143 ALLOCATE ( rad_net(nysg:nyng,nxlg:nxrg) ) 144 ALLOCATE ( rad_lw_in(nysg:nyng,nxlg:nxrg) ) 145 ALLOCATE ( rad_lw_out(nysg:nyng,nxlg:nxrg) ) 146 ALLOCATE ( rad_sw_in(nysg:nyng,nxlg:nxrg) ) 147 ALLOCATE ( rad_sw_out(nysg:nyng,nxlg:nxrg) ) 148 149 rad_sw_in = 0.0_wp 150 rad_sw_out = 0.0_wp 151 rad_lw_in = 0.0_wp 152 rad_lw_out = 0.0_wp 153 rad_net = 0.0_wp 125 154 126 155 alpha = albedo 127 156 128 157 ! 158 !-- Fix net radiation in case of radiation_scheme = 'constant' 159 IF ( irad_scheme == 0 ) THEN 160 rad_net = net_radiation 161 ! 129 162 !-- Calculate radiation scheme constants 130 decl_1 = SIN(23.45_wp * pi / 180.0_wp) 131 decl_2 = 2.0 * pi / 365.0_wp 132 decl_3 = decl_2 * 81.0_wp 133 134 ! 135 !-- Calculate latitude and longitude angles (lat and lon, respectively) 136 lat = phi * pi / 180.0_wp 137 lon = lambda * pi / 180.0_wp 163 ELSEIF ( irad_scheme == 1 .OR. irad_scheme == 2 ) THEN 164 decl_1 = SIN(23.45_wp * pi / 180.0_wp) 165 decl_2 = 2.0_wp * pi / 365.0_wp 166 decl_3 = decl_2 * 81.0_wp 167 ! 168 !-- Calculate latitude and longitude angles (lat and lon, respectively) 169 lat = phi * pi / 180.0_wp 170 lon = lambda * pi / 180.0_wp 171 ENDIF 172 ! 173 !-- Add timeseries for radiation model 174 dots_label(dots_num+1) = "rad_net" 175 dots_label(dots_num+2) = "rad_sw_in" 176 dots_unit(dots_num+1:dots_num+2) = "W/m2" 177 178 dots_rad = dots_num + 1 179 dots_num = dots_num + 2 138 180 139 181 RETURN … … 147 189 !-- A simple clear sky radiation model 148 190 !------------------------------------------------------------------------------! 149 SUBROUTINE lsm_radiation191 SUBROUTINE radiation_clearsky 150 192 151 193 … … 167 209 ! 168 210 !-- Calculate zenith angle 169 zenith = SIN(lat) *SIN(declination) + COS(lat) * COS(declination)&211 zenith = SIN(lat) * SIN(declination) + COS(lat) * COS(declination) & 170 212 * COS(hour_angle) 171 213 zenith = MAX(0.0_wp,zenith) … … 180 222 181 223 ! 182 !-- Calculate radiation fluxes and net radiation (Rn) for each grid point 224 !-- Calculate radiation fluxes and net radiation (rad_net) for each grid 225 !-- point 183 226 DO i = nxlg, nxrg 184 227 DO j = nysg, nyng 185 228 186 229 k = nzb_s_inner(j,i) 187 SW_in(j,i) = SW_0 * sky_trans * zenith 188 SW_out(j,i) = - alpha(j,i) * SW_in(j,i) 189 LW_out(j,i) = - sigma_SB * (pt(k,j,i) * exn)**4 190 LW_in(j,i) = 0.8 * sigma_SB * (pt(k+1,j,i) * exn)**4 191 Rn(j,i) = SW_in(j,i) + SW_out(j,i) + LW_in(j,i) + LW_out(j,i) 230 rad_sw_in(j,i) = SW_0 * sky_trans * zenith 231 rad_sw_out(j,i) = - alpha(j,i) * rad_sw_in(j,i) 232 rad_lw_out(j,i) = - sigma_SB * (pt(k,j,i) * exn)**4 233 rad_lw_in(j,i) = 0.8_wp * sigma_SB * (pt(k+1,j,i) * exn)**4 234 rad_net(j,i) = rad_sw_in(j,i) + rad_sw_out(j,i) & 235 + rad_lw_in(j,i) + rad_lw_out(j,i) 192 236 193 237 ENDDO … … 196 240 RETURN 197 241 198 END SUBROUTINE lsm_radiation 199 200 242 END SUBROUTINE radiation_clearsky 243 244 !------------------------------------------------------------------------------! 245 ! Description: 246 ! ------------ 247 !-- Prescribed net radiation 248 !------------------------------------------------------------------------------! 249 SUBROUTINE radiation_constant 250 251 rad_net = net_radiation 252 253 END SUBROUTINE radiation_constant 254 255 !------------------------------------------------------------------------------! 256 ! Description: 257 ! ------------ 258 !-- Implementation of the RRTM radiation_scheme 259 !------------------------------------------------------------------------------! 260 SUBROUTINE radiation_rrtm 261 262 263 END SUBROUTINE radiation_rrtm 201 264 202 265 END MODULE radiation_model_mod
Note: See TracChangeset
for help on using the changeset viewer.