source: dynamico_lmdz/aquaplanet/LMDZ5_old/libf/phymar/physiq.F90

Last change on this file was 3831, checked in by ymipsl, 10 years ago

module reorganisation for a cleaner dyn-phys interface
YM

File size: 67.6 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, 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, day_ref, hour, zjulian)
354  call getin('anneeref',annee_ref)
355  call ymds2ju(annee_ref, 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
485
486!!!!!
487!ym Attention la signification de day_step a change => daystep==nbpdt de la physiq par jour
488!ym => a adapter
489!!!!!
490dt0DYn=daysec/REAL(day_step_xxx)   !  Time Step, Dynamics                       [s]
491dt0_AT=pdtphys                 !  Time Step, SISVAT                         [s]
492dt0_SV=pdtphys                 !  Time Step, Atm_AT                         [s]
493dt0_CM=pdtphys                 !  Time Step, CMiPhy                         [s]
494dt0_CP=pdtphys*10              !  Time Step, CVAmnh                         [s]
495dt0_RT=pdtphys*20              !  Time Step, radCEP                         [s]
496
497! Correspondances de grilles: inutilisé car on utilise directement les variables LMD
498
499! Dans un premier temps, une seule mozaique:
500mwq=1
501
502kcolw=mwq*klon
503
504DO i=1,klon
505  IF (rlond(i) .LT. 0) THEN
506    lonh_HOST(i)=rlond(i)*12./rpi+24. ! from radians to hours
507   ELSE
508    lonh_HOST(i)=rlond(i)*12./rpi ! from radians to hours
509  ENDIF
510ENDDO
511latr_HOST(:)=rlatd(:) ! from radians to radians
512
513!PRINT*, 'lonh_HOST(:)=',lonh_HOST(:)
514!PRINT*, 'latr_HOST(:)=',latr_HOST(:)
515
516! Niveaux verticaux:
517! Attention, il faut faire un test pour vérifier si les coordonnées verticaux définis sont adéquats avec ceux de MAR!
518DO k = 1, klev
519  i=klev+1-k
520  IF (ap(k) .NE. 0) THEN
521    CALL abort_gcm('','MAR physic can be applied only with sigma levels, check vertical resolution in disvert.F90',1)
522   ELSE
523    s_HOST(i)=0.5*(bp(k)+bp(k+1))
524  ENDIF
525END DO
526s_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.
527
528! 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.
529! 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).
530
531mxqq=iim
532myqq=jjm+1
533
534! Pour MAR, on a besoin des indices du premier point de la grille. Avec une grille globale, c'esty toujours (1,1):
535ixq1=1
536jyq1=1
537
538
539! Temps:
540IF (debut) THEN
541  it0EXP=1
542 ELSE
543  it0EXP=it0EXP+1
544ENDIF
545
546IF (debut) THEN
547  it0RUN=1
548 ELSE
549  it0RUN=it0RUN+1
550ENDIF
551
552! Pour l'instant, on ne peut démarrer une simulation seulement le 1er jour de l'année de référence:
553! Attention, ju2ymds ne donne pas l'année courante, mais compte les années de simulations à partir de 0 !!! A checker !!!
554CALL ymds2ju(annee_ref, 1, 1, 0.0, zjulian)
555!Gilles: zjulian already counted in jD_cur if year correctly initialised
556!CALL ju2ymds(jD_cur+jH_cur+zjulian,Year_H,Mon__H,Day__H,secondes)
557CALL ju2ymds(jD_cur+jH_cur,Year_H,Mon__H,Day__H,secondes)
558Hour_H=INT(secondes)/3600
559minu_H=(INT(secondes)-Hour_H*3600)/60
560!minu_H=INT((secondes-float(Hour_H)*3600.+epsilon)/60.) ! attention aux arrondis machine
561sec__H=INT(secondes)-(Hour_H*3600)-(minu_H*60)
562
563Print*,'CONTROL du temps avant d appeler la physique'
564Print*,'zjulian=',zjulian
565Print*,'annee_ref=',annee_ref
566Print*, 'jD_cur=',JD_cur
567Print*, 'jH_cur=',jH_cur
568Print*, 'Year_H=',Year_H
569Print*, 'Mon__H',Mon__H
570Print*, 'Day__H',Day__H
571Print*, 'secondes=',secondes
572Print*, 'Hour_H=',Hour_H
573Print*, 'minu_H=',minu_H
574Print*, 'sec__H=',sec__H
575Print*, 'klev=',klev
576Print*, 'klevp1=',klevp1
577Print*, 'nlev=',nlev
578Print*, 'nlon=',nlon
579Print*, 'klon=',klon
580PRINT*, 'RCp=',RCp
581
582! Coordonnées du point (en indice) pour lequel on imprime les sorties en ASCII dans le fichier PHY___________.OUT
583i0x0=23
584j0y0=48
585! Variable utilisée juste pour les outputs:
586IOi0SV(:)=1
587IOj0SV(:)=1
588
589! Variables inutilisees:
590dy___HOST=0.
591!CF___HOST=0. ! Pour l'instant pas utilisé, il faut tout de même l'initialiser?
592dCF____dt=0.
593
594
595!======================================================================
596! INITIALISATIONS MAR
597!======================================================================
598!
599! NB : les routines MAR ci-aprés doivent encore être travaillées. Ici, elles ne fonctionnent que pour une aquaplanète !
600
601       it_RUN = it0RUN
602       it_EXP = it0EXP
603
604       IF (it0RUN.LE.1)                                              THEN
605
606         PRINT*,'it0RUN=0; On appelle les routines d initialisation de la physique de MAR'
607
608! Initialization of Mod_PHY____grd
609! --------------------------------
610
611! Anciennes initialisations MAR
612
613         dxHOST = dx
614         DirAxX = DD_AxX
615         ixp1   = ixq1
616         i_x0   = i0x0
617         mxpp   = mxqq
618         jyp1   = jyq1
619         j_y0   = j0y0
620         mypp   = myqq
621         mzpp   = klevp1
622         kcolp  = klon
623         kcolv  = kcolw
624
625! Initialization of Mod_PHY_S0_grd
626! --------------------------------
627         ! Pour l'instant, en attendant du relief :
628         n_azim = m_azim
629
630! Initialization of Mod_SISVAT_grd (Mosaic Discretization only                                      )
631! -------------------------------- (       Discretization from Mod_SISVAT_dim : see PHY_SISVAT_ALLOC)
632
633          mwp    = mwq
634
635! Initialization of Mod_SISVAT_dat
636! --------------------------------
637! pour aquaplanete: FixedSST=1
638          VarSST = 0.
639
640! Initialization of Physical Constants and Allocation of main Variables
641! ---------------------------------------------------------------------
642
643! CONTROL
644PRINT*, 'Appel de PHY INI'
645!              **************
646         CALL PHY________INI
647!              **************
648
649
650! INPUT DATA surface et Calcul des dependances a des Points Horizontaux autres que le Point courant
651! =================================================================================================
652!
653
654! Pour l'instant, PHY_MAR_DAT n'est pas vectorisé, donc on initilise tout en dur pour l'aquaplanète.
655! Ultérieurement, il faudra lires les données topo de LMDZ pour renseigner ces variables à l'initialisation.
656
657PRINT*,'Initialisation en dur des variables topo pour une aquaplanete'
658sh___HOST(:)=0.00
659sh_a_HOST(:)=0.00
660dx___HOST(:)   = 1.e3
661dy___HOST(:)   = 1.e3
662slopxHOST(:)   = 0.00
663slopyHOST(:)   = 0.00
664slopeHOST(:)   = 0.00
665MMaskHOST(:,:) = 0.00
666
667! CONTROL
668!PRINT*, 'Appel de PHY MAR DAT'
669!          ***********
670!      CALL PHY_MAR_DAT(                                                &
671!!          ***********
672!&                 sh___HOST                                       &!  Topographie                                 [m]
673!&                ,sh_a_HOST                                       &!  Topographie, Anomalie                       [m]
674!&                ,dx___HOST                                       &!  Discretisation,   x                         [m]
675!&                ,dy___HOST                                       &!  Discretisation,   y                         [m]
676!&                ,slopxHOST                                       &!  Pente selon l'Axe x                         [-]
677!&                ,slopyHOST                                       &!  Pente selon l'Axe y                         [-]
678!&                ,slopeHOST                                       &!  Pente                                       [-]
679!&                ,MMaskHOST                                       &!  Masque de Montagnes                         [-]
680!&                ,ixq1,mxqq                                       &!
681!&                ,jyq1,myqq                                       &!
682!&                ,m_azim                                          &!
683!&                )
684
685! FIRST Initialization of the Surface Variables
686! =============================================
687
688
689! Initial Surface Temperature ( initialement dans DYN_to_PHY_MAR)
690! ---------------------------
691
692! CONTROL
693PRINT*, 'Calcul de Ts___HOST dans la physique'
694PRINT*, 'Initialisation de la temperature de surface avec les SST aquaplanète'
695          DO i = 1,klon
696            Ts___HOST(i)=273.+27.*(1-sin(1.5*rlatd(i))**2)
697            IF ((rlatd(i).GT.1.0471975).OR.(rlatd(i).LT.-1.0471975)) THEN
698              Ts___HOST(i)=273.
699            ENDIF
700
701             !PRINT*, 'Initialisation de la temperature de surface avec la temperature du premier niveau'
702             !Ts___HOST(i) = pkta_HOST(i,klevp1)*(psa__HOST(i)+ptop_HOST)**RCp
703             !Ts___HOST(i) = t(i,klev)
704          ENDDO
705
706! CONTROL
707PRINT*, 'Avant PHY SISVAT INP'
708PRINT*,'MAXVAL(Ts___HOST(:)=)',maxval(Ts___HOST(:))
709PRINT*,'MINVAL(Ts___HOST(:)=)',minval(Ts___HOST(:))
710PRINT*, 'Appel de PHY SISVAT INP'
711!              **************
712          CALL PHY_SISVAT_INP(FlagSV_SBC,Ts___HOST,klon)
713!              **************
714
715PRINT*, 'Apres PHY SISVAT INP'
716PRINT*,'MAXVAL(Ts___HOST(:)=)',maxval(Ts___HOST(:))
717PRINT*,'MINVAL(Ts___HOST(:)=)',minval(Ts___HOST(:))
718
719       END IF ! (it0RUN.LE.1)
720
721
722! Horizontal Interactions
723! ======================
724
725
726! Interface: DATA for Stand-Alone Version of the Physical Package
727! ===============================================================
728
729       IF  (.NOT. FlagRT .OR.                                           &
730      &     .NOT. FlagAT .OR.                                           &
731      &     .NOT. FlagCM)                                           THEN
732!     &     .NOT. FlagCP)                                            THEN
733! CONTROL
734PRINT*, 'Appel de PHY SISVAT UBC'
735!                **************
736           CALL   PHY_SISVAT_UBC(FlagRT,FlagAT,FlagCM,FlagCP)
737!                **************
738
739       END IF
740
741PRINT*, 'Apres PHY_SISVAT_UBC'
742Print*, 'mzp=',mzp
743Print*, 'mzpp=',mzpp
744
745!======================================================================
746! Calcul des inputs de MAR à partir de LMDZ
747!======================================================================
748
749! NB : Calculs à faire aprés l'initialisation de la physique du MAR
750
751PRINT*, 'Calcul des inputs de MAR à partir de LMDZ'
752
753! Correspondance ou transformation de variables:
754! RKAPPA=R/Cp dans un module LMD ;
755! Probleme, on n'a pas la temperature de surface dans les arguments !!! a voir avec Hubert comment on fait...
756!  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):
757! NB : Attention aux unités !
758
759IF (debut) THEN
760! On initialise avec la temperature du premier niveau au lieu de la temperature de surface à la première itération:
761   pkt_DY_surf_tmp(:)=t(:,1) / (pplay(:,1)/1000) ** kap
762   ELSE
763   pkt_DY_surf_tmp(:)=pkt_DY(:,klev+1)
764ENDIF
765
766pkta_HOST(:,klev+1)=pkt_DY_surf_tmp(:)
767DO k = 1, klev
768  i=klev+1-k
769  pkta_HOST(:,i) = t(:,k) / (pplay(:,k)/1000) ** kap
770END DO
771
772ptop_HOST=0.
773psa__HOST(:)=(paprs(:,1)-paprs(:,klev+1))/1000. ! [kPa]
774
775! Correspondance du géopotentiel entre LMDZ et MAR :
776
777! Aux niveaux:
778DO k = 1, klev
779  i=klev+1-k
780  gZa__HOST(:,i)=pphi(:,k)
781END DO
782gZa__HOST(:,klev+1)=pphis(:)
783
784! Aux inter-niveaux:
785DO k = 1, klev
786  gZam_HOST(:,k+1)=0.5*(gZa__HOST(:,k+1)+gZa__HOST(:,k))
787END DO
788gZam_HOST(:,1)=1.5*gZa__HOST(:,1)-0.5*gZa__HOST(:,2) ! Extrapolation au sommet de l'atmosphère
789DO k = 1, klev
790  i=klev+1-k
791  Ua___HOST(:,i)=u(:,k)
792  Va___HOST(:,i)=v(:,k)
793ENDDO
794
795! Calcul de vitesse verticale a partir de flux de masse verticale :
796DO k = 1, klev
797  i=klev+1-k
798  !omega(i,k) = RG*flxmass_w(i,k) / airephy(i) ! omega en Pa/s
799  Wa___HOST(:,i)=flxmass_w(:,k) / airephy(:) * (gZam_HOST(:,i+1) - gZam_HOST(:,i))/(paprs(:,k+1)-paprs(:,k)) ! Equilibre hydrostatique
800END DO
801Wa___HOST(:,klev)=0 ! Vitesse nulle à la surface.
802Wa___HOST(:,1)=0 ! Vitesse nulle au sommet.
803
804! Tendances:
805DO k = 1, klev
806  i=klev+1-k
807  dpkt___dt(:,i)=d_t(:,k) / (pplay(:,k)/1000) ** kap
808  dua____dt(:,i)=d_u(:,k)
809  dva____dt(:,i)=d_v(:,k)
810ENDDO
811
812
813DO k = 1, klev
814  i=klev+1-k
815
816! Traceurs:
817  qv___HOST(:,i)=qx(:,k,ivap)          !  Specific Humidity                                     [kg/kg]
818  qw___HOST(:,i)=qx(:,k,iliq)          !  Cloud Droplets Concentration                          [kg/kg]
819  qi___HOST(:,i)=qx(:,k,iice)          !  Cloud Crystals Concentration                          [kg/kg]
820  CIN__HOST(:,i)=qx(:,k,icin)          !  CIN            Concentration                           [-/kg]
821  qs___HOST(:,i)=qx(:,k,isnow)         !  Snow Particles Concentration                          [kg/kg]
822  qr___HOST(:,i)=qx(:,k,irain)         !  Rain Drops     Concentration                          [kg/kg]
823  TKE__HOST(:,i)=qx(:,k,itke)          !  Turbulent Kinetic Energy                              [m2/s2]
824  eps__HOST(:,i)=qx(:,k,itked)         !  Turbulent Kinetic Energy Dissipation                  [m2/s3]
825  ! #cw CCN__HOST(:,:)=qx(:,:,iccn)    !  CCN            Concentration                           [-/kg]
826
827END DO
828
829! Dans MAR, qv(klev+1)=qv(klev)
830IF (debut) THEN
831  ! On initialise avec le qv du premier niveau au lieu du qv de surface à la première itération:
832    qv_HOST_surf_tmp(:)=qv___HOST(:,klev)
833   ELSE
834    qv_HOST_surf_tmp(:)=qv__DY(:,klev+1)
835ENDIF
836qv___HOST(:,klev+1)=qv_HOST_surf_tmp(:)  !  Specific Humidity                                     [kg/kg]
837
838DO k = 1, klev
839  i=klev+1-k
840
841! Dérivée des traceurs:
842dqv____dt(:,i)=d_qx(:,k,ivap)        !  Specific           Humidity    TENDENCY, ALL Contr. [kg/kg/s]
843dqw____dt(:,i)=d_qx(:,k,iliq)        !  Cloud Droplets Concentration   TENDENCY, ALL Contr. [kg/kg/s]
844dqi____dt(:,i)=d_qx(:,k,iice)        !  Cloud Crystals Concentration   TENDENCY, ALL Contr. [kg/kg/s]
845dCi____dt(:,i)=d_qx(:,k,icin)        !  CIN            Concentration   TENDENCY, ALL Contr.  [1/kg/s]
846dqs____dt(:,i)=d_qx(:,k,isnow)       !  Snow Particles Concentration   TENDENCY, ALL Contr. [kg/kg/s]
847dqr____dt(:,i)=d_qx(:,k,irain)       !  Rain Drops     Concentration   TENDENCY, ALL Contr. [kg/kg/s]
848! #cw dCw____dt                      !  CCN            Concentration   TENDENCY, ALL Contr.  [1/kg/s]
849
850END DO
851
852!======================================================================
853! Test Aquaplanète:
854!======================================================================
855
856! CONTROL
857PRINT*, 'Calcul des SST en aquaplanète pour MAR comme dans le cas n°101 de LMDZ' ! (cf iniaqua de LMDZ)
858!IF (debut) THEN
859  DO i=1,klon
860    sst__HOST(i)=273.+27.*(1-sin(1.5*rlatd(i))**2)
861    IF ((rlatd(i).GT.1.0471975).OR.(rlatd(i).LT.-1.0471975)) THEN
862      sst__HOST(i)=273.
863    ENDIF
864  ENDDO
865!ENDIF
866
867!======================================================================
868! CONTROL
869!======================================================================
870PRINT*, 'Control variables LMDZ entree de la physique'
871PRINT*,'MAXVAL(pplay(:,klev))=',MAXVAL(pplay(:,klev))
872PRINT*,'MINVAL(pplay(:,klev))=',MINVAL(pplay(:,klev))
873PRINT*,'MAXVAL(t(:,klev))=',MAXVAL(t(:,klev))
874PRINT*,'MINVAL(t(:,klev))=',MINVAL(t(:,klev))
875PRINT*,'MAXVAL(pplay(:,1))=',MAXVAL(pplay(:,1))
876PRINT*,'MINVAL(pplay(:,1))=',MINVAL(pplay(:,1))
877PRINT*,'MAXVAL(t(:,1))=',MAXVAL(t(:,1))
878PRINT*,'MINVAL(t(:,1))=',MINVAL(t(:,1))
879PRINT*,'MAXVAL(pplay)=',MAXVAL(pplay)
880PRINT*,'MINVAL(pplay)=',MINVAL(pplay)
881PRINT*,'MAXVAL(t)=',MAXVAL(t)
882PRINT*,'MINVAL(t)=',MINVAL(t)
883PRINT*,'MAXVAL(pphis)=',MAXVAL(pphis)
884PRINT*,'MINVAL(pphis)=',MINVAL(pphis)
885PRINT*,'kap=',kap
886PRINT*, 'CONTROL variables MAR entree de la physique'
887PRINT*,'MAXVAL(pkta_HOST)=',MAXVAL(pkta_HOST)
888PRINT*,'MAXVAL(psa__HOST)=',MAXVAL(psa__HOST)
889PRINT*,'MAXVAL(gZa__HOST)=',MAXVAL(gZa__HOST)
890PRINT*,'MAXVAL(gZam_HOST)=',MAXVAL(gZam_HOST)
891PRINT*,'MAXVAL(Ua___HOST)=',MAXVAL(Ua___HOST)
892PRINT*,'MAXVAL(Va___HOST)=',MAXVAL(Va___HOST)
893PRINT*,'MAXVAL(qv___HOST)=',MAXVAL(qv___HOST)
894PRINT*,'MINVAL(pkta_HOST)=',MINVAL(pkta_HOST)
895PRINT*,'MINVAL(psa__HOST)=',MINVAL(psa__HOST)
896PRINT*,'MINVAL(gZa__HOST)=',MINVAL(gZa__HOST)
897PRINT*,'MINVAL(gZam_HOST)=',MINVAL(gZam_HOST)
898PRINT*,'MINVAL(Ua___HOST)=',MINVAL(Ua___HOST)
899PRINT*,'MINVAL(Va___HOST)=',MINVAL(Va___HOST)
900PRINT*,'MINVAL(qv___HOST)=',MINVAL(qv___HOST)
901PRINT*,'Control iterations:'
902PRINT*,'it0RUN=',it0RUN
903PRINT*,'it0EXP=',it0EXP
904PRINT*,'it_RUN=',it_RUN
905PRINT*,'it_EXP=',it_EXP
906
907! On choisi l'endroit où on fait les diagnostics de verification MAR (fichier ASCII):
908! Pour la phase de débug, on cherche des Nan !
909
910DO i=1,klon
911  DO k=1,klev
912    IF (isnan(Va___HOST(i,k))) THEN
913      ikl0 = i
914      PRINT*,'Attention : NaN at'
915      PRINT*,'longitude=',rlond(i)*180/rpi
916      PRINT*,'latitude=',rlatd(i)*180/rpi
917    ENDIF
918  ENDDO
919ENDDO
920
921!======================================================================
922! Appel de PHY_MAR
923!======================================================================
924
925! NB: Logiquement, il faut conserver cet appel tel quel, car Hubert Gallée s'engage à ne pas le changer lors des mises à jour !
926
927! CONTROL
928PRINT*, 'Appel de PHY MAR'
929!PRINT*, 'FlagSV     =',FlagSV
930!PRINT*, 'FlagSV_Veg =',FlagSV_Veg
931!PRINT*, 'FlagSV_SNo =',FlagSV_SNo
932!PRINT*, 'FlagSV_BSn =',FlagSV_BSn
933!PRINT*, 'FlagSV_KzT =',FlagSV_KzT
934!PRINT*, 'FlagSV_SWD =',FlagSV_SWD
935!PRINT*, 'FlagSV_SBC =',FlagSV_SBC
936!PRINT*, 'FlagSV_UBC =',FlagSV_UBC
937!PRINT*, 'FlagAT     =',FlagAT
938
939      CALL  PHY_MAR(FlagSV                                        &   ! FLAG  for SISVAT: (T,F) =                    (active OR NOT)
940&                  ,FlagSV_Veg                                    &   ! FLAG  for SISVAT: (T,F) =       (Variable Vegetation OR NOT)
941&                  ,FlagSV_SNo                                    &   ! FLAG  for SISVAT: (T,F) =         (Snow Model active OR NOT)
942&                  ,FlagSV_BSn                                    &   ! FLAG  for SISVAT: (T,F) = (Blowing Snow Model active OR NOT)
943&                  ,FlagSV_KzT                                    &   ! FLAG  for SISVAT: (T,F) = (pkt Turb.Transfert active OR NOT in SISVAT)
944&                  ,FlagSV_SWD                                    &   ! FLAG  for SISVAT: (T,F) = (Modify SW INPUT->downward OR NOT)     
945&                  ,FlagSV_SBC                                    &   ! FLAG  for SISVAT: (T,F) = (INPUT of Soil & Vege DATA OR NOT in SISVAT)
946&                  ,FlagSV_UBC                                    &   ! FLAG  for SISVAT: (T,F) = (pkt UpperBC is Von Neuman OR NOT in SISVAT)
947&                  ,FlagAT                                        &   ! FLAG  for Atm_AT: (T,F) = (Turbulent Transfer active OR NOT)
948&                  ,TypeAT                                        &   ! TYPE  of  Atm_AT: (e= Ee Duynkerke, K= Ee Kitada, L= EL, H= Ee Huan-R)
949&                  ,FlagAT_TKE                                    &   ! FLAG  for genTKE: (T,F) = (TKE-e     Model    active OR NOT)
950&                  ,FlagCM                                        &   ! FLAG  for CMiPhy: (T,F) = (Cloud Microphysics active OR NOT)
951&                  ,FlagCM_UpD                                    &   ! FLAG  for CMiPhy: (T,F) = (qv & hydrometeors updated OR NOT IN CMiPhy)
952&                  ,FlagCP                                        &   ! FLAG  for Convection Paramet.
953&                  ,FlagRT                                        &   ! FLAG  for Radiative Transfer
954&                  ,FlagS0_SLO                                    &   ! FLAG  for Insolation, Surfac.Slope                 Impact  included  NEW
955&                  ,FlagS0_MtM                                    &   ! FLAG  for Insolation, Surfac.Slope & Mountain Mask Impacts included  NEW
956&                  ,Flag_O                                        &   ! FLAG  for OUTPUT
957&                  ,FlagVR                                        &   ! FLAG  for OUTPUT for VERIFICATION
958&                  ,dt0DYn                                        &   ! Time STEP between 2 CALLs of PHY_MAR                     [s] I, fix
959&                  ,dt0_SV                                        &   ! Time STEP between 2 CALLs of SISVAT                      [s] I, fix
960&                  ,dt0_AT                                        &   ! Time STEP between 2 CALLs of Atm_AT                      [s] I, fix
961&                  ,dt0_CM                                        &   ! Time STEP between 2 CALLs of CMiPhy                      [s] I, fix
962&                  ,dt0_CP                                        &   ! Time STEP between 2 CALLs of CVamnh                      [s] I, fix
963&                  ,dt0_RT                                        &   ! Time STEP between 2 CALLs of radCEP                      [s] I, fix
964&                  ,dx                                            &   ! Grid  Mesh size (Horizontal)                             [m] I, fix
965&                  ,DD_AxX                                        &   ! Grid  x-Axis Direction                              [degree] I, fix
966&                  ,s_HOST                                        &   ! Grid (Vertical)   of HOST (NORMALIZED PRESSURE assumed)  [-] I, fix
967&                  ,sh___HOST                                     &   ! Topography                                               [m] I, fix
968&                  ,sh_a_HOST                                     &   ! Topography Anomaly                                       [m] I, fix  NEW
969&                  ,slopxHOST                                     &   ! Slope, x-direction                                       [-] I, fix  NEW
970&                  ,slopyHOST                                     &   ! Slope, y-direction                                       [-] I, fix  NEW
971&                  ,slopeHOST                                     &   ! Slope                                                    [-] I, fix  NEW
972&                  ,MMaskHOST                                     &   ! Mountain Mask                                            [-] I, fix  NEW
973&                  ,lonh_HOST                                     &   ! Longitude                                             [hour] I, fix
974&                  ,latr_HOST                                     &   ! Latitude                                            [radian] I, fix
975&                  ,pkta_HOST                                     &   ! Reduced Potential Temperature                           [XK] I, O
976&                  ,ptop_HOST                                     &   ! Pressure, Model Top                                    [kPa] I, fix
977&                  ,psa__HOST                                     &   ! Pressure  Thickness                                    [kPa] I
978&                  ,gZa__HOST                                     &   ! Geopotential Height                                  [m2/s2] I
979&                  ,gZam_HOST                                     &   ! Geopotential Height, mid-level                       [m2/s2] I
980&                  ,Ua___HOST                                     &   ! Wind ,  x-Direction                                    [m/s] I
981&                  ,Va___HOST                                     &   ! Wind ,  y-Direction                                    [m/s] I
982&                  ,Wa___HOST                                     &   ! Wind ,  z-Direction                                    [m/s] I
983&                  ,qv___HOST                                     &   ! Specific  Humidity                                   [kg/kg] I, O
984&                  ,qw___HOST                                     &   ! Cloud Droplets Concentration                         [kg/kg] I, O
985! #cw&             ,CCN__HOST                                     &   ! CCN            Concentration                          [-/kg]
986&                  ,qi___HOST                                     &   ! Cloud Crystals Concentration                         [kg/kg] I, O
987&                  ,CIN__HOST                                     &   ! CIN            Concentration                          [-/kg] I, O
988&                  ,CF___HOST                                     &   ! Cloud Fraction                                           [-] I, O
989&                  ,qs___HOST                                     &   ! Snow Particles Concentration                         [kg/kg] I, O
990&                  ,qr___HOST                                     &   ! Rain Drops     Concentration                         [kg/kg] I, O
991&                  ,TKE__HOST                                     &   ! Turbulent Kinetic Energy                             [m2/s2] I, O
992&                  ,eps__HOST                                     &   ! Turbulent Kinetic Energy Dissipation                 [m2/s3] I, O
993&                  ,dpkt___dt                                     &   ! Reduced Potential Temperature TENDENCY, ALL Contribut.[KX/s]    O
994&                  ,dua____dt                                     &   ! Wind Speed       (x-direc.)   TENDENCY, ALL Contribut.[m/s2]    O
995&                  ,dva____dt                                     &   ! Wind Speed       (y-direc.)   TENDENCY, ALL Contribut.[m/s2]    O
996&                  ,dqv____dt                                     &   ! Specific          Humidity    TENDENCY, ALL Contr. [kg/kg/s]    O
997&                  ,dqw____dt                                     &   ! Cloud Droplets Concentration  TENDENCY, ALL Contr. [kg/kg/s]    O
998! #cw&                  ,dCw____dt                                     &   ! CCN            Concentration  TENDENCY, ALL Contr.     [1/s]
999&                  ,dqi____dt                                     &   ! Cloud Crystals Concentration  TENDENCY, ALL Contr. [kg/kg/s]    O
1000&                  ,dCi____dt                                     &   ! CIN            Concentration  TENDENCY, ALL Contr.     [1/s]    O
1001&                  ,dCF____dt                                     &   ! Cloud Fraction                TENDENCY, ALL Contr.     [1/s]    O
1002&                  ,dqs____dt                                     &   ! Snow Particles Concentration  TENDENCY, ALL Contr. [kg/kg/s]    O
1003&                  ,dqr____dt                                     &   ! Rain Drops     Concentration  TENDENCY, ALL Contr. [kg/kg/s]   O
1004! #dT&                  ,dpktSV_dt                                     &   ! Reduced Potential Temperature TENDENCY, SISVAT        [KX/s]  (O)
1005! #dT&                  ,dpktAT_dt                                     &   ! Reduced Potential Temperature TENDENCY, Atm_AT        [KX/s]  (O)
1006! #dT&                  ,dqv_AT_dt                                     &   ! Specific          Humidity    TENDENCY, Atm_AT     [kg/kg/s]  (O)
1007! #dT&                  ,dqw_AT_dt                                     &   ! Cloud Droplets Concentration  TENDENCY, Atm_AT     [kg/kg/s]  (O)
1008! #dT&                  ,dqi_AT_dt                                     &   ! Cloud Crystals Concentration  TENDENCY, Atm_AT     [kg/kg/s]  (O)
1009! #dT&                  ,dqs_AT_dt                                     &   ! Snow Particles Concentration  TENDENCY, Atm_AT     [kg/kg/s]  (O)
1010! #dT&                  ,dqr_AT_dt                                     &   ! Rain Drops     Concentration  TENDENCY, Atm_AT     [kg/kg/s]  (O)
1011! #cw&                  ,dCw_AT_dt                                     &   ! CCN            Concentration  TENDENCY, Atm_AT         [1/s]  (O)
1012! #dT&                  ,dCi_AT_dt                                     &   ! CIN            Concentration  TENDENCY, Atm_AT         [1/s]  (O)
1013! #dT&                  ,dpktCM_dt                                     &   ! Reduced Potential Temperature TENDENCY, CMiPhy        [KX/s]  (O)
1014! #dT&                  ,dqv_CM_dt                                     &   ! Specific          Humidity    TENDENCY, CMiPhy     [kg/kg/s]  (O)
1015! #dT&                  ,dqw_CM_dt                                     &   ! Cloud Droplets Concentration  TENDENCY, CMiPhy     [kg/kg/s]  (O)
1016! #dT&                  ,dCF_CM_dt                                     &   ! Cloud Fraction                TENDENCY, CMiPhy         [1/s]  (O)
1017! #dT&                  ,dqi_CM_dt                                     &   ! Cloud Crystals Concentration  TENDENCY, CMiPhy     [kg/kg/s]  (O)
1018! #dT&                  ,dqs_CM_dt                                     &   ! Snow Particles Concentration  TENDENCY, CMiPhy     [kg/kg/s]  (O)
1019! #dT&                  ,dqr_CM_dt                                     &   ! Rain Drops     Concentration  TENDENCY, CMiPhy     [kg/kg/s]  (O)
1020! #cw&                  ,dCw_CM_dt                                     &   ! CCN            Concentration  TENDENCY, CMiPhy         [1/s]  (O)
1021! #dT&                  ,dCi_CM_dt                                     &   ! CIN            Concentration  TENDENCY, CMiPhy         [1/s]  (O)
1022! #dT&                  ,dpktCP_dt                                     &   ! Reduced Potential Temperature TENDENCY, CVAmnh        [KX/s]  (O)
1023! #dT&                  ,dqv_CP_dt                                     &   ! Specific          Humidity    TENDENCY, CVAmnh     [kg/kg/s]  (O)
1024! #dT&                  ,dqw_CP_dt                                     &   ! Cloud Droplets Concentration  TENDENCY, CVAmnh     [kg/kg/s]  (O)
1025! #dT&                  ,dqi_CP_dt                                     &   ! Cloud Crystals Concentration  TENDENCY, CVAmnh     [kg/kg/s]  (O)
1026! #dT&                  ,dpktRT_dt                                     &   ! Reduced Potential Temperature TENDENCY, radCEP        [KX/s]  (O)
1027&                  ,sst__HOST                                     &   ! Ocean     FORCING (SST)                                  [K] I
1028! #IP&                  ,sif__HOST                                     &   ! Ocean     FORCING (Sea-Ice Fraction )                    [-] I
1029! #AO&                  ,s_T__HOST                                     &   ! Ocean    COUPLING (Surface Temperat.)  n=1: Open Ocean   [-] I,NEMO
1030! #AO&                  ,Alb__HOST                                     &   ! Ocean    COUPLING (Surface Albedo   )  n=2: Sea  Ice     [-] I,NEMO
1031! #AO&                  ,dSdT2HOST                                     &   ! Ocean    COUPLING ( d(SH Flux) / dT )               [W/m2/K]   O
1032! #AO&                  ,dLdT2HOST                                     &   ! Ocean    COUPLING ( d(LH Flux) / dT )               [W/m2/K]   O
1033!dead&                  ,it0EXP,it0RUN                                 &   ! Iteration
1034&                  ,Year_H,Mon__H,Day__H,Hour_H,minu_H,sec__H     &   ! Time
1035&                  ,ixq1  ,i0x0  ,mxqq                            &   ! Domain  Dimension: x
1036&                  ,jyq1  ,j0y0  ,myqq                            &   ! Domain  Dimension: y
1037&                  ,klev   ,klevp1                                   &   ! Domain  Dimension: z
1038&                  ,mwq                                           &   ! Domain  Dimension: mosaic
1039&                  ,klon                                         &   ! Domain  Dimension: x * y                                             NEW
1040&                  ,kcolw                                         &   ! Domain  Dimension: x * y * mosaic                                    NEW
1041&                  ,m_azim                                        &   ! Mountain Mask, nb of directions taken into account       [-]         NEW
1042&                  ,IOi0SV,IOj0SV,n0pt)                               ! Indices of OUTPUT Grid Point
1043!                *******
1044
1045!======================================================================
1046! On renvoie les variables nécessaires à la dynamique de LMDZ:
1047!======================================================================
1048
1049PRINT*, 'On est sorti de PHY_MAR, on peut actualiser les variables pour LMDZ'
1050
1051d_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).
1052
1053DO k = 1, klev
1054  i=klev+1-k
1055
1056  d_u(:,k)=dua____dt(:,i) ! d_u-----output-R-tendance physique de "u" (m/s/s)
1057  d_v(:,k)=dva____dt(:,i) ! d_v-----output-R-tendance physique de "v" (m/s/s)
1058  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.
1059  ! d_qx----output-R-tendance physique de "qx" (kg/kg/s):
1060  d_qx(:,k,ivap)=dqv____dt(:,i)        !  Specific           Humidity    TENDENCY, ALL Contr. [kg/kg/s]
1061  d_qx(:,k,iliq)=dqw____dt(:,i)        !  Cloud Droplets Concentration   TENDENCY, ALL Contr. [kg/kg/s]
1062  d_qx(:,k,iice)=dqi____dt(:,i)        !  Cloud Crystals Concentration   TENDENCY, ALL Contr. [kg/kg/s]
1063  d_qx(:,k,icin)=dCi____dt(:,i)        !  CIN            Concentration   TENDENCY, ALL Contr.  [1/kg/s]
1064  d_qx(:,k,isnow)=dqs____dt(:,i)       !  Snow Particles Concentration   TENDENCY, ALL Contr. [kg/kg/s]
1065  d_qx(:,k,irain)=dqr____dt(:,i)       !  Rain Drops     Concentration   TENDENCY, ALL Contr. [kg/kg/s]
1066  ! #cw dCw____dt                      !  CCN            Concentration   TENDENCY, ALL Contr.  [1/kg/s]
1067  cldfra(:,k)=CF___HOST(:,i)        ! cloud fraction
1068
1069END DO
1070
1071! Heat flux at surface (diagnostic)
1072      HsenSV_gpt(:) = -uts_SV_gpt(:) *1.e-3 *1005.    ! sensible heat flx in W/m2
1073      HLatSV_gpt(:) = -uqs_SV_gpt(:) *1.e-3 *2.5e6    ! latent heat flx in W/m2
1074
1075! 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.
1076
1077! On désalloue les tableaux:
1078DEALLOCATE(MMaskHOST) ! Est-ce qu'il faut le faire ?
1079
1080PRINT*, 'Control des tendances aprés la physique de MAR'
1081
1082PRINT*, 'maxval(d_u)=',maxval(d_u)
1083PRINT*, 'maxval(d_v)=',maxval(d_v)
1084PRINT*, 'maxval(d_t)=',maxval(d_t)
1085PRINT*, 'maxval(paprs(:,1))=',maxval(paprs(:,1))
1086PRINT*, 'minval(d_u)=',minval(d_u)
1087PRINT*, 'minval(d_v)=',minval(d_v)
1088PRINT*, 'minval(d_t)=',minval(d_t)
1089PRINT*, 'minval(paprs(:,1))=',minval(paprs(:,1))
1090PRINT*,'Test snowCM'
1091PRINT*,'MAXVAL(snowCM)=',MAXVAL(snowCM)
1092PRINT*,'MAXVAL(rainCM)=',MAXVAL(rainCM)
1093PRINT*,'maxval(cldfra)=',maxval(cldfra)
1094PRINT*,'minval(cldfra)=',minval(cldfra)
1095
1096!======================================================================
1097! Ecriture des sorties netcdf
1098!======================================================================
1099
1100PRINT*, 'On ecrit les variables dans un fichier netcdf instantané'
1101! write some outputs:
1102if (debut) then ! On imprime les variables de sortie intemporelles seulement au début
1103  !call iophys_ini
1104  call histwrite_phy(nid_hist,.false.,"lonh",itau,lonh_HOST)
1105  call histwrite_phy(nid_hist,.false.,"latr",itau,latr_HOST)
1106  call histwrite_phy(nid_hist,.false.,"sst",itau,sst__HOST)
1107endif
1108if (modulo(itau,iwrite_phys)==0) then
1109  call histwrite_phy(nid_hist,.false.,"temperature",itau,t)
1110  call histwrite_phy(nid_hist,.false.,"pplay",itau,pplay)
1111  call histwrite_phy(nid_hist,.false.,"ps",itau,paprs(:,1))
1112  call histwrite_phy(nid_hist,.false.,"qx_vap",itau,qx(:,:,ivap))
1113  call histwrite_phy(nid_hist,.false.,"qx_liq",itau,qx(:,:,iliq))
1114  call histwrite_phy(nid_hist,.false.,"qx_ice",itau,qx(:,:,iice))
1115  call histwrite_phy(nid_hist,.false.,"u",itau,u)
1116  call histwrite_phy(nid_hist,.false.,"v",itau,v)
1117  call histwrite_phy(nid_hist,.false.,"d_t",itau,d_t)
1118  call histwrite_phy(nid_hist,.false.,"d_u",itau,d_u)
1119  call histwrite_phy(nid_hist,.false.,"d_v",itau,d_v)
1120  call histwrite_phy(nid_hist,.false.,"snow",itau,SnowCM)
1121  call histwrite_phy(nid_hist,.false.,"rain",itau,RainCM)
1122  call histwrite_phy(nid_hist,.false.,"snowCP",itau,snowCP)
1123  call histwrite_phy(nid_hist,.false.,"rainCP",itau,rainCP)
1124  call histwrite_phy(nid_hist,.false.,"nebulosity",itau,cldfra)
1125endif
1126
1127!XIOS
1128#ifdef CPP_XIOS
1129!$OMP MASTER
1130    !On incrémente le pas de temps XIOS
1131    !CALL wxios_update_calendar(itau)
1132
1133    !Et on écrit, avec la routine histwrite dédiée:
1134    !CALL histwrite_phy("temperature",t)
1135    !CALL histwrite_phy("u",u)
1136    !CALL histwrite_phy("v",v)
1137    !CALL histwrite_phy("ps",paprs(:,1))
1138!$OMP END MASTER
1139#endif
1140!
1141! 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...
1142CALL histsync(nid_hist)
1143
1144PRINT*, 'Fin de physiq.f90'
1145
1146      return
1147      end
1148
1149! sub-routine inutilisée :
1150
1151!SUBROUTINE gr_fi_ecrit(nfield,nlon,iim,jjmp1,fi,ecrit)
1152!     IMPLICIT none
1153
1154!  Tranformer une variable de la grille physique a
1155!  la grille d'ecriture
1156!      INTEGER nfield,nlon,iim,jjmp1, jjm
1157!      REAL fi(nlon,nfield), ecrit(iim*jjmp1,nfield)
1158!      INTEGER i, n, ig
1159!      jjm = jjmp1 - 1
1160!      DO n = 1, nfield
1161!        DO i=1,iim
1162!             ecrit(i,n) = fi(1,n)
1163!,            ecrit(i+jjm*iim,n) = fi(nlon,n)
1164!        ENDDO
1165!        DO ig = 1, nlon - 2
1166!             ecrit(iim+ig,n) = fi(1+ig,n)
1167!        ENDDO
1168!      ENDDO
1169!RETURN
1170!END
Note: See TracBrowser for help on using the repository browser.