- Timestamp:
- Dec 6, 2022, 12:01:16 AM (22 months ago)
- Location:
- LMDZ6/branches/Ocean_skin
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/Ocean_skin
- Property svn:mergeinfo changed
-
LMDZ6/branches/Ocean_skin/libf/phylmdiso/isotopes_routines_mod.F90
r3927 r4368 3 3 4 4 MODULE isotopes_routines_mod 5 USE infotrac_phy, ONLY: niso, ntraciso=>ntiso, index_trac=>itZonIso, ntraceurs_zone=>nzone 5 6 IMPLICIT NONE 6 7 … … 13 14 & zqs,zq_ancien,zqev_diag,zq) 14 15 15 USE infotrac_phy, ONLY: ntraciso,niso, &16 ntraceurs_zone,index_trac17 16 USE isotopes_mod, ONLY: ridicule, ridicule_rain, thumxt1, no_pce, & 18 17 & bidouille_anti_divergence, & … … 846 845 & L, xtnu,Pveg) 847 846 848 USE infotrac_phy, ONLY: niso849 847 USE isotopes_mod, ONLY: ridicule_qsol, ridicule, & 850 848 & ridicule_evap,P_veg,iso_HDO,iso_eau,iso_O17,iso_O18 … … 1301 1299 1302 1300 subroutine calcul_kcin(Vsurf,KCIN) 1303 USE infotrac_phy, ONLY: niso1304 1301 USE isotopes_mod, ONLY: tv0cin,tkcin0,tkcin1,tkcin2 1305 1302 implicit none … … 1328 1325 1329 1326 subroutine fractcalk(kt, ptin, pxtfra, pfraice) 1330 !USE infotrac_phy, ONLY: use_iso1331 1327 USE isotopes_mod, ONLY: talph1,talph2,talph3,pxtmin,iso_O17, & 1332 1328 & fac_coeff_eq17_liq, pxtmelt, & … … 1457 1453 subroutine fractcalk_liq(kt, ptin, pxtfra) 1458 1454 1459 ! USE infotrac_phy, ONLY: use_iso1460 1455 USE isotopes_mod, ONLY: pxtmin,talph1,talph2,talph3, & 1461 1456 & fac_coeff_eq17_liq, pxtice, & … … 1522 1517 subroutine fractcalk_glace(kt, ptin, pfraice) 1523 1518 1524 ! use infotrac_phy, ONLY: use_iso1525 1519 use isotopes_mod, ONLY: talps1,talps2, iso_O17,fac_coeff_eq17_ice, & 1526 1520 & pxtmelt,musi, lambda_sursat, tdifrel, & … … 1631 1625 subroutine fractcalk_vectall(ptin, pxtfra, pfraice,n) 1632 1626 1633 USE infotrac_phy, ONLY: niso1634 1627 USE isotopes_mod, ONLY: talph1,talph2,talph3,tdifrel,pxtmin, & 1635 1628 & iso_O17, iso_HTO, iso_eau, iso_O18, iso_HDO, musi, lambda_sursat, & … … 1803 1796 subroutine fractcalk_vectall_liq(ptin, pxtfra, n) 1804 1797 1805 USE infotrac_phy, ONLY: niso1806 1798 USE isotopes_mod, ONLY: pxtmin,talph1,talph2,talph3, & 1807 1799 & iso_eau,iso_HDO, iso_O18, iso_O17,iso_HTO,fac_coeff_eq17_liq, & … … 1882 1874 subroutine fractcalk_vectall_ice(ptin, pfraice,n) 1883 1875 1884 use infotrac_phy, ONLY: niso1885 1876 use isotopes_mod, ONLY: talps1,talps2, fac_coeff_eq17_ice, & 1886 1877 & pxtmelt,musi, lambda_sursat, tdifrel, & … … 2023 2014 & i,Rsol,klon) 2024 2015 2025 USE infotrac_phy, ONLY: niso,ntraciso2026 2016 USE isotopes_mod, ONLY: iso_eau, iso_HDO,ridicule, & 2027 2017 & ridicule_qsol,iso_O17,iso_O18 … … 2233 2223 & i,xtevap,klon) 2234 2224 2235 USE infotrac_phy, ONLY: ntraciso,niso2236 2225 USE isotopes_mod, ONLY: iso_eau, iso_HDO,ridicule,ridicule_rain, & 2237 2226 iso_O18,iso_O17 … … 2444 2433 & ) 2445 2434 2446 USE infotrac_phy, ONLY: ntraciso,niso2447 2435 USE isotopes_mod, ONLY: iso_eau, iso_HDO,expb_max,tdifrel,tdifexp, & 2448 2436 & ridicule,thumxt1,ridicule_rain,bidouille_anti_divergence, & … … 4500 4488 & Tevap) 4501 4489 4502 USE infotrac_phy, ONLY: niso,ntraciso4503 4490 USE isotopes_mod, ONLY: iso_eau, iso_HDO,bidouille_anti_divergence, & 4504 4491 & ridicule,ridicule_rain … … 4658 4645 & ,fac_ftmr) 4659 4646 4660 USE infotrac_phy, ONLY: niso,ntraciso4661 4647 USE isotopes_mod, ONLY: iso_eau, iso_HDO,bidouille_anti_divergence, & 4662 4648 & Rdefault,ridicule,ridicule_rain … … 4904 4890 & Pqiinf_cas,Pqiinf) 4905 4891 4906 USE infotrac_phy, ONLY: niso,ntraciso4907 4892 USE isotopes_mod, ONLY: iso_eau, iso_HDO 4908 4893 … … 5066 5051 & xtnew_cas,xtnew,Pxtiinf_cas,Pxtiinf) 5067 5052 5068 USE infotrac_phy, ONLY: niso5069 5053 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5070 5054 #ifdef ISOVERIF … … 5111 5095 & ncum) 5112 5096 5113 USE infotrac_phy, ONLY: niso,ntraciso5114 5097 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5115 5098 … … 5176 5159 & nloc,ncum,nd,i) 5177 5160 5178 USE infotrac_phy, ONLY: niso, ntraciso5179 5161 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5180 5162 … … 5252 5234 & nloc,ncum,nd,i) 5253 5235 5254 USE infotrac_phy, ONLY: niso,ntraciso5255 5236 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5256 5237 … … 5326 5307 & nloc,ncum,nd,i) 5327 5308 5328 USE infotrac_phy, ONLY: niso,ntraciso5329 5309 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5330 5310 … … 5396 5376 & nloc,ncum,nd,i) 5397 5377 5398 USE infotrac_phy, ONLY: niso,ntraciso5399 5378 USE isotopes_mod, ONLY: iso_eau, iso_HDO,ridicule 5400 5379 … … 5566 5545 & nloc,ncum,nd,i,frac_sublim) 5567 5546 5568 USE infotrac_phy, ONLY: niso,ntraciso5569 5547 USE isotopes_mod, ONLY: iso_eau, iso_HDO,ridicule 5570 5548 … … 5703 5681 & zxtrfln_cas,zxt_cas,zxtrfl,zxtrfln,zxt,klon) 5704 5682 5705 USE infotrac_phy, ONLY: niso,ntraciso5706 5683 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5707 5684 … … 5739 5716 & delP,paprs,k,klon,klev) 5740 5717 5741 USE infotrac_phy, ONLY: niso5742 5718 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5743 5719 implicit none … … 5777 5753 & delP,paprs,k,klon,klev) 5778 5754 5779 USE infotrac_phy, ONLY: niso,ntraciso5780 5755 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5781 5756 implicit none … … 5828 5803 & delP,paprs,k,klon,klev,frac_sublim) 5829 5804 5830 USE infotrac_phy, ONLY: niso,ntraciso5831 5805 USE isotopes_mod, ONLY: iso_eau, iso_HDO 5832 5806 #ifdef ISOVERIF … … 5905 5879 & qp0,A,m0,beta,gama,g0) 5906 5880 5907 USE infotrac_phy, ONLY: niso5908 5881 USE isotopes_mod, ONLY: iso_eau, iso_HDO,ntot 5909 5882 #ifdef ISOVERIF … … 6100 6073 6101 6074 6102 USE infotrac_phy, ONLY: ntraciso,niso,ntraceurs_zone, &6103 & index_trac6104 6075 USE isotopes_mod, ONLY: iso_eau, iso_HDO,thumxt1, & 6105 6076 & bidouille_anti_divergence,ridicule … … 6366 6337 else !if (qp(il,i).gt.0) then 6367 6338 ! si qp est négatif, on met les isos dedans à 0 6368 write(*,*) 'appel_stewart temporaire 230: qp=', &6369 & qp(il,i)6370 6339 do ixt=1,ntraciso 6371 6340 xtp_avantevap(ixt,il)=0.0 … … 7682 7651 & ) 7683 7652 7684 USE infotrac_phy, ONLY: niso,ntraciso7685 7653 USE isotopes_mod, ONLY: iso_eau, iso_HDO, Rdefault, ridicule 7686 7654 #ifdef ISOVERIF … … 8050 8018 & ) 8051 8019 8052 USE infotrac_phy, ONLY: niso,ntraciso8053 8020 USE isotopes_mod, ONLY: iso_eau, iso_HDO, Rdefault,ridicule 8054 8021 #ifdef ISOVERIF … … 8255 8222 & ) 8256 8223 8257 USE infotrac_phy, ONLY: niso,ntraciso8258 8224 USE isotopes_mod, ONLY: iso_eau, iso_HDO, Rdefault,ridicule 8259 8225 #ifdef ISOVERIF … … 8392 8358 & ,xtp_cas,xtwater_cas,xtevap_cas) 8393 8359 8394 USE infotrac_phy, ONLY: niso,ntraciso8395 8360 USE isotopes_mod, ONLY: iso_eau, iso_HDO,no_pce, Rdefault,ridicule 8396 8361 #ifdef ISOVERIF … … 8929 8894 & ,xtp_cas,xtwater_cas,xtevap_cas) 8930 8895 8931 USE infotrac_phy, ONLY: niso,ntraciso8932 8896 USE isotopes_mod, ONLY: iso_eau, iso_HDO, Rdefault, ridicule 8933 8897 #ifdef ISOVERIF … … 9319 9283 9320 9284 9321 USE infotrac_phy, ONLY: niso,ntraciso, &9322 & ntraceurs_zone,index_trac9323 9285 USE isotopes_mod, ONLY: iso_eau, iso_HDO,bidouille_anti_divergence, & 9324 9286 & thumxt1, ridicule … … 9598 9560 else !if (qp(il,i).gt.0) then 9599 9561 ! si qp est négatif, on met les isos dedans à 0 9600 write(*,*) 'appel_stewart_np temporaire 230: qp=', &9601 & qp(il,i)9602 9562 do ixt=1,ntraciso 9603 9563 xtp_avantevap(ixt,il)=0.0 … … 9981 9941 #ifdef ISOVERIF 9982 9942 ! vérif de la compression 9983 write(*,*) 'appel_stewart_np tmp 506: ', &9984 & 'après compress_condensation_facftmr'9943 ! write(*,*) 'appel_stewart_np tmp 506: ', & 9944 ! & 'après compress_condensation_facftmr' 9985 9945 ! write(*,*) 'sigd_cas(1:3)=',sigd_cas(1:3) 9986 if (ncas_condensation_facftmr.ge.4) then9987 write(*,*) 'cas_condensation_facftmr(4)=', &9988 & cas_condensation_facftmr(4)9989 endif9946 ! if (ncas_condensation_facftmr.ge.4) then 9947 ! write(*,*) 'cas_condensation_facftmr(4)=', & 9948 ! & cas_condensation_facftmr(4) 9949 ! endif 9990 9950 do il=1,ncas_condensation_facftmr 9991 9951 call iso_verif_egalite_choix((Pqisup_cas(il)), & … … 10156 10116 #ifdef ISOVERIF 10157 10117 ! vérif de la compression 10158 write(*,*) 'appel_stewart_np tmp 616: ', &10159 & 'apres compress condensation_nofacftmr'10160 write(*,*) 'iso_routines 10153: sigd_cas(1:3)=', sigd_cas(1:3)10118 ! write(*,*) 'appel_stewart_np tmp 616: ', & 10119 ! & 'apres compress condensation_nofacftmr' 10120 ! write(*,*) 'iso_routines 10153: sigd_cas(1:3)=', sigd_cas(1:3) 10161 10121 do il=1,ncas_condensation_nofacftmr 10162 10122 call iso_verif_egalite_choix((Pqisup_cas(il)), & … … 10244 10204 enddo !do izone=1,ntraceurs_zone 10245 10205 #ifdef ISOVERIF 10246 write(*,*) 'appel_stewart_np tmp 690: ', &10247 & 'fin du cas condensation_nofacftmr'10206 ! write(*,*) 'appel_stewart_np tmp 690: ', & 10207 ! & 'fin du cas condensation_nofacftmr' 10248 10208 do il=1,ncas_condensation_nofacftmr 10249 10209 call iso_verif_traceur(xtp & … … 10727 10687 10728 10688 #ifdef ISOVERIF 10729 write(*,*) 'appel_stewart_np tmp 898 après compress glace'10689 ! write(*,*) 'appel_stewart_np tmp 898 apres compress glace' 10730 10690 ! write(*,*) 'qp_avantevap_cas(1),qp_avantevap(cas(1))=', 10731 10691 ! & qp_avantevap_cas(1),qp_avantevap(cas_evap_glace(1)) 10732 write(*,*) 'Pqiinf_stewart(1)=',Pqiinf_stewart(1)10692 !write(*,*) 'Pqiinf_stewart(1)=',Pqiinf_stewart(1) 10733 10693 ! vérif de la compression 10734 10694 do il=1,ncas_evap_glace … … 11026 10986 & ) 11027 10987 11028 USE infotrac_phy, ONLY: niso,ntraciso11029 10988 USE isotopes_mod, ONLY: iso_eau, iso_HDO,Rdefault,ridicule 11030 10989 #ifdef ISOVERIF … … 11176 11135 & ,xtp_cas,xtwater_cas,xtevap_cas) 11177 11136 11178 USE infotrac_phy, ONLY: niso,ntraciso11179 11137 USE isotopes_mod, ONLY: iso_eau, iso_HDO,Rdefault,no_pce,ridicule 11180 11138 #ifdef ISOVERIF … … 11311 11269 & fac_ftmr_cas(1)) 11312 11270 else !if (no_pce.eq.1) then 11313 #ifdef ISOVERIF 11314 write(*,*) 'appel_stewart_np 1957 tmp' 11315 #endif 11271 11316 11272 call stewart_explicite_vectall(ncas, & 11317 11273 & qp_avantevap_cas(1),xtp_avantevap_cas(1,1), & … … 11776 11732 & ,xtp_cas,xtwater_cas,xtevap_cas) 11777 11733 11778 USE infotrac_phy, ONLY: niso,ntraciso11779 11734 USE isotopes_mod, ONLY: iso_eau, iso_HDO, Rdefault, ridicule 11780 11735 #ifdef ISOVERIF … … 11857 11812 & T_cas(1)) 11858 11813 else !if (frac_sublim.eq.1) then 11859 #ifdef ISOVERIF11860 write(*,*) 'appel_stewart_explicite_np 2269'11861 write(*,*) 'Pqiinf_stewart(1)=',Pqiinf_stewart(1)11862 write(*,*) 'Pqisup_cas(1)=',Pqisup_cas(1)11863 write(*,*) 'Eqi_cas(1)=',Eqi_cas(1)11864 write(*,*) 'Eqi_prime_cas(1)=',Eqi_prime_cas(1)11865 write(*,*) 'Eqi_stewart(1)=',Eqi_stewart(1)11866 #endif11814 !#ifdef ISOVERIF 11815 ! write(*,*) 'appel_stewart_explicite_np 2269' 11816 ! write(*,*) 'Pqiinf_stewart(1)=',Pqiinf_stewart(1) 11817 ! write(*,*) 'Pqisup_cas(1)=',Pqisup_cas(1) 11818 ! write(*,*) 'Eqi_cas(1)=',Eqi_cas(1) 11819 ! write(*,*) 'Eqi_prime_cas(1)=',Eqi_prime_cas(1) 11820 ! write(*,*) 'Eqi_stewart(1)=',Eqi_stewart(1) 11821 !#endif 11867 11822 call stewart_sublim_nofrac_vectall( & 11868 11823 & ncas,qp_avantevap_cas(1), & … … 12204 12159 & tcond,zfice,zxtice,zxtliq) 12205 12160 12206 USE infotrac_phy, ONLY: ntraciso,niso12207 12161 USE isotopes_mod, ONLY: iso_eau,iso_HDO,essai_convergence, & 12208 12162 & bidouille_anti_divergence,ridicule … … 12438 12392 & tcond,zfice,zxtice,zxtliq,n) 12439 12393 12440 USE infotrac_phy, ONLY: ntraciso,niso12441 12394 USE isotopes_mod, ONLY: iso_eau,iso_HDO,iso_O18,bidouille_anti_divergence, & 12442 12395 & ridicule … … 12896 12849 & tcond,zfice,zxtice,zxtliq) 12897 12850 12898 USE infotrac_phy, ONLY: ntraciso12899 12851 USE isotopes_mod, ONLY: iso_eau,iso_HDO,bidouille_anti_divergence, & 12900 12852 & ridicule,iso_O18 … … 13094 13046 & xt1lay,q1lay,tsurf,t_coup,nisurf,Rland_ice) 13095 13047 13096 USE infotrac_phy, ONLY: ntraciso,niso13097 13048 USE isotopes_mod, ONLY: Rdefault,iso_eau,iso_HDO, & 13098 13049 & bidouille_anti_divergence, ridicule,ridicule_snow, & … … 13664 13615 & ) 13665 13616 13666 USE infotrac_phy, ONLY: ntraciso,niso13667 13617 USE isotopes_mod, ONLY: iso_eau,iso_HDO,cste_surf_cond, & 13668 13618 & rh_cste_surf_cond,Rdefault,T_cste_surf_cond,iso_O17,iso_O18, & … … 13988 13938 & ) 13989 13939 13990 USE infotrac_phy, ONLY: ntraciso,niso13991 13940 USE isotopes_mod, ONLY: tcorr, toce, alpha_liq_sol,ridicule_evap, & 13992 13941 iso_eau,iso_HDO … … 14050 13999 14051 14000 #ifdef ISOVERIF 14052 write(*,*) 'calcul_iso_surf_sic 175: entree'14053 #endif14054 #ifdef ISOVERIF14055 14001 do i=1,knon 14056 14002 do ixt=1,ntraciso … … 14247 14193 & ) 14248 14194 14249 USE infotrac_phy, ONLY: ntraciso,niso14250 14195 USE isotopes_mod, ONLY: h_land_ice, ridicule,ridicule_snow,ridicule_evap, & 14251 14196 iso_eau,iso_HDO,iso_O18 … … 14582 14527 & ) 14583 14528 14584 USE infotrac_phy, ONLY: niso,ntraciso14585 14529 USE isotopes_mod, ONLY: tdifrel,tdifexp_sol, iso_eau, iso_HDO, & 14586 14530 & bidouille_anti_divergence,ruissellement_pluie, Rdefault,Kd, & … … 14718 14662 14719 14663 #ifdef ISOVERIF 14720 write(*,*) 'calcul_iso_surf_ter 494'14664 ! write(*,*) 'calcul_iso_surf_ter 494' 14721 14665 do i=1,knon 14722 14666 if (iso_eau.gt.0) then … … 14766 14710 #endif 14767 14711 #ifdef ISOVERIF 14768 write(*,*) 'calcul_iso_surf_ter 910'14712 ! write(*,*) 'calcul_iso_surf_ter 910' 14769 14713 do i=1,knon 14770 14714 if (iso_eau.gt.0) then … … 16010 15954 !USE write_field_phy 16011 15955 USE indice_sol_mod, only: nbsrf 16012 USE infotrac_phy, ONLY: ntraciso,niso16013 15956 USE isotopes_mod, ONLY: initialisation_iso, iso_eau,iso_HDO, & 16014 15957 ridicule_qsol,tnat, P_veg,iso_O18,ridicule, ridicule_snow,iso_O17, & … … 16025 15968 #include "dimsoil.h" 16026 15969 #include "clesphys.h" 16027 #include "thermcell.h"16028 15970 #include "compbl.h" 16029 15971 … … 16072 16014 ! write(*,*) 'xtsnow(4,8,1)=',xtsnow(4,8,1) 16073 16015 #ifdef ISOVERIF 16074 write(*,*) 'phyiso_etat0 15993 tmp: xtsol(iso_eau,1),qsol(1)=',xtsol(iso_eau,1),qsol(1)16075 16016 do i=1,klon 16076 16017 do ixt=1,niso … … 16198 16139 !USE write_field_phy 16199 16140 USE indice_sol_mod, only: nbsrf 16200 USE infotrac_phy, ONLY: ntraciso,niso16201 16141 USE isotopes_mod, ONLY: tnat,iso_HDO,iso_O18,iso_HTO, iso_eau,toce, & 16202 16142 & Rdefault,iso_O17,ridicule,ridicule_qsol … … 16211 16151 #include "dimsoil.h" 16212 16152 #include "clesphys.h" 16213 #include "thermcell.h"16153 ! #include "thermcell.h" 16214 16154 #include "compbl.h" 16215 16155 … … 16377 16317 & *(1-kcin(ixt))/(1.0-kcin(ixt)*h0) 16378 16318 xt_ancien(ixt,i,k)=q_ancien(i,k)*RMerlivat(ixt) & 16379 & *( q_ancien(i,k)/q0)**(alpha(ixt)-1.0)16319 & *(min(q0,q_ancien(i,k))/q0)**(alpha(ixt)-1.0) 16380 16320 if (q_ancien(i,k).gt.ridicule) then 16381 16321 xtl_ancien(ixt,i,k)=ql_ancien(i,k)*alpha(ixt) & … … 16477 16417 16478 16418 #ifdef ISOVERIF 16419 write(*,*) 'phyisoetat0 16468: verif init dure' 16479 16420 do i=1,klon 16480 16421 do ixt=1,niso … … 16508 16449 if (iso_eau.gt.0) then 16509 16450 call iso_verif_egalite(xt_ancien(iso_eau,i,k), & 16510 & q_ancien(i,k),'phyiso_etat0_dur 775 ')16451 & q_ancien(i,k),'phyiso_etat0_dur 775a') 16511 16452 endif !if (iso_eau.gt.0) then 16453 if (iso_HDO.gt.0) then 16454 if (q_ancien(i,k).gt.ridicule) then 16455 call iso_verif_aberrant_encadre( & 16456 & xt_ancien(iso_hdo,i,k)/q_ancien(i,k), & 16457 & 'phyiso_etat0_dur 775b') 16458 endif !if (q_ancien(i,k).gt.ridicule) then 16459 endif !if (iso_HDO.gt.0) then 16460 if ((iso_HDO.gt.0).and.(iso_O18.gt.0)) then 16461 if (q_ancien(i,k).gt.ridicule) then 16462 call iso_verif_O18_aberrant( & 16463 & xt_ancien(iso_hdo,i,k)/q_ancien(i,k), & 16464 & xt_ancien(iso_O18,i,k)/q_ancien(i,k), & 16465 & 'phyiso_etat0_dur 775c') 16466 endif ! if (q_ancien(i,k).gt.ridicule) then 16467 endif ! if ((iso_HDO.gt.0).and.(iso_O18.gt.0)) then 16512 16468 enddo !do k=1,klev 16513 16469 do nsrf=1,nbsrf … … 16552 16508 end subroutine phyiso_etat0_dur 16553 16509 16554 subroutine phyiso_etat0_fichier( & 16555 & snow,run_off_lic_0, & 16556 & xtsnow,xtrun_off_lic_0, & 16557 & Rland_ice) 16558 USE dimphy, only: klon,klev 16559 !USE mod_grid_phy_lmdz 16560 !USE mod_phys_lmdz_para 16561 USE iophy 16562 USE phys_state_var_mod, ONLY: q_ancien,xt_ancien,wake_deltaq,wake_deltaxt, & 16563 #ifdef ISOVERIF 16564 rain_fall,snow_fall,fevap,qsol, & 16565 #endif 16566 xtrain_fall,xtsnow_fall,ql_ancien,xtl_ancien,qs_ancien,xts_ancien, & 16567 fxtevap,xtsol 16568 !USE iostart 16569 !USE write_field_phy 16570 USE indice_sol_mod, only: nbsrf 16571 USE infotrac_phy, ONLY: ntraciso,niso 16572 USE isotopes_mod, ONLY: striso,iso_HDO,iso_eau 16573 #ifdef ISOVERIF 16574 USE isotopes_verif_mod 16510 SUBROUTINE phyiso_etat0_fichier(snow, run_off_lic_0, xtsnow, xtrun_off_lic_0, Rland_ice) 16511 USE dimphy, ONLY: klon,klev 16512 USE iophy 16513 USE phys_state_var_mod, ONLY: q_ancien, xt_ancien, wake_deltaq, wake_deltaxt, & 16514 #ifdef ISOVERIF 16515 rain_fall, snow_fall, fevap,qsol, & 16516 #endif 16517 xtrain_fall, xtsnow_fall, ql_ancien, xtl_ancien, qs_ancien, xts_ancien, fxtevap, xtsol 16518 USE indice_sol_mod, ONLY: nbsrf 16519 USE isotopes_mod, ONLY: isoName,iso_HDO,iso_eau 16520 USE phyetat0_mod, ONLY: phyetat0_get, phyetat0_srf 16521 USE readTracFiles_mod, ONLY: new2oldH2O 16522 USE strings_mod, ONLY: strIdx, strHead, strTail, maxlen, msg, int2str 16523 #ifdef ISOVERIF 16524 USE isotopes_verif_mod 16575 16525 #endif 16576 16526 #ifdef ISOTRAC 16577 USE isotrac_mod, ONLY: strtrac,initialisation_isotrac,index_iso, & 16578 & index_zone,izone_init 16579 #endif 16580 implicit none 16527 USE isotrac_mod, ONLY: strtrac, initialisation_isotrac, index_iso, index_zone, izone_init 16528 #endif 16529 IMPLICIT NONE 16581 16530 16582 16531 #include "netcdf.inc" 16583 16532 #include "dimsoil.h" 16584 16533 #include "clesphys.h" 16585 #include "thermcell.h"16586 16534 #include "compbl.h" 16587 16535 16588 ! inputs 16589 !REAL qsol(klon) 16590 REAL snow(klon,nbsrf) 16591 !REAL evap(klon,nbsrf) 16592 REAL run_off_lic_0(klon) 16593 ! outputs 16594 !REAL xtsol(niso,klon) 16595 REAL xtsnow(niso,klon,nbsrf) 16596 !REAL xtevap(ntraciso,klon,nbsrf) 16597 REAL xtrun_off_lic_0(niso,klon) 16598 REAL Rland_ice(niso,klon) 16599 16600 ! locals 16601 real iso_tmp(klon) 16602 real iso_tmp_lonlev(klon,klev) 16603 real iso_tmp_lonsrf(klon,nbsrf) 16604 INTEGER ierr 16605 integer i,ixt,k,nsrf 16606 INTEGER nid, nvarid 16607 CHARACTER*2 str2 16608 CHARACTER*5 str5 16609 real xmin,xmax 16610 CHARACTER*50 striso_sortie 16611 integer lnblnk 16612 LOGICAL :: found,phyetat0_get,phyetat0_srf 16613 16614 !#ifdef ISOVERIF 16615 ! integer iso_verif_egalite_nostop 16616 !#endif 16617 !#ifdef ISOVERIF 16618 ! real deltaD 16619 ! integer iso_verif_noNaN_nostop 16620 !#endif 16536 REAL, INTENT(IN) :: snow (klon,nbsrf) 16537 REAL, INTENT(IN) :: run_off_lic_0 (klon) 16538 REAL, INTENT(OUT) :: xtsnow(niso,klon,nbsrf) 16539 REAL, INTENT(OUT) :: xtrun_off_lic_0(niso,klon) 16540 REAL, INTENT(OUT) :: Rland_ice(niso,klon) 16541 16542 INTEGER :: ierr, i, ixt, k, nsrf, nid, nvarid, lnblnk 16543 CHARACTER(LEN=2) :: str2 16544 CHARACTER(LEN=5) :: str5 16545 CHARACTER(LEN=maxlen) :: outiso, oldIso, modname, nam(2) 16546 REAL :: xmin, xmax 16547 LOGICAL :: found 16621 16548 #ifdef ISOTRAC 16622 integer iiso,izone16623 #endif 16624 16625 16626 write(*,*) 'phyiso_etat0_fichier 3'16627 write(*,*) 'niso=',niso16628 write(*,*) 'striso(1)=',striso(1)16629 16630 do ixt=1,ntraciso16631 16632 if (ixt.le.niso) then16633 striso_sortie=striso(ixt)16634 else16549 INTEGER :: iiso, izone 16550 #endif 16551 16552 modname = 'phyiso_etat0_fichier' 16553 CALL msg('3', modname) 16554 CALL msg('niso = '//TRIM(int2str(niso)), modname) 16555 CALL msg('isoName(1) = '//TRIM(isoName(1)), modname) 16556 16557 DO ixt = 1, ntraciso 16558 16559 outiso = isoName(ixt) 16560 oldIso = strTail(new2oldH2O(outiso), '_', lFirst=.TRUE.) 16561 ! on lit seulement si ixt<=niso ou si on initialise les traceurs d'après fichier: 16635 16562 #ifdef ISOTRAC 16636 iiso=index_iso(ixt) 16637 izone=index_zone(ixt) 16638 striso_sortie=striso(iiso)//strtrac(izone) 16639 #else 16640 write(*,*) 'phyredem 546: ixt,ntraciso=', ixt,ntraciso 16641 stop 16642 #endif 16643 endif !if (ixt.le.niso) then 16644 write(*,*) 'phyiso_etat0_fichier 16621: ixt,striso_sortie=',ixt,striso_sortie(1:lnblnk(striso_sortie)) 16645 16646 16647 ! on lit seulement si ixt<=niso ou si on initialise les traceurs d'après 16648 ! fichier: 16563 IF(ixt <= niso .OR. initialisation_isotrac == 0) THEN 16564 #endif 16565 found = phyetat0iso_srf3(xtsnow, "XTSNOW", "Surface snow", 0.) 16566 if (.NOT.found) CALL abort_physic('isotopes_routines_mod', 'phyiso_etat0_fichier 16581: unfound isotopic variable',1) 16567 found = phyetat0iso_srf3(fxtevap, "XTEVAP", "evaporation", 0.) 16568 found = phyetat0iso_get2(xtrain_fall, "xtrain_f", "xrain fall", 0.) 16569 found = phyetat0iso_get2(xtrain_fall, "xtsnow_f", "xsnow fall", 0.) 16570 found = phyetat0iso_get3(xt_ancien, "XTANCIEN", "QANCIEN", 0.) 16571 found = phyetat0iso_get3(xtl_ancien, "XTLANCIEN", "QLANCIEN", 0.) 16572 found = phyetat0iso_get3(xts_ancien, "XTASNCIEN", "QSANCIEN", 0.) 16573 found = phyetat0iso_get2(xtrun_off_lic_0, "XTRUNOFFLIC0", "RUNOFFLIC0", 0.) 16574 found = phyetat0iso_get3(wake_deltaxt, "WAKE_DELTAXT", "Delta hum. wake/env", 0.) 16575 #ifdef ISOVERIF 16576 IF(ixt == iso_eau .AND. iso_eau > 0) THEN 16577 DO i=1,klon 16578 CALL iso_verif_egalite(xtrain_fall(iso_eau,i),rain_fall(i),TRIM(modname)//' 231a') 16579 CALL iso_verif_egalite(xtsnow_fall(iso_eau,i),snow_fall(i),TRIM(modname)//' 231b') 16580 DO nsrf = 1, nbsrf 16581 CALL iso_verif_egalite(fxtevap(iso_eau,i,nsrf),fevap(i,nsrf),TRIM(modname)//' 231c') 16582 CALL iso_verif_egalite( xtsnow(iso_eau,i,nsrf), snow(i,nsrf),TRIM(modname)//' 231d') 16583 END DO 16584 END DO 16585 END IF 16586 IF(ixt == iso_HDO .AND. iso_HDO > 0) THEN 16587 DO k=1,klev 16588 DO i=1,klon 16589 IF(q_ancien(i,k) > 2e-3) & 16590 CALL iso_verif_aberrant(xt_ancien(iso_hdo,i,k)/q_ancien(i,k),TRIM(modname)//' 312') 16591 END DO 16592 END DO 16593 END IF 16594 IF(iso_eau > 0 .AND. ixt == iso_eau) THEN 16595 DO i=1,klon 16596 IF(iso_verif_egalite_nostop(run_off_lic_0(i),xtrun_off_lic_0(iso_eau,i),TRIM(modname)//' 326') == 1) THEN 16597 WRITE(*,*) 'i=',i 16598 STOP 16599 END IF 16600 END DO 16601 END IF 16602 #endif 16603 ! ces variables n'ont pas de traceurs: 16604 IF(ixt <= niso) THEN 16605 found = phyetat0iso_get2(xtsol, "XTSOL", "Surface humidity / bucket", 0.) 16606 found = phyetat0iso_get2(Rland_ice, "Rland_ice", "SR land ice", 0.) 16607 #ifdef ISOVERIF 16608 16609 DO i=1,klon 16610 IF(iso_verif_noNaN_nostop(xtsol(ixt,i),TRIM(modname)//' 95') == 1) THEN 16611 WRITE(*,*) 'ixt,i=',ixt,i 16612 STOP 16613 END IF 16614 END DO 16615 #endif 16616 END IF 16649 16617 #ifdef ISOTRAC 16650 if ((ixt.le.niso).or.(initialisation_isotrac.eq.0)) then 16651 #endif 16652 16653 found=phyetat0_srf(1,iso_tmp_lonsrf,"XTSNOW"//striso_sortie(1:lnblnk(striso_sortie)), & 16654 & "Surface snow",0.) 16655 if (.NOT.found) then 16656 CALL abort_physic('isotopes_routines_mod', & 16657 'phyiso_etat0_fichier 16581: variable isotopique not found',1) 16658 endif 16659 xtsnow(ixt,:,:)=iso_tmp_lonsrf(:,:) 16660 16661 found=phyetat0_srf(1,iso_tmp_lonsrf,"XTEVAP"//striso_sortie & 16662 & (1:lnblnk(striso_sortie)),"evaporation",0.) 16663 fxtevap(ixt,:,:)=iso_tmp_lonsrf(:,:) 16664 16665 found=phyetat0_get(1,iso_tmp,"xtrain_f"//striso_sortie & 16666 & (1:lnblnk(striso_sortie)),"xrain fall",0.) 16667 xtrain_fall(ixt,:)=iso_tmp(:) 16668 16669 found=phyetat0_get(1,iso_tmp,"xtsnow_f"//striso_sortie & 16670 & (1:lnblnk(striso_sortie)),"snow fall",0.) 16671 xtsnow_fall(ixt,:)=iso_tmp(:) 16672 16673 found=phyetat0_get(klev,iso_tmp_lonlev,"XTANCIEN"//striso_sortie & 16674 & (1:lnblnk(striso_sortie)),"QANCIEN",0.) 16675 xt_ancien(ixt,:,:)=iso_tmp_lonlev(:,:) 16676 16677 found=phyetat0_get(klev,iso_tmp_lonlev,"XTLANCIEN"//striso_sortie & 16678 & (1:lnblnk(striso_sortie)),"QLANCIEN",0.) 16679 xtl_ancien(ixt,:,:)=iso_tmp_lonlev(:,:) 16680 16681 found=phyetat0_get(klev,iso_tmp_lonlev,"XTSANCIEN"//striso_sortie & 16682 & (1:lnblnk(striso_sortie)),"QSANCIEN",0.) 16683 xts_ancien(ixt,:,:)=iso_tmp_lonlev(:,:) 16684 16685 16686 found=phyetat0_get(1,iso_tmp,"XTRUNOFFLIC0"//striso_sortie(1:lnblnk(striso_sortie)), & 16687 & "RUNOFFLIC0",0.) 16688 xtrun_off_lic_0(ixt,:)=iso_tmp(:) 16689 16690 16691 found=phyetat0_get(klev,iso_tmp_lonlev,"WAKE_DELTAXT"//striso_sortie & 16692 & (1:lnblnk(striso_sortie)),"Delta hum. wake/env",0.) 16693 wake_deltaxt(ixt,:,:)=iso_tmp_lonlev(:,:) 16694 16695 #ifdef ISOVERIF 16696 if ((ixt.eq.iso_eau).and.(iso_eau.gt.0)) then 16697 do i=1,klon 16698 call iso_verif_egalite(xtrain_fall(iso_eau,i),rain_fall(i), & 16699 & 'phyisoetat0_fichier 231a') 16700 call iso_verif_egalite(xtsnow_fall(iso_eau,i),snow_fall(i), & 16701 & 'phyisoetat0_fichier 231b') 16702 DO nsrf = 1, nbsrf 16703 call iso_verif_egalite(fxtevap(iso_eau,i,nsrf),fevap(i,nsrf), & 16704 & 'phyisoetat0_fichier 231c') 16705 call iso_verif_egalite(xtsnow(iso_eau,i,nsrf),snow(i,nsrf), & 16706 & 'phyisoetat0_fichier 231d') 16707 enddo !DO nsrf = 1, nbsrf 16708 enddo !do i=1,klon 16709 endif !if (iso_eau.gt.0) then 16710 if ((iso_HDO.gt.0).and.(ixt.eq.iso_HDO)) then 16711 do k=1,klev 16712 do i=1,klon 16713 if (q_ancien(i,k).gt.2e-3) then 16714 call iso_verif_aberrant(xt_ancien(iso_hdo,i,k) & 16715 & /q_ancien(i,k),'phyisoetat0_fichier 312') 16716 endif !if (q_ancien(i,k).gt.2e-3) then 16717 enddo !do i=1,klon 16718 enddo !do k=1,klev 16719 endif !if ((iso_HDO.gt.0).and.(ixt.eq.iso_HDO)) then 16720 if (iso_eau.gt.0) then 16721 do i=1,klon 16722 if (iso_verif_egalite_nostop(run_off_lic_0(i), & 16723 & xtrun_off_lic_0(iso_eau,i), & 16724 & 'phyiso_etat0_fichier 326').eq.1) then 16725 write(*,*) 'i=',i 16726 stop 16727 endif !if (iso_verif_egalite_nostop(run_off_lic_0(i), 16728 enddo !do i=1,klon 16729 endif !if (iso_eau.gt.0) then 16730 #endif 16731 16732 ! ces variables n'ont pas de traceurs: 16733 if (ixt.le.niso) then 16734 found=phyetat0_get(1,iso_tmp,"XTSOL"//striso_sortie(1:lnblnk(striso_sortie)), & 16735 & "Surface hmidity / bucket",0.) 16736 xtsol(ixt,:)=iso_tmp(:) 16737 16738 found=phyetat0_get(1,iso_tmp,"Rland_ice"//striso_sortie & 16739 & (1:lnblnk(striso_sortie)),"R land ice",0.) 16740 Rland_ice(ixt,:)=iso_tmp(:) 16741 16742 #ifdef ISOVERIF 16743 do i=1,klon 16744 if (iso_verif_noNaN_nostop(xtsol(ixt,i), & 16745 & 'phyiso_etat0_fichier 95').eq.1) then 16746 write(*,*) 'ixt,i=',ixt,i 16747 stop 16748 endif 16749 enddo !do i=1,klon 16750 #endif 16751 16752 endif 16618 END IF ! IF(ixt > niso .OR. initialisation_isotrac == 0)) 16619 #endif 16620 16621 END DO 16753 16622 16754 16623 #ifdef ISOTRAC 16755 endif !if ((ixt.le.niso).or.(initialisation_isotrac.eq.0)) then 16756 #endif 16757 16758 enddo !do ixt=1,ntraciso 16759 16760 #ifdef ISOTRAC 16761 if (initialisation_isotrac.ne.0) then 16762 ! on n'initialise pas d'après le fichier 16763 ! l'eau normale est mise dans la zone izone_init 16764 16765 do ixt=niso+1,ntraciso 16766 16767 iiso=index_iso(ixt) 16768 16769 if (index_zone(ixt).eq.izone_init) then 16770 do i=1,klon 16771 do nsrf = 1, nbsrf 16772 fxtevap(ixt,i,nsrf)=fxtevap(iiso,i,nsrf) 16773 enddo !do nsrf = 1, nbsrf 16774 xtsnow_fall(ixt,i)=xtsnow_fall(iiso,i) 16775 xtrain_fall(ixt,i)=xtrain_fall(iiso,i) 16776 do k=1,klev 16777 xt_ancien(ixt,i,k)=xt_ancien(iiso,i,k) 16778 xtl_ancien(ixt,i,k)=xtl_ancien(iiso,i,k) 16779 xts_ancien(ixt,i,k)=xts_ancien(iiso,i,k) 16780 wake_deltaxt(ixt,i,k)= wake_deltaxt(iiso,i,k) 16781 enddo 16782 enddo !do i=1,klon 16783 else !if (index_zone(ixt).eq.izone_init) then 16784 do i=1,klon 16785 do nsrf = 1, nbsrf 16786 fxtevap(ixt,i,nsrf)=0.0 16787 enddo !do nsrf = 1, nbsrf 16788 xtsnow_fall(ixt,i)=0.0 16789 xtrain_fall(ixt,i)=0.0 16790 do k=1,klev 16791 xt_ancien(ixt,i,k)=0.0 16792 xtl_ancien(ixt,i,k)=0.0 16793 xts_ancien(ixt,i,k)=0.0 16794 enddo 16795 enddo !do i=1,klon 16796 endif !if (index_zone(ixt).eq.izone_init) then 16797 16798 enddo !do ixt=1,niso 16799 endif !if (initialisation_isotrac.eq.0) then 16800 16801 16802 #ifdef ISOVERIF 16803 DO nsrf = 1, nbsrf 16804 do i=1,klon 16805 call iso_verif_traceur(fxtevap(1,i,nsrf), & 16806 & 'phyiso_etat0_fichier 426') 16807 enddo !do i=1,klon 16808 enddo !DO nsrf = 1, nbsrf 16809 do i=1,klon 16810 call iso_verif_traceur(xtrain_fall(1,i), & 16811 & 'phyiso_etat0_fichier 466') 16812 call iso_verif_traceur(xtsnow_fall(1,i), & 16813 & 'phyiso_etat0_fichier 468') 16814 enddo !do i=1,klon 16815 do k=1,klev 16816 do i=1,klon 16817 call iso_verif_traceur(xt_ancien(1,i,k), & 16818 & 'phyiso_etat0_fichier 591') 16819 enddo !do i=1,klon 16820 enddo !do k=1,klev 16624 IF(initialisation_isotrac /= 0) THEN 16625 ! On n'initialise pas d'apres le fichier. L'eau normale est mise dans la zone izone_init 16626 DO ixt=niso+1,ntraciso 16627 iiso=index_iso(ixt) 16628 IF(index_zone(ixt) == izone_init) THEN 16629 DO i = 1, klon 16630 fxtevap(ixt,i,1:nsrf) = fxtevap(iiso,i,1:nsrf) 16631 xtsnow_fall(ixt,i) = xtsnow_fall(iiso,i) 16632 xtrain_fall(ixt,i) = xtrain_fall(iiso,i) 16633 DO k = 1, klev 16634 xt_ancien (ixt,i,k) = xt_ancien (iiso,i,k) 16635 xtl_ancien (ixt,i,k) = xtl_ancien (iiso,i,k) 16636 xts_ancien (ixt,i,k) = xts_ancien (iiso,i,k) 16637 wake_deltaxt(ixt,i,k) = wake_deltaxt(iiso,i,k) 16638 END DO 16639 END DO 16640 ELSE 16641 DO i = 1, klon 16642 fxtevap(ixt,i,1:nbsrf)=0.0 16643 xtsnow_fall(ixt,i)=0.0 16644 xtrain_fall(ixt,i)=0.0 16645 xt_ancien (ixt,i,1:klev) = 0.0 16646 xtl_ancien(ixt,i,1:klev) = 0.0 16647 xts_ancien(ixt,i,1:klev) = 0.0 16648 END DO 16649 END IF 16650 END DO 16651 END IF 16652 16653 #ifdef ISOVERIF 16654 DO nsrf = 1, nbsrf 16655 DO i = 1, klon 16656 CALL iso_verif_traceur(fxtevap(1,i,nsrf), 'phyiso_etat0_fichier 426') 16657 END DO 16658 END DO 16659 DO i=1,klon 16660 CALL iso_verif_traceur(xtrain_fall(1,i), 'phyiso_etat0_fichier 466') 16661 CALL iso_verif_traceur(xtsnow_fall(1,i), 'phyiso_etat0_fichier 468') 16662 END DO 16663 DO k = 1, klev 16664 DO i = 1, klon 16665 CALL iso_verif_traceur(xt_ancien(1,i,k), 'phyiso_etat0_fichier 591') 16666 END DO 16667 END DO 16821 16668 #endif 16822 16669 ! endif ISOVERIF … … 16824 16671 ! endif ISOTRAC 16825 16672 16826 ! on ferme le fichier 16827 ! CALL close_startphy 16828 ! déjà fermé dans phyetat0 16673 CONTAINS 16674 16675 LOGICAL FUNCTION phyetat0iso_get2(field, pref, descr, default) RESULT(lFound) 16676 REAL, INTENT(INOUT) :: field(:,:) 16677 CHARACTER(LEN=*), INTENT(IN) :: pref, descr 16678 REAL, INTENT(IN) :: default 16679 REAL :: iso_tmp(klon) 16680 nam(1) = TRIM(pref)//TRIM(outiso) 16681 nam(2) = TRIM(pref)//TRIM(oldIso) 16682 lFound = phyetat0_get(iso_tmp, nam, descr, default) 16683 field(ixt,:) = iso_tmp 16684 END FUNCTION phyetat0iso_get2 16685 16686 16687 LOGICAL FUNCTION phyetat0iso_get3(field, pref, descr, default) RESULT(lFound) 16688 REAL, INTENT(INOUT) :: field(:,:,:) 16689 CHARACTER(LEN=*), INTENT(IN) :: pref, descr 16690 REAL, INTENT(IN) :: default 16691 REAL :: iso_tmp_lonlev(klon,klev) 16692 nam(1) = TRIM(pref)//TRIM(outiso) 16693 nam(2) = TRIM(pref)//TRIM(oldIso) 16694 lFound = phyetat0_get(iso_tmp_lonlev, nam, descr, default) 16695 field(ixt,:,:) = iso_tmp_lonlev(:,:) 16696 END FUNCTION phyetat0iso_get3 16697 16698 LOGICAL FUNCTION phyetat0iso_srf3(field, pref, descr, default) RESULT(lFound) 16699 REAL, INTENT(INOUT) :: field(:,:,:) 16700 CHARACTER(LEN=*), INTENT(IN) :: pref, descr 16701 REAL, INTENT(IN) :: default 16702 REAL :: iso_tmp_lonsrf(klon,nbsrf) 16703 nam(1) = TRIM(pref)//TRIM(outiso) 16704 nam(2) = TRIM(pref)//TRIM(oldIso) 16705 lFound = phyetat0_srf(iso_tmp_lonsrf, nam, descr, default) 16706 field(ixt,:,:) = iso_tmp_lonsrf 16707 END FUNCTION phyetat0iso_srf3 16829 16708 16830 16709 end subroutine phyiso_etat0_fichier 16710 16711 16831 16712 16832 16713 … … 16844 16725 & d_xt_decroiss, & 16845 16726 & xt_seri) 16846 USE infotrac_phy, only: ntraciso16847 16727 USE isotopes_mod, only: iso_HTO,ok_prod_nucl_tritium 16848 16728 USE dimphy, only: klon,klev … … 18366 18246 ! & prod_nucl_HTO) 18367 18247 18368 USE infotrac_phy, only: ntraciso18369 18248 use isotopes_mod, only: nessai, lat_nucl, lon_nucl, & 18370 18249 & zmin_nucl, zmax_nucl, HTO_nucl … … 18588 18467 & paprs, & 18589 18468 & prod_nucl) 18590 USE infotrac_phy, only: ntraciso18591 18469 USE isotopes_mod, ONLY: iso_HTO 18592 18470 use geometry_mod, only: cell_area … … 18734 18612 & tcond,zfice,zxtice,zxtliq) 18735 18613 18736 USE infotrac_phy, ONLY: ntraciso,niso,index_trac,ntraceurs_zone18737 18614 USE isotopes_mod, ONLY: iso_eau,iso_HDO,essai_convergence, & 18738 18615 & bidouille_anti_divergence,ridicule … … 18864 18741 & tcond,zfice,zxtice,zxtliq,n) 18865 18742 18866 USE infotrac_phy, ONLY: ntraciso,niso,index_trac,ntraceurs_zone18867 18743 USE isotopes_mod, ONLY: iso_eau,iso_HDO,iso_O18,bidouille_anti_divergence, & 18868 18744 & ridicule
Note: See TracChangeset
for help on using the changeset viewer.