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

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

Inclusion de la physique de MAR


Integration of MAR physics

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