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

Last change on this file since 2007 was 1684, checked in by emillour, 8 years ago

Mars GCM:
Add possibility to fix EUV input as E10.7 value and remove previous system
(which used parameter solarcondate). The E10.7 value is now set via
callphys.def by parameter "fixed_euv_value" which is only used if
solvarmod==0.
Guidelines for min/ave/max EUV input: fixed_euv_value=80/140/320.
EM + FGG

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