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

Last change on this file since 3567 was 3464, checked in by emillour, 2 months ago

Mars PCM:
Some tidying in aeronomars:

  • make a jthermcalc_util.F to contain utility routines (used by jthermcal & jthermcalc_e107). Also add the possibility (turned off by default) in the interfast routine to do extra sanity checks.
  • turn chemthermos, euvheat, hrtherm, jthermcalc, jthermcalc_e107, paramphoto_compact and photochemistry into modules.

EM

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