! $Id$ ! SUBROUTINE writedyn_xios( vcov, ucov,teta,ppk,phi,q, & & masse,ps,phis) USE lmdz_xios USE parallel_lmdz USE misc_mod USE infotrac, ONLY : nqtot use com_io_dyn_mod, only : histaveid,histvaveid,histuaveid USE comconst_mod, ONLY: cpp USE temps_mod, ONLY: itau_dyn USE mod_xios_dyn3dmem, ONLY : writefield_dyn_u, writefield_dyn_v implicit none ! ! Ecriture du fichier histoire au format xios ! ! ! Entree: ! vcov: vents v covariants ! ucov: vents u covariants ! teta: temperature potentielle ! phi : geopotentiel instantane ! q : traceurs ! masse: masse ! ps :pression au sol ! phis : geopotentiel au sol ! ! L. Fairhead, LMD, 03/21 ! ! ===================================================================== ! ! Declarations include "dimensions.h" include "paramet.h" include "comgeom.h" include "description.h" include "iniprint.h" ! ! Arguments ! REAL vcov(ijb_v:ije_v,llm),ucov(ijb_u:ije_u,llm) REAL teta(ijb_u:ije_u,llm),phi(ijb_u:ije_u,llm) REAL ppk(ijb_u:ije_u,llm) REAL ps(ijb_u:ije_u),masse(ijb_u:ije_u,llm) REAL phis(ijb_u:ije_u) REAL q(ijb_u:ije_u,llm,nqtot) integer time ! Variables locales ! INTEGER,SAVE,ALLOCATABLE :: ndex2d(:),ndexu(:),ndexv(:) INTEGER :: iq, ii, ll REAL,SAVE,ALLOCATABLE :: tm(:,:) REAL,SAVE,ALLOCATABLE :: vnat(:,:),unat(:,:) REAL,SAVE,ALLOCATABLE :: vbuffer(:,:) logical ok_sync integer itau_w integer :: ijb,ije,jjn LOGICAL,SAVE :: first=.TRUE. LOGICAL,SAVE :: debuglf=.true. !$OMP THREADPRIVATE(debuglf) !$OMP THREADPRIVATE(first) ! ! Initialisations ! ! WRITE(*,*)'IN WRITEDYN_XIOS' IF (first) THEN !$OMP BARRIER !$OMP MASTER ALLOCATE(unat(ijb_u:ije_u,llm)) ALLOCATE(vnat(ijb_v:ije_v,llm)) IF (pole_sud) THEN ALLOCATE(vbuffer(ijb_v:ije_v+iip1,llm)) ELSE ALLOCATE(vbuffer(ijb_v:ije_v+iip1,llm)) ENDIF ALLOCATE(tm(ijb_u:ije_u,llm)) ALLOCATE(ndex2d(ijnb_u*llm)) ALLOCATE(ndexu(ijnb_u*llm)) ALLOCATE(ndexv(ijnb_v*llm)) unat = 0.; vnat = 0.; tm = 0. ; ndex2d = 0 ndexu = 0 ndexv = 0 vbuffer=0. !$OMP END MASTER !$OMP BARRIER first=.FALSE. ENDIF ok_sync = .TRUE. itau_w = itau_dyn + time ! Passage aux composantes naturelles du vent call covnat_loc(llm, ucov, vcov, unat, vnat) ! ! Appels a histwrite pour l'ecriture des variables a sauvegarder ! ! Vents U ! ijb=ij_begin ije=ij_end jjn=jj_nb CALL writefield_dyn_u('U', unat(ijb:ije,:)) ! ! Vents V ! ije=ij_end IF (pole_sud) THEN jjn=jj_nb-1 ije=ij_end-iip1 ENDIF vbuffer(ijb:ije,:)=vnat(ijb:ije,:) IF (pole_sud) THEN CALL writefield_dyn_v('V', vbuffer(ijb:ije+iip1,:)) ELSE CALL writefield_dyn_v('V', vbuffer(ijb:ije,:)) ENDIF ! ! Temperature potentielle moyennee ! ijb=ij_begin ije=ij_end jjn=jj_nb CALL writefield_dyn_u('THETA', teta(ijb:ije,:)) ! ! Temperature moyennee ! !$OMP DO SCHEDULE(STATIC,OMP_CHUNK) do ll=1,llm do ii = ijb, ije tm(ii,ll) = teta(ii,ll) * ppk(ii,ll)/cpp enddo enddo !$OMP ENDDO CALL writefield_dyn_u('TEMP', tm(ijb:ije,:)) ! ! Geopotentiel ! CALL writefield_dyn_u('PHI', phi(ijb:ije,:)) ! ! Tracers? ! ! DO iq=1,nqtot ! ENDDO ! ! Masse ! CALL writefield_dyn_u('MASSE', masse(ijb:ije,:)) ! ! Pression au sol ! CALL writefield_dyn_u('PS', ps(ijb:ije)) END