source: LMDZ5/trunk/libf/phymar/physiq.F90 @ 2320

Last change on this file since 2320 was 2320, checked in by Ehouarn Millour, 9 years ago

Physics/dynamics separation: make an infotrac_phy module, which should be used from within the physics, and is initialized from infotrac (dynamics) via iniphysiq.
EM

File size: 67.5 KB
Line 
1! $Id: physiq.F 1565 2011-08-31 12:53:29Z jghattas $
2!#define IO_DEBUG
3
4!========================================================================================================================
5! Adaptation de physiq.F90 de phydev pour mettre en oeuvre une interface dynamique de LMDZ/physique de MAR.
6! Martin Ménégoz (Février 2014) martin.menegoz@lgge.obs.ujf-grenoble.fr
7! Contact LGGE: gallee@lgge.obs.ujf-grenoble.fr (modèle MAR) ; contact LMD: Frederic.hourdin@lmd.jussieu.fr (modèle LMDZ)
8!========================================================================================================================
9
10      SUBROUTINE physiq (nlon,nlev, &
11     &            debut,lafin,jD_cur, jH_cur,pdtphys, &
12     &            paprs,pplay,pphi,pphis,ppresnivs, &
13     &            u,v,t,qx, &
14     &            flxmass_w, &
15     &            d_u, d_v, d_t, d_qx, d_ps &
16     &            , dudyn )
17
18      USE dimphy, only : klon,klev,klevp1
19      USE infotrac_phy, only : nqtot
20      USE comgeomphy, only : rlatd,rlond,airephy
21      !USE comcstphy, only : rg
22      USE iophy, only : histbeg_phy,histwrite_phy
23      USE ioipsl, only : getin,histvert,histdef,histend,ymds2ju,ju2ymds,histsync
24      USE mod_phys_lmdz_para, only : jj_nb
25      USE phys_state_var_mod, only : phys_state_var_init
26! Modules LMDZ utilisés pour LMDZ-MAR:
27      USE control_mod     
28
29! Modules utilisé pour MAR dans DYN_to_PHY_MAR.f90
30      use Mod_Real
31      use Mod_PHY____dat
32      use Mod_PHY____grd
33      use Mod_PHY_S0_grd
34      use Mod_SISVAT_grd
35      use Mod_SISVAT_dat
36      use Mod_SISVAT_gpt ! surface heat flxes in outputs
37      use Mod_PHY_DY_kkl
38      use Mod_PHY_CM_kkl ! pour écrire les snowfall et rainfall dans les outputs
39      use Mod_PHY_CP_kkl ! pour écrire les snowfall et rainfall dans les outputs
40
41#ifdef CPP_XIOS
42      USE wxios
43#endif
44
45      IMPLICIT none
46
47#include "dimensions.h"
48! Include LMDZ utilisés ici pour MAR-LMDZ:
49#include "comvert.h"
50#include "YOMCST.h"
51
52!======================================================================
53! Arguments du moniteur general de la physique dans le modele LMDZ
54!======================================================================
55!
56!  Arguments:
57!
58! nlon----input-I-nombre de points horizontaux
59! nlev----input-I-nombre de couches verticales, doit etre egale a klev
60! debut---input-L-variable logique indiquant le premier passage
61! lafin---input-L-variable logique indiquant le dernier passage
62! jD_cur       -R-jour courant a l'appel de la physique (jour julien)
63! jH_cur       -R-heure courante a l'appel de la physique (jour julien)
64! pdtphys-input-R-pas d'integration pour la physique (seconde)
65! paprs---input-R-pression pour chaque inter-couche (en Pa)
66! pplay---input-R-pression pour le mileu de chaque couche (en Pa)
67! pphi----input-R-geopotentiel de chaque couche (g z) (reference sol)
68! pphis---input-R-geopotentiel du sol
69! ppresnivs-input_R_pressions approximat. des milieux couches ( en PA)
70! u-------input-R-vitesse dans la direction X (de O a E) en m/s
71! v-------input-R-vitesse Y (de S a N) en m/s
72! t-------input-R-temperature (K)
73! qx------input-R-humidite specifique (kg/kg) et d'autres traceurs
74! d_t_dyn-input-R-tendance dynamique pour "t" (K/s)
75! d_q_dyn-input-R-tendance dynamique pour "q" (kg/kg/s)
76! flxmass_w -input-R- flux de masse verticale
77! d_u-----output-R-tendance physique de "u" (m/s/s)
78! d_v-----output-R-tendance physique de "v" (m/s/s)
79! d_t-----output-R-tendance physique de "t" (K/s)
80! d_qx----output-R-tendance physique de "qx" (kg/kg/s)
81! d_ps----output-R-tendance physique de la pression au sol
82!IM
83
84!======================================================================
85! Variables ajoutés pour l'utilisation de la physique de MAR
86!======================================================================
87
88      integer,parameter :: jjmp1=jjm+1-1/jjm
89      integer,parameter :: iip1=iim+1
90
91! Indices des traceurs (qx)
92! NB: Tous les traceurs de MAR (vapeur d'eau et hydrométéores, solides et liquides) sont transportés via la variables qx (tendances: d_qx)
93! Il doivent être déclarés dans un fichier traceur.def avant de lancer la simulation
94
95      INTEGER, PARAMETER :: ivap  = 1  ! indice de traceurs pour vapeur d'eau
96      INTEGER, PARAMETER :: iliq  = 2  ! indice de traceurs pour eau liquide
97      INTEGER, PARAMETER :: iice  = 3  ! indice de traceurs pour eau solide
98      INTEGER, PARAMETER :: icin  = 4  ! indice de traceurs pour CIN
99      INTEGER, PARAMETER :: isnow = 5  ! indice de traceurs pour flocons de neige
100      INTEGER, PARAMETER :: irain = 6  ! indice de traceurs pour gouttes de pluie
101      INTEGER, PARAMETER :: itke  = 7  ! indice de traceurs pour tke
102      INTEGER, PARAMETER :: itked = 8  ! indice de traceurs pour tke dissipation
103! #cw INTEGER, PARAMETER :: iccn  = 9  ! indice de traceurs pour CCN
104
105!======================================================================
106! Arguments de la routine physiq.F90:
107!======================================================================
108      integer,intent(in) :: nlon ! number of atmospheric colums
109      integer,intent(in) :: nlev ! number of vertical levels (should be =klev)
110      real,intent(in) :: jD_cur ! current day number (Julian day)
111      real,intent(in) :: jH_cur ! current time of day (as fraction of day)
112      logical,intent(in) :: debut ! signals first call to physics
113      logical,intent(in) :: lafin ! signals last call to physics
114      real,intent(in) :: pdtphys ! physics time step (s)
115      real,intent(in) :: paprs(klon,klev+1) ! interlayer pressure (Pa)
116      real,intent(in) :: pplay(klon,klev) ! mid-layer pressure (Pa)
117      real,intent(in) :: pphi(klon,klev) ! geopotential at mid-layer
118      real,intent(in) :: pphis(klon) ! surface geopotential
119      real,intent(in) :: ppresnivs(klev) ! pseudo-pressure (Pa) of mid-layers
120      real,intent(in) :: u(klon,klev) ! eastward zonal wind (m/s)
121      real,intent(in) :: v(klon,klev) ! northward meridional wind (m/s)
122      real,intent(in) :: t(klon,klev) ! temperature (K)
123      real,intent(in) :: qx(klon,klev,nqtot) ! tracers (.../kg_air)
124      real,intent(in) :: flxmass_w(klon,klev) ! vertical mass flux
125      real,intent(out) :: d_u(klon,klev) ! physics tendency on u (m/s/s)
126      real,intent(out) :: d_v(klon,klev) ! physics tendency on v (m/s/s)
127      real,intent(out) :: d_t(klon,klev) ! physics tendency on t (K/s)
128      real,intent(out) :: d_qx(klon,klev,nqtot) ! physics tendency on tracers
129      real,intent(out) :: d_ps(klon) ! physics tendency on surface pressure
130      real,intent(in) :: dudyn(iim+1,jjmp1,klev) ! Not used
131
132!======================================================================
133! Variables locales temporelles
134!======================================================================
135integer,save :: itau=0 ! counter to count number of calls to physics
136!$OMP THREADPRIVATE(itau)
137!real :: temp_newton(klon,klev)
138integer :: k
139logical, save :: first=.true.
140!$OMP THREADPRIVATE(first)
141
142!======================================================================
143! Inputs/Outputs
144!======================================================================
145integer :: itau0
146real :: zjulian
147real :: dtime
148integer :: nhori ! horizontal coordinate ID
149integer,save :: nid_hist ! output file ID
150!$OMP THREADPRIVATE(nid_hist)
151integer :: zvertid ! vertical coordinate ID
152integer,save :: iwrite_phys ! output every iwrite_phys physics step
153!$OMP THREADPRIVATE(iwrite_phys)
154integer :: iwrite_phys_omp ! intermediate variable to read iwrite_phys
155real :: t_ops ! frequency of the IOIPSL operations (eg average over...)
156real :: t_wrt ! frequency of the IOIPSL outputs
157
158
159!======================================================================
160! Arguments d'entrée pour la physique de MAR
161!======================================================================
162
163! NB : Pour plus de visibilité pour les développeurs de LMDZ et MAR, on conserve les noms de variables propres à MAR et LMDZ.
164! La correspondance entre les variables se fait dans cette interface.
165
166! Flags pour MAR (A ranger ultérieurement dans un fichier .def, selon le protocole LMDZ).
167! Attention, ces Flags pilotent l'initialisation de nombreuses variables. Toutes les configurations n'ont pas été testées.
168! Ici, on trouve les déclarations utilisées pour une experience aquaplanète.
169! Contacter Hubert Gallée pour connaître la signification des Flags.
170
171
172       logical                    ::  FlagSV     = .TRUE.               ! Surface
173       logical                    ::  FlagSV_Veg = .TRUE.               ! Végétation
174       logical                    ::  FlagSV_SNo = .TRUE.               ! Neige
175       logical                    ::  FlagSV_BSn = .FALSE.              !
176       logical                    ::  FlagSV_KzT = .TRUE.               !
177       logical                    ::  FlagSV_SWD = .TRUE.               !  (T,F) == SW INPUT is (downward,absorbed)
178       ! FlagSV_SBC est utilisé pour lire des options de conditions aux limites. Ici, on le met à FALSE pour l'aquaplanète
179       logical                    ::  FlagSV_SBC = .FALSE.              ! Flag pour utiliser le PHY_SISVAT_INP propre à notre experience
180       logical                    ::  FlagSV_UBC = .FALSE.              !
181       logical                    ::  FlagAT     = .TRUE.               !
182       character(len=1)           ::  TypeAT     = 'e'                  !  Turbulence Model (e, K, L or H)
183       logical                    ::  FlagAT_TKE = .TRUE.               !
184       logical                    ::  FlagCM     = .TRUE.               !
185!Gilles : T > F car LMDz utilise les tendances des traceurs (sauf frac.nuage)
186       logical                    ::  FlagCM_UpD = .FALSE.              ! Update de la microphysique immédiat
187       logical                    ::  FlagCP     = .TRUE.               ! Avec ou sans convection
188       logical                    ::  FlagRT     = .TRUE.               !
189       logical                    ::  FlagS0_SLO = .FALSE.              !
190       logical                    ::  FlagS0_MtM = .FALSE.              !
191       logical                    ::  Flag_O     = .TRUE.               !
192!Gilles: FlagVR  T > F pas de sortie interessante
193       logical                    ::  FlagVR     = .FALSE.              !
194
195!======================================================================
196! Arguments pour la physique de MAR :
197!======================================================================
198
199! Pas de temps par défaut. Ils sont modifiés plus bas en fonction de pdtphys défini dans les fichiers .def.
200
201       real                       ::  dt0DYn     =   60.                !  Time Step, Dynamics                       [s] recalculé en fonction de day_step
202       real                       ::  dt0_SV     =   60.                !  Time Step, SISVAT                         [s] f(pdtphys)
203       real                       ::  dt0_AT     =   60.                !  Time Step, Atm_AT                         [s] f(pdtphys)
204       real                       ::  dt0_CM     =   60.                !  Time Step, CMiPhy                         [s] f(pdtphys)
205       real                       ::  dt0_CP     =  600.                !  Time Step, CVAmnh                         [s] f(pdtphys)
206       real                       ::  dt0_RT     =  900.                !  Time Step, radCEP                         [s] f(pdtphys)
207       real                       ::  dx         = 4.0e+4               !  Grid Spacing, MAX authorised for CMiPhy   [m] Limite max tolérée pour la microphysique MAR (40)
208       real(kind=real8), dimension(klon)      ::  dx___HOST             !  Grid Spacing max along x axis.
209       real(kind=real8), dimension(klon)      ::  dy___HOST             !  Grid   Size                               [m]
210       real                       ::  DD_AxX =   90.00                  !  x-Axis Direction                          [degree] Standard (90dg = Eastward) [dg] utilise juste pour les conditions aux limite et la position du soleil.
211       real, dimension(klevp1)    ::  s_HOST                            ! MAR ne fonctionne que avec des coordonnées sigma: sigma=(p-Psommet)/(psurface -Psommet)
212       real, dimension(klon)      ::  sh___HOST                         !  Surface Height                            [m] =0 en aquaplanète. A calculer ultérieurement en fonction de l'environnement LMDZ.
213       real(kind=real8), dimension(klon)         ::  sh_a_HOST          !  Topography Anomaly                                        [m]
214       real(kind=real8), dimension(klon)         ::  slopxHOST          !  Slope, x-direction                                        [-]
215       real(kind=real8), dimension(klon)         ::  slopyHOST          !  Slope, y-direction                                        [-]
216       real(kind=real8), dimension(klon)         ::  slopeHOST          !  Slope                                                     [-]
217       real(kind=real8), allocatable             ::  MMaskHOST(:,:)     !  Mountain Mask                                             [-]
218       real, dimension(klon)                     ::  lonh_HOST          !  Longitude                                              [hour]
219       real, dimension(klon)                     ::  latr_HOST          !  Latitude                                             [radian]
220       real                                      ::  ptop_HOST          !  Pressure Model Top                                      [kPa] 0 in LMDZ
221       real, dimension(klon,klevp1)              ::  pkta_HOST          !  Reduced  Potential Temperature                         [KX/s] !  Temperature * p ** (R/Cp) [KX]
222       real, dimension(klon)                     ::  psa__HOST          !  Pressure Thickness                                      [kPa] a recalculer en fonction du geopotentiel de surface: P*=Psurface-Ptop
223       real, dimension(klon,klevp1)              ::  gZa__HOST          !  Geopotential Height                                   [m2/s2]  pphi dans LMDZ
224       real, dimension(klon,klevp1)              ::  gZam_HOST          !  Geopotential Height, mid-level                        [m2/s2] On fait la moyenne entre couche du dessus et couche du dessous.
225       real, dimension(klon,klev)                ::  Ua___HOST          !  Wind Speed, x-direction                                 [m/s]
226       real, dimension(klon,klev)                ::  Va___HOST          !  Wind Speed, y-direction                                 [m/s]
227       real, dimension(klon,klev)                ::  Wa___HOST          !  Wind Speed, z-direction                                 [m/s] Non echangé entre phys et dyn dans LMDZ. Necessaire pour MAR. On le recalcule ci-aprés !
228       real, dimension(klon,klevp1)              ::  qv___HOST          !  Specific Humidity                                     [kg/kg] qx(:,:,ivap)
229       real, dimension(klon,klev)                ::  qw___HOST          !  Cloud Droplets Concentration                          [kg/kg] qx(:,:,iliq)
230! #cw  real, dimension(klon,klev)                ::  CCN__HOST          !  CCN            Concentration                           [-/kg] qx(:,:,iccn)
231       real, dimension(klon,klev)                ::  qi___HOST          !  Cloud Crystals Concentration                          [kg/kg] qx(:,:,iice)
232       real, dimension(klon,klev)                ::  CIN__HOST          !  CIN            Concentration                           [-/kg] qx(:,:,icin)
233       real, dimension(klon,klev)                ::  CF___HOST          !  Cloud Fraction                                         [-/kg] Dans le futur, la CF sera transportée dans la dynamique, mais pour l'instant, on n'en a pas besoin.
234
235       real, dimension(klon,klev)                ::  qs___HOST          !  Snow Particles Concentration                          [kg/kg] qx(:,:,isnow)
236       real, dimension(klon,klev)                ::  qr___HOST          !  Rain Drops     Concentration                          [kg/kg] qx(:,:,irain)
237       real, dimension(klon,klev)                ::  TKE__HOST          !  Turbulent Kinetic Energy                              [m2/s2] qx(:,:,itke)
238       real, dimension(klon,klev)                ::  eps__HOST          !  Turbulent Kinetic Energy Dissipation                  [m2/s3] qx(:,:,itked)
239       real, dimension(klon,klev)                ::  dpkt___dt          !  Reduced  Potential Temperature TENDENCY, ALL Contribut.[KX/s] a recalculer en fonction de d_t de LMDZ
240       real, dimension(klon,klev)                ::  dua____dt          !  Wind Speed       (x-direc.)    TENDENCY, ALL Contribut.[m/s2] output commune MAR-LMD
241       real, dimension(klon,klev)                ::  dva____dt          !  Wind Speed       (y-direc.)    TENDENCY, ALL Contribut.[m/s2] output commune MAR-LMD
242       real, dimension(klon,klev)                ::  dqv____dt          !  Specific           Humidity    TENDENCY, ALL Contr. [kg/kg/s] output commune MAR-LMD
243       real, dimension(klon,klev)                ::  dqw____dt          !  Cloud Droplets Concentration   TENDENCY, ALL Contr. [kg/kg/s] dqx
244! #cw real, dimension(klon,klev)                 ::  dCw____dt          !  CCN            Concentration   TENDENCY, ALL Contr.  [1/kg/s] dqx
245       real, dimension(klon,klev)                ::  dqi____dt          !  Cloud Crystals Concentration   TENDENCY, ALL Contr. [kg/kg/s] dqx
246       real, dimension(klon,klev)                ::  dCi____dt          !  CIN            Concentration   TENDENCY, ALL Contr.  [1/kg/s] dqx
247       real, dimension(klon,klev)                ::  dCF____dt          !  Cloud Fraction                 TENDENCY, ALL Contr. [kg/kg/s] dqx
248       real, dimension(klon,klev)                ::  dqs____dt          !  Snow Particles Concentration   TENDENCY, ALL Contr. [kg/kg/s] dqx
249       real, dimension(klon,klev)                ::  dqr____dt          !  Rain Drops     Concentration   TENDENCY, ALL Contr. [kg/kg/s] dqx
250! #dT& real, dimension(klon,klev)                ::  dpktSV_dt          !  Reduced  Potential Temperature Tendency, SISVAT        [KX/s]
251! #dT       real, dimension(klon,klev)           ::  dpktAT_dt          !  Reduced  Potential Temperature Tendency, Atm_AT        [KX/s]
252! #dT       real, dimension(klon,klev)           ::  dqv_AT_dt          !  Specific           Humidity    TENDENCY, Atm_AT     [kg/kg/s] dqx
253! #dT       real, dimension(klon,klev)           ::  dqw_AT_dt          !  Cloud Droplets Concentration   TENDENCY, Atm_AT     [kg/kg/s] dqx
254! #cw real, dimension(klon,klev)                 ::  dCw_AT_dt          !  CCN            Concentration   TENDENCY, Atm_AT         [1/s] dqx
255! #dT       real, dimension(klon,klev)           ::  dqi_AT_dt          !  Cloud Crystals Concentration   TENDENCY, Atm_AT     [kg/kg/s] dqx
256! #dT      real, dimension(klon,klev)            ::  dCi_AT_dt          !  CIN            Concentration   TENDENCY, Atm_AT         [1/s] dqx
257! #dT      real, dimension(klon,klev)            ::  dqs_AT_dt          !  Snow Particles Concentration   TENDENCY, Atm_AT     [kg/kg/s] dqx
258! #dT      real, dimension(klon,klev)            ::  dqr_AT_dt          !  Rain Drops     Concentration   TENDENCY, Atm_AT     [kg/kg/s] dqx
259! #dT      real, dimension(klon,klev)            ::  dpktCM_dt          !  Reduced  Potential Temperature Tendency, CMiPhy        [KX/s] dqx
260! #dT      real, dimension(klon,klev)            ::  dqv_CM_dt          !  Specific           Humidity    TENDENCY, CMiPhy     [kg/kg/s] dqx
261! #dT      real, dimension(klon,klev)            ::  dqw_CM_dt          !  Cloud Droplets Concentration   TENDENCY, CMiPhy     [kg/kg/s] dqx
262! #cw real, dimension(klon,klev)                 ::  dCw_CM_dt          !  CCN            Concentration   TENDENCY, CMiPhy         [1/s] dqx
263! #dT       real, dimension(klon,klev)           ::  dqi_CM_dt          !  Cloud Crystals Concentration   TENDENCY, CMiPhy     [kg/kg/s] dqx
264! #dT       real, dimension(klon,klev)           ::  dCi_CM_dt          !  CIN            Concentration   TENDENCY, CMiPhy         [1/s] dqx
265! #dT       real, dimension(klon,klev)           ::  dCF_CM_dt          !  Cloud Fraction                 TENDENCY, CMiPhy         [1/s] dqx
266! #dT       real, dimension(klon,klev)           ::  dqs_CM_dt          !  Snow Particles Concentration   TENDENCY, CMiPhy     [kg/kg/s] dqx
267! #dT       real, dimension(klon,klev)           ::  dqr_CM_dt          !  Rain Drops     Concentration   TENDENCY, CMiPhy     [kg/kg/s] dqx
268! #dT       real, dimension(klon,klev)           ::  dpktCP_dt          !  Reduced  Potential Temperature TENDENCY, CVAmnh        [KX/s]
269! #dT       real, dimension(klon,klev)           ::  dqv_CP_dt          !  Specific           Humidity    TENDENCY, CVAmnh     [kg/kg/s] dqx
270! #dT       real, dimension(klon,klev)           ::  dqw_CP_dt          !  Cloud Droplets Concentration   TENDENCY, CVAmnh     [kg/kg/s] dqx
271! #dT       real, dimension(klon,klev)           ::  dqi_CP_dt          !  Cloud Crystals Concentration   TENDENCY, CVAmnh     [kg/kg/s] dqx
272! #dT       real, dimension(klon,klev)           ::  dpktRT_dt          !  Reduced  Potential Temperature TENDENCY, radCEP        [KX/s]
273
274       integer,save                              ::  it0EXP             ! Incremente en fonction de debut et lafin. NB: MAR fait des restarts dans le Fortran, LMDZ avec des scripts shells. On suit ici la logique LMDZ. it0EXP et it0RUN sont donc identiques.
275       integer,save                              ::  it0RUN             ! Incremente en fonction de debut et lafin.
276       integer                                   ::  Year_H             !  Time                                                   [year]
277       integer                                   ::  Mon__H             !  Time                                                  [month]
278       integer                                   ::  Day__H             !  Time                                                    [Day]
279       integer                                   ::  Hour_H             !  Time                                                   [hour]
280       integer                                   ::  minu_H             !  Time                                                 [minute]
281       integer                                   ::  sec__H             !  Time                                                      [s]
282       integer                                   ::  ixq1,i0x0,mxqq     !  Domain  Dimension: x                                      [-]
283       integer                                   ::  jyq1,j0y0,myqq     !  Domain  Dimension: y                                      [-]
284       !integer                                   ::  klev              !  Domain  Dimension: z                                      [-] Commun à MAR et LMDZ
285       !integer                                   ::  klevp1            !  Domain  Dimension: z                                      [-] Commun à MAR et LMDZ
286       integer                                   ::  mwq                !  Domain  Dimension: mosaic                                 [-]
287       !integer                                   ::  klon              !  Domain  Dimension: x * y                                  [-] Commun à MAR et LMDZ
288       integer                                   ::  kcolw              !  Domain  Dimension: x * y * mosaic                         [-]
289       integer                                   ::  m_azim             !  Mountain Mask, nb of directions taken into account        [-]
290       integer,parameter                         ::  n0pt=1             !  nombre de points qui peuvent être choisis pour le fichier PHY____.OUT
291       integer, dimension(n0pt)                  ::  IOi0SV             !
292       integer, dimension(n0pt)                  ::  IOj0SV             !
293       real, dimension(klon)                     ::  sst__HOST          !  Ocean     FORCING (SST)                                   [K]
294! #IP real, dimension(klon)                       ::  sif__HOST          !  Ocean     FORCING (Sea-Ice Fraction )                     [-]
295! #AO real, dimension(ixq1:mxqq,jyq1:myqq,mwq)    ::  s_T__HOST          !  A - O    COUPLING                      n=1: Open Ocean    [K]
296! #AO real, dimension(ixq1:mxqq,jyq1:myqq,mwq)    ::  Alb__HOST          !  A - O    COUPLING (Surface Albedo   )  n=2: Sea  Ice      [-]
297! #AO real, dimension(ixq1:mxqq,jyq1:myqq,mwq)    ::  dSdT2HOST          !  A - O    COUPLING ( d(SH Flux) / dT )                [W/m2/K]
298! #AO real, dimension(ixq1:mxqq,jyq1:myqq,mwq)    ::  dLdT2HOST          !  A - O    COUPLING ( d(SH Flux) / dT )                [W/m2/K]
299! #TC integer, parameter                          ::   ntrac  =  28      !
300! #TC real, dimension(ixq1:mxqq,jyq1:myqq,klev,ntrac) ::    qxTC             !  Aerosols: Atmospheric  Contentration
301! #TC real, dimension(ixq1:mxqq,jyq1:myqq    ,ntrac) ::    qsTC             !  Aerosols: Near Surface Contentration
302! #TC real, dimension(ixq1:mxqq,jyq1:myqq    ,ntrac) ::    uqTC             !  Aerosols: Surf.Flux
303
304!======================================================================
305! Variables locales:
306!======================================================================
307
308        real :: secondes ! pour le calcul de la date
309        integer :: i ! Pour les boucles
310        integer :: daysec ! Nombre de secondes dans ue journée
311        integer,save :: annee_ref ! Année du début de la simulation
312        !integer :: count_year ! le nombre d'années depuis le début de la simulation
313        !real,parameter :: epsilon = 1.e-6 ! pour le calcul du temps
314
315! Constantes définies comme dans MAR et utilisées ici:
316        real    ::  RdA        =  287.                 !  Perfect Gas Law Constant for Dry Air [J/kg/K]
317        real    ::  CpA        = 1004.                 !  Specific   Heat Capacity for Dry Air [J/kg/K]
318        real    ::  kap                                !  RdA/CpA                                   [-]
319
320! Pour l'initialisation:
321        real, dimension(klon) :: Ts___HOST ! Temperature de surface pour l'initialisation.
322        real, dimension(klon) :: pkt_DY_surf_tmp ! pkt de surface pour l'initialisation.
323        real, dimension(klon) :: qv_HOST_surf_tmp ! qv de surface pour l'initialisation.
324
325! Pour ecriture en netcdf
326       real, dimension(klon,klev) :: cldfra   ! CF___HOST vertically inverted
327
328!======================================================================
329!! Ecriture des sorties netcdf:
330!======================================================================
331
332! NB : La version de MAR utilisée ici ne permet pas d'écrire de sorties netcdf.
333! On n'utilise pas encore XIOS
334! En attendant, on utilise ici le classique ioipsl, ainsi que l'outil iotd de Frédéric Hourdin.
335
336if (debut) then ! Things to do only for the first call to physics
337! load initial conditions for physics (including the grid)
338  call phys_state_var_init() ! some initializations, required before calling phyetat0
339  call phyetat0("startphy.nc")
340
341! Initialize outputs:
342  itau0=0
343!$OMP MASTER
344  iwrite_phys_omp=1 !default: output every physics timestep
345  ! NB: getin() is not threadsafe; only one thread should call it.
346  call getin("iwrite_phys",iwrite_phys_omp)
347!$OMP END MASTER
348!$OMP BARRIER
349  iwrite_phys=iwrite_phys_omp
350  t_ops=pdtphys*iwrite_phys ! frequency of the IOIPSL operation
351  t_wrt=pdtphys*iwrite_phys ! frequency of the outputs in the file
352  ! compute zjulian for annee0=1979 and month=1 dayref=1 and hour=0.0
353  !CALL ymds2ju(annee0, month, dayref, hour, zjulian)
354  call getin('anneeref',anneeref)
355  call ymds2ju(anneeref, 1, 1, 0.0, zjulian)
356  annee_ref=anneeref ! On la sauve pour le reste de la simulation
357  dtime=pdtphys
358
359! Initialisation de iophy pour l'utilisation de iotd créé par Frédéric Hourdin
360  call iophys_ini ! NB: cette initialisation concerne l'ecriture de fichiers phys.nc dans PHY_MAR (rechercher iophys_ecrit)
361
362!Gilles : replace zjulian by jD_cur (if correct init of the year)
363! call histbeg_phy("histins.nc",itau0,zjulian,dtime,nhori,nid_hist)
364  call histbeg_phy("histins.nc",itau0,jD_cur,dtime,nhori,nid_hist)
365
366!$OMP MASTER
367
368  ! define vertical coordinate
369  call histvert(nid_hist,"presnivs","Vertical levels","Pa",klev, &
370                ppresnivs,zvertid,'down')
371  ! define variables which will be written in "histins.nc" file
372  call histdef(nid_hist,'temperature','Atmospheric temperature','K', &
373               iim,jj_nb,nhori,klev,1,klev,zvertid,32, &
374               'inst(X)',t_ops,t_wrt)
375  call histdef(nid_hist,'pplay','atmospheric pressure','K', &
376               iim,jj_nb,nhori,klev,1,klev,zvertid,32, &
377               'inst(X)',t_ops,t_wrt)
378  call histdef(nid_hist,'ps','Surface Pressure','Pa', &
379               iim,jj_nb,nhori,1,1,1,zvertid,32, &
380               'inst(X)',t_ops,t_wrt)
381  call histdef(nid_hist,'qx_vap','specific humidity','kg/kg', &
382               iim,jj_nb,nhori,klev,1,klev,zvertid,32, &
383               'inst(X)',t_ops,t_wrt)
384  call histdef(nid_hist,'qx_liq','atmospheric liquid water content','kg/kg', &
385               iim,jj_nb,nhori,klev,1,klev,zvertid,32, &
386               'inst(X)',t_ops,t_wrt)
387  call histdef(nid_hist,'qx_ice','atmospheric ice content','kg/kg', &
388               iim,jj_nb,nhori,klev,1,klev,zvertid,32, &
389               'inst(X)',t_ops,t_wrt)
390  call histdef(nid_hist,'u','Eastward Zonal Wind','m/s', &
391               iim,jj_nb,nhori,klev,1,klev,zvertid,32, &
392               'inst(X)',t_ops,t_wrt)
393  call histdef(nid_hist,'v','Northward Meridional Wind','m/s', &
394               iim,jj_nb,nhori,klev,1,klev,zvertid,32, &
395               'inst(X)',t_ops,t_wrt)
396  call histdef(nid_hist,'lonh','longitude','Hours', &
397               iim,jj_nb,nhori,1,1,1,zvertid,32, &
398               'inst(X)',t_ops,t_wrt)
399  call histdef(nid_hist,'latr','latitude','radian', &
400               iim,jj_nb,nhori,1,1,1,zvertid,32, &
401               'inst(X)',t_ops,t_wrt)
402  call histdef(nid_hist,'sst','Prescribed SST','K', &
403               iim,jj_nb,nhori,1,1,1,zvertid,32, &
404               'inst(X)',t_ops,t_wrt)
405  ! Tendances physiques de MAR ; pour le developpement MAR-LMDZ:
406  call histdef(nid_hist,'d_t','Atmospheric temperature trends after MAR physics','K/s', &
407               iim,jj_nb,nhori,klev,1,klev,zvertid,32, &
408               'inst(X)',t_ops,t_wrt)
409  call histdef(nid_hist,'d_u','Eastward Zonal Wind trend','m/s/s', &
410               iim,jj_nb,nhori,klev,1,klev,zvertid,32, &
411               'inst(X)',t_ops,t_wrt)
412  call histdef(nid_hist,'d_v','Northward Meridional Wind trend','m/s/s', &
413               iim,jj_nb,nhori,klev,1,klev,zvertid,32, &
414               'inst(X)',t_ops,t_wrt)
415  ! Définition de variables utilisée dans des sous-routines MAR
416  call histdef(nid_hist,'snow','snowfall convectif + stratiform','m', &
417               iim,jj_nb,nhori,1,1,1,zvertid,32, &
418               'inst(X)',t_ops,t_wrt)
419  call histdef(nid_hist,'rain','rainfall convectif + stratiform','m', &
420               iim,jj_nb,nhori,1,1,1,zvertid,32, &
421               'inst(X)',t_ops,t_wrt)
422  call histdef(nid_hist,'snowCP','snowfall convective','m', &
423               iim,jj_nb,nhori,1,1,1,zvertid,32, &
424               'inst(X)',t_ops,t_wrt)
425  call histdef(nid_hist,'rainCP','rainfall convective','m', &
426               iim,jj_nb,nhori,1,1,1,zvertid,32, &
427               'inst(X)',t_ops,t_wrt)
428  call histdef(nid_hist,'nebulosity','CF___HOST','-', &
429               iim,jj_nb,nhori,klev,1,klev,zvertid,32, &
430               'inst(X)',t_ops,t_wrt)
431  ! end definition sequence
432  call histend(nid_hist)
433
434!XIOS
435#ifdef CPP_XIOS
436    ! Déclaration de l'axe vertical du fichier:   
437    !CALL wxios_add_vaxis("presnivs", "histins", klev, ppresnivs)
438
439    !Déclaration du pas de temps:
440    !CALL wxios_set_timestep(dtime)
441
442    !Finalisation du contexte:
443    !CALL wxios_closedef()
444#endif
445!$OMP END MASTER
446endif ! of if (debut)
447
448!======================================================================
449! Calcul de variables environnement nécessaires à la physique de MAR
450!======================================================================
451
452! NB : Calculs à faire avant l'initialisation de la physique
453
454! Calcul de constantes
455
456kap    = RdA  / CpA
457rpi  = 4.*ATAN(1.)
458daysec = 86400.
459
460! increment counter itau
461itau=itau+1
462
463PRINT*, 'dans physiq.F90 :'
464PRINT*, 'itau=',itau
465
466! set all tendencies to zero
467PRINT*, 'On initialise les tendances à zéro:'
468d_u(1:klon,1:klev)=0.
469d_v(1:klon,1:klev)=0.
470d_t(1:klon,1:klev)=0.
471d_qx(1:klon,1:klev,1:nqtot)=0.
472d_ps(1:klon)=0.
473
474! Allocation de tableaux:
475! Pour l'instant :
476m_azim=1 ! Azimuths pour le calcul des masques de montagne
477ALLOCATE(MMaskHOST(klon,m_azim)) !  Mountain Mask                                             [-]
478
479! Appeller iniaqua et phyetat0 pour l'état initial avant le transfert vers les variables MAR !
480! A faire pour lorsque l'on prendra en compte les continents
481
482! Timesteps pour MAR (définis ici à partir des pas de temps LMDZ). A modifier éventuellement (via les fichiers .def)
483! dt0_CP & dt0_RT modifiees ici selon Hubert avec daystep=720 ie dtdyn=2mn
484! pdtphys modifie via gcm.def avec iphysiq=1 & nsplit_phys=1
485dt0DYn=daysec/REAL(day_step)   !  Time Step, Dynamics                       [s]
486dt0_AT=pdtphys                 !  Time Step, SISVAT                         [s]
487dt0_SV=pdtphys                 !  Time Step, Atm_AT                         [s]
488dt0_CM=pdtphys                 !  Time Step, CMiPhy                         [s]
489dt0_CP=pdtphys*10              !  Time Step, CVAmnh                         [s]
490dt0_RT=pdtphys*20              !  Time Step, radCEP                         [s]
491
492! Correspondances de grilles: inutilisé car on utilise directement les variables LMD
493
494! Dans un premier temps, une seule mozaique:
495mwq=1
496
497kcolw=mwq*klon
498
499DO i=1,klon
500  IF (rlond(i) .LT. 0) THEN
501    lonh_HOST(i)=rlond(i)*12./rpi+24. ! from radians to hours
502   ELSE
503    lonh_HOST(i)=rlond(i)*12./rpi ! from radians to hours
504  ENDIF
505ENDDO
506latr_HOST(:)=rlatd(:) ! from radians to radians
507
508!PRINT*, 'lonh_HOST(:)=',lonh_HOST(:)
509!PRINT*, 'latr_HOST(:)=',latr_HOST(:)
510
511! Niveaux verticaux:
512! Attention, il faut faire un test pour vérifier si les coordonnées verticaux définis sont adéquats avec ceux de MAR!
513DO k = 1, klev
514  i=klev+1-k
515  IF (ap(k) .NE. 0) THEN
516    CALL abort_gcm('','MAR physic can be applied only with sigma levels, check vertical resolution in disvert.F90',1)
517   ELSE
518    s_HOST(i)=0.5*(bp(k)+bp(k+1))
519  ENDIF
520END DO
521s_HOST(klev+1)=1 ! Dans MAR, sigma est défini depuis tout en haut jusqu'à la surface. s_HOST doit être égal à 1 en surface.
522
523! En attendant que les routines PHY_____INI.F90, PHY_MAR_DAT.F90 et PHY_SISVAT_INP.F90 soient écrites selon un vecteur et non pas selon un tableau 2D lon-lat.
524! On utilise ici la grille physique de LMDZ, qui a la taille klon (en argument de la physique): 2 + (JJM-1)*IIM (soit 1682 pour une grille dynamique de 48*36 déclarée à la compilation).
525
526mxqq=iim
527myqq=jjm+1
528
529! Pour MAR, on a besoin des indices du premier point de la grille. Avec une grille globale, c'esty toujours (1,1):
530ixq1=1
531jyq1=1
532
533
534! Temps:
535IF (debut) THEN
536  it0EXP=1
537 ELSE
538  it0EXP=it0EXP+1
539ENDIF
540
541IF (debut) THEN
542  it0RUN=1
543 ELSE
544  it0RUN=it0RUN+1
545ENDIF
546
547! Pour l'instant, on ne peut démarrer une simulation seulement le 1er jour de l'année de référence:
548! Attention, ju2ymds ne donne pas l'année courante, mais compte les années de simulations à partir de 0 !!! A checker !!!
549CALL ymds2ju(annee_ref, 1, 1, 0.0, zjulian)
550!Gilles: zjulian already counted in jD_cur if year correctly initialised
551!CALL ju2ymds(jD_cur+jH_cur+zjulian,Year_H,Mon__H,Day__H,secondes)
552CALL ju2ymds(jD_cur+jH_cur,Year_H,Mon__H,Day__H,secondes)
553Hour_H=INT(secondes)/3600
554minu_H=(INT(secondes)-Hour_H*3600)/60
555!minu_H=INT((secondes-float(Hour_H)*3600.+epsilon)/60.) ! attention aux arrondis machine
556sec__H=INT(secondes)-(Hour_H*3600)-(minu_H*60)
557
558Print*,'CONTROL du temps avant d appeler la physique'
559Print*,'zjulian=',zjulian
560Print*,'annee_ref=',annee_ref
561Print*, 'jD_cur=',JD_cur
562Print*, 'jH_cur=',jH_cur
563Print*, 'Year_H=',Year_H
564Print*, 'Mon__H',Mon__H
565Print*, 'Day__H',Day__H
566Print*, 'secondes=',secondes
567Print*, 'Hour_H=',Hour_H
568Print*, 'minu_H=',minu_H
569Print*, 'sec__H=',sec__H
570Print*, 'klev=',klev
571Print*, 'klevp1=',klevp1
572Print*, 'nlev=',nlev
573Print*, 'nlon=',nlon
574Print*, 'klon=',klon
575PRINT*, 'RCp=',RCp
576
577! Coordonnées du point (en indice) pour lequel on imprime les sorties en ASCII dans le fichier PHY___________.OUT
578i0x0=23
579j0y0=48
580! Variable utilisée juste pour les outputs:
581IOi0SV(:)=1
582IOj0SV(:)=1
583
584! Variables inutilisees:
585dy___HOST=0.
586!CF___HOST=0. ! Pour l'instant pas utilisé, il faut tout de même l'initialiser?
587dCF____dt=0.
588
589
590!======================================================================
591! INITIALISATIONS MAR
592!======================================================================
593!
594! NB : les routines MAR ci-aprés doivent encore être travaillées. Ici, elles ne fonctionnent que pour une aquaplanète !
595
596       it_RUN = it0RUN
597       it_EXP = it0EXP
598
599       IF (it0RUN.LE.1)                                              THEN
600
601         PRINT*,'it0RUN=0; On appelle les routines d initialisation de la physique de MAR'
602
603! Initialization of Mod_PHY____grd
604! --------------------------------
605
606! Anciennes initialisations MAR
607
608         dxHOST = dx
609         DirAxX = DD_AxX
610         ixp1   = ixq1
611         i_x0   = i0x0
612         mxpp   = mxqq
613         jyp1   = jyq1
614         j_y0   = j0y0
615         mypp   = myqq
616         mzpp   = klevp1
617         kcolp  = klon
618         kcolv  = kcolw
619
620! Initialization of Mod_PHY_S0_grd
621! --------------------------------
622         ! Pour l'instant, en attendant du relief :
623         n_azim = m_azim
624
625! Initialization of Mod_SISVAT_grd (Mosaic Discretization only                                      )
626! -------------------------------- (       Discretization from Mod_SISVAT_dim : see PHY_SISVAT_ALLOC)
627
628          mwp    = mwq
629
630! Initialization of Mod_SISVAT_dat
631! --------------------------------
632! pour aquaplanete: FixedSST=1
633          VarSST = 0.
634
635! Initialization of Physical Constants and Allocation of main Variables
636! ---------------------------------------------------------------------
637
638! CONTROL
639PRINT*, 'Appel de PHY INI'
640!              **************
641         CALL PHY________INI
642!              **************
643
644
645! INPUT DATA surface et Calcul des dependances a des Points Horizontaux autres que le Point courant
646! =================================================================================================
647!
648
649! Pour l'instant, PHY_MAR_DAT n'est pas vectorisé, donc on initilise tout en dur pour l'aquaplanète.
650! Ultérieurement, il faudra lires les données topo de LMDZ pour renseigner ces variables à l'initialisation.
651
652PRINT*,'Initialisation en dur des variables topo pour une aquaplanete'
653sh___HOST(:)=0.00
654sh_a_HOST(:)=0.00
655dx___HOST(:)   = 1.e3
656dy___HOST(:)   = 1.e3
657slopxHOST(:)   = 0.00
658slopyHOST(:)   = 0.00
659slopeHOST(:)   = 0.00
660MMaskHOST(:,:) = 0.00
661
662! CONTROL
663!PRINT*, 'Appel de PHY MAR DAT'
664!          ***********
665!      CALL PHY_MAR_DAT(                                                &
666!!          ***********
667!&                 sh___HOST                                       &!  Topographie                                 [m]
668!&                ,sh_a_HOST                                       &!  Topographie, Anomalie                       [m]
669!&                ,dx___HOST                                       &!  Discretisation,   x                         [m]
670!&                ,dy___HOST                                       &!  Discretisation,   y                         [m]
671!&                ,slopxHOST                                       &!  Pente selon l'Axe x                         [-]
672!&                ,slopyHOST                                       &!  Pente selon l'Axe y                         [-]
673!&                ,slopeHOST                                       &!  Pente                                       [-]
674!&                ,MMaskHOST                                       &!  Masque de Montagnes                         [-]
675!&                ,ixq1,mxqq                                       &!
676!&                ,jyq1,myqq                                       &!
677!&                ,m_azim                                          &!
678!&                )
679
680! FIRST Initialization of the Surface Variables
681! =============================================
682
683
684! Initial Surface Temperature ( initialement dans DYN_to_PHY_MAR)
685! ---------------------------
686
687! CONTROL
688PRINT*, 'Calcul de Ts___HOST dans la physique'
689PRINT*, 'Initialisation de la temperature de surface avec les SST aquaplanète'
690          DO i = 1,klon
691            Ts___HOST(i)=273.+27.*(1-sin(1.5*rlatd(i))**2)
692            IF ((rlatd(i).GT.1.0471975).OR.(rlatd(i).LT.-1.0471975)) THEN
693              Ts___HOST(i)=273.
694            ENDIF
695
696             !PRINT*, 'Initialisation de la temperature de surface avec la temperature du premier niveau'
697             !Ts___HOST(i) = pkta_HOST(i,klevp1)*(psa__HOST(i)+ptop_HOST)**RCp
698             !Ts___HOST(i) = t(i,klev)
699          ENDDO
700
701! CONTROL
702PRINT*, 'Avant PHY SISVAT INP'
703PRINT*,'MAXVAL(Ts___HOST(:)=)',maxval(Ts___HOST(:))
704PRINT*,'MINVAL(Ts___HOST(:)=)',minval(Ts___HOST(:))
705PRINT*, 'Appel de PHY SISVAT INP'
706!              **************
707          CALL PHY_SISVAT_INP(FlagSV_SBC,Ts___HOST,klon)
708!              **************
709
710PRINT*, 'Apres PHY SISVAT INP'
711PRINT*,'MAXVAL(Ts___HOST(:)=)',maxval(Ts___HOST(:))
712PRINT*,'MINVAL(Ts___HOST(:)=)',minval(Ts___HOST(:))
713
714       END IF ! (it0RUN.LE.1)
715
716
717! Horizontal Interactions
718! ======================
719
720
721! Interface: DATA for Stand-Alone Version of the Physical Package
722! ===============================================================
723
724       IF  (.NOT. FlagRT .OR.                                           &
725      &     .NOT. FlagAT .OR.                                           &
726      &     .NOT. FlagCM)                                           THEN
727!     &     .NOT. FlagCP)                                            THEN
728! CONTROL
729PRINT*, 'Appel de PHY SISVAT UBC'
730!                **************
731           CALL   PHY_SISVAT_UBC(FlagRT,FlagAT,FlagCM,FlagCP)
732!                **************
733
734       END IF
735
736PRINT*, 'Apres PHY_SISVAT_UBC'
737Print*, 'mzp=',mzp
738Print*, 'mzpp=',mzpp
739
740!======================================================================
741! Calcul des inputs de MAR à partir de LMDZ
742!======================================================================
743
744! NB : Calculs à faire aprés l'initialisation de la physique du MAR
745
746PRINT*, 'Calcul des inputs de MAR à partir de LMDZ'
747
748! Correspondance ou transformation de variables:
749! RKAPPA=R/Cp dans un module LMD ;
750! Probleme, on n'a pas la temperature de surface dans les arguments !!! a voir avec Hubert comment on fait...
751!  En attendant, on prend la température du premier niveau au lieu de celle de la surface (idem pour le haut de l'atmosphère):
752! NB : Attention aux unités !
753
754IF (debut) THEN
755! On initialise avec la temperature du premier niveau au lieu de la temperature de surface à la première itération:
756   pkt_DY_surf_tmp(:)=t(:,1) / (pplay(:,1)/1000) ** kap
757   ELSE
758   pkt_DY_surf_tmp(:)=pkt_DY(:,klev+1)
759ENDIF
760
761pkta_HOST(:,klev+1)=pkt_DY_surf_tmp(:)
762DO k = 1, klev
763  i=klev+1-k
764  pkta_HOST(:,i) = t(:,k) / (pplay(:,k)/1000) ** kap
765END DO
766
767ptop_HOST=0.
768psa__HOST(:)=(paprs(:,1)-paprs(:,klev+1))/1000. ! [kPa]
769
770! Correspondance du géopotentiel entre LMDZ et MAR :
771
772! Aux niveaux:
773DO k = 1, klev
774  i=klev+1-k
775  gZa__HOST(:,i)=pphi(:,k)
776END DO
777gZa__HOST(:,klev+1)=pphis(:)
778
779! Aux inter-niveaux:
780DO k = 1, klev
781  gZam_HOST(:,k+1)=0.5*(gZa__HOST(:,k+1)+gZa__HOST(:,k))
782END DO
783gZam_HOST(:,1)=1.5*gZa__HOST(:,1)-0.5*gZa__HOST(:,2) ! Extrapolation au sommet de l'atmosphère
784DO k = 1, klev
785  i=klev+1-k
786  Ua___HOST(:,i)=u(:,k)
787  Va___HOST(:,i)=v(:,k)
788ENDDO
789
790! Calcul de vitesse verticale a partir de flux de masse verticale :
791DO k = 1, klev
792  i=klev+1-k
793  !omega(i,k) = RG*flxmass_w(i,k) / airephy(i) ! omega en Pa/s
794  Wa___HOST(:,i)=flxmass_w(:,k) / airephy(:) * (gZam_HOST(:,i+1) - gZam_HOST(:,i))/(paprs(:,k+1)-paprs(:,k)) ! Equilibre hydrostatique
795END DO
796Wa___HOST(:,klev)=0 ! Vitesse nulle à la surface.
797Wa___HOST(:,1)=0 ! Vitesse nulle au sommet.
798
799! Tendances:
800DO k = 1, klev
801  i=klev+1-k
802  dpkt___dt(:,i)=d_t(:,k) / (pplay(:,k)/1000) ** kap
803  dua____dt(:,i)=d_u(:,k)
804  dva____dt(:,i)=d_v(:,k)
805ENDDO
806
807
808DO k = 1, klev
809  i=klev+1-k
810
811! Traceurs:
812  qv___HOST(:,i)=qx(:,k,ivap)          !  Specific Humidity                                     [kg/kg]
813  qw___HOST(:,i)=qx(:,k,iliq)          !  Cloud Droplets Concentration                          [kg/kg]
814  qi___HOST(:,i)=qx(:,k,iice)          !  Cloud Crystals Concentration                          [kg/kg]
815  CIN__HOST(:,i)=qx(:,k,icin)          !  CIN            Concentration                           [-/kg]
816  qs___HOST(:,i)=qx(:,k,isnow)         !  Snow Particles Concentration                          [kg/kg]
817  qr___HOST(:,i)=qx(:,k,irain)         !  Rain Drops     Concentration                          [kg/kg]
818  TKE__HOST(:,i)=qx(:,k,itke)          !  Turbulent Kinetic Energy                              [m2/s2]
819  eps__HOST(:,i)=qx(:,k,itked)         !  Turbulent Kinetic Energy Dissipation                  [m2/s3]
820  ! #cw CCN__HOST(:,:)=qx(:,:,iccn)    !  CCN            Concentration                           [-/kg]
821
822END DO
823
824! Dans MAR, qv(klev+1)=qv(klev)
825IF (debut) THEN
826  ! On initialise avec le qv du premier niveau au lieu du qv de surface à la première itération:
827    qv_HOST_surf_tmp(:)=qv___HOST(:,klev)
828   ELSE
829    qv_HOST_surf_tmp(:)=qv__DY(:,klev+1)
830ENDIF
831qv___HOST(:,klev+1)=qv_HOST_surf_tmp(:)  !  Specific Humidity                                     [kg/kg]
832
833DO k = 1, klev
834  i=klev+1-k
835
836! Dérivée des traceurs:
837dqv____dt(:,i)=d_qx(:,k,ivap)        !  Specific           Humidity    TENDENCY, ALL Contr. [kg/kg/s]
838dqw____dt(:,i)=d_qx(:,k,iliq)        !  Cloud Droplets Concentration   TENDENCY, ALL Contr. [kg/kg/s]
839dqi____dt(:,i)=d_qx(:,k,iice)        !  Cloud Crystals Concentration   TENDENCY, ALL Contr. [kg/kg/s]
840dCi____dt(:,i)=d_qx(:,k,icin)        !  CIN            Concentration   TENDENCY, ALL Contr.  [1/kg/s]
841dqs____dt(:,i)=d_qx(:,k,isnow)       !  Snow Particles Concentration   TENDENCY, ALL Contr. [kg/kg/s]
842dqr____dt(:,i)=d_qx(:,k,irain)       !  Rain Drops     Concentration   TENDENCY, ALL Contr. [kg/kg/s]
843! #cw dCw____dt                      !  CCN            Concentration   TENDENCY, ALL Contr.  [1/kg/s]
844
845END DO
846
847!======================================================================
848! Test Aquaplanète:
849!======================================================================
850
851! CONTROL
852PRINT*, 'Calcul des SST en aquaplanète pour MAR comme dans le cas n°101 de LMDZ' ! (cf iniaqua de LMDZ)
853!IF (debut) THEN
854  DO i=1,klon
855    sst__HOST(i)=273.+27.*(1-sin(1.5*rlatd(i))**2)
856    IF ((rlatd(i).GT.1.0471975).OR.(rlatd(i).LT.-1.0471975)) THEN
857      sst__HOST(i)=273.
858    ENDIF
859  ENDDO
860!ENDIF
861
862!======================================================================
863! CONTROL
864!======================================================================
865PRINT*, 'Control variables LMDZ entree de la physique'
866PRINT*,'MAXVAL(pplay(:,klev))=',MAXVAL(pplay(:,klev))
867PRINT*,'MINVAL(pplay(:,klev))=',MINVAL(pplay(:,klev))
868PRINT*,'MAXVAL(t(:,klev))=',MAXVAL(t(:,klev))
869PRINT*,'MINVAL(t(:,klev))=',MINVAL(t(:,klev))
870PRINT*,'MAXVAL(pplay(:,1))=',MAXVAL(pplay(:,1))
871PRINT*,'MINVAL(pplay(:,1))=',MINVAL(pplay(:,1))
872PRINT*,'MAXVAL(t(:,1))=',MAXVAL(t(:,1))
873PRINT*,'MINVAL(t(:,1))=',MINVAL(t(:,1))
874PRINT*,'MAXVAL(pplay)=',MAXVAL(pplay)
875PRINT*,'MINVAL(pplay)=',MINVAL(pplay)
876PRINT*,'MAXVAL(t)=',MAXVAL(t)
877PRINT*,'MINVAL(t)=',MINVAL(t)
878PRINT*,'MAXVAL(pphis)=',MAXVAL(pphis)
879PRINT*,'MINVAL(pphis)=',MINVAL(pphis)
880PRINT*,'kap=',kap
881PRINT*, 'CONTROL variables MAR entree de la physique'
882PRINT*,'MAXVAL(pkta_HOST)=',MAXVAL(pkta_HOST)
883PRINT*,'MAXVAL(psa__HOST)=',MAXVAL(psa__HOST)
884PRINT*,'MAXVAL(gZa__HOST)=',MAXVAL(gZa__HOST)
885PRINT*,'MAXVAL(gZam_HOST)=',MAXVAL(gZam_HOST)
886PRINT*,'MAXVAL(Ua___HOST)=',MAXVAL(Ua___HOST)
887PRINT*,'MAXVAL(Va___HOST)=',MAXVAL(Va___HOST)
888PRINT*,'MAXVAL(qv___HOST)=',MAXVAL(qv___HOST)
889PRINT*,'MINVAL(pkta_HOST)=',MINVAL(pkta_HOST)
890PRINT*,'MINVAL(psa__HOST)=',MINVAL(psa__HOST)
891PRINT*,'MINVAL(gZa__HOST)=',MINVAL(gZa__HOST)
892PRINT*,'MINVAL(gZam_HOST)=',MINVAL(gZam_HOST)
893PRINT*,'MINVAL(Ua___HOST)=',MINVAL(Ua___HOST)
894PRINT*,'MINVAL(Va___HOST)=',MINVAL(Va___HOST)
895PRINT*,'MINVAL(qv___HOST)=',MINVAL(qv___HOST)
896PRINT*,'Control iterations:'
897PRINT*,'it0RUN=',it0RUN
898PRINT*,'it0EXP=',it0EXP
899PRINT*,'it_RUN=',it_RUN
900PRINT*,'it_EXP=',it_EXP
901
902! On choisi l'endroit où on fait les diagnostics de verification MAR (fichier ASCII):
903! Pour la phase de débug, on cherche des Nan !
904
905DO i=1,klon
906  DO k=1,klev
907    IF (isnan(Va___HOST(i,k))) THEN
908      ikl0 = i
909      PRINT*,'Attention : NaN at'
910      PRINT*,'longitude=',rlond(i)*180/rpi
911      PRINT*,'latitude=',rlatd(i)*180/rpi
912    ENDIF
913  ENDDO
914ENDDO
915
916!======================================================================
917! Appel de PHY_MAR
918!======================================================================
919
920! NB: Logiquement, il faut conserver cet appel tel quel, car Hubert Gallée s'engage à ne pas le changer lors des mises à jour !
921
922! CONTROL
923PRINT*, 'Appel de PHY MAR'
924!PRINT*, 'FlagSV     =',FlagSV
925!PRINT*, 'FlagSV_Veg =',FlagSV_Veg
926!PRINT*, 'FlagSV_SNo =',FlagSV_SNo
927!PRINT*, 'FlagSV_BSn =',FlagSV_BSn
928!PRINT*, 'FlagSV_KzT =',FlagSV_KzT
929!PRINT*, 'FlagSV_SWD =',FlagSV_SWD
930!PRINT*, 'FlagSV_SBC =',FlagSV_SBC
931!PRINT*, 'FlagSV_UBC =',FlagSV_UBC
932!PRINT*, 'FlagAT     =',FlagAT
933
934      CALL  PHY_MAR(FlagSV                                        &   ! FLAG  for SISVAT: (T,F) =                    (active OR NOT)
935&                  ,FlagSV_Veg                                    &   ! FLAG  for SISVAT: (T,F) =       (Variable Vegetation OR NOT)
936&                  ,FlagSV_SNo                                    &   ! FLAG  for SISVAT: (T,F) =         (Snow Model active OR NOT)
937&                  ,FlagSV_BSn                                    &   ! FLAG  for SISVAT: (T,F) = (Blowing Snow Model active OR NOT)
938&                  ,FlagSV_KzT                                    &   ! FLAG  for SISVAT: (T,F) = (pkt Turb.Transfert active OR NOT in SISVAT)
939&                  ,FlagSV_SWD                                    &   ! FLAG  for SISVAT: (T,F) = (Modify SW INPUT->downward OR NOT)     
940&                  ,FlagSV_SBC                                    &   ! FLAG  for SISVAT: (T,F) = (INPUT of Soil & Vege DATA OR NOT in SISVAT)
941&                  ,FlagSV_UBC                                    &   ! FLAG  for SISVAT: (T,F) = (pkt UpperBC is Von Neuman OR NOT in SISVAT)
942&                  ,FlagAT                                        &   ! FLAG  for Atm_AT: (T,F) = (Turbulent Transfer active OR NOT)
943&                  ,TypeAT                                        &   ! TYPE  of  Atm_AT: (e= Ee Duynkerke, K= Ee Kitada, L= EL, H= Ee Huan-R)
944&                  ,FlagAT_TKE                                    &   ! FLAG  for genTKE: (T,F) = (TKE-e     Model    active OR NOT)
945&                  ,FlagCM                                        &   ! FLAG  for CMiPhy: (T,F) = (Cloud Microphysics active OR NOT)
946&                  ,FlagCM_UpD                                    &   ! FLAG  for CMiPhy: (T,F) = (qv & hydrometeors updated OR NOT IN CMiPhy)
947&                  ,FlagCP                                        &   ! FLAG  for Convection Paramet.
948&                  ,FlagRT                                        &   ! FLAG  for Radiative Transfer
949&                  ,FlagS0_SLO                                    &   ! FLAG  for Insolation, Surfac.Slope                 Impact  included  NEW
950&                  ,FlagS0_MtM                                    &   ! FLAG  for Insolation, Surfac.Slope & Mountain Mask Impacts included  NEW
951&                  ,Flag_O                                        &   ! FLAG  for OUTPUT
952&                  ,FlagVR                                        &   ! FLAG  for OUTPUT for VERIFICATION
953&                  ,dt0DYn                                        &   ! Time STEP between 2 CALLs of PHY_MAR                     [s] I, fix
954&                  ,dt0_SV                                        &   ! Time STEP between 2 CALLs of SISVAT                      [s] I, fix
955&                  ,dt0_AT                                        &   ! Time STEP between 2 CALLs of Atm_AT                      [s] I, fix
956&                  ,dt0_CM                                        &   ! Time STEP between 2 CALLs of CMiPhy                      [s] I, fix
957&                  ,dt0_CP                                        &   ! Time STEP between 2 CALLs of CVamnh                      [s] I, fix
958&                  ,dt0_RT                                        &   ! Time STEP between 2 CALLs of radCEP                      [s] I, fix
959&                  ,dx                                            &   ! Grid  Mesh size (Horizontal)                             [m] I, fix
960&                  ,DD_AxX                                        &   ! Grid  x-Axis Direction                              [degree] I, fix
961&                  ,s_HOST                                        &   ! Grid (Vertical)   of HOST (NORMALIZED PRESSURE assumed)  [-] I, fix
962&                  ,sh___HOST                                     &   ! Topography                                               [m] I, fix
963&                  ,sh_a_HOST                                     &   ! Topography Anomaly                                       [m] I, fix  NEW
964&                  ,slopxHOST                                     &   ! Slope, x-direction                                       [-] I, fix  NEW
965&                  ,slopyHOST                                     &   ! Slope, y-direction                                       [-] I, fix  NEW
966&                  ,slopeHOST                                     &   ! Slope                                                    [-] I, fix  NEW
967&                  ,MMaskHOST                                     &   ! Mountain Mask                                            [-] I, fix  NEW
968&                  ,lonh_HOST                                     &   ! Longitude                                             [hour] I, fix
969&                  ,latr_HOST                                     &   ! Latitude                                            [radian] I, fix
970&                  ,pkta_HOST                                     &   ! Reduced Potential Temperature                           [XK] I, O
971&                  ,ptop_HOST                                     &   ! Pressure, Model Top                                    [kPa] I, fix
972&                  ,psa__HOST                                     &   ! Pressure  Thickness                                    [kPa] I
973&                  ,gZa__HOST                                     &   ! Geopotential Height                                  [m2/s2] I
974&                  ,gZam_HOST                                     &   ! Geopotential Height, mid-level                       [m2/s2] I
975&                  ,Ua___HOST                                     &   ! Wind ,  x-Direction                                    [m/s] I
976&                  ,Va___HOST                                     &   ! Wind ,  y-Direction                                    [m/s] I
977&                  ,Wa___HOST                                     &   ! Wind ,  z-Direction                                    [m/s] I
978&                  ,qv___HOST                                     &   ! Specific  Humidity                                   [kg/kg] I, O
979&                  ,qw___HOST                                     &   ! Cloud Droplets Concentration                         [kg/kg] I, O
980! #cw&             ,CCN__HOST                                     &   ! CCN            Concentration                          [-/kg]
981&                  ,qi___HOST                                     &   ! Cloud Crystals Concentration                         [kg/kg] I, O
982&                  ,CIN__HOST                                     &   ! CIN            Concentration                          [-/kg] I, O
983&                  ,CF___HOST                                     &   ! Cloud Fraction                                           [-] I, O
984&                  ,qs___HOST                                     &   ! Snow Particles Concentration                         [kg/kg] I, O
985&                  ,qr___HOST                                     &   ! Rain Drops     Concentration                         [kg/kg] I, O
986&                  ,TKE__HOST                                     &   ! Turbulent Kinetic Energy                             [m2/s2] I, O
987&                  ,eps__HOST                                     &   ! Turbulent Kinetic Energy Dissipation                 [m2/s3] I, O
988&                  ,dpkt___dt                                     &   ! Reduced Potential Temperature TENDENCY, ALL Contribut.[KX/s]    O
989&                  ,dua____dt                                     &   ! Wind Speed       (x-direc.)   TENDENCY, ALL Contribut.[m/s2]    O
990&                  ,dva____dt                                     &   ! Wind Speed       (y-direc.)   TENDENCY, ALL Contribut.[m/s2]    O
991&                  ,dqv____dt                                     &   ! Specific          Humidity    TENDENCY, ALL Contr. [kg/kg/s]    O
992&                  ,dqw____dt                                     &   ! Cloud Droplets Concentration  TENDENCY, ALL Contr. [kg/kg/s]    O
993! #cw&                  ,dCw____dt                                     &   ! CCN            Concentration  TENDENCY, ALL Contr.     [1/s]
994&                  ,dqi____dt                                     &   ! Cloud Crystals Concentration  TENDENCY, ALL Contr. [kg/kg/s]    O
995&                  ,dCi____dt                                     &   ! CIN            Concentration  TENDENCY, ALL Contr.     [1/s]    O
996&                  ,dCF____dt                                     &   ! Cloud Fraction                TENDENCY, ALL Contr.     [1/s]    O
997&                  ,dqs____dt                                     &   ! Snow Particles Concentration  TENDENCY, ALL Contr. [kg/kg/s]    O
998&                  ,dqr____dt                                     &   ! Rain Drops     Concentration  TENDENCY, ALL Contr. [kg/kg/s]   O
999! #dT&                  ,dpktSV_dt                                     &   ! Reduced Potential Temperature TENDENCY, SISVAT        [KX/s]  (O)
1000! #dT&                  ,dpktAT_dt                                     &   ! Reduced Potential Temperature TENDENCY, Atm_AT        [KX/s]  (O)
1001! #dT&                  ,dqv_AT_dt                                     &   ! Specific          Humidity    TENDENCY, Atm_AT     [kg/kg/s]  (O)
1002! #dT&                  ,dqw_AT_dt                                     &   ! Cloud Droplets Concentration  TENDENCY, Atm_AT     [kg/kg/s]  (O)
1003! #dT&                  ,dqi_AT_dt                                     &   ! Cloud Crystals Concentration  TENDENCY, Atm_AT     [kg/kg/s]  (O)
1004! #dT&                  ,dqs_AT_dt                                     &   ! Snow Particles Concentration  TENDENCY, Atm_AT     [kg/kg/s]  (O)
1005! #dT&                  ,dqr_AT_dt                                     &   ! Rain Drops     Concentration  TENDENCY, Atm_AT     [kg/kg/s]  (O)
1006! #cw&                  ,dCw_AT_dt                                     &   ! CCN            Concentration  TENDENCY, Atm_AT         [1/s]  (O)
1007! #dT&                  ,dCi_AT_dt                                     &   ! CIN            Concentration  TENDENCY, Atm_AT         [1/s]  (O)
1008! #dT&                  ,dpktCM_dt                                     &   ! Reduced Potential Temperature TENDENCY, CMiPhy        [KX/s]  (O)
1009! #dT&                  ,dqv_CM_dt                                     &   ! Specific          Humidity    TENDENCY, CMiPhy     [kg/kg/s]  (O)
1010! #dT&                  ,dqw_CM_dt                                     &   ! Cloud Droplets Concentration  TENDENCY, CMiPhy     [kg/kg/s]  (O)
1011! #dT&                  ,dCF_CM_dt                                     &   ! Cloud Fraction                TENDENCY, CMiPhy         [1/s]  (O)
1012! #dT&                  ,dqi_CM_dt                                     &   ! Cloud Crystals Concentration  TENDENCY, CMiPhy     [kg/kg/s]  (O)
1013! #dT&                  ,dqs_CM_dt                                     &   ! Snow Particles Concentration  TENDENCY, CMiPhy     [kg/kg/s]  (O)
1014! #dT&                  ,dqr_CM_dt                                     &   ! Rain Drops     Concentration  TENDENCY, CMiPhy     [kg/kg/s]  (O)
1015! #cw&                  ,dCw_CM_dt                                     &   ! CCN            Concentration  TENDENCY, CMiPhy         [1/s]  (O)
1016! #dT&                  ,dCi_CM_dt                                     &   ! CIN            Concentration  TENDENCY, CMiPhy         [1/s]  (O)
1017! #dT&                  ,dpktCP_dt                                     &   ! Reduced Potential Temperature TENDENCY, CVAmnh        [KX/s]  (O)
1018! #dT&                  ,dqv_CP_dt                                     &   ! Specific          Humidity    TENDENCY, CVAmnh     [kg/kg/s]  (O)
1019! #dT&                  ,dqw_CP_dt                                     &   ! Cloud Droplets Concentration  TENDENCY, CVAmnh     [kg/kg/s]  (O)
1020! #dT&                  ,dqi_CP_dt                                     &   ! Cloud Crystals Concentration  TENDENCY, CVAmnh     [kg/kg/s]  (O)
1021! #dT&                  ,dpktRT_dt                                     &   ! Reduced Potential Temperature TENDENCY, radCEP        [KX/s]  (O)
1022&                  ,sst__HOST                                     &   ! Ocean     FORCING (SST)                                  [K] I
1023! #IP&                  ,sif__HOST                                     &   ! Ocean     FORCING (Sea-Ice Fraction )                    [-] I
1024! #AO&                  ,s_T__HOST                                     &   ! Ocean    COUPLING (Surface Temperat.)  n=1: Open Ocean   [-] I,NEMO
1025! #AO&                  ,Alb__HOST                                     &   ! Ocean    COUPLING (Surface Albedo   )  n=2: Sea  Ice     [-] I,NEMO
1026! #AO&                  ,dSdT2HOST                                     &   ! Ocean    COUPLING ( d(SH Flux) / dT )               [W/m2/K]   O
1027! #AO&                  ,dLdT2HOST                                     &   ! Ocean    COUPLING ( d(LH Flux) / dT )               [W/m2/K]   O
1028!dead&                  ,it0EXP,it0RUN                                 &   ! Iteration
1029&                  ,Year_H,Mon__H,Day__H,Hour_H,minu_H,sec__H     &   ! Time
1030&                  ,ixq1  ,i0x0  ,mxqq                            &   ! Domain  Dimension: x
1031&                  ,jyq1  ,j0y0  ,myqq                            &   ! Domain  Dimension: y
1032&                  ,klev   ,klevp1                                   &   ! Domain  Dimension: z
1033&                  ,mwq                                           &   ! Domain  Dimension: mosaic
1034&                  ,klon                                         &   ! Domain  Dimension: x * y                                             NEW
1035&                  ,kcolw                                         &   ! Domain  Dimension: x * y * mosaic                                    NEW
1036&                  ,m_azim                                        &   ! Mountain Mask, nb of directions taken into account       [-]         NEW
1037&                  ,IOi0SV,IOj0SV,n0pt)                               ! Indices of OUTPUT Grid Point
1038!                *******
1039
1040!======================================================================
1041! On renvoie les variables nécessaires à la dynamique de LMDZ:
1042!======================================================================
1043
1044PRINT*, 'On est sorti de PHY_MAR, on peut actualiser les variables pour LMDZ'
1045
1046d_ps(:)=0.0           ! d_ps----output-R-tendance physique de la pression au sol ! égal à zéro sur la terre (car on néglige la perte de poid de la colonne lorsqu'il pleut).
1047
1048DO k = 1, klev
1049  i=klev+1-k
1050
1051  d_u(:,k)=dua____dt(:,i) ! d_u-----output-R-tendance physique de "u" (m/s/s)
1052  d_v(:,k)=dva____dt(:,i) ! d_v-----output-R-tendance physique de "v" (m/s/s)
1053  d_t(:,k)=dpkt___dt(:,i)*(pplay(:,k)/1000) ** kap !d_t(:,:)= ! d_t-----output-R-tendance physique de "t" (K/s). Note: la pression ne change pas au cours de la physique.
1054  ! d_qx----output-R-tendance physique de "qx" (kg/kg/s):
1055  d_qx(:,k,ivap)=dqv____dt(:,i)        !  Specific           Humidity    TENDENCY, ALL Contr. [kg/kg/s]
1056  d_qx(:,k,iliq)=dqw____dt(:,i)        !  Cloud Droplets Concentration   TENDENCY, ALL Contr. [kg/kg/s]
1057  d_qx(:,k,iice)=dqi____dt(:,i)        !  Cloud Crystals Concentration   TENDENCY, ALL Contr. [kg/kg/s]
1058  d_qx(:,k,icin)=dCi____dt(:,i)        !  CIN            Concentration   TENDENCY, ALL Contr.  [1/kg/s]
1059  d_qx(:,k,isnow)=dqs____dt(:,i)       !  Snow Particles Concentration   TENDENCY, ALL Contr. [kg/kg/s]
1060  d_qx(:,k,irain)=dqr____dt(:,i)       !  Rain Drops     Concentration   TENDENCY, ALL Contr. [kg/kg/s]
1061  ! #cw dCw____dt                      !  CCN            Concentration   TENDENCY, ALL Contr.  [1/kg/s]
1062  cldfra(:,k)=CF___HOST(:,i)        ! cloud fraction
1063
1064END DO
1065
1066! Heat flux at surface (diagnostic)
1067      HsenSV_gpt(:) = -uts_SV_gpt(:) *1.e-3 *1005.    ! sensible heat flx in W/m2
1068      HLatSV_gpt(:) = -uqs_SV_gpt(:) *1.e-3 *2.5e6    ! latent heat flx in W/m2
1069
1070! Question à Hubert : tendences de TKE non nécessaires ? Réponse: la TKE est mise à jour dans la physique, on n'a pas besoin de transporter la dérivée de TKE dans la dynamique.
1071
1072! On désalloue les tableaux:
1073DEALLOCATE(MMaskHOST) ! Est-ce qu'il faut le faire ?
1074
1075PRINT*, 'Control des tendances aprés la physique de MAR'
1076
1077PRINT*, 'maxval(d_u)=',maxval(d_u)
1078PRINT*, 'maxval(d_v)=',maxval(d_v)
1079PRINT*, 'maxval(d_t)=',maxval(d_t)
1080PRINT*, 'maxval(paprs(:,1))=',maxval(paprs(:,1))
1081PRINT*, 'minval(d_u)=',minval(d_u)
1082PRINT*, 'minval(d_v)=',minval(d_v)
1083PRINT*, 'minval(d_t)=',minval(d_t)
1084PRINT*, 'minval(paprs(:,1))=',minval(paprs(:,1))
1085PRINT*,'Test snowCM'
1086PRINT*,'MAXVAL(snowCM)=',MAXVAL(snowCM)
1087PRINT*,'MAXVAL(rainCM)=',MAXVAL(rainCM)
1088PRINT*,'maxval(cldfra)=',maxval(cldfra)
1089PRINT*,'minval(cldfra)=',minval(cldfra)
1090
1091!======================================================================
1092! Ecriture des sorties netcdf
1093!======================================================================
1094
1095PRINT*, 'On ecrit les variables dans un fichier netcdf instantané'
1096! write some outputs:
1097if (debut) then ! On imprime les variables de sortie intemporelles seulement au début
1098  !call iophys_ini
1099  call histwrite_phy(nid_hist,.false.,"lonh",itau,lonh_HOST)
1100  call histwrite_phy(nid_hist,.false.,"latr",itau,latr_HOST)
1101  call histwrite_phy(nid_hist,.false.,"sst",itau,sst__HOST)
1102endif
1103if (modulo(itau,iwrite_phys)==0) then
1104  call histwrite_phy(nid_hist,.false.,"temperature",itau,t)
1105  call histwrite_phy(nid_hist,.false.,"pplay",itau,pplay)
1106  call histwrite_phy(nid_hist,.false.,"ps",itau,paprs(:,1))
1107  call histwrite_phy(nid_hist,.false.,"qx_vap",itau,qx(:,:,ivap))
1108  call histwrite_phy(nid_hist,.false.,"qx_liq",itau,qx(:,:,iliq))
1109  call histwrite_phy(nid_hist,.false.,"qx_ice",itau,qx(:,:,iice))
1110  call histwrite_phy(nid_hist,.false.,"u",itau,u)
1111  call histwrite_phy(nid_hist,.false.,"v",itau,v)
1112  call histwrite_phy(nid_hist,.false.,"d_t",itau,d_t)
1113  call histwrite_phy(nid_hist,.false.,"d_u",itau,d_u)
1114  call histwrite_phy(nid_hist,.false.,"d_v",itau,d_v)
1115  call histwrite_phy(nid_hist,.false.,"snow",itau,SnowCM)
1116  call histwrite_phy(nid_hist,.false.,"rain",itau,RainCM)
1117  call histwrite_phy(nid_hist,.false.,"snowCP",itau,snowCP)
1118  call histwrite_phy(nid_hist,.false.,"rainCP",itau,rainCP)
1119  call histwrite_phy(nid_hist,.false.,"nebulosity",itau,cldfra)
1120endif
1121
1122!XIOS
1123#ifdef CPP_XIOS
1124!$OMP MASTER
1125    !On incrémente le pas de temps XIOS
1126    !CALL wxios_update_calendar(itau)
1127
1128    !Et on écrit, avec la routine histwrite dédiée:
1129    !CALL histwrite_phy("temperature",t)
1130    !CALL histwrite_phy("u",u)
1131    !CALL histwrite_phy("v",v)
1132    !CALL histwrite_phy("ps",paprs(:,1))
1133!$OMP END MASTER
1134#endif
1135!
1136! On synchronise la fin de l'écriture du fichier à chaque pas de temps pour que le fichier soit OK même si le code plante...
1137CALL histsync(nid_hist)
1138
1139PRINT*, 'Fin de physiq.f90'
1140
1141      return
1142      end
1143
1144! sub-routine inutilisée :
1145
1146!SUBROUTINE gr_fi_ecrit(nfield,nlon,iim,jjmp1,fi,ecrit)
1147!     IMPLICIT none
1148
1149!  Tranformer une variable de la grille physique a
1150!  la grille d'ecriture
1151!      INTEGER nfield,nlon,iim,jjmp1, jjm
1152!      REAL fi(nlon,nfield), ecrit(iim*jjmp1,nfield)
1153!      INTEGER i, n, ig
1154!      jjm = jjmp1 - 1
1155!      DO n = 1, nfield
1156!        DO i=1,iim
1157!             ecrit(i,n) = fi(1,n)
1158!,            ecrit(i+jjm*iim,n) = fi(nlon,n)
1159!        ENDDO
1160!        DO ig = 1, nlon - 2
1161!             ecrit(iim+ig,n) = fi(1+ig,n)
1162!        ENDDO
1163!      ENDDO
1164!RETURN
1165!END
Note: See TracBrowser for help on using the repository browser.