Changeset 2494 for trunk/LMDZ.MARS/libf/phymars
- Timestamp:
- Apr 7, 2021, 3:16:53 PM (4 years ago)
- Location:
- trunk/LMDZ.MARS/libf/phymars
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/libf/phymars/aeropacity_mod.F
r2449 r2494 10 10 11 11 SUBROUTINE aeropacity(ngrid,nlayer,nq,zday,pplay,pplev,ls, 12 & pq, tauscaling,dust_rad_adjust,tau_pref_scenario,tau_pref_gcm,13 & tau ,taucloudtes,aerosol,dsodust,reffrad,12 & pq,pt,tauscaling,dust_rad_adjust,tau_pref_scenario, 13 & tau_pref_gcm,tau,taucloudtes,aerosol,dsodust,reffrad, 14 14 & QREFvis3d,QREFir3d,omegaREFir3d, 15 15 & totstormfract,clearatm,dsords,dsotop, … … 37 37 use dust_param_mod, only: odpref, freedust 38 38 use dust_scaling_mod, only: compute_dustscaling 39 use density_co2_ice_mod, only: density_co2_ice 39 40 IMPLICIT NONE 40 41 c======================================================================= … … 74 75 ! of the atmospheric layers 75 76 REAL,INTENT(IN) :: pq(ngrid,nlayer,nq) ! tracers 77 REAL,INTENT(IN) :: pt(ngrid,nlayer) !temperature 76 78 REAL,INTENT(OUT) :: tau_pref_scenario(ngrid) ! prescribed dust column 77 79 ! visible opacity at odpref from scenario … … 132 134 REAL topdust0(ngrid) 133 135 136 ! -- CO2 clouds 137 real CLFtotco2 138 real taucloudco2vis(ngrid) 139 real taucloudco2tes(ngrid) 140 real totcloudco2frac(ngrid) ! a mettre en (in) [CM] 141 double precision :: rho_ice_co2 134 142 #ifdef DUSTSTORM 135 143 !! Local dust storms … … 174 182 ! identify scatterers that are dust 175 183 naerdust=0 184 iaerdust(1:naerkind) = 0 185 nqdust(1:nq) = 0 176 186 DO iaer=1,naerkind 177 187 txt=name_iaer(iaer) … … 192 202 ENDIF 193 203 ENDDO 194 195 204 IF (water.AND.activice) THEN 196 205 i_ice=igcm_h2o_ice … … 236 245 !avoid unrealistic values due to constant lifting 237 246 ENDIF 238 239 247 240 248 #ifndef DUSTSTORM … … 488 496 c 1. Initialization 489 497 aerosol(1:ngrid,1:nlayer,iaer) = 0. 490 taucloud vis(1:ngrid) = 0.491 taucloud tes(1:ngrid) = 0.498 taucloudco2vis(1:ngrid) = 0. 499 taucloudco2tes(1:ngrid) = 0. 492 500 c 2. Opacity calculation 493 501 ! NO CLOUDS 494 502 IF (clearsky) THEN 495 aerosol(1:ngrid,1:nlayer,iaer) = 1.e-9503 aerosol(1:ngrid,1:nlayer,iaer) = 1.e-9 496 504 ! CLOUDSs 497 505 ELSE ! else (clearsky) 498 DO ig=1, ngrid 499 DO l=1,nlayer 506 DO ig = 1, ngrid 507 DO l = 1, nlayer 508 call density_co2_ice(dble(pt(ig,l)), rho_ice_co2) 509 500 510 aerosol(ig,l,iaer) = max(1E-20, 501 511 & ( 0.75 * QREFvis3d(ig,l,iaer) / 502 & ( rho_ice * reffrad(ig,l,iaer) ) ) *512 & ( rho_ice_co2 * reffrad(ig,l,iaer) ) ) * 503 513 & pq(ig,l,i_co2ice) * 504 514 & ( pplev(ig,l) - pplev(ig,l+1) ) / g 505 515 & ) 506 taucloudvis(ig) = taucloudvis(ig) + aerosol(ig,l,iaer) 507 taucloudtes(ig) = taucloudtes(ig) + aerosol(ig,l,iaer)* 516 taucloudco2vis(ig) = taucloudco2vis(ig) 517 & + aerosol(ig,l,iaer) 518 taucloudco2tes(ig) = taucloudco2tes(ig) 519 & + aerosol(ig,l,iaer) * 508 520 & QREFir3d(ig,l,iaer) / QREFvis3d(ig,l,iaer) * 509 521 & ( 1.E0 - omegaREFir3d(ig,l,iaer) ) … … 511 523 ENDDO 512 524 ! SUB-GRID SCALE CLOUDS 513 IF (CLFvarying ) THEN525 IF (CLFvaryingCO2) THEN 514 526 DO ig=1, ngrid 515 DO l= 1,nlayer-1516 CLFtot = max(totcloudfrac(ig),0.01)527 DO l= 1, nlayer-1 528 CLFtotco2 = max(totcloudco2frac(ig),0.01) 517 529 aerosol(ig,l,iaer)= 518 & aerosol(ig,l,iaer)/CLFtot 530 & aerosol(ig,l,iaer)/CLFtotco2 519 531 aerosol(ig,l,iaer) = 520 532 & max(aerosol(ig,l,iaer),1.e-9) 521 533 ENDDO 522 534 ENDDO 523 ENDIF ! end (CLFvarying )535 ENDIF ! end (CLFvaryingCO2) 524 536 ENDIF ! end (clearsky) 525 537 -
trunk/LMDZ.MARS/libf/phymars/callradite_mod.F
r2459 r2494 427 427 & rdust,rstormdust,rtopdust,rice,nuice, 428 428 & reffrad,nueffrad, riceco2, nuiceco2, 429 & pq,tauscaling,tau,pplay )429 & pq,tauscaling,tau,pplay, pt) 430 430 c Computing 3D scattering parameters: 431 gVIS3d(:,:,:,:) = 0. 431 432 CALL aeroptproperties(ngrid,nlayer,reffrad,nueffrad, 432 433 & QVISsQREF3d,omegaVIS3d,gVIS3d, … … 436 437 c Computing aerosol optical depth in each layer: 437 438 CALL aeropacity(ngrid,nlayer,nq,zday,pplay,pplev,ls, 438 & pq, tauscaling,dust_rad_adjust,tau_pref_scenario,tau_pref_gcm,439 & tau ,taucloudtes,aerosol,dsodust,reffrad,439 & pq,pt,tauscaling,dust_rad_adjust,tau_pref_scenario, 440 & tau_pref_gcm,tau,taucloudtes,aerosol,dsodust,reffrad, 440 441 & QREFvis3d,QREFir3d,omegaREFir3d, 441 442 & totstormfract,clearatm,dsords,dsotop, 442 443 & alpha_hmons,nohmons, 443 444 & clearsky,totcloudfrac) 444 445 445 c Starting loop on sub-domain 446 446 c ---------------------------- 447 447 zgVIS3d(:,:,:,:) = 0. 448 zfluxd_sw(:,:,:) = 0. 449 zfluxu_sw(:,:,:) = 0. 450 zQVISsQREF3d(:,:,:,:) = 0. 451 zomegaVIS3d(:,:,:,:) = 0. 448 452 DO jd=1,ndomain 449 453 ig0=(jd-1)*ndomainsz … … 479 483 enddo 480 484 enddo 481 485 zplev(:,:) = 0. 482 486 do l=1,nlaylte+1 483 487 do ig = 1,nd … … 485 489 enddo 486 490 enddo 487 491 zdp(:,:) = 0. 492 488 493 do l=1,nlaylte 489 494 do ig = 1,nd … … 494 499 enddo 495 500 enddo 496 501 zaerosol(:,:,:) = 0. 497 502 do n=1,naerkind 498 503 do l=1,nlaylte … … 502 507 enddo 503 508 enddo 504 509 zalbedo(:,:) = 0. 505 510 do j=1,2 506 511 do ig = 1,nd … … 546 551 c 1370 W.m-2 is the solar constant at 1 AU. 547 552 cste_mars=1370./(dist_sol*dist_sol) 548 553 zzdtsw(:,:) = 0. 549 554 call swmain ( nd, nflev, 550 555 S cste_mars, zalbedo, … … 552 557 S zzdtsw, zfluxd_sw, zfluxu_sw, 553 558 & zQVISsQREF3d,zomegaVIS3d,zgVIS3d) 554 555 559 c ------------------------------------------------------------ 556 560 c Un-spliting output variable from sub-domain input variables … … 564 568 enddo 565 569 570 ptlev(:, :) = 0. 566 571 do l=1,nlaylte+1 567 572 do ig = 1,nd … … 588 593 enddo 589 594 endif 590 591 595 c Output for debugging if lwrite=T 592 596 c -------------------------------- -
trunk/LMDZ.MARS/libf/phymars/co2cloud.F90
r2460 r2494 108 108 use tracer_mod, only: igcm_co2, igcm_co2_ice, igcm_dust_mass, igcm_dust_number, igcm_h2o_ice, & 109 109 igcm_ccn_mass, igcm_ccn_number, igcm_ccnco2_mass, igcm_ccnco2_number, rho_dust, & 110 nuiceco2_sed, nuiceco2_ref, r ho_ice_co2, r3n_q, rho_ice, nuice_sed110 nuiceco2_sed, nuiceco2_ref, r3n_q, rho_ice, nuice_sed 111 111 112 112 use newsedim_mod, only: newsedim … … 114 114 use datafile_mod, only: datadir 115 115 116 use improvedCO2clouds_mod, only: improvedCO2clouds , density_co2_ice116 use improvedCO2clouds_mod, only: improvedCO2clouds 117 117 118 118 #ifndef MESOSCALE … … 209 209 dev2, &! 1. / ( sqrt(2.) * sigma_iceco2 ) 210 210 Qext1bins(nbinco2_cld), &! Extinction coefficients for rb_cldco2 radius of CO2 ice particles 211 Qextv1mic(var_dim_qext), & 212 radv(var_dim_qext), & ! radius of CO2 ice at 1 µm (read from file_qext) 211 213 rb_cldco2(nbinco2_cld+1) ! boundary values of each rad_cldco2 bin (m) 212 213 214 logical, save :: & 214 215 firstcall = .true. ! Used to compute saved variables … … 273 274 tau1mic(ngrid), &! CO2 ice column opacity at 1µm 274 275 Qext1bins2(ngrid,nlay), &! CO2 ice opacities 275 radv(var_dim_qext), &! radius of CO2 ice at 1 µm (read from file_qext)276 Qextv1mic(var_dim_qext), &! extinction coefficient of CO2 ice at 1 µm (read from file_qext)277 276 ! ---For Saturation Index computation 278 277 rho, &! background density … … 285 284 ! ---Misc 286 285 myT, &! Temperature scalar for co2 density computation 287 tcond(ngrid,nlay), &! CO2 condensation temperature 288 rho_ice_co2T(ngrid,nlay) ! T-dependant CO2 ice density 286 tcond(ngrid,nlay) ! CO2 condensation temperature 289 287 290 288 logical :: & … … 419 417 epaisseur(1:ngrid,1:nlay) = 0. 420 418 masse(1:ngrid,1:nlay) = 0. 421 419 riceco2(1:ngrid, 1:nlay) = 0. 422 420 zqsed0(1:ngrid,1:nlay,1:nq) = 0. 423 421 sum_subpdqs_sedco2(1:ngrid) = 0. … … 611 609 subpdqcloudco2, subpdtcloudco2, nq, tauscaling, mem_Mccn_co2, mem_Mh2o_co2, mem_Nccn_co2, & 612 610 rb_cldco2, sigma_iceco2, dev2) 611 613 612 do l = 1, nlay 614 613 do ig = 1, ngrid … … 682 681 zqsed(ig,l,:) = pqeff(ig,l,:) + sum_subpdq(ig,l,:) * microtimestep 683 682 684 ! density of co2 ice685 call density_co2_ice(dble(ztsed(ig,l)), rho_ice_co2T(ig,l))686 687 683 ! assure positive value of co2_ice mmr, ccnco2 number, ccnco2 mass 688 684 Niceco2 = max(zqsed(ig,l,igcm_co2_ice), threshold) … … 692 688 ! Get density cloud and co2 ice particle radius 693 689 if (Niceco2.ne.0d0) then 694 call updaterice_microco2(dble(Niceco2), dble(Qccnco2), dble(Nccnco2), tauscaling(ig), riceco2(ig,l), rhocloudco2t(ig,l)) 690 call updaterice_microco2(dble(Niceco2), dble(Qccnco2), dble(Nccnco2), ztsed(ig,l), tauscaling(ig), & 691 riceco2(ig,l), rhocloudco2t(ig,l)) 695 692 else 696 693 riceco2(ig,l) = 0. … … 776 773 pdqs_sedco2(ig) = sum_subpdqs_sedco2(ig) / real(imicroco2) 777 774 end do 778 779 775 ! temperature tendency (T.s-1) 780 776 do l = 1, nlay … … 835 831 myT = pteff(ig,l) + (pdt(ig,l)+pdtcloudco2(ig,l))*ptimestep 836 832 837 ! compute density of co2 ice838 call density_co2_ice(myT, rho_ice_co2T(ig,l))839 840 rho_ice_co2 = rho_ice_co2T(ig,l) ! rho_ice_co2 is shared by tracer_mod and used in updaterice841 842 833 ! Compute particle size 843 call updaterice_microco2(dble(Niceco2), dble(Qccnco2), dble(Nccnco2), tauscaling(ig), riceco2(ig,l), rhocloudco2(ig,l)) 834 call updaterice_microco2(dble(Niceco2), dble(Qccnco2), dble(Nccnco2), myT, tauscaling(ig), riceco2(ig,l), & 835 rhocloudco2(ig,l)) 844 836 845 837 ! Compute opacities -
trunk/LMDZ.MARS/libf/phymars/co2condens_mod4micro.F90
r2456 r2494 302 302 303 303 ! Compute without microphysics 304 diff_zcondicea(1:ngrid, 1:nlayer) = 0. 305 diff_zfallice(1:ngrid) = 0. 304 306 do l =1, nlayer 305 307 do ig = 1, ngrid … … 319 321 320 322 ztcond_2(:,nlayer+1)=ztcond_2(:,nlayer) 321 zfallice_2(:,:) = 0 322 323 zfallice_2(:,:) = 0. 324 zcondicea_2(:,:) = 0. 323 325 do l = nlayer , 1, -1 324 326 do ig = 1, ngrid -
trunk/LMDZ.MARS/libf/phymars/improvedco2clouds_mod.F90
r2456 r2494 7 7 ! Contains subroutines: 8 8 ! - improvedco2clouds_mod: nucleation 9 !10 ! - density_co2_ice: compute density of co2 ice particle11 9 !======================================================================================================================! 12 10 module improvedco2clouds_mod … … 72 70 use tracer_mod, only: igcm_dust_mass, igcm_dust_number, rho_dust, igcm_h2o_ice, igcm_ccn_mass, igcm_ccn_number, & 73 71 nuice_sed, igcm_co2, igcm_co2_ice, igcm_ccnco2_mass, igcm_ccnco2_number, nuiceco2_sed, & 74 rho_ice_co2,nuiceco2_ref72 nuiceco2_ref 75 73 76 74 use conc_mod, only: mmean 77 75 78 76 use datafile_mod, only: datadir 77 78 use density_co2_ice_mod, only: density_co2_ice 79 79 80 80 implicit none … … 211 211 rate(nbinco2_cld), &! nucleation rate 212 212 rateh2o(nbinco2_cld), &! nucleation rate for h2o 213 rho_ice_co2T (ngrid,nlay), &! density of co2 ice213 rho_ice_co2T, &! density of co2 ice Temperature-dependent 214 214 riceco2(ngrid,nlay), &! CO2 ice mean radius (m) 215 215 vrat_cld, &! Volume ratio … … 232 232 firstcall = .false. 233 233 234 ! Volume of a co2 molecule (m3)235 vo1co2 = m0co2 / dble(rho_ice_co2)236 237 234 ! Variance of the ice and CCN distributions 238 235 sigma_ice = sqrt(log(1.+nuice_sed)) … … 287 284 288 285 ! pteff temperature layer; sum_subpdt dT.s-1 286 zt(1:ngrid,1:nlay) = 0. 289 287 zt(:,:) = pteff(:,:) + sum_subpdt(:,:) * microtimestep 290 288 … … 294 292 295 293 zq0(:,:,:) = zq(:,:,:) 294 zqsat(:,:) = 0. 296 295 !----------------------------------------------------------------------------------------------------------------------! 297 296 ! 2. Compute saturation … … 338 337 339 338 !T-dependant CO2 ice density 340 call density_co2_ice(dble(zt(ig,l)), rho_ice_co2T(ig,l)) 341 342 vo2co2 = m0co2 / dble(rho_ice_co2T(ig,l)) 343 rho_ice_co2 = rho_ice_co2T(ig,l) 339 call density_co2_ice(dble(zt(ig,l)), rho_ice_co2T) 340 341 vo2co2 = m0co2 / rho_ice_co2T 344 342 !----------------------------------------------------------------------------------------------------------------------! 345 343 ! 4.1 Nucleation … … 421 419 ! Call to nucleation routine 422 420 call nucleaCO2(dble(pco2), zt(ig,l), dble(satu), n_aer, rate, n_aer_h2oice, rad_h2oice, rateh2o, vo2co2) 421 423 422 dN = 0. 424 423 dM = 0. … … 492 491 if (zq(ig,l,igcm_ccnco2_number) * tauscaling(ig) + threshold >= 1) then 493 492 494 call updaterice_microco2(dble(zq(ig,l,igcm_co2_ice)), dble(zq(ig,l,igcm_ccnco2_mass)), dble(zq(ig,l,igcm_ccnco2_number)),&495 tauscaling(ig), riceco2(ig,l), rhocloudco2(ig,l))496 493 call updaterice_microco2(dble(zq(ig,l,igcm_co2_ice)), dble(zq(ig,l,igcm_ccnco2_mass)), & 494 dble(zq(ig,l,igcm_ccnco2_number)), zt(ig,l), tauscaling(ig), riceco2(ig,l), & 495 rhocloudco2(ig,l)) 497 496 Ic_rice = 0. 498 497 … … 594 593 end subroutine improvedCO2clouds 595 594 596 597 !**********************************************************************************************************************!598 !**********************************************************************************************************************!599 600 601 !======================================================================================================================!602 ! SUBROUTINE: density_co2_ice =========================================================================================!603 !======================================================================================================================!604 ! Subject:605 !---------606 ! Compute co2 ice particles density607 !======================================================================================================================!608 subroutine density_co2_ice(temperature, density)609 610 implicit none611 612 double precision, intent(in) :: &613 temperature614 615 double precision, intent(out) :: &616 density617 618 density = 1000. * (1.72391 - 2.53e-4*temperature - 2.87e-6*temperature*temperature)619 620 end subroutine density_co2_ice621 622 595 end module improvedCO2clouds_mod 623 596 -
trunk/LMDZ.MARS/libf/phymars/initracer.F
r2463 r2494 497 497 ! of the water-ice size distribution 498 498 499 nuiceco2_ref=0.2 !C.M. Effective variance nueff of the 500 ! co2-ice size distribution 499 501 if (doubleq) then 500 502 c "doubleq" technique -
trunk/LMDZ.MARS/libf/phymars/phyredem.F90
r2417 r2494 302 302 endif ! of if (txt.eq."hdo_vap") 303 303 304 ! co2_ice has been added to co2ice in co2condens4micro 305 if (txt.eq."co2_ice") then 306 write(*,*)"physdem1: skipping co2_ice tracer" 307 cycle 308 end if 309 304 310 call put_field(trim(txt),"tracer on surface",qsurf(:,iq),time) 305 311 enddo … … 317 323 call put_field("dv_nonoro_gwd","Meridional wind tendency due to GW",dv_nonoro_gwd,time) 318 324 endif 325 319 326 ! Close file 320 327 call close_restartphy -
trunk/LMDZ.MARS/libf/phymars/physiq_mod.F
r2491 r2494 1320 1320 1321 1321 c Calling vdif (Martian version WITH CO2 condensation) 1322 dwatercap_dif(:) = 0. 1323 zcdh(:) = 0. 1324 zcdv(:) = 0. 1322 1325 CALL vdifc(ngrid,nlayer,nq,co2ice,zpopsk, 1323 1326 $ ptimestep,capcal,lwrite, … … 1640 1643 1641 1644 c Temperature variation due to latent heat release 1642 c if (activice) then !Maybe create activice_co2 ?1643 1645 pdt(1:ngrid,1:nlayer) = 1644 1646 & pdt(1:ngrid,1:nlayer) + 1645 1647 & zdtcloudco2(1:ngrid,1:nlayer)! --> in co2condens 1646 c endif1647 1648 1648 1649 … … 1942 1943 $ zdqssed_co2,zcondicea_co2microp, 1943 1944 & zdtcloudco2) 1945 ! no scavenging yet 1946 zdqsc(:,:) = 0. 1944 1947 else 1945 1948 CALL co2condens(ngrid,nlayer,nq,ptimestep, … … 2810 2813 c WRITEDIAGFI can ALSO be called from any other subroutines 2811 2814 c for any variables !! 2812 ccall WRITEDIAGFI(ngrid,"emis","Surface emissivity","w.m-1",2,2813 c& emis)2815 call WRITEDIAGFI(ngrid,"emis","Surface emissivity","w.m-1",2, 2816 & emis) 2814 2817 c call WRITEDIAGFI(ngrid,"pplay","Pressure","Pa",3,zplay) 2815 2818 c call WRITEDIAGFI(ngrid,"pplev","Pressure","Pa",3,zplev) … … 3346 3349 call WRITEDIAGFI(ngrid,"q15um","15 um cooling","K/s", 3347 3350 $ 3,zdtnlte) 3348 call WRITEDIAGFI(ngrid,"quv","UV heating","K/s",3349 $ 3,zdteuv)3350 call WRITEDIAGFI(ngrid,"cond","Thermal conduction","K/s",3351 $ 3,zdtconduc)3352 3351 call WRITEDIAGFI(ngrid,"qnir","NIR heating","K/s", 3353 3352 $ 3,zdtnirco2) … … 3486 3485 endif 3487 3486 3488 c CALL writeg1d(ngrid,nlayer,zt,'temp','K')3489 c CALL writeg1d(ngrid,nlayer,riceco2,'riceco2','m')3490 c CALL writeg1d(ngrid,nlayer,satuco2,'satuco2','satu')3491 3492 3493 c call WRITEDIAGFI(ngrid,"satuco2","vap in satu","kg/kg",1,3494 c & satuco2)3495 c call WRITEDIAGFI(ngrid,"riceco2","ice radius","m"3496 c & ,1,riceco2)3497 ! or output in diagfi.nc (for testphys1d)3498 3487 call WRITEDIAGFI(ngrid,'ps','Surface pressure','Pa',0,ps) 3499 3488 call WRITEDIAGFI(ngrid,'temp','Temperature ', -
trunk/LMDZ.MARS/libf/phymars/suaer.F90
r2447 r2494 164 164 longrefvis(iaer) = 0.67E-6 ! 1.5um OMEGA/MEx 165 165 ! Reference wavelength in the infrared: 166 longrefir(iaer) = 1E-6 ! 1 micron a vérifier si on prends cette valeur166 longrefir(iaer) = 4.26E-6 ! 2347 cm-1 OMEGA/MEx 167 167 !================================================================== 168 168 CASE("stormdust_doubleq") aerkind ! Two-moment scheme for stormdust - radiative properties -
trunk/LMDZ.MARS/libf/phymars/updaterad.F90
r1996 r2494 100 100 !============================================================================ 101 101 !============================================================================ 102 103 subroutine updaterice_microco2(qice,qccn,nccn,coeff,rice,rhocloudco2) 104 use tracer_mod, only: rho_dust, rho_ice_co2 105 USE comcstfi_h, only: pi 102 subroutine updaterice_microco2(qice, qccn, nccn, temperature, coeff, rice, rhocloudco2) 103 use tracer_mod, only: rho_dust 104 use comcstfi_h, only: pi 105 use density_co2_ice_mod, only: density_co2_ice 106 106 107 implicit none 107 108 !CO2 clouds parameter update by CL and JA 09/16 … … 109 110 DOUBLE PRECISION, intent(in) :: qice,qccn,nccn 110 111 real, intent(in) :: coeff ! this coeff is tauscaling if microphy = T (possibly ccn_factor^-1 otherwise) 112 real, intent(in) :: temperature ! temperature effective for density co2_ice computation 111 113 real, intent(out) :: rhocloudco2 ! rhocloud is needed for sedimentation and is also a good diagnostic variable 112 114 double precision, intent(out) :: rice 113 115 real nccn_true,qccn_true ! nombre et masse de CCN 114 116 double precision :: rho_ice_co2T ! density co2_ice Temperature-dependent 117 115 118 nccn_true = max(nccn * coeff, 1.e-30) 116 119 qccn_true = max(qccn * coeff, 1.e-30) 117 120 118 119 rhocloudco2 = (qice *rho_ice_co2 + qccn_true*rho_dust) / (qice + qccn_true) 120 121 rhocloudco2 = min(max(rhocloudco2,rho_ice_co2),rho_dust) 122 123 rice = (qice + qccn_true) * 0.75 / pi / rhocloudco2 / nccn_true 124 125 if (rice .le. r3iceco2min) then !r3icemin radius power 3 ? 126 rice = riceco2min 127 else if (rice .ge. r3iceco2max) then !r3icemin radius power 3 ? 128 rice = riceco2max 129 else 130 rice = rice**(1./3.) ! here rice is always positive 131 endif 121 call density_co2_ice(dble(temperature), rho_ice_co2T) 122 123 rhocloudco2 = (qice * rho_ice_co2T + qccn_true*rho_dust) / (qice + qccn_true) 124 125 rhocloudco2 = min(max(rhocloudco2,rho_ice_co2T), rho_dust) 126 127 rice = (qice + qccn_true) * 0.75 / pi / rhocloudco2 / nccn_true 128 129 rhocloudco2 = (qice * rho_ice_co2T + qccn_true*rho_dust) / (qice + qccn_true) 130 131 if (rice .le. r3iceco2min) then !r3icemin radius power 3 ? 132 rice = riceco2min 133 else if (rice .ge. r3iceco2max) then !r3icemin radius power 3 ? 134 rice = riceco2max 135 else 136 rice = rice**(1./3.) ! here rice is always positive 137 endif 132 138 133 139 -
trunk/LMDZ.MARS/libf/phymars/updatereffrad_mod.F
r2459 r2494 8 8 & rdust,rstormdust,rtopdust,rice,nuice, 9 9 & reffrad,nueffrad, riceco2, nuiceco2, 10 & pq,tauscaling,tau,pplay )10 & pq,tauscaling,tau,pplay, pt) 11 11 USE updaterad, ONLY: updaterdust, updaterice_micro, 12 12 & updaterice_microco2, updaterice_typ … … 18 18 & ref_r0, igcm_dust_submicron, 19 19 & igcm_stormdust_mass,igcm_stormdust_number, 20 & igcm_topdust_mass,igcm_topdust_number 20 & igcm_topdust_mass,igcm_topdust_number, 21 & rho_ice 21 22 USE dimradmars_mod, only: nueffdust,naerkind, 22 23 & name_iaer, … … 73 74 double precision, INTENT(out) :: riceco2(ngrid,nlayer) ! co2 ice radius 74 75 REAL, INTENT(out) :: nuiceco2(ngrid,nlayer) 75 76 REAL, INTENT(in) :: pt(ngrid,nlayer) ! temperature 76 77 77 78 c Local variables: … … 185 186 186 187 187 c 1.3 CO2-ice particles --- in progress..... 188 c ----------------------- j'ai juste copié-collé la partie 1.2 188 c 1.3 CO2-ice particles 189 189 190 190 IF (co2clouds.AND.activeco2ice) THEN 191 192 c At firstcall, the true number and true mass of cloud condensation nuclei are not known.193 c Indeed it is scaled on the prescribed dust opacity via a 'tauscaling' coefficient194 c computed after radiative transfer. If tauscaling is not in startfi, we make an assumption for its value.195 196 IF (firstcall) THEN197 !IF (minval(tauscaling).lt.0) tauscaling(:) = 1.e-3 ! default value when non-read in startfi is -1198 !IF (freedust) tauscaling(:) = 1. ! if freedust, enforce no rescaling at all199 firstcall = .false.200 ENDIF201 191 DO l=1,nlayer 202 192 DO ig=1,ngrid … … 204 194 & dble(pq(ig,l,igcm_ccnco2_mass)), 205 195 & dble(pq(ig,l,igcm_ccnco2_number)), 196 & pt(ig,l), 206 197 & tauscaling(ig),riceco2(ig,l), 207 198 & rhocloudco2(ig,l)) … … 266 257 DO l=1,nlayer 267 258 DO ig=1,ngrid 268 reffrad(ig,l,iaer)=r iceco2(ig,l)*(1.+nuiceco2_ref)259 reffrad(ig,l,iaer)=real(riceco2(ig,l))*(1.+nuiceco2_ref) 269 260 nueffrad(ig,l,iaer)=nuiceco2_ref 270 261 ENDDO -
trunk/LMDZ.MARS/libf/phymars/watercloud_mod.F
r2437 r2494 681 681 & ,"kg/kg.s-1",3,pdqcloud(1:ngrid,1:nlay, 682 682 & igcm_ccn_mass)) 683 call WRITEDIAGFI(ngrid,"pdqccnN2","pdqcloudccnN apres 684 & microphysique","nb/kg.s-1",3,pdqcloud(1:ngrid,1:nlay,683 call WRITEDIAGFI(ngrid,"pdqccnN2","pdqcloudccnN apres "// 684 & "microphysique","nb/kg.s-1",3,pdqcloud(1:ngrid,1:nlay, 685 685 & igcm_ccn_number)) 686 call WRITEDIAGFI(ngrid,"pdqdust2", "pdqclouddust apres 687 & microphysique","kg/kg.s-1",3,pdqcloud(1:ngrid,1:nlay,686 call WRITEDIAGFI(ngrid,"pdqdust2", "pdqclouddust apres "// 687 & "microphysique","kg/kg.s-1",3,pdqcloud(1:ngrid,1:nlay, 688 688 & igcm_dust_mass)) 689 call WRITEDIAGFI(ngrid,"pdqdustN2", "pdqclouddustN apres 690 & microphysique","nb/kg.s-1",3,pdqcloud(1:ngrid,1:nlay,689 call WRITEDIAGFI(ngrid,"pdqdustN2", "pdqclouddustN apres "// 690 & "microphysique","nb/kg.s-1",3,pdqcloud(1:ngrid,1:nlay, 691 691 & igcm_dust_number)) 692 692 c=======================================================================
Note: See TracChangeset
for help on using the changeset viewer.