- Timestamp:
- May 26, 2022, 9:19:51 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/mo_simple_plumes.F90
r4103 r4164 38 38 !$OMP THREADPRIVATE(sp_initialized) 39 39 40 REAL ::&40 REAL, SAVE :: & 41 41 plume_lat (nplumes) ,& !< latitude of plume center (AOD maximum) 42 42 plume_lon (nplumes) ,& !< longitude of plume center (AOD maximum) … … 54 54 theta (nfeatures,nplumes) ,& !< Rotation angle of plume feature 55 55 ftr_weight (nfeatures,nplumes) ,& !< Feature weights 56 time_weight (nfeatures,nplumes) ,& !< Time weights57 time_weight_bg (nfeatures,nplumes) ,& !< as time_weight but for natural background in Twomey effect58 56 year_weight (nyears,nplumes) ,& !< Yearly weight for plume 59 57 ann_cycle (nfeatures,ntimes,nplumes) !< annual cycle for plume feature … … 61 59 !$OMP THREADPRIVATE(sig_lon_E,sig_lon_W,sig_lat_E,sig_lat_W,theta,ftr_weight,year_weight,ann_cycle) 62 60 61 REAL :: & 62 time_weight (nfeatures,nplumes) ,& !< Time weights 63 time_weight_bg (nfeatures,nplumes) !< as time_weight but for natural background in Twomey effect 64 63 65 PUBLIC sp_aop_profile 64 66 … … 80 82 CHARACTER (len = 50) :: modname = 'mo_simple_plumes.sp_setup' 81 83 CHARACTER (len = 80) :: abort_message 82 83 84 ! 84 85 ! ---------- … … 130 131 CALL abort_physic(modname,abort_message,1) 131 132 ENDIF 133 ! 132 134 iret = nf90_inq_varid(ncid, "plume_lon", VarId) 133 135 iret = nf90_get_var(ncid, VarID, plume_lon(:), start=(/1/),count=(/nplumes/)) … … 136 138 CALL abort_physic(modname,abort_message,1) 137 139 ENDIF 140 ! 138 141 iret = nf90_inq_varid(ncid, "beta_a" , VarId) 139 142 iret = nf90_get_var(ncid, VarID, beta_a(:) , start=(/1/),count=(/nplumes/)) … … 142 145 CALL abort_physic(modname,abort_message,1) 143 146 ENDIF 147 ! 144 148 iret = nf90_inq_varid(ncid, "beta_b" , VarId) 145 149 iret = nf90_get_var(ncid, VarID, beta_b(:) , start=(/1/),count=(/nplumes/)) … … 148 152 CALL abort_physic(modname,abort_message,1) 149 153 ENDIF 154 ! 150 155 iret = nf90_inq_varid(ncid, "aod_spmx" , VarId) 151 156 iret = nf90_get_var(ncid, VarID, aod_spmx(:) , start=(/1/),count=(/nplumes/)) … … 154 159 CALL abort_physic(modname,abort_message,1) 155 160 ENDIF 161 ! 156 162 iret = nf90_inq_varid(ncid, "aod_fmbg" , VarId) 157 163 iret = nf90_get_var(ncid, VarID, aod_fmbg(:) , start=(/1/),count=(/nplumes/)) … … 160 166 CALL abort_physic(modname,abort_message,1) 161 167 ENDIF 168 ! 162 169 iret = nf90_inq_varid(ncid, "ssa550" , VarId) 163 170 iret = nf90_get_var(ncid, VarID, ssa550(:) , start=(/1/),count=(/nplumes/)) … … 166 173 CALL abort_physic(modname,abort_message,1) 167 174 ENDIF 175 ! 168 176 iret = nf90_inq_varid(ncid, "asy550" , VarId) 169 177 iret = nf90_get_var(ncid, VarID, asy550(:) , start=(/1/),count=(/nplumes/)) … … 172 180 CALL abort_physic(modname,abort_message,1) 173 181 ENDIF 182 ! 174 183 iret = nf90_inq_varid(ncid, "angstrom" , VarId) 175 184 iret = nf90_get_var(ncid, VarID, angstrom(:), start=(/1/),count=(/nplumes/)) … … 185 194 CALL abort_physic(modname,abort_message,1) 186 195 ENDIF 196 ! 187 197 iret = nf90_inq_varid(ncid, "sig_lat_E" , VarId) 188 198 iret = nf90_get_var(ncid, VarID, sig_lat_E(:,:) , start=(/1,1/),count=(/nfeatures,nplumes/)) … … 191 201 CALL abort_physic(modname,abort_message,1) 192 202 ENDIF 203 ! 193 204 iret = nf90_inq_varid(ncid, "sig_lon_E" , VarId) 194 205 iret = nf90_get_var(ncid, VarID, sig_lon_E(:,:) , start=(/1,1/),count=(/nfeatures,nplumes/)) … … 197 208 CALL abort_physic(modname,abort_message,1) 198 209 ENDIF 210 ! 199 211 iret = nf90_inq_varid(ncid, "sig_lon_W" , VarId) 200 212 iret = nf90_get_var(ncid, VarID, sig_lon_W(:,:) , start=(/1,1/),count=(/nfeatures,nplumes/)) … … 203 215 CALL abort_physic(modname,abort_message,1) 204 216 ENDIF 217 ! 205 218 iret = nf90_inq_varid(ncid, "theta" , VarId) 206 219 iret = nf90_get_var(ncid, VarID, theta(:,:) , start=(/1,1/),count=(/nfeatures,nplumes/)) … … 209 222 CALL abort_physic(modname,abort_message,1) 210 223 ENDIF 224 ! 211 225 iret = nf90_inq_varid(ncid, "ftr_weight" , VarId) 212 226 iret = nf90_get_var(ncid, VarID, ftr_weight(:,:) , start=(/1,1/),count=(/nfeatures,nplumes/)) … … 215 229 CALL abort_physic(modname,abort_message,1) 216 230 ENDIF 231 ! 217 232 iret = nf90_inq_varid(ncid, "year_weight" , VarId) 218 233 iret = nf90_get_var(ncid, VarID, year_weight(:,:) , start=(/1,1/),count=(/nyears,nplumes /)) … … 221 236 CALL abort_physic(modname,abort_message,1) 222 237 ENDIF 238 ! 223 239 iret = nf90_inq_varid(ncid, "ann_cycle" , VarId) 224 240 iret = nf90_get_var(ncid, VarID, ann_cycle(:,:,:) , start=(/1,1,1/),count=(/nfeatures,ntimes,nplumes/)) … … 288 304 time_weight_bg(1,iplume) = ann_cycle(1,iweek,iplume) 289 305 time_weight_bg(2,iplume) = ann_cycle(2,iweek,iplume) 290 END 306 ENDDO 291 307 292 308 RETURN … … 375 391 z_beta(icol,k) = MERGE(1.0, 0.0, z(icol,k) >= oro(icol)) 376 392 eta(icol,k) = MAX(0.0,MIN(1.0,z(icol,k)/15000.)) 377 END 378 END 393 ENDDO 394 ENDDO 379 395 DO icol=1,ncol 380 396 dNovrN(icol) = 1.0 381 397 caod_sp(icol) = 0.0 382 398 caod_bg(icol) = 0.02 383 END 399 ENDDO 384 400 ! 385 401 ! sum contribution from plumes to construct composite profiles of aerosol optical properties … … 391 407 DO icol=1,ncol 392 408 beta_sum(icol) = 0. 393 END 409 ENDDO 394 410 DO k=1,nlevels 395 411 DO icol=1,ncol 396 412 prof(icol,k) = (eta(icol,k)**(beta_a(iplume)-1.) * (1.-eta(icol,k))**(beta_b(iplume)-1.)) * dz(icol,k) 397 413 beta_sum(icol) = beta_sum(icol) + prof(icol,k) 398 END 399 END 414 ENDDO 415 ENDDO 400 416 DO k=1,nlevels 401 417 DO icol=1,ncol 402 418 prof(icol,k) = ( prof(icol,k) / beta_sum(icol) ) * z_beta(icol,k) 403 END 404 END 419 ENDDO 420 ENDDO 405 421 ! 406 422 ! calculate plume weights … … 443 459 ssa(icol) = (ssa550(iplume) * lfactor**4) / ((ssa550(iplume) * lfactor**4) + ((1-ssa550(iplume)) * lfactor)) 444 460 asy(icol) = asy550(iplume) * SQRT(lfactor) 445 END 461 ENDDO 446 462 ! 447 463 ! distribute plume optical properties across its vertical profile weighting by optical depth and scaling for … … 458 474 ssa_prof(icol,k) = ssa_prof(icol,k) + aod_lmd * ssa(icol) 459 475 aod_prof(icol,k) = aod_prof(icol,k) + aod_lmd 460 END 461 END 462 END 476 ENDDO 477 ENDDO 478 ENDDO 463 479 ! 464 480 ! complete optical depth weighting … … 468 484 asy_prof(icol,k) = MERGE(asy_prof(icol,k)/ssa_prof(icol,k), 0.0, ssa_prof(icol,k) > TINY(1.)) 469 485 ssa_prof(icol,k) = MERGE(ssa_prof(icol,k)/aod_prof(icol,k), 1.0, aod_prof(icol,k) > TINY(1.)) 470 END 471 END 486 ENDDO 487 ENDDO 472 488 ! 473 489 ! calculate effective radius normalization (divisor) factor … … 475 491 DO icol=1,ncol 476 492 dNovrN(icol) = LOG((1000.0 * (caod_sp(icol) + caod_bg(icol))) + 1.0)/LOG((1000.0 * caod_bg(icol)) + 1.0) 477 END 493 ENDDO 478 494 479 495 RETURN
Note: See TracChangeset
for help on using the changeset viewer.