source: trunk/LMDZ.GENERIC/libf/aeronostd/photolysis_asis.F90 @ 2725

Last change on this file since 2725 was 2542, checked in by aslmd, 3 years ago

Generic GCM:

Large update of the chemical modules

  • Read chemical network from input files
  • Init chemistry with ModernTrac?
  • Photolysis online calculation

YJ

  • Property svn:executable set to *
File size: 30.8 KB
Line 
1!==========================================================================
2
3      subroutine photolysis_asis(nlayer, ngrid,                    &
4                                 lswitch, press, temp, sza,fractcol, tauref,   &
5                                 zmmean, dist_sol, rmco2, rmo3, rmch4, v_phot, e_phot, nreact, three_prod)
6
7!==========================================================================
8
9      use comcstfi_mod
10      use callkeys_mod
11      use types_asis
12      use chimiedata_h
13
14      implicit none
15
16!#include "chimiedata.h"
17
18!==========================================================================
19!     input:
20!==========================================================================
21       
22      integer, intent(in) :: nlayer ! number of atmospheric layers
23      integer, intent(in) :: ngrid  ! number of atmospheric columns
24      integer :: lswitch            ! interface level between chemistries
25      real :: press(nlayer)         ! pressure (hPa)
26      real :: temp(nlayer)          ! temperature (K)
27      real :: sza                   ! solar zenith angle (deg)
28      real :: fractcol              ! day fraction
29      real :: tauref                ! optical depth at 7 hpa
30      real :: zmmean(nlayer)        ! mean molecular mass (g/mol)
31      real :: dist_sol              ! sun distance (AU)
32      real :: rmco2(nlayer)         ! co2 mixing ratio
33      real :: rmo3(nlayer)          ! ozone mixing ratio
34      real :: rmch4(nlayer)         ! ch4 mixing ratio
35      integer, intent(in) :: nreact             ! number of reactions in reactions files
36      logical, intent(in) :: three_prod(nreact) ! if the reaction have a three defferent products egal .true.
37
38!==========================================================================
39!     output: interpolated photodissociation rates (s-1)
40!==========================================================================
41
42      real (kind = 8), dimension(nlayer,nb_phot_max) :: v_phot
43      real (kind = 8), dimension(nlayer,nb_phot_max) :: e_phot
44
45!==========================================================================
46!     local:
47!==========================================================================
48
49      integer :: icol, ij, indsza, indtau, indcol, indozo, indtemp,     &
50                 iozo, isza, itau, it, ich4, indch4, l, nb_phot
51
52      real :: col(nlayer)                 ! overhead air column   (molecule cm-2)
53      real :: colo3(nlayer)               ! overhead ozone column (molecule cm-2)
54      real :: colch4(nlayer)               ! overhead CH4 column (molecule cm-2)
55      real :: tauch4(nlayer)               ! estimation of optical depth by CH4
56      real :: ch4_equ(nlayer)               ! equivalent constant mixing ratio for the same column of CH4
57      real :: poids(2,2,2,2,2,2)          ! 6D interpolation weights
58      real :: tref                        ! temperature  at 1.9 hPa in the gcm (K)
59      real :: table_temp(ntemp)           ! temperatures at 1.9 hPa in jmars   (K)
60      real :: ch4ref                      ! ch4 mixing ratio at top of the atmosphere
61      real :: cinf, csup, cicol, ciozo, cisza, citemp, citau, cich4
62      real :: colo3min, dp, coef
63      real :: ratio_o3(nlayer)
64      real :: tau
65      real :: j(nlayer,nd)
66      real :: e(nlayer,nd)
67
68!==========================================================================
69!     day/night criterion
70!==========================================================================
71
72      if (sza <= 95.) then
73
74!==========================================================================
75!     temperatures at 1.9 hPa in lookup table
76!==========================================================================
77     
78!      table_temp(1) = 226.2
79!      table_temp(2) = 206.2
80!      table_temp(3) = 186.2
81!      table_temp(4) = 169.8
82
83!      table_temp(2) = 186.2
84      table_temp(1) = 176.2
85
86!==========================================================================
87!     interpolation in solar zenith angle
88!==========================================================================
89 
90      indsza = nsza - 1
91      do isza = 1,nsza
92         if (szatab(isza) >= sza) then
93            indsza = isza - 1
94            indsza = max(indsza, 1)
95            exit
96         end if
97      end do
98
99      if(nsza.eq.1) then
100        cisza = 0.
101        indsza=1
102      else
103        cisza = (sza - szatab(indsza))  &
104             /(szatab(indsza + 1) - szatab(indsza))
105      endif
106
107!==========================================================================
108!     interpolation in dust (tau)
109!==========================================================================
110
111      tau = min(tauref, tautab(ntau))
112      tau = max(tau, tautab(1))
113
114      indtau = ntau - 1
115      do itau = 1,ntau
116         if (tautab(itau) >= tau) then
117            indtau = itau - 1
118            indtau = max(indtau, 1)
119            exit
120         end if
121      end do
122
123      if(ntau.eq.1) then
124        citau=0.
125        indtau=1
126      else
127        citau = (tau - tautab(indtau))     &
128             /(tautab(indtau + 1) - tautab(indtau))
129      endif
130
131
132
133!==========================================================================
134!     air and ozone columns
135!==========================================================================
136
137!     co2 column at model top (molecule.cm-2)
138
139!      col(lswitch-1) = 6.022e22*rmco2(lswitch-1)*press(lswitch-1)*100.  &
140!                       /(zmmean(lswitch-1)*g)
141      col(lswitch-1) = 6.022e22*press(lswitch-1)*100./(zmmean(lswitch-1)*g)
142
143
144!     ozone column at model top
145
146      colo3(lswitch-1) = 0.
147!     co2 and ozone columns for other levels (molecule.cm-2)
148
149      do l = lswitch-2,1,-1
150         dp = (press(l) - press(l+1))*100.
151!         col(l) = col(l+1) + (rmco2(l+1) + rmco2(l))*0.5   &
152!                             *6.022e22*dp/(zmmean(l)*g)
153         col(l) = col(l+1) +  6.022e22*dp/(zmmean(l)*g)
154         col(l) = min(col(l), colairtab(1))
155         colo3(l) = colo3(l+1) + (rmo3(l+1) + rmo3(l))*0.5 &
156                                 *6.022e22*dp/(zmmean(l)*g)
157
158      end do
159
160!     ratio ozone column/minimal theoretical column (10 micron-atm)
161
162!     ro3 = 1.227e-10 is the o3 mixing ratio for a uniform
163!     profile giving a column 10 micron-atmosphere at
164!     a surface pressure of 1 bar.
165
166      do l = 1,lswitch-1
167!         colo3min    = col(l)*7.171e-10
168         colo3min    = col(l)*1.227e-10*(g/9.81)*(mugaz/28)
169         ratio_o3(l) = colo3(l)/colo3min
170         ratio_o3(l) = min(ratio_o3(l), table_ozo(nozo))
171         ratio_o3(l) = max(ratio_o3(l), 0.)
172      end do
173
174!      print*,'co3(1)=',colo3(1)
175!      print*,'col(1)=',col(1)
176!      print*,'ratio_o3(1)=',ratio_o3(1)
177!      print*,'maxval(ratio_o3)=',maxval(ratio_o3(:))
178!      print*,'maxval(ozo)=',table_ozo(nozo)/10.
179
180!==========================================================================
181!     ch4 dependence
182!==========================================================================
183
184!     1) search for temperature at 1.9 hPa (tref): vertical
185!     interpolation
186
187      ch4ref = rmch4(lswitch-2)
188      colch4(lswitch-1) = 0.
189      ch4_equ(lswitch-1) = 0.
190      do l = lswitch-2,1,-1
191         dp = (press(l) - press(l+1))*100.
192         colch4(l) = colch4(l+1) + (rmch4(l+1) + rmch4(l))*0.5 &
193                                 *6.022e22*dp/(zmmean(l)*g)
194         ch4_equ(l)=colch4(l)/col(l)
195!         tauch4(l)=1.8e-21*colch4(l)
196!         if(tauch4(l).ge.1.0) exit
197      end do
198!      ch4ref = (rmch4(l+1)*(tauch4(l)-1)+rmch4(l)*(1-tauch4(l+1))) &
199!                                 /(tauch4(l)-tauch4(l+1))
200
201!     2) interpolation in CH4
202
203!      ch4ref = min(ch4ref,table_ch4(nch4))
204!      ch4ref = max(ch4ref,table_ch4(1))
205
206!      indch4 = nch4 - 1
207!      do ich4 = 1,nch4
208!         if (table_ch4(ich4) >= ch4ref) then
209!            indch4 = ich4 - 1
210!            indch4 = max(indch4, 1)
211!            exit
212!         end if
213!      end do
214!      cich4 = (ch4ref - table_ch4(indch4))     &
215!             /(table_ch4(indch4 + 1) - table_ch4(indch4))
216
217
218
219!==========================================================================
220!     temperature dependence
221!==========================================================================
222
223!     1) search for temperature at 1.9 hPa (tref): vertical interpolation
224
225      tref = temp(1)
226      do l = (lswitch-1)-1,1,-1
227         if (press(l) > 1.9) then
228            cinf = (press(l) - 1.9)/(press(l) - press(l+1))
229            csup = 1. - cinf
230            tref = cinf*temp(l+1) + csup*temp(l)
231            exit
232         end if
233      end do
234
235!     2) interpolation in temperature
236
237      tref = min(tref,table_temp(1))
238      tref = max(tref,table_temp(ntemp))
239
240      if(ntemp.eq.1) then
241        citemp = 1.
242        indtemp = 1
243      else
244        do it = 2, ntemp
245           if (table_temp(it) <= tref) then
246              citemp = (log(tref) - log(table_temp(it)))              &
247                      /(log(table_temp(it-1)) - log(table_temp(it)))
248              indtemp = it - 1
249              exit
250           end if
251        end do
252      endif
253
254
255
256!==========================================================================
257!     loop over vertical levels
258!==========================================================================
259
260      do l = 1,lswitch-1
261
262!     interpolation in air column
263
264         indcol = nz - 1
265         do icol = 1,nz
266            if (colairtab(icol) < col(l)) then
267               indcol = icol - 1
268               exit
269            end if
270         end do
271         cicol = (log(col(l)) - log(colairtab(indcol + 1)))              &
272                /(log(colairtab(indcol)) - log(colairtab(indcol + 1)))
273
274!     interpolation in ozone column
275
276         indozo = nozo - 1
277         do iozo = 1,nozo
278            if (table_ozo(iozo) >= ratio_o3(l)) then
279               indozo = iozo - 1
280               indozo = max(indozo, 1)
281               exit
282            end if
283         end do
284
285      if(nozo.eq.1) then
286         ciozo = 0.
287      else
288         ciozo = (ratio_o3(l) - table_ozo(indozo))             &
289                /(table_ozo(indozo + 1) - table_ozo(indozo))
290      endif
291
292!     2) interpolation in CH4
293
294      ch4ref = min(ch4_equ(l),table_ch4(nch4))
295      ch4ref = max(ch4ref,table_ch4(1))
296
297      indch4 = nch4 - 1
298      do ich4 = 1,nch4
299         if (table_ch4(ich4) >= ch4ref) then
300            indch4 = ich4 - 1
301            indch4 = max(indch4, 1)
302            exit
303         end if
304      end do
305      if(nch4.eq.1) then
306        cich4=0.
307        indch4=1
308      else
309        cich4 = (ch4ref - table_ch4(indch4))     &
310               /(table_ch4(indch4 + 1) - table_ch4(indch4))
311      endif
312
313!     5-dimensional interpolation weights
314
315!     poids(temp,sza,co2,o3,tau,ch4)
316
317         poids(1,1,1,1,1,1) = citemp*(1.-cisza)*cicol*(1.-ciozo)*(1.-citau)*(1.-cich4)
318         poids(1,1,1,2,1,1) = citemp*(1.-cisza)*cicol*ciozo*(1.-citau)*(1.-cich4)       
319         poids(1,1,2,1,1,1) = citemp*(1.-cisza)*(1.-cicol)*(1.-ciozo)*(1.-citau)*(1.-cich4)
320         poids(1,1,2,2,1,1) = citemp*(1.-cisza)*(1.-cicol)*ciozo*(1.-citau)*(1.-cich4)
321         poids(1,2,1,1,1,1) = citemp*cisza*cicol*(1.-ciozo)*(1.-citau)*(1.-cich4)               
322         poids(1,2,1,2,1,1) = citemp*cisza*cicol*ciozo*(1.-citau)*(1.-cich4)                   
323         poids(1,2,2,1,1,1) = citemp*cisza*(1.-cicol)*(1.-ciozo)*(1.-citau)*(1.-cich4)         
324         poids(1,2,2,2,1,1) = citemp*cisza*(1.-cicol)*ciozo*(1.-citau)*(1.-cich4)               
325!         poids(2,1,1,1,1,1) = (1.-citemp)*(1.-cisza)*cicol*(1.-ciozo)*(1.-citau)*(1.-cich4)     
326!         poids(2,1,1,2,1,1) = (1.-citemp)*(1.-cisza)*cicol*ciozo*(1.-citau)*(1.-cich4)         
327!         poids(2,1,2,1,1,1) = (1.-citemp)*(1.-cisza)*(1.-cicol)*(1.-ciozo)*(1.-citau)*(1.-cich4)
328!         poids(2,1,2,2,1,1) = (1.-citemp)*(1.-cisza)*(1.-cicol)*ciozo*(1.-citau)*(1.-cich4)     
329!         poids(2,2,1,1,1,1) = (1.-citemp)*cisza*cicol*(1.-ciozo)*(1.-citau)*(1.-cich4)         
330!         poids(2,2,1,2,1,1) = (1.-citemp)*cisza*cicol*ciozo*(1.-citau)*(1.-cich4)               
331!         poids(2,2,2,1,1,1) = (1.-citemp)*cisza*(1.-cicol)*(1.-ciozo)*(1.-citau)*(1.-cich4)     
332!         poids(2,2,2,2,1,1) = (1.-citemp)*cisza*(1.-cicol)*ciozo*(1.-citau)*(1.-cich4)         
333!!
334!         poids(1,1,1,1,2,1) = citemp*(1.-cisza)*cicol*(1.-ciozo)*citau*(1.-cich4)               
335!         poids(1,1,1,2,2,1) = citemp*(1.-cisza)*cicol*ciozo*citau*(1.-cich4)                   
336!         poids(1,1,2,1,2,1) = citemp*(1.-cisza)*(1.-cicol)*(1.-ciozo)*citau*(1.-cich4)         
337!         poids(1,1,2,2,2,1) = citemp*(1.-cisza)*(1.-cicol)*ciozo*citau*(1.-cich4)               
338!         poids(1,2,1,1,2,1) = citemp*cisza*cicol*(1.-ciozo)*citau*(1.-cich4)                   
339!         poids(1,2,1,2,2,1) = citemp*cisza*cicol*ciozo*citau*(1.-cich4)                         
340!         poids(1,2,2,1,2,1) = citemp*cisza*(1.-cicol)*(1.-ciozo)*citau*(1.-cich4)               
341!         poids(1,2,2,2,2,1) = citemp*cisza*(1.-cicol)*ciozo*citau*(1.-cich4)                   
342!         poids(2,1,1,1,2,1) = (1.-citemp)*(1.-cisza)*cicol*(1.-ciozo)*citau*(1.-cich4)         
343!         poids(2,1,1,2,2,1) = (1.-citemp)*(1.-cisza)*cicol*ciozo*citau*(1.-cich4)               
344!         poids(2,1,2,1,2,1) = (1.-citemp)*(1.-cisza)*(1.-cicol)*(1.-ciozo)*citau*(1.-cich4)     
345!         poids(2,1,2,2,2,1) = (1.-citemp)*(1.-cisza)*(1.-cicol)*ciozo*citau*(1.-cich4)         
346!         poids(2,2,1,1,2,1) = (1.-citemp)*cisza*cicol*(1.-ciozo)*citau*(1.-cich4)               
347!         poids(2,2,1,2,2,1) = (1.-citemp)*cisza*cicol*ciozo*citau*(1.-cich4)                   
348!         poids(2,2,2,1,2,1) = (1.-citemp)*cisza*(1.-cicol)*(1.-ciozo)*citau*(1.-cich4)         
349!         poids(2,2,2,2,2,1) = (1.-citemp)*cisza*(1.-cicol)*ciozo*citau*(1.-cich4)               
350!     
351         poids(1,1,1,1,1,2) = citemp*(1.-cisza)*cicol*(1.-ciozo)*(1.-citau)*cich4               
352         poids(1,1,1,2,1,2) = citemp*(1.-cisza)*cicol*ciozo*(1.-citau)*cich4                   
353         poids(1,1,2,1,1,2) = citemp*(1.-cisza)*(1.-cicol)*(1.-ciozo)*(1.-citau)*cich4         
354         poids(1,1,2,2,1,2) = citemp*(1.-cisza)*(1.-cicol)*ciozo*(1.-citau)*cich4               
355         poids(1,2,1,1,1,2) = citemp*cisza*cicol*(1.-ciozo)*(1.-citau)*cich4                   
356         poids(1,2,1,2,1,2) = citemp*cisza*cicol*ciozo*(1.-citau)*cich4                         
357         poids(1,2,2,1,1,2) = citemp*cisza*(1.-cicol)*(1.-ciozo)*(1.-citau)*cich4               
358         poids(1,2,2,2,1,2) = citemp*cisza*(1.-cicol)*ciozo*(1.-citau)*cich4                   
359!         poids(2,1,1,1,1,2) = (1.-citemp)*(1.-cisza)*cicol*(1.-ciozo)*(1.-citau)*cich4         
360!         poids(2,1,1,2,1,2) = (1.-citemp)*(1.-cisza)*cicol*ciozo*(1.-citau)*cich4               
361!         poids(2,1,2,1,1,2) = (1.-citemp)*(1.-cisza)*(1.-cicol)*(1.-ciozo)*(1.-citau)*cich4     
362!         poids(2,1,2,2,1,2) = (1.-citemp)*(1.-cisza)*(1.-cicol)*ciozo*(1.-citau)*cich4         
363!         poids(2,2,1,1,1,2) = (1.-citemp)*cisza*cicol*(1.-ciozo)*(1.-citau)*cich4               
364!         poids(2,2,1,2,1,2) = (1.-citemp)*cisza*cicol*ciozo*(1.-citau)*cich4                   
365!         poids(2,2,2,1,1,2) = (1.-citemp)*cisza*(1.-cicol)*(1.-ciozo)*(1.-citau)*cich4         
366!         poids(2,2,2,2,1,2) = (1.-citemp)*cisza*(1.-cicol)*ciozo*(1.-citau)*cich4               
367!!
368!         poids(1,1,1,1,2,2) = citemp*(1.-cisza)*cicol*(1.-ciozo)*citau*cich4                   
369!         poids(1,1,1,2,2,2) = citemp*(1.-cisza)*cicol*ciozo*citau*cich4                         
370!         poids(1,1,2,1,2,2) = citemp*(1.-cisza)*(1.-cicol)*(1.-ciozo)*citau*cich4               
371!         poids(1,1,2,2,2,2) = citemp*(1.-cisza)*(1.-cicol)*ciozo*citau*cich4                   
372!         poids(1,2,1,1,2,2) = citemp*cisza*cicol*(1.-ciozo)*citau*cich4                         
373!         poids(1,2,1,2,2,2) = citemp*cisza*cicol*ciozo*citau*cich4                             
374!         poids(1,2,2,1,2,2) = citemp*cisza*(1.-cicol)*(1.-ciozo)*citau*cich4                   
375!         poids(1,2,2,2,2,2) = citemp*cisza*(1.-cicol)*ciozo*citau*cich4                         
376!         poids(2,1,1,1,2,2) = (1.-citemp)*(1.-cisza)*cicol*(1.-ciozo)*citau*cich4               
377!         poids(2,1,1,2,2,2) = (1.-citemp)*(1.-cisza)*cicol*ciozo*citau*cich4                   
378!         poids(2,1,2,1,2,2) = (1.-citemp)*(1.-cisza)*(1.-cicol)*(1.-ciozo)*citau*cich4         
379!         poids(2,1,2,2,2,2) = (1.-citemp)*(1.-cisza)*(1.-cicol)*ciozo*citau*cich4               
380!         poids(2,2,1,1,2,2) = (1.-citemp)*cisza*cicol*(1.-ciozo)*citau*cich4                   
381!         poids(2,2,1,2,2,2) = (1.-citemp)*cisza*cicol*ciozo*citau*cich4                         
382!         poids(2,2,2,1,2,2) = (1.-citemp)*cisza*(1.-cicol)*(1.-ciozo)*citau*cich4               
383!         poids(2,2,2,2,2,2) = (1.-citemp)*cisza*(1.-cicol)*ciozo*citau*cich4                   
384
385
386
387
388
389
390
391
392!     4-dimensional interpolation in the lookup table
393
394         do ij = 1,nd
395            j(l,ij) =                                                                         &
396            poids(1,1,1,1,1,1)*jphot(indtemp,indsza,indcol,indozo,indtau,indch4,ij)           &
397          + poids(1,1,1,2,1,1)*jphot(indtemp,indsza,indcol,indozo+1,indtau,indch4,ij)         &
398          + poids(1,1,2,1,1,1)*jphot(indtemp,indsza,indcol+1,indozo,indtau,indch4,ij)         &
399          + poids(1,1,2,2,1,1)*jphot(indtemp,indsza,indcol+1,indozo+1,indtau,indch4,ij)       &
400          + poids(1,2,1,1,1,1)*jphot(indtemp,indsza+1,indcol,indozo,indtau,indch4,ij)         &
401          + poids(1,2,1,2,1,1)*jphot(indtemp,indsza+1,indcol,indozo+1,indtau,indch4,ij)       &
402          + poids(1,2,2,1,1,1)*jphot(indtemp,indsza+1,indcol+1,indozo,indtau,indch4,ij)       &
403          + poids(1,2,2,2,1,1)*jphot(indtemp,indsza+1,indcol+1,indozo+1,indtau,indch4,ij)     &
404!          + poids(2,1,1,1,1,1)*jphot(indtemp+1,indsza,indcol,indozo,indtau,indch4,ij)         &
405!          + poids(2,1,1,2,1,1)*jphot(indtemp+1,indsza,indcol,indozo+1,indtau,indch4,ij)       &
406!          + poids(2,1,2,1,1,1)*jphot(indtemp+1,indsza,indcol+1,indozo,indtau,indch4,ij)       &
407!          + poids(2,1,2,2,1,1)*jphot(indtemp+1,indsza,indcol+1,indozo+1,indtau,indch4,ij)     &
408!          + poids(2,2,1,1,1,1)*jphot(indtemp+1,indsza+1,indcol,indozo,indtau,indch4,ij)       &
409!          + poids(2,2,1,2,1,1)*jphot(indtemp+1,indsza+1,indcol,indozo+1,indtau,indch4,ij)     &
410!          + poids(2,2,2,1,1,1)*jphot(indtemp+1,indsza+1,indcol+1,indozo,indtau,indch4,ij)     &
411!          + poids(2,2,2,2,1,1)*jphot(indtemp+1,indsza+1,indcol+1,indozo+1,indtau,indch4,ij)   &
412!!
413!          + poids(1,1,1,1,2,1)*jphot(indtemp,indsza,indcol,indozo,indtau+1,indch4,ij)         &
414!          + poids(1,1,1,2,2,1)*jphot(indtemp,indsza,indcol,indozo+1,indtau+1,indch4,ij)       &
415!          + poids(1,1,2,1,2,1)*jphot(indtemp,indsza,indcol+1,indozo,indtau+1,indch4,ij)       &
416!          + poids(1,1,2,2,2,1)*jphot(indtemp,indsza,indcol+1,indozo+1,indtau+1,indch4,ij)     &
417!          + poids(1,2,1,1,2,1)*jphot(indtemp,indsza+1,indcol,indozo,indtau+1,indch4,ij)       &
418!          + poids(1,2,1,2,2,1)*jphot(indtemp,indsza+1,indcol,indozo+1,indtau+1,indch4,ij)     &
419!          + poids(1,2,2,1,2,1)*jphot(indtemp,indsza+1,indcol+1,indozo,indtau+1,indch4,ij)     &
420!          + poids(1,2,2,2,2,1)*jphot(indtemp,indsza+1,indcol+1,indozo+1,indtau+1,indch4,ij)   &
421!          + poids(2,1,1,1,2,1)*jphot(indtemp+1,indsza,indcol,indozo,indtau+1,indch4,ij)       &
422!          + poids(2,1,1,2,2,1)*jphot(indtemp+1,indsza,indcol,indozo+1,indtau+1,indch4,ij)     &
423!          + poids(2,1,2,1,2,1)*jphot(indtemp+1,indsza,indcol+1,indozo,indtau+1,indch4,ij)     &
424!          + poids(2,1,2,2,2,1)*jphot(indtemp+1,indsza,indcol+1,indozo+1,indtau+1,indch4,ij)   &
425!          + poids(2,2,1,1,2,1)*jphot(indtemp+1,indsza+1,indcol,indozo,indtau+1,indch4,ij)     &
426!          + poids(2,2,1,2,2,1)*jphot(indtemp+1,indsza+1,indcol,indozo+1,indtau+1,indch4,ij)   &
427!          + poids(2,2,2,1,2,1)*jphot(indtemp+1,indsza+1,indcol+1,indozo,indtau+1,indch4,ij)   &
428!          + poids(2,2,2,2,2,1)*jphot(indtemp+1,indsza+1,indcol+1,indozo+1,indtau+1,indch4,ij)
429! CH4
430          + poids(1,1,1,1,1,2)*jphot(indtemp,indsza,indcol,indozo,indtau,indch4+1,ij)         &
431          + poids(1,1,1,2,1,2)*jphot(indtemp,indsza,indcol,indozo+1,indtau,indch4+1,ij)       &
432          + poids(1,1,2,1,1,2)*jphot(indtemp,indsza,indcol+1,indozo,indtau,indch4+1,ij)       &
433          + poids(1,1,2,2,1,2)*jphot(indtemp,indsza,indcol+1,indozo+1,indtau,indch4+1,ij)     &
434          + poids(1,2,1,1,1,2)*jphot(indtemp,indsza+1,indcol,indozo,indtau,indch4+1,ij)       &
435          + poids(1,2,1,2,1,2)*jphot(indtemp,indsza+1,indcol,indozo+1,indtau,indch4+1,ij)     &
436          + poids(1,2,2,1,1,2)*jphot(indtemp,indsza+1,indcol+1,indozo,indtau,indch4+1,ij)     &
437          + poids(1,2,2,2,1,2)*jphot(indtemp,indsza+1,indcol+1,indozo+1,indtau,indch4+1,ij)
438!          + poids(2,1,1,1,1,2)*jphot(indtemp+1,indsza,indcol,indozo,indtau,indch4+1,ij) &
439!          + poids(2,1,1,2,1,2)*jphot(indtemp+1,indsza,indcol,indozo+1,indtau,indch4+1,ij) &
440!          + poids(2,1,2,1,1,2)*jphot(indtemp+1,indsza,indcol+1,indozo,indtau,indch4+1,ij) &
441!          + poids(2,1,2,2,1,2)*jphot(indtemp+1,indsza,indcol+1,indozo+1,indtau,indch4+1,ij) &
442!          + poids(2,2,1,1,1,2)*jphot(indtemp+1,indsza+1,indcol,indozo,indtau,indch4+1,ij) &
443!          + poids(2,2,1,2,1,2)*jphot(indtemp+1,indsza+1,indcol,indozo+1,indtau,indch4+1,ij) &
444!          + poids(2,2,2,1,1,2)*jphot(indtemp+1,indsza+1,indcol+1,indozo,indtau,indch4+1,ij) &
445!          + poids(2,2,2,2,1,2)*jphot(indtemp+1,indsza+1,indcol+1,indozo+1,indtau,indch4+1,ij) &
446!!
447!          + poids(1,1,1,1,2,2)*jphot(indtemp,indsza,indcol,indozo,indtau+1,indch4+1,ij) &
448!          + poids(1,1,1,2,2,2)*jphot(indtemp,indsza,indcol,indozo+1,indtau+1,indch4+1,ij) &
449!          + poids(1,1,2,1,2,2)*jphot(indtemp,indsza,indcol+1,indozo,indtau+1,indch4+1,ij) &
450!          + poids(1,1,2,2,2,2)*jphot(indtemp,indsza,indcol+1,indozo+1,indtau+1,indch4+1,ij) &
451!          + poids(1,2,1,1,2,2)*jphot(indtemp,indsza+1,indcol,indozo,indtau+1,indch4+1,ij) &
452!          + poids(1,2,1,2,2,2)*jphot(indtemp,indsza+1,indcol,indozo+1,indtau+1,indch4+1,ij) &
453!          + poids(1,2,2,1,2,2)*jphot(indtemp,indsza+1,indcol+1,indozo,indtau+1,indch4+1,ij) &
454!          + poids(1,2,2,2,2,2)*jphot(indtemp,indsza+1,indcol+1,indozo+1,indtau+1,indch4+1,ij) &
455!          + poids(2,1,1,1,2,2)*jphot(indtemp+1,indsza,indcol,indozo,indtau+1,indch4+1,ij) &
456!          + poids(2,1,1,2,2,2)*jphot(indtemp+1,indsza,indcol,indozo+1,indtau+1,indch4+1,ij) &
457!          + poids(2,1,2,1,2,2)*jphot(indtemp+1,indsza,indcol+1,indozo,indtau+1,indch4+1,ij) &
458!          + poids(2,1,2,2,2,2)*jphot(indtemp+1,indsza,indcol+1,indozo+1,indtau+1,indch4+1,ij) &
459!          + poids(2,2,1,1,2,2)*jphot(indtemp+1,indsza+1,indcol,indozo,indtau+1,indch4+1,ij) &
460!          + poids(2,2,1,2,2,2)*jphot(indtemp+1,indsza+1,indcol,indozo+1,indtau+1,indch4+1,ij) &
461!          + poids(2,2,2,1,2,2)*jphot(indtemp+1,indsza+1,indcol+1,indozo,indtau+1,indch4+1,ij) &
462!          + poids(2,2,2,2,2,2)*jphot(indtemp+1,indsza+1,indcol+1,indozo+1,indtau+1,indch4+1,ij)
463
464         end do
465
466      if (photoheat) then
467         do ij = 1,nd
468            e(l,ij) =                                                                         &
469            poids(1,1,1,1,1,1)*ephot(indtemp,indsza,indcol,indozo,indtau,indch4,ij)           &
470          + poids(1,1,1,2,1,1)*ephot(indtemp,indsza,indcol,indozo+1,indtau,indch4,ij)         &
471          + poids(1,1,2,1,1,1)*ephot(indtemp,indsza,indcol+1,indozo,indtau,indch4,ij)         &
472          + poids(1,1,2,2,1,1)*ephot(indtemp,indsza,indcol+1,indozo+1,indtau,indch4,ij)       &
473          + poids(1,2,1,1,1,1)*ephot(indtemp,indsza+1,indcol,indozo,indtau,indch4,ij)         &
474          + poids(1,2,1,2,1,1)*ephot(indtemp,indsza+1,indcol,indozo+1,indtau,indch4,ij)       &
475          + poids(1,2,2,1,1,1)*ephot(indtemp,indsza+1,indcol+1,indozo,indtau,indch4,ij)       &
476          + poids(1,2,2,2,1,1)*ephot(indtemp,indsza+1,indcol+1,indozo+1,indtau,indch4,ij)     &
477!          + poids(2,1,1,1,1,1)*ephot(indtemp+1,indsza,indcol,indozo,indtau,indch4,ij)         &
478!          + poids(2,1,1,2,1,1)*ephot(indtemp+1,indsza,indcol,indozo+1,indtau,indch4,ij)       &
479!          + poids(2,1,2,1,1,1)*ephot(indtemp+1,indsza,indcol+1,indozo,indtau,indch4,ij)       &
480!          + poids(2,1,2,2,1,1)*ephot(indtemp+1,indsza,indcol+1,indozo+1,indtau,indch4,ij)     &
481!          + poids(2,2,1,1,1,1)*ephot(indtemp+1,indsza+1,indcol,indozo,indtau,indch4,ij)       &
482!          + poids(2,2,1,2,1,1)*ephot(indtemp+1,indsza+1,indcol,indozo+1,indtau,indch4,ij)     &
483!          + poids(2,2,2,1,1,1)*ephot(indtemp+1,indsza+1,indcol+1,indozo,indtau,indch4,ij)     &
484!          + poids(2,2,2,2,1,1)*ephot(indtemp+1,indsza+1,indcol+1,indozo+1,indtau,indch4,ij)   &
485!!
486!          + poids(1,1,1,1,2,1)*ephot(indtemp,indsza,indcol,indozo,indtau+1,indch4,ij)         &
487!          + poids(1,1,1,2,2,1)*ephot(indtemp,indsza,indcol,indozo+1,indtau+1,indch4,ij)       &
488!          + poids(1,1,2,1,2,1)*ephot(indtemp,indsza,indcol+1,indozo,indtau+1,indch4,ij)       &
489!          + poids(1,1,2,2,2,1)*ephot(indtemp,indsza,indcol+1,indozo+1,indtau+1,indch4,ij)     &
490!          + poids(1,2,1,1,2,1)*ephot(indtemp,indsza+1,indcol,indozo,indtau+1,indch4,ij)       &
491!          + poids(1,2,1,2,2,1)*ephot(indtemp,indsza+1,indcol,indozo+1,indtau+1,indch4,ij)     &
492!          + poids(1,2,2,1,2,1)*ephot(indtemp,indsza+1,indcol+1,indozo,indtau+1,indch4,ij)     &
493!          + poids(1,2,2,2,2,1)*ephot(indtemp,indsza+1,indcol+1,indozo+1,indtau+1,indch4,ij)   &
494!          + poids(2,1,1,1,2,1)*ephot(indtemp+1,indsza,indcol,indozo,indtau+1,indch4,ij)       &
495!          + poids(2,1,1,2,2,1)*ephot(indtemp+1,indsza,indcol,indozo+1,indtau+1,indch4,ij)     &
496!          + poids(2,1,2,1,2,1)*ephot(indtemp+1,indsza,indcol+1,indozo,indtau+1,indch4,ij)     &
497!          + poids(2,1,2,2,2,1)*ephot(indtemp+1,indsza,indcol+1,indozo+1,indtau+1,indch4,ij)   &
498!          + poids(2,2,1,1,2,1)*ephot(indtemp+1,indsza+1,indcol,indozo,indtau+1,indch4,ij)     &
499!          + poids(2,2,1,2,2,1)*ephot(indtemp+1,indsza+1,indcol,indozo+1,indtau+1,indch4,ij)   &
500!          + poids(2,2,2,1,2,1)*ephot(indtemp+1,indsza+1,indcol+1,indozo,indtau+1,indch4,ij)   &
501!          + poids(2,2,2,2,2,1)*ephot(indtemp+1,indsza+1,indcol+1,indozo+1,indtau+1,indch4,ij)
502! CH4
503          + poids(1,1,1,1,1,2)*ephot(indtemp,indsza,indcol,indozo,indtau,indch4+1,ij)         &
504          + poids(1,1,1,2,1,2)*ephot(indtemp,indsza,indcol,indozo+1,indtau,indch4+1,ij)       &
505          + poids(1,1,2,1,1,2)*ephot(indtemp,indsza,indcol+1,indozo,indtau,indch4+1,ij)       &
506          + poids(1,1,2,2,1,2)*ephot(indtemp,indsza,indcol+1,indozo+1,indtau,indch4+1,ij)     &
507          + poids(1,2,1,1,1,2)*ephot(indtemp,indsza+1,indcol,indozo,indtau,indch4+1,ij)       &
508          + poids(1,2,1,2,1,2)*ephot(indtemp,indsza+1,indcol,indozo+1,indtau,indch4+1,ij)     &
509          + poids(1,2,2,1,1,2)*ephot(indtemp,indsza+1,indcol+1,indozo,indtau,indch4+1,ij)     &
510          + poids(1,2,2,2,1,2)*ephot(indtemp,indsza+1,indcol+1,indozo+1,indtau,indch4+1,ij)
511!          + poids(2,1,1,1,1,2)*ephot(indtemp+1,indsza,indcol,indozo,indtau,indch4+1,ij) &
512!          + poids(2,1,1,2,1,2)*ephot(indtemp+1,indsza,indcol,indozo+1,indtau,indch4+1,ij) &
513!          + poids(2,1,2,1,1,2)*ephot(indtemp+1,indsza,indcol+1,indozo,indtau,indch4+1,ij) &
514!          + poids(2,1,2,2,1,2)*ephot(indtemp+1,indsza,indcol+1,indozo+1,indtau,indch4+1,ij) &
515!          + poids(2,2,1,1,1,2)*ephot(indtemp+1,indsza+1,indcol,indozo,indtau,indch4+1,ij) &
516!          + poids(2,2,1,2,1,2)*ephot(indtemp+1,indsza+1,indcol,indozo+1,indtau,indch4+1,ij) &
517!          + poids(2,2,2,1,1,2)*ephot(indtemp+1,indsza+1,indcol+1,indozo,indtau,indch4+1,ij) &
518!          + poids(2,2,2,2,1,2)*ephot(indtemp+1,indsza+1,indcol+1,indozo+1,indtau,indch4+1,ij) &
519!!
520!          + poids(1,1,1,1,2,2)*ephot(indtemp,indsza,indcol,indozo,indtau+1,indch4+1,ij) &
521!          + poids(1,1,1,2,2,2)*ephot(indtemp,indsza,indcol,indozo+1,indtau+1,indch4+1,ij) &
522!          + poids(1,1,2,1,2,2)*ephot(indtemp,indsza,indcol+1,indozo,indtau+1,indch4+1,ij) &
523!          + poids(1,1,2,2,2,2)*ephot(indtemp,indsza,indcol+1,indozo+1,indtau+1,indch4+1,ij) &
524!          + poids(1,2,1,1,2,2)*ephot(indtemp,indsza+1,indcol,indozo,indtau+1,indch4+1,ij) &
525!          + poids(1,2,1,2,2,2)*ephot(indtemp,indsza+1,indcol,indozo+1,indtau+1,indch4+1,ij) &
526!          + poids(1,2,2,1,2,2)*ephot(indtemp,indsza+1,indcol+1,indozo,indtau+1,indch4+1,ij) &
527!          + poids(1,2,2,2,2,2)*ephot(indtemp,indsza+1,indcol+1,indozo+1,indtau+1,indch4+1,ij) &
528!          + poids(2,1,1,1,2,2)*ephot(indtemp+1,indsza,indcol,indozo,indtau+1,indch4+1,ij) &
529!          + poids(2,1,1,2,2,2)*ephot(indtemp+1,indsza,indcol,indozo+1,indtau+1,indch4+1,ij) &
530!          + poids(2,1,2,1,2,2)*ephot(indtemp+1,indsza,indcol+1,indozo,indtau+1,indch4+1,ij) &
531!          + poids(2,1,2,2,2,2)*ephot(indtemp+1,indsza,indcol+1,indozo+1,indtau+1,indch4+1,ij) &
532!          + poids(2,2,1,1,2,2)*ephot(indtemp+1,indsza+1,indcol,indozo,indtau+1,indch4+1,ij) &
533!          + poids(2,2,1,2,2,2)*ephot(indtemp+1,indsza+1,indcol,indozo+1,indtau+1,indch4+1,ij) &
534!          + poids(2,2,2,1,2,2)*ephot(indtemp+1,indsza+1,indcol+1,indozo,indtau+1,indch4+1,ij) &
535!          + poids(2,2,2,2,2,2)*ephot(indtemp+1,indsza+1,indcol+1,indozo+1,indtau+1,indch4+1,ij)
536
537         end do
538       end if
539
540!     correction for sun distance
541
542         do ij = 1,nd
543!            j(l,ij) = j(l,ij)*(1.52/dist_sol)**2.
544            j(l,ij) = j(l,ij)*(1.0/dist_sol)**2.
545            if (photoheat) e(l,ij) = e(l,ij)*(1.0/dist_sol)**2.
546 
547            ! Only during daylight.
548            if((ngrid.eq.1))then
549                  j(l,ij)= j(l,ij)* 0.25 / cos(sza*pi/180.) ! globally averaged = divide by 4
550                  if (photoheat) e(l,ij)= e(l,ij)* 0.25 / cos(sza*pi/180.) ! globally averaged = divide by 4
551            elseif(diurnal .eqv. .false.) then
552                  j(l,ij)= j(l,ij) * fractcol
553                  if (photoheat) e(l,ij)= e(l,ij) * fractcol
554            endif
555
556
557         end do
558
559
560
561!==========================================================================
562!     end of loop over vertical levels
563!==========================================================================
564
565      end do
566
567      else
568
569!==========================================================================
570!     night
571!==========================================================================
572
573         j(:,:) = 0.
574         if (photoheat) e(:,:) = 0.
575
576      end if
577
578! fill v_phot array
579
580      v_phot(:,:) = 0.
581      e_phot(:,:) = 0.
582
583! Order of photolysis reaction has to be the same in monoreact file and the phototable file
584      ij      = 0
585      nb_phot = 0
586      do while(nb_phot<nb_phot_hv_max)
587        ij      = ij + 1
588        nb_phot = nb_phot + 1
589        do l = 1,lswitch-1
590          v_phot(l,nb_phot) = j(l,ij)
591          if (photoheat) e_phot(l,nb_phot) = e(l,ij)
592        end do
593        if (three_prod(ij)) then
594          nb_phot = nb_phot + 1
595          do l = 1,lswitch-1
596            v_phot(l,nb_phot) = j(l,ij)
597            if (photoheat) e_phot(l,nb_phot) = e(l,ij)
598          end do
599        end if
600      end do
601
602      return
603      end
604
605!*****************************************************************
Note: See TracBrowser for help on using the repository browser.