Changeset 4342


Ignore:
Timestamp:
Dec 16, 2019 1:49:14 PM (5 years ago)
Author:
Giersch
Message:

last commit corrected by replacing read_from_file_3d with read_from_file in all relevant p3d files, minor changes in plant_canopy_model_mod (use statements moved to module level, ocean dependency removed, redundant variables removed)

Location:
palm/trunk
Files:
5 edited

Legend:

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

    r4341 r4342  
    2727! -----------------
    2828! $Id$
     29! Use statements moved to module level, ocean dependency removed, redundant
     30! variables removed
     31!
     32! 4341 2019-12-16 10:43:49Z motisi
    2933! - Unification of variable names: pc_-variables now pcm_-variables
    3034!   (pc_latent_rate, pc_heating_rate, pc_transpiration_rate)
     
    134138    USE basic_constants_and_equations_mod,                                     &
    135139        ONLY:  c_p, degc_to_k, l_v, lv_d_cp, r_d, rd_d_rv
     140       
     141    USE bulk_cloud_model_mod,                                                  &
     142        ONLY: bulk_cloud_model, microphysics_seifert
    136143
    137144    USE control_parameters,                                                    &
    138         ONLY: debug_output, humidity
     145        ONLY: average_count_3d, coupling_char, debug_output, dt_3d, dz,        &
     146              humidity, message_string, ocean_mode, passive_scalar,            &
     147              plant_canopy, urban_surface
     148             
     149    USE grid_variables,                                                        &
     150        ONLY:  dx, dy
    139151
    140152    USE indices,                                                               &
     
    143155
    144156    USE kinds
     157   
     158    USE netcdf_data_input_mod,                                                 &
     159        ONLY:  input_pids_static, leaf_area_density_f
    145160
    146161    USE pegrid
     162       
     163    USE surface_mod,                                                           &
     164        ONLY: surf_def_h, surf_lsm_h, surf_usm_h
    147165
    148166
    149167    IMPLICIT NONE
    150 
    151168
    152169    CHARACTER (LEN=30)   ::  canopy_mode = 'homogeneous'           !< canopy coverage
     
    165182    REAL(wp) ::  beta_lad = 9999999.9_wp          !< coefficient for lad calculation
    166183    REAL(wp) ::  canopy_drag_coeff = 0.0_wp       !< canopy drag coefficient (parameter)
    167     REAL(wp) ::  cdc = 0.0_wp                     !< canopy drag coeff. (abbreviation used in equations)
    168184    REAL(wp) ::  cthf = 0.0_wp                    !< canopy top heat flux
    169185    REAL(wp) ::  dt_plant_canopy = 0.0_wp         !< timestep account. for canopy drag
     
    173189    REAL(wp) ::  leaf_scalar_exch_coeff = 0.0_wp  !< canopy scalar exchange coeff.
    174190    REAL(wp) ::  leaf_surface_conc = 0.0_wp       !< leaf surface concentration
    175     REAL(wp) ::  lsc = 0.0_wp                     !< leaf surface concentration
    176     REAL(wp) ::  lsec = 0.0_wp                    !< leaf scalar exchange coeff.
    177191
    178192    REAL(wp) ::  lad_vertical_gradient(10) = 0.0_wp              !< lad gradient
     
    197211    SAVE
    198212
    199 
    200213    PRIVATE
    201  
     214   
    202215!
    203216!-- Public functions
     
    209222!
    210223!-- Public variables and constants
    211     PUBLIC cdc, pcm_heating_rate, pcm_transpiration_rate, pcm_latent_rate,    &
    212            canopy_mode, cthf, dt_plant_canopy, lad, lad_s, pch_index,         &
    213            plant_canopy_transpiration
     224    PUBLIC canopy_drag_coeff, pcm_heating_rate, pcm_transpiration_rate,       &
     225           pcm_latent_rate, canopy_mode, cthf, dt_plant_canopy, lad, lad_s,   &
     226           pch_index, plant_canopy_transpiration
    214227
    215228    INTERFACE pcm_calc_transpiration_rate
     
    260273
    261274 CONTAINS
    262 
    263 
    264 
     275 
     276 
    265277!------------------------------------------------------------------------------!
    266278! Description:
     
    281293 SUBROUTINE pcm_calc_transpiration_rate(i, j, k, kk, pcbsw, pcblw, pcbtr, pcblh)
    282294
    283      USE control_parameters,                                                   &
    284         ONLY: dz
    285 
    286      USE grid_variables,                                                       &
    287         ONLY:  dx, dy
    288 
    289      IMPLICIT NONE
     295!
    290296!--  input parameters
    291297     INTEGER(iwp), INTENT(IN) ::  i, j, k, kk        !< indices of the pc gridbox
     
    383389 SUBROUTINE pcm_check_data_output( var, unit )
    384390
    385     USE control_parameters,                                                 &
    386         ONLY:  message_string, urban_surface
    387 
    388     IMPLICIT NONE
    389 
    390391    CHARACTER (LEN=*) ::  unit  !<
    391392    CHARACTER (LEN=*) ::  var   !<
     
    427428!------------------------------------------------------------------------------!
    428429    SUBROUTINE pcm_check_parameters
    429 
    430        USE control_parameters,                                                 &
    431            ONLY: message_string
    432 
    433        USE bulk_cloud_model_mod,                                               &
    434            ONLY: bulk_cloud_model, microphysics_seifert
    435 
    436        USE netcdf_data_input_mod,                                              &
    437            ONLY:  input_pids_static
    438 
    439 
    440        IMPLICIT NONE
    441 
     430           
     431       IF ( ocean_mode )  THEN
     432          message_string = 'plant_canopy = .TRUE. is not allowed in the '//    &
     433                           'ocean'
     434          CALL message( 'pcm_check_parameters', 'PA0696', 1, 2, 0, 6, 0 )
     435       ENDIF
     436           
    442437       IF ( canopy_drag_coeff == 0.0_wp )  THEN
    443438          message_string = 'plant_canopy = .TRUE. requires a non-zero drag '// &
     
    486481       ENDIF
    487482
    488  
    489483    END SUBROUTINE pcm_check_parameters
    490484 
     
    497491!------------------------------------------------------------------------------!
    498492 SUBROUTINE pcm_3d_data_averaging( mode, variable )
    499 
    500 
    501     USE control_parameters
    502 
    503     USE indices
    504 
    505     USE kinds
    506 
    507     IMPLICIT NONE
    508493
    509494    CHARACTER (LEN=*) ::  mode    !<
     
    659644 SUBROUTINE pcm_data_output_3d( av, variable, found, local_pf, fill_value,     &
    660645                                nzb_do, nzt_do )
    661  
    662     USE indices
    663 
    664     USE kinds
    665 
    666 
    667     IMPLICIT NONE
    668646
    669647    CHARACTER (LEN=*) ::  variable !< treated variable
     
    768746    END SELECT
    769747
    770 
    771748 END SUBROUTINE pcm_data_output_3d
    772749         
     
    779756!------------------------------------------------------------------------------!
    780757 SUBROUTINE pcm_define_netcdf_grid( var, found, grid_x, grid_y, grid_z )
    781    
    782      IMPLICIT NONE
    783758
    784759     CHARACTER (LEN=*), INTENT(IN)  ::  var         !<
     
    791766
    792767!
    793 !--  Check for the grid
     768!--  Check for the grid. zpc is zu(nzb:nzb+pch_index)
    794769     SELECT CASE ( TRIM( var ) )
    795770
     
    815790!------------------------------------------------------------------------------!
    816791    SUBROUTINE pcm_header ( io )
    817 
    818        USE control_parameters,                                                 &
    819            ONLY: passive_scalar
    820 
    821 
    822        IMPLICIT NONE
    823792 
    824793       CHARACTER (LEN=10) ::  coor_chr            !<
     
    931900!------------------------------------------------------------------------------!
    932901    SUBROUTINE pcm_init
    933    
    934 
    935        USE control_parameters,                                                 &
    936            ONLY: message_string, ocean_mode
    937 
    938        USE netcdf_data_input_mod,                                              &
    939            ONLY:  leaf_area_density_f
    940 
    941        USE pegrid
    942 
    943        USE surface_mod,                                                        &
    944            ONLY: surf_def_h, surf_lsm_h, surf_usm_h
    945 
    946        IMPLICIT NONE
    947902
    948903       INTEGER(iwp) ::  i   !< running index
     
    985940          gradient = 0.0_wp
    986941
    987           IF (  .NOT.  ocean_mode )  THEN
    988 
    989              lad(0) = lad_surface
    990              lad_vertical_gradient_level_ind(1) = 0
    991  
    992              DO k = 1, pch_index
    993                 IF ( i < 11 )  THEN
    994                    IF ( lad_vertical_gradient_level(i) < zu(k)  .AND.          &
    995                         lad_vertical_gradient_level(i) >= 0.0_wp )  THEN
    996                       gradient = lad_vertical_gradient(i)
    997                       lad_vertical_gradient_level_ind(i) = k - 1
    998                       i = i + 1
    999                    ENDIF
     942          lad(0) = lad_surface
     943          lad_vertical_gradient_level_ind(1) = 0
     944
     945          DO k = 1, pch_index
     946             IF ( i < 11 )  THEN
     947                IF ( lad_vertical_gradient_level(i) < zu(k)  .AND.          &
     948                     lad_vertical_gradient_level(i) >= 0.0_wp )  THEN
     949                   gradient = lad_vertical_gradient(i)
     950                   lad_vertical_gradient_level_ind(i) = k - 1
     951                   i = i + 1
    1000952                ENDIF
    1001                 IF ( gradient /= 0.0_wp )  THEN
    1002                    IF ( k /= 1 )  THEN
    1003                       lad(k) = lad(k-1) + dzu(k) * gradient
    1004                    ELSE
    1005                       lad(k) = lad_surface + dzu(k) * gradient
    1006                    ENDIF
     953             ENDIF
     954             IF ( gradient /= 0.0_wp )  THEN
     955                IF ( k /= 1 )  THEN
     956                   lad(k) = lad(k-1) + dzu(k) * gradient
    1007957                ELSE
    1008                    lad(k) = lad(k-1)
     958                   lad(k) = lad_surface + dzu(k) * gradient
    1009959                ENDIF
    1010              ENDDO
    1011 
    1012           ENDIF
     960             ELSE
     961                lad(k) = lad(k-1)
     962             ENDIF
     963          ENDDO
    1013964
    1014965!
     
    10591010!--    Allocate 3D-array for the leaf area density (lad_s).
    10601011       ALLOCATE( lad_s(nzb:nzt+1,nysg:nyng,nxlg:nxrg) )
    1061 !
    1062 !--    Initialize canopy parameters cdc (canopy drag coefficient),
    1063 !--    lsec (leaf scalar exchange coefficient), lsc (leaf surface concentration)
    1064 !--    with the prescribed values
    1065        cdc = canopy_drag_coeff
    1066        lsec = leaf_scalar_exch_coeff
    1067        lsc = leaf_surface_conc
    10681012
    10691013!
     
    11331077!
    11341078!            ASCII file
    1135 !--          Initialize canopy parameters cdc (canopy drag coefficient),
    1136 !--          lsec (leaf scalar exchange coefficient), lsc (leaf surface concentration)
     1079!--          Initialize canopy parameters canopy_drag_coeff,
     1080!--          leaf_scalar_exch_coeff, leaf_surface_conc
    11371081!--          from file which contains complete 3D data (separate vertical profiles for
    11381082!--          each location).
     
    12661210             i = surf_def_h(0)%i(m)
    12671211             j = surf_def_h(0)%j(m)
    1268              k = surf_def_h(0)%k(m)
    12691212             IF ( cum_lai_hf(0,j,i) /= 0.0_wp )                                &
    12701213                surf_def_h(0)%shf(m) = cthf * exp( -ext_coef * cum_lai_hf(0,j,i) )
     
    12751218             i = surf_lsm_h%i(m)
    12761219             j = surf_lsm_h%j(m)
    1277              k = surf_lsm_h%k(m)
    12781220             IF ( cum_lai_hf(0,j,i) /= 0.0_wp )                                &
    12791221                surf_lsm_h%shf(m) = cthf * exp( -ext_coef * cum_lai_hf(0,j,i) )
     
    12841226             i = surf_usm_h%i(m)
    12851227             j = surf_usm_h%j(m)
    1286              k = surf_usm_h%k(m)
    12871228             IF ( cum_lai_hf(0,j,i) /= 0.0_wp )                                &
    12881229                surf_usm_h%shf(m) = cthf * exp( -ext_coef * cum_lai_hf(0,j,i) )
     
    13131254       IF ( debug_output )  CALL debug_message( 'pcm_init', 'end' )
    13141255
    1315 
    13161256    END SUBROUTINE pcm_init
    13171257
     
    13231263!------------------------------------------------------------------------------!
    13241264    SUBROUTINE pcm_parin
    1325 
    1326        USE control_parameters,                                                 &
    1327            ONLY:  message_string, plant_canopy
    1328 
    1329        IMPLICIT NONE
    13301265
    13311266       CHARACTER (LEN=80) ::  line  !< dummy string that contains the current line of the parameter file
     
    14061341 14    CONTINUE
    14071342
    1408 
    14091343    END SUBROUTINE pcm_parin
    1410 
    14111344
    14121345
     
    14341367!------------------------------------------------------------------------------!
    14351368    SUBROUTINE pcm_read_plant_canopy_3d
    1436    
    1437        USE control_parameters,                                                 &
    1438            ONLY:  coupling_char, message_string
    1439 
    1440        USE indices,                                                            &
    1441            ONLY:  nbgp
    1442            
    1443        IMPLICIT NONE
    14441369
    14451370       INTEGER(iwp)                        ::  dtype     !< type of input data (1=lad)
     
    15071432   
    15081433   
    1509 
    15101434!------------------------------------------------------------------------------!
    15111435! Description:
     
    15341458    SUBROUTINE pcm_tendency( component )
    15351459
    1536 
    1537        USE control_parameters,                                                 &
    1538            ONLY:  dt_3d, message_string
    1539 
    1540        USE kinds
    1541 
    1542        IMPLICIT NONE
    1543 
    15441460       INTEGER(iwp) ::  component !< prognostic variable (u,v,w,pt,q,e)
    15451461       INTEGER(iwp) ::  i         !< running index
     
    16141530!
    16151531!--                   Calculate preliminary value (pre_tend) of the tendency
    1616                       pre_tend = - cdc *                                       &
     1532                      pre_tend = - canopy_drag_coeff *                         &
    16171533                                   lad_local *                                 &
    16181534                                   SQRT( u(k,j,i)**2 +                         &
     
    16941610!
    16951611!--                   Calculate preliminary value (pre_tend) of the tendency
    1696                       pre_tend = - cdc *                                       &
     1612                      pre_tend = - canopy_drag_coeff *                         &
    16971613                                   lad_local *                                 &
    16981614                                   SQRT( ( 0.25_wp * ( u(k,j-1,i)   +          &
     
    17441660!
    17451661!--                   Calculate preliminary value (pre_tend) of the tendency
    1746                       pre_tend = - cdc *                                       &
     1662                      pre_tend = - canopy_drag_coeff *                         &
    17471663                                   (0.5_wp *                                   &
    17481664                                      ( lad_s(kk+1,j,i) + lad_s(kk,j,i) )) *   &
     
    18201736                         ! to include also the dependecy to the radiation
    18211737                         ! in the plant canopy box
    1822                          pcm_transpiration_rate(kk,j,i) =  - lsec              &
    1823                                           * lad_s(kk,j,i) *                    &
    1824                                           SQRT( ( 0.5_wp * ( u(k,j,i) +        &
    1825                                                              u(k,j,i+1) )      &
    1826                                                 )**2 +                         &
    1827                                                 ( 0.5_wp * ( v(k,j,i) +        &
    1828                                                              v(k,j+1,i) )      &
    1829                                                 )**2 +                         &
    1830                                                 ( 0.5_wp * ( w(k-1,j,i) +      &
    1831                                                              w(k,j,i) )        &
    1832                                                 )**2                           &
    1833                                               ) *                              &
    1834                                           ( q(k,j,i) - lsc )
     1738                         pcm_transpiration_rate(kk,j,i) =  - leaf_scalar_exch_coeff &
     1739                                          * lad_s(kk,j,i) *                         &
     1740                                          SQRT( ( 0.5_wp * ( u(k,j,i) +             &
     1741                                                             u(k,j,i+1) )           &
     1742                                                )**2 +                              &
     1743                                                ( 0.5_wp * ( v(k,j,i) +             &
     1744                                                             v(k,j+1,i) )           &
     1745                                                )**2 +                              &
     1746                                                ( 0.5_wp * ( w(k-1,j,i) +           &
     1747                                                             w(k,j,i) )             &
     1748                                                )**2                                &
     1749                                              ) *                                   &
     1750                                          ( q(k,j,i) - leaf_surface_conc )
    18351751                      ENDIF
    18361752
     
    18511767                      kk = k - topo_top_ind(j,i,0)   !- lad arrays are defined flat
    18521768                      tend(k,j,i) = tend(k,j,i) -                              &
    1853                                        2.0_wp * cdc *                          &
     1769                                       2.0_wp * canopy_drag_coeff *            &
    18541770                                       lad_s(kk,j,i) *                         &
    18551771                                       SQRT( ( 0.5_wp * ( u(k,j,i) +           &
     
    18781794                      kk = k - topo_top_ind(j,i,0)   !- lad arrays are defined flat
    18791795                      tend(k,j,i) = tend(k,j,i) -                              &
    1880                                        lsec *                                  &
     1796                                       leaf_scalar_exch_coeff *                &
    18811797                                       lad_s(kk,j,i) *                         &
    18821798                                       SQRT( ( 0.5_wp * ( u(k,j,i) +           &
     
    18901806                                             )**2                              &
    18911807                                           ) *                                 &
    1892                                        ( s(k,j,i) - lsc )
     1808                                       ( s(k,j,i) - leaf_surface_conc )
    18931809                   ENDDO
    18941810                ENDDO
     
    19331849    SUBROUTINE pcm_tendency_ij( i, j, component )
    19341850
    1935 
    1936        USE control_parameters,                                                 &
    1937            ONLY:  dt_3d, message_string
    1938 
    1939        USE kinds
    1940 
    1941        IMPLICIT NONE
    1942 
    19431851       INTEGER(iwp) ::  component !< prognostic variable (u,v,w,pt,q,e)
    19441852       INTEGER(iwp) ::  i         !< running index
     
    20111919!
    20121920!--             Calculate preliminary value (pre_tend) of the tendency
    2013                 pre_tend = - cdc *                                             &
     1921                pre_tend = - canopy_drag_coeff *                               &
    20141922                             lad_local *                                       &   
    20151923                             SQRT( u(k,j,i)**2 +                               &
     
    20891997!
    20901998!--             Calculate preliminary value (pre_tend) of the tendency
    2091                 pre_tend = - cdc *                                             &
     1999                pre_tend = - canopy_drag_coeff *                               &
    20922000                             lad_local *                                       &
    20932001                             SQRT( ( 0.25_wp * ( u(k,j-1,i)   +                &
     
    21352043!
    21362044!--             Calculate preliminary value (pre_tend) of the tendency
    2137                 pre_tend = - cdc *                                             &
     2045                pre_tend = - canopy_drag_coeff *                               &
    21382046                             (0.5_wp *                                         &
    21392047                                ( lad_s(kk+1,j,i) + lad_s(kk,j,i) )) *         &
     
    21972105                   ! to include also the dependecy to the radiation
    21982106                   ! in the plant canopy box
    2199                    pcm_transpiration_rate(kk,j,i) = - lsec                      &
     2107                   pcm_transpiration_rate(kk,j,i) = - leaf_scalar_exch_coeff   &
    22002108                                    * lad_s(kk,j,i) *                          &
    22012109                                    SQRT( ( 0.5_wp * ( u(k,j,i) +              &
     
    22092117                                          )**2                                 &
    22102118                                        ) *                                    &
    2211                                     ( q(k,j,i) - lsc )
     2119                                    ( q(k,j,i) - leaf_surface_conc )
    22122120                ENDIF
    22132121
     
    22252133                kk = k - topo_top_ind(j,i,0)
    22262134                tend(k,j,i) = tend(k,j,i) -                                    &
    2227                                  2.0_wp * cdc *                                &
     2135                                 2.0_wp * canopy_drag_coeff *                  &
    22282136                                 lad_s(kk,j,i) *                               &
    22292137                                 SQRT( ( 0.5_wp * ( u(k,j,i) +                 &
     
    22492157                kk = k - topo_top_ind(j,i,0)
    22502158                tend(k,j,i) = tend(k,j,i) -                                    &
    2251                                  lsec *                                        &
     2159                                 leaf_scalar_exch_coeff *                      &
    22522160                                 lad_s(kk,j,i) *                               &
    22532161                                 SQRT( ( 0.5_wp * ( u(k,j,i) +                 &
     
    22612169                                       )**2                                    &
    22622170                                     ) *                                       &
    2263                                  ( s(k,j,i) - lsc )
     2171                                 ( s(k,j,i) - leaf_surface_conc )
    22642172             ENDDO               
    22652173
     
    22742182
    22752183
    2276 
    22772184 END MODULE plant_canopy_model_mod
  • palm/trunk/SOURCE/salsa_mod.f90

    r4329 r4342  
    2626! -----------------
    2727! $Id$
     28! cdc replaced by canopy_drag_coeff
     29!
     30! 4329 2019-12-10 15:46:36Z motisi
    2831! Renamed wall_flags_0 to wall_flags_static_0
    2932!
     
    38313834 SUBROUTINE deposition( paero, tk, adn, mag_u, lad, kvis, schmidt_num, vc )
    38323835
    3833     USE plant_canopy_model_mod,                                                                    &
    3834         ONLY:  cdc
     3836    USE plant_canopy_model_mod,                                                &
     3837        ONLY:  canopy_drag_coeff
    38353838
    38363839    IMPLICIT NONE
     
    39303933!
    39313934!--       Friction velocity for deposition on vegetation. Calculated following Prandtl (1925):
    3932           ustar = SQRT( cdc ) * mag_u
     3935          ustar = SQRT( canopy_drag_coeff ) * mag_u
    39333936          SELECT CASE ( depo_pcm_par_num )
    39343937
  • palm/trunk/TESTS/cases/urban_environment/INPUT/urban_environment_p3d

    r4227 r4342  
    194194 &plant_canopy_parameters
    195195 
    196     canopy_mode       = 'read_from_file_3d',
     196    canopy_mode       = 'read_from_file',
    197197    canopy_drag_coeff = 0.3,
    198198     
  • palm/trunk/TESTS/cases/urban_environment_restart/INPUT/urban_environment_restart_p3dr

    r4227 r4342  
    193193 &plant_canopy_parameters
    194194 
    195     canopy_mode       = 'read_from_file_3d',
     195    canopy_mode       = 'read_from_file',
    196196    canopy_drag_coeff = 0.3,
    197197     
  • palm/trunk/TESTS/cases/urban_environment_salsa/INPUT/urban_environment_salsa_p3d

    r4273 r4342  
    179179 &plant_canopy_parameters
    180180 
    181     canopy_mode       = 'read_from_file_3d',
     181    canopy_mode       = 'read_from_file',
    182182    canopy_drag_coeff = 0.3,
    183183     
Note: See TracChangeset for help on using the changeset viewer.