source: LMDZ5/trunk/libf/phylmd/iophys.F90 @ 2671

Last change on this file since 2671 was 2643, checked in by Ehouarn Millour, 8 years ago
  • move iophys.F90 to phylmd since it depends on files there (with some modifications, iophys.F90 could be made generic enough to be in phy_common).
  • some adaptations to make phydev XIOS2 compliant.

EM

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