source: LMDZ6/trunk/libf/dyn3dmem/writehist_loc.f90 @ 5456

Last change on this file since 5456 was 5285, checked in by abarral, 2 months ago

As discussed internally, remove generic ONLY: ... for new _mod_h 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: 4.2 KB
RevLine 
[1632]1!
2! $Id: writedynav_p.F 1279 2009-12-10 09:02:56Z fairhead $
3!
[5246]4subroutine writehist_loc( time, vcov, ucov,teta,ppk,phi,q, &
5        masse,ps,phis)
[1632]6
[5246]7  ! This routine needs IOIPSL
[5282]8  USE iniprint_mod_h
[5281]9  USE comgeom_mod_h
[5246]10  USE ioipsl
[5267]11
[5246]12  USE parallel_lmdz
13  USE misc_mod
14  USE infotrac, ONLY : nqtot
15  use com_io_dyn_mod, only : histid,histvid,histuid
16  USE comconst_mod, ONLY: cpp
17  USE temps_mod, ONLY: itau_dyn
[1632]18
[5271]19  USE dimensions_mod, ONLY: iim, jjm, llm, ndm
[5285]20USE paramet_mod_h
[5271]21implicit none
[1632]22
[5246]23  !
24  !   Ecriture du fichier histoire au format IOIPSL
25  !
26  !   Appels succesifs des routines: histwrite
27  !
28  !   Entree:
29  !  histid: ID du fichier histoire
30  !  time: temps de l'ecriture
31  !  vcov: vents v covariants
32  !  ucov: vents u covariants
33  !  teta: temperature potentielle
34  !  phi : geopotentiel instantane
35  !  q   : traceurs
36  !  masse: masse
37  !  ps   :pression au sol
38  !  phis : geopotentiel au sol
39  !
40  !
41  !   Sortie:
42  !  fileid: ID du fichier netcdf cree
43  !
44  !   L. Fairhead, LMD, 03/99
45  !
46  ! =====================================================================
47  !
48  !   Declarations
[5271]49
[5272]50
[5246]51  !
52  !   Arguments
53  !
[1632]54
[5246]55  REAL :: vcov(ijb_v:ije_v,llm),ucov(ijb_u:ije_u,llm)
56  REAL :: teta(ijb_u:ije_u,llm),phi(ijb_u:ije_u,llm)
57  REAL :: ppk(ijb_u:ije_u,llm)
58  REAL :: ps(ijb_u:ije_u),masse(ijb_u:ije_u,llm)
59  REAL :: phis(ijb_u:ije_u)
60  REAL :: q(ijb_u:ije_u,llm,nqtot)
61  integer :: time
[1632]62
[5246]63
64  ! This routine needs IOIPSL
65  !   Variables locales
66  !
67  INTEGER,SAVE,ALLOCATABLE :: ndex2d(:),ndexu(:),ndexv(:)
68  INTEGER :: iq, ii, ll
69  REAL,SAVE,ALLOCATABLE :: tm(:,:)
70  REAL,SAVE,ALLOCATABLE :: vnat(:,:),unat(:,:)
71  logical :: ok_sync
72  integer :: itau_w
73  integer :: ijb,ije,jjn
74  LOGICAL,SAVE :: first=.TRUE.
[1632]75!$OMP THREADPRIVATE(first)
76
[5246]77  !
78  !  Initialisations
79  !
80  if (adjust) return
81
82  IF (first) THEN
[1632]83!$OMP BARRIER
84!$OMP MASTER
[5246]85    ALLOCATE(unat(ijb_u:ije_u,llm))
86    ALLOCATE(vnat(ijb_v:ije_v,llm))
87    ALLOCATE(tm(ijb_u:ije_u,llm))
88    ALLOCATE(ndex2d(ijnb_u*llm))
89    ALLOCATE(ndexu(ijnb_u*llm))
90    ALLOCATE(ndexv(ijnb_v*llm))
91    ndex2d = 0
92    ndexu = 0
93    ndexv = 0
[1632]94!$OMP END MASTER
95!$OMP BARRIER
[5246]96    first=.FALSE.
97  ENDIF
[1632]98
[5246]99  ok_sync = .TRUE.
100  itau_w = itau_dyn + time
[1632]101
[5246]102  ! Passage aux composantes naturelles du vent
103  call covnat_loc(llm, ucov, vcov, unat, vnat)
[1632]104
[5246]105  !
106  !  Appels a histwrite pour l'ecriture des variables a sauvegarder
107  !
108  !  Vents U
109  !
110
111!$OMP BARRIER
[1632]112!$OMP MASTER
[5246]113  ijb=ij_begin
114  ije=ij_end
115  jjn=jj_nb
[1632]116
[5246]117  call histwrite(histuid, 'u', itau_w, unat(ijb:ije,:), &
118        iip1*jjn*llm, ndexu)
119!$OMP END MASTER
120
121  !
122  !  Vents V
123  !
124  ije=ij_end
125  if (pole_sud) jjn=jj_nb-1
126  if (pole_sud) ije=ij_end-iip1
[1632]127!$OMP BARRIER
[5246]128!$OMP MASTER
129  call histwrite(histvid, 'v', itau_w, vnat(ijb:ije,:), &
130        iip1*jjn*llm, ndexv)
131!$OMP END MASTER
[1632]132
133
[5246]134  !
135  !  Temperature potentielle
136  !
137  ijb=ij_begin
138  ije=ij_end
139  jjn=jj_nb
140!$OMP MASTER
141  call histwrite(histid, 'theta', itau_w, teta(ijb:ije,:), &
142        iip1*jjn*llm, ndexu)
143!$OMP END MASTER
[1632]144
[5246]145  !
146  !  Temperature
147  !
[1632]148
[5246]149!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
150  do ll=1,llm
151    do ii = ijb, ije
152      tm(ii,ll) = teta(ii,ll) * ppk(ii,ll)/cpp
153    enddo
154  enddo
[1632]155!$OMP ENDDO
156
[5246]157!$OMP MASTER
158  call histwrite(histid, 'temp', itau_w, tm(ijb:ije,:), &
159        iip1*jjn*llm, ndexu)
[1632]160!$OMP END MASTER
161
162
[5246]163  !
164  !  Geopotentiel
165  !
166!$OMP MASTER
167  call histwrite(histid, 'phi', itau_w, phi(ijb:ije,:), &
168        iip1*jjn*llm, ndexu)
[1632]169!$OMP END MASTER
170
171
[5246]172  !
173  !  Traceurs
174  !
175  !!$OMP MASTER
176  !    DO iq=1,nqtot
177  !      call histwrite(histid, tracers(iq)%longName, itau_w,
178  ! .                   q(ijb:ije,:,iq), iip1*jjn*llm, ndexu)
179  !    enddo
180  !!$OMP END MASTER
[1632]181
182
[5246]183  !
184  !  Masse
185  !
186!$OMP MASTER
187   call histwrite(histid, 'masse', itau_w, masse(ijb:ije,:), &
188         iip1*jjn*llm, ndexu)
[1632]189!$OMP END MASTER
190
191
[5246]192  !
193  !  Pression au sol
194  !
195!$OMP MASTER
196   call histwrite(histid, 'ps', itau_w, ps(ijb:ije), &
197         iip1*jjn, ndex2d)
[1632]198!$OMP END MASTER
199
[5246]200  !
201  !  Geopotentiel au sol
202  !
203!$OMP MASTER
204    ! call histwrite(histid, 'phis', itau_w, phis(ijb:ije),
205  ! .                 iip1*jjn, ndex2d)
[1632]206!$OMP END MASTER
207
[5246]208  !
209  !  Fin
210  !
211!$OMP MASTER
212  if (ok_sync) then
213    call histsync(histid)
214    call histsync(histvid)
215    call histsync(histuid)
216  endif
[1632]217!$OMP END MASTER
[5267]218
[5246]219end subroutine writehist_loc
Note: See TracBrowser for help on using the repository browser.