Changeset 3449 for palm/trunk/SOURCE/chemistry_model_mod.f90
- Timestamp:
- Oct 29, 2018 7:36:56 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/chemistry_model_mod.f90
r3435 r3449 27 27 ! ----------------- 28 28 ! $Id$ 29 ! additional output - merged from branch resler 30 ! 31 ! 3438 2018-10-28 19:31:42Z pavelkrc 29 32 ! Add terrain-following masked output 30 33 ! … … 262 265 !< neumann = zero gradient 263 266 264 REAL(kind=wp), PUBLIC :: cs_time_step 267 REAL(kind=wp), PUBLIC :: cs_time_step = 0._wp 265 268 CHARACTER(10), PUBLIC :: photolysis_scheme 266 269 ! 'constant', … … 410 413 IF ( mode == 'allocate' ) THEN 411 414 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 413 417 chem_species(lsp)%conc_av = 0.0_wp 414 415 418 ENDIF 416 419 ENDDO … … 418 421 ELSEIF ( mode == 'sum' ) THEN 419 422 420 421 423 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 423 426 DO i = nxlg, nxrg 424 427 DO j = nysg, nyng … … 462 465 ELSEIF ( mode == 'average' ) THEN 463 466 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 465 469 DO i = nxlg, nxrg 466 470 DO j = nysg, nyng … … 811 815 unit = 'illegal' 812 816 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 814 833 815 834 DO lsp=1,nspec … … 821 840 ! set unit to micrograms per m**3 for PM10 and PM25 (PM2.5) 822 841 IF (spec_name(1:2) == 'PM') THEN 823 unit = 'kg m-3'842 unit = 'kg m-3' 824 843 ENDIF 825 844 ENDDO 826 845 827 DO lsp=1,nphot 846 DO lsp=1,nphot 828 847 IF (TRIM(spec_name) == TRIM(phot_frequen(lsp)%name)) THEN 829 848 unit = 'sec-1' 830 849 ENDIF 831 850 ENDDO 832 833 834 RETURN 851 ENDIF 852 853 854 RETURN 835 855 END SUBROUTINE chem_check_data_output 836 856 ! … … 933 953 CALL message( 'chem_check_parameters', 'CM0426', 1, 2, 0, 6, 0 ) 934 954 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 !--------------------- 935 961 936 962 !-- check for initial chem species input … … 1076 1102 USE kinds 1077 1103 1104 USE surface_mod 1105 1106 !USE chem_modules, ONLY: nvar 1078 1107 1079 1108 IMPLICIT NONE … … 1091 1120 1092 1121 !-- local variables 1093 1094 INTEGER :: i, j, k, lsp1095 1122 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 1096 1126 1097 1127 1098 1128 found = .FALSE. 1129 IF ( .NOT. (variable(1:3) == 'kc_' .OR. variable(1:3) == 'em_' ) ) THEN 1130 RETURN 1131 ENDIF 1099 1132 1100 1133 spec_name = TRIM(variable(4:)) 1101 1134 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 1104 1166 ! 1105 1167 !-- todo: remove or replace by "CALL message" mechanism (kanani) 1106 1168 ! IF(myid == 0 .AND. chem_debug0 ) WRITE(6,*) 'Output of species ' // TRIM(variable) // & 1107 1169 ! 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 1137 1198 1138 1199 RETURN 1200 1139 1201 END SUBROUTINE chem_data_output_3d 1140 1202 ! … … 1177 1239 1178 1240 spec_name = TRIM( variable(4:) ) 1179 !av == 01241 !av == 0 1180 1242 1181 1243 DO lsp=1,nspec … … 1292 1354 found = .TRUE. 1293 1355 1294 IF ( var(1:3) == 'kc_') THEN !< always the same grid for chemistry variables1356 IF ( var(1:3) == 'kc_' .OR. var(1:3) == 'em_' ) THEN !< always the same grid for chemistry variables 1295 1357 grid_x = 'x' 1296 1358 grid_y = 'y' … … 1873 1935 !-- Enable chemistry model 1874 1936 air_chemistry = .TRUE. 1875 GOTO 201876 1877 10 BACKSPACE( 11 )1878 READ( 11 , '(A)') line1879 CALL parin_fail_message( 'chemistry_parameters', line )1880 1881 20 CONTINUE1937 GOTO 20 1938 1939 10 BACKSPACE( 11 ) 1940 READ( 11 , '(A)') line 1941 CALL parin_fail_message( 'chemistry_parameters', line ) 1942 1943 20 CONTINUE 1882 1944 1883 1945 !
Note: See TracChangeset
for help on using the changeset viewer.