Changeset 1788 for trunk/LMDZ.TITAN/libf/phytitan
- Timestamp:
- Sep 26, 2017, 12:43:42 PM (7 years ago)
- Location:
- trunk/LMDZ.TITAN/libf/phytitan
- Files:
-
- 12 deleted
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.TITAN/libf/phytitan/callcorrk.F90
r1781 r1788 1 1 subroutine callcorrk(ngrid,nlayer,pq,nq,qsurf, & 2 2 albedo,albedo_equivalent,emis,mu0,pplev,pplay,pt, & 3 tsurf,fract,dist_star, aerosol,&3 tsurf,fract,dist_star, & 4 4 dtlw,dtsw,fluxsurf_lw, & 5 5 fluxsurf_sw,fluxsurfabs_sw,fluxtop_lw, & 6 6 fluxabs_sw,fluxtop_dn, & 7 7 OLR_nu,OSR_nu, & 8 tau_col,firstcall,lastcall)8 firstcall,lastcall) 9 9 10 10 use mod_phys_lmdz_para, only : is_master … … 14 14 use ioipsl_getin_p_mod, only: getin_p 15 15 use gases_h 16 use radii_mod, only : su_aer_radii,back2lay_reffrad17 use aerosol_mod, only : iaero_back2lay18 16 USE tracer_h 19 17 use comcstfi_mod, only: pi, mugaz, cpp … … 64 62 65 63 ! OUTPUT 66 REAL,INTENT(OUT) :: aerosol(ngrid,nlayer,naerkind) ! Aerosol tau (kg/kg).67 64 REAL,INTENT(OUT) :: dtlw(ngrid,nlayer) ! Heating rate (K/s) due to LW radiation. 68 65 REAL,INTENT(OUT) :: dtsw(ngrid,nlayer) ! Heating rate (K/s) due to SW radiation. … … 75 72 REAL,INTENT(OUT) :: OLR_nu(ngrid,L_NSPECTI) ! Outgoing LW radition in each band (Normalized to the band width (W/m2/cm-1). 76 73 REAL,INTENT(OUT) :: OSR_nu(ngrid,L_NSPECTV) ! Outgoing SW radition in each band (Normalized to the band width (W/m2/cm-1). 77 REAL,INTENT(OUT) :: tau_col(ngrid) ! Diagnostic from aeropacity.78 74 REAL,INTENT(OUT) :: albedo_equivalent(ngrid) ! Spectrally Integrated Albedo. For Diagnostic. By MT2015 79 75 80 76 81 ! Globally varying aerosol optical properties on GCM grid ; not needed everywhere so not in radcommon_h.82 REAL :: QVISsQREF3d(ngrid,nlayer,L_NSPECTV,naerkind)83 REAL :: omegaVIS3d(ngrid,nlayer,L_NSPECTV,naerkind)84 REAL :: gVIS3d(ngrid,nlayer,L_NSPECTV,naerkind)85 REAL :: QIRsQREF3d(ngrid,nlayer,L_NSPECTI,naerkind)86 REAL :: omegaIR3d(ngrid,nlayer,L_NSPECTI,naerkind)87 REAL :: gIR3d(ngrid,nlayer,L_NSPECTI,naerkind)88 89 ! REAL :: omegaREFvis3d(ngrid,nlayer,naerkind)90 ! REAL :: omegaREFir3d(ngrid,nlayer,naerkind) ! not sure of the point of these...91 92 REAL,ALLOCATABLE,SAVE :: reffrad(:,:,:) ! aerosol effective radius (m)93 REAL,ALLOCATABLE,SAVE :: nueffrad(:,:,:) ! aerosol effective variance94 !$OMP THREADPRIVATE(reffrad,nueffrad)95 96 77 !----------------------------------------------------------------------- 97 78 ! Declaration of the variables required by correlated-k subroutines … … 114 95 REAL*8 taucumi(L_LEVELS,L_NSPECTI,L_NGAUSS) 115 96 116 REAL*8 tauaero(L_LEVELS,naerkind)117 97 REAL*8 nfluxtopv,nfluxtopi,nfluxtop,fluxtopvdn 118 98 REAL*8 nfluxoutv_nu(L_NSPECTV) ! Outgoing band-resolved VI flux at TOA (W/m2). … … 125 105 REAL*8 albv(L_NSPECTV) ! Spectral Visible Albedo. 126 106 127 INTEGER ig,l,k,nw ,iaer107 INTEGER ig,l,k,nw 128 108 129 109 real szangle … … 134 114 real*8 taugsurfi(L_NSPECTI,L_NGAUSS-1) 135 115 136 ! Local aerosol optical properties for each column on RADIATIVE grid.137 real*8,save,allocatable :: QXVAER(:,:,:)138 real*8,save,allocatable :: QSVAER(:,:,:)139 real*8,save,allocatable :: GVAER(:,:,:)140 real*8,save,allocatable :: QXIAER(:,:,:)141 real*8,save,allocatable :: QSIAER(:,:,:)142 real*8,save,allocatable :: GIAER(:,:,:)143 144 real, dimension(:,:,:), save, allocatable :: QREFvis3d145 real, dimension(:,:,:), save, allocatable :: QREFir3d146 !$OMP THREADPRIVATE(QXVAER,QSVAER,GVAER,QXIAER,QSIAER,GIAER,QREFvis3d,QREFir3d)147 148 116 149 117 ! Miscellaneous : 150 real*8 temp,temp1,temp2,pweight151 118 character(len=10) :: tmp1 152 119 character(len=10) :: tmp2 … … 167 134 if(firstcall) then 168 135 169 ! test on allocated necessary because of CLFvarying (two calls to callcorrk in physiq)170 if(.not.allocated(QXVAER)) allocate(QXVAER(L_LEVELS,L_NSPECTV,naerkind))171 if(.not.allocated(QSVAER)) allocate(QSVAER(L_LEVELS,L_NSPECTV,naerkind))172 if(.not.allocated(GVAER)) allocate(GVAER(L_LEVELS,L_NSPECTV,naerkind))173 if(.not.allocated(QXIAER)) allocate(QXIAER(L_LEVELS,L_NSPECTI,naerkind))174 if(.not.allocated(QSIAER)) allocate(QSIAER(L_LEVELS,L_NSPECTI,naerkind))175 if(.not.allocated(GIAER)) allocate(GIAER(L_LEVELS,L_NSPECTI,naerkind))176 177 !!! ALLOCATED instances are necessary because of CLFvarying (strategy to call callcorrk twice in physiq...)178 IF(.not.ALLOCATED(QREFvis3d)) ALLOCATE(QREFvis3d(ngrid,nlayer,naerkind))179 IF(.not.ALLOCATED(QREFir3d)) ALLOCATE(QREFir3d(ngrid,nlayer,naerkind))180 ! Effective radius and variance of the aerosols181 IF(.not.ALLOCATED(reffrad)) allocate(reffrad(ngrid,nlayer,naerkind))182 IF(.not.ALLOCATED(nueffrad)) allocate(nueffrad(ngrid,nlayer,naerkind))183 184 136 call system('rm -f surf_vals_long.out') 185 137 186 if(naerkind.gt.4)then187 print*,'Code not general enough to deal with naerkind > 4 yet.'188 call abort189 endif190 call su_aer_radii(ngrid,nlayer,reffrad,nueffrad)191 192 193 138 !-------------------------------------------------- 194 139 ! Set up correlated k … … 207 152 call setspv ! Basic visible properties. 208 153 call sugas_corrk ! Set up gaseous absorption properties. 209 call suaer_corrk ! Set up aerosol optical properties.210 211 154 212 155 OLR_nu(:,:) = 0. … … 240 183 !======================================================================= 241 184 242 qxvaer(:,:,:)=0.0243 qsvaer(:,:,:)=0.0244 gvaer(:,:,:) =0.0245 246 qxiaer(:,:,:)=0.0247 qsiaer(:,:,:)=0.0248 giaer(:,:,:) =0.0249 250 !--------------------------------------------------251 ! Effective radius and variance of the aerosols252 !--------------------------------------------------253 254 do iaer=1,naerkind255 256 if(iaer.eq.iaero_back2lay)then257 call back2lay_reffrad(ngrid,reffrad(1,1,iaero_back2lay),nlayer,pplev)258 endif259 260 end do !iaer=1,naerkind.261 262 185 263 186 ! How much light do we get ? … … 266 189 end do 267 190 268 ! Get 3D aerosol optical properties.269 call aeroptproperties(ngrid,nlayer,reffrad,nueffrad, &270 QVISsQREF3d,omegaVIS3d,gVIS3d, &271 QIRsQREF3d,omegaIR3d,gIR3d, &272 QREFvis3d,QREFir3d)273 274 ! Get aerosol optical depths.275 call aeropacity(ngrid,nlayer,nq,pplay,pplev,pq,aerosol, &276 reffrad,QREFvis3d,QREFir3d, &277 tau_col)278 279 280 191 281 192 !----------------------------------------------------------------------- … … 288 199 !======================================================================= 289 200 290 291 !-----------------------------------------------------------------------292 ! Aerosol optical properties Qext, Qscat and g.293 ! The transformation in the vertical is the same as for temperature.294 !-----------------------------------------------------------------------295 296 297 do iaer=1,naerkind298 ! Shortwave.299 do nw=1,L_NSPECTV300 301 do l=1,nlayer302 303 temp1=QVISsQREF3d(ig,nlayer+1-l,nw,iaer) &304 *QREFvis3d(ig,nlayer+1-l,iaer)305 306 temp2=QVISsQREF3d(ig,max(nlayer-l,1),nw,iaer) &307 *QREFvis3d(ig,max(nlayer-l,1),iaer)308 309 qxvaer(2*l,nw,iaer) = temp1310 qxvaer(2*l+1,nw,iaer)=(temp1+temp2)/2311 312 temp1=temp1*omegavis3d(ig,nlayer+1-l,nw,iaer)313 temp2=temp2*omegavis3d(ig,max(nlayer-l,1),nw,iaer)314 315 qsvaer(2*l,nw,iaer) = temp1316 qsvaer(2*l+1,nw,iaer)=(temp1+temp2)/2317 318 temp1=gvis3d(ig,nlayer+1-l,nw,iaer)319 temp2=gvis3d(ig,max(nlayer-l,1),nw,iaer)320 321 gvaer(2*l,nw,iaer) = temp1322 gvaer(2*l+1,nw,iaer)=(temp1+temp2)/2323 324 end do ! nlayer325 326 qxvaer(1,nw,iaer)=qxvaer(2,nw,iaer)327 qxvaer(2*nlayer+1,nw,iaer)=0.328 329 qsvaer(1,nw,iaer)=qsvaer(2,nw,iaer)330 qsvaer(2*nlayer+1,nw,iaer)=0.331 332 gvaer(1,nw,iaer)=gvaer(2,nw,iaer)333 gvaer(2*nlayer+1,nw,iaer)=0.334 335 end do ! L_NSPECTV336 337 do nw=1,L_NSPECTI338 ! Longwave339 do l=1,nlayer340 341 temp1=QIRsQREF3d(ig,nlayer+1-l,nw,iaer) &342 *QREFir3d(ig,nlayer+1-l,iaer)343 344 temp2=QIRsQREF3d(ig,max(nlayer-l,1),nw,iaer) &345 *QREFir3d(ig,max(nlayer-l,1),iaer)346 347 qxiaer(2*l,nw,iaer) = temp1348 qxiaer(2*l+1,nw,iaer)=(temp1+temp2)/2349 350 temp1=temp1*omegair3d(ig,nlayer+1-l,nw,iaer)351 temp2=temp2*omegair3d(ig,max(nlayer-l,1),nw,iaer)352 353 qsiaer(2*l,nw,iaer) = temp1354 qsiaer(2*l+1,nw,iaer)=(temp1+temp2)/2355 356 temp1=gir3d(ig,nlayer+1-l,nw,iaer)357 temp2=gir3d(ig,max(nlayer-l,1),nw,iaer)358 359 giaer(2*l,nw,iaer) = temp1360 giaer(2*l+1,nw,iaer)=(temp1+temp2)/2361 362 end do ! nlayer363 364 qxiaer(1,nw,iaer)=qxiaer(2,nw,iaer)365 qxiaer(2*nlayer+1,nw,iaer)=0.366 367 qsiaer(1,nw,iaer)=qsiaer(2,nw,iaer)368 qsiaer(2*nlayer+1,nw,iaer)=0.369 370 giaer(1,nw,iaer)=giaer(2,nw,iaer)371 giaer(2*nlayer+1,nw,iaer)=0.372 373 end do ! L_NSPECTI374 375 end do ! naerkind376 377 ! Test / Correct for freaky s. s. albedo values.378 do iaer=1,naerkind379 do k=1,L_LEVELS380 381 do nw=1,L_NSPECTV382 if(qsvaer(k,nw,iaer).gt.1.05*qxvaer(k,nw,iaer))then383 print*,'Serious problems with qsvaer values'384 print*,'in callcorrk'385 call abort386 endif387 if(qsvaer(k,nw,iaer).gt.qxvaer(k,nw,iaer))then388 qsvaer(k,nw,iaer)=qxvaer(k,nw,iaer)389 endif390 end do391 392 do nw=1,L_NSPECTI393 if(qsiaer(k,nw,iaer).gt.1.05*qxiaer(k,nw,iaer))then394 print*,'Serious problems with qsiaer values'395 print*,'in callcorrk'396 call abort397 endif398 if(qsiaer(k,nw,iaer).gt.qxiaer(k,nw,iaer))then399 qsiaer(k,nw,iaer)=qxiaer(k,nw,iaer)400 endif401 end do402 403 end do ! L_LEVELS404 end do ! naerkind405 406 !-----------------------------------------------------------------------407 ! Aerosol optical depths408 !-----------------------------------------------------------------------409 410 do iaer=1,naerkind ! a bug was here411 do k=0,nlayer-1412 413 pweight=(pplay(ig,L_NLAYRAD-k)-pplev(ig,L_NLAYRAD-k+1))/ &414 (pplev(ig,L_NLAYRAD-k)-pplev(ig,L_NLAYRAD-k+1))415 temp=aerosol(ig,L_NLAYRAD-k,iaer)/QREFvis3d(ig,L_NLAYRAD-k,iaer)416 tauaero(2*k+2,iaer)=max(temp*pweight,0.d0)417 tauaero(2*k+3,iaer)=max(temp-tauaero(2*k+2,iaer),0.d0)418 419 end do420 ! boundary conditions421 tauaero(1,iaer) = tauaero(2,iaer)422 !tauaero(1,iaer) = 0.423 424 end do ! naerkind425 201 426 202 ! Albedo and Emissivity. … … 586 362 587 363 call optcv(dtauv,tauv,taucumv,plevrad, & 588 qxvaer,qsvaer,gvaer,wbarv,cosbv,tauray,tauaero, & 589 tmid,pmid,taugsurf) 364 wbarv,cosbv,tauray,tmid,pmid,taugsurf) 590 365 591 366 call sfluxv(dtauv,tauv,taucumv,albv,dwnv,wbarv,cosbv, & … … 629 404 630 405 call optci(plevrad,tlevrad,dtaui,taucumi, & 631 qxiaer,qsiaer,giaer,cosbi,wbari,tauaero,tmid,pmid, & 632 taugsurfi) 406 cosbi,wbari,tmid,pmid,taugsurfi) 633 407 634 408 call sfluxi(plevrad,tlevrad,dtaui,taucumi,ubari,albi, & … … 655 429 print*,'fluxtop_dn=',fluxtop_dn(ig) 656 430 print*,'acosz=',acosz 657 print*,'aerosol=',aerosol(ig,:,:)658 431 print*,'temp= ',pt(ig,:) 659 432 print*,'pplay= ',pplay(ig,:) … … 754 527 !$OMP END MASTER 755 528 !$OMP BARRIER 756 IF ( ALLOCATED(reffrad)) DEALLOCATE(reffrad)757 IF ( ALLOCATED(nueffrad)) DEALLOCATE(nueffrad)758 529 endif 759 530 -
trunk/LMDZ.TITAN/libf/phytitan/callkeys_mod.F90
r1722 r1788 31 31 logical,save :: mass_redistrib 32 32 !$OMP THREADPRIVATE(stelbbody,ozone,tracer,mass_redistrib) 33 logical,save :: sedimentation34 !$OMP THREADPRIVATE(sedimentation)35 logical,save :: aeroback2lay36 !$OMP THREADPRIVATE(aeroback2lay)37 33 logical,save :: nosurf 38 34 logical,save :: oblate … … 41 37 integer,save :: ichim 42 38 integer,save :: iddist 43 integer,save :: iaervar44 39 integer,save :: iradia 45 40 integer,save :: startype 46 !$OMP THREADPRIVATE(ichim,iddist,i aervar,iradia,startype)41 !$OMP THREADPRIVATE(ichim,iddist,iradia,startype) 47 42 48 43 real,save :: Fat1AU 49 44 real,save :: stelTbb 50 45 !$OMP THREADPRIVATE(Fat1AU,stelTbb) 51 real,save :: tplanet52 real,save :: obs_tau_col_tropo53 real,save :: obs_tau_col_strato54 !$OMP THREADPRIVATE(tplanet,obs_tau_col_tropo,obs_tau_col_strato)55 real,save :: pres_bottom_tropo56 real,save :: pres_top_tropo57 real,save :: pres_bottom_strato58 real,save :: pres_top_strato59 !$OMP THREADPRIVATE(pres_bottom_tropo,pres_top_tropo,pres_bottom_strato,pres_top_strato)60 real,save :: size_tropo61 real,save :: size_strato62 !$OMP THREADPRIVATE(size_tropo,size_strato)63 46 real,save :: pceil 64 47 !$OMP THREADPRIVATE(pceil) -
trunk/LMDZ.TITAN/libf/phytitan/datafile_mod.F90
r1520 r1788 18 18 character(len=12),parameter :: surfdir="surface_data" 19 19 20 ! aerdir stores aerosol properties files (optprop_*dat files)21 character(LEN=18),parameter :: aerdir="aerosol_properties"22 23 20 end module datafile_mod 24 21 !----------------------------------------------------------------------- -
trunk/LMDZ.TITAN/libf/phytitan/inifis_mod.F90
r1722 r1788 9 9 prad,pg,pr,pcpp) 10 10 11 use radinc_h, only: ini_radinc_h , naerkind11 use radinc_h, only: ini_radinc_h 12 12 use datafile_mod, only: datadir 13 13 use comdiurn_h, only: sinlat, coslat, sinlon, coslon … … 385 385 endif 386 386 387 write(*,*)"Default planetary temperature?"388 tplanet=215.0389 call getin_p("tplanet",tplanet)390 write(*,*)" tplanet = ",tplanet391 392 387 write(*,*)"Which star?" 393 388 startype=1 ! default value = Sol … … 399 394 call getin_p("Fat1AU",Fat1AU) 400 395 write(*,*)" Fat1AU = ",Fat1AU 401 402 403 ! TRACERS:404 405 ! write(*,*)"Number of radiatively active aerosols:"406 ! naerkind=0. ! default value407 ! call getin_p("naerkind",naerkind)408 ! write(*,*)" naerkind = ",naerkind409 410 411 !=================================412 413 write(*,*)"Radiatively active two-layer aersols?"414 aeroback2lay=.false. ! default value415 call getin_p("aeroback2lay",aeroback2lay)416 write(*,*)" aeroback2lay = ",aeroback2lay417 418 write(*,*)"TWOLAY AEROSOL: total optical depth ", &419 "in the tropospheric layer (visible)"420 obs_tau_col_tropo=8.D0421 call getin_p("obs_tau_col_tropo",obs_tau_col_tropo)422 write(*,*)" obs_tau_col_tropo = ",obs_tau_col_tropo423 424 write(*,*)"TWOLAY AEROSOL: total optical depth ", &425 "in the stratospheric layer (visible)"426 obs_tau_col_strato=0.08D0427 call getin_p("obs_tau_col_strato",obs_tau_col_strato)428 write(*,*)" obs_tau_col_strato = ",obs_tau_col_strato429 430 write(*,*)"TWOLAY AEROSOL: pres_bottom_tropo? in pa"431 pres_bottom_tropo=66000.0432 call getin_p("pres_bottom_tropo",pres_bottom_tropo)433 write(*,*)" pres_bottom_tropo = ",pres_bottom_tropo434 435 write(*,*)"TWOLAY AEROSOL: pres_top_tropo? in pa"436 pres_top_tropo=18000.0437 call getin_p("pres_top_tropo",pres_top_tropo)438 write(*,*)" pres_top_tropo = ",pres_top_tropo439 440 write(*,*)"TWOLAY AEROSOL: pres_bottom_strato? in pa"441 pres_bottom_strato=2000.0442 call getin_p("pres_bottom_strato",pres_bottom_strato)443 write(*,*)" pres_bottom_strato = ",pres_bottom_strato444 445 write(*,*)"TWOLAY AEROSOL: pres_top_strato? in pa"446 pres_top_strato=100.0447 call getin_p("pres_top_strato",pres_top_strato)448 write(*,*)" pres_top_strato = ",pres_top_strato449 450 write(*,*)"TWOLAY AEROSOL: particle size in the ", &451 "tropospheric layer, in meters"452 size_tropo=2.e-6453 call getin_p("size_tropo",size_tropo)454 write(*,*)" size_tropo = ",size_tropo455 456 write(*,*)"TWOLAY AEROSOL: particle size in the ", &457 "stratospheric layer, in meters"458 size_strato=1.e-7459 call getin_p("size_strato",size_strato)460 write(*,*)" size_strato = ",size_strato461 462 !=================================463 464 write(*,*) "Gravitationnal sedimentation ?"465 sedimentation=.false. ! default value466 call getin_p("sedimentation",sedimentation)467 write(*,*) " sedimentation = ",sedimentation468 396 469 397 write(*,*) "Does user want to force cpp and mugaz?" -
trunk/LMDZ.TITAN/libf/phytitan/initracer.F
r1764 r1788 32 32 33 33 34 c----------------------------------------------------------------------- 35 c radius(nq) ! aerosol particle radius (m) 34 c------------------------------------------------ 36 35 c rho_q(nq) ! tracer densities (kg.m-3) 37 c qext(nq) ! Single Scat. Extinction coeff at 0.67 um 38 c alpha_lift(nq) ! saltation vertical flux/horiz flux ratio (m-1) 39 c alpha_devil(nq) ! lifting coeeficient by dust devil 40 c----------------------------------------------------------------------- 41 36 c------------------------------------------------ 42 37 nqtot=nq 43 38 !! we allocate once for all arrays in common in tracer_h.F90 … … 45 40 IF (.NOT.ALLOCATED(noms)) ALLOCATE(noms(nq)) 46 41 ALLOCATE(mmol(nq)) 47 ALLOCATE(radius(nq))48 42 ALLOCATE(rho_q(nq)) 49 ALLOCATE(qext(nq))50 ALLOCATE(alpha_lift(nq))51 ALLOCATE(alpha_devil(nq))52 ALLOCATE(qextrhor(nq))53 !! initialization54 alpha_lift(:)=0.55 alpha_devil(:)=0.56 57 ! Added by JVO 2017 : these arrays are handled later58 ! -> initialization is the least we can do, please !!!59 radius(:)=0.60 qext(:)=0.61 43 62 44 ! Initialization: get tracer names from the dynamics and check if we are … … 373 355 374 356 375 c Output for records:376 c ~~~~~~~~~~~~~~~~~~377 write(*,*)378 Write(*,*) '******** initracer : dust transport parameters :'379 write(*,*) 'alpha_lift = ', alpha_lift380 write(*,*) 'alpha_devil = ', alpha_devil381 write(*,*) 'radius = ', radius382 383 write(*,*) 'Qext = ', qext384 write(*,*)385 386 357 end -
trunk/LMDZ.TITAN/libf/phytitan/optci.F90
r1781 r1788 1 1 subroutine optci(PLEV,TLEV,DTAUI,TAUCUMI, & 2 QXIAER,QSIAER,GIAER,COSBI,WBARI,TAUAERO, & 3 TMID,PMID,TAUGSURF) 2 COSBI,WBARI,TMID,PMID,TAUGSURF) 4 3 5 4 use radinc_h … … 41 40 real*8 WBARI(L_NLAYRAD,L_NSPECTI,L_NGAUSS) 42 41 43 ! for aerosols44 real*8 QXIAER(L_LEVELS,L_NSPECTI,NAERKIND)45 real*8 QSIAER(L_LEVELS,L_NSPECTI,NAERKIND)46 real*8 GIAER(L_LEVELS,L_NSPECTI,NAERKIND)47 real*8 TAUAERO(L_LEVELS,NAERKIND)48 real*8 TAUAEROLK(L_LEVELS,L_NSPECTI,NAERKIND)49 real*8 TAEROS(L_LEVELS,L_NSPECTI,NAERKIND)50 51 42 ! Titan customisation 52 43 ! J. Vatant d'Ollone (2016) … … 68 59 69 60 real*8 taugsurf(L_NSPECTI,L_NGAUSS-1) 70 real*8 DCONT ,DAERO61 real*8 DCONT 71 62 double precision wn_cont, p_cont, p_air, T_cont, dtemp, dtempc 72 63 double precision p_cross … … 117 108 end do ! levels 118 109 119 ! Spectral dependance of aerosol absorption120 do iaer=1,naerkind121 DO NW=1,L_NSPECTI122 do K=2,L_LEVELS123 TAEROS(K,NW,IAER) = TAUAERO(K,IAER) * QXIAER(K,NW,IAER)124 end do ! levels125 END DO126 end do127 128 110 do NW=1,L_NSPECTI 129 111 … … 132 114 ilay = k / 2 ! int. arithmetic => gives the gcm layer index 133 115 134 DAERO=SUM(TAEROS(K,NW,1:naerkind)) ! aerosol absorption135 136 116 !================= Titan customisation ======================================== 137 117 call disr_haze(dz(k),plev(k),wnoi(nw),dhaze_T(k,nw),SSA_T(k,nw),ASF_T(k,nw)) … … 240 220 DTAUKI(K,nw,ng) = TAUGAS & 241 221 + DCONT & ! For parameterized continuum absorption 242 + DAERO & ! For aerosol absorption243 222 + DHAZE_T(K,NW) ! For Titan haze 244 223 … … 251 230 DTAUKI(K,nw,ng) = 0.d0 & 252 231 + DCONT & ! For parameterized continuum absorption 253 + DAERO & ! For aerosol absorption254 232 + DHAZE_T(K,NW) ! For Titan Haze 255 233 … … 262 240 ! ====================================================================== 263 241 264 do iaer=1,naerkind265 DO NW=1,L_NSPECTI266 DO K=2,L_LEVELS267 TAUAEROLK(K,NW,IAER) = TAUAERO(K,IAER)*QSIAER(K,NW,IAER) ! effect of scattering albedo268 ENDDO269 ENDDO270 end do271 272 242 ! Haze scattering 273 243 DO NW=1,L_NSPECTI … … 280 250 DO L=1,L_NLAYRAD-1 281 251 K = 2*L+1 282 btemp(L,NW) = SUM(TAUAEROLK(K,NW,1:naerkind)) + SUM(TAUAEROLK(K+1,NW,1:naerkind)) & 283 + DHAZES_T(K,NW) + DHAZES_T(K+1,NW) 252 btemp(L,NW) = DHAZES_T(K,NW) + DHAZES_T(K+1,NW) 284 253 END DO ! L vertical loop 285 254 … … 287 256 L = L_NLAYRAD 288 257 K = 2*L+1 289 btemp(L,NW) = SUM(TAUAEROLK(K,NW,1:naerkind)) +DHAZES_T(K,NW)258 btemp(L,NW) = DHAZES_T(K,NW) 290 259 291 260 END DO ! NW spectral loop … … 301 270 atemp = 0. 302 271 if(DTAUI(L,NW,NG) .GT. 1.0D-9) then 303 do iaer=1,naerkind304 atemp = atemp + &305 GIAER(K,NW,IAER) * TAUAEROLK(K,NW,IAER) + &306 GIAER(K+1,NW,IAER) * TAUAEROLK(K+1,NW,IAER)307 end do308 272 atemp = atemp + & 309 273 ASF_T(K,NW)*DHAZES_T(K,NW) + & … … 332 296 atemp = 0. 333 297 if(DTAUI(L,NW,NG) .GT. 1.0D-9) then 334 do iaer=1,naerkind335 atemp = atemp + GIAER(K,NW,IAER) * TAUAEROLK(K,NW,IAER)336 end do337 298 atemp = atemp + ASF_T(K,NW)*DHAZES_T(K,NW) 338 299 WBARI(L,nw,ng) = btemp(L,nw) / DTAUI(L,NW,NG) -
trunk/LMDZ.TITAN/libf/phytitan/optcv.F90
r1781 r1788 1 1 SUBROUTINE OPTCV(DTAUV,TAUV,TAUCUMV,PLEV, & 2 QXVAER,QSVAER,GVAER,WBARV,COSBV, & 3 TAURAY,TAUAERO,TMID,PMID,TAUGSURF) 2 WBARV,COSBV,TAURAY,TMID,PMID,TAUGSURF) 4 3 5 4 use radinc_h … … 46 45 real*8 COSBV(L_NLAYRAD,L_NSPECTV,L_NGAUSS) 47 46 real*8 WBARV(L_NLAYRAD,L_NSPECTV,L_NGAUSS) 48 49 ! for aerosols50 real*8 QXVAER(L_LEVELS,L_NSPECTV,NAERKIND)51 real*8 QSVAER(L_LEVELS,L_NSPECTV,NAERKIND)52 real*8 GVAER(L_LEVELS,L_NSPECTV,NAERKIND)53 real*8 TAUAERO(L_LEVELS,NAERKIND)54 real*8 TAUAEROLK(L_LEVELS,L_NSPECTV,NAERKIND)55 real*8 TAEROS(L_LEVELS,L_NSPECTV,NAERKIND)56 47 57 48 ! Titan customisation … … 76 67 77 68 real*8 taugsurf(L_NSPECTV,L_NGAUSS-1) 78 real*8 DCONT ,DAERO69 real*8 DCONT 79 70 real*8 DRAYAER 80 71 double precision wn_cont, p_cont, p_air, T_cont, dtemp, dtempc … … 129 120 end do ! levels 130 121 131 ! Spectral dependance of aerosol absorption132 do iaer=1,naerkind133 do NW=1,L_NSPECTV134 do K=2,L_LEVELS135 TAEROS(K,NW,IAER) = TAUAERO(K,IAER) * QXVAER(K,NW,IAER)136 end do ! levels137 end do138 end do139 140 122 ! Rayleigh scattering 141 123 do NW=1,L_NSPECTV … … 158 140 DRAYAER = TRAY(K,NW) 159 141 ! DRAYAER is Tau RAYleigh scattering, plus AERosol opacity 160 do iaer=1,naerkind161 DRAYAER = DRAYAER + TAEROS(K,NW,IAER)162 end do163 164 142 DRAYAER = DRAYAER + DHAZE_T(K,NW) ! Titan's aerosol 165 143 … … 275 253 ! we need to calculate the scattering albedo and asymmetry factors 276 254 277 do iaer=1,naerkind278 DO NW=1,L_NSPECTV279 DO K=2,L_LEVELS280 TAUAEROLK(K,NW,IAER) = TAUAERO(K,IAER) * QSVAER(K,NW,IAER) ! effect of scattering albedo281 ENDDO282 ENDDO283 end do284 285 255 ! Haze scattering 286 256 DO NW=1,L_NSPECTV … … 294 264 DO L=1,L_NLAYRAD-1 295 265 K = 2*L+1 296 atemp(L,NW) = SUM(GVAER(K,NW,1:naerkind) * TAUAEROLK(K,NW,1:naerkind))+SUM(GVAER(K+1,NW,1:naerkind) * TAUAEROLK(K+1,NW,1:naerkind)) & 297 + ASF_T(K,NW)*DHAZES_T(K,NW) + ASF_T(K+1,NW)*DHAZES_T(K+1,NW) 298 btemp(L,NW) = SUM(TAUAEROLK(K,NW,1:naerkind)) + SUM(TAUAEROLK(K+1,NW,1:naerkind)) & 299 + DHAZES_T(K,NW) + DHAZES_T(K+1,NW) 266 atemp(L,NW) = ASF_T(K,NW)*DHAZES_T(K,NW) + ASF_T(K+1,NW)*DHAZES_T(K+1,NW) 267 btemp(L,NW) = DHAZES_T(K,NW) + DHAZES_T(K+1,NW) 300 268 ctemp(L,NW) = btemp(L,NW) + 0.9999*(TRAY(K,NW) + TRAY(K+1,NW)) ! JVO 2017 : does this 0.999 is really meaningful ? 301 269 btemp(L,NW) = btemp(L,NW) + TRAY(K,NW) + TRAY(K+1,NW) … … 306 274 L = L_NLAYRAD 307 275 K = 2*L+1 308 atemp(L,NW) = SUM(GVAER(K,NW,1:naerkind) * TAUAEROLK(K,NW,1:naerkind)) & 309 + ASF_T(K,NW)*DHAZES_T(K,NW) 310 btemp(L,NW) = SUM(TAUAEROLK(K,NW,1:naerkind)) & 311 + DHAZES_T(K,NW) 276 atemp(L,NW) = ASF_T(K,NW)*DHAZES_T(K,NW) 277 btemp(L,NW) = DHAZES_T(K,NW) 312 278 ctemp(L,NW) = btemp(L,NW) + 0.9999*TRAY(K,NW) ! JVO 2017 : does this 0.999 is really meaningful ? 313 279 btemp(L,NW) = btemp(L,NW) + TRAY(K,NW) -
trunk/LMDZ.TITAN/libf/phytitan/physiq_mod.F90
r1787 r1788 14 14 pdu,pdv,pdt,pdq,pdpsrf) 15 15 16 use radinc_h, only : L_NSPECTI,L_NSPECTV ,naerkind16 use radinc_h, only : L_NSPECTI,L_NSPECTV 17 17 use radcommon_h, only: sigma, glat, grav, BWNV 18 18 use surfdat_h, only: phisfi, zmea, zstd, zsig, zgam, zthe … … 22 22 use geometry_mod, only: latitude, longitude, cell_area 23 23 USE comgeomfi_h, only: totarea, totarea_planet 24 USE tracer_h, only: noms, mmol, radius, qext, & 25 alpha_lift, alpha_devil, qextrhor 24 USE tracer_h, only: noms, mmol 26 25 use time_phylmdz_mod, only: ecritphy, iphysiq, nday 27 26 use phyetat0_mod, only: phyetat0 … … 74 73 ! V. Tracers 75 74 ! V.1. Chemistry 76 ! V.2. Aerosols and particles.77 75 ! V.3. Updates (pressure variations, surface budget). 78 76 ! V.4. Surface Tracer Update. … … 225 223 ! ----------------- 226 224 227 ! Aerosol (dust or ice) extinction optical depth at reference wavelength228 ! for the "naerkind" optically active aerosols:229 230 real aerosol(ngrid,nlayer,naerkind) ! Aerosols.231 225 real zh(ngrid,nlayer) ! Potential temperature (K). 232 226 real pw(ngrid,nlayer) ! Vertical velocity (m/s). (NOTE : >0 WHEN DOWNWARDS !!) … … 274 268 real dqsurf(ngrid,nq) ! Cumulated tendencies. 275 269 real zdqsdif(ngrid,nq) ! Turbdiff/vdifc routines. 276 real zdqssed(ngrid,nq) ! Callsedim routine.277 270 real zdqsurfmr(ngrid,nq) ! Mass_redistribution routine. 278 271 … … 281 274 real zdqdif(ngrid,nlayer,nq) ! Turbdiff/vdifc routines. 282 275 real zdqevap(ngrid,nlayer) ! Turbdiff routine. 283 real zdqsed(ngrid,nlayer,nq) ! Callsedim routine.284 276 real zdqmr(ngrid,nlayer,nq) ! Mass_redistribution routine. 285 277 … … 327 319 real vmr(ngrid,nlayer) ! volume mixing ratio 328 320 real time_phys 329 real,allocatable,dimension(:),save :: tau_col ! Total Aerosol Optical Depth.330 !$OMP THREADPRIVATE(tau_col)331 321 332 322 real ISR,ASR,OLR,GND,DYN,GSR,Ts1,Ts2,Ts3,TsS ! for Diagnostic. 333 323 334 real qcol(ngrid,nq) ! Tracer Column Mass (kg/m2).335 336 324 ! to test energy conservation (RW+JL) 337 325 real mass(ngrid,nlayer),massarea(ngrid,nlayer) … … 353 341 real fluxtop_lw1(ngrid), fluxabs_sw1(ngrid) ! For SW/LW flux. 354 342 real albedo_equivalent1(ngrid) ! For Equivalent albedo calculation. 355 real tau_col1(ngrid) ! For aerosol optical depth diagnostic.356 real OLR_nu1(ngrid,L_NSPECTI), OSR_nu1(ngrid,L_NSPECTV) ! For Outgoing Radiation diagnostics.357 343 real tf, ntf 358 344 359 345 real,allocatable,dimension(:,:),save :: qsurf_hist 360 346 !$OMP THREADPRIVATE(qsurf_hist) 361 362 real,allocatable,dimension(:,:,:),save :: reffrad ! Aerosol effective radius (m). By RW363 real,allocatable,dimension(:,:,:),save :: nueffrad ! Aerosol effective radius variance. By RW364 !$OMP THREADPRIVATE(reffrad,nueffrad)365 366 real reffcol(ngrid,naerkind)367 347 368 348 ! Local variables for Titan chemistry and microphysics (JVO 2017) … … 425 405 ALLOCATE(zuprevious(ngrid,nlayer)) 426 406 ALLOCATE(qsurf_hist(ngrid,nq)) 427 ALLOCATE(reffrad(ngrid,nlayer,naerkind))428 ALLOCATE(nueffrad(ngrid,nlayer,naerkind))429 407 ALLOCATE(fluxsurf_lw(ngrid)) 430 408 ALLOCATE(fluxsurf_sw(ngrid)) … … 439 417 ALLOCATE(zdtlw(ngrid,nlayer)) 440 418 ALLOCATE(zdtsw(ngrid,nlayer)) 441 ALLOCATE(tau_col(ngrid))442 419 ALLOCATE(dycchi(ngrid,nlayer,nq-nmicro)) 443 420 ALLOCATE(qysat(nlayer,nq-nmicro)) … … 455 432 dtrad(:,:) = 0.0 456 433 fluxrad(:) = 0.0 457 tau_col(:) = 0.0458 434 zdtsw(:,:) = 0.0 459 435 zdtlw(:,:) = 0.0 460 461 462 ! Initialize aerosol indexes.463 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~464 call iniaerosol()465 436 466 437 … … 781 752 call callcorrk(ngrid,nlayer,pq,nq,qsurf, & 782 753 albedo,albedo_equivalent,emis,mu0,pplev,pplay,pt, & 783 tsurf,fract,dist_star, aerosol,&754 tsurf,fract,dist_star, & 784 755 zdtlw,zdtsw,fluxsurf_lw,fluxsurf_sw, & 785 756 fluxsurfabs_sw,fluxtop_lw, & 786 757 fluxabs_sw,fluxtop_dn,OLR_nu,OSR_nu, & 787 tau_col,firstcall,lastcall)758 firstcall,lastcall) 788 759 789 760 ! Radiative flux from the sky absorbed by the surface (W.m-2). … … 1057 1028 endif 1058 1029 1059 ! -------------------------1060 ! V.2. Aerosol particles1061 ! -------------------------1062 1063 ! Sedimentation.1064 if (sedimentation) then1065 1066 zdqsed(1:ngrid,1:nlayer,1:nq) = 0.01067 zdqssed(1:ngrid,1:nq) = 0.01068 1069 call callsedim(ngrid,nlayer,ptimestep, &1070 pplev,zzlev,pt,pdt,pq,pdq, &1071 zdqsed,zdqssed,nq)1072 1073 ! Whether it falls as rain or snow depends only on the surface temperature1074 pdq(1:ngrid,1:nlayer,1:nq) = pdq(1:ngrid,1:nlayer,1:nq) + zdqsed(1:ngrid,1:nlayer,1:nq)1075 dqsurf(1:ngrid,1:nq) = dqsurf(1:ngrid,1:nq) + zdqssed(1:ngrid,1:nq)1076 1077 end if ! end of 'sedimentation'1078 1079 1080 1030 ! --------------- 1081 1031 ! V.3 Updates … … 1214 1164 print*,'fluxtop_dn has gone crazy' 1215 1165 print*,'fluxtop_dn=',fluxtop_dn(ig) 1216 print*,'tau_col=',tau_col(ig)1217 print*,'aerosol=',aerosol(ig,:,:)1218 1166 print*,'temp= ',pt(ig,:) 1219 1167 print*,'pplay= ',pplay(ig,:) … … 1268 1216 call abort 1269 1217 endif 1270 1271 1272 ! Compute column amounts (kg m-2) if tracers are enabled.1273 if(tracer)then1274 qcol(1:ngrid,1:nq)=0.01275 do iq=1,nq1276 do ig=1,ngrid1277 qcol(ig,iq) = SUM( zq(ig,1:nlayer,iq) * mass(ig,1:nlayer))1278 enddo1279 enddo1280 1281 ! Generalised for arbitrary aerosols now. By LK1282 reffcol(1:ngrid,1:naerkind)=0.01283 1284 endif ! end of 'tracer'1285 1218 1286 1219 … … 1359 1292 call wstats(ngrid,trim(noms(iq))//'_surf',trim(noms(iq))//'_surf', & 1360 1293 'kg m^-2',2,qsurf(1,iq) ) 1361 call wstats(ngrid,trim(noms(iq))//'_col',trim(noms(iq))//'_col', &1362 'kg m^-2',2,qcol(1,iq) )1363 1294 1364 1295 ! call wstats(ngrid,trim(noms(iq))//'_reff', & … … 1472 1403 call writediagfi(ngrid,trim(noms(iq))//'_surf',trim(noms(iq))//'_surf', & 1473 1404 'kg m^-2',2,qsurf_hist(1,iq) ) 1474 call writediagfi(ngrid,trim(noms(iq))//'_col',trim(noms(iq))//'_col', &1475 'kg m^-2',2,qcol(1,iq) )1476 1405 1477 1406 ! call writediagfi(ngrid,trim(noms(iq))//'_surf',trim(noms(iq))//'_surf', & 1478 1407 ! 'kg m^-2',2,qsurf(1,iq) ) 1479 1480 do ig=1,ngrid1481 if(tau_col(ig).gt.1.e3)then1482 print*,'WARNING: tau_col=',tau_col(ig)1483 print*,'at ig=',ig,'in PHYSIQ'1484 endif1485 end do1486 1487 call writediagfi(ngrid,"tau_col","Total aerosol optical depth","[]",2,tau_col)1488 1408 1489 1409 enddo ! end of 'nq' loop -
trunk/LMDZ.TITAN/libf/phytitan/radcommon_h.F90
r1722 r1788 1 1 module radcommon_h 2 use radinc_h, only: L_NSPECTI, L_NSPECTV, L_NGAUSS, NTstar, NTstop, & 3 naerkind, nsizemax 2 use radinc_h, only: L_NSPECTI, L_NSPECTV, L_NGAUSS, NTstar, NTstop 4 3 implicit none 5 4 … … 41 40 ! each temperature, pressure, and spectral interval 42 41 ! 43 ! AEROSOL RADIATIVE OPTICAL CONSTANTS44 !45 ! Shortwave46 ! ~~~~~~~~~47 !48 ! For the "naerkind" kind of aerosol radiative properties :49 ! QVISsQREF : Qext / Qext("longrefvis")50 ! omegavis : single scattering albedo51 ! gvis : assymetry factor52 !53 ! Longwave54 ! ~~~~~~~~55 !56 ! For the "naerkind" kind of aerosol radiative properties :57 ! QIRsQREF : Qext / Qext("longrefvis")58 ! omegaIR : mean single scattering albedo59 ! gIR : mean assymetry factor60 42 61 43 REAL*8 BWNI(L_NSPECTI+1), WNOI(L_NSPECTI), DWNI(L_NSPECTI), WAVEI(L_NSPECTI) !BWNI read by master in setspi … … 65 47 !$OMP WNOV,DWNV,WAVEV,& 66 48 !$OMP STELLARF,TAURAY) 67 68 REAL*8 blami(L_NSPECTI+1)69 REAL*8 blamv(L_NSPECTV+1) ! these are needed by suaer.F9070 !$OMP THREADPRIVATE(blami,blamv)71 49 72 50 !! AS: introduced to avoid doing same computations again for continuum … … 85 63 !$OMP FZEROI,FZEROV) !pgasmin,pgasmax,tgasmin,tgasmax read by master in sugas_corrk 86 64 87 real QVISsQREF(L_NSPECTV,naerkind,nsizemax)88 real omegavis(L_NSPECTV,naerkind,nsizemax)89 real gvis(L_NSPECTV,naerkind,nsizemax)90 real QIRsQREF(L_NSPECTI,naerkind,nsizemax)91 real omegair(L_NSPECTI,naerkind,nsizemax)92 real gir(L_NSPECTI,naerkind,nsizemax)93 !$OMP THREADPRIVATE(QVISsQREF,omegavis,gvis,QIRsQREF,omegair,gir)94 95 96 ! Reference wavelengths used to compute reference optical depth (m)97 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~98 99 REAL lamrefir(naerkind),lamrefvis(naerkind)100 101 ! Actual number of grain size classes in each domain for a102 ! given aerosol:103 104 INTEGER :: nsize(naerkind,2)105 106 ! Particle size axis (depend on the kind of aerosol and the107 ! radiation domain)108 109 DOUBLE PRECISION :: radiustab(naerkind,2,nsizemax)110 !$OMP THREADPRIVATE(lamrefir,lamrefvis,radiustab) !nsize read by suaer_corrk111 112 ! Extinction coefficient at reference wavelengths;113 ! These wavelengths are defined in aeroptproperties, and called114 ! longrefvis and longrefir.115 116 REAL :: QREFvis(naerkind,nsizemax)117 REAL :: QREFir(naerkind,nsizemax)118 REAL :: omegaREFvis(naerkind,nsizemax)119 REAL :: omegaREFir(naerkind,nsizemax)120 65 121 66 REAL,SAVE :: tstellar ! Stellar brightness temperature (SW) -
trunk/LMDZ.TITAN/libf/phytitan/radinc_h.F90
r1529 r1788 49 49 ! the k-coefficients. Variable component of the mixture 50 50 ! can in princple be anything: currently it's H2O. 51 !52 ! NAERKIND The number of radiatively active aerosol types53 !54 ! NSIZEMAX The maximum number of aerosol particle sizes55 !56 51 !---------------------------------------------------------------------- 57 52 … … 70 65 integer, parameter :: L_NSPECTV = NBvisible 71 66 72 ! integer, parameter :: NAERKIND = 2 ! set in scatterers.h73 67 real, parameter :: L_TAUMAX = 35 74 68 … … 84 78 !integer, parameter :: NTstop = 50000 85 79 !real*8,parameter :: NTfac = 1.0D+2 86 87 ! Maximum number of grain size classes for aerosol convolution:88 ! This must correspond to size of largest dataset used for aerosol89 ! optical properties in datagcm folder.90 integer, parameter :: nsizemax = 6091 80 92 81 character(len=100),save :: corrkdir -
trunk/LMDZ.TITAN/libf/phytitan/setspi.F90
r1397 r1788 23 23 24 24 use radinc_h, only: L_NSPECTI,corrkdir,banddir,NTstar,NTstop,NTfac 25 use radcommon_h, only: BWNI, BLAMI,WNOI,DWNI,WAVEI,planckir,sigma25 use radcommon_h, only: BWNI,WNOI,DWNI,WAVEI,planckir,sigma 26 26 use datafile_mod, only: datadir 27 27 use comcstfi_mod, only: pi … … 136 136 DWNI(M) = BWNI(M+1)-BWNI(M) 137 137 WAVEI(M) = 1.0D+4/WNOI(M) 138 BLAMI(M) = 0.01D0/BWNI(M) 139 end do 140 BLAMI(M) = 0.01D0/BWNI(M) 138 end do 141 139 ! note M=L_NSPECTI+1 after loop due to Fortran bizarreness 142 140 -
trunk/LMDZ.TITAN/libf/phytitan/setspv.F90
r1397 r1788 24 24 25 25 use radinc_h, only: L_NSPECTV, corrkdir, banddir 26 use radcommon_h, only: BWNV, BLAMV,WNOV,DWNV,WAVEV, &26 use radcommon_h, only: BWNV,WNOV,DWNV,WAVEV, & 27 27 STELLARF,TAURAY 28 28 use datafile_mod, only: datadir … … 113 113 DWNV(M) = BWNV(M+1)-BWNV(M) 114 114 WAVEV(M) = 1.0E+4/WNOV(M) 115 BLAMV(M) = 0.01/BWNV(M)116 115 end do 117 BLAMV(M) = 0.01/BWNV(M) ! wavelength in METERS for aerosol stuff118 116 ! note M=L_NSPECTV+1 after loop due to Fortran bizarreness 119 117 -
trunk/LMDZ.TITAN/libf/phytitan/tracer_h.F90
r1672 r1788 10 10 character*20, DIMENSION(:), ALLOCATABLE :: noms ! name of the tracer 11 11 real, DIMENSION(:), ALLOCATABLE :: mmol ! mole mass of tracer (g/mol-1) 12 real, DIMENSION(:), ALLOCATABLE :: radius ! dust and ice particle radius (m)13 12 real, DIMENSION(:), ALLOCATABLE :: rho_q ! tracer densities (kg.m-3) 14 real, DIMENSION(:), ALLOCATABLE :: qext ! Single Scat. Extinction coeff at 0.67 um15 real, DIMENSION(:), ALLOCATABLE :: alpha_lift ! saltation vertical flux/horiz flux ratio (m-1)16 real, DIMENSION(:), ALLOCATABLE :: alpha_devil ! lifting coeeficient by dust devil17 real, DIMENSION(:), ALLOCATABLE :: qextrhor ! Intermediate for computing opt. depth from q18 13 19 !$OMP THREADPRIVATE(noms,mmol,r adius,rho_q,qext,alpha_lift,alpha_devil,qextrhor)14 !$OMP THREADPRIVATE(noms,mmol,rho_q) 20 15 21 16 ! tracer indexes: these are initialized in initracer and should be 0 if the
Note: See TracChangeset
for help on using the changeset viewer.