Changeset 705
- Timestamp:
- Jun 14, 2012, 4:14:11 PM (13 years ago)
- Location:
- trunk/LMDZ.MARS
- Files:
-
- 2 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LMDZ.MARS/README
r704 r705 1706 1706 better thermals (this update should should have been done a while back...) 1707 1707 1708 == 14/06/12 == FGG 1709 - Added possibility to run with a varying EUV cycle following real one. 1710 The flag solvarmod=1 triggers this behaviour, with companion flag 1711 solvaryear=## , where ## is the Mars Year (from 23 to 30). 1712 Setting solvarmod=0 reverts to 'old' behaviour, where there is a constant 1713 EUV forcing throughout the run, set by the "solarcondate" flag. 1714 - Needs corresponding input data files ("param_v6" subdirectory of "EUV" 1715 subdirectory in "datadir"). 1716 - Added files jthermcalc_e107.F and param_read_e107.F in "aeronomars", 1717 modified files euvheat.F90, hrtherm.F, chemthermos.F90, param_v4.h and 1718 param_read.F in "aeronomars" and files inifis.F, physiq.F and callkeys.h 1719 in "phymars". 1720 -
trunk/LMDZ.MARS/deftank/callphys.def
r677 r705 45 45 # call NLTE radiative schemes ? matters only if callrad=T 46 46 callnlte = .true. 47 # NLTE 15um scheme to use. 48 # 0-> Old scheme, static oxygen 49 # 1-> Old scheme, dynamic oxygen 50 # 2-> New scheme 51 nltemodel = 1 47 52 # call CO2 NIR absorption ? matters only if callrad=T 48 53 callnirco2 = .true. 54 # NIR NLTE correction ? matters only if callnirco2=T 55 nircorr=1 49 56 # call turbulent vertical diffusion ? 50 57 calldifv = .true. … … 59 66 # Impose polar cap surface albedos as observed by TES? 60 67 TESicealbedo = .true. 68 ## Coefficient for Northern cap albedoes 69 TESice_Ncoef=1.6 70 ## Coefficient for Southern cap albedoes 71 TESice_Scoef=1.6 72 61 73 62 74 ## Radiative transfer options : … … 104 116 # call thermal conduction ? (only if callthermos=.true.) 105 117 callconduct = .false. 106 # call EUV heating ? (only if callthermos=.true.)107 calleuv=.false.108 118 # call molecular viscosity ? (only if callthermos=.true.) 109 119 callmolvis = .false. … … 112 122 # call thermospheric photochemistry ? (only if callthermos=.true.) 113 123 thermochem = .false. 124 # call EUV heating ? (only if callthermos=.true.) 125 calleuv=.false. 126 #Method to include solar variability? 127 #0-> Old method 1-> Variability with E10.7 as observed 128 solvarmod=1 114 129 # date for solar flux calculation: (1985 < date < 2002) 115 ## (Solar min=1996.4 ave=1993.4 max=1990.6) 130 ## (Solar min=1996.4 ave=1993.4 max=1990.6) ; Only used if solvarmod=0 116 131 solarcondate = 1993.4 117 132 #Solar variability as observed for MY? (must bebetween MY23 and MY30) 133 # (only matters if solvarmod=1) 134 solvaryear=24 135 # value for the UV heating efficiency 136 ##(experimental values between 0.19 and 0.23, lower values may 137 ## be used to compensate for low 15 um cooling) 138 euveff = 0.21 118 139 119 -
trunk/LMDZ.MARS/libf/aeronomars/chemthermos.F90
r635 r705 44 44 ! Local variables : 45 45 ! ----------------- 46 integer :: l ,iq46 integer :: l 47 47 integer,save :: nesptherm 48 48 real,allocatable :: rm(:,:) !number density (cm-3) … … 462 462 463 463 !Solar flux calculation 464 call flujo(solarcondate)!+zday/365.)465 464 466 465 !Photoabsorption coefficients 467 call jthermcalc(ig,chemthermod,rm,nesptherm,ztemp,zlocal,zenit) 466 if(solvarmod.eq.0) then 467 call flujo(solarcondate)!+zday/365.) 468 call jthermcalc(ig,chemthermod,rm,nesptherm,ztemp,zlocal,zenit) 469 else if(solvarmod.eq.1) then 470 call jthermcalc_e107(ig,chemthermod,rm,nesptherm,ztemp,zlocal,zenit,zday) 471 endif 472 468 473 469 474 !Chemistry -
trunk/LMDZ.MARS/libf/aeronomars/euvheat.F90
r635 r705 362 362 363 363 !Solar flux calculation 364 call flujo(solarcondate)364 if(solvarmod.eq.0) call flujo(solarcondate) 365 365 366 366 ! Not recommended for long runs … … 407 407 enddo 408 408 !Routine to calculate the UV heating 409 call hrtherm (ig,euvmod,rm,nespeuv,tx,zlocal,zenit, jtot)409 call hrtherm (ig,euvmod,rm,nespeuv,tx,zlocal,zenit,zday,jtot) 410 410 411 411 ! euveff=0.16 !UV heating efficiency. Following Fox et al. ASR 1996 -
trunk/LMDZ.MARS/libf/aeronomars/hrtherm.F
r635 r705 1 1 c********************************************************************** 2 2 3 subroutine hrtherm(ig,euvmod,rm,nespeuv,tx,iz,zenit, jtot)3 subroutine hrtherm(ig,euvmod,rm,nespeuv,tx,iz,zenit,zday,jtot) 4 4 5 5 … … 18 18 include 'param.h' 19 19 include 'param_v4.h' 20 include "callkeys.h" 20 21 21 22 … … 38 39 real zenit 39 40 real iz(nlayermx) 41 real zday 40 42 41 43 ! tracer indexes for the EUV heating: … … 99 101 100 102 !Calculation of photoabsortion coefficient 101 call jthermcalc(ig,euvmod,rm,nespeuv,tx,iz,zenit) 103 if(solvarmod.eq.0) then 104 call jthermcalc(ig,euvmod,rm,nespeuv,tx,iz,zenit) 105 else if (solvarmod.eq.1) then 106 call jthermcalc_e107(ig,euvmod,rm,nespeuv,tx,iz,zenit,zday) 107 do indexint=1,ninter 108 fluxtop(indexint)=1. 109 enddo 110 endif 102 111 103 112 !Total photoabsorption coefficient -
trunk/LMDZ.MARS/libf/aeronomars/param_read.F
r658 r705 15 15 16 16 integer i,j,k,inter !indexes 17 integer ierr ,lnblnk17 integer ierr 18 18 real nada 19 19 … … 89 89 !Tabulated column amount 90 90 open(210, status = 'old', 91 c $file=datafile(1:lnblnk(datafile))//'/EUVDAT/coln.dat',iostat=ierr) 92 $file=datafile 93 $ (1:lnblnk(datafile))//'/EUVDAT/param_v5/coln.dat',iostat=ierr) 91 c $file=trim(datafile)//'/EUVDAT/coln.dat',iostat=ierr) 92 $file=trim(datafile)//'/EUVDAT/param_v5/coln.dat',iostat=ierr) 94 93 95 94 IF (ierr.NE.0) THEN 96 write(*,*)'cant find directory EUVDAT and content coln.dat'95 write(*,*)'cant find directory EUVDAT containing param_v5 subdir' 97 96 write(*,*)'(in aeronomars/param_read.F)' 98 write(*,*)'It should be in :', datafile,'/'97 write(*,*)'It should be in :', trim(datafile),'/' 99 98 write(*,*)'1) You can change this directory address in ' 100 write(*,*)' file phymars/datafile.h'99 write(*,*)' callphys.def with datadir=/path/to/dir' 101 100 write(*,*)'2) If necessary, EUVDAT (and other datafiles)' 102 101 write(*,*)' can be obtained online on:' … … 106 105 107 106 !Tabulated photoabsorption coefficients 108 open(220,file=datafile 109 $ (1:lnblnk(datafile))//'/EUVDAT/param_v5/j2_an.dat') 110 open(230,file=datafile 111 $ (1:lnblnk(datafile))//'/EUVDAT/param_v5/j3_an.dat') 112 open(240,file=datafile 113 $ (1:lnblnk(datafile))//'/EUVDAT/param_v5/j1_an.dat') 114 open(250,file=datafile 115 $ (1:lnblnk(datafile))//'/EUVDAT/param_v5/j2_bn.dat') 116 open(260,file=datafile 117 $ (1:lnblnk(datafile))//'/EUVDAT/param_v5/j2_cn.dat') 118 open(300,file=datafile 119 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j2_dn.dat') 120 open(270,file=datafile 121 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j1_bn.dat') 122 open(280,file=datafile 123 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j1_cn.dat') 124 open(290,file=datafile 125 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j1_dn.dat') 126 open(150,file=datafile 127 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j4n.dat') 128 open(160,file=datafile 129 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j5n.dat') 130 open(170,file=datafile 131 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j6n.dat') 132 open(180,file=datafile 133 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j7n.dat') 134 open(390,file=datafile 135 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j8_an.dat') 136 open(400,file=datafile 137 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j8_bn.dat') 138 open(410,file=datafile 139 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j9n.dat') 140 open(420,file=datafile 141 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j10_an.dat') 142 open(430,file=datafile 143 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j10_bn.dat') 144 open(440,file=datafile 145 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j10_cn.dat') 146 open(450,file=datafile 147 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j11_an.dat') 148 open(460,file=datafile 149 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j11_bn.dat') 150 open(470,file=datafile 151 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j11_cn.dat') 152 open(480,file=datafile 153 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j12n.dat') 154 open(490,file=datafile 155 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j13_an.dat') 156 open(500,file=datafile 157 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j13_bn.dat') 158 open(510,file=datafile 159 $ (1:lnblnk(datafile))//'/EUVDAT//param_v5/j13_cn.dat') 107 open(220,file=trim(datafile)//'/EUVDAT/param_v5/j2_an.dat') 108 open(230,file=trim(datafile)//'/EUVDAT/param_v5/j3_an.dat') 109 open(240,file=trim(datafile)//'/EUVDAT/param_v5/j1_an.dat') 110 open(250,file=trim(datafile)//'/EUVDAT/param_v5/j2_bn.dat') 111 open(260,file=trim(datafile)//'/EUVDAT/param_v5/j2_cn.dat') 112 open(300,file=trim(datafile)//'/EUVDAT//param_v5/j2_dn.dat') 113 open(270,file=trim(datafile)//'/EUVDAT//param_v5/j1_bn.dat') 114 open(280,file=trim(datafile)//'/EUVDAT//param_v5/j1_cn.dat') 115 open(290,file=trim(datafile)//'/EUVDAT//param_v5/j1_dn.dat') 116 open(150,file=trim(datafile)//'/EUVDAT//param_v5/j4n.dat') 117 open(160,file=trim(datafile)//'/EUVDAT//param_v5/j5n.dat') 118 open(170,file=trim(datafile)//'/EUVDAT//param_v5/j6n.dat') 119 open(180,file=trim(datafile)//'/EUVDAT//param_v5/j7n.dat') 120 open(390,file=trim(datafile)//'/EUVDAT//param_v5/j8_an.dat') 121 open(400,file=trim(datafile)//'/EUVDAT//param_v5/j8_bn.dat') 122 open(410,file=trim(datafile)//'/EUVDAT//param_v5/j9n.dat') 123 open(420,file=trim(datafile)//'/EUVDAT//param_v5/j10_an.dat') 124 open(430,file=trim(datafile)//'/EUVDAT//param_v5/j10_bn.dat') 125 open(440,file=trim(datafile)//'/EUVDAT//param_v5/j10_cn.dat') 126 open(450,file=trim(datafile)//'/EUVDAT//param_v5/j11_an.dat') 127 open(460,file=trim(datafile)//'/EUVDAT//param_v5/j11_bn.dat') 128 open(470,file=trim(datafile)//'/EUVDAT//param_v5/j11_cn.dat') 129 open(480,file=trim(datafile)//'/EUVDAT//param_v5/j12n.dat') 130 open(490,file=trim(datafile)//'/EUVDAT//param_v5/j13_an.dat') 131 open(500,file=trim(datafile)//'/EUVDAT//param_v5/j13_bn.dat') 132 open(510,file=trim(datafile)//'/EUVDAT//param_v5/j13_cn.dat') 160 133 161 134 … … 310 283 311 284 !Parameters for the variation of the solar flux with 11 years cycle 312 open(100,file=datafile 313 $ (1:lnblnk(datafile))//'/EUVDAT/param_v5/varflujo.dat') 285 open(100,file=trim(datafile)//'/EUVDAT/param_v5/varflujo.dat') 314 286 read(100,*) 315 287 do i=1,24 … … 349 321 c CO2, O2, NO 350 322 351 open(120,file=datafile 352 $ (1:lnblnk(datafile))//'/EUVDAT/param_v5/efdis_inter.dat') 323 open(120,file=trim(datafile)//'/EUVDAT/param_v5/efdis_inter.dat') 353 324 read(120,*) 354 325 ! do i=1,21 -
trunk/LMDZ.MARS/libf/aeronomars/param_v4.h
r690 r705 9 9 common/uv/ crscabsi2,c1_16,c17_24,c25_29,c30_31,c32, & 10 10 & c33,c34,c35,c36,jfotsout,co2crsc195,co2crsc295, & 11 & t0,fluxtop,freccen,jabsifotsintpar 11 & t0,fluxtop,freccen,jabsifotsintpar,e107,date_e107,e107_tab, & 12 & coefit0,coefit1,coefit2,coefit3,coefit4 12 13 13 14 … … 30 31 real freccen(ninter) !representative wavelenght 31 32 real jabsifotsintpar(nz2,nabs,ninter) 33 real e107,date_e107(669),e107_tab(669) 34 real coefit0(ninter,nabs),coefit1(ninter,nabs) 35 real coefit2(ninter,nabs) 36 real coefit3(ninter,nabs),coefit4(ninter,nabs) 32 37 33 38 … … 172 177 real*8 tminnplus(nlayermx),tminnoplus(nlayermx) 173 178 real*8 tminn2plus(nlayermx) 174 real*8 tminhplus(nlayermx) ,tminhcoplus(nlayermx)179 real*8 tminhplus(nlayermx) 175 180 real*8 tminhco2plus(nlayermx) 176 181 -
trunk/LMDZ.MARS/libf/phymars/callkeys.h
r635 r705 16 16 17 17 COMMON/callkeys_i/iradia,iaervar,iddist,ilwd,ilwb,ilwn,ncouche & 18 & ,dustbin,nltemodel,nircorr 18 & ,dustbin,nltemodel,nircorr,solvarmod,solvaryear 19 19 20 20 COMMON/callkeys_r/topdustref,solarcondate,semi,alphan,euveff, & … … 47 47 integer ilwn 48 48 integer ncouche 49 integer solvarmod ! model for solar EUV variation 50 integer solvaryear ! mars year for realisticly varying solar EUV 49 51 50 52 logical rayleigh -
trunk/LMDZ.MARS/libf/phymars/inifis.F
r677 r705 584 584 write(*,*) " thermochem = ",thermochem 585 585 586 write(*,*) "Method to include solar variability" 587 write(*,*) "0-> old method (using solarcondate); ", 588 & "1-> variability wit E10.7" 589 solvarmod=1 590 call getin("solvarmod",solvarmod) 591 write(*,*) " solvarmod = ",solvarmod 592 586 593 write(*,*) "date for solar flux calculation:", 587 & " (1985 < date < 2002)" 594 & " (1985 < date < 2002)", 595 $ " (Only used if solvarmod=0)" 588 596 write(*,*) "(Solar min=1996.4 ave=1993.4 max=1990.6)" 589 597 solarcondate=1993.4 ! default value … … 591 599 write(*,*) " solarcondate = ",solarcondate 592 600 601 write(*,*) "Solar variability as observed for MY: " 602 write(*,*) "Only if solvarmod=1" 603 solvaryear=24 604 call getin("solvaryear",solvaryear) 605 write(*,*) " solvaryear = ",solvaryear 606 593 607 write(*,*) "UV heating efficiency:", 594 608 & "measured values between 0.19 and 0.23 (Fox et al. 1996)", -
trunk/LMDZ.MARS/libf/phymars/physiq.F
r698 r705 308 308 real rho(ngridmx,nlayermx) ! density 309 309 real vmr(ngridmx,nlayermx) ! volume mixing ratio 310 real rhopart(ngridmx,nlayermx) ! number density of a given species 310 311 real colden(ngridmx,nqmx) ! vertical column of tracers 311 312 REAL mtot(ngridmx) ! Total mass of water vapor (kg/m2) … … 429 430 c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 430 431 431 if (callthermos) call param_read 432 if (callthermos) then 433 if(solvarmod.eq.0) call param_read 434 if(solvarmod.eq.1) call param_read_e107 435 endif 432 436 #endif 433 437 c Initialize R and Cp as constant … … 561 565 CALL nltecool(ngrid,nlayer,nq,pplay,pt,pq,zdtnlte) 562 566 else if(nltemodel.eq.2) then 563 do ig=1,ngrid564 do l=1,nlayer565 co2vmr_gcm(ig,l)=pq(ig,l,igcm_co2)*566 $ mmean(ig,l)/mmol(igcm_co2)567 n2vmr_gcm(ig,l)=pq(ig,l,igcm_n2)*568 $ mmean(ig,l)/mmol(igcm_n2)569 covmr_gcm(ig,l)=pq(ig,l,igcm_co)*570 $ mmean(ig,l)/mmol(igcm_co)571 ovmr_gcm(ig,l)=pq(ig,l,igcm_o)*572 $ mmean(ig,l)/mmol(igcm_o)573 enddo574 enddo567 co2vmr_gcm(1:ngrid,1:nlayer)= 568 & pq(1:ngrid,1:nlayer,igcm_co2)* 569 & mmean(1:ngrid,1:nlayer)/mmol(igcm_co2) 570 n2vmr_gcm(1:ngrid,1:nlayer)= 571 & pq(1:ngrid,1:nlayer,igcm_n2)* 572 & mmean(1:ngrid,1:nlayer)/mmol(igcm_n2) 573 covmr_gcm(1:ngrid,1:nlayer)= 574 & pq(1:ngrid,1:nlayer,igcm_co)* 575 & mmean(1:ngrid,1:nlayer)/mmol(igcm_co) 576 ovmr_gcm(1:ngrid,1:nlayer)= 577 & pq(1:ngrid,1:nlayer,igcm_o)* 578 & mmean(1:ngrid,1:nlayer)/mmol(igcm_o) 575 579 576 580 CALL NLTEdlvr09_TCOOL(ngrid,nlayer,pplay*9.869e-6, … … 578 582 $ ovmr_gcm, zdtnlte ) 579 583 580 do ig=1,ngrid 581 do l=1,nlayer 582 zdtnlte(ig,l)=zdtnlte(ig,l)/86400. 583 enddo 584 enddo 584 zdtnlte(1:ngrid,1:nlayer)= 585 & zdtnlte(1:ngrid,1:nlayer)/86400. 585 586 endif 586 587 else … … 1549 1550 call wstats(ngrid,"v","Meridional (North-South) wind", 1550 1551 & "m.s-1",3,zv) 1551 ccall wstats(ngrid,"w","Vertical (down-up) wind",1552 c& "m.s-1",3,pw)1552 call wstats(ngrid,"w","Vertical (down-up) wind", 1553 & "m.s-1",3,pw) 1553 1554 call wstats(ngrid,"rho","Atmospheric density","kg/m3",3,rho) 1554 ccall wstats(ngrid,"pressure","Pressure","Pa",3,pplay)1555 call wstats(ngrid,"pressure","Pressure","Pa",3,pplay) 1555 1556 c call wstats(ngrid,"q2", 1556 1557 c & "Boundary layer eddy kinetic energy", … … 1624 1625 $ noms(iq) .ne. "ccn_mass" .and. 1625 1626 $ noms(iq) .ne. "ccn_number") then 1626 do l=1,nlayer1627 do ig=1,ngrid1628 vmr(ig,l)=zq(ig,l,iq)*mmean(ig,l)/mmol(iq)1629 end do1630 end do1627 vmr(1:ngrid,1:nlayer)=zq(1:ngrid,1:nlayer,iq) 1628 & *mmean(1:ngrid,1:nlayer)/mmol(iq) 1629 rhopart(1:ngrid,1:nlayer)=zq(1:ngrid,1:nlayer,iq) 1630 & *rho(1:ngrid,1:nlayer)*n_avog/ 1631 & (1000*mmol(iq)) 1631 1632 call wstats(ngrid,"vmr_"//trim(noms(iq)), 1632 1633 $ "Volume mixing ratio","mol/mol",3,vmr) 1634 ! call wstats(ngrid,"rho_"//trim(noms(iq)), 1635 ! $ "Number density","cm-3",3,rhopart) 1636 ! call writediagfi(ngrid,"rho_"//trim(noms(iq)), 1637 ! $ "Number density","cm-3",3,rhopart) 1633 1638 if ((noms(iq).eq."o") .or. (noms(iq).eq."co2").or. 1634 1639 $ (noms(iq).eq."o3")) then … … 1928 1933 c endif ! (submicron) 1929 1934 end if ! (tracer.and.(dustbin.ne.0)) 1935 1936 1937 c ---------------------------------------------------------- 1938 c Thermospheric outputs 1939 c ---------------------------------------------------------- 1940 1941 if(callthermos) then 1942 1943 call WRITEDIAGFI(ngridmx,"q15um","15 um cooling","K/s", 1944 $ 3,zdtnlte) 1945 call WRITEDIAGFI(ngridmx,"quv","UV heating","K/s", 1946 $ 3,zdteuv) 1947 call WRITEDIAGFI(ngridmx,"cond","Thermal conduction","K/s", 1948 $ 3,zdtconduc) 1949 call WRITEDIAGFI(ngridmx,"qnir","NIR heating","K/s", 1950 $ 3,zdtnirco2) 1951 1952 endif !(callthermos) 1930 1953 1931 1954 c ----------------------------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.