Changeset 2589 for trunk/LMDZ.MARS/libf/phymars
- Timestamp:
- Nov 30, 2021, 10:19:18 AM (4 years ago)
- Location:
- trunk/LMDZ.MARS/libf/phymars
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/libf/phymars/callsedim_mod.F
r2562 r2589 19 19 & igcm_h2o_ice, igcm_hdo_ice, 20 20 & nuice_sed, nuice_ref, 21 & igcm_ccnco2_mass,igcm_ccnco2_number, 22 & igcm_co2_ice, igcm_stormdust_mass, 21 & igcm_co2_ice, igcm_stormdust_mass, 23 22 & igcm_stormdust_number,igcm_topdust_mass, 24 23 & igcm_topdust_number, … … 162 161 INTEGER,SAVE :: iccnco2_h2o_mass_ice ! index of tracer containing CCN number 163 162 INTEGER,SAVE :: iccnco2_h2o_mass_ccn ! index of tracer containing CCN number 163 INTEGER,SAVE :: iccnco2_meteor_number ! index of tracer containing CCN number 164 INTEGER,SAVE :: iccnco2_meteor_mass ! index of tracer containing CCN number 164 165 INTEGER,SAVE :: ico2_ice ! index of tracer containing CCN number 165 166 … … 247 248 iccnco2_h2o_mass_ccn=0 248 249 iccnco2_h2o_number=0 250 iccnco2_meteor_mass=0 251 iccnco2_meteor_number=0 249 252 ico2_ice=0 250 253 do iq=1,nq … … 275 278 write(*,*)"callsedim: iccnco2_h2o_mass_ccn=", 276 279 & iccnco2_h2o_mass_ccn 280 endif 281 if (noms(iq).eq."ccnco2_meteor_number") then 282 iccnco2_meteor_number=iq 283 write(*,*)"callsedim: iccnco2_meteor_number=", 284 & iccnco2_meteor_number 285 endif 286 if (noms(iq).eq."ccnco2_meteor_mass") then 287 iccnco2_meteor_mass=iq 288 write(*,*)"callsedim: iccnco2_meteor_mass=", 289 & iccnco2_meteor_mass 277 290 endif 278 291 enddo … … 294 307 end if 295 308 end if 309 if (meteo_flux) then 310 if((iccnco2_meteor_mass.eq.0).or. 311 & (iccnco2_meteor_number.eq.0)) then 312 write(*,*) 'callsedim: error! could not identify' 313 write(*,*) ' tracers for ccn co2 mass and number mixing' 314 write(*,*) ' ratio and co2clouds are activated!' 315 call abort_physic(modname,"missing co2 ccn tracers",1) 316 end if 317 end if 318 296 319 ENDIF !of if (co2clouds) 297 320 … … 432 455 & (iq.ne.iccnco2_h2o_number).and. 433 456 & (iq.ne.iccnco2_h2o_mass_ice).and. 434 & (iq.ne.iccnco2_h2o_mass_ccn).and. ! no sedim for gaz or CO2 clouds (done in microtimestep) 457 & (iq.ne.iccnco2_h2o_mass_ccn).and. 458 & (iq.ne.iccnco2_meteor_mass).and. 459 & (iq.ne.iccnco2_meteor_number).and. ! no sedim for gaz or CO2 clouds (done in microtimestep) 435 460 & iq .ne. igcm_hdo_ice) then !MVals: hdo is transported by h2o 436 461 c ----------------------------------------------------------------- -
trunk/LMDZ.MARS/libf/phymars/co2cloud.F90
r2562 r2589 100 100 igcm_ccn_mass, igcm_ccn_number, igcm_ccnco2_mass, igcm_ccnco2_number, & 101 101 igcm_ccnco2_h2o_number, igcm_ccnco2_h2o_mass_ice, igcm_ccnco2_h2o_mass_ccn, rho_dust, & 102 nuiceco2_sed, nuiceco2_ref, r3n_q, rho_ice, nuice_sed 102 nuiceco2_sed, nuiceco2_ref, r3n_q, rho_ice, nuice_sed, igcm_ccnco2_meteor_mass, & 103 igcm_ccnco2_meteor_number 103 104 104 105 use newsedim_mod, only: newsedim … … 591 592 sum_subpdq(ig,l,igcm_co2) = sum_subpdq(ig,l,igcm_co2) + pdq(ig,l,igcm_co2) 592 593 594 if (meteo_flux) then 595 sum_subpdq(ig,l,igcm_ccnco2_meteor_number) = sum_subpdq(ig,l,igcm_ccnco2_meteor_number) + & 596 pdq(ig,l,igcm_ccnco2_meteor_number) 597 598 sum_subpdq(ig,l,igcm_ccnco2_meteor_mass) = sum_subpdq(ig,l,igcm_ccnco2_meteor_mass) + & 599 pdq(ig,l,igcm_ccnco2_meteor_mass) 600 end if 593 601 if (co2useh2o) then 594 602 sum_subpdq(ig,l,igcm_h2o_ice) = sum_subpdq(ig,l,igcm_h2o_ice) + pdq(ig,l,igcm_h2o_ice) … … 598 606 sum_subpdq(ig,l,igcm_ccn_number) = sum_subpdq(ig,l,igcm_ccn_number) + pdq(ig,l,igcm_ccn_number) 599 607 600 sum_subpdq(ig,l,igcm_ccnco2_h2o_number) = sum_subpdq(ig,l,igcm_ccnco2_h2o_number) + &601 pdq(ig,l,igcm_ccnco2_h2o_number)602 603 sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) = sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) + &604 pdq(ig,l,igcm_ccnco2_h2o_mass_ice)605 606 sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn) = sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn) + &607 pdq(ig,l,igcm_ccnco2_h2o_mass_ccn)608 sum_subpdq(ig,l,igcm_ccnco2_h2o_number) = sum_subpdq(ig,l,igcm_ccnco2_h2o_number) + & 609 pdq(ig,l,igcm_ccnco2_h2o_number) 610 611 sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) = sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) + & 612 pdq(ig,l,igcm_ccnco2_h2o_mass_ice) 613 614 sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn) = sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ccn) + & 615 pdq(ig,l,igcm_ccnco2_h2o_mass_ccn) 608 616 end if 609 617 end do ! ngrid … … 642 650 end if 643 651 644 ! ccnco2_h2o_number and masses 652 ! ccnco2_meteor_number and ccnco2_meteor_mass 653 if (meteo_flux) then 654 if (((pq(ig,l,igcm_ccnco2_meteor_number)+(sum_subpdq(ig,l,igcm_ccnco2_meteor_number)+ & 655 subpdqcloudco2(ig,l,igcm_ccnco2_meteor_number))*microtimestep)<=1.) .or. & 656 (pq(ig,l,igcm_ccnco2_meteor_mass)+(sum_subpdq(ig,l,igcm_ccnco2_meteor_mass)+ & 657 subpdqcloudco2(ig,l,igcm_ccnco2_meteor_mass))*microtimestep<=1e-20)) then 658 subpdqcloudco2(ig,l,igcm_ccnco2_meteor_number) = - pq(ig,l,igcm_ccnco2_meteor_number)/microtimestep + 1. & 659 - sum_subpdq(ig,l,igcm_ccnco2_meteor_number) 660 subpdqcloudco2(ig,l,igcm_ccnco2_meteor_mass) = - pq(ig,l,igcm_ccnco2_meteor_mass)/microtimestep + 1e-20 & 661 - sum_subpdq(ig,l,igcm_ccnco2_meteor_mass) 662 end if 663 end if 664 665 ! ccnco2_h2o_number and masses 645 666 if (co2useh2o) then 646 667 if (((pq(ig,l,igcm_ccnco2_h2o_number) + (sum_subpdq(ig,l,igcm_ccnco2_h2o_number) + & … … 688 709 sum_subpdq(ig,l,igcm_co2) = sum_subpdq(ig,l,igcm_co2) + subpdqcloudco2(ig,l,igcm_co2) 689 710 711 if (meteo_flux) then 712 sum_subpdq(ig,l,igcm_ccnco2_meteor_mass) = sum_subpdq(ig,l,igcm_ccnco2_meteor_mass) + & 713 subpdqcloudco2(ig,l,igcm_ccnco2_meteor_mass) 714 715 sum_subpdq(ig,l,igcm_ccnco2_meteor_number) = sum_subpdq(ig,l,igcm_ccnco2_meteor_number) + & 716 subpdqcloudco2(ig,l,igcm_ccnco2_meteor_number) 717 end if 690 718 if (co2useh2o) then 691 719 sum_subpdq(ig,l,igcm_h2o_ice) = sum_subpdq(ig,l,igcm_h2o_ice) + subpdqcloudco2(ig,l,igcm_h2o_ice) … … 723 751 724 752 ! assure positive value of co2_ice mmr, ccnco2 number, ccnco2 mass 753 ! meteoritic particle are considered like dust, rho_dust 725 754 Niceco2 = max(zqsed(ig,l,igcm_co2_ice), threshold) 726 755 Nccnco2 = max(zqsed(ig,l,igcm_ccnco2_number), threshold) … … 753 782 zqsed0(:,:,igcm_ccnco2_number) = zqsed(:,:,igcm_ccnco2_number) 754 783 784 if (meteo_flux) then 785 zqsed0(:,:,igcm_ccnco2_meteor_mass) = zqsed(:,:,igcm_ccnco2_meteor_mass) 786 zqsed0(:,:,igcm_ccnco2_meteor_number) = zqsed(:,:,igcm_ccnco2_meteor_number) 787 end if 788 755 789 if (co2useh2o) then 756 790 zqsed0(:,:,igcm_ccnco2_h2o_number) = zqsed(:,:,igcm_ccnco2_h2o_number) … … 794 828 end do 795 829 830 if (meteo_flux) then 831 wq(:,:) = 0. 832 ! for ccnco2_meteor_mass 833 call newsedim(ngrid, nlay, ngrid*nlay, ngrid*nlay, microtimestep, pplev, masse, epaisseur, ztsed, & 834 rsedcloudco2, rhocloudco2t, zqsed(:,:,igcm_ccnco2_meteor_mass), wq, beta) 835 do ig = 1, ngrid 836 sum_subpdqs_sedccn(ig,igcm_ccnco2_meteor_mass) = sum_subpdqs_sedccn(ig,igcm_ccnco2_meteor_mass) + & 837 wq(ig,1)/ microtimestep 838 end do 839 840 wq(:,:) = 0. 841 ! for ccnco2_meteor_number 842 call newsedim(ngrid, nlay, ngrid*nlay, ngrid*nlay,microtimestep, pplev, masse, epaisseur, ztsed, & 843 rsedcloudco2, rhocloudco2t, zqsed(:,:,igcm_ccnco2_meteor_number), wq, beta) 844 do ig = 1, ngrid 845 sum_subpdqs_sedccn(ig,igcm_ccnco2_meteor_number) = sum_subpdqs_sedccn(ig,igcm_ccnco2_meteor_number) + & 846 wq(ig,1) / microtimestep 847 end do 848 end if 796 849 ! for ccnco2_h2o_mass_ice 797 850 if (co2useh2o) then … … 835 888 subpdqsed(ig,l,igcm_co2_ice) = ( zqsed(ig,l,igcm_co2_ice) - zqsed0(ig,l,igcm_co2_ice) ) / microtimestep 836 889 890 if (meteo_flux) then 891 subpdqsed(ig,l,igcm_ccnco2_meteor_mass) = ( zqsed(ig,l,igcm_ccnco2_meteor_mass) - & 892 zqsed0(ig,l,igcm_ccnco2_meteor_mass) ) / microtimestep 893 894 subpdqsed(ig,l,igcm_ccnco2_meteor_number) = ( zqsed(ig,l,igcm_ccnco2_meteor_number) - & 895 zqsed0(ig,l,igcm_ccnco2_meteor_number) ) / microtimestep 896 end if 837 897 if (co2useh2o) then 838 898 subpdqsed(ig,l,igcm_ccnco2_h2o_number) = ( zqsed(ig,l,igcm_ccnco2_h2o_number) - & … … 855 915 856 916 sum_subpdq(ig,l,igcm_co2_ice) = sum_subpdq(ig,l,igcm_co2_ice) + subpdqsed(ig,l,igcm_co2_ice) 917 if (meteo_flux) then 918 sum_subpdq(ig,l,igcm_ccnco2_meteor_mass) = sum_subpdq(ig,l,igcm_ccnco2_meteor_mass) + & 919 subpdqsed(ig,l,igcm_ccnco2_meteor_mass) 920 921 sum_subpdq(ig,l,igcm_ccnco2_meteor_number) = sum_subpdq(ig,l,igcm_ccnco2_meteor_number) + & 922 subpdqsed(ig,l,igcm_ccnco2_meteor_number) 923 end if 857 924 if (co2useh2o) then 858 925 sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) = sum_subpdq(ig,l,igcm_ccnco2_h2o_mass_ice) + & … … 911 978 pdq(ig,l,igcm_dust_number) 912 979 980 if (meteo_flux) then 981 pdqcloudco2(ig,l,igcm_ccnco2_meteor_mass) = ( sum_subpdq(ig,l,igcm_ccnco2_meteor_mass)/real(imicroco2) ) & 982 - pdq(ig,l,igcm_ccnco2_meteor_mass) 983 984 pdqcloudco2(ig,l,igcm_ccnco2_meteor_number) = ( sum_subpdq(ig,l,igcm_ccnco2_meteor_number) / real(imicroco2) ) & 985 - pdq(ig,l,igcm_ccnco2_meteor_number) 986 end if 913 987 if (co2useh2o) then 914 988 pdqcloudco2(ig,l,igcm_h2o_ice) = ( sum_subpdq(ig,l,igcm_h2o_ice) / real(imicroco2) ) - & … … 943 1017 Niceco2 = max (Niceco2, threshold) 944 1018 1019 ! meteoritic particles are considered like dust, => rho_dust 945 1020 Nccnco2 = max( (pqeff(ig,l,igcm_ccnco2_number) + (pdq(ig,l,igcm_ccnco2_number) + & 946 1021 pdqcloudco2(ig,l, igcm_ccnco2_number)) * ptimestep) & … … 1059 1134 Qext1bins2(ig,l) = Qext1bins2(ig,l) * co2cloudfrac(ig,l) 1060 1135 1136 if (meteo_flux) then 1137 pdqcloudco2(ig,l,igcm_ccnco2_meteor_mass) = pdqcloudco2(ig,l,igcm_ccnco2_meteor_mass) * co2cloudfrac(ig,l) 1138 1139 pdqcloudco2(ig,l,igcm_ccnco2_meteor_number) = pdqcloudco2(ig,l,igcm_ccnco2_meteor_number) * co2cloudfrac(ig,l) 1140 end if 1061 1141 if (co2useh2o) then 1062 1142 pdqcloudco2(ig,l,igcm_h2o_ice) = pdqcloudco2(ig,l,igcm_h2o_ice) * co2cloudfrac(ig,l) … … 1088 1168 !----------------------------------------------------------------------------------------------------------------------! 1089 1169 call WRITEDIAGFI(ngrid, "satuco2", "vap in satu", " ", 3, satuco2) 1090 1091 call WRITEDIAGFI(ngrid, "precip_co2_ice", "surface deposition of co2 ice", "kg.m-2", 2, pdqs_sedco2(:)*ptimestep)1092 1170 1093 1171 call WRITEDIAGFI(ngrid, "precip_co2_ice_rate", "surface deposition rate of co2 ice", "kg.m-2.s-1", 2, pdqs_sedco2(:)) -
trunk/LMDZ.MARS/libf/phymars/improvedco2clouds_mod.F90
r2562 r2589 70 70 nuice_sed, igcm_co2, igcm_co2_ice, igcm_ccnco2_mass, igcm_ccnco2_number, & 71 71 igcm_ccnco2_h2o_mass_ice, igcm_ccnco2_h2o_mass_ccn, igcm_ccnco2_h2o_number, nuiceco2_sed, & 72 nuiceco2_ref 72 nuiceco2_ref, igcm_ccnco2_meteor_mass, igcm_ccnco2_meteor_number 73 73 74 74 use conc_mod, only: mmean 75 75 use time_phylmdz_mod, only: daysec 76 76 use nucleaco2_mod, only: nucleaco2 77 77 use datafile_mod, only: datadir … … 135 135 threshold = 1e-30 ! limit value 136 136 137 character(len=2 0), parameter:: &138 file_meteoritic_flux = 'Meteo_flux_Plane .dat'137 character(len=23), parameter:: & 138 file_meteoritic_flux = 'Meteo_flux_Plane_v2.dat' 139 139 !----------------------------------------------------------------------------------------------------------------------! 140 140 !----2) Saved: … … 144 144 145 145 double precision, save :: & 146 pression_meteor(nlev_meteor), &! pressure from meteoritic flux input file 146 147 meteor(nlev_meteor,nbin_meteor), &! Meteoritic flux read from file uMeteor 147 148 dev3 ! 1. / ( sqrt(2.) * sigma_ice ) … … 158 159 ! ---Variables for meteoritic flux 159 160 ibin, &! loop on nbin_meteor 160 nelem, &! nb of points during interpolation of meteoritic flux 161 lebon1, &! index where P_meteor is the nearest of pplev(ig,l) 162 lebon2, &! index where P_meteor is the nearest of pplev(ig,l+1) 161 idx_min,&! index of min(diff_pressure) 163 162 read_ok ! file uMeteor iostat 164 163 … … 196 195 n_aer(nbinco2_cld), &! Radius used by the microphysical scheme (m) 197 196 m_aer(nbinco2_cld), &! number concentration V-1 of particle/each size bin 197 n_aer_meteor(nbinco2_cld), &! Radius used by the microphysical scheme (m) 198 m_aer_meteor(nbinco2_cld), &! number concentration V-1 of particle/each size bin 198 199 n_aer_h2oice(nbinco2_cld), &! mass mixing ratio of particle/each size bin 199 200 m_aer_h2oice(nbinco2_cld), &! Same - for CO2 nucleation … … 203 204 dN, &! number of particle of dust used as ccn 204 205 dM, &! mass of dN 206 dN_meteor, &! number of particle of dust used as ccn 207 dM_meteor, &! mass of dN 205 208 dNh2o, &! number of particle of h2o ice used as ccn 206 209 dMh2o, &! mass of dNh2o 207 210 dNN, &! min(dN,zq(ig,l,igcm_dust_number)) 208 211 dMM, &! min(dM,zq(ig,l,igcm_dust_mass)) 212 dNN_meteor, &! number of particle of dust used as ccn 213 dMM_meteor, &! mass of dN 209 214 dNNh2o, &! min(dNNh2o,zq(ig,l,igcm_ccn_number)) 210 215 dMh2o_ice, &! min(dMh2o*zq(ig,l,igcm_h2o_ice)*ratioh2o_ccn, zq(ig,l,igcm_h2o_ice)) 211 216 dMh2o_ccn, &! min(dMh2o_ccn,zq(ig,l,igcm_ccn_mass)) 212 217 rate(nbinco2_cld), &! nucleation rate 218 rate_meteor(nbinco2_cld), &! nucleation rate 213 219 rateh2o(nbinco2_cld), &! nucleation rate for h2o 214 220 rho_ice_co2T, &! density of co2 ice Temperature-dependent … … 217 223 Proba, &! 1.0 - exp(-1.*microtimestep*rate(i)) 218 224 Probah2o, &! 1.0 - exp(-1.*microtimestep*rateh2o(i)) 219 mtemp(nbinco2_cld), &! sum(meteor(lebon1:lebon2,ibin)) 220 pression_meteor(nlev_meteor), &! pressure from meteoritic flux input file 221 ltemp1(nlev_meteor), &! abs(pression_meteor(:)-pplev(ig,l)) 222 ltemp2(nlev_meteor), &! abs(pression_meteor(:)-pplev(ig,l+1)) 223 meteor_ccn(ngrid,nlay,nbinco2_cld) ! nbinco2_cld = 100 225 Proba_meteor, &! 1.0 - exp(-1.*microtimestep*rateh2o(i)) 226 diff_pressure(nlev_meteor), &! abs(pression_meteor(:)-pplev(ig,l)) 227 meteor_ccn(ngrid,nlay,nbinco2_cld) ! 224 228 225 229 logical :: & … … 264 268 ! les mêmes 100 bins size que la distri nuclea : on touche pas 265 269 do ibin = 1, nbin_meteor 266 read(uMeteor,'(F12.6)') 270 read(uMeteor,'(F12.6)')meteor(i,ibin) 267 271 end do 268 272 end do … … 276 280 !----------------------------------------------------------------------------------------------------------------------! 277 281 rdust(:,:) = 0. 278 meteor_ccn(:,:,:) = 0 .282 meteor_ccn(:,:,:) = 0d0 279 283 rice(:,:) = 1.e-8 280 284 riceco2(:,:) = 1.e-11 … … 302 306 ! 3. Bonus: additional meteoritic particles for nucleation 303 307 !----------------------------------------------------------------------------------------------------------------------! 304 ! TODO: instead of intepolation, used only the nearest pplev(ig,l)305 308 if (meteo_flux) then 306 309 do l = 1, nlay … … 308 311 masse(ig,l) = (pplev(ig,l) - pplev(ig,l+1)) / g 309 312 310 ltemp1 = abs(pression_meteor(:)-pplev(ig,l)) 311 ltemp2 = abs(pression_meteor(:)-pplev(ig,l+1)) 312 313 lebon1 = minloc(ltemp1,DIM=1) 314 lebon2 = minloc(ltemp2,DIM=1) 315 316 nelem = lebon2-lebon1+1. 317 318 mtemp(:) = 0d0 319 320 do ibin = 1, nbin_meteor 321 mtemp(ibin) = sum(meteor(lebon1:lebon2,ibin)) 322 end do 323 313 diff_pressure(:) = abs(pression_meteor(:)-pplev(ig,l)) 314 315 idx_min = minloc(diff_pressure, DIM=1) 324 316 ! Par kg air csi par m carre, x epaisseur/masse pour par kg/air. Check original unit with J. Plane 325 meteor_ccn(ig,l,:) =mtemp(:)/nelem/masse(ig,l)317 meteor_ccn(ig,l,:) = meteor(idx_min,:)/masse(ig,l) 326 318 end do 327 319 end do … … 387 379 388 380 ! Now increment CCN tracers and update dust tracers 389 dNN = min(dN, zq(ig,l,igcm_dust_number)) ! dNN est devenu DN390 dMM = min(dM, zq(ig,l,igcm_dust_mass)) ! idem dans le min381 dNN = min(dN, zq(ig,l,igcm_dust_number)) ! dNN est devenu DN 382 dMM = min(dM, zq(ig,l,igcm_dust_mass)) ! idem dans le min 391 383 392 384 zq(ig,l,igcm_ccnco2_mass) = zq(ig,l,igcm_ccnco2_mass) + dMM /tauscaling(ig) 393 394 385 zq(ig,l,igcm_ccnco2_number) = zq(ig,l,igcm_ccnco2_number) + dNN /tauscaling(ig) 395 386 396 387 zq(ig,l,igcm_dust_mass) = zq(ig,l,igcm_dust_mass) - dMM /tauscaling(ig) 397 398 388 zq(ig,l,igcm_dust_number) = zq(ig,l,igcm_dust_number) - dNN /tauscaling(ig) 399 400 ! Ajout meteor_ccn particles aux particules de poussière background 401 if (meteo_flux) then 389 end if ! of if No > 1e-30 390 391 ! Ajout meteor_ccn particles aux particules de poussière background 392 if (meteo_flux) then 393 n_aer_meteor(1:nbinco2_cld) = 0d0 394 m_aer_meteor(1:nbinco2_cld) = 0d0 402 395 do i = 1, nbinco2_cld 403 n_aer(i) = n_aer(i) + meteor_ccn(ig,l,i) 404 405 m_aer(i) = m_aer(i) + (4./3.) * pi * rho_dust * meteor_ccn(ig,l,i) * rad_cldco2(i)**3 406 end do 396 n_aer_meteor(i) = meteor_ccn(ig,l,i) 397 m_aer_meteor(i) = (4./3.) * pi * rho_dust * meteor_ccn(ig,l,i) * rad_cldco2(i)**3 398 end do 399 ! Call to nucleation routine 400 rate_meteor(1:nbinco2_cld) = 0d0 401 call nucleaco2(dble(pco2), zt(ig,l), dble(satu), n_aer_meteor, rate_meteor, vo2co2, mtetaco2) 402 403 dN_meteor = 0. 404 dM_meteor = 0. 405 do i = 1, nbinco2_cld 406 Proba_meteor = 1.0 - exp(-1.*microtimestep*rate_meteor(i)) 407 dN_meteor = dN_meteor + n_aer_meteor(i) * Proba_meteor 408 dM_meteor = dM_meteor + m_aer_meteor(i) * Proba_meteor 409 end do 410 ! Now increment CCN tracers and update dust tracers 411 zq(ig,l,igcm_ccnco2_meteor_mass) = zq(ig,l,igcm_ccnco2_meteor_mass) + dM_meteor 412 zq(ig,l,igcm_ccnco2_meteor_number) = zq(ig,l,igcm_ccnco2_meteor_number) + dN_meteor 413 414 zq(ig,l,igcm_ccnco2_mass) = zq(ig,l,igcm_ccnco2_mass) + dM_meteor 415 zq(ig,l,igcm_ccnco2_number) = zq(ig,l,igcm_ccnco2_number) + dN_meteor 407 416 end if 408 end if ! of if No > 1e-30409 417 410 418 ! Same but with h2o particles as CCN only if co2useh2o = .true. … … 539 547 zq(ig,l,igcm_ccnco2_mass) = 0. 540 548 zq(ig,l,igcm_ccnco2_number) = 0. 549 if (meteo_flux) then 550 zq(ig,l,igcm_dust_mass) = zq(ig,l,igcm_dust_mass) - zq(ig,l,igcm_ccnco2_meteor_mass) 551 zq(ig,l,igcm_dust_number) = zq(ig,l,igcm_dust_number) - zq(ig,l,igcm_ccnco2_meteor_number) 552 zq(ig,l,igcm_ccnco2_meteor_mass) = 0. 553 zq(ig,l,igcm_ccnco2_meteor_number) = 0. 554 end if 541 555 if (co2useh2o) then 542 556 zq(ig,l,igcm_dust_mass) = zq(ig,l,igcm_dust_mass) - zq(ig,l,igcm_ccnco2_h2o_mass_ccn) - & … … 572 586 subpdqcloudco2(:,:,igcm_dust_number) = ( zq(:,:,igcm_dust_number) - zq0(:,:,igcm_dust_number) ) / microtimestep 573 587 588 if (meteo_flux) then 589 subpdqcloudco2(:,:,igcm_ccnco2_meteor_mass) = (zq(:,:,igcm_ccnco2_meteor_mass)-zq0(:,:,igcm_ccnco2_meteor_mass) & 590 )/microtimestep 591 592 subpdqcloudco2(:,:,igcm_ccnco2_meteor_number) = ( zq(:,:,igcm_ccnco2_meteor_number) - & 593 zq0(:,:,igcm_ccnco2_meteor_number) )/microtimestep 594 end if 595 574 596 if (co2useh2o) then 575 597 subpdqcloudco2(:,:,igcm_h2o_ice) = ( zq(:,:,igcm_h2o_ice) - zq0(:,:,igcm_h2o_ice) ) / microtimestep -
trunk/LMDZ.MARS/libf/phymars/initracer.F
r2562 r2589 64 64 igcm_ccnco2_mass=0 65 65 igcm_ccnco2_number=0 66 igcm_ccnco2_meteor_mass=0 67 igcm_ccnco2_meteor_number=0 66 68 igcm_ccnco2_h2o_mass_ice=0 67 69 igcm_ccnco2_h2o_mass_ccn=0 … … 428 430 count=count+1 429 431 endif 432 if (meteo_flux) then 433 if (noms(iq).eq."ccnco2_meteor_mass") then 434 igcm_ccnco2_meteor_mass=iq 435 count=count+1 436 endif 437 if (noms(iq).eq."ccnco2_meteor_number") then 438 igcm_ccnco2_meteor_number=iq 439 count=count+1 440 endif 441 end if 430 442 if (co2useh2o) then 431 443 if (noms(iq).eq."ccnco2_h2o_number") then … … 821 833 & "a co2 tracer !" 822 834 call abort_physic("initracer","co2 clouds issue",1) 823 end if835 end if 824 836 if (igcm_co2_ice .eq. 0) then 825 837 write(*,*) "initracer: error !!" … … 827 839 & "a co2_ice tracer !" 828 840 call abort_physic("initracer","co2 clouds issue",1) 829 endif 841 end if 842 ! TODO: ajouter les tests avec co2useh2o, et meteo_flux, ainsi que les traceurs ccnco2_number 830 843 endif 831 844 -
trunk/LMDZ.MARS/libf/phymars/physiq_mod.F
r2578 r2589 33 33 & igcm_ccnco2_h2o_mass_ccn, 34 34 & igcm_ccnco2_h2o_number, 35 & igcm_ccnco2_meteor_mass, 36 & igcm_ccnco2_meteor_number, 35 37 & rho_ice_co2,nuiceco2_sed,nuiceco2_ref, 36 38 & igcm_dust_mass, igcm_dust_number, igcm_h2o2, … … 1676 1678 & zdtcloudco2(1:ngrid,1:nlayer) 1677 1679 1678 1679 1680 ! increment dust and ccn masses and numbers 1680 1681 ! We need to check that we have Nccn & Ndust > 0 … … 1699 1700 & + zdqcloudco2(:,:,igcm_ccnco2_number) 1700 1701 1702 if (meteo_flux) then 1703 pdq(:,:,igcm_ccnco2_meteor_mass) = 1704 & pdq(:,:,igcm_ccnco2_meteor_mass) + 1705 & zdqcloudco2(:,:,igcm_ccnco2_meteor_mass) 1706 1707 pdq(:,:,igcm_ccnco2_meteor_number) = 1708 & pdq(:,:,igcm_ccnco2_meteor_number) 1709 & + zdqcloudco2(:,:,igcm_ccnco2_meteor_number) 1710 end if 1701 1711 !Update water ice clouds values as well 1702 1712 if (co2useh2o) then … … 1800 1810 & - pq(:,:,igcm_dust_number)/ptimestep + 1.e-30 1801 1811 end where 1812 if (meteo_flux) then 1813 where (pq(:,:,igcm_ccnco2_meteor_mass) + 1814 & ptimestep*pdq(:,:,igcm_ccnco2_meteor_mass) < 0.) 1815 pdq(:,:,igcm_ccnco2_meteor_mass) = 1816 & - pq(:,:,igcm_ccnco2_meteor_mass)/ptimestep + 1.e-30 1817 pdq(:,:,igcm_ccnco2_meteor_number) = 1818 & - pq(:,:,igcm_ccnco2_meteor_number)/ptimestep + 1.e-30 1819 end where 1820 where (pq(:,:,igcm_ccnco2_meteor_number) + 1821 & ptimestep*pdq(:,:,igcm_ccnco2_meteor_number) < 0.) 1822 pdq(:,:,igcm_ccnco2_meteor_mass) = 1823 & - pq(:,:,igcm_ccnco2_meteor_mass)/ptimestep + 1.e-30 1824 pdq(:,:,igcm_ccnco2_meteor_number) = 1825 & - pq(:,:,igcm_ccnco2_meteor_number)/ptimestep + 1.e-30 1826 end where 1827 end if 1802 1828 END IF ! of IF (co2clouds) 1803 1829 … … 3023 3049 call WRITEDIAGFI(ngrid,"emis","Surface emissivity","w.m-1",2, 3024 3050 & emis) 3051 if (co2useh2o) then 3052 call WRITEDIAGFI(ngrid,'ccnqco2_h2o_m_ice', 3053 & 'CCNco2_h2o_mass_ice mmr', 3054 & 'kg.kg-1',3,zq(:,:,igcm_ccnco2_h2o_mass_ice)) 3055 3056 call WRITEDIAGFI(ngrid,'ccnqco2_h2o_m_ccn', 3057 & 'CCNco2_h2o_mass_ccn mmr', 3058 & 'kg.kg-1',3,zq(:,:,igcm_ccnco2_h2o_mass_ccn)) 3059 3060 call WRITEDIAGFI(ngrid,'ccnNco2_h2o','CCNco2_h2o number', 3061 & 'part.kg-1',3,zq(:,:,igcm_ccnco2_h2o_number)) 3062 end if 3063 3064 if (meteo_flux) then 3065 call WRITEDIAGFI(ngrid,'ccnqco2_meteor','CCNco2_meteor mmr', 3066 & 'kg.kg-1',3,zq(:,:,igcm_ccnco2_meteor_mass)) 3067 3068 call WRITEDIAGFI(ngrid,'ccnNco2_meteor','CCNco2_meteor number', 3069 & 'part.kg-1',3,zq(:,:,igcm_ccnco2_meteor_number)) 3070 end if 3071 3025 3072 end if ! of if (co2clouds) 3026 3073 end if ! of if (tracer.and.(igcm_co2.ne.0)) -
trunk/LMDZ.MARS/libf/phymars/tracer_mod.F90
r2578 r2589 65 65 integer,save :: igcm_ccnco2_mass ! CCN (dust and/or water ice) for CO2 mass mixing ratio 66 66 integer,save :: igcm_ccnco2_number ! CCN (dust and/or water ice) for CO2 number mixing ratio 67 integer,save :: igcm_ccnco2_meteor_mass ! CCN (dust and/or water ice) for CO2 mass mixing ratio 68 integer,save :: igcm_ccnco2_meteor_number ! CCN (dust and/or water ice) for CO2 number mixing ratio 67 69 integer,save :: igcm_ccnco2_h2o_mass_ice ! CCN (dust and/or water ice) for CO2 mass mixing ratio 68 70 integer,save :: igcm_ccnco2_h2o_mass_ccn ! CCN (dust and/or water ice) for CO2 mass mixing ratio
Note: See TracChangeset
for help on using the changeset viewer.