Ignore:
Timestamp:
Oct 21, 2014 10:53:05 AM (7 years ago)
Author:
kanani
Message:

New:
---
Subroutine init_plant_canopy added to module plant_canopy_model_mod. (plant_canopy_model)
Alternative method for lad-profile construction added, also, new parameters added.
(header, package_parin, plant_canopy_model, read_var_list, write_var_list)
plant_canopy_model-dependency added to several subroutines. (Makefile)
New package/namelist canopy_par for canopy-related parameters added. (package_parin)

Changed:
---
Code structure of the plant canopy model changed, all canopy-model related code
combined to module plant_canopy_model_mod. (check_parameters, init_3d_model,
modules, timestep)
Module plant_canopy_model_mod added in USE-lists of some subroutines. (check_parameters,
header, init_3d_model, package_parin, read_var_list, user_init_plant_canopy, write_var_list)
Canopy initialization moved to new subroutine init_plant_canopy. (check_parameters,
init_3d_model, plant_canopy_model)
Calculation of canopy timestep-criterion removed, instead, the canopy
drag is now directly limited in the calculation of the canopy tendency terms.
(plant_canopy_model, timestep)
Some parameters renamed. (check_parameters, header, init_plant_canopy,
plant_canopy_model, read_var_list, write_var_list)
Unnecessary 3d-arrays removed. (init_plant_canopy, plant_canopy_model, user_init_plant_canopy)
Parameter checks regarding canopy initialization added. (check_parameters)
All canopy steering parameters moved from namelist inipar to canopy_par. (package_parin, parin)
Some redundant MPI communication removed. (init_plant_canopy)

Bugfix:
---
Missing KIND-attribute for REAL constant added. (check_parameters)
DO-WHILE-loop for lad-profile output restricted. (header)
Removed double-listing of use_upstream_for_tke in ONLY-list of module
control_parameters. (prognostic_equations)

File:
1 edited

