source: trunk/LMDZ.MARS/libf/aeronomars/hrtherm.F @ 2325

Last change on this file since 2325 was 2042, checked in by emillour, 6 years ago

Mars GCM:
Modifications to use the parametrized photoabsorbtion coefficients;
a first step towards implementing ionospheric chemistry in the new
chemical solver:

  • change in species indexes in chemthermos.F90, paramfoto_compact.F, hrtherm.F and euvheat.F90
  • calchim.F90: added a variable in call to photochemistry
  • photochemistry.F90: added calls to jthermcalc_e107 and phdisrate, with an additionlal flag, jparam (.false. by default). The computed photodissociation coefficents are sent to v_phot, which is used in the chemistry. Thus concentrations computed in chimtogcm are now done over all atmospheric layers.

FGG

File size: 4.0 KB
RevLine 
[38]1c**********************************************************************
2
[1266]3      subroutine hrtherm(ig,nlayer,
4     .      euvmod,rm,nespeuv,tx,iz,zenit,zday,jtot)
[38]5
6
7c     feb 2002        fgg           first version
8c     nov 2002        fgg           second version
9
10c**********************************************************************
11
[1266]12      use param_v4_h, only: ninter,nabs,jfotsout,fluxtop,freccen
13
[38]14      implicit none
15
16c     common variables and constants
[705]17      include "callkeys.h"
[38]18
19
20c    local parameters and variables
21
[1266]22      real       xabsi(nabs,nlayer)                     !densities
23      real       jergs(ninter,nabs,nlayer)
[38]24     
25      integer    i,j,k,indexint          !indexes
26      character  dn
27
28
29c     input and output variables
30
[1266]31      integer    ig  ,euvmod,nlayer
[635]32      integer    nespeuv
[1266]33      real       rm(nlayer,nespeuv)              !density matrix (cm^-3)
34      real       jtot(nlayer)                    !output: heating rate(erg/s)
35      real       tx(nlayer)                      !temperature
[38]36      real       zenit
[1266]37      real       iz(nlayer)
[705]38      real       zday
[38]39
[635]40      ! tracer indexes for the EUV heating:
41!!! ATTENTION. These values have to be identical to those in chemthermos.F90
42!!! If the values are changed there, the same has to be done here  !!!
[2042]43      integer,parameter :: i_co2  =  1
44      integer,parameter :: i_co   =  2
45      integer,parameter :: i_o    =  3
46      integer,parameter :: i_o1d  =  4
47      integer,parameter :: i_o2   =  5
48      integer,parameter :: i_o3   =  6
49      integer,parameter :: i_h    =  7
50      integer,parameter :: i_h2   =  8
51      integer,parameter :: i_oh   =  9
52      integer,parameter :: i_ho2  = 10
53      integer,parameter :: i_h2o2 = 11
54      integer,parameter :: i_h2o  = 12
55      integer,parameter :: i_n    = 13
56      integer,parameter :: i_n2d  = 14
57      integer,parameter :: i_no   = 15
58      integer,parameter :: i_no2  = 16
59      integer,parameter :: i_n2   = 17
60!      integer,parameter :: i_co2=1
61!      integer,parameter :: i_o2=2
62!      integer,parameter :: i_o=3
63!      integer,parameter :: i_co=4
64!      integer,parameter :: i_h=5
65!      integer,parameter :: i_h2=8
66!      integer,parameter :: i_h2o=9
67!      integer,parameter :: i_h2o2=10
68!      integer,parameter :: i_o3=12
69!      integer,parameter :: i_n2=13
70!      integer,parameter :: i_n=14
71!      integer,parameter :: i_no=15
72!      integer,parameter :: i_no2=17
[38]73
74c*************************PROGRAM STARTS*******************************
75
[635]76      !If nighttime, photoabsorption coefficient set to 0
77      if(zenit.gt.140.) then
[38]78         dn='n'
79         else
80         dn='d'
81      end if
82      if(dn.eq.'n') then
[1266]83        do i=1,nlayer                                   
[38]84              jtot(i)=0.
85        enddo       
86        return
87      endif
[635]88
89      !initializations
90      jergs(:,:,:)=0.
91      xabsi(:,:)=0.
92      jtot(:)=0.
93      !All number densities to a single array, xabsi(species,layer)
[1266]94      do i=1,nlayer
[635]95         xabsi(1,i)  = rm(i,i_co2)
96         xabsi(2,i)  = rm(i,i_o2)
97         xabsi(3,i)  = rm(i,i_o)
98         xabsi(4,i)  = rm(i,i_h2o)
99         xabsi(5,i)  = rm(i,i_h2)
100         xabsi(6,i)  = rm(i,i_h2o2)
101         !Only if O3, N or ion chemistry requested
102         if(euvmod.ge.1) then
103            xabsi(7,i)  = rm(i,i_o3)
104         endif
105         !Only if N or ion chemistry requested
106         if(euvmod.ge.2) then
107            xabsi(8,i)  = rm(i,i_n2)
108            xabsi(9,i)  = rm(i,i_n)
109            xabsi(10,i) = rm(i,i_no)
110            xabsi(13,i) = rm(i,i_no2)
111         endif
112         xabsi(11,i) = rm(i,i_co)
113         xabsi(12,i) = rm(i,i_h)
[38]114      end do
115
[635]116      !Calculation of photoabsortion coefficient
[1684]117      call jthermcalc_e107(ig,nlayer,euvmod,
[1266]118     .           rm,nespeuv,tx,iz,zenit,zday)
[38]119
[635]120      !Total photoabsorption coefficient
[1266]121      do i=1,nlayer
[635]122         jtot(i)=0.
[38]123        do j=1,nabs
[635]124          do indexint=1,ninter
[38]125            jergs(indexint,j,i) = jfotsout(indexint,j,i)
126     $              * xabsi (j,i) * fluxtop(indexint) 
127     $              / (0.5e9 * freccen(indexint))
128            jtot(i)=jtot(i)+jergs(indexint,j,i)
129          end do
130        end do
131      end do
132
133      end
134
Note: See TracBrowser for help on using the repository browser.