- Timestamp:
- Feb 10, 2012, 12:33:14 PM (13 years ago)
- Location:
- trunk/LMDZ.MARS
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/README
r519 r520 1386 1386 is either something.F or something.F90. Also added that object files are 1387 1387 removed from archive before compiling a new version. 1388 1389 == 10/02/12 == TN 1390 >> Major update on watercycle: a smaller integration timestep is now used 1391 in watercloud.F, sedimentation of clouds is done in watercloud instead of 1392 callsedim.F 1393 >> Temperature-dependant contact parameter in nuclea.F 1394 >> No dust lifting if CO2 ice in vdif.c 1395 >> Ice integrated column opacity is written in diagfi from physiq.F, instead 1396 of aeropacity.F. Mandatory if iradia is not 1. 1397 >> New definition of permanent ice in surfini.F and possibility to have an ice 1398 cap in it in 1d. 1399 >> Update in deftank: callphys.def.outliers,run.def.1d; added traceur.def.scavenging 1400 1401 -
trunk/LMDZ.MARS/deftank/callphys.def.outliers
r283 r520 88 88 # WATER: Compute water cycle 89 89 water = .true. 90 # WATER: Microphysical scheme for water-ice clouds? 91 microphys = .true. 90 92 # WATER: current permanent caps at both poles. True IS RECOMMENDED 91 93 # (with .true., North cap is a source of water and South pole … … 95 97 albedo_h2o_ice = 0.4 96 98 # WATER: water ice thermal inertia (SI) ? STILL TBD !! 97 # (je trouve dans les 2400 SI à 173 K)98 99 inert_h2o_ice = 1000. 99 temptag = .false.100 100 # WATER: water ice frost minimal thickness (ie kg.m^-2, ie 0.92 mm) for albedo 101 101 frost_albedo_threshold = 0.005 102 102 # PHOTOCHEMISTRY: include chemical species 103 103 photochem = .false. 104 # WATER: parameter contact 105 mteta = 0.95 106 # WATER: Effective variance for sedimentation for the log-normal 107 # distribution of ice particles ? 108 nuice_sed = 0.5 109 # WATER: water ice cloud formation coupled with sedimentation is computed 110 # every "imicro" times per physical timestep 111 imicro = 1 104 112 105 113 ## Thermospheric options (relevant if tracer=T) : -
trunk/LMDZ.MARS/deftank/run.def.1d
r38 r520 35 35 # hybrid vertical coordinate ? (.true. for hybrid and .false. for sigma levels) 36 36 hybrid=.true. 37 37 # Water ice cap on ground ? 38 watercaptag=.false. 38 39 39 40 ###### Initial atmospheric temperature profile -
trunk/LMDZ.MARS/libf/phymars/aeropacity.F
r420 r520 1 1 SUBROUTINE aeropacity(ngrid,nlayer,nq,zday,pplay,pplev,ls, 2 & pq,tauscaling,tauref,tau, aerosol,reffrad,nueffrad,2 & pq,tauscaling,tauref,tau,taucloudtes,aerosol,reffrad,nueffrad, 3 3 & QREFvis3d,QREFir3d,omegaREFvis3d,omegaREFir3d) 4 4 … … 386 386 ENDDO 387 387 ENDDO 388 c 3. Outputs 389 IF (ngrid.NE.1) THEN390 CALL WRITEDIAGFI(ngridmx,'tauVIS','tauext VIS refwvl',391 & ' ',2,taucloudvis)392 CALL WRITEDIAGFI(ngridmx,'tauTES','tauabs IR refwvl',393 & ' ',2,taucloudtes)394 IF (callstats) THEN395 CALL wstats(ngridmx,'tauVIS','tauext VIS refwvl',396 & ' ',2,taucloudvis)397 CALL wstats(ngridmx,'tauTES','tauabs IR refwvl',398 & ' ',2,taucloudtes)399 ENDIF400 ELSE401 cCALL writeg1d(ngrid,1,taucloudtes,'tautes','NU')402 ENDIF388 c 3. Outputs -- Now done in physiq.F 389 ! IF (ngrid.NE.1) THEN 390 ! CALL WRITEDIAGFI(ngridmx,'tauVIS','tauext VIS refwvl', 391 ! & ' ',2,taucloudvis) 392 ! CALL WRITEDIAGFI(ngridmx,'tauTES','tauabs IR refwvl', 393 ! & ' ',2,taucloudtes) 394 ! IF (callstats) THEN 395 ! CALL wstats(ngridmx,'tauVIS','tauext VIS refwvl', 396 ! & ' ',2,taucloudvis) 397 ! CALL wstats(ngridmx,'tauTES','tauabs IR refwvl', 398 ! & ' ',2,taucloudtes) 399 ! ENDIF 400 ! ELSE 401 ! CALL writeg1d(ngrid,1,taucloudtes,'tautes','NU') 402 ! ENDIF 403 403 c================================================================== 404 404 END SELECT aerkind -
trunk/LMDZ.MARS/libf/phymars/callradite.F
r370 r520 2 2 $ emis,mu0,pplev,pplay,pt,tsurf,fract,dist_sol,igout, 3 3 $ dtlw,dtsw,fluxsurf_lw,fluxsurf_sw,fluxtop_lw,fluxtop_sw, 4 & tauref,tau,aerosol,tauscaling,rdust,rice,nuice,co2ice) 4 & tauref,tau,aerosol,tauscaling,taucloudtes,rdust,rice, 5 & nuice,co2ice) 5 6 6 7 IMPLICIT NONE … … 174 175 175 176 REAL tauref(ngrid), tau(ngrid,naerkind) 177 REAL taucloudtes(ngridmx)! Cloud opacity at infrared 178 ! reference wavelength using 179 ! Qabs instead of Qext 180 ! (direct comparison with TES) 176 181 REAL aerosol(ngrid,nlayer,naerkind) 177 182 REAL rdust(ngridmx,nlayermx) ! Dust geometric mean radius (m) … … 395 400 c Computing aerosol optical depth in each layer: 396 401 CALL aeropacity(ngrid,nlayer,nq,zday,pplay,pplev,ls, 397 & pq,tauscaling,tauref,tau, aerosol,reffrad,nueffrad,398 & QREFvis3d,QREFir3d,omegaREFvis3d,omegaREFir3d)402 & pq,tauscaling,tauref,tau,taucloudtes,aerosol,reffrad, 403 & nueffrad,QREFvis3d,QREFir3d,omegaREFvis3d,omegaREFir3d) 399 404 400 405 c Starting loop on sub-domain -
trunk/LMDZ.MARS/libf/phymars/callsedim.F
r472 r520 4 4 & pq, pdqfi, pdqsed,pdqs_sed,nq, 5 5 & tau, tauscaling) 6 ! to use 'getin' 7 USE ioipsl_getincom 6 8 IMPLICIT NONE 7 9 … … 21 23 c declarations: 22 24 c ------------- 23 25 24 26 #include "dimensions.h" 25 27 #include "dimphys.h" … … 69 71 c Sedimentation radius of water ice 70 72 real rsedcloud(ngridmx,nlayermx) 73 real beta ! correction for the shape of the ice particles (cf. newsedim) 74 save beta 71 75 c Cloud density (kg.m-3) 72 76 real rhocloud(ngridmx,nlayermx) … … 118 122 SAVE idust_mass,idust_number 119 123 SAVE iccn_mass,iccn_number 124 120 125 121 126 c Firstcall: … … 201 206 ENDIF !of if (scavenging) 202 207 203 IF (water) THEN 204 write(*,*) "water_param nueff Sedimentation:", nuice_sed 205 IF (activice) THEN 206 write(*,*) "water_param nueff Radiative:", nuice_ref 207 ENDIF 208 ENDIF 208 ! IF (water) THEN 209 ! write(*,*) "correction for the shape of the ice particles ?" 210 ! beta=0.75 ! default value 211 ! call getin("ice_shape",beta) 212 ! write(*,*) " ice_shape = ",beta 213 ! 214 ! write(*,*) "water_param nueff Sedimentation:", nuice_sed 215 ! IF (activice) THEN 216 ! write(*,*) "water_param nueff Radiative:", nuice_ref 217 ! ENDIF 218 ! ENDIF 209 219 210 220 firstcall=.false. … … 269 279 if ((doubleq.and. 270 280 & ((iq.eq.idust_mass).or. 271 & (iq.eq.idust_number))) .or.272 & (scavenging.and.273 & ((iq.eq.iccn_mass).or.274 & (iq.eq.iccn_number)))) then281 & (iq.eq.idust_number)))) then !.or. 282 ! & (scavenging.and. 283 ! & ((iq.eq.iccn_mass).or. 284 ! & (iq.eq.iccn_number)))) then 275 285 276 286 c Computing size distribution: 277 287 c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 278 288 279 if ((iq.eq.idust_mass).or.(iq.eq.idust_number)) then289 c if ((iq.eq.idust_mass).or.(iq.eq.idust_number)) then 280 290 do l=1,nlay 281 291 do ig=1, ngrid … … 284 294 end do 285 295 sigma0 = varian 286 else 287 do l=1,nlay288 do ig=1, ngrid289 r0(ig,l)=r0ccn(ig,l)290 end do291 end do292 sigma0 = sqrt(log(1.+nuice_sed))293 endif296 c else ! ccn 297 c do l=1,nlay 298 c do ig=1, ngrid 299 c r0(ig,l)=r0ccn(ig,l) 300 c end do 301 c end do 302 c sigma0 = sqrt(log(1.+nuice_sed)) 303 c endif 294 304 295 305 c Computing mass mixing ratio for each particle size … … 297 307 IF ((iq.EQ.idust_mass).or.(iq.EQ.iccn_mass)) then 298 308 radpower = 2 299 ELSE 309 ELSE ! number 300 310 radpower = -1 301 311 ENDIF … … 348 358 349 359 do ir=1,nr 350 IF ((iq.EQ.idust_mass).or.(iq.EQ.idust_number)) then 360 ! IF ((iq.EQ.idust_mass).or.(iq.EQ.idust_number)) then 361 ! Dust sedimentation 351 362 call newsedim(ngrid,nlay,1,1,ptimestep, 352 363 & pplev,masse,epaisseur,pt,rd(ir),rho_dust,qr(1,1,ir), 353 364 & wq,0.5) 354 ELSE 355 call newsedim(ngrid,nlay,1,ngrid*nlay,ptimestep, 356 & pplev,masse,epaisseur,pt,rd(ir),rhocloud,qr(1,1,ir), 357 & wq,1.0) 358 ENDIF 365 ! ELSE 366 ! ! CCN sedimentation 367 ! call newsedim(ngrid,nlay,1,ngrid*nlay,ptimestep, 368 ! & pplev,masse,epaisseur,pt,rd(ir),rhocloud,qr(1,1,ir), 369 ! & wq,beta) 370 ! ENDIF 359 371 360 372 c Tendencies … … 371 383 enddo ! of do ir=1,nr 372 384 c ----------------------------------------------------------------- 373 c WATER CYCLE CASE 374 c ----------------------------------------------------------------- 375 else if (water.and.(iq.eq.igcm_h2o_ice)) then 376 if (microphys) then 377 call newsedim(ngrid,nlay,ngrid*nlay,ngrid*nlay, 378 & ptimestep,pplev,masse,epaisseur,pt,rsedcloud,rhocloud, 379 & zqi(1,1,iq),wq,1.0) 380 else 381 call newsedim(ngrid,nlay,ngrid*nlay,1, 382 & ptimestep,pplev,masse,epaisseur,pt,rsedcloud,rho_q(iq), 383 & zqi(1,1,iq),wq,1.0) 384 endif ! of if (microphys) 385 c WATER CYCLE CASE --- NOW DONE IN WATERCLOUD !! 386 c ----------------------------------------------------------------- 387 ! else if (water.and.(iq.eq.igcm_h2o_ice)) then 388 ! if (microphys) then 389 ! ! water ice sedimentation 390 ! call newsedim(ngrid,nlay,ngrid*nlay,ngrid*nlay, 391 ! & ptimestep,pplev,masse,epaisseur,pt,rsedcloud,rhocloud, 392 ! & zqi(1,1,iq),wq,beta) 393 ! else 394 ! ! water ice sedimentation 395 ! call newsedim(ngrid,nlay,ngrid*nlay,1, 396 ! & ptimestep,pplev,masse,epaisseur,pt,rsedcloud,rho_q(iq), 397 ! & zqi(1,1,iq),wq,beta) 398 ! endif ! of if (microphys) 385 399 c Tendencies 386 400 c ~~~~~~~~~~ 387 do ig=1,ngrid388 pdqs_sed(ig,iq)=wq(ig,1)/ptimestep389 end do401 ! do ig=1,ngrid 402 ! pdqs_sed(ig,iq)=wq(ig,1)/ptimestep 403 ! end do 390 404 c ----------------------------------------------------------------- 391 405 c GENERAL CASE 392 406 c ----------------------------------------------------------------- 393 else 407 c else 408 else if ((iq .ne. iccn_mass) .and. (iq .ne. iccn_number) 409 & .and. (iq .ne. igcm_h2o_ice)) then ! because it is done in watercloud 394 410 call newsedim(ngrid,nlay,1,1,ptimestep, 395 411 & pplev,masse,epaisseur,pt,radius(iq),rho_q(iq), … … 418 434 c Update the dust particle size "rdust" 419 435 c ------------------------------------- 420 if (doubleq) then 421 DO l = 1, nlay 436 DO l = 1, nlay 422 437 DO ig=1,ngrid 423 438 rdust(ig,l)= … … 426 441 rdust(ig,l)=min(max(rdust(ig,l),1.e-10),500.e-6) 427 442 ENDDO 428 ENDDO 429 endif !of if (doubleq) 443 ENDDO 430 444 431 445 c Update the ice particle size "rice" 432 446 c ------------------------------------- 433 IF(scavenging) THEN434 DO l = 1, nlay435 DO ig=1,ngrid436 Mo = zqi(ig,l,igcm_h2o_ice) +437 & zqi(ig,l,iccn_mass)* tauscaling(ig) + 1.e-30438 No = zqi(ig,l,iccn_number)* tauscaling(ig)+ 1.e-30439 rhocloud(ig,l) = zqi(ig,l,igcm_h2o_ice) / Mo * rho_ice440 & +zqi(ig,l,iccn_mass)* tauscaling(ig)441 & / Mo * rho_dust442 rhocloud(ig,l) =443 & min(max(rhocloud(ig,l),rho_ice),rho_dust)444 rice(ig,l) =445 & ( Mo / No * 0.75 / pi / rhocloud(ig,l) ) **(1./3.)446 if ((Mo.lt.1.e-20) .or. (No.le.1)) rice(ig,l) = 1.e-8447 ! IF(scavenging) THEN 448 ! DO l = 1, nlay 449 ! DO ig=1,ngrid 450 ! Mo = zqi(ig,l,igcm_h2o_ice) + 451 ! & zqi(ig,l,iccn_mass)* tauscaling(ig) + 1.e-30 452 ! No = zqi(ig,l,iccn_number)* tauscaling(ig)+ 1.e-30 453 ! rhocloud(ig,l) = zqi(ig,l,igcm_h2o_ice) / Mo * rho_ice 454 ! & +zqi(ig,l,iccn_mass)* tauscaling(ig) 455 ! & / Mo * rho_dust 456 ! rhocloud(ig,l) = 457 ! & min(max(rhocloud(ig,l),rho_ice),rho_dust) 458 ! rice(ig,l) = 459 ! & ( Mo / No * 0.75 / pi / rhocloud(ig,l) ) **(1./3.) 460 ! if ((Mo.lt.1.e-15) .or. (No.le.50)) rice(ig,l) = 1.e-8 447 461 c print*, "Mice,Mo, No",zqi(ig,l,igcm_h2o_ice),Mo, No 448 462 c print*, "rice, rho apres", rice(ig,l), rhocloud(ig,l) 449 450 ENDDO 451 ENDDO 452 ELSE 453 if (water) then 454 DO l = 1, nlay 455 DO ig=1,ngrid 456 ccntyp = 457 & 1.3e+8*max(tau(ig,1),0.001)/0.1*exp(-zlay(ig,l)/10000.) 458 ccntyp = ccntyp /ccn_factor 459 rice(ig,l)=max( CBRT ( (zqi(ig,l,igcm_h2o_ice)/rho_ice 460 & +ccntyp*(4./3.)*pi*rdust(ig,l)**3.) 461 & /(ccntyp*4./3.*pi) ), rdust(ig,l)) 462 ENDDO 463 ENDDO 464 endif ! of if (water) 465 ENDIF ! of IF (scavenging) 463 ! 464 ! ENDDO 465 ! ENDDO 466 ! ELSE 467 ! DO l = 1, nlay 468 ! DO ig=1,ngrid 469 ! ccntyp = 470 ! & 1.3e+8*max(tau(ig,1),0.001)/0.1*exp(-zlay(ig,l)/10000.) 471 ! ccntyp = ccntyp /ccn_factor 472 ! rice(ig,l)=max( CBRT ( (zqi(ig,l,igcm_h2o_ice)/rho_ice 473 ! & +ccntyp*(4./3.)*pi*rdust(ig,l)**3.) 474 ! & /(ccntyp*4./3.*pi) ), rdust(ig,l)) 475 ! ENDDO 476 ! ENDDO 477 ! ENDIF 466 478 467 479 RETURN -
trunk/LMDZ.MARS/libf/phymars/improvedclouds.F
r455 r520 1 1 subroutine improvedclouds(ngrid,nlay,ptimestep, 2 & pplev,pplay, pt,pdt,3 & pq,pdq,pdqcloud,pd qscloud,pdtcloud,2 & pplev,pplay,zlev,pt,pdt, 3 & pq,pdq,pdqcloud,pdtcloud, 4 4 & nq,tauscaling,rdust,rice,nuice, 5 5 & rsedcloud,rhocloud) 6 ! to use 'getin' 7 USE ioipsl_getincom 6 8 implicit none 7 9 c------------------------------------------------------------------ … … 22 24 c Authors: J.-B. Madeleine, based on the work by Franck Montmessin 23 25 c (October 2011) 26 c T. Navarro, debug & correction (October-December 2011) 24 27 c------------------------------------------------------------------ 25 28 #include "dimensions.h" … … 37 40 integer nq ! nombre de traceurs 38 41 REAL ptimestep ! pas de temps physique (s) 39 REAL pplev(ngrid,nlay+1),pplay(ngrid,nlay) ! pression au milieu des couches (Pa) 42 REAL pplev(ngrid,nlay+1) ! pression aux inter-couches (Pa) 43 REAL pplay(ngrid,nlay) ! pression au milieu des couches (Pa) 44 REAL zlev(ngrid,nlay+1) ! altitude at layer boundaries 45 40 46 REAL pt(ngrid,nlay) ! temperature at the middle of the 41 47 ! layers (K) … … 57 63 REAL pdqcloud(ngrid,nlay,nq) ! tendance de la condensation 58 64 ! H2O(kg/kg.s-1) 59 REAL pdqscloud(ngrid,nq) ! flux en surface (kg.m-2.s-1)60 65 REAL pdtcloud(ngrid,nlay) ! tendance temperature due 61 66 ! a la chaleur latente … … 75 80 76 81 INTEGER ig,l,i 82 77 83 78 84 REAL zq(ngridmx,nlayermx,nqmx) ! local value of tracers … … 106 112 DOUBLE PRECISION rb_cld(nbin_cld+1)! boundary values of each rad_cld bin (m) 107 113 SAVE rb_cld 108 DOUBLE PRECISION dr_cld(nbin_cld) ! width of each rad_cld bin (m)109 DOUBLE PRECISION vol_cld(nbin_cld) 114 DOUBLE PRECISION dr_cld(nbin_cld) ! width of each rad_cld bin (m) 115 DOUBLE PRECISION vol_cld(nbin_cld) ! particle volume for each bin (m3) 110 116 111 117 REAL sigma_ice ! Variance of the ice and CCN distributions 112 118 SAVE sigma_ice 113 119 114 120 c---------------------------------- 115 121 c some outputs for 1D -- TEMPORARY … … 126 132 REAL Mccn_col(ngridmx) ! total column ccn mass 127 133 REAL Nccn_col(ngridmx) ! total column ccn mass 134 REAL dMice_col(ngridmx) ! total column ice mass change 135 REAL drice_col(ngridmx) ! total column ice radius change 136 REAL icetot(ngridmx) ! total column ice mass 137 REAL rice_out(ngridmx,nlayermx) ! ice radius change 128 138 REAL rate_out(ngridmx,nlayermx) ! nucleation rate 129 139 INTEGER count 130 140 131 141 LOGICAL output_sca ! scavenging outputs flag for tests 142 132 143 output_sca = .false. 133 144 c---------------------------------- … … 202 213 c----------------------------------------------------------------------- 203 214 c Initialize the tendencies 204 pdqscloud(1:ngrid,1:nq)=0205 215 pdqcloud(1:ngrid,1:nlay,1:nq)=0 206 216 pdtcloud(1:ngrid,1:nlay)=0 … … 249 259 enddo 250 260 251 252 261 c------------------------------------------------------------------ 253 262 c Cloud microphysical scheme … … 269 278 270 279 IF ((satu .ge. 1)! ) THEN ! if we have condensation 271 & .or. ( zq(ig,l,igcm_ccn_number) 272 & .ge. 10) ) THEN ! or sublimation280 & .or. ( zq(ig,l,igcm_ccn_number)*tauscaling(ig) 281 & .ge. 2) ) THEN ! or sublimation 273 282 274 283 … … 287 296 & -derf( dlog(rb_cld(i) * Rm) * dev2 ) ) 288 297 enddo 289 298 290 299 ! sumcheck = 0 291 300 ! do i = 1, nbin_cld … … 320 329 rate_out(ig,l) = 0 321 330 do i = 1, nbin_cld 331 ! schema simple 322 332 n_aer(i) = n_aer(i) / ( 1. + rate(i)*ptimestep ) 323 333 m_aer(i) = m_aer(i) / ( 1. + rate(i)*ptimestep ) 324 334 dN = dN + n_aer(i) * rate(i) * ptimestep 325 335 dM = dM + m_aer(i) * rate(i) * ptimestep 326 rate_out(ig,l)=rate_out(ig,l)+rate(i)336 !rate_out(ig,l)=rate_out(ig,l)+rate(i) 327 337 enddo 328 329 ! dN = min( max(dN,-zq(ig,l,igcm_ccn_number) ),330 ! & zq(ig,l,igcm_dust_number) )331 !332 ! dM = min( max(dM,-zq(ig,l,igcm_ccn_mass) ),333 ! & zq(ig,l,igcm_dust_mass) )334 338 335 339 Mo = zq0(ig,l,igcm_h2o_ice) + … … 382 386 zq(ig,l,igcm_h2o_vap) = zq0(ig,l,igcm_h2o_vap) - 383 387 & dMice 384 388 385 389 c If all the ice particles sublimate, all the condensation 386 390 c nuclei are released: … … 411 415 zq(ig,l,igcm_ccn_mass) = zq(ig,l,igcm_ccn_mass) + dM 412 416 zq(ig,l,igcm_ccn_number) = zq(ig,l,igcm_ccn_number) + dN 413 417 418 414 419 pdqcloud(ig,l,igcm_dust_mass)=(zq(ig,l,igcm_dust_mass) 415 420 & -zq0(ig,l,igcm_dust_mass))/ptimestep … … 425 430 & -zq0(ig,l,igcm_h2o_ice))/ptimestep 426 431 432 427 433 count = count +1 428 434 ELSE ! for coherence (rdust, rice computations etc ..) … … 447 453 lw=(2834.3-0.28*(zt(ig,l)-To)-0.004*(zt(ig,l)-To)**2)*1.e+3 448 454 pdtcloud(ig,l)=-pdqcloud(ig,l,igcm_h2o_vap)*lw/cpp 455 c pdtcloud(ig,l)=pdt(ig,l)-pdqcloud(ig,l,igcm_h2o_vap)*lw/cpp 449 456 450 c----- update rice & rhocloud AFTER scavenging457 c----- update rice & rhocloud AFTER microphysic 451 458 Mo = zq(ig,l,igcm_h2o_ice) + 452 459 & zq(ig,l,igcm_ccn_mass)* tauscaling(ig) + 1.e-30 … … 456 463 & / Mo * rho_dust 457 464 rhocloud(ig,l) = min(max(rhocloud(ig,l),rho_ice),rho_dust) 465 466 rice_out(ig,l)=rice(ig,l) 458 467 rice(ig,l) = 459 468 & ( Mo / No * 0.75 / pi / rhocloud(ig,l) ) **(1./3.) 460 469 if ((Mo.lt.1.e-20) .or. (No.le.1)) rice(ig,l) = 1.e-8 470 rice_out(ig,l)=rice(ig,l)-rice_out(ig,l) 461 471 462 472 nuice(ig,l)=nuice_ref ! used for rad. transfer calculations … … 474 484 ENDDO 475 485 ENDDO 476 486 487 ! print*, 'SATU' 488 ! print*, satu_out(1,:) 477 489 478 490 c------------------------------------------------------------------ … … 494 506 Mccn_col(:) = 0 495 507 Nccn_col(:) = 0 508 dMice_col(:) = 0 509 drice_col(:) = 0 510 icetot(:) = 0 496 511 do l=1, nlay 497 512 do ig=1,ngrid … … 512 527 & zq(ig,l,igcm_ccn_number)*tauscaling(ig) 513 528 & *(pplev(ig,l) - pplev(ig,l+1)) / g 529 dMice_col(ig) = dMice_col(ig) + 530 & Mcon_out(ig,l) 531 & *(pplev(ig,l) - pplev(ig,l+1)) / g 532 drice_col(ig) = drice_col(ig) + 533 & rice_out(ig,l)*zq(ig,l,igcm_h2o_ice) 534 & *(pplev(ig,l) - pplev(ig,l+1)) / g 535 icetot(ig) = icetot(ig) + 536 & zq(ig,l,igcm_h2o_ice) 537 & *(pplev(ig,l) - pplev(ig,l+1)) / g 514 538 enddo ! of do ig=1,ngrid 515 539 enddo ! of do l=1,nlay 540 541 drice_col(ig) = drice_col(ig)/icetot(ig) 516 542 517 543 … … 549 575 call WRITEDIAGFI(ngrid,"dN","ccn variation","#",1, 550 576 & dN_out) 577 call WRITEDIAGFI(ngrid,"dicetot","ice col var","kg/m2",0, 578 & dMice_col) 579 call WRITEDIAGFI(ngrid,"dricetot","ice col var","m",0, 580 & drice_col) 551 581 call WRITEDIAGFI(ngrid,"mcond","h2o condensed mass","kg",1, 552 582 & Mcon_out) -
trunk/LMDZ.MARS/libf/phymars/microphys.h
r358 r520 5 5 6 6 ! Number of bins 7 INTEGER, PARAMETER :: nbin_cld = 5 07 INTEGER, PARAMETER :: nbin_cld = 5 8 8 9 9 ! Reference temperature, T=273.15 K -
trunk/LMDZ.MARS/libf/phymars/nuclea.F
r358 r520 44 44 45 45 integer i 46 47 LOGICAL firstcall 48 DATA firstcall/.true./ 49 SAVE firstcall 46 50 47 51 c ************************************************* 48 52 49 53 mtetalocal = mteta 54 55 cccccccccccccccccccccccccccccccccccccccccccccccccc 56 ccccccccccc ESSAIS TN MTETA = F (T) cccccccccccccc 57 c if (temp .gt. 200) then 58 c mtetalocal = mtetalocal 59 c else if (temp .lt. 190) then 60 c mtetalocal = mtetalocal-0.05 61 c else 62 c mtetalocal = mtetalocal - (190-temp)*0.005 63 c endif 64 c----------------exp law, see Trainer 2008, J. Phys. Chem. C 2009, 113, 2036\u20132040 65 !mtetalocal = max(mtetalocal - 6005*exp(-0.065*temp),0.1) 66 !mtetalocal = max(mtetalocal - 6005*exp(-0.068*temp),0.1) 67 !print*, mtetalocal, temp 68 cccccccccccccccccccccccccccccccccccccccccccccccccc 69 cccccccccccccccccccccccccccccccccccccccccccccccccc 70 IF (firstcall) THEN 71 print*, ' ' 72 print*, 'dear user, please keep in mind that' 73 print*, 'contact parameter IS constant' 74 !print*, 'contact parameter IS NOT constant:' 75 !print*, 'max(mteta - 6005*exp(-0.065*temp),0.1)' 76 !print*, 'max(mteta - 6005*exp(-0.068*temp),0.1)' 77 print*, ' ' 78 firstcall=.false. 79 END IF 80 cccccccccccccccccccccccccccccccccccccccccccccccccc 81 cccccccccccccccccccccccccccccccccccccccccccccccccc 82 50 83 51 84 if (sat .gt. 1.) then ! minimum condition to activate nucleation -
trunk/LMDZ.MARS/libf/phymars/physiq.F
r506 r520 201 201 real rsedcloud(ngridmx,nlayermx) ! Cloud sedimentation radius 202 202 real rhocloud(ngridmx,nlayermx) ! Cloud density (kg.m-3) 203 REAL surfdust(ngridmx,nlayermx) ! dust surface area (m 2/m3, if photochemistry)204 REAL surfice(ngridmx,nlayermx) ! ice surface area (m2/m3, if photochemistry)203 REAL surfdust(ngridmx,nlayermx) ! dust surface area (micron2/cm3, if photochemistry) 204 REAL surfice(ngridmx,nlayermx) ! ice surface area (micron2/cm3, if photochemistry) 205 205 206 206 c Variables used by the slope model … … 308 308 real rho(ngridmx,nlayermx) ! density 309 309 real vmr(ngridmx,nlayermx) ! volume mixing ratio 310 REAL colden(ngridmx,nqmx) ! vertical column of tracers310 !real colden(ngridmx,nqmx) ! vertical column !FL 311 311 REAL mtot(ngridmx) ! Total mass of water vapor (kg/m2) 312 312 REAL icetot(ngridmx) ! Total mass of water ice (kg/m2) 313 REAL ccntot(ngridmx) ! Total number of ccn (nbr/m2) 313 314 REAL rave(ngridmx) ! Mean water ice effective radius (m) 314 315 REAL opTES(ngridmx,nlayermx)! abs optical depth at 825 cm-1 315 316 REAL tauTES(ngridmx) ! column optical depth at 825 cm-1 316 317 REAL Qabsice ! Water ice absorption coefficient 318 REAL taucloudtes(ngridmx)! Cloud opacity at infrared 319 ! reference wavelength using 320 ! Qabs instead of Qext 321 ! (direct comparison with TES) 322 317 323 318 324 c Test 1d/3d scavenging 319 real h2o_tot 325 real h2otot(ngridmx) 326 REAL satu(ngridmx,nlayermx) ! satu ratio for output 327 REAL zqsat(ngridmx,nlayermx) ! saturation 320 328 321 329 REAL time_phys … … 332 340 333 341 REAL lmax_th_out(ngridmx),zmax_th(ngridmx) 334 REAL, SAVE :: w star(ngridmx)335 REAL , SAVE ::hfmax_th(ngridmx)342 REAL, SAVE :: wmax_th(ngridmx) 343 REAL hfmax_th(ngridmx) 336 344 REAL pdu_th(ngridmx,nlayermx),pdv_th(ngridmx,nlayermx) 337 345 REAL pdt_th(ngridmx,nlayermx),pdq_th(ngridmx,nlayermx,nqmx) … … 342 350 REAL z_out ! height of interpolation between z0 and z1 [meters] 343 351 REAL ustar(ngridmx),tstar(ngridmx) ! friction velocity and friction potential temp 344 REAL L_mo(ngridmx) ,wstarpbl(ngridmx),vhf(ngridmx),vvv(ngridmx)352 REAL L_mo(ngridmx) 345 353 REAL zu2(ngridmx) 346 354 c======================================================================= … … 359 367 fluxrad(:)=0 360 368 361 w star(:)=0.369 wmax_th(:)=0. 362 370 363 371 c read startfi … … 569 577 enddo 570 578 endif 571 else572 zdtnlte(:,:)=0.573 579 endif 574 580 … … 589 595 $ emis,mu0,pplev,pplay,pt,tsurf,fract,dist_sol,igout, 590 596 $ zdtlw,zdtsw,fluxsurf_lw,fluxsurf_sw,fluxtop_lw,fluxtop_sw, 591 & tauref,tau,aerosol,tauscaling,rdust,rice,nuice,co2ice) 597 $ tauref,tau,aerosol,tauscaling,taucloudtes,rdust,rice, 598 $ nuice,co2ice) 592 599 593 600 c Outputs for basic check (middle of domain) … … 747 754 DO ig=1, ngridmx 748 755 IF (zh(ig,1) .lt. tsurf(ig)) THEN 749 wstar(ig)=1. 750 hfmax_th(ig)=0.2 751 ELSE 752 wstar(ig)=0. 753 hfmax_th(ig)=0. 754 ENDIF 756 wmax_th(ig)=1. 757 ENDIF 755 758 ENDDO 756 759 ENDIF … … 768 771 $ zdum1,zdum2,zdh,pdq,zflubid, 769 772 $ zdudif,zdvdif,zdhdif,zdtsdif,q2, 770 & zdqdif,zdqsdif,w star,zcdv,zcdh,hfmax_th)773 & zdqdif,zdqsdif,wmax_th,zcdv,zcdh) 771 774 772 775 #ifdef MESOSCALE … … 829 832 $ pplay,pplev,pphi,zpopsk, 830 833 $ pdu_th,pdv_th,pdt_th,pdq_th,lmax_th,zmax_th, 831 $ dtke_th,hfmax_th,w star)834 $ dtke_th,hfmax_th,wmax_th) 832 835 833 836 DO l=1,nlayer … … 858 861 else !of if calltherm 859 862 lmax_th(:)=0 860 wstar(:)=0. 861 hfmax_th(:)=0. 863 wmax_th(:)=0. 862 864 lmax_th_out(:)=0. 863 865 end if … … 911 913 c ------------------------------------------- 912 914 913 IF (tituscap) THEN 914 915 915 #ifdef MESOSCALE 916 !!! get the actual co2 seasonal cap from Titus observations 917 CALL geticecover( ngrid, 180.*zls/pi, 916 918 . 180.*long/pi, 180.*lati/pi, co2ice ) 917 918 ENDIF 919 co2ice = co2ice * 10000. 920 #endif 919 921 920 922 IF (callcond) THEN … … 962 964 c ---------------------------------------- 963 965 IF (water) THEN 966 964 967 965 968 call watercloud(ngrid,nlayer,ptimestep, … … 976 979 ENDDO 977 980 endif 978 981 979 982 ! increment water vapour and ice atmospheric tracers tendencies 980 983 IF (water) THEN … … 987 990 & pdq(ig,l,igcm_h2o_ice)+ 988 991 & zdqcloud(ig,l,igcm_h2o_ice) 992 if (((pq(ig,l,igcm_h2o_ice) + 993 & pdq(ig,l,igcm_h2o_ice)*ptimestep)) .le. 0) 994 & then 995 pdq(ig,l,igcm_h2o_ice) = 996 & - pq(ig,l,igcm_h2o_ice)/ptimestep + 1e-30 997 endif 989 998 IF (scavenging) THEN 990 999 pdq(ig,l,igcm_ccn_mass)= … … 994 1003 & pdq(ig,l,igcm_ccn_number)+ 995 1004 & zdqcloud(ig,l,igcm_ccn_number) 1005 pdq(ig,l,igcm_dust_mass)= 1006 & pdq(ig,l,igcm_dust_mass)+ 1007 & zdqcloud(ig,l,igcm_dust_mass) 1008 pdq(ig,l,igcm_dust_number)= 1009 & pdq(ig,l,igcm_dust_number)+ 1010 & zdqcloud(ig,l,igcm_dust_number) 996 1011 !!!!!!!!!!!!!!!!!!!!! We need to check that we have Nccn & Ndust > 0 997 1012 !!!!!!!!!!!!!!!!!!!!! This is due to single precision rounding problems … … 1001 1016 pdq(ig,l,igcm_ccn_number) = 1002 1017 & - pq(ig,l,igcm_ccn_number)/ptimestep + 1e-30 1018 pdq(ig,l,igcm_ccn_mass) = 1019 & - pq(ig,l,igcm_ccn_mass)/ptimestep + 1e-30 1003 1020 endif 1004 1021 if (((pq(ig,l,igcm_dust_number) + … … 1007 1024 pdq(ig,l,igcm_dust_number) = 1008 1025 & - pq(ig,l,igcm_dust_number)/ptimestep + 1e-30 1026 pdq(ig,l,igcm_dust_mass) = 1027 & - pq(ig,l,igcm_dust_mass)/ptimestep + 1e-30 1009 1028 endif 1010 1029 !!!!!!!!!!!!!!!!!!!!! 1011 1030 !!!!!!!!!!!!!!!!!!!!! 1012 pdq(ig,l,igcm_dust_mass)=1013 & pdq(ig,l,igcm_dust_mass)+1014 & zdqcloud(ig,l,igcm_dust_mass)1015 pdq(ig,l,igcm_dust_number)=1016 & pdq(ig,l,igcm_dust_number)+1017 & zdqcloud(ig,l,igcm_dust_number)1018 1031 ENDIF 1019 1032 ENDDO … … 1029 1042 END IF ! of IF (water) 1030 1043 1031 c 7b. Aerosol particles 1044 1045 c 7b. Chemical species 1046 c ------------------ 1047 1048 #ifndef MESOSCALE 1049 c -------------- 1050 c photochemistry : 1051 c -------------- 1052 IF (photochem .or. thermochem) then 1053 !NB: Photochemistry includes condensation of H2O2 1054 PRINT*, 'SURFDUST,SURFICE TO BE IMPLEMENTED. YAAAAAARG.' 1055 call calchim(ptimestep,pplay,pplev,pt,pdt,dist_sol,mu0, 1056 $ zzlev,zzlay,zday,pq,pdq,zdqchim,zdqschim, 1057 $ zdqcloud,zdqscloud,tauref,co2ice, 1058 $ pu,pdu,pv,pdv,surfdust,surfice) 1059 1060 ! increment values of tracers: 1061 DO iq=1,nq ! loop on all tracers; tendencies for non-chemistry 1062 ! tracers is zero anyways 1063 DO l=1,nlayer 1064 DO ig=1,ngrid 1065 pdq(ig,l,iq)=pdq(ig,l,iq)+zdqchim(ig,l,iq) 1066 ENDDO 1067 ENDDO 1068 ENDDO ! of DO iq=1,nq 1069 ! add condensation tendency for H2O2 1070 if (igcm_h2o2.ne.0) then 1071 DO l=1,nlayer 1072 DO ig=1,ngrid 1073 pdq(ig,l,igcm_h2o2)=pdq(ig,l,igcm_h2o2) 1074 & +zdqcloud(ig,l,igcm_h2o2) 1075 ENDDO 1076 ENDDO 1077 endif 1078 1079 ! increment surface values of tracers: 1080 DO iq=1,nq ! loop on all tracers; tendencies for non-chemistry 1081 ! tracers is zero anyways 1082 DO ig=1,ngrid 1083 dqsurf(ig,iq)=dqsurf(ig,iq)+zdqschim(ig,iq) 1084 ENDDO 1085 ENDDO ! of DO iq=1,nq 1086 ! add condensation tendency for H2O2 1087 if (igcm_h2o2.ne.0) then 1088 DO ig=1,ngrid 1089 dqsurf(ig,igcm_h2o2)=dqsurf(ig,igcm_h2o2) 1090 & +zdqscloud(ig,igcm_h2o2) 1091 ENDDO 1092 endif 1093 1094 END IF ! of IF (photochem.or.thermochem) 1095 #endif 1096 1097 c 7c. Aerosol particles 1032 1098 c ------------------- 1033 1099 … … 1070 1136 & pq, pdq, zdqsed, zdqssed,nq, 1071 1137 & tau,tauscaling) 1138 1139 1140 !print*, 'h2o_ice zdqsed ds physiq', zdqsed(1,:,igcm_h2o_ice) 1072 1141 1073 1142 DO iq=1, nq … … 1084 1153 ENDDO 1085 1154 END IF ! of IF (sedimentation) 1086 1087 c 7c. Chemical species 1088 c ------------------ 1089 1090 #ifndef MESOSCALE 1091 c -------------- 1092 c photochemistry : 1093 c -------------- 1094 IF (photochem .or. thermochem) then 1095 1096 ! dust and ice surface area 1097 call surfacearea(ngrid, nlayer, ptimestep, pplay, zzlay, 1098 $ pt, pq, pdq, nq, 1099 $ rdust, rice, tau, tauscaling, 1100 $ surfdust, surfice) 1101 ! call photochemistry 1102 call calchim(ptimestep,pplay,pplev,pt,pdt,dist_sol,mu0, 1103 $ zzlev,zzlay,zday,pq,pdq,zdqchim,zdqschim, 1104 $ zdqcloud,zdqscloud,tauref,co2ice, 1105 $ pu,pdu,pv,pdv,surfdust,surfice) 1106 1107 ! increment values of tracers: 1108 DO iq=1,nq ! loop on all tracers; tendencies for non-chemistry 1109 ! tracers is zero anyways 1110 DO l=1,nlayer 1111 DO ig=1,ngrid 1112 pdq(ig,l,iq)=pdq(ig,l,iq)+zdqchim(ig,l,iq) 1113 ENDDO 1114 ENDDO 1115 ENDDO ! of DO iq=1,nq 1116 1117 ! add condensation tendency for H2O2 1118 if (igcm_h2o2.ne.0) then 1119 DO l=1,nlayer 1120 DO ig=1,ngrid 1121 pdq(ig,l,igcm_h2o2)=pdq(ig,l,igcm_h2o2) 1122 & +zdqcloud(ig,l,igcm_h2o2) 1123 ENDDO 1124 ENDDO 1125 endif 1126 1127 ! increment surface values of tracers: 1128 DO iq=1,nq ! loop on all tracers; tendencies for non-chemistry 1129 ! tracers is zero anyways 1130 DO ig=1,ngrid 1131 dqsurf(ig,iq)=dqsurf(ig,iq)+zdqschim(ig,iq) 1132 ENDDO 1133 ENDDO ! of DO iq=1,nq 1134 1135 ! add condensation tendency for H2O2 1136 if (igcm_h2o2.ne.0) then 1137 DO ig=1,ngrid 1138 dqsurf(ig,igcm_h2o2)=dqsurf(ig,igcm_h2o2) 1139 & +zdqscloud(ig,igcm_h2o2) 1140 ENDDO 1141 endif 1142 1143 END IF ! of IF (photochem.or.thermochem) 1144 #endif 1155 1145 1156 1146 1157 … … 1158 1169 ENDDO ! (ig) 1159 1170 ENDDO ! (iq) 1171 1160 1172 1161 1173 endif ! of if (tracer) … … 1232 1244 ENDIF ! of IF (tracer.AND.water.AND.(ngridmx.NE.1)) 1233 1245 1234 c 1246 1235 1247 c 9.2 Compute soil temperatures and subsurface heat flux: 1236 1248 c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ … … 1291 1303 DO ig=1,ngridmx 1292 1304 DO l=1,nlayermx 1293 zh(ig,l) = zt(ig,l)*(zpl ev(ig,1)/zplay(ig,l))**rcp1305 zh(ig,l) = zt(ig,l)*(zplay(ig,l)/zplev(ig,1))**rcp 1294 1306 ENDDO 1295 1307 ENDDO … … 1374 1386 if (tracer) then 1375 1387 if (water) then 1388 1389 if (scavenging) then 1390 ccntot(:)= 0 1391 do ig=1,ngrid 1392 do l=1,nlayermx 1393 ccntot(ig) = ccntot(ig) + 1394 & zq(ig,l,igcm_ccn_number)*tauscaling(ig) 1395 & *(pplev(ig,l) - pplev(ig,l+1)) / g 1396 enddo 1397 enddo 1398 endif 1376 1399 1377 1400 mtot(:)=0 … … 1420 1443 call wstats(ngrid,"ps","Surface pressure","Pa",2,ps) 1421 1444 call wstats(ngrid,"tsurf","Surface temperature","K",2,tsurf) 1422 call wstats(ngrid,"co2ice","CO2 ice cover",1423 & "kg.m-2",2,co2ice)1424 call wstats(ngrid,"fluxsurf_lw",1425 & "Thermal IR radiative flux to surface","W.m-2",2,1426 & fluxsurf_lw)1427 call wstats(ngrid,"fluxsurf_sw",1428 & "Solar radiative flux to surface","W.m-2",2,1429 & fluxsurf_sw_tot)1430 call wstats(ngrid,"fluxtop_lw",1431 & "Thermal IR radiative flux to space","W.m-2",2,1432 & fluxtop_lw)1433 call wstats(ngrid,"fluxtop_sw",1434 & "Solar radiative flux to space","W.m-2",2,1435 & fluxtop_sw_tot)1436 call wstats(ngrid,"temp","Atmospheric temperature","K",3,zt)1437 call wstats(ngrid,"u","Zonal (East-West) wind","m.s-1",3,zu)1438 call wstats(ngrid,"v","Meridional (North-South) wind",1439 & "m.s-1",3,zv)1440 call wstats(ngrid,"w","Vertical (down-up) wind",1441 & "m.s-1",3,pw)1442 call wstats(ngrid,"rho","Atmospheric density","none",3,rho)1443 call wstats(ngrid,"pressure","Pressure","Pa",3,pplay)1445 c call wstats(ngrid,"co2ice","CO2 ice cover", 1446 c & "kg.m-2",2,co2ice) 1447 c call wstats(ngrid,"fluxsurf_lw", 1448 c & "Thermal IR radiative flux to surface","W.m-2",2, 1449 c & fluxsurf_lw) 1450 c call wstats(ngrid,"fluxsurf_sw", 1451 c & "Solar radiative flux to surface","W.m-2",2, 1452 c & fluxsurf_sw_tot) 1453 c call wstats(ngrid,"fluxtop_lw", 1454 c & "Thermal IR radiative flux to space","W.m-2",2, 1455 c & fluxtop_lw) 1456 c call wstats(ngrid,"fluxtop_sw", 1457 c & "Solar radiative flux to space","W.m-2",2, 1458 c & fluxtop_sw_tot) 1459 c call wstats(ngrid,"temp","Atmospheric temperature","K",3,zt) 1460 c call wstats(ngrid,"u","Zonal (East-West) wind","m.s-1",3,zu) 1461 c call wstats(ngrid,"v","Meridional (North-South) wind", 1462 c & "m.s-1",3,zv) 1463 c call wstats(ngrid,"w","Vertical (down-up) wind", 1464 c & "m.s-1",3,pw) 1465 c call wstats(ngrid,"rho","Atmospheric density","none",3,rho) 1466 c call wstats(ngrid,"pressure","Pressure","Pa",3,pplay) 1444 1467 c call wstats(ngrid,"q2", 1445 1468 c & "Boundary layer eddy kinetic energy", … … 1456 1479 if (tracer) then 1457 1480 if (water) then 1458 cvmr=zq(1:ngridmx,1:nlayermx,igcm_h2o_vap)1459 c& *mugaz/mmol(igcm_h2o_vap)1460 ccall wstats(ngrid,"vmr_h2ovapor",1461 c& "H2O vapor volume mixing ratio","mol/mol",1462 c& 3,vmr)1463 cvmr=zq(1:ngridmx,1:nlayermx,igcm_h2o_ice)1464 c& *mugaz/mmol(igcm_h2o_ice)1465 ccall wstats(ngrid,"vmr_h2oice",1466 c& "H2O ice volume mixing ratio","mol/mol",1467 c& 3,vmr)1481 vmr=zq(1:ngridmx,1:nlayermx,igcm_h2o_vap) 1482 & *mugaz/mmol(igcm_h2o_vap) 1483 call wstats(ngrid,"vmr_h2ovapor", 1484 & "H2O vapor volume mixing ratio","mol/mol", 1485 & 3,vmr) 1486 vmr=zq(1:ngridmx,1:nlayermx,igcm_h2o_ice) 1487 & *mugaz/mmol(igcm_h2o_ice) 1488 call wstats(ngrid,"vmr_h2oice", 1489 & "H2O ice volume mixing ratio","mol/mol", 1490 & 3,vmr) 1468 1491 call wstats(ngrid,"h2o_ice_s", 1469 1492 & "surface h2o_ice","kg/m2", 1470 1493 & 2,qsurf(1,igcm_h2o_ice)) 1471 ccall wstats(ngrid,'albedo',1472 c& 'albedo',1473 c& '',2,albedo(1:ngridmx,1))1494 call wstats(ngrid,'albedo', 1495 & 'albedo', 1496 & '',2,albedo(1:ngridmx,1)) 1474 1497 call wstats(ngrid,"mtot", 1475 1498 & "total mass of water vapor","kg/m2", … … 1478 1501 & "total mass of water ice","kg/m2", 1479 1502 & 2,icetot) 1480 c call wstats(ngrid,"reffice", 1481 c & "Mean reff","m", 1482 c & 2,rave) 1483 c call wstats(ngrid,"rice", 1484 c & "Ice particle size","m", 1485 c & 3,rice) 1486 c If activice is true, tauTES is computed in aeropacity.F; 1503 call wstats(ngrid,"reffice", 1504 & "Mean reff","m", 1505 & 2,rave) 1506 call wstats(ngrid,"ccntot", 1507 & "condensation nuclei","Nbr/m2", 1508 & 2,ccntot) 1509 call wstats(ngrid,"rice", 1510 & "Ice particle size","m", 1511 & 3,rice) 1487 1512 if (.not.activice) then 1488 1513 call wstats(ngrid,"tauTESap", 1489 1514 & "tau abs 825 cm-1","", 1490 1515 & 2,tauTES) 1516 else 1517 call wstats(ngridmx,'tauTES', 1518 & 'tau abs 825 cm-1', 1519 & '',2,taucloudtes) 1491 1520 endif 1492 1521 … … 1495 1524 if (thermochem.or.photochem) then 1496 1525 do iq=1,nq 1497 if (noms(iq) .ne. "dust_mass" .and. 1498 $ noms(iq) .ne. "dust_number" .and. 1499 $ noms(iq) .ne. "ccn_mass" .and. 1500 $ noms(iq) .ne. "ccn_number") then 1501 do l=1,nlayer 1502 do ig=1,ngrid 1503 vmr(ig,l)=zq(ig,l,iq)*mmean(ig,l)/mmol(iq) 1504 end do 1505 end do 1506 call wstats(ngrid,"vmr_"//trim(noms(iq)), 1507 $ "Volume mixing ratio","mol/mol",3,vmr) 1508 if ((noms(iq).eq."o") .or. (noms(iq).eq."co2").or. 1509 $ (noms(iq).eq."o3")) then 1510 call writediagfi(ngrid,"vmr_"//trim(noms(iq)), 1511 $ "Volume mixing ratio","mol/mol",3,vmr) 1512 end if 1513 do ig = 1,ngrid 1514 colden(ig,iq) = 0. 1515 end do 1516 do l=1,nlayer 1517 do ig=1,ngrid 1518 colden(ig,iq) = colden(ig,iq) + zq(ig,l,iq) 1519 $ *(pplev(ig,l)-pplev(ig,l+1)) 1520 $ *6.022e22/(mmol(iq)*g) 1521 end do 1522 end do 1523 call wstats(ngrid,"c_"//trim(noms(iq)), 1524 $ "column","mol cm-2",2,colden(1,iq)) 1525 call writediagfi(ngrid,"c_"//trim(noms(iq)), 1526 $ "column","mol cm-2",2,colden(1,iq)) 1527 end if 1526 if ((noms(iq).eq."o").or.(noms(iq).eq."co2").or. 1527 . (noms(iq).eq."co").or.(noms(iq).eq."n2").or. 1528 . (noms(iq).eq."h2").or. 1529 . (noms(iq).eq."o3")) then 1530 do l=1,nlayer 1531 do ig=1,ngrid 1532 vmr(ig,l)=zq(ig,l,iq)*mmean(ig,l)/mmol(iq) 1533 end do 1534 end do 1535 call wstats(ngrid,"vmr_"//trim(noms(iq)), 1536 . "Volume mixing ratio","mol/mol",3,vmr) 1537 endif 1538 ! do ig = 1,ngrid 1539 ! colden(ig,iq) = 0. !FL 1540 ! end do 1541 ! do l=1,nlayer !FL 1542 ! do ig=1,ngrid !FL 1543 ! colden(ig,iq) = colden(ig,iq) + zq(ig,l,iq) !FL 1544 ! $ *(pplev(ig,l)-pplev(ig,l+1)) !FL 1545 ! $ *6.022e22/(mmol(iq)*g) !FL 1546 ! end do !FL 1547 ! end do !FL 1548 ! call wstats(ngrid,"c_"//trim(noms(iq)), !FL 1549 ! $ "column","mol cm-2",2,colden(1,iq)) !FL 1528 1550 end do 1529 1551 end if ! of if (thermochem.or.photochem) … … 1583 1605 c call WRITEDIAGFI(ngrid,"emis","Surface emissivity","w.m-1",2, 1584 1606 c & emis) 1585 call WRITEDIAGFI(ngrid,"pplay","Pressure","Pa",3,zplay)1586 !call WRITEDIAGFI(ngrid,"pplev","Pressure","Pa",3,zplev)1607 c call WRITEDIAGFI(ngrid,"pplay","Pressure","Pa",3,zplay) 1608 c call WRITEDIAGFI(ngrid,"pplev","Pressure","Pa",3,zplev) 1587 1609 call WRITEDIAGFI(ngrid,"tsurf","Surface temperature","K",2, 1588 1610 & tsurf) … … 1601 1623 c call WRITEDIAGFI(ngrid,"fluxtop_sw","fluxtop_sw","W.m-2",2, 1602 1624 c & fluxtop_sw_tot) 1603 call WRITEDIAGFI(ngrid,"temp","temperature","K",3,zt)1604 call WRITEDIAGFI(ngrid,"u","Zonal wind","m.s-1",3,zu)1605 call WRITEDIAGFI(ngrid,"v","Meridional wind","m.s-1",3,zv)1606 call WRITEDIAGFI(ngrid,"w","Vertical wind","m.s-1",3,pw)1607 call WRITEDIAGFI(ngrid,"rho","density","none",3,rho)1625 c call WRITEDIAGFI(ngrid,"temp","temperature","K",3,zt) 1626 c call WRITEDIAGFI(ngrid,"u","Zonal wind","m.s-1",3,zu) 1627 c call WRITEDIAGFI(ngrid,"v","Meridional wind","m.s-1",3,zv) 1628 c call WRITEDIAGFI(ngrid,"w","Vertical wind","m.s-1",3,pw) 1629 c call WRITEDIAGFI(ngrid,"rho","density","none",3,rho) 1608 1630 c call WRITEDIAGFI(ngrid,"q2","q2","kg.m-3",3,q2) 1609 !call WRITEDIAGFI(ngrid,'Teta','T potentielle','K',3,zh)1631 c call WRITEDIAGFI(ngrid,'Teta','T potentielle','K',3,zh) 1610 1632 c call WRITEDIAGFI(ngrid,"pressure","Pressure","Pa",3,pplay) 1611 1633 c call WRITEDIAGFI(ngrid,"ssurf","Surface stress","N.m-2",2, … … 1615 1637 c call WRITEDIAGFI(ngridmx,'lw_htrt','lw heat. rate', 1616 1638 c & 'w.m-2',3,zdtlw) 1617 c CALL WRITEDIAGFI(ngridmx,'tauTESap', 1618 c & 'tau abs 825 cm-1', 1619 c & '',2,tauTES) 1639 if (.not.activice) then 1640 CALL WRITEDIAGFI(ngridmx,'tauTESap', 1641 & 'tau abs 825 cm-1', 1642 & '',2,tauTES) 1643 else 1644 CALL WRITEDIAGFI(ngridmx,'tauTES', 1645 & 'tau abs 825 cm-1', 1646 & '',2,taucloudtes) 1647 endif 1620 1648 1621 1649 #ifdef MESOINI … … 1650 1678 call WRITEDIAGFI(ngrid,"co2col","CO2 column","kg.m-2",2, 1651 1679 & co2col) 1680 !!!!! FL 1681 ! do iq = 1,nq 1682 ! if (noms(iq) .ne. "dust_mass" .and. 1683 ! $ noms(iq) .ne. "dust_number") then 1684 ! call writediagfi(ngrid,"c_"//trim(noms(iq)), 1685 ! $ "column","mol cm-2",2,colden(1,iq)) 1686 ! end if 1687 ! end do 1688 !!!!! FL 1652 1689 endif ! of if (tracer.and.(igcm_co2.ne.0)) 1653 1690 … … 1671 1708 & 'kg.m-2',2, 1672 1709 & qsurf(1:ngridmx,igcm_h2o_ice)) 1673 if (photochem) then1674 do iq = 1,nq1675 call writediagfi( ngrid,trim(noms(iq)),1676 $ 'mix rat','units',1677 $ 3,zq(1:ngridmx,1:nlayermx,iq) )1678 enddo1679 endif1680 1710 #endif 1681 1711 … … 1697 1727 c & 'Mean reff', 1698 1728 c & 'm',2,rave) 1729 c CALL WRITEDIAGFI(ngrid,"ccntot", 1730 c & "condensation nuclei","Nbr/m2", 1731 c & 2,ccntot) 1699 1732 c call WRITEDIAGFI(ngridmx,'rice','Ice particle size', 1700 1733 c & 'm',3,rice) 1701 c If activice is true, tauTES is computed in aeropacity.F;1702 if (.not.activice) then1703 CALL WRITEDIAGFI(ngridmx,'tauTESap',1704 & 'tau abs 825 cm-1',1705 & '',2,tauTES)1706 endif1707 1734 call WRITEDIAGFI(ngridmx,'h2o_ice_s', 1708 1735 & 'surface h2o_ice', 1709 1736 & 'kg.m-2',2,qsurf(1,igcm_h2o_ice)) 1710 1737 1711 if (caps) then1712 do ig=1,ngridmx1713 if (watercaptag(ig)) watercapflag(ig) = 11714 enddo1738 c if (caps) then 1739 c do ig=1,ngridmx 1740 c if (watercaptag(ig)) watercapflag(ig) = 1 1741 c enddo 1715 1742 c CALL WRITEDIAGFI(ngridmx,'watercaptag', 1716 c & 'Ice water caps',1717 c & '',2,watercapflag)1718 endif1743 c & 'Ice water caps', 1744 c & '',2,watercapflag) 1745 cs endif 1719 1746 c CALL WRITEDIAGFI(ngridmx,'albedo', 1720 1747 c & 'albedo', … … 1761 1788 c call WRITEDIAGFI(ngridmx,'reffdust','reffdust', 1762 1789 c & 'm',3,rdust*ref_r0) 1763 c call WRITEDIAGFI(ngridmx,'rdust','rdust',1764 c & 'm',3,rdust)1765 1790 c call WRITEDIAGFI(ngridmx,'dustq','Dust mass mr', 1766 1791 c & 'kg/kg',3,pq(1,1,igcm_dust_mass)) … … 1768 1793 c & 'part/kg',3,pq(1,1,igcm_dust_number)) 1769 1794 #ifdef MESOINI 1770 call WRITEDIAGFI(ngridmx,'dustq','Dust mass mr',1771 & 'kg/kg',3,pq(1:ngridmx,1:nlayermx,igcm_dust_mass))1772 1795 call WRITEDIAGFI(ngridmx,'dustN','Dust number', 1773 & 'part/kg',3,pq(1:ngridmx,1:nlayermx,igcm_dust_number))1796 & 'part/kg',3,pq(1,1,igcm_dust_number)) 1774 1797 #endif 1775 1798 else … … 1784 1807 1785 1808 if (scavenging) then 1786 call WRITEDIAGFI(ngridmx,'ccnq','CCN mass mr',1787 & 'kg/kg',3,pq(1,1,igcm_ccn_mass))1788 call WRITEDIAGFI(ngridmx,'ccnN','CCN number',1789 & 'part/kg',3,pq(1,1,igcm_ccn_number))1809 c call WRITEDIAGFI(ngridmx,'ccnq','CCN mass mr', 1810 c & 'kg/kg',3,pq(1,1,igcm_ccn_mass)) 1811 c call WRITEDIAGFI(ngridmx,'ccnN','CCN number', 1812 c & 'part/kg',3,pq(1,1,igcm_ccn_number)) 1790 1813 endif ! (scavenging) 1791 1814 … … 1810 1833 z_out=0. 1811 1834 if (calltherm .and. (z_out .gt. 0.)) then 1812 1813 call pbl_parameters(ngrid,nlayer,z0, 1814 & g,zzlay,zu,zv,wstar,hfmax_th,zmax_th,tsurf,zh,z_out, 1815 & Teta_out,u_out,ustar,tstar,wstarpbl,L_mo,vhf,vvv) 1816 1835 call surflayer_interpol(ngrid,nlayer,z0,g,zzlay,zu,zv,wmax_th 1836 & ,tsurf,zh,z_out,Teta_out,u_out,ustar,tstar,L_mo) 1837 1838 zu2(:)=sqrt(zu(:,1)*zu(:,1)+zv(:,1)*zv(:,1)) 1839 call WRITEDIAGFI(ngridmx,'sqrt(zu2)', 1840 & 'horizontal velocity norm','m/s', 1841 & 2,zu2) 1842 1843 call WRITEDIAGFI(ngridmx,'Teta_out', 1844 & 'potential temperature at z_out','K', 1845 & 2,Teta_out) 1846 call WRITEDIAGFI(ngridmx,'u_out', 1847 & 'horizontal velocity norm at z_out','m/s', 1848 & 2,u_out) 1849 call WRITEDIAGFI(ngridmx,'u*', 1850 & 'friction velocity','m/s', 1851 & 2,ustar) 1852 call WRITEDIAGFI(ngridmx,'teta*', 1853 & 'friction potential temperature','K', 1854 & 2,tstar) 1855 call WRITEDIAGFI(ngrid,'L', 1856 & 'Monin Obukhov length','m', 1857 & 2,L_mo) 1817 1858 else 1818 1859 if((.not. calltherm).and.(z_out .gt. 0.)) then … … 1851 1892 & 'maximum TH heat flux','K.m/s', 1852 1893 & 2,hfmax_th) 1853 call WRITEDIAGFI(ngridmx,'w star',1894 call WRITEDIAGFI(ngridmx,'wmax_th', 1854 1895 & 'maximum TH vertical velocity','m/s', 1855 & 2,w star)1896 & 2,wmax_th) 1856 1897 1857 1898 endif … … 1903 1944 z_out=0. 1904 1945 if (calltherm .and. (z_out .gt. 0.)) then 1905 1906 call pbl_parameters(ngrid,nlayer,z0, 1907 & g,zzlay,zu,zv,wstar,hfmax_th,zmax_th,tsurf,zh,z_out, 1908 & Teta_out,u_out,ustar,tstar,wstarpbl,L_mo,vhf,vvv) 1909 1946 call surflayer_interpol(ngrid,nlayer,z0,g,zzlay,zu,zv,wmax_th 1947 & ,tsurf,zh,z_out,Teta_out,u_out,ustar,tstar,L_mo) 1948 1949 zu2(:)=sqrt(zu(:,1)*zu(:,1)+zv(:,1)*zv(:,1)) 1950 call WRITEDIAGFI(ngridmx,'sqrt(zu2)', 1951 & 'horizontal velocity norm','m/s', 1952 & 0,zu2) 1953 1954 call WRITEDIAGFI(ngridmx,'Teta_out', 1955 & 'potential temperature at z_out','K', 1956 & 0,Teta_out) 1957 call WRITEDIAGFI(ngridmx,'u_out', 1958 & 'horizontal velocity norm at z_out','m/s', 1959 & 0,u_out) 1960 call WRITEDIAGFI(ngridmx,'u*', 1961 & 'friction velocity','m/s', 1962 & 0,ustar) 1963 call WRITEDIAGFI(ngridmx,'teta*', 1964 & 'friction potential temperature','K', 1965 & 0,tstar) 1910 1966 else 1911 1967 if((.not. calltherm).and.(z_out .gt. 0.)) then … … 1921 1977 & 'hauteur du thermique','point', 1922 1978 & 0,lmax_th_out) 1923 call WRITEDIAGFI(ngridmx,'zmax_th',1924 & 'hauteur du thermique','m',1925 & 0,zmax_th)1926 1979 call WRITEDIAGFI(ngridmx,'hfmax_th', 1927 1980 & 'maximum TH heat flux','K.m/s', 1928 1981 & 0,hfmax_th) 1929 call WRITEDIAGFI(ngridmx,'w star',1982 call WRITEDIAGFI(ngridmx,'wmax_th', 1930 1983 & 'maximum TH vertical velocity','m/s', 1931 & 0,w star)1984 & 0,wmax_th) 1932 1985 1933 1986 co2col(:)=0. … … 1973 2026 end if 1974 2027 1975 cccccccccccccccccc cccc scavenging outputs 1D TN ccccccccccccccccccc2028 cccccccccccccccccc scavenging & water outputs 1D TN ccccccccccccccc 1976 2029 ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 1977 IF ( scavenging) THEN1978 2030 IF (water) THEN 2031 CALL WRITEDIAGFI(ngridmx,'tauTESap', 1979 2032 & 'tau abs 825 cm-1', 1980 & '', 1,tauTES)2033 & '',0,tauTES) 1981 2034 1982 h2o_tot = qsurf(1,igcm_h2o_ice) 2035 CALL WRITEDIAGFI(ngridmx,'tauTES', 2036 & 'tau abs 825 cm-1', 2037 & '',0,taucloudtes) 2038 2039 mtot = 0 2040 icetot = 0 2041 h2otot = qsurf(1,igcm_h2o_ice) 2042 rave = 0 1983 2043 do l=1,nlayer 1984 h2o_tot = h2o_tot + 1985 & (zq(1,l,igcm_h2o_vap) + zq(1,l,igcm_h2o_ice)) 1986 & * (pplev(1,l) - pplev(1,l+1)) / g 2044 mtot = mtot + zq(1,l,igcm_h2o_vap) 2045 & * (pplev(1,l) - pplev(1,l+1)) / g 2046 icetot = icetot + zq(1,l,igcm_h2o_ice) 2047 & * (pplev(1,l) - pplev(1,l+1)) / g 2048 rave = rave + zq(1,l,igcm_h2o_ice) 2049 & * (pplev(1,l) - pplev(1,l+1)) / g 2050 & * rice(1,l) * (1.+nuice_ref) 1987 2051 end do 2052 rave=rave/max(icetot,1.e-30) 2053 h2otot = h2otot+mtot+icetot 2054 2055 2056 if (scavenging) then 2057 ccntot= 0 2058 call watersat(ngridmx*nlayermx,zt,pplay,zqsat) 2059 do l=1,nlayermx 2060 ccntot = ccntot + 2061 & zq(1,l,igcm_ccn_number)*tauscaling(1) 2062 & *(pplev(1,l) - pplev(1,l+1)) / g 2063 satu(1,l) = zq(1,l,igcm_h2o_vap)/zqsat(1,l) 2064 satu(1,l) = (max(satu(1,l),float(1))-1) 2065 ! & * zq(1,l,igcm_h2o_vap) * 2066 ! & (pplev(1,l) - pplev(1,l+1)) / g 2067 enddo 2068 2069 CALL WRITEDIAGFI(ngridmx,'ccntot', 2070 & 'ccntot', 2071 & 'nbr/m2',0,ccntot) 2072 endif 2073 2074 2075 CALL WRITEDIAGFI(ngridmx,'h2otot', 2076 & 'h2otot', 2077 & 'kg/m2',0,h2otot) 2078 CALL WRITEDIAGFI(ngridmx,'mtot', 2079 & 'mtot', 2080 & 'kg/m2',0,mtot) 2081 CALL WRITEDIAGFI(ngridmx,'icetot', 2082 & 'icetot', 2083 & 'kg/m2',0,icetot) 2084 CALL WRITEDIAGFI(ngridmx,'reffice', 2085 & 'reffice', 2086 & 'm',0,rave) 1988 2087 1989 2088 … … 1994 2093 1995 2094 1996 call WRITEDIAGFI(ngridmx,'dqssedq','sedimentation q',1997 & 'kg.m-2.s-1',0,zdqssed(:,igcm_dust_number))1998 call WRITEDIAGFI(ngridmx,'dqsdif q','diffusion q',1999 & 'kg.m-2.s-1',0,zdqsdif(:,igcm_dust_number))2095 call WRITEDIAGFI(ngridmx,'zdqsed_dustq','sedimentation q', 2096 & 'kg.m-2.s-1',1,zdqsed(1,:,igcm_dust_mass)) 2097 call WRITEDIAGFI(ngridmx,'zdqsed_dustN','sedimentation N', 2098 & 'Nbr.m-2.s-1',1,zdqsed(1,:,igcm_dust_number)) 2000 2099 2001 call WRITEDIAGFI(ngridmx,'dqssed N','sedimentation N', 2002 & 'kg.m-2.s-1',0,zdqssed(:,igcm_dust_number)) 2003 call WRITEDIAGFI(ngridmx,'dqsdif N','diffusion N', 2004 & 'kg.m-2.s-1',0,zdqsdif(:,igcm_dust_number)) 2100 call WRITEDIAGFI(ngridmx,'zdqcloud*dt ice','cloud ice', 2101 & 'kg.m-2.s-1',1,zdqcloud(1,:,igcm_h2o_ice)*ptimestep) 2102 call WRITEDIAGFI(ngridmx,'zdqcloud*dt vap','cloud vap', 2103 & 'kg.m-2.s-1',1,zdqcloud(1,:,igcm_h2o_vap)*ptimestep) 2104 call WRITEDIAGFI(ngridmx,'zdqdif*dt ice','dif ice', 2105 & 'kg.m-2.s-1',1,zdqdif(1,:,igcm_h2o_ice)*ptimestep) 2106 call WRITEDIAGFI(ngridmx,'zdqdif*dt vap','dif vap', 2107 & 'kg.m-2.s-1',1,zdqdif(1,:,igcm_h2o_vap)*ptimestep) 2108 call WRITEDIAGFI(ngridmx,'zdqdif*dt vap 0','dif vap', 2109 & 'kg.m-2.s-1',0,zdqdif(1,1,igcm_h2o_vap)*ptimestep) 2110 2111 ! if (scavenging) then 2112 ! call WRITEDIAGFI(ngridmx,'zdqsed_ccnq','sedimentation q', 2113 ! & 'kg.m-2.s-1',1,zdqsed(1,:,igcm_ccn_mass)) 2114 ! call WRITEDIAGFI(ngridmx,'zdqsed_ccnN','sedimentation N', 2115 ! & 'Nbr.m-2.s-1',1,zdqsed(1,:,igcm_ccn_number)) 2116 ! endif 2117 ! call WRITEDIAGFI(ngridmx,'zdqsed_ice','sedimentation q', 2118 ! & 'kg.m-2.s-1',1,zdqsed(1,:,igcm_h2o_ice)) 2119 ! 2005 2120 2006 2121 call WRITEDIAGFI(ngrid,"rice","ice radius","m",1, 2007 2122 & rice) 2008 ENDIF 2123 call WRITEDIAGFI(ngrid,"satu","vap in satu","kg/kg",1, 2124 & satu) 2125 ENDIF ! of IF (water) 2009 2126 2010 2127 ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -
trunk/LMDZ.MARS/libf/phymars/simpleclouds.F
r420 r520 1 1 subroutine simpleclouds(ngrid,nlay,ptimestep, 2 2 & pplev,pplay,pzlev,pzlay,pt,pdt, 3 & pq,pdq,pdqcloud,pd qscloud,pdtcloud,3 & pq,pdq,pdqcloud,pdtcloud, 4 4 & nq,tau,rice,nuice,rsedcloud) 5 5 implicit none … … 62 62 real pdqcloud(ngrid,nlay,nq) ! tendance de la condensation 63 63 ! H2O(kg/kg.s-1) 64 real pdqscloud(ngrid,nq) ! flux en surface (kg.m-2.s-1)65 64 REAL pdtcloud(ngrid,nlay) ! tendance temperature due 66 65 ! a la chaleur latente … … 141 140 142 141 enddo ! of do ig=1,ngrid 143 enddo ! of dol=1,nlay 144 145 pdqscloud(1:ngrid,1:nq)=0 142 enddo ! of do l=1,nlay 143 146 144 pdqcloud(1:ngrid,1:nlay,1:nq)=0 147 145 pdtcloud(1:ngrid,1:nlay)=0 … … 211 209 c------------------------------------------------------------------ 212 210 c TEST_JBM 213 IF (ngrid.eq.1) THEN214 call WRITEDIAGFI(ngrid,"mcond","h2o condensed mass","kg",1,215 & Mcon_out)216 call WRITEDIAGFI(ngrid,"rdusttyp","rdusttyp","m",1,217 & rdusttyp)218 call WRITEDIAGFI(ngrid,"ccntyp","ccntyp","kg-1",1,219 & ccntyp)220 ENDIF211 ! IF (ngrid.eq.1) THEN 212 ! call WRITEDIAGFI(ngrid,"mcond","h2o condensed mass","kg",1, 213 ! & Mcon_out) 214 ! call WRITEDIAGFI(ngrid,"rdusttyp","rdusttyp","m",1, 215 ! & rdusttyp) 216 ! call WRITEDIAGFI(ngrid,"ccntyp","ccntyp","kg-1",1, 217 ! & ccntyp) 218 ! ENDIF 221 219 c------------------------------------------------------------------ 222 220 return -
trunk/LMDZ.MARS/libf/phymars/surfini.F
r317 r520 1 1 SUBROUTINE surfini(ngrid,piceco2,qsurf,psolaralb) 2 ! to use 'getin' 3 USE ioipsl_getincom 2 4 IMPLICIT NONE 3 5 c======================================================================= … … 20 22 REAL piceco2(ngrid),psolaralb(ngrid,2) 21 23 REAL qsurf(ngrid,nqmx) !tracer on surface (kg/m2) 24 REAL icedryness ! ice dryness 22 25 23 26 EXTERNAL ISMIN,ISMAX 24 27 INTEGER ISMIN,ISMAX 28 29 ! Choose false to have a somewhat non resolution dependant water ice caps distribution, 30 ! i.e based only on lat & lon values of each physical point. 31 ! Choose true to get a carefully choosen distribution for GCM resolutions 32x24 or 64x48 32 ! For vizualisation : soon ... 33 LOGICAL,SAVE :: improvedicelocation = .true. 25 34 c 26 35 c======================================================================= … … 46 55 47 56 alternate = 0 48 49 do ig=1,ngridmx 57 temptag = .true. 58 59 write(*,*) "Ice dryness ?" 60 icedryness=1. ! default value 61 call getin("icedryness",icedryness) 62 write(*,*) " icedryness = ",icedryness 63 50 64 51 65 #ifdef MESOSCALE 66 67 do ig=1,ngridmx 68 52 69 !write(*,*) "all qsurf to zero. dirty." 53 70 do iq=1,nqmx … … 66 83 watercaptag(ig) = .false. 67 84 dryness(ig) = 1. 68 endif 85 endif 86 87 endif 69 88 #else 70 71 dryness (ig) = 1 72 89 ! print*,'ngridmx',ngridmx 90 91 if (improvedicelocation) then 92 93 if (ngridmx .eq. 738) then ! hopefully 32x24 94 print*,'water ice caps distribution for 32x24 resolution:' 95 watercaptag(1:9) = .true. ! central cap - core 96 watercaptag(26:33) = .true. ! central cap 97 98 else if (ngridmx .eq. 3010) then ! hopefully 64x48 99 print*,'water ice caps distribution for 64x48 resolution:' 100 watercaptag(1:65) = .true. ! central cap - core 101 ! watercaptag(85) = .true. ! central cap 102 watercaptag(83:85) = .true. ! central cap - BIGGER 103 watercaptag(93:114) = .true. ! central cap 104 ! watercaptag(254) = .true. ! Korolev crater 105 ! watercaptag(255) = .true. ! Korolev crater --DECALE 106 watercaptag(242:257)= .true. ! Korolev crater -- VERY BIG 107 !-------------------------------------------------------------------- 108 ! watercaptag(136) = .true. ! outlier, lat = 78.75 109 ! watercaptag(138) = .true. ! outlier, lat = 78.75 110 ! watercaptag(140) = .true. ! outlier, lat = 78.75 111 ! watercaptag(142) = .true. ! outlier, lat = 78.75 112 ! watercaptag(183) = .true. ! outlier, lat = 78.75 113 ! watercaptag(185) = .true. ! outlier, lat = 78.75 114 ! watercaptag(187) = .true. ! outlier, lat = 78.75 115 ! watercaptag(189) = .true. ! outlier, lat = 78.75 116 ! watercaptag(191) = .true. ! outlier, lat = 78.75 117 ! watercaptag(193) = .true. ! outlier, lat = 78.75 118 !-------------------------------------------------------------------- 119 watercaptag(135:142)= .true. ! BIG outlier, lat = 78.75 120 watercaptag(181:193)= .true. ! BIG outlier, lat = 78.75 121 122 else if (ngridmx .ne. 1) then 123 print*,'No improved ice location for this resolution!' 124 print*,'Please set improvedicelocation to false in surfini.' 125 print*,'And check lat and lon conditions for ice caps in code.' 126 call exit(1) 127 128 endif 129 130 ! print caps locations 131 print*,'latitude | longitude | ig' 132 do ig=1,ngridmx 133 dryness (ig) = icedryness 134 !!! OU alors tu mets dryness = icedrag sur outliers et 1 ailleurs 135 !!! OU remettre comme c'était avant Aymeric et pis c'est tout 136 if (watercaptag(ig)) then 137 print*,'ice water cap', lati(ig)*180./pi, 138 . long(ig)*180./pi, ig 139 endif 140 enddo 141 142 !!------------------------ test ----------------------------- 143 !!----------------------------------------------------------- 144 !! else if (1) then ! DUMMY !!, CAREFUL !!, TOUT CA .... 145 !! 146 !! do ig=1,ngridmx 147 !! dryness (ig) = 1 148 !! if (albedodat(ig) .ge. 0.35) then 149 !! watercaptag(ig) = .true. 150 !! print*,' albedo criteria ice water cap', lati(ig)*180./pi, 151 !! . long(ig)*180./pi, ig 152 !! endif 153 !! enddo 154 !!----------------------------------------------------------- 155 !!----------------------------------------------------------- 156 157 else 158 159 do ig=1,ngridmx 160 161 dryness (ig) = icedryness 162 73 163 !!c Towards olympia planitia water caps ('relatively' low latitude ones) 74 164 !!c---------------- proposition par AS -------------------- … … 98 188 !! . ( long(ig)*180./pi .ge. 155. ) .and. 99 189 !! . ( long(ig)*180./pi .le. 180. ) ) 100 !! c. .or.101 !! c. ( ( lati(ig)*180./pi .ge. 71. ) .and. ! cap #4 (Korolev crater)102 !! c. ( lati(ig)*180./pi .le. 72. ) .and.103 !! c. ( long(ig)*180./pi .ge. 163. ) .and.104 !! c. ( long(ig)*180./pi .le. 168. ) )190 !! . .or. 191 !! . ( ( lati(ig)*180./pi .ge. 71. ) .and. ! cap #4 (Korolev crater) 192 !! . ( lati(ig)*180./pi .le. 72. ) .and. 193 !! . ( long(ig)*180./pi .ge. 163. ) .and. 194 !! . ( long(ig)*180./pi .le. 168. ) ) 105 195 !! . .or. 106 196 !! . ( ( lati(ig)*180./pi .ge. 74.9 ) .and. ! cap #5 … … 109 199 !! . ( long(ig)*180./pi .le. -120.) ) ) 110 200 !! . then 111 !! 112 !! if (temptag) then 113 !! 114 !! if ((alternate .eq. 0)) then !!! 1/2 en 64x48 sinon trop large en lat 115 !! if (ngridmx.ne.1) watercaptag(ig)=.true. 116 !! write(*,*) "outliers ", lati(ig)*180./pi, 117 !! . long(ig)*180./pi 118 !! !dryness(ig) = 1. 119 !! alternate = 1 120 !! else 121 !! alternate = 0 122 !! endif !end if alternate = 0 123 !! 124 !! else 125 !! 126 !! if (ngridmx.ne.1) watercaptag(ig)=.true. 127 !! write(*,*) "outliers ", lati(ig)*180./pi, 128 !! . long(ig)*180./pi 129 !! 130 !! endif ! end if temptag 131 !! 132 !! endif 133 !! 134 !! 135 !!c Opposite olympia planitia water cap 136 !!c---------------- proposition par AS -------------------- 137 !!c-------------------------------------------------------- 138 !!c if ( ( lati(ig)*180./pi .ge. 82 ) .and. 139 !!c . ( lati(ig)*180./pi .le. 84 ) .and. 140 !!c . ( ( long(ig)*180./pi .gt. -030. ) .and. 141 !!c . ( long(ig)*180./pi .lt. 090. ) ) ) then 142 !!c---------------- proposition par TN -------------------- 143 !!c-------------------------------------------------------- 144 !! if ( ( lati(ig)*180./pi .ge. 80 ) .and. 145 !! . ( lati(ig)*180./pi .le. 84 ) .and. 146 !! . ( ( long(ig)*180./pi .gt. -030. ) .and. 147 !! . ( long(ig)*180./pi .lt. 090. ) ) ) then 148 !! if (ngridmx.ne.1) then 149 !! watercaptag(ig)=.true. 150 !! write(*,*) "central cap add ", lati(ig)*180./pi, 151 !! . long(ig)*180./pi 152 !! endif 153 !! !dryness(ig) = 1. 154 !! endif 201 if ( ( ( lati(ig)*180./pi .ge. 77. ) .and. ! cap #2 202 . ( lati(ig)*180./pi .le. 80. ) .and. 203 . ( long(ig)*180./pi .ge. 110. ) .and. 204 . ( long(ig)*180./pi .le. 181. ) ) 205 . .or. 206 207 . ( ( lati(ig)*180./pi .ge. 75. ) .and. ! cap #4 (Korolev crater) 208 . ( lati(ig)*180./pi .le. 76. ) .and. 209 . ( long(ig)*180./pi .ge. 150. ) .and. 210 . ( long(ig)*180./pi .le. 168. ) ) 211 . .or. 212 . ( ( lati(ig)*180./pi .ge. 77 ) .and. ! cap #5 213 . ( lati(ig)*180./pi .le. 80. ) .and. 214 . ( long(ig)*180./pi .ge. -150.) .and. 215 . ( long(ig)*180./pi .le. -110.) ) ) 216 . then 217 218 if (temptag) then 219 220 if ((alternate .eq. 0)) then ! 1/2 en 64x48 sinon trop large en lat 221 if (ngridmx.ne.1) watercaptag(ig)=.true. 222 ! print*,'ice water cap', lati(ig)*180./pi, 223 ! . long(ig)*180./pi, ig 224 !dryness(ig) = 1. 225 alternate = 1 226 else 227 alternate = 0 228 endif !end if alternate = 0 229 230 else 231 232 ! if (ngridmx.ne.1) watercaptag(ig)=.true. 233 ! write(*,*) "outliers ", lati(ig)*180./pi, 234 ! . long(ig)*180./pi 235 236 endif ! end if temptag 237 238 endif 239 240 241 c Opposite olympia planitia water cap 242 c---------------- proposition par AS -------------------- 243 c-------------------------------------------------------- 244 c if ( ( lati(ig)*180./pi .ge. 82 ) .and. 245 c . ( lati(ig)*180./pi .le. 84 ) .and. 246 c . ( ( long(ig)*180./pi .gt. -030. ) .and. 247 c . ( long(ig)*180./pi .lt. 090. ) ) ) then 248 c---------------- proposition par TN -------------------- 249 c-------------------------------------------------------- 250 if ( ( ( lati(ig)*180./pi .ge. 80 ) .and. 251 . ( lati(ig)*180./pi .le. 84 ) ) 252 . .and. 253 . ( ( long(ig)*180./pi .lt. -95. ) .or. !!! 32x24 254 . ( long(ig)*180./pi .gt. 85. ) ) ) then !!! 32x24 255 ! . ( ( ( long(ig)*180./pi .ge. -29. ) .and. !!! 64x48 256 ! . ( long(ig)*180./pi .le. 90. ) ) .or. !!! 64x48 257 ! . ( ( long(ig)*180./pi .ge. -77. ) .and. !!! 64x48 258 ! . ( long(ig)*180./pi .le. -70. ) ) ) ) then !!! 64x48 259 if (ngridmx.ne.1) then 260 watercaptag(ig)=.true. 261 print*,'ice water cap', lati(ig)*180./pi, 262 . long(ig)*180./pi, ig 263 endif 264 !dryness(ig) = 1. 265 endif 155 266 156 267 c Central cap … … 159 270 160 271 if (lati(ig)*180./pi.gt.84) then 161 PRINT*,'centralcap', lati(ig)*180./pi,162 . long(ig)*180./pi 272 print*,'ice water cap', lati(ig)*180./pi, 273 . long(ig)*180./pi, ig 163 274 if (ngridmx.ne.1) watercaptag(ig)=.true. 164 275 !dryness(ig) = 1. … … 173 284 c endif 174 285 endif ! (lati>80 deg) 286 287 end do ! (ngridmx) 288 289 endif ! of if (improvedicelocation) 175 290 #endif 176 end do ! (ngridmx) 177 291 292 ENDIF ! (caps & water) 178 293 179 294 c =============================================================== … … 210 325 PRINT*,'maximum albedo avec water caps', 211 326 s psolaralb(ISMAX(ngrid,psolaralb,1),1) 327 212 328 ENDIF 213 329 -
trunk/LMDZ.MARS/libf/phymars/testphys1d.F
r358 r520 581 581 $ thermo,qsurf) 582 582 endif 583 watercaptag(ngridmx)=.false. 583 584 c Regarder si le sol est un reservoir de glace d'eau 585 c -------------------------------------------------- 586 watercaptag(ngridmx)=.false. ! Par defaut il n'y pas de glace au sol 587 print *,'Water ice cap on ground ?' 588 call getin("watercaptag",watercaptag) 589 write(*,*) " watercaptag = ",watercaptag 584 590 585 591 -
trunk/LMDZ.MARS/libf/phymars/vdifc.F
r501 r520 661 661 else if (doubleq) then 662 662 do ig=1,ngrid 663 !!! soulevementconstant663 if(co2ice(ig).lt.1) then ! soulevement pas constant 664 664 pdqsdif(ig,igcm_dust_mass) = 665 665 & -alpha_lift(igcm_dust_mass) 666 666 pdqsdif(ig,igcm_dust_number) = 667 & -alpha_lift(igcm_dust_number) 667 & -alpha_lift(igcm_dust_number) 668 end if 668 669 end do 669 670 else if (submicron) then
Note: See TracChangeset
for help on using the changeset viewer.