Legend:

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

    r1343 r1484  
    2020! Current revisions:
    2121! ------------------
    22 !
     22! Changes due to new module structure of the plant canopy model:
     23!   calculations and parameters related to the plant canopy model removed
     24!   (the limitation of the canopy drag, i.e. that the canopy drag itself should
     25!   not change the sign of the velocity components, is now assured for in the
     26!   calculation of the canopy tendency terms in subroutine plant_canopy_model)
    2327!
    2428! Former revisions:
     
    7680
    7781    USE arrays_3d,                                                             &
    78         ONLY:  cdc, dzu, dzw, kh, km, lad_u, lad_v, lad_w, u, v, w
     82        ONLY:  dzu, dzw, kh, km, u, v, w
    7983
    8084    USE cloud_parameters,                                                      &
     
    8387    USE control_parameters,                                                    &
    8488        ONLY:  cfl_factor, coupling_mode, dt_3d, dt_fixed, dt_max,             &
    85                galilei_transformation, old_dt, plant_canopy, message_string,   &
     89               galilei_transformation, old_dt, message_string,                 &
    8690               stop_dt, terminate_coupled, terminate_coupled_remote,           &
    8791               timestep_reason, u_gtrans, use_ug_for_galilei_tr, v_gtrans
     
    115119    REAL(wp) ::  dt_diff           !:
    116120    REAL(wp) ::  dt_diff_l         !:
    117     REAL(wp) ::  dt_plant_canopy   !:
    118     REAL(wp) ::  dt_plant_canopy_l !:
    119     REAL(wp) ::  dt_plant_canopy_u !:
    120     REAL(wp) ::  dt_plant_canopy_v !:
    121     REAL(wp) ::  dt_plant_canopy_w !:
    122121    REAL(wp) ::  dt_u              !:
    123122    REAL(wp) ::  dt_u_l            !:
     
    413412
    414413!
    415 !--    Additional timestep criterion with plant canopies:
    416 !--    it is not allowed to extract more than the available momentum
    417        IF ( plant_canopy ) THEN
    418 
    419           dt_plant_canopy_l = 0.0_wp
    420           DO  i = nxl, nxr
    421              DO  j = nys, nyn
    422                 DO k = nzb+1, nzt
    423                    dt_plant_canopy_u = cdc(k,j,i) * lad_u(k,j,i) *  &
    424                                        SQRT(     u(k,j,i)**2     +  &
    425                                              ( ( v(k,j,i-1)      +  &
    426                                                  v(k,j,i)        +  &
    427                                                  v(k,j+1,i)      +  &
    428                                                  v(k,j+1,i-1) )     &
    429                                                / 4.0_wp )**2     +  &
    430                                              ( ( w(k-1,j,i-1)    +  &
    431                                                  w(k-1,j,i)      +  &
    432                                                  w(k,j,i-1)      +  &
    433                                                  w(k,j,i) )         &
    434                                                  / 4.0_wp )**2 )
    435                    IF ( dt_plant_canopy_u > dt_plant_canopy_l ) THEN
    436                       dt_plant_canopy_l = dt_plant_canopy_u 
    437                    ENDIF
    438                    dt_plant_canopy_v = cdc(k,j,i) * lad_v(k,j,i) *  &
    439                                        SQRT( ( ( u(k,j-1,i)      +  &
    440                                                  u(k,j-1,i+1)    +  &
    441                                                  u(k,j,i)        +  &
    442                                                  u(k,j,i+1) )       &
    443                                                / 4.0_wp )**2     +  &
    444                                                  v(k,j,i)**2     +  &
    445                                              ( ( w(k-1,j-1,i)    +  &
    446                                                  w(k-1,j,i)      +  &
    447                                                  w(k,j-1,i)      +  &
    448                                                  w(k,j,i) )         &
    449                                                  / 4.0_wp )**2 )
    450                    IF ( dt_plant_canopy_v > dt_plant_canopy_l ) THEN
    451                       dt_plant_canopy_l = dt_plant_canopy_v
    452                    ENDIF                   
    453                    dt_plant_canopy_w = cdc(k,j,i) * lad_w(k,j,i) *  &
    454                                        SQRT( ( ( u(k,j,i)        +  &
    455                                                  u(k,j,i+1)      +  &
    456                                                  u(k+1,j,i)      +  &
    457                                                  u(k+1,j,i+1) )     &
    458                                                / 4.0_wp )**2     +  &
    459                                              ( ( v(k,j,i)        +  &
    460                                                  v(k,j+1,i)      +  &
    461                                                  v(k+1,j,i)      +  &
    462                                                  v(k+1,j+1,i) )     &
    463                                                / 4.0_wp )**2        +  &
    464                                                  w(k,j,i)**2 )     
    465                    IF ( dt_plant_canopy_w > dt_plant_canopy_l ) THEN
    466                       dt_plant_canopy_l = dt_plant_canopy_w
    467                    ENDIF
    468                 ENDDO
    469              ENDDO
    470           ENDDO
    471 
    472           IF ( dt_plant_canopy_l > 0.0_wp ) THEN
    473 !
    474 !--          Invert dt_plant_canopy_l and apply a security timestep factor 0.1
    475              dt_plant_canopy_l = 0.1_wp / dt_plant_canopy_l
    476           ELSE
    477 !
    478 !--          In case of inhomogeneous plant canopy, some processors may have no
    479 !--          canopy at all. Then use dt_max as dummy instead.
    480              dt_plant_canopy_l = dt_max
    481           ENDIF
    482 
    483 !
    484 !--       Determine the global minumum
    485 #if defined( __parallel )
    486           IF ( collective_wait )  CALL MPI_BARRIER( comm2d, ierr )
    487           CALL MPI_ALLREDUCE( dt_plant_canopy_l, dt_plant_canopy, 1, MPI_REAL, &
    488                               MPI_MIN, comm2d, ierr )
    489 #else
    490           dt_plant_canopy = dt_plant_canopy_l
    491 #endif
    492 
    493        ELSE
    494 !
    495 !--       Use dt_diff as dummy value to avoid extra IF branches further below
    496           dt_plant_canopy = dt_diff
    497 
    498        ENDIF
    499 
    500 !
    501414!--    The time step is the minimum of the 3-4 components and the diffusion time
    502415!--    step minus a reduction (cfl_factor) to be on the safe side.
    503416!--    The time step must not exceed the maximum allowed value.
    504        dt_3d = cfl_factor * MIN( dt_diff, dt_plant_canopy, dt_u, dt_v, dt_w,   &
     417       dt_3d = cfl_factor * MIN( dt_diff, dt_u, dt_v, dt_w,   &
    505418                                 dt_precipitation )
    506419       dt_3d = MIN( dt_3d, dt_max )
     
    508421!
    509422!--    Remember the restricting time step criterion for later output.
    510        IF ( MIN( dt_u, dt_v, dt_w ) < MIN( dt_diff, dt_plant_canopy ) )  THEN
     423       IF ( MIN( dt_u, dt_v, dt_w ) < dt_diff )  THEN
    511424          timestep_reason = 'A'
    512        ELSEIF ( dt_plant_canopy < dt_diff )  THEN
    513           timestep_reason = 'C'
    514425       ELSE
    515426          timestep_reason = 'D'
     
    528439               '&dt_w            = ', dt_w, ' s',                             &
    529440               '&dt_diff         = ', dt_diff, ' s',                          &
    530                '&dt_plant_canopy = ', dt_plant_canopy, ' s',                  &
    531441               '&u_max           = ', u_max, ' m/s   k=', u_max_ijk(1),       &
    532442               '  j=', u_max_ijk(2), '  i=', u_max_ijk(3),                    &
Note: See TracChangeset for help on using the changeset viewer.