source: LMDZ6/trunk/libf/dyn3dmem/initfluxsto_p.f90 @ 5278

Last change on this file since 5278 was 5272, checked in by abarral, 2 days ago

Turn paramet.h into a module

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