source: LMDZ5/branches/IPSLCM6.0.8/libf/phylmd/iophys.F90 @ 5456

Last change on this file since 5456 was 2787, checked in by Laurent Fairhead, 8 years ago

Merged trunk changes r2727:2785 into testing branch

File size: 3.8 KB
Line 
1      subroutine iophys_ecrit(nom,lllm,titre,unite,px)
2
3      USE mod_phys_lmdz_para, ONLY: klon_omp, is_mpi_root
4      USE mod_phys_lmdz_transfert_para, ONLY: gather
5      USE mod_grid_phy_lmdz, ONLY: klon_glo, nbp_lon, nbp_lat, grid1dto2d_glo
6      IMPLICIT NONE
7
8
9
10!  Ecriture de variables diagnostiques au choix dans la physique
11!  dans un fichier NetCDF nomme  'diagfi'. Ces variables peuvent etre
12!  3d (ex : temperature), 2d (ex : temperature de surface), ou
13!  0d (pour un scalaire qui ne depend que du temps : ex : la longitude
14!  solaire)
15!  (ou encore 1d, dans le cas de testphys1d, pour sortir une colonne)
16!  La periode d'ecriture est donnee par
17!  "ecritphy " regle dans le fichier de controle de run :  run.def
18!
19!    writediagfi peut etre appele de n'importe quelle subroutine
20!    de la physique, plusieurs fois. L'initialisation et la creation du
21!    fichier se fait au tout premier appel.
22!
23! WARNING : les variables dynamique (u,v,t,q,ps)
24!  sauvees par writediagfi avec une
25! date donnee sont legerement differentes que dans le fichier histoire car
26! on ne leur a pas encore ajoute de la dissipation et de la physique !!!
27! IL est  RECOMMANDE d'ajouter les tendance physique a ces variables
28! avant l'ecriture dans diagfi (cf. physiq.F)
29
30! Modifs: Aug.2010 Ehouarn: enforce outputs to be real*4
31!
32!  parametres (input) :
33!  ----------
34!      unit : unite logique du fichier de sortie (toujours la meme)
35!      nom  : nom de la variable a sortir (chaine de caracteres)
36!      titre: titre de la variable (chaine de caracteres)
37!      unite : unite de la variable (chaine de caracteres)
38!      px : variable a sortir (real 0, 1, 2, ou 3d)
39!
40!=================================================================
41
42
43! Arguments on input:
44      integer lllm
45      character (len=*) :: nom,titre,unite
46      integer imjmax
47      parameter (imjmax=100000)
48      real px(klon_omp,lllm)
49      real xglo(klon_glo,lllm)
50      real zx(nbp_lon,nbp_lat,lllm)
51
52
53      CALL Gather(px,xglo)
54!$OMP MASTER
55      IF (is_mpi_root) THEN       
56        CALL Grid1Dto2D_glo(xglo,zx)
57        call iotd_ecrit(nom,lllm,titre,unite,zx)
58      ENDIF
59!$OMP END MASTER
60
61      return
62      end
63
64!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
65      SUBROUTINE iophys_ini
66      USE mod_phys_lmdz_para, ONLY: is_mpi_root
67      USE vertical_layers_mod, ONLY: presnivs
68      USE regular_lonlat_mod, ONLY: lon_reg, lat_reg
69      USE dimphy, ONLY: klev
70
71      IMPLICIT NONE
72
73!=======================================================================
74!
75!   Auteur:  L. Fairhead  ,  P. Le Van, Y. Wanherdrick, F. Forget
76!   -------
77!
78!   Objet:
79!   ------
80!
81!   'Initialize' the diagfi.nc file: write down dimensions as well
82!   as time-independent fields (e.g: geopotential, mesh area, ...)
83!
84!=======================================================================
85!-----------------------------------------------------------------------
86!   Declarations:
87!   -------------
88
89real pi
90
91!   Arguments:
92!   ----------
93
94!$OMP MASTER
95    IF (is_mpi_root) THEN       
96pi=2.*asin(1.)
97call iotd_ini('phys.nc   ', &
98!iim,jjp1,llm,rlonv(1:iim)*180./pi,rlatu*180./pi,presnivs)
99size(lon_reg),size(lat_reg),klev,lon_reg(:)*180./pi,lat_reg*180./pi,presnivs)
100    ENDIF
101!$OMP END MASTER
102
103      END
104
105#ifdef und
106      SUBROUTINE gr_fi_ecrit(nfield,nlon,iim,jjmp1,fi,ecrit)
107      IMPLICIT none
108
109!=======================================================================
110      INTEGER nfield,nlon,iim,jjmp1, jjm
111      REAL fi(nlon,nfield), ecrit(iim*jjmp1,nfield)
112
113      INTEGER i, n, ig
114
115      jjm = jjmp1 - 1
116      DO n = 1, nfield
117         DO i=1,iim
118            ecrit(i,n) = fi(1,n)
119            ecrit(i+jjm*iim,n) = fi(nlon,n)
120         ENDDO
121         DO ig = 1, nlon - 2
122           ecrit(iim+ig,n) = fi(1+ig,n)
123         ENDDO
124      ENDDO
125      RETURN
126      END
127
128#endif
Note: See TracBrowser for help on using the repository browser.