Ignore:
Timestamp:
Sep 9, 2020 8:27:58 PM (4 years ago)
Author:
pavelkrc
Message:

Radiative transfer model RTM version 4.1

File:
1 edited

Legend:

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

    r4535 r4671  
    2121! Current revisions:
    2222! -----------------
    23 ! 
    24 ! 
     23!
     24!
    2525! Former revisions:
    2626! -----------------
    2727! $Id$
     28! Implementation of downward facing USM and LSM surfaces
     29!
     30! 4535 2020-05-15 12:07:23Z raasch
    2831! bugfix for restart data format query
    2932!
     
    850853    TYPE(t_section), DIMENSION(:), ALLOCATABLE ::  aero  !< local aerosol properties
    851854
    852     TYPE(match_surface) ::  lsm_to_depo_h  !< to match the deposition module and horizontal LSM surfaces
    853     TYPE(match_surface) ::  usm_to_depo_h  !< to match the deposition module and horizontal USM surfaces
     855    TYPE(match_surface), DIMENSION(0:1) ::  lsm_to_depo_h  !< to match the deposition module and horizontal LSM surfaces
     856    TYPE(match_surface), DIMENSION(0:1) ::  usm_to_depo_h  !< to match the deposition module and horizontal USM surfaces
    854857
    855858    TYPE(match_surface), DIMENSION(0:3) ::  lsm_to_depo_v  !< to match the deposition mod. and vertical LSM surfaces
     
    16951698    ENDDO
    16961699!
    1697 !-- Horizontal surfaces: natural type
    1698     ALLOCATE( surf_lsm_h%answs( 1:surf_lsm_h%ns, nbins_aerosol ) )
    1699     ALLOCATE( surf_lsm_h%amsws( 1:surf_lsm_h%ns, nbins_aerosol*ncomponents_mass ) )
    1700     surf_lsm_h%answs = 0.0_wp
    1701     surf_lsm_h%amsws = 0.0_wp
    1702 !
    1703 !-- Horizontal surfaces: urban type
    1704     ALLOCATE( surf_usm_h%answs( 1:surf_usm_h%ns, nbins_aerosol ) )
    1705     ALLOCATE( surf_usm_h%amsws( 1:surf_usm_h%ns, nbins_aerosol*ncomponents_mass ) )
    1706     surf_usm_h%answs = 0.0_wp
    1707     surf_usm_h%amsws = 0.0_wp
    1708 
     1700!-- Horizontal surfaces: natural and urban type
     1701    DO l = 0, 1
     1702       ALLOCATE( surf_lsm_h(l)%answs( 1:surf_lsm_h(l)%ns, nbins_aerosol ) )
     1703       ALLOCATE( surf_lsm_h(l)%amsws( 1:surf_lsm_h(l)%ns, nbins_aerosol*ncomponents_mass ) )
     1704       surf_lsm_h(l)%answs = 0.0_wp
     1705       surf_lsm_h(l)%amsws = 0.0_wp
     1706
     1707       ALLOCATE( surf_usm_h(l)%answs( 1:surf_usm_h(l)%ns, nbins_aerosol ) )
     1708       ALLOCATE( surf_usm_h(l)%amsws( 1:surf_usm_h(l)%ns, nbins_aerosol*ncomponents_mass ) )
     1709       surf_usm_h(l)%answs = 0.0_wp
     1710       surf_usm_h(l)%amsws = 0.0_wp
     1711    ENDDO
    17091712!
    17101713!-- Vertical surfaces: northward (l=0), southward (l=1), eastward (l=2) and westward (l=3) facing
     
    17971800          surf_def_h(l)%gtsws = 0.0_wp
    17981801       ENDDO
    1799 !--    Horizontal surfaces: natural type
    1800        ALLOCATE( surf_lsm_h%gtsws( 1:surf_lsm_h%ns, ngases_salsa ) )
    1801        surf_lsm_h%gtsws = 0.0_wp
    1802 !--    Horizontal surfaces: urban type
    1803        ALLOCATE( surf_usm_h%gtsws( 1:surf_usm_h%ns, ngases_salsa ) )
    1804        surf_usm_h%gtsws = 0.0_wp
     1802!--    Horizontal surfaces: natural and urban type
     1803       DO l = 0, 1
     1804          ALLOCATE( surf_lsm_h(l)%gtsws( 1:surf_lsm_h(l)%ns, ngases_salsa ) )
     1805          surf_lsm_h(l)%gtsws = 0.0_wp
     1806          ALLOCATE( surf_usm_h(l)%gtsws( 1:surf_usm_h(l)%ns, ngases_salsa ) )
     1807          surf_usm_h(l)%gtsws = 0.0_wp
     1808       ENDDO
    18051809!
    18061810!--    Vertical surfaces: northward (l=0), southward (l=1), eastward (l=2) and
     
    27472751    IF ( nldepo_surf  .AND.  land_surface )  THEN
    27482752       match_lsm = .TRUE.
    2749        ALLOCATE( lsm_to_depo_h%match_lupg(1:surf_lsm_h%ns),                                         &
    2750                  lsm_to_depo_h%match_luvw(1:surf_lsm_h%ns),                                         &
    2751                  lsm_to_depo_h%match_luww(1:surf_lsm_h%ns) )
    2752        lsm_to_depo_h%match_lupg = 0
    2753        lsm_to_depo_h%match_luvw = 0
    2754        lsm_to_depo_h%match_luww = 0
    2755        CALL match_sm_zhang( surf_lsm_h, lsm_to_depo_h%match_lupg, lsm_to_depo_h%match_luvw,        &
    2756                             lsm_to_depo_h%match_luww, match_lsm )
     2753       DO l = 0, 1
     2754          ALLOCATE( lsm_to_depo_h(l)%match_lupg(1:surf_lsm_h(l)%ns),                               &
     2755                    lsm_to_depo_h(l)%match_luvw(1:surf_lsm_h(l)%ns),                               &
     2756                    lsm_to_depo_h(l)%match_luww(1:surf_lsm_h(l)%ns) )
     2757          lsm_to_depo_h(l)%match_lupg = 0
     2758          lsm_to_depo_h(l)%match_luvw = 0
     2759          lsm_to_depo_h(l)%match_luww = 0
     2760          CALL match_sm_zhang( surf_lsm_h(l), lsm_to_depo_h(l)%match_lupg,                         &
     2761                               lsm_to_depo_h(l)%match_luvw, lsm_to_depo_h(l)%match_luww, match_lsm )
     2762       ENDDO
    27572763       DO  l = 0, 3
    27582764          ALLOCATE( lsm_to_depo_v(l)%match_lupg(1:surf_lsm_v(l)%ns),                               &
     
    27702776    IF ( nldepo_surf  .AND.  urban_surface )  THEN
    27712777       match_lsm = .FALSE.
    2772        ALLOCATE( usm_to_depo_h%match_lupg(1:surf_usm_h%ns),                                        &
    2773                  usm_to_depo_h%match_luvw(1:surf_usm_h%ns),                                        &
    2774                  usm_to_depo_h%match_luww(1:surf_usm_h%ns) )
    2775        usm_to_depo_h%match_lupg = 0
    2776        usm_to_depo_h%match_luvw = 0
    2777        usm_to_depo_h%match_luww = 0
    2778        CALL match_sm_zhang( surf_usm_h, usm_to_depo_h%match_lupg, usm_to_depo_h%match_luvw,        &
    2779                             usm_to_depo_h%match_luww, match_lsm )
     2778       DO l = 0, 1
     2779          ALLOCATE( usm_to_depo_h(l)%match_lupg(1:surf_usm_h(l)%ns),                               &
     2780                    usm_to_depo_h(l)%match_luvw(1:surf_usm_h(l)%ns),                               &
     2781                    usm_to_depo_h(l)%match_luww(1:surf_usm_h(l)%ns) )
     2782          usm_to_depo_h(l)%match_lupg = 0
     2783          usm_to_depo_h(l)%match_luvw = 0
     2784          usm_to_depo_h(l)%match_luww = 0
     2785          CALL match_sm_zhang( surf_usm_h(l), usm_to_depo_h(l)%match_lupg,                         &
     2786                               usm_to_depo_h(l)%match_luvw, usm_to_depo_h(l)%match_luww, match_lsm )
     2787       ENDDO
    27802788       DO  l = 0, 3
    27812789          ALLOCATE( usm_to_depo_v(l)%match_lupg(1:surf_usm_v(l)%ns),                               &
     
    40994107          ENDDO
    41004108       ELSE
    4101           CALL depo_surf( i, j, surf_usm_h, vd, schmidt_num, kvis, in_u, .TRUE., usm_to_depo_h )
     4109          DO  l = 0, 1
     4110             CALL depo_surf( i, j, surf_usm_h(l), vd, schmidt_num, kvis, in_u, .TRUE., usm_to_depo_h(l) )
     4111          ENDDO
    41024112          DO  l = 0, 3
    4103              CALL depo_surf( i, j, surf_usm_v(l), vd, schmidt_num, kvis, in_u, .FALSE.,            &
    4104                              usm_to_depo_v(l) )
     4113             CALL depo_surf( i, j, surf_usm_v(l), vd, schmidt_num, kvis, in_u, .FALSE., usm_to_depo_v(l) )
    41054114          ENDDO
    4106           CALL depo_surf( i, j, surf_lsm_h, vd, schmidt_num, kvis, in_u, .TRUE., lsm_to_depo_h )
     4115          DO  l = 0, 1
     4116             CALL depo_surf( i, j, surf_lsm_h(l), vd, schmidt_num, kvis, in_u, .TRUE., lsm_to_depo_h(l) )
     4117          ENDDO
    41074118          DO  l = 0, 3
    4108              CALL depo_surf( i, j, surf_lsm_v(l), vd, schmidt_num, kvis, in_u, .FALSE.,            &
    4109                              lsm_to_depo_v(l) )
     4119             CALL depo_surf( i, j, surf_lsm_v(l), vd, schmidt_num, kvis, in_u, .FALSE., lsm_to_depo_v(l) )
    41104120          ENDDO
    41114121       ENDIF
     
    85688578          CALL diffusion_s( i, j, rs, surf_def_h(0)%answs(:,ib),                                   &
    85698579                                      surf_def_h(1)%answs(:,ib), surf_def_h(2)%answs(:,ib),        &
    8570                                       surf_lsm_h%answs(:,ib),    surf_usm_h%answs(:,ib),           &
     8580                                      surf_lsm_h(0)%answs(:,ib), surf_lsm_h(1)%answs(:,ib),        &
     8581                                      surf_usm_h(0)%answs(:,ib), surf_usm_h(1)%answs(:,ib),        &
    85718582                                      surf_def_v(0)%answs(:,ib), surf_def_v(1)%answs(:,ib),        &
    85728583                                      surf_def_v(2)%answs(:,ib), surf_def_v(3)%answs(:,ib),        &
     
    85788589          CALL diffusion_s( i, j, rs, surf_def_h(0)%amsws(:,icc),                                  &
    85798590                                      surf_def_h(1)%amsws(:,icc), surf_def_h(2)%amsws(:,icc),      &
    8580                                       surf_lsm_h%amsws(:,icc),    surf_usm_h%amsws(:,icc),         &
     8591                                      surf_lsm_h(0)%amsws(:,icc), surf_lsm_h(1)%amsws(:,icc),      &
     8592                                      surf_usm_h(0)%amsws(:,icc), surf_usm_h(1)%amsws(:,icc),      &
    85818593                                      surf_def_v(0)%amsws(:,icc), surf_def_v(1)%amsws(:,icc),      &
    85828594                                      surf_def_v(2)%amsws(:,icc), surf_def_v(3)%amsws(:,icc),      &
     
    85888600          CALL diffusion_s( i, j, rs, surf_def_h(0)%gtsws(:,ib),                                   &
    85898601                                      surf_def_h(1)%gtsws(:,ib), surf_def_h(2)%gtsws(:,ib),        &
    8590                                       surf_lsm_h%gtsws(:,ib), surf_usm_h%gtsws(:,ib),              &
     8602                                      surf_lsm_h(0)%gtsws(:,ib), surf_lsm_h(1)%gtsws(:,ib),        &
     8603                                      surf_usm_h(0)%gtsws(:,ib), surf_usm_h(1)%gtsws(:,ib),        &
    85918604                                      surf_def_v(0)%gtsws(:,ib), surf_def_v(1)%gtsws(:,ib),        &
    85928605                                      surf_def_v(2)%gtsws(:,ib), surf_def_v(3)%gtsws(:,ib),        &
     
    87038716          CALL diffusion_s( rs, surf_def_h(0)%answs(:,ib),                                         &
    87048717                                surf_def_h(1)%answs(:,ib), surf_def_h(2)%answs(:,ib),              &
    8705                                 surf_lsm_h%answs(:,ib),    surf_usm_h%answs(:,ib),                 &
     8718                                surf_lsm_h(0)%answs(:,ib), surf_lsm_h(1)%answs(:,ib),              &
     8719                                surf_usm_h(0)%answs(:,ib), surf_usm_h(1)%answs(:,ib),              &
    87068720                                surf_def_v(0)%answs(:,ib), surf_def_v(1)%answs(:,ib),              &
    87078721                                surf_def_v(2)%answs(:,ib), surf_def_v(3)%answs(:,ib),              &
     
    87138727          CALL diffusion_s( rs, surf_def_h(0)%amsws(:,icc),                                        &
    87148728                                surf_def_h(1)%amsws(:,icc), surf_def_h(2)%amsws(:,icc),            &
    8715                                 surf_lsm_h%amsws(:,icc),    surf_usm_h%amsws(:,icc),               &
     8729                                surf_lsm_h(0)%amsws(:,icc), surf_lsm_h(1)%amsws(:,icc),            &
     8730                                surf_usm_h(0)%amsws(:,icc), surf_usm_h(1)%amsws(:,icc),            &
    87168731                                surf_def_v(0)%amsws(:,icc), surf_def_v(1)%amsws(:,icc),            &
    87178732                                surf_def_v(2)%amsws(:,icc), surf_def_v(3)%amsws(:,icc),            &
     
    87238738          CALL diffusion_s( rs, surf_def_h(0)%gtsws(:,ib),                                         &
    87248739                                surf_def_h(1)%gtsws(:,ib), surf_def_h(2)%gtsws(:,ib),              &
    8725                                 surf_lsm_h%gtsws(:,ib),    surf_usm_h%gtsws(:,ib),                 &
     8740                                surf_lsm_h(0)%gtsws(:,ib), surf_lsm_h(1)%gtsws(:,ib),              &
     8741                                surf_usm_h(0)%gtsws(:,ib), surf_usm_h(1)%gtsws(:,ib),              &
    87268742                                surf_def_v(0)%gtsws(:,ib), surf_def_v(1)%gtsws(:,ib),              &
    87278743                                surf_def_v(2)%gtsws(:,ib), surf_def_v(3)%gtsws(:,ib),              &
     
    96419657!
    96429658!--             Set fluxes normalised based on the street type on land surfaces
    9643                 CALL set_flux( surf_lsm_h, cc_i2m, aerosol_flux_mass_fracs_a, source_array )
     9659                CALL set_flux( surf_lsm_h(0), cc_i2m, aerosol_flux_mass_fracs_a, source_array )
    96449660             ENDIF
    96459661
     
    96529668          surf_def_h(0)%answs = 0.0_wp
    96539669          surf_def_h(0)%amsws = 0.0_wp
    9654           surf_lsm_h%answs = 0.0_wp
    9655           surf_lsm_h%amsws = 0.0_wp
    9656           surf_usm_h%answs = 0.0_wp
    9657           surf_usm_h%amsws = 0.0_wp
     9670          surf_lsm_h(0)%answs = 0.0_wp
     9671          surf_lsm_h(0)%amsws = 0.0_wp
     9672          surf_usm_h(0)%answs = 0.0_wp
     9673          surf_usm_h(0)%amsws = 0.0_wp
    96589674
    96599675!
     
    1002510041                                  aero_emission%mass_fracs(in,:), source_array )
    1002610042                ELSE
    10027                    CALL set_flux( surf_usm_h, aero_emission_att%cc_in2mod,                         &
     10043                   CALL set_flux( surf_usm_h(0), aero_emission_att%cc_in2mod,                      &
    1002810044                                  aero_emission%mass_fracs(in,:), source_array )
    10029                    CALL set_flux( surf_lsm_h, aero_emission_att%cc_in2mod,                         &
     10045                   CALL set_flux( surf_lsm_h(0), aero_emission_att%cc_in2mod,                      &
    1003010046                                  aero_emission%mass_fracs(in,:), source_array )
    1003110047                ENDIF
     
    1006810084                                  aero_emission%mass_fracs(in,:), source_array )
    1006910085                ELSE
    10070                    CALL set_flux( surf_usm_h, aero_emission_att%cc_in2mod,                         &
     10086                   CALL set_flux( surf_usm_h(0), aero_emission_att%cc_in2mod,                      &
    1007110087                                  aero_emission%mass_fracs(in,:), source_array )
    10072                    CALL set_flux( surf_lsm_h, aero_emission_att%cc_in2mod,                         &
     10088                   CALL set_flux( surf_lsm_h(0), aero_emission_att%cc_in2mod,                      &
    1007310089                                  aero_emission%mass_fracs(in,:), source_array )
    1007410090                ENDIF
     
    1034010356!-- Reset surface fluxes
    1034110357    surf_def_h(0)%gtsws = 0.0_wp
    10342     surf_lsm_h%gtsws = 0.0_wp
    10343     surf_usm_h%gtsws = 0.0_wp
     10358    surf_lsm_h(0)%gtsws = 0.0_wp
     10359    surf_usm_h(0)%gtsws = 0.0_wp
    1034410360
    1034510361#if defined( __netcdf )
     
    1053410550                                dum_var_3d, time_factor(in) )
    1053510551          ELSE
    10536              CALL set_gas_flux( surf_usm_h, emission_index_chem, chem_emission_att%units,       &
     10552             CALL set_gas_flux( surf_usm_h(0), emission_index_chem, chem_emission_att%units,    &
    1053710553                                dum_var_3d, time_factor(in) )
    10538              CALL set_gas_flux( surf_lsm_h, emission_index_chem, chem_emission_att%units,       &
     10554             CALL set_gas_flux( surf_lsm_h(0), emission_index_chem, chem_emission_att%units,    &
    1053910555                                dum_var_3d, time_factor(in) )
    1054010556          ENDIF
     
    1056510581                             dum_var_5d(1,1,:,:,:) )
    1056610582       ELSE
    10567           CALL set_gas_flux( surf_usm_h, emission_index_chem, chem_emission_att%units,             &
     10583          CALL set_gas_flux( surf_usm_h(0), emission_index_chem, chem_emission_att%units,          &
    1056810584                             dum_var_5d(1,1,:,:,:) )
    10569           CALL set_gas_flux( surf_lsm_h, emission_index_chem, chem_emission_att%units,             &
     10585          CALL set_gas_flux( surf_lsm_h(0), emission_index_chem, chem_emission_att%units,          &
    1057010586                             dum_var_5d(1,1,:,:,:) )
    1057110587       ENDIF
Note: See TracChangeset for help on using the changeset viewer.