Ignore:
Timestamp:
Mar 3, 2015 2:18:16 PM (9 years ago)
Author:
maronga
Message:

land surface model released

File:
1 edited

Legend:

Unmodified
Added
Removed
  • palm/trunk/SOURCE/radiation_model.f90

    r1497 r1551  
    2020! Current revisions:
    2121! -----------------
    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).
    2325!
    2426! Former revisions:
     
    4648    USE kinds
    4749
     50    USE netcdf_control,                                                        &
     51        ONLY:  dots_label, dots_num, dots_unit
     52
    4853
    4954    IMPLICIT NONE
    5055
     56    CHARACTER(10) :: radiation_scheme = 'clear-sky' ! 'constant', 'clear-sky', or 'rrtm'
     57
    5158    INTEGER(iwp) :: i, j, k
    5259
    5360
    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
    5564
    5665    LOGICAL :: radiation = .FALSE.  !: flag parameter indicating wheather the radiation model is used
     
    6170 
    6271    REAL(wp) :: albedo = 0.2_wp,             & !: NAMELIST alpha
    63                 dt_radiation = 9999999.9_wp, &
     72                dt_radiation = 0.0_wp,       & !: radiation model timestep
    6473                exn,                         & !: Exner function
    6574                lon = 0.0_wp,                & !: longitude in radians
     
    6978                decl_3,                      & !: declination coef. 3
    7079                time_utc,                    & !: current time in UTC
    71                 time_utc_init = 0.0_wp,      & !: UTC time at model start
     80                time_utc_init = 43200.0_wp,  & !: UTC time at model start (noon)
    7281                day,                         & !: current day of the year
    7382                lambda = 0.0_wp,             & !: longitude in degrees
    7483                declination,                 & !: solar declination angle
     84                net_radiation = 0.0_wp,      & !: net radiation at surface
    7585                hour_angle,                  & !: solar hour angle
    7686                time_radiation = 0.0_wp,     &
     
    8090    REAL(wp), DIMENSION(:,:), ALLOCATABLE :: &
    8191                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
    8799
    88100
     
    91103    END INTERFACE init_radiation
    92104
    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
    96117
    97118    SAVE
     
    99120    PRIVATE
    100121
    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
    104127
    105128
     
    118141
    119142       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
    125154
    126155       alpha = albedo
    127156
    128157!
     158!--    Fix net radiation in case of radiation_scheme = 'constant'
     159       IF ( irad_scheme == 0 )  THEN
     160          rad_net = net_radiation
     161!
    129162!--    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
    138180
    139181       RETURN
     
    147189!-- A simple clear sky radiation model
    148190!------------------------------------------------------------------------------!
    149     SUBROUTINE lsm_radiation
     191    SUBROUTINE radiation_clearsky
    150192   
    151193
     
    167209!
    168210!--    Calculate zenith angle
    169        zenith = SIN(lat)*SIN(declination) + COS(lat) * COS(declination)        &
     211       zenith = SIN(lat) * SIN(declination) + COS(lat) * COS(declination)       &
    170212                                            * COS(hour_angle)
    171213       zenith = MAX(0.0_wp,zenith)
     
    180222
    181223!
    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
    183226       DO i = nxlg, nxrg
    184227          DO j = nysg, nyng
    185228
    186229             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)
    192236
    193237          ENDDO
     
    196240       RETURN
    197241
    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
    201264
    202265 END MODULE radiation_model_mod
Note: See TracChangeset for help on using the changeset viewer.