Ignore:
Timestamp:
Oct 29, 2018 7:36:56 PM (5 years ago)
Author:
suehring
Message:

Branch resler -r 3439 re-integrated into current trunk: RTM 3.0, transpiration of plant canopy, output fixes in USM

File:
1 edited

Legend:

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

    r3435 r3449  
    2727! -----------------
    2828! $Id$
     29! additional output - merged from branch resler
     30!
     31! 3438 2018-10-28 19:31:42Z pavelkrc
    2932! Add terrain-following masked output
    3033!
     
    262265                                 !< neumann = zero gradient
    263266
    264     REAL(kind=wp), PUBLIC :: cs_time_step
     267    REAL(kind=wp), PUBLIC :: cs_time_step = 0._wp
    265268    CHARACTER(10), PUBLIC :: photolysis_scheme
    266269                                         ! 'constant',
     
    410413       IF ( mode == 'allocate' )  THEN
    411414          DO lsp = 1, nspec
    412              IF (TRIM(variable(4:)) == TRIM(chem_species(lsp)%name)) THEN
     415             IF ( TRIM(variable(1:3)) == 'kc_' .AND. &
     416                  TRIM(variable(4:)) == TRIM(chem_species(lsp)%name)) THEN
    413417                chem_species(lsp)%conc_av = 0.0_wp
    414                
    415418             ENDIF
    416419          ENDDO
     
    418421       ELSEIF ( mode == 'sum' )  THEN
    419422
    420 
    421423          DO lsp = 1, nspec
    422              IF (TRIM(variable(4:)) == TRIM(chem_species(lsp)%name)) THEN
     424             IF ( TRIM(variable(1:3)) == 'kc_' .AND. &
     425                  TRIM(variable(4:)) == TRIM(chem_species(lsp)%name)) THEN
    423426                DO  i = nxlg, nxrg
    424427                   DO  j = nysg, nyng
     
    462465       ELSEIF ( mode == 'average' )  THEN
    463466          DO lsp = 1, nspec
    464              IF (TRIM(variable(4:)) == TRIM(chem_species(lsp)%name)) THEN
     467             IF ( TRIM(variable(1:3)) == 'kc_' .AND. &
     468                  TRIM(variable(4:)) == TRIM(chem_species(lsp)%name)) THEN
    465469                DO  i = nxlg, nxrg
    466470                   DO  j = nysg, nyng
     
    811815       unit = 'illegal'
    812816
    813        spec_name = TRIM(var(4:))             !< var 1:3 is 'kc_'.
     817       spec_name = TRIM(var(4:))             !< var 1:3 is 'kc_' or 'em_'.
     818
     819       IF ( TRIM(var(1:3)) == 'em_' )  THEN
     820          DO lsp=1,nspec
     821             IF (TRIM(spec_name) == TRIM(chem_species(lsp)%name))   THEN
     822                unit = 'mol m-2 s-1'
     823             ENDIF
     824             !-- It is possible to plant PM10 and PM25 into the gasphase chemistry code
     825             !-- as passive species (e.g. 'passive' in GASPHASE_PREPROC/mechanisms):
     826             !-- set unit to micrograms per m**3 for PM10 and PM25 (PM2.5)
     827             IF (spec_name(1:2) == 'PM')   THEN
     828                unit = 'kg m-2 s-1'
     829             ENDIF
     830          ENDDO
     831
     832       ELSE
    814833
    815834          DO lsp=1,nspec
     
    821840!            set unit to micrograms per m**3 for PM10 and PM25 (PM2.5)
    822841             IF (spec_name(1:2) == 'PM')   THEN 
    823             unit = 'kg m-3'
     842               unit = 'kg m-3'
    824843             ENDIF
    825844          ENDDO
    826845
    827           DO lsp=1,nphot                                                     
     846          DO lsp=1,nphot
    828847             IF (TRIM(spec_name) == TRIM(phot_frequen(lsp)%name))   THEN
    829848                unit = 'sec-1'
    830849             ENDIF
    831850          ENDDO
    832 
    833 
    834        RETURN
     851       ENDIF
     852
     853
     854      RETURN
    835855    END SUBROUTINE chem_check_data_output
    836856!
     
    933953          CALL message( 'chem_check_parameters', 'CM0426', 1, 2, 0, 6, 0 )
    934954       ENDIF
     955
     956!---------------------
     957!--    chem_check_parameters is called before the array chem_species is allocated!
     958!--    temporary switch of this part of the check
     959       RETURN
     960!---------------------
    935961
    936962!--    check for initial chem species input
     
    10761102       USE kinds
    10771103
     1104       USE surface_mod
     1105
     1106       !USE chem_modules, ONLY: nvar
    10781107
    10791108       IMPLICIT NONE
     
    10911120
    10921121       !-- local variables
    1093 
    1094        INTEGER              ::  i, j, k, lsp
    10951122       CHARACTER(len=16)    ::  spec_name
     1123       INTEGER(iwp)         ::  i, j, k
     1124       INTEGER(iwp)         ::  m, l    !< running indices for surfaces
     1125       INTEGER(iwp)         ::  lsp  !< running index for chem spcs
    10961126
    10971127
    10981128       found = .FALSE.
     1129       IF ( .NOT. (variable(1:3) == 'kc_' .OR. variable(1:3) == 'em_' ) ) THEN
     1130          RETURN
     1131       ENDIF
    10991132
    11001133       spec_name = TRIM(variable(4:))
    11011134
    1102        DO lsp=1,nspec
    1103           IF (TRIM(spec_name) == TRIM(chem_species(lsp)%name))   THEN
     1135       IF ( variable(1:3) == 'em_' ) THEN
     1136
     1137         local_pf = 0.0_wp
     1138
     1139         DO lsp = 1, nvar  !!! cssws - nvar species, chem_species - nspec species !!!
     1140            IF ( TRIM(spec_name) == TRIM(chem_species(lsp)%name) )   THEN
     1141               ! no average for now
     1142               DO m = 1, surf_usm_h%ns
     1143                  local_pf(surf_usm_h%i(m),surf_usm_h%j(m),surf_usm_h%k(m)) = &
     1144                     local_pf(surf_usm_h%i(m),surf_usm_h%j(m),surf_usm_h%k(m)) + surf_usm_h%cssws(lsp,m)
     1145               ENDDO
     1146               DO m = 1, surf_lsm_h%ns
     1147                  local_pf(surf_lsm_h%i(m),surf_lsm_h%j(m),surf_lsm_h%k(m)) = &
     1148                     local_pf(surf_lsm_h%i(m),surf_lsm_h%j(m),surf_lsm_h%k(m)) + surf_lsm_h%cssws(lsp,m)
     1149               ENDDO
     1150               DO l = 0, 3
     1151                  DO m = 1, surf_usm_v(l)%ns
     1152                     local_pf(surf_usm_v(l)%i(m),surf_usm_v(l)%j(m),surf_usm_v(l)%k(m)) = &
     1153                        local_pf(surf_usm_v(l)%i(m),surf_usm_v(l)%j(m),surf_usm_v(l)%k(m)) + surf_usm_v(l)%cssws(lsp,m)
     1154                  ENDDO
     1155                  DO m = 1, surf_lsm_v(l)%ns
     1156                     local_pf(surf_lsm_v(l)%i(m),surf_lsm_v(l)%j(m),surf_lsm_v(l)%k(m)) = &
     1157                        local_pf(surf_lsm_v(l)%i(m),surf_lsm_v(l)%j(m),surf_lsm_v(l)%k(m)) + surf_lsm_v(l)%cssws(lsp,m)
     1158                  ENDDO
     1159               ENDDO
     1160               found = .TRUE.
     1161            ENDIF
     1162         ENDDO
     1163       ELSE
     1164         DO lsp=1,nspec
     1165            IF (TRIM(spec_name) == TRIM(chem_species(lsp)%name))   THEN
    11041166!
    11051167!--   todo: remove or replace by "CALL message" mechanism (kanani)
    11061168!              IF(myid == 0 .AND. chem_debug0 )  WRITE(6,*) 'Output of species ' // TRIM(variable)  //  &
    11071169!                                                           TRIM(chem_species(lsp)%name)       
    1108              
    1109              IF (av == 0) THEN
    1110                 DO  i = nxl, nxr
    1111                    DO  j = nys, nyn
    1112                       DO  k = nzb_do, nzt_do
    1113                           local_pf(i,j,k) = MERGE(                             &
    1114                                               chem_species(lsp)%conc(k,j,i),   &
    1115                                               REAL( fill_value, KIND = wp ),   &
    1116                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    1117                       ENDDO
    1118                    ENDDO
    1119                 ENDDO
    1120            
    1121              ELSE
    1122                 DO  i = nxl, nxr
    1123                    DO  j = nys, nyn
    1124                       DO  k = nzb_do, nzt_do
    1125                           local_pf(i,j,k) = MERGE(                             &
    1126                                               chem_species(lsp)%conc_av(k,j,i),&
    1127                                               REAL( fill_value, KIND = wp ),   &
    1128                                               BTEST( wall_flags_0(k,j,i), 0 ) )
    1129                       ENDDO
    1130                    ENDDO
    1131                 ENDDO
    1132              ENDIF
    1133 
    1134              found = .TRUE.
    1135           ENDIF
    1136        ENDDO
     1170               IF (av == 0) THEN
     1171                  DO  i = nxl, nxr
     1172                     DO  j = nys, nyn
     1173                        DO  k = nzb_do, nzt_do
     1174                            local_pf(i,j,k) = MERGE(                             &
     1175                                                chem_species(lsp)%conc(k,j,i),   &
     1176                                                REAL( fill_value, KIND = wp ),   &
     1177                                                BTEST( wall_flags_0(k,j,i), 0 ) )
     1178                        ENDDO
     1179                     ENDDO
     1180                  ENDDO
     1181
     1182               ELSE
     1183                  DO  i = nxl, nxr
     1184                     DO  j = nys, nyn
     1185                        DO  k = nzb_do, nzt_do
     1186                            local_pf(i,j,k) = MERGE(                             &
     1187                                                chem_species(lsp)%conc_av(k,j,i),&
     1188                                                REAL( fill_value, KIND = wp ),   &
     1189                                                BTEST( wall_flags_0(k,j,i), 0 ) )
     1190                        ENDDO
     1191                     ENDDO
     1192                  ENDDO
     1193               ENDIF
     1194               found = .TRUE.
     1195            ENDIF
     1196         ENDDO
     1197       ENDIF
    11371198
    11381199       RETURN
     1200
    11391201    END SUBROUTINE chem_data_output_3d
    11401202!
     
    11771239
    11781240       spec_name = TRIM( variable(4:) )
    1179    !av == 0
     1241       !av == 0
    11801242
    11811243       DO lsp=1,nspec
     
    12921354       found  = .TRUE.
    12931355
    1294        IF (var(1:3) == 'kc_')   THEN                   !< always the same grid for chemistry variables
     1356       IF ( var(1:3) == 'kc_' .OR. var(1:3) == 'em_' )   THEN                   !< always the same grid for chemistry variables
    12951357          grid_x = 'x'
    12961358          grid_y = 'y'
     
    18731935 !--   Enable chemistry model
    18741936       air_chemistry = .TRUE.                   
    1875       GOTO 20
    1876 
    1877  10   BACKSPACE( 11 )
    1878       READ( 11 , '(A)') line
    1879       CALL parin_fail_message( 'chemistry_parameters', line )
    1880 
    1881  20   CONTINUE
     1937       GOTO 20
     1938
     1939 10    BACKSPACE( 11 )
     1940       READ( 11 , '(A)') line
     1941       CALL parin_fail_message( 'chemistry_parameters', line )
     1942
     1943 20    CONTINUE
    18821944
    18831945!
Note: See TracChangeset for help on using the changeset viewer.