Changeset 4086 for trunk/LMDZ.VENUS
- Timestamp:
- Feb 26, 2026, 3:11:06 PM (5 weeks ago)
- File:
-
- 1 edited
-
trunk/LMDZ.VENUS/libf/phyvenus/physiq_mod.F (modified) (7 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.VENUS/libf/phyvenus/physiq_mod.F
r4080 r4086 988 988 c END OF INITIALISATIONS 989 989 c====================================================================== 990 c======================================================================991 990 992 991 c======================================================= … … 1075 1074 1076 1075 else if (tr_scheme.eq.3) then 1076 1077 1077 !==================================================================== 1078 1078 ! Case 3: Full chemistry and/or clouds. … … 1088 1088 zctime = dtime*real(chempas) ! chemical timestep 1089 1089 1090 IF (cl_scheme .eq. 2) THEN1091 DO i=1,klon1092 call aer_production(zctime,klev,pplay(i,:),1093 $ zzlev(i,:),zzlay(i,:),dM0_prod,dM3_prod)1094 tr_seri(i,:,i_m0_aer) = tr_seri(i,:,i_m0_aer) +1095 $ dM0_prod(:)1096 tr_seri(i,:,i_m3_aer) = tr_seri(i,:,i_m3_aer) +1097 $ dM3_prod(:)1098 END DO1099 ENDIF1090 if (cl_scheme == 2) then 1091 do i = 1,klon 1092 call aer_production(zctime,klev,pplay(i,:), 1093 $ zzlev(i,:),zzlay(i,:),dM0_prod,dM3_prod) 1094 tr_seri(i,:,i_m0_aer) = tr_seri(i,:,i_m0_aer) 1095 $ + dM0_prod(:) 1096 tr_seri(i,:,i_m3_aer) = tr_seri(i,:,i_m3_aer) 1097 $ + dM3_prod(:) 1098 end do 1099 end if 1100 1100 1101 1101 if (mod(itap,chempas) == 0) then ! <------- start of chemistry supercycling … … 1103 1103 ! photochemistry and microphysics 1104 1104 1105 call phytrac_chimie(debut,1105 call phytrac_chimie(debut, 1106 1106 $ gmtime, 1107 1107 $ nqmax, … … 1123 1123 $ o2_emission) 1124 1124 1125 if (ok_sedim) then1125 if (ok_sedim) then 1126 1126 if (cl_scheme == 1) then 1127 1127 … … 1168 1168 ! sedimentation for detailed microphysics 1169 1169 1170 d_tr_sed(:,:,:) = 0.1171 1172 ! aerosols1170 d_tr_sed(:,:,:) = 0. 1171 1172 ! aerosols 1173 1173 1174 1174 call sedim_mad_aer(klon, klev, zctime, pplay, paprs, 1175 $ rho, zzlev,t_seri,d_tr_sed(:,:,1:2), 1176 $ tr_seri,nqmax) 1177 1178 1179 d_tr_sed(:,:,i_m0_aer)= d_tr_sed(:,:,1) / zctime 1180 d_tr_sed(:,:,i_m3_aer) = d_tr_sed(:,:,2) / zctime 1181 1182 1183 ! mode 1 1175 $ rho, zzlev,t_seri,d_tr_sed(:,:,1:2), 1176 $ tr_seri,nqmax) 1177 1178 d_tr_sed(:,:,i_m0_aer) = d_tr_sed(:,:,1)/zctime 1179 d_tr_sed(:,:,i_m3_aer) = d_tr_sed(:,:,2)/zctime 1180 1181 ! mode 1 1184 1182 1185 1183 d_tr_sed(:,:,:) = 0. 1186 call sedim_mad_m1(klon, klev, zctime, pplay, paprs,1184 call sedim_mad_m1(klon, klev, zctime, pplay, paprs, 1187 1185 $ rho, zzlev,t_seri,d_tr_sed(:,:,1:5), 1188 $ tr_seri,nqmax,r1tab,RHOtab,sigma1) 1189 1190 1191 d_tr_sed(:,:,i_m0_mode1drop)= d_tr_sed(:,:,1) / zctime 1192 d_tr_sed(:,:,i_m0_mode1ccn) = d_tr_sed(:,:,2) / zctime 1193 d_tr_sed(:,:,i_m3_mode1ccn) = d_tr_sed(:,:,3) / zctime 1194 d_tr_sed(:,:,i_m3_mode1sa) = d_tr_sed(:,:,4) / zctime 1195 d_tr_sed(:,:,i_m3_mode1wv) = d_tr_sed(:,:,5) / zctime 1196 1197 ! mode 2 1186 $ tr_seri,nqmax,r1tab,RHOtab,sigma1) 1187 1188 d_tr_sed(:,:,i_m0_mode1drop) = d_tr_sed(:,:,1)/zctime 1189 d_tr_sed(:,:,i_m0_mode1ccn) = d_tr_sed(:,:,2)/zctime 1190 d_tr_sed(:,:,i_m3_mode1ccn) = d_tr_sed(:,:,3)/zctime 1191 d_tr_sed(:,:,i_m3_mode1sa) = d_tr_sed(:,:,4)/zctime 1192 d_tr_sed(:,:,i_m3_mode1wv) = d_tr_sed(:,:,5)/zctime 1193 1194 ! mode 2 1198 1195 1199 1196 d_tr_sed(:,:,:) = 0. 1200 call sedim_mad_m2 (klon, klev, zctime, pplay, paprs, 1201 $ rho,zzlev,t_seri,d_tr_sed(:,:,1:5), 1202 $ tr_seri,nqmax,r2tab,RHOtab,sigma2) 1203 1204 1205 d_tr_sed(:,:,i_m0_mode2drop)= d_tr_sed(:,:,1) / zctime 1206 d_tr_sed(:,:,i_m0_mode2ccn) = d_tr_sed(:,:,2) / zctime 1207 d_tr_sed(:,:,i_m3_mode2ccn) = d_tr_sed(:,:,3) / zctime 1208 d_tr_sed(:,:,i_m3_mode2sa) = d_tr_sed(:,:,4) / zctime 1209 d_tr_sed(:,:,i_m3_mode2wv) = d_tr_sed(:,:,5) / zctime 1197 call sedim_mad_m2(klon, klev, zctime, pplay, paprs, 1198 $ rho,zzlev,t_seri,d_tr_sed(:,:,1:5), 1199 $ tr_seri,nqmax,r2tab,RHOtab,sigma2) 1200 1201 d_tr_sed(:,:,i_m0_mode2drop) = d_tr_sed(:,:,1)/zctime 1202 d_tr_sed(:,:,i_m0_mode2ccn) = d_tr_sed(:,:,2)/zctime 1203 d_tr_sed(:,:,i_m3_mode2ccn) = d_tr_sed(:,:,3)/zctime 1204 d_tr_sed(:,:,i_m3_mode2sa) = d_tr_sed(:,:,4)/zctime 1205 d_tr_sed(:,:,i_m3_mode2wv) = d_tr_sed(:,:,5)/zctime 1210 1206 1211 ! tendency due to sedimentation1212 1213 1214 1215 1207 #endif 1216 1208 end if ! cl_scheme … … 1219 1211 ! update gaseous tracers (chemistry) 1220 1212 1221 do iq = 1, nqmax - nmicro1222 tr_seri(:,:,iq) = max(tr_seri(:,:,iq)1223 $ + d_tr_chem(:,:,iq)*zctime,1.e-30)1224 end do1213 do iq = 1, nqmax - nmicro 1214 tr_seri(:,:,iq) = max(tr_seri(:,:,iq) 1215 $ + d_tr_chem(:,:,iq)*zctime,1.e-30) 1216 end do 1225 1217 1226 1218 ! update condensed tracers (condensation + sedimentation) 1227 1219 1228 if (cl_scheme == 1) then1229 tr_seri(:,:,i_h2so4liq) = max(tr_seri(:,:,i_h2so4liq) 1230 $ + d_tr_sed(:,:,1)*zctime, 1.e-30)1231 tr_seri(:,:,i_h2oliq) = max(tr_seri(:,:,i_h2oliq)1232 $ + d_tr_sed(:,:,2)*zctime, 1.e-30)1233 else if (cl_scheme == 2) then1234 1235 tr_seri(:,:,i_m0_aer) = tr_seri(:,:,i_m0_aer)1236 $ + d_tr_micro(:,:,i_m0_aer)*zctime 1237 $ + d_tr_sed(:,:,i_m0_aer)*zctime1238 tr_seri(:,:,i_m3_aer) = tr_seri(:,:,i_m3_aer)1239 $ + d_tr_micro(:,:,i_m3_aer)*zctime1240 $ + d_tr_sed(:,:,i_m3_aer)*zctime1241 1242 tr_seri(:,:,i_m0_mode1drop) = tr_seri(:,:,i_m0_mode1drop)1243 $ + d_tr_micro(:,:,i_m0_mode1drop)*zctime 1244 $ + d_tr_sed(:,:,i_m0_mode1drop)*zctime1245 tr_seri(:,:,i_m0_mode1ccn) = tr_seri(:,:,i_m0_mode1ccn)1246 $ + d_tr_micro(:,:,i_m0_mode1ccn)*zctime1247 $ + d_tr_sed(:,:,i_m0_mode1ccn)*zctime1248 1249 1250 tr_seri(:,:,i_m3_mode1sa) = tr_seri(:,:,i_m3_mode1sa) 1251 $ + d_tr_micro(:,:,i_m3_mode1sa)*zctime1252 $ + d_tr_sed(:,:,i_m3_mode1sa)*zctime1253 tr_seri(:,:,i_m3_mode1wv) = tr_seri(:,:,i_m3_mode1wv)1254 $ + d_tr_micro(:,:,i_m3_mode1wv)*zctime1255 $ + d_tr_sed(:,:,i_m3_mode1wv)*zctime1256 tr_seri(:,:,i_m3_mode1ccn) = tr_seri(:,:,i_m3_mode1ccn)1257 $ + d_tr_micro(:,:,i_m3_mode1ccn)*zctime1258 $ + d_tr_sed(:,:,i_m3_mode1ccn)*zctime1259 1260 tr_seri(:,:,i_m0_mode2drop) = tr_seri(:,:,i_m0_mode2drop) 1261 $ + d_tr_micro(:,:,i_m0_mode2drop)*zctime1262 $ + d_tr_sed(:,:,i_m0_mode2drop)*zctime1263 tr_seri(:,:,i_m0_mode2ccn) = tr_seri(:,:,i_m0_mode2ccn)1264 $ + d_tr_micro(:,:,i_m0_mode2ccn)*zctime1265 $ + d_tr_sed(:,:,i_m0_mode2ccn)*zctime1266 1267 tr_seri(:,:,i_m3_mode2sa) = tr_seri(:,:,i_m3_mode2sa) 1268 $ + d_tr_micro(:,:,i_m3_mode2sa)*zctime1269 $ + d_tr_sed(:,:,i_m3_mode2sa)*zctime1270 tr_seri(:,:,i_m3_mode2wv) = tr_seri(:,:,i_m3_mode2wv)1271 $ + d_tr_micro(:,:,i_m3_mode2wv)*zctime1272 $ + d_tr_sed(:,:,i_m3_mode2wv)*zctime1273 tr_seri(:,:,i_m3_mode2ccn) = tr_seri(:,:,i_m3_mode2ccn)1274 $ + d_tr_micro(:,:,i_m3_mode2ccn)*zctime1275 $ + d_tr_sed(:,:,i_m3_mode2ccn)*zctime1276 1277 1278 tr_seri(:,:,i_h2so4liq) = RHOas * (4.D0*PI/3.D0)*1279 $ (tr_seri(:,:,i_m3_mode2sa) + tr_seri(:,:,i_m3_mode1sa))1280 1281 tr_seri(:,:,i_h2oliq) = RHOwv * (4.D0*PI/3.D0)* 1282 $ (tr_seri(:,:,i_m3_mode2wv) + tr_seri(:,:,i_m3_mode1wv))1283 1284 do k = 1, klev1285 do i = 1, klon 1286 if (tr_seri(i,k,i_m3_mode1sa) .LT. 1e-18) then1287 tr_seri(:,:,i_m0_aer) = tr_seri(:,:,i_m0_aer)+1288 $ tr_seri(i,k,i_m0_mode1ccn)1289 1290 tr_seri(:,:,i_m3_aer) = tr_seri(:,:,i_m3_aer)+1291 $ tr_seri(i,k,i_m3_mode1ccn) 1292 1293 tr_seri(i,k,i_m3_mode1sa) = 0.D01294 tr_seri(i,k,i_m3_mode1wv) = 0.D0 1295 1296 tr_seri(i,k,i_m3_mode1ccn) = 0.D01297 1298 tr_seri(i,k,i_m0_mode1drop) = 0.D01299 tr_seri(i,k,i_m0_mode1ccn) = 0.D01300 endif1220 if (cl_scheme == 1) then 1221 1222 tr_seri(:,:,i_h2so4liq) = max(tr_seri(:,:,i_h2so4liq) 1223 $ + d_tr_sed(:,:,1)*zctime, 1.e-30) 1224 tr_seri(:,:,i_h2oliq) = max(tr_seri(:,:,i_h2oliq) 1225 $ + d_tr_sed(:,:,2)*zctime, 1.e-30) 1226 1227 else if (cl_scheme == 2) then 1228 1229 tr_seri(:,:,i_m0_aer) = tr_seri(:,:,i_m0_aer) 1230 $ + d_tr_micro(:,:,i_m0_aer)*zctime 1231 $ + d_tr_sed(:,:,i_m0_aer)*zctime 1232 tr_seri(:,:,i_m3_aer) = tr_seri(:,:,i_m3_aer) 1233 $ + d_tr_micro(:,:,i_m3_aer)*zctime 1234 $ + d_tr_sed(:,:,i_m3_aer)*zctime 1235 1236 tr_seri(:,:,i_m0_mode1drop) = tr_seri(:,:,i_m0_mode1drop) 1237 $ + d_tr_micro(:,:,i_m0_mode1drop)*zctime 1238 $ + d_tr_sed(:,:,i_m0_mode1drop)*zctime 1239 tr_seri(:,:,i_m0_mode1ccn) = tr_seri(:,:,i_m0_mode1ccn) 1240 $ + d_tr_micro(:,:,i_m0_mode1ccn)*zctime 1241 $ + d_tr_sed(:,:,i_m0_mode1ccn)*zctime 1242 1243 tr_seri(:,:,i_m3_mode1sa) = tr_seri(:,:,i_m3_mode1sa) 1244 $ + d_tr_micro(:,:,i_m3_mode1sa)*zctime 1245 $ + d_tr_sed(:,:,i_m3_mode1sa)*zctime 1246 tr_seri(:,:,i_m3_mode1wv) = tr_seri(:,:,i_m3_mode1wv) 1247 $ + d_tr_micro(:,:,i_m3_mode1wv)*zctime 1248 $ + d_tr_sed(:,:,i_m3_mode1wv)*zctime 1249 tr_seri(:,:,i_m3_mode1ccn) = tr_seri(:,:,i_m3_mode1ccn) 1250 $ + d_tr_micro(:,:,i_m3_mode1ccn)*zctime 1251 $ + d_tr_sed(:,:,i_m3_mode1ccn)*zctime 1252 1253 tr_seri(:,:,i_m0_mode2drop) = tr_seri(:,:,i_m0_mode2drop) 1254 $ + d_tr_micro(:,:,i_m0_mode2drop)*zctime 1255 $ + d_tr_sed(:,:,i_m0_mode2drop)*zctime 1256 tr_seri(:,:,i_m0_mode2ccn) = tr_seri(:,:,i_m0_mode2ccn) 1257 $ + d_tr_micro(:,:,i_m0_mode2ccn)*zctime 1258 $ + d_tr_sed(:,:,i_m0_mode2ccn)*zctime 1259 1260 tr_seri(:,:,i_m3_mode2sa) = tr_seri(:,:,i_m3_mode2sa) 1261 $ + d_tr_micro(:,:,i_m3_mode2sa)*zctime 1262 $ + d_tr_sed(:,:,i_m3_mode2sa)*zctime 1263 tr_seri(:,:,i_m3_mode2wv) = tr_seri(:,:,i_m3_mode2wv) 1264 $ + d_tr_micro(:,:,i_m3_mode2wv)*zctime 1265 $ + d_tr_sed(:,:,i_m3_mode2wv)*zctime 1266 tr_seri(:,:,i_m3_mode2ccn) = tr_seri(:,:,i_m3_mode2ccn) 1267 $ + d_tr_micro(:,:,i_m3_mode2ccn)*zctime 1268 $ + d_tr_sed(:,:,i_m3_mode2ccn)*zctime 1269 1270 tr_seri(:,:,i_h2so4liq) = RHOas*(4.D0*PI/3.D0) 1271 $ *(tr_seri(:,:,i_m3_mode2sa) 1272 $ + tr_seri(:,:,i_m3_mode1sa)) 1273 1274 tr_seri(:,:,i_h2oliq) = RHOwv*(4.D0*PI/3.D0) 1275 $ *(tr_seri(:,:,i_m3_mode2wv) 1276 $ + tr_seri(:,:,i_m3_mode1wv)) 1277 1278 do k = 1, klev 1279 do i = 1, klon 1280 if (tr_seri(i,k,i_m3_mode1sa) < 1e-18) then 1281 tr_seri(:,:,i_m0_aer) = tr_seri(:,:,i_m0_aer) 1282 $ + tr_seri(i,k,i_m0_mode1ccn) 1283 1284 tr_seri(:,:,i_m3_aer) = tr_seri(:,:,i_m3_aer) 1285 $ + tr_seri(i,k,i_m3_mode1ccn) 1286 1287 tr_seri(i,k,i_m3_mode1sa) = 0.D0 1288 tr_seri(i,k,i_m3_mode1wv) = 0.D0 1289 tr_seri(i,k,i_m3_mode1ccn) = 0.D0 1290 tr_seri(i,k,i_m0_mode1drop) = 0.D0 1291 tr_seri(i,k,i_m0_mode1ccn) = 0.D0 1292 end if 1301 1293 1302 if (tr_seri(i,k,i_m3_mode2sa) .LT. 1e-18) then 1303 tr_seri(:,:,i_m0_aer) = tr_seri(:,:,i_m0_aer)+ 1304 $ tr_seri(i,k,i_m0_mode2ccn) 1305 1306 tr_seri(:,:,i_m3_aer) = tr_seri(:,:,i_m3_aer)+ 1307 $ tr_seri(i,k,i_m3_mode2ccn) 1308 1309 tr_seri(i,k,i_m3_mode2sa) = 0.D0 1310 tr_seri(i,k,i_m3_mode2wv) = 0.D0 1311 tr_seri(i,k,i_m3_mode2ccn) = 0.D0 1312 1313 tr_seri(i,k,i_m0_mode2drop) = 0.D0 1314 tr_seri(i,k,i_m0_mode2ccn) = 0.D0 1315 endif 1316 enddo 1317 enddo 1318 1319 tr_seri(:,:,i_h2o) = tr_seri(:,:,i_h2o) 1320 $ + d_tr_micro(:,:,i_h2o)*zctime 1321 tr_seri(:,:,i_h2so4) = tr_seri(:,:,i_h2so4) 1322 $ + d_tr_micro(:,:,i_h2so4)*zctime 1323 1324 end if ! cl_scheme 1294 if (tr_seri(i,k,i_m3_mode2sa) < 1e-18) then 1295 tr_seri(:,:,i_m0_aer) = tr_seri(:,:,i_m0_aer) 1296 $ + tr_seri(i,k,i_m0_mode2ccn) 1297 1298 tr_seri(:,:,i_m3_aer) = tr_seri(:,:,i_m3_aer) 1299 $ + tr_seri(i,k,i_m3_mode2ccn) 1300 1301 tr_seri(i,k,i_m3_mode2sa) = 0.D0 1302 tr_seri(i,k,i_m3_mode2wv) = 0.D0 1303 tr_seri(i,k,i_m3_mode2ccn) = 0.D0 1304 tr_seri(i,k,i_m0_mode2drop) = 0.D0 1305 tr_seri(i,k,i_m0_mode2ccn) = 0.D0 1306 end if 1307 end do 1308 end do 1309 1310 tr_seri(:,:,i_h2o) = tr_seri(:,:,i_h2o) 1311 $ + d_tr_micro(:,:,i_h2o)*zctime 1312 tr_seri(:,:,i_h2so4) = tr_seri(:,:,i_h2so4) 1313 $ + d_tr_micro(:,:,i_h2so4)*zctime 1314 1315 end if ! cl_scheme <------- end of microphysics option 1325 1316 end if ! mod(itap,chempas) <------- end of chemistry supercycling 1326 1317 1327 !========= 1328 ! End Case 3: Full chemistry and/or clouds. 1329 !==================================================================== 1330 1331 end if ! tr_scheme 1318 end if ! tr_scheme <------- end of chemistry option 1332 1319 end if ! iflag_trac 1333 1320
Note: See TracChangeset
for help on using the changeset viewer.
