source: dynamico_lmdz/simple_physics/phyparam/dynphy_lonlat/iophys.F90

Last change on this file was 4223, checked in by dubos, 5 years ago

simple_physics : cleanup phyparam and iniphyparam

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