Ignore:
Timestamp:
Sep 24, 2018 3:42:55 PM (6 years ago)
Author:
knoop
Message:

Modularization of all bulk cloud physics code components

File:
1 edited

Legend:

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

    r3271 r3274  
    2525! -----------------
    2626! $Id$
     27! Modularization of all bulk cloud physics code components
     28!
     29! 3271 2018-09-24 08:20:34Z suehring
    2730! Several bugfixes:
    2831! - Initialization of pt_surface array with soil temperature in the uppermost
     
    474477 
    475478    USE arrays_3d,                                                             &
    476         ONLY:  hyp, pt, prr, q, q_p, ql, vpt, u, v, w
     479        ONLY:  hyp, pt, prr, q, q_p, ql, vpt, u, v, w, hyrho, exner, d_exner
     480
     481    USE basic_constants_and_equations_mod,                                     &
     482        ONLY:  c_p, g, lv_d_cp, l_v, magnus, rho_l, r_d, r_v
    477483
    478484    USE calc_mean_profile_mod,                                                 &
    479485        ONLY:  calc_mean_profile
    480486
    481     USE cloud_parameters,                                                      &
    482         ONLY:  cp, hyrho, l_d_cp, l_d_r, l_v, pt_d_t, rho_l, r_d, r_v
    483 
    484487    USE control_parameters,                                                    &
    485         ONLY:  cloud_droplets, cloud_physics, coupling_start_time, dt_3d,      &
     488        ONLY:  cloud_droplets, coupling_start_time, dt_3d,      &
    486489               end_time, humidity, intermediate_timestep_count,                &
    487490               initializing_actions, intermediate_timestep_count_max,          &
    488                land_surface, max_masks, precipitation, pt_surface,             &
     491               land_surface, max_masks, pt_surface,             &
    489492               rho_surface, spinup, spinup_pt_mean, spinup_time,               &
    490493               surface_pressure, timestep_scheme, tsc,                         &
     
    493496    USE indices,                                                               &
    494497        ONLY:  nbgp, nxl, nxlg, nxr, nxrg, nyn, nyng, nys, nysg, nzb
     498
     499    USE bulk_cloud_model_mod,                                                  &
     500        ONLY: bulk_cloud_model, precipitation
    495501
    496502    USE netcdf_data_input_mod,                                                 &
     
    584590                deep_soil_temperature =  9999999.9_wp,  & !< Deep soil temperature (bottom boundary condition)
    585591                drho_l_lv,                              & !< (rho_l * l_v)**-1
    586                 exn,                                    & !< value of the Exner function
    587592                field_capacity = 9999999.9_wp,          & !< NAMELIST m_fc
    588593                f_shortwave_incoming = 9999999.9_wp,    & !< NAMELIST f_sw_in
     
    604609                rho_cp,                                 & !< rho_surface * cp
    605610                rho_lv,                                 & !< rho_ocean * l_v
    606                 rd_d_rv,                                & !< r_d / r_v
    607611                saturation_moisture = 9999999.9_wp,     & !< NAMELIST m_sat
    608612                skip_time_do_lsm = 0.0_wp,              & !< LSM is not called before this time
     
    17341738 SUBROUTINE lsm_energy_balance( horizontal, l )
    17351739
    1736     USE diagnostic_quantities_mod,                                             &
    1737         ONLY:  magnus
    1738 
    17391740    USE pegrid
    17401741
     
    18161817    j_off = surf%joff
    18171818    i_off = surf%ioff
    1818    
    1819 !
    1820 !-- Calculate the exner function for the current time step
    1821     exn = ( surface_pressure / 1000.0_wp )**0.286_wp
    18221819
    18231820    DO  m = 1, surf%ns
     
    18891886!--    time step is used here. Note that this formulation is the
    18901887!--    equivalent to the ECMWF formulation using drag coefficients
    1891 !        IF ( cloud_physics )  THEN
    1892 !           pt1 = pt(k,j,i) + l_d_cp * pt_d_t(k) * ql(k,j,i)
     1888!        IF ( bulk_cloud_model )  THEN
     1889!           pt1 = pt(k,j,i) + lv_d_cp * d_exner(k) * ql(k,j,i)
    18931890!           qv1 = q(k,j,i) - ql(k,j,i)
    18941891!        ELSEIF ( cloud_droplets ) THEN
    1895 !           pt1 = pt(k,j,i) + l_d_cp * pt_d_t(k) * ql(k,j,i)
     1892!           pt1 = pt(k,j,i) + lv_d_cp * d_exner(k) * ql(k,j,i)
    18961893!           qv1 = q(k,j,i)
    18971894!        ELSE
     
    20972094!--       Denominator of the prognostic equation
    20982095          coef_2 = surf%rad_lw_out_change_0(m) + f_qsws * dq_s_dt              &
    2099                    + lambda_surface + f_shf / exn
     2096                   + lambda_surface + f_shf / exner(nzb)
    21002097       ELSE
    21012098!
     
    21072104!
    21082105!--       Denominator of the prognostic equation
    2109           coef_2 = surf%rad_lw_out_change_0(m) + lambda_surface + f_shf / exn
     2106          coef_2 = surf%rad_lw_out_change_0(m) + lambda_surface + f_shf / exner(nzb)
    21102107
    21112108       ENDIF
     
    21602157
    21612158
    2162 !        pt(k+k_off,j+j_off,i+i_off) = surf_t_surface_p%var_1d(m) / exn  !is actually no air temperature
    2163        surf%pt_surface(m)          = surf_t_surface_p%var_1d(m) / exn
     2159!        pt(k+k_off,j+j_off,i+i_off) = surf_t_surface_p%var_1d(m) / exner(nzb)  !is actually no air temperature
     2160       surf%pt_surface(m)          = surf_t_surface_p%var_1d(m) / exner(nzb)
    21642161
    21652162!
     
    21772174                                             - surf_t_soil%var_2d(nzb_soil,m) )
    21782175
    2179        surf%shf(m) = - f_shf * ( surf%pt1(m) - surf%pt_surface(m) ) / cp
     2176       surf%shf(m) = - f_shf * ( surf%pt1(m) - surf%pt_surface(m) ) / c_p
    21802177
    21812178       IF ( humidity )  THEN
     
    23302327    SUBROUTINE calc_q_surface
    23312328
    2332        USE diagnostic_quantities_mod
    2333 
    23342329       IMPLICIT NONE
    23352330
    2336        REAL(wp) :: resistance    !< aerodynamic and soil resistance term
     2331       REAL(wp) ::  e_s           !< saturation water vapor pressure
     2332       REAL(wp) ::  q_s           !< saturation mixing ratio
     2333       REAL(wp) ::  resistance    !< aerodynamic and soil resistance term
    23372334
    23382335       DO  m = 1, surf%ns
     
    23532350!
    23542351!--       Calculate mixing ratio at surface
    2355           IF ( cloud_physics )  THEN
     2352          IF ( bulk_cloud_model )  THEN
    23562353             q(k+k_off,j+j_off,i+i_off) = resistance * q_s +                   &
    23572354                                        ( 1.0_wp - resistance ) *              &
     
    24712468!------------------------------------------------------------------------------!
    24722469    SUBROUTINE lsm_init
    2473    
     2470
    24742471       USE control_parameters,                                                 &
    24752472           ONLY:  message_string
     
    25012498       REAL(wp), DIMENSION(:), ALLOCATABLE ::  bound, bound_root_fr  !< temporary arrays for storing index bounds
    25022499       REAL(wp), DIMENSION(:), ALLOCATABLE ::  pr_soil_init !< temporary array used for averaging soil profiles
    2503 
    2504 !
    2505 !--    Calculate Exner function
    2506        exn = ( surface_pressure / 1000.0_wp )**0.286_wp
    25072500!
    25082501!--    If no cloud physics is used, rho_surface has not been calculated before
    2509        IF (  .NOT.  cloud_physics  .AND.  .NOT.  cloud_droplets )  THEN
     2502       IF (  .NOT.  bulk_cloud_model  .AND.  .NOT.  cloud_droplets )  THEN
    25102503          CALL calc_mean_profile( pt, 4 )
    2511           rho_surface = surface_pressure * 100.0_wp / ( r_d * hom(topo_min_level+1,1,4,0) * exn )
     2504          rho_surface = hyp(nzb) / ( r_d * hom(topo_min_level+1,1,4,0) * exner(nzb) )
    25122505       ENDIF
    25132506
    25142507!
    25152508!--    Calculate frequently used parameters
    2516        rho_cp    = cp * rho_surface
    2517        rd_d_rv   = r_d / r_v
     2509       rho_cp    = c_p * rho_surface
    25182510       rho_lv    = rho_surface * l_v
    25192511       drho_l_lv = 1.0_wp / (rho_l * l_v)
     
    44514443!--          uppermost layer
    44524444             t_surface_h%var_1d(m)    = t_soil_h%var_2d(nzb_soil,m)
    4453              surf_lsm_h%pt_surface(m) = t_soil_h%var_2d(nzb_soil,m) / exn
     4445             surf_lsm_h%pt_surface(m) = t_soil_h%var_2d(nzb_soil,m) / exner(nzb)
    44544446             
    4455              IF ( cloud_physics  .OR. cloud_droplets ) THEN
    4456                 surf_lsm_h%pt1(m) = pt(k,j,i) + l_d_cp * pt_d_t(k) * ql(k,j,i)
     4447             IF ( bulk_cloud_model  .OR. cloud_droplets ) THEN
     4448                surf_lsm_h%pt1(m) = pt(k,j,i) + lv_d_cp * d_exner(k) * ql(k,j,i)
    44574449             ELSE
    44584450                surf_lsm_h%pt1(m) = pt(k,j,i)
     
    44804472!--             uppermost layer
    44814473                t_surface_v(l)%var_1d(m)      = t_soil_v(l)%var_2d(nzb_soil,m)
    4482                 surf_lsm_v(l)%pt_surface(m)   = t_soil_v(l)%var_2d(nzb_soil,m) / exn
    4483 
    4484                 IF ( cloud_physics  .OR. cloud_droplets ) THEN
    4485                    surf_lsm_v(l)%pt1(m) = pt(k,j,i) + l_d_cp * pt_d_t(k) * ql(k,j,i)
     4474                surf_lsm_v(l)%pt_surface(m)   = t_soil_v(l)%var_2d(nzb_soil,m) / exner(nzb)
     4475
     4476                IF ( bulk_cloud_model  .OR. cloud_droplets ) THEN
     4477                   surf_lsm_v(l)%pt1(m) = pt(k,j,i) + lv_d_cp * d_exner(k) * ql(k,j,i)
    44864478                ELSE
    44874479                   surf_lsm_v(l)%pt1(m) = pt(k,j,i)
     
    70787070
    70797071       USE control_parameters,                                                 &
    7080            ONLY: g, message_string, molecular_viscosity
     7072           ONLY: message_string, molecular_viscosity
    70817073
    70827074       IMPLICIT NONE
Note: See TracChangeset for help on using the changeset viewer.