source: LMDZ6/branches/Amaury_dev/libf/dyn3dmem/initfluxsto_p.f90 @ 5172

Last change on this file since 5172 was 5159, checked in by abarral, 5 months ago

Put dimensions.h and paramet.h into modules

  • Property copyright set to
    Name of program: LMDZ
    Creation date: 1984
    Version: LMDZ5
    License: CeCILL version 2
    Holder: Laboratoire de m\'et\'eorologie dynamique, CNRS, UMR 8539
    See the license file in the root directory
File size: 6.9 KB
Line 
1! $Id$
2
3SUBROUTINE initfluxsto_p(infile, tstep, t_ops, t_wrt, fileid, filevid, filedid)
4  USE IOIPSL
5  USE parallel_lmdz
6  USE lmdz_write_field
7  USE misc_mod
8  USE comconst_mod, ONLY: pi
9  USE comvert_mod, ONLY: nivsigs
10  USE temps_mod, ONLY: annee_ref, day_ref, itau_dyn
11  USE lmdz_description, ONLY: descript
12  USE lmdz_iniprint, ONLY: lunout, prt_level
13  USE lmdz_comgeom
14
15  USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm
16  USE lmdz_paramet
17  IMPLICIT NONE
18
19
20  !   Routine d'initialisation des ecritures des fichiers histoires LMDZ
21  !   au format IOIPSL
22
23  !   Appels succesifs des routines: histbeg
24  !                              histhori
25  !                              histver
26  !                              histdef
27  !                              histend
28
29  !   Entree:
30
31  !  infile: nom du fichier histoire a creer
32  !  day0,anne0: date de reference
33  !  tstep: duree du pas de temps en seconde
34  !  t_ops: frequence de l'operation pour IOIPSL
35  !  t_wrt: frequence d'ecriture sur le fichier
36
37  !   Sortie:
38  !  fileid: ID du fichier netcdf cree
39  !  filevid:ID du fichier netcdf pour la grille v
40
41  !   L. Fairhead, LMD, 03/99
42
43  ! =====================================================================
44
45  !   Declarations
46
47
48
49  !   Arguments
50
51  CHARACTER(LEN = *) :: infile
52  REAL :: tstep, t_ops, t_wrt
53  INTEGER :: fileid, filevid, filedid
54
55  ! This routine needs IOIPSL
56  !   Variables locales
57
58  REAL :: nivd(1)
59  INTEGER :: tau0
60  REAL :: zjulian
61  CHARACTER(LEN = 3) :: str
62  CHARACTER(LEN = 10) :: ctrac
63  INTEGER :: iq
64  REAL :: rlong(iip1, jjp1), rlat(iip1, jjp1), rl(1, 1)
65  INTEGER :: uhoriid, vhoriid, thoriid, zvertiid, dhoriid, dvertiid
66  INTEGER :: ii, jj
67  INTEGER :: zan, idayref
68  LOGICAL :: ok_sync
69  INTEGER :: jjb, jje, jjn
70
71  ! definition du domaine d'ecriture pour le rebuild
72
73  INTEGER, DIMENSION(2) :: ddid
74  INTEGER, DIMENSION(2) :: dsg
75  INTEGER, DIMENSION(2) :: dsl
76  INTEGER, DIMENSION(2) :: dpf
77  INTEGER, DIMENSION(2) :: dpl
78  INTEGER, DIMENSION(2) :: dhs
79  INTEGER, DIMENSION(2) :: dhe
80
81  INTEGER :: dynu_domain_id
82  INTEGER :: dynv_domain_id
83
84
85  !  Initialisations
86
87  pi = 4. * atan (1.)
88  str = 'q  '
89  ctrac = 'traceur   '
90  ok_sync = .TRUE.
91
92  !  Appel a histbeg: creation du fichier netcdf et initialisations diverses
93  !
94
95  zan = annee_ref
96  idayref = day_ref
97  CALL ymds2ju(zan, 1, idayref, 0.0, zjulian)
98  tau0 = itau_dyn
99
100  DO jj = 1, jjp1
101    DO ii = 1, iip1
102      rlong(ii, jj) = rlonu(ii) * 180. / pi
103      rlat(ii, jj) = rlatu(jj) * 180. / pi
104    enddo
105  enddo
106
107  jjb = jj_begin
108  jje = jj_end
109  jjn = jj_nb
110
111  ddid = (/ 1, 2 /)
112  dsg = (/ iip1, jjp1 /)
113  dsl = (/ iip1, jjn /)
114  dpf = (/ 1, jjb /)
115  dpl = (/ iip1, jje /)
116  dhs = (/ 0, 0 /)
117  dhe = (/ 0, 0 /)
118
119  CALL flio_dom_set(mpi_size, mpi_rank, ddid, dsg, dsl, dpf, dpl, dhs, dhe, &
120          'box', dynu_domain_id)
121
122  CALL histbeg(trim(infile), iip1, rlong(:, 1), jjn, rlat(1, jjb:jje), &
123          1, iip1, 1, jjn, tau0, zjulian, tstep, uhoriid, &
124          fileid, dynu_domain_id)
125
126  !  Creation du fichier histoire pour la grille en V (oblige pour l'instant,
127  !  IOIPSL ne permet pas de grilles avec des nombres de point differents dans
128  !  un meme fichier)
129
130  DO jj = 1, jjm
131    DO ii = 1, iip1
132      rlong(ii, jj) = rlonv(ii) * 180. / pi
133      rlat(ii, jj) = rlatv(jj) * 180. / pi
134    enddo
135  enddo
136
137  jjb = jj_begin
138  jje = jj_end
139  jjn = jj_nb
140  IF (pole_sud) jje = jj_end - 1
141  IF (pole_sud) jjn = jj_nb - 1
142
143  ddid = (/ 1, 2 /)
144  dsg = (/ iip1, jjm /)
145  dsl = (/ iip1, jjn /)
146  dpf = (/ 1, jjb /)
147  dpl = (/ iip1, jje /)
148  dhs = (/ 0, 0 /)
149  dhe = (/ 0, 0 /)
150
151  CALL flio_dom_set(mpi_size, mpi_rank, ddid, dsg, dsl, dpf, dpl, dhs, dhe, &
152          'box', dynv_domain_id)
153
154  CALL histbeg('fluxstokev', iip1, rlong(:, 1), jjn, rlat(1, jjb:jje), &
155          1, iip1, 1, jjn, tau0, zjulian, tstep, vhoriid, &
156          filevid, dynv_domain_id)
157
158  rl(1, 1) = 1.
159
160  IF (mpi_rank==0) THEN
161    CALL histbeg('defstoke.nc', 1, rl, 1, rl, &
162            1, 1, 1, 1, &
163            tau0, zjulian, tstep, dhoriid, filedid)
164
165  ENDIF
166
167  !  Appel a histhori pour rajouter les autres grilles horizontales
168
169  DO jj = 1, jjp1
170    DO ii = 1, iip1
171      rlong(ii, jj) = rlonv(ii) * 180. / pi
172      rlat(ii, jj) = rlatu(jj) * 180. / pi
173    enddo
174  enddo
175
176  jjb = jj_begin
177  jje = jj_end
178  jjn = jj_nb
179
180  CALL histhori(fileid, iip1, rlong(:, jjb:jje), jjn, rlat(:, jjb:jje), &
181          'scalar', 'Grille points scalaires', thoriid)
182
183
184  !  Appel a histvert pour la grille verticale
185
186  CALL histvert(fileid, 'sig_s', 'Niveaux sigma', &
187          'sigma_level', &
188          llm, nivsigs, zvertiid)
189  ! Pour le fichier V
190  CALL histvert(filevid, 'sig_s', 'Niveaux sigma', &
191          'sigma_level', &
192          llm, nivsigs, zvertiid)
193  ! pour le fichier def
194  IF (mpi_rank==0) THEN
195    nivd(1) = 1
196    CALL histvert(filedid, 'sig_s', 'Niveaux sigma', &
197            'sigma_level', &
198            1, nivd, dvertiid)
199  ENDIF
200
201  !  Appels a histdef pour la definition des variables a sauvegarder
202
203  CALL histdef(fileid, "phis", "Surface geop. height", "-", &
204          iip1, jjn, thoriid, 1, 1, 1, -99, 32, &
205          "once", t_ops, t_wrt)
206
207  CALL histdef(fileid, "aire", "Grid area", "-", &
208          iip1, jjn, thoriid, 1, 1, 1, -99, 32, &
209          "once", t_ops, t_wrt)
210
211  IF (mpi_rank==0) THEN
212    CALL histdef(filedid, "dtvr", "tps dyn", "s", &
213            1, 1, dhoriid, 1, 1, 1, -99, 32, &
214            "once", t_ops, t_wrt)
215
216    CALL histdef(filedid, "istdyn", "tps stock", "s", &
217            1, 1, dhoriid, 1, 1, 1, -99, 32, &
218            "once", t_ops, t_wrt)
219
220    CALL histdef(filedid, "istphy", "tps stock phy", "s", &
221            1, 1, dhoriid, 1, 1, 1, -99, 32, &
222            "once", t_ops, t_wrt)
223
224  ENDIF
225
226  ! Masse
227
228  CALL histdef(fileid, 'masse', 'Masse', 'kg', &
229          iip1, jjn, thoriid, llm, 1, llm, zvertiid, &
230          32, 'inst(X)', t_ops, t_wrt)
231
232  !  Pbaru
233
234  CALL histdef(fileid, 'pbaru', 'flx de masse zonal', 'kg m/s', &
235          iip1, jjn, uhoriid, llm, 1, llm, zvertiid, &
236          32, 'inst(X)', t_ops, t_wrt)
237
238
239  !  Pbarv
240
241  IF (pole_sud) jjn = jj_nb - 1
242
243  CALL histdef(filevid, 'pbarv', 'flx de masse mer', 'kg m/s', &
244          iip1, jjn, vhoriid, llm, 1, llm, zvertiid, &
245          32, 'inst(X)', t_ops, t_wrt)
246
247  !  w
248
249  IF (pole_sud) jjn = jj_nb
250  CALL histdef(fileid, 'w', 'flx de masse vert', 'kg m/s', &
251          iip1, jjn, thoriid, llm, 1, llm, zvertiid, &
252          32, 'inst(X)', t_ops, t_wrt)
253
254
255  !  Temperature potentielle
256
257  CALL histdef(fileid, 'teta', 'temperature potentielle', '-', &
258          iip1, jjn, thoriid, llm, 1, llm, zvertiid, &
259          32, 'inst(X)', t_ops, t_wrt)
260  !
261
262
263  ! Geopotentiel
264
265  CALL histdef(fileid, 'phi', 'geopotentiel instantane', '-', &
266          iip1, jjn, thoriid, llm, 1, llm, zvertiid, &
267          32, 'inst(X)', t_ops, t_wrt)
268
269  !  Fin
270
271  CALL histend(fileid)
272  CALL histend(filevid)
273  IF (mpi_rank==0) CALL histend(filedid)
274  IF (ok_sync) THEN
275    CALL histsync(fileid)
276    CALL histsync(filevid)
277    IF (mpi_rank==0) CALL histsync(filedid)
278  ENDIF
279
280END SUBROUTINE initfluxsto_p
Note: See TracBrowser for help on using the repository browser.