source: LMDZ5/branches/LMDZ6_rc0/libf/phymar/iophys.F90 @ 5080

Last change on this file since 5080 was 2160, checked in by Laurent Fairhead, 10 years ago

Merged trunk changes -r2070:2158 into testing branch. Compilation problems introduced by revision r2155 have been corrected by hand

File size: 3.6 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
72      IMPLICIT NONE
73
74!=======================================================================
75!
76!   Auteur:  L. Fairhead  ,  P. Le Van, Y. Wanherdrick, F. Forget
77!   -------
78!
79!   Objet:
80!   ------
81!
82!   'Initialize' the diagfi.nc file: write down dimensions as well
83!   as time-independent fields (e.g: geopotential, mesh area, ...)
84!
85!=======================================================================
86!-----------------------------------------------------------------------
87!   Declarations:
88!   -------------
89
90#include "dimensions.h"
91#include "paramet.h"
92#include "comgeom.h"
93#include "comvert.h"
94
95real pi
96
97!   Arguments:
98!   ----------
99
100!$OMP MASTER
101    IF (is_mpi_root) THEN       
102pi=2.*asin(1.)
103call iotd_ini('phys.nc   ', &
104iim,jjp1,llm,rlonv(1:iim)*180./pi,rlatu*180./pi,presnivs)
105    ENDIF
106!$OMP END MASTER
107
108      END
109
110#ifdef und
111      SUBROUTINE gr_fi_ecrit(nfield,nlon,iim,jjmp1,fi,ecrit)
112      IMPLICIT none
113
114!=======================================================================
115      INTEGER nfield,nlon,iim,jjmp1, jjm
116      REAL fi(nlon,nfield), ecrit(iim*jjmp1,nfield)
117
118      INTEGER i, n, ig
119
120      jjm = jjmp1 - 1
121      DO n = 1, nfield
122         DO i=1,iim
123            ecrit(i,n) = fi(1,n)
124            ecrit(i+jjm*iim,n) = fi(nlon,n)
125         ENDDO
126         DO ig = 1, nlon - 2
127           ecrit(iim+ig,n) = fi(1+ig,n)
128         ENDDO
129      ENDDO
130      RETURN
131      END
132
133#endif
Note: See TracBrowser for help on using the repository browser.