1 | MODULE chemistrydata_mod |
---|
2 | !-------------------------------------------- |
---|
3 | ! data for photochemistry |
---|
4 | !-------------------------------------------- |
---|
5 | IMPLICIT NONE |
---|
6 | !-------------------------------------------- |
---|
7 | ! dimensions of photolysis lookup table |
---|
8 | !-------------------------------------------- |
---|
9 | |
---|
10 | integer, parameter :: nd = 13 ! species |
---|
11 | integer, parameter :: nz = 143 ! altitude |
---|
12 | integer, parameter :: nozo = 7 ! ozone |
---|
13 | integer, parameter :: nsza = 27 ! solar zenith angle |
---|
14 | integer, parameter :: ntemp = 4 ! temperature |
---|
15 | integer, parameter :: ntau = 8 ! dust |
---|
16 | |
---|
17 | !-------------------------------------------- |
---|
18 | |
---|
19 | ! tabulated solar zenith angles |
---|
20 | real,parameter :: szatab(nsza) = [ 0., 5., 10., 15., 20., 25., & |
---|
21 | 30., 35., 40., 45., 50., 55., & |
---|
22 | 60., 65., 70., 75., 80., 82., & |
---|
23 | 84., 86., 88., 90., 91., 92., & |
---|
24 | 93., 94., 95. ] |
---|
25 | |
---|
26 | ! tabulated opacities |
---|
27 | real,parameter :: tautab(ntau)=[0., 0.2, 0.4, 0.6, 0.8, 1., 2., 4.] |
---|
28 | |
---|
29 | |
---|
30 | real,save,protected :: jphot(ntemp,nsza,nz,nozo,ntau,nd) |
---|
31 | !$OMP THREADPRIVATE(jphot) |
---|
32 | real,save,protected :: colairtab(nz) |
---|
33 | !$OMP THREADPRIVATE(colairtab) |
---|
34 | real,save,protected :: table_ozo(nozo) |
---|
35 | !$OMP THREADPRIVATE(table_ozo) |
---|
36 | |
---|
37 | CONTAINS |
---|
38 | |
---|
39 | subroutine read_phototable |
---|
40 | |
---|
41 | !*********************************************************************** |
---|
42 | ! |
---|
43 | ! subject: |
---|
44 | ! -------- |
---|
45 | ! |
---|
46 | ! read photolysis lookup table |
---|
47 | ! |
---|
48 | ! VERSION: 8/10/2014 |
---|
49 | ! |
---|
50 | ! Author: Franck Lefevre |
---|
51 | ! |
---|
52 | ! Arguments: |
---|
53 | ! ---------- |
---|
54 | ! |
---|
55 | !*********************************************************************** |
---|
56 | |
---|
57 | use ioipsl_getin_p_mod, only: getin_p |
---|
58 | use datafile_mod, only: datadir |
---|
59 | use mod_phys_lmdz_para, only: is_master |
---|
60 | use mod_phys_lmdz_transfert_para, only: bcast |
---|
61 | |
---|
62 | implicit none |
---|
63 | |
---|
64 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
65 | ! local: |
---|
66 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
67 | |
---|
68 | integer :: fic, ij, iozo, isza, itemp, iz, itau, ierr |
---|
69 | real :: xsza |
---|
70 | |
---|
71 | character(len = 128) :: phototable ! photolysis table file name |
---|
72 | |
---|
73 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
74 | ! set photolysis table input file name |
---|
75 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
76 | |
---|
77 | phototable = "jmars.20140930" ! default |
---|
78 | |
---|
79 | ! look for a " phototable= ..." option in def files |
---|
80 | |
---|
81 | call getin_p("phototable",phototable) |
---|
82 | |
---|
83 | fic = 81 |
---|
84 | |
---|
85 | if (is_master) then ! only the master needs to open file and read data |
---|
86 | |
---|
87 | open(fic, form = 'formatted', status = 'old', & |
---|
88 | file =trim(datadir)//"/"//trim(phototable),iostat=ierr) |
---|
89 | |
---|
90 | if (ierr /= 0) THEN |
---|
91 | write(*,*)'Error : cannot open photolysis lookup table ', trim(phototable) |
---|
92 | write(*,*)'It should be in :',trim(datadir),'/' |
---|
93 | write(*,*)'1) You can change this directory in callphys.def' |
---|
94 | write(*,*)' with:' |
---|
95 | write(*,*)' datadir=/path/to/the/directory' |
---|
96 | write(*,*)'2) You can change the input phototable file name in' |
---|
97 | write(*,*)' callphys.def with:' |
---|
98 | write(*,*)' phototable=filename' |
---|
99 | call abort_physic("read_phototable","missing "//trim(phototable)//"file",1) |
---|
100 | end if |
---|
101 | |
---|
102 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
103 | ! read photolys table |
---|
104 | !ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc |
---|
105 | |
---|
106 | print*, 'read photolysis lookup table ',trim(phototable) |
---|
107 | |
---|
108 | do itau = 1,ntau |
---|
109 | do itemp = 1,ntemp |
---|
110 | do iozo = 1,nozo |
---|
111 | do isza = 1,nsza |
---|
112 | do iz = nz,1,-1 |
---|
113 | read(fic,*) colairtab(iz), xsza, table_ozo(iozo) |
---|
114 | read(fic,'(7e11.4)') (jphot(itemp,isza,iz,iozo,itau,ij), ij= 1,nd) |
---|
115 | do ij = 1,nd |
---|
116 | if (jphot(itemp,isza,iz,iozo,itau,ij) == 1.e-30) then |
---|
117 | jphot(itemp,isza,iz,iozo,itau,ij) = 0. |
---|
118 | end if |
---|
119 | end do |
---|
120 | end do |
---|
121 | end do |
---|
122 | end do |
---|
123 | end do |
---|
124 | end do |
---|
125 | |
---|
126 | print*, 'lookup table...ok' |
---|
127 | close(fic) |
---|
128 | |
---|
129 | endif ! of if (is_master) |
---|
130 | |
---|
131 | ! broadcast the information to all cores |
---|
132 | call bcast(colairtab) |
---|
133 | call bcast(table_ozo) |
---|
134 | call bcast(jphot) |
---|
135 | |
---|
136 | end subroutine read_phototable |
---|
137 | |
---|
138 | END MODULE chemistrydata_mod |
---|