Gaelle 5/6/18 : mv directory OASIS in MNH and SURFEX PACK-MNH-V5-4--0-19_OASIS2
authorGaelle DELAUTIER <gaelle.delautier@meteo.fr>
Tue, 5 Jun 2018 08:00:47 +0000 (10:00 +0200)
committerGaelle DELAUTIER <gaelle.delautier@meteo.fr>
Tue, 5 Jun 2018 08:00:47 +0000 (10:00 +0200)
37 files changed:
src/Makefile.MESONH.mk
src/SURFEX/coare30_flux.F90
src/SURFEX/coare30_seaflux.F90
src/SURFEX/coupling_seafluxn.F90
src/SURFEX/default_prep_seaflux.F90
src/SURFEX/default_seaflux.F90
src/SURFEX/diag_cpl_esm_sea.F90
src/SURFEX/diag_inline_seafluxn.F90
src/SURFEX/diag_seaflux_initn.F90
src/SURFEX/get_sfx_sea.F90
src/SURFEX/get_sfxcpln.F90
src/SURFEX/init_seafluxn.F90
src/SURFEX/modd_prep_seaflux.F90
src/SURFEX/modd_seafluxn.F90
src/SURFEX/modd_sfx_oasis.F90
src/SURFEX/mode_read_netcdf_mercator.F90
src/SURFEX/modn_prep_seaflux.F90
src/SURFEX/modn_seafluxn.F90
src/SURFEX/modn_sfx_oasis.F90
src/SURFEX/prep_hor_seaflux_field.F90
src/SURFEX/prep_seaflux.F90
src/SURFEX/prep_seaflux_netcdf.F90
src/SURFEX/prep_seaflux_unif.F90
src/SURFEX/put_sfx_sea.F90
src/SURFEX/put_sfxcpln.F90
src/SURFEX/read_lcover.F90
src/SURFEX/read_nam_prep_seafluxn.F90
src/SURFEX/read_namelists_seafluxn.F90
src/SURFEX/read_prep_seaflux_conf.F90
src/SURFEX/read_seafluxn.F90
src/SURFEX/sfx_oasis_define.F90
src/SURFEX/sfx_oasis_init.F90
src/SURFEX/sfx_oasis_read_nam.F90
src/SURFEX/sfx_oasis_recv.F90
src/SURFEX/sfx_oasis_send.F90
src/SURFEX/write_lcover.F90
src/SURFEX/writesurf_seafluxn.F90

index f9cb11b..405e511 100644 (file)
@@ -31,9 +31,6 @@ endif
 #           Source MNH                                   #
 ##########################################################
 ifdef VER_OASIS
-DIR_SURFEX    += OASIS/SURFEX
-DIR_MNH       += OASIS/MNH
-DIR_SURCOUCHE += OASIS/SURCOUCHE
 CPPFLAGS       += -DCPLOASIS
 endif
 # PRE_BUG TEST !!!
index f8f6724..ac88af8 100644 (file)
@@ -5,7 +5,7 @@
 !     #########
     SUBROUTINE COARE30_FLUX (S,PZ0SEA,PTA,PEXNA,PRHOA,PSST,PEXNS,PQA,  &
             PVMOD,PZREF,PUREF,PPS,PQSAT,PSFTH,PSFTQ,PUSTAR,PCD,PCDN,PCH,PCE,PRI,&
-            PRESA,PRAIN,PZ0HSEA)  
+            PRESA,PRAIN,PZ0HSEA,PHS,PTP)  
 !     #######################################################################
 !
 !
 !!      Original     1/06/2006
 !!      B. Decharme    06/2009 limitation of Ri
 !!      B. Decharme    09/2012 Bug in Ri calculation and limitation of Ri in surface_ri.F90
-!!      B. Decharme    06/2013 bug in z0 (output) computation 
-!!      J.Escobar      06/2013  for REAL4/8 add EPSILON management
+!!      B. Decharme    06/2013 bug in z0 (output) computation
+!!      M.N. Bouin     03/2014 possibility of wave parameters from external source
 !!      C. Lebeaupin   03/2014 bug if PTA=PSST and PEXNA=PEXNS: set a minimum value
-!!                             add abort if no convergence
+!!                            add abort if no convergence
+!!      C. Lebeaupin   06/2014 itermax=10 for low wind conditions (ZVMOD<=1)
+!!      J. Pianezze    11/2014 add coupling wave parameters 
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -67,6 +69,8 @@ USE MODD_CSTS,       ONLY : XKARMAN, XG, XSTEFAN, XRD, XRV, XPI, &
                             XP00
 USE MODD_SURF_ATM,   ONLY : XVZ0CM
 !
+USE MODD_SFX_OASIS,  ONLY : LCPL_WAVE
+!
 USE MODD_SURF_PAR,   ONLY : XUNDEF, XSURF_EPSILON
 USE MODD_WATER_PAR
 !
@@ -102,6 +106,8 @@ REAL, DIMENSION(:), INTENT(IN)       :: PSST  ! Sea Surface Temperature (K)
 REAL, DIMENSION(:), INTENT(IN)       :: PEXNS ! Exner function at sea surface
 REAL, DIMENSION(:), INTENT(IN)       :: PPS   ! air pressure at sea surface (Pa)
 REAL, DIMENSION(:), INTENT(IN)       :: PRAIN !precipitation rate (kg/s/m2)
+REAL, DIMENSION(:), INTENT(IN)       :: PHS   ! wave significant height
+REAL, DIMENSION(:), INTENT(IN)       :: PTP   ! wave peak period
 !
 REAL, DIMENSION(:), INTENT(INOUT)    :: PZ0SEA! roughness length over the ocean
 !                                                                                 
@@ -307,6 +313,12 @@ ZUSR(:) = ZDUWG(:)*XKARMAN/(LOG(PUREF(:)/ZO10(:))-PSIFCTU(PUREF(:)/ZL10(:)))
 ZTSR(:) = -ZDT(:)*XKARMAN/(LOG(PZREF(:)/ZOT10(:))-PSIFCTT(PZREF(:)/ZL10(:)))
 ZQSR(:) = -ZDQ(:)*XKARMAN/(LOG(PZREF(:)/ZOT10(:))-PSIFCTT(PZREF(:)/ZL10(:)))
 !
+IF (LCPL_WAVE .AND. .NOT. (ANY(S%XCHARN==0.0)) ) THEN
+  ZCHARN(:) = S%XCHARN(:)
+ELSE
+  ZCHARN(:) = 0.011
+END IF
+!
 ZZL(:) = 0.0
 !
 DO J=1,SIZE(PTA)
@@ -316,16 +328,30 @@ DO J=1,SIZE(PTA)
   ELSE
     ITERMAX(J) = 3 !number of iterations
   ENDIF
+  IF (ZVMOD(J)<=1.) THEN
+    ITERMAX(J) = 10
+  ENDIF
   !
-  !then modify Charnork for high wind speeds Chris Fairall's data
-  IF (ZDUWG(J)>10.) ZCHARN(J) = 0.011 + (0.018-0.011)*(ZDUWG(J)-10.)/(18.-10.)
-  IF (ZDUWG(J)>18.) ZCHARN(J) = 0.018
+  IF (.NOT.LCPL_WAVE) THEN
+    !then modify Charnork for high wind speeds Chris Fairall's data
+    IF (ZDUWG(J)>10.) ZCHARN(J) = 0.011 + (0.018-0.011)*(ZDUWG(J)-10.)/(18-10)
+    IF (ZDUWG(J)>18.) ZCHARN(J) = 0.018
+  END IF
   !
   !                3.  ITERATIVE LOOP TO COMPUTE USR, TSR, QSR 
   !                -------------------------------------------
   !
-  ZHWAVE(J) = 0.018*ZVMOD(J)*ZVMOD(J)*(1.+0.015*ZVMOD(J))
-  ZTWAVE(J) = 0.729*ZVMOD(J)
+  IF (S%LWAVEWIND .AND. .NOT. LCPL_WAVE) THEN
+    ZHWAVE(J) = 0.018*PVMOD(J)*PVMOD(J)*(1.+0.015*PVMOD(J))
+    ZTWAVE(J) = 0.729*PVMOD(J)
+  ELSE 
+    ZHWAVE(J) = PHS(J)
+    ZTWAVE(J) = PTP(J)
+    ! to avoid the nullity of HS and TP 
+    IF (ZHWAVE(J) .EQ. 0.0) ZHWAVE(J) = 0.018*PVMOD(J)*PVMOD(J)*(1.+0.015*PVMOD(J))
+    IF (ZTWAVE(J) .EQ. 0.0) ZTWAVE(J) = 0.729*PVMOD(J)
+  ENDIF 
+!
   ZCWAVE(J) = XG*ZTWAVE(J)/(2.*XPI)
   ZLWAVE(J) = ZTWAVE(J)*ZCWAVE(J)
   !
@@ -494,7 +520,7 @@ ENDDO
 !             
 !
 ZDIRCOSZW(:) = 1.
-CALL SURFACE_RI(PSST,PQSAT,PEXNS,PEXNA,ZTA,ZQASAT,&
+ CALL SURFACE_RI(PSST,PQSAT,PEXNS,PEXNA,ZTA,ZQASAT,&
                 PZREF,PUREF,ZDIRCOSZW,PVMOD,PRI   )  
 !
 !       5.2     Aerodynamical conductance and resistance
@@ -506,6 +532,8 @@ PRESA(:) = 1. / MAX(ZAC(:),XSURF_EPSILON)
 !
 PZ0SEA(:) =  ZCHARN(:) * ZUSTAR2(:) / XG + XVZ0CM * PCD(:) / PCDN(:)
 !
+PZ0SEA(:) = MAX(MIN(ZO(:),0.05),10E-6)
+!
 PZ0HSEA(:) = PZ0SEA(:)
 !
 IF (LHOOK) CALL DR_HOOK('COARE30_FLUX',1,ZHOOK_HANDLE)
index ef0768a..4dd0ea9 100644 (file)
@@ -7,7 +7,7 @@
                                 PTA,PEXNA,PRHOA,PSST,PEXNS,PQA,     & 
                                 PRAIN,PSNOW,PVMOD,PZREF,PUREF,PPS,  &
                                 PQSAT,PSFTH,PSFTQ,PUSTAR,           &
-                                PCD,PCDN,PCH,PCE,PRI,PRESA,PZ0HSEA  )
+                                PCD,PCDN,PCH,PCE,PRI,PRESA,PZ0HSEA )
 !     ##################################################################
 !
 !
@@ -38,7 +38,7 @@
 !!     
 !!    AUTHOR
 !!    ------
-!!     C. Lebeaupin  *Météo-France* 
+!!     C. Lebeaupin  *Météo-France* 
 !!
 !!    MODIFICATIONS
 !!    -------------
@@ -46,6 +46,7 @@
 !!      B. Decharme     04/2013 : Pack only input variables
 !!      S. Senesi       01/2014 : When handling sea ice cover, compute open sea flux, 
 !!                                and only where ice cover < 1.
+!!      M.N. Bouin     03/2014 possibility of wave parameters from external source
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -172,6 +173,8 @@ REAL, DIMENSION(SIZE(KMASK))      :: ZW_VMOD ! module of wind at atm. wind level
 REAL, DIMENSION(SIZE(KMASK))      :: ZW_ZREF ! atm. level for temp. and humidity (m)
 REAL, DIMENSION(SIZE(KMASK))      :: ZW_UREF ! atm. level for wind (m)
 REAL, DIMENSION(SIZE(KMASK))      :: ZW_SST  ! Sea Surface Temperature (K)
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_HS   ! wave significant height
+REAL, DIMENSION(SIZE(KMASK))      :: ZW_TP   ! wave peak period
 REAL, DIMENSION(SIZE(KMASK))      :: ZW_EXNS ! Exner function at sea surface
 REAL, DIMENSION(SIZE(KMASK))      :: ZW_PS   ! air pressure at sea surface (Pa)
 REAL, DIMENSION(SIZE(KMASK))      :: ZW_RAIN !precipitation rate (kg/s/m2)
@@ -207,6 +210,8 @@ DO JJ=1, SIZE(KMASK)
   ZW_ZREF(JJ) = PZREF(KMASK(JJ)) 
   ZW_UREF(JJ) = PUREF(KMASK(JJ))
   ZW_SST(JJ)  = PSST(KMASK(JJ))
+  ZW_TP(JJ)   = S%XTP(KMASK(JJ))
+  ZW_HS(JJ)   = S%XHS(KMASK(JJ))  
   ZW_EXNS(JJ) = PEXNS(KMASK(JJ)) 
   ZW_PS(JJ)   = PPS(KMASK(JJ))
   ZW_RAIN(JJ) = PRAIN(KMASK(JJ))
@@ -230,7 +235,7 @@ IF (YTYPE=='W') THEN
   !
   CALL COARE30_FLUX(S, ZW_Z0SEA,ZW_TA,ZW_EXNA,ZW_RHOA,ZW_SST,ZW_EXNS,&
         ZW_QA,ZW_VMOD,ZW_ZREF,ZW_UREF,ZW_PS,ZW_QSAT,ZW_SFTH,ZW_SFTQ,ZW_USTAR,&
-        ZW_CD,ZW_CDN,ZW_CH,ZW_CE,ZW_RI,ZW_RESA,ZW_RAIN,ZW_Z0HSEA)   
+        ZW_CD,ZW_CDN,ZW_CH,ZW_CE,ZW_RI,ZW_RESA,ZW_RAIN,ZW_Z0HSEA,ZW_HS,ZW_TP)   
   !
 ELSEIF ( (YTYPE=='I') .AND. (.NOT. S%LHANDLE_SIC)) THEN
   !
index b908374..5ea7b51 100644 (file)
@@ -47,6 +47,8 @@ SUBROUTINE COUPLING_SEAFLUX_n (CHS, DTS, DGS, O, OR, G, S, DST, SLT, &
 !!      Modified    01/2014 : S. Belamari Remove MODE_THERMOS and XLVTT
 !!      Modified    05/2014 : S. Belamari New ECUME : Include salinity & atm. pressure impact 
 !!      Modified    01/2015 : R. Séférian interactive ocaen surface albedo
+!!      Modified    03/2014 : M.N. Bouin possibility of wave parameters from external source
+!!      Modified    11/2014 : J. Pianezze : add currents for wave coupling
 !!                                       
 !!---------------------------------------------------------------------
 !
@@ -66,7 +68,7 @@ USE MODD_REPROD_OPER, ONLY : CIMPLICIT_WIND
 !
 USE MODD_CSTS,       ONLY : XRD, XCPD, XP00, XTT, XTTS, XTTSI, XDAY
 USE MODD_SURF_PAR,   ONLY : XUNDEF
-USE MODD_SFX_OASIS,  ONLY : LCPL_SEA, LCPL_SEAICE
+USE MODD_SFX_OASIS,  ONLY : LCPL_WAVE, LCPL_SEA, LCPL_SEAICE
 USE MODD_WATER_PAR,  ONLY : XEMISWAT, XEMISWATICE
 !
 USE MODD_WATER_PAR, ONLY : XALBSEAICE
@@ -299,7 +301,7 @@ ZSCA_ALB (:,:) = XUNDEF
 ZEXNS(:)     = (PPS(:)/XP00)**(XRD/XCPD)
 ZEXNA(:)     = (PPA(:)/XP00)**(XRD/XCPD)
 !
-IF(LCPL_SEA)THEN 
+IF(LCPL_SEA .OR. LCPL_WAVE)THEN 
   !Sea currents are taken into account
   ZU(:)=PU(:)-S%XUMER(:)
   ZV(:)=PV(:)-S%XVMER(:)
@@ -690,27 +692,38 @@ REAL, DIMENSION(KI), INTENT(OUT) :: PSFV      ! meridian momentum flux
 REAL, DIMENSION(KI) :: ZUSTAR2    ! square of friction velocity (m2/s2)
 REAL, DIMENSION(KI) :: ZWORK      ! Work array
 !
+REAL, DIMENSION(KI) :: ZPEW_A_COEF
+REAL, DIMENSION(KI) :: ZPEW_B_COEF
+!
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N: SEA_MOMENTUM_FLUXES',0,ZHOOK_HANDLE)
 !
+IF( (LCPL_SEA .OR. LCPL_WAVE) .AND. HCOUPLING .EQ. 'E')THEN
+  ZPEW_A_COEF(:)=0.0
+  ZPEW_B_COEF(:)=ZWIND(:)
+ELSE
+  ZPEW_A_COEF(:)=PPEW_A_COEF(:)
+  ZPEW_B_COEF(:)=PPEW_B_COEF(:)
+ENDIF
+!
 ZWORK  (:) = XUNDEF
 ZUSTAR2(:) = XUNDEF
 !
 IF(CIMPLICIT_WIND=='OLD')THEN
 ! old implicitation (m2/s2)
-  ZUSTAR2(:) = (PCD(:)*ZWIND(:)*PPEW_B_COEF(:)) /            &
-              (1.0-PRHOA(:)*PCD(:)*ZWIND(:)*PPEW_A_COEF(:))
+  ZUSTAR2(:) = (PCD(:)*ZWIND(:)*ZPEW_B_COEF(:)) /            &
+              (1.0-PRHOA(:)*PCD(:)*ZWIND(:)*ZPEW_A_COEF(:))
 ELSE
 ! new implicitation (m2/s2)
-  ZUSTAR2(:) = (PCD(:)*ZWIND(:)*(2.*PPEW_B_COEF(:)-ZWIND(:))) /&
-              (1.0-2.0*PRHOA(:)*PCD(:)*ZWIND(:)*PPEW_A_COEF(:))
+  ZUSTAR2(:) = (PCD(:)*ZWIND(:)*(2.*ZPEW_B_COEF(:)-ZWIND(:))) /&
+              (1.0-2.0*PRHOA(:)*PCD(:)*ZWIND(:)*ZPEW_A_COEF(:))
 !                   
-  ZWORK(:)  = PRHOA(:)*PPEW_A_COEF(:)*ZUSTAR2(:) + PPEW_B_COEF(:)
+  ZWORK(:)  = PRHOA(:)*PPEW_A_COEF(:)*ZUSTAR2(:) + ZPEW_B_COEF(:)
   ZWORK(:) = MAX(ZWORK(:),0.)
 !
-  WHERE(PPEW_A_COEF(:)/= 0.)
-        ZUSTAR2(:) = MAX( ( ZWORK(:) - PPEW_B_COEF(:) ) / (PRHOA(:)*PPEW_A_COEF(:)), 0.)
+  WHERE(ZPEW_A_COEF(:)/= 0.)
+        ZUSTAR2(:) = MAX( ( ZWORK(:) - PPEW_B_COEF(:) ) / (PRHOA(:)*ZPEW_A_COEF(:)), 0.)
   ENDWHERE
 !              
 ENDIF
index d8819df..8d89860 100644 (file)
 !!      07/2012     P. Le Moigne          ! CMO1D phasing
 !!      01/2014     S. Senesi             ! introduce fractional seaice and sea-ice model 
 !!      03/2014     S. Belamari           ! initialize sea surface salinity
+!!      03/2014     M.N. Bouin            ! possibility of wave parameters 
+!!                                        ! from external source
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
 USE MODD_PREP_SEAFLUX,   ONLY : CFILE_SEAFLX, CTYPE_SEAFLX, CFILEPGD_SEAFLX, CTYPEPGD, XSST_UNIF,&
-                                XSSS_UNIF, XSIC_UNIF
+                                XSSS_UNIF, XSIC_UNIF, CFILEWAVE_SEAFLX, CTYPEWAVE
 !
 USE MODN_PREP_SEAFLUX,   ONLY : LSEA_SBL, CSEAICE_SCHEME, LOCEAN_MERCATOR, LOCEAN_CURRENT, &
                                 XTIME_REL, LCUR_REL, LTS_REL,    &
@@ -74,6 +76,9 @@ IF (LHOOK) CALL DR_HOOK('DEFAULT_PREP_SEAFLUX',0,ZHOOK_HANDLE)
 CFILE_SEAFLX = '                          '
 CTYPE_SEAFLX = 'GRIB  '
 !
+CFILEWAVE_SEAFLX = '                          '
+CTYPEWAVE       = '      '
+!
 CFILEPGD_SEAFLX = '                          '
 CTYPEPGD        = '      '
 !
index bfa89dc..1141c6a 100644 (file)
@@ -6,7 +6,8 @@
       SUBROUTINE DEFAULT_SEAFLUX(PTSTEP,POUT_TSTEP,HSEA_ALB,HSEA_FLUX,   &
                                    OPWG, OPRECIP, OPWEBB, KZ0, KGRVWAVES,&
                                    OPROGSST, KTIME_COUPLING,POCEAN_TSTEP,&
-                                   PICHCE, HINTERPOL_SST, HINTERPOL_SSS  )  
+                                   PICHCE, HINTERPOL_SST, HINTERPOL_SSS, &
+                                   OWAVEWIND     )
 !     ########################################################################
 !
 !!****  *DEFAULT_SEAFLUX* - routine to set default values for the configuration for SEAFLUX scheme
@@ -37,7 +38,8 @@
 !!      Original    01/2004 
 !!      Modified    01/2006 : sea flux parameterization.
 !!      S. Belamari 03/2014 : add KZ0 (to choose PZ0SEA formulation)
-!!!
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -70,6 +72,7 @@ REAL,              INTENT(OUT) :: PICHCE        !CE coef calculation for ECUME
 REAL,              INTENT(OUT) :: POCEAN_TSTEP  !ocean 1D model time-step
 CHARACTER(LEN=6),  INTENT(OUT) :: HINTERPOL_SST ! Quadratic interpolation of monthly SST
 CHARACTER(LEN=6),  INTENT(OUT) :: HINTERPOL_SSS ! Quadratic interpolation of monthly SSS
+LOGICAL,           INTENT(OUT) :: OWAVEWIND     ! wave parameters from wind only
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 !*       0.2   Declarations of local variables
@@ -88,6 +91,7 @@ HSEA_ALB  = "TA96"
 OPWG    = .FALSE.
 OPRECIP = .FALSE. 
 OPWEBB  = .FALSE.
+OWAVEWIND = .TRUE.
 !
 KZ0 = 0
 KGRVWAVES = 0
index cdb0dbe..835d46a 100644 (file)
@@ -4,7 +4,7 @@
 !SFX_LIC for details. version 1.
 !     #########
        SUBROUTINE DIAG_CPL_ESM_SEA (S, D, DI, PTSTEP, PSFTQ, PRAIN, PSNOW, &
-                                    PLW, PSFTH_ICE, PSFTQ_ICE, PDIR_SW, PSCA_SW, OSIC)  
+                                    PLW, PPS, PSFTH_ICE, PSFTQ_ICE, PDIR_SW, PSCA_SW, OSIC)  
 !     ###################################################################
 !
 !!****  *DIAG_CPL_ESM_SEA * - Computes diagnostics over sea for 
@@ -30,6 +30,7 @@
 !!      S.Senesi    01/2014  Adapt to embedded seaice scheme (SWU and LWU 
 !!                           for seaice are provided as inputs)
 !!      A.Voldoire  04/2015  Add LCPL_SEAICE test
+!!      Modified    11/2014 : J. Pianezze : Add surface pressure coupling parameter
 !!------------------------------------------------------------------
 !
 USE MODD_DIAG_n, ONLY : DIAG_t
@@ -57,6 +58,7 @@ REAL, DIMENSION(:), INTENT(IN) :: PSFTQ     ! water flux
 REAL, DIMENSION(:), INTENT(IN) :: PRAIN     ! Rainfall
 REAL, DIMENSION(:), INTENT(IN) :: PSNOW     ! Snowfall
 REAL, DIMENSION(:), INTENT(IN) :: PLW       ! longwave radiation (on horizontal surf.)
+REAL, DIMENSION(:), INTENT(IN) :: PPS       ! Surface pressure
 REAL, DIMENSION(:), INTENT(IN) :: PSFTH_ICE ! heat flux  (W/m2)
 REAL, DIMENSION(:), INTENT(IN) :: PSFTQ_ICE ! water flux (kg/m2/s)
 REAL, DIMENSION(:,:),INTENT(IN):: PDIR_SW   ! direct  solar radiation (on horizontal surf.)
@@ -107,6 +109,14 @@ S%XCPL_SEA_EVAP(:) = S%XCPL_SEA_EVAP(:) + PTSTEP * PSFTQ(:)
 S%XCPL_SEA_RAIN(:) = S%XCPL_SEA_RAIN(:) + PTSTEP * PRAIN(:)
 S%XCPL_SEA_SNOW(:) = S%XCPL_SEA_SNOW(:) + PTSTEP * PSNOW(:)
 !
+!* Evaporation - Precip (kg/m2)
+! 
+S%XCPL_SEA_EVPR(:) = S%XCPL_SEA_EVPR(:) + S%XCPL_SEA_EVAP(:) - S%XCPL_SEA_RAIN(:) - S%XCPL_SEA_SNOW(:)
+!
+!* Cumulated surface pressure (Pa.s)
+! 
+S%XCPL_SEA_PRES(:) = S%XCPL_SEA_PRES(:) + PTSTEP * PPS(:)
+!
 !-------------------------------------------------------------------------------------
 ! Ice flux
 !-------------------------------------------------------------------------------------
index 9d26327..30b0c96 100644 (file)
@@ -40,6 +40,7 @@ SUBROUTINE DIAG_INLINE_SEAFLUX_n (DGO, D, DC, DI, DIC, DGMSI, S,              &
 !!                          more argument (height of diagnostic)
 !!      B. Decharme 04/2013 : Add EVAP and SUBL diag
 !!      S. Senesi   01/2014 ! introduce fractional seaice and sea-ice model 
+!!      J. Pianezze 08/2016 : Add surface pressure coupling parameter
 !!------------------------------------------------------------------
 !
 USE MODD_DIAG_n, ONLY : DIAG_t, DIAG_OPTIONS_t
@@ -298,7 +299,7 @@ GSIC=(S%LHANDLE_SIC.AND.(S%CSEAICE_SCHEME /= 'NONE  '))
 IF (LCPL_SEA.OR.GSIC) THEN
 !
   CALL DIAG_CPL_ESM_SEA(S, D, DI, PTSTEP, PSFTQ, PRAIN, PSNOW, &
-                        PLW, PSFTH_ICE, PSFTQ_ICE, PDIR_SW, PSCA_SW, GSIC )
+                        PLW, PPS, PSFTH_ICE, PSFTQ_ICE, PDIR_SW, PSCA_SW, GSIC )
 ! 
 ENDIF
 IF (LHOOK) CALL DR_HOOK('DIAG_INLINE_SEAFLUX_N',1,ZHOOK_HANDLE)
index 65cadc1..daa9db0 100644 (file)
@@ -37,6 +37,7 @@
 !!      Modified    08/2009 : cumulative sea flux 
 !!      B. decharme 04/2013 : Add EVAP and SUBL diag
 !!      S.Senesi    01/2014 : introduce fractional seaice 
+!!      Modified    11/2014 : J. Pianezze : Add surface pressure coupling parameter
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -202,7 +203,9 @@ IF(LCPL_SEA.OR.S%LHANDLE_SIC)THEN
   ALLOCATE(S%XCPL_SEA_EVAP(KLU))
   ALLOCATE(S%XCPL_SEA_RAIN(KLU))
   ALLOCATE(S%XCPL_SEA_SNOW(KLU))
+  ALLOCATE(S%XCPL_SEA_EVPR(KLU))
   ALLOCATE(S%XCPL_SEA_FWSM(KLU))
+  ALLOCATE(S%XCPL_SEA_PRES(KLU))  
   S%XCPL_SEA_WIND(:) = 0.0
   S%XCPL_SEA_FWSU(:) = 0.0
   S%XCPL_SEA_FWSV(:) = 0.0
@@ -210,8 +213,10 @@ IF(LCPL_SEA.OR.S%LHANDLE_SIC)THEN
   S%XCPL_SEA_HEAT(:) = 0.0
   S%XCPL_SEA_EVAP(:) = 0.0
   S%XCPL_SEA_RAIN(:) = 0.0
+  S%XCPL_SEA_EVPR(:) = 0.0  
   S%XCPL_SEA_SNOW(:) = 0.0
   S%XCPL_SEA_FWSM(:) = 0.0
+  S%XCPL_SEA_PRES(:) = 0.0  
 !
 ELSE
   ALLOCATE(S%XCPL_SEA_WIND(0))
@@ -222,7 +227,9 @@ ELSE
   ALLOCATE(S%XCPL_SEA_EVAP(0))
   ALLOCATE(S%XCPL_SEA_RAIN(0))
   ALLOCATE(S%XCPL_SEA_SNOW(0))
+  ALLOCATE(S%XCPL_SEA_EVPR(0))  
   ALLOCATE(S%XCPL_SEA_FWSM(0))
+  ALLOCATE(S%XCPL_SEA_PRES(0))  
 ENDIF
 !
 IF (LHOOK) CALL DR_HOOK('DIAG_SEAFLUX_INIT_N',1,ZHOOK_HANDLE)
index 7f7b63d..4778ff7 100644 (file)
@@ -4,10 +4,10 @@
 !SFX_LIC for details. version 1.
 !     #########
       SUBROUTINE GET_SFX_SEA (S, U, W, &
-                              OCPL_SEAICE,OWATER,                       &
+                              OCPL_SEAICE,OWATER,                      &
                               PSEA_FWSU,PSEA_FWSV,PSEA_HEAT,PSEA_SNET, &
                               PSEA_WIND,PSEA_FWSM,PSEA_EVAP,PSEA_RAIN, &
-                              PSEA_SNOW,PSEA_WATF,                     &
+                              PSEA_SNOW,PSEA_EVPR,PSEA_WATF,PSEA_PRES, &
                               PSEAICE_HEAT,PSEAICE_SNET,PSEAICE_EVAP   )  
 !     ############################################################################
 !
@@ -37,6 +37,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    10/2013
+!!      Modified    11/2014 : J. Pianezze - Add surface pressure coupling parameter
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -79,7 +80,9 @@ REAL, DIMENSION(:), INTENT(OUT) :: PSEA_FWSM  ! Cumulated wind stress
 REAL, DIMENSION(:), INTENT(OUT) :: PSEA_EVAP  ! Cumulated Evaporation             (kg/m2)
 REAL, DIMENSION(:), INTENT(OUT) :: PSEA_RAIN  ! Cumulated Rainfall rate           (kg/m2)
 REAL, DIMENSION(:), INTENT(OUT) :: PSEA_SNOW  ! Cumulated Snowfall rate           (kg/m2)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_EVPR  ! Cumulated Evap-Precip             (kg/m2)
 REAL, DIMENSION(:), INTENT(OUT) :: PSEA_WATF  ! Cumulated Net water flux (kg/m2)
+REAL, DIMENSION(:), INTENT(OUT) :: PSEA_PRES  ! Cumulated Surface pressure        (Pa.s)
 !
 REAL, DIMENSION(:), INTENT(OUT) :: PSEAICE_HEAT ! Cumulated Sea-ice non solar net heat flux (J/m2)
 REAL, DIMENSION(:), INTENT(OUT) :: PSEAICE_SNET ! Cumulated Sea-ice solar net heat flux     (J/m2)
@@ -153,7 +156,9 @@ IF(U%NSIZE_SEA>0)THEN
   CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_EVAP(:),PSEA_EVAP(:),XUNDEF)
   CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_RAIN(:),PSEA_RAIN(:),XUNDEF)
   CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_SNOW(:),PSEA_SNOW(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_EVPR(:),PSEA_EVPR(:),XUNDEF)
   CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_FWSM(:),PSEA_FWSM(:),XUNDEF)
+  CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEA_PRES(:),PSEA_PRES(:),XUNDEF)
   S%XCPL_SEA_WIND(:) = 0.0
   S%XCPL_SEA_EVAP(:) = 0.0
   S%XCPL_SEA_HEAT(:) = 0.0
@@ -162,7 +167,9 @@ IF(U%NSIZE_SEA>0)THEN
   S%XCPL_SEA_FWSV(:) = 0.0
   S%XCPL_SEA_RAIN(:) = 0.0
   S%XCPL_SEA_SNOW(:) = 0.0
+  S%XCPL_SEA_EVPR(:) = 0.0
   S%XCPL_SEA_FWSM(:) = 0.0
+  S%XCPL_SEA_PRES(:) = 0.0
 !
   IF (OCPL_SEAICE) THEN
     CALL UNPACK_SAME_RANK(U%NR_SEA(:),S%XCPL_SEAICE_SNET(:),PSEAICE_SNET(:),XUNDEF)
index 23747c2..32a566d 100644 (file)
@@ -5,8 +5,8 @@
 !     #########
       SUBROUTINE GET_SFXCPL_n (IM, S, U, W, &
                                HPROGRAM,KI,PRUI,PWIND,PFWSU,PFWSV,PSNET, &
-                                PHEAT,PEVAP,PRAIN,PSNOW,PICEFLUX,PFWSM,   &
-                                PHEAT_ICE,PEVAP_ICE,PSNET_ICE)  
+                                PHEAT,PEVAP,PRAIN,PSNOW,PEVPR,PICEFLUX,  &
+                                PFWSM,PPS,PHEAT_ICE,PEVAP_ICE,PSNET_ICE)  
 !     ###################################################################
 !
 !!****  *GETSFXCPL_n* - routine to get some variables from surfex into
@@ -42,6 +42,7 @@
 !!    -------------
 !!      Original    08/2009
 !!    10/2016 B. Decharme : bug surface/groundwater coupling 
+!!      Modified    11/2014 : J. Pianezze - Add surface pressure coupling parameter
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -95,8 +96,10 @@ REAL, DIMENSION(KI), INTENT(OUT) :: PHEAT
 REAL, DIMENSION(KI), INTENT(OUT) :: PEVAP
 REAL, DIMENSION(KI), INTENT(OUT) :: PRAIN
 REAL, DIMENSION(KI), INTENT(OUT) :: PSNOW
+REAL, DIMENSION(KI), INTENT(OUT) :: PEVPR
 REAL, DIMENSION(KI), INTENT(OUT) :: PICEFLUX
 REAL, DIMENSION(KI), INTENT(OUT) :: PFWSM
+REAL, DIMENSION(KI), INTENT(OUT) :: PPS
 REAL, DIMENSION(KI), INTENT(OUT) :: PHEAT_ICE
 REAL, DIMENSION(KI), INTENT(OUT) :: PEVAP_ICE
 REAL, DIMENSION(KI), INTENT(OUT) :: PSNET_ICE
@@ -118,7 +121,9 @@ REAL, DIMENSION(KI)   :: ZSEA_FWSM  ! Cumulated wind stress             (Pa.s)
 REAL, DIMENSION(KI)   :: ZSEA_EVAP  ! Cumulated Evaporation             (kg/m2)
 REAL, DIMENSION(KI)   :: ZSEA_RAIN  ! Cumulated Rainfall rate           (kg/m2)
 REAL, DIMENSION(KI)   :: ZSEA_SNOW  ! Cumulated Snowfall rate           (kg/m2)
+REAL, DIMENSION(KI)   :: ZSEA_EVPR  ! Cumulated Evap-Precp. rate        (kg/m2)
 REAL, DIMENSION(KI)   :: ZSEA_WATF  ! Cumulated freshwater flux         (kg/m2)
+REAL, DIMENSION(KI)   :: ZSEA_PRES  ! Cumulated Surface pressure        (Pa.s)
 !
 REAL, DIMENSION(KI)   :: ZSEAICE_HEAT ! Cumulated Sea-ice non solar net heat flux (J/m2)
 REAL, DIMENSION(KI)   :: ZSEAICE_SNET ! Cumulated Sea-ice solar net heat flux     (J/m2)
@@ -184,6 +189,7 @@ IF(LCPL_SEA)THEN
   ZSEA_RAIN (:) = XUNDEF
   ZSEA_SNOW (:) = XUNDEF
   ZSEA_WATF (:) = XUNDEF
+  ZSEA_PRES (:) = XUNDEF
 !
   ZSEAICE_HEAT (:) = XUNDEF
   ZSEAICE_SNET (:) = XUNDEF
@@ -195,7 +201,7 @@ IF(LCPL_SEA)THEN
                    LCPL_SEAICE,LWATER,                      &
                    ZSEA_FWSU,ZSEA_FWSV,ZSEA_HEAT,ZSEA_SNET, &
                    ZSEA_WIND,ZSEA_FWSM,ZSEA_EVAP,ZSEA_RAIN, &
-                   ZSEA_SNOW,ZSEA_WATF,                     &
+                   ZSEA_SNOW,ZSEA_EVPR,ZSEA_WATF,ZSEA_PRES, &
                    ZSEAICE_HEAT,ZSEAICE_SNET,ZSEAICE_EVAP   )
 !
 ! * Assign sea output fields
index e951f0d..e718fd1 100644 (file)
@@ -45,6 +45,9 @@
 !!      S. Senesi   01/2014 : introduce sea-ice model 
 !!      S. Belamari 03/2014 : add NZ0 (to choose PZ0SEA formulation)
 !!      R. Séférian 01/2015 : introduce interactive ocean surface albedo
+!!      M.N. Bouin  03/2014 : possibility of wave parameters
+!!                          ! from external source
+!!      J. Pianezze 11/2014 : add wave coupling flag for wave parameters
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -57,7 +60,7 @@ USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t
 USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
 USE MODD_GRID_CONF_PROJ_n, ONLY : GRID_CONF_PROJ_t
 !
-USE MODD_SFX_OASIS,      ONLY : LCPL_SEA, LCPL_SEAICE
+USE MODD_SFX_OASIS,      ONLY : LCPL_WAVE, LCPL_SEA, LCPL_SEAICE
 !
 USE MODD_READ_NAMELIST,  ONLY : LNAM_READ
 USE MODD_CSTS,           ONLY : XTTS
@@ -185,7 +188,7 @@ IF (LNAM_READ) THEN
  CALL DEFAULT_SEAFLUX(SM%S%XTSTEP,SM%S%XOUT_TSTEP,SM%S%CSEA_ALB,SM%S%CSEA_FLUX,SM%S%LPWG,  &
                       SM%S%LPRECIP,SM%S%LPWEBB,SM%S%NZ0,SM%S%NGRVWAVES,SM%O%LPROGSST,      &
                       SM%O%NTIME_COUPLING,SM%O%XOCEAN_TSTEP,SM%S%XICHCE,SM%S%CINTERPOL_SST,&
-                      SM%S%CINTERPOL_SSS                            )
+                      SM%S%CINTERPOL_SSS,SM%S%LWAVEWIND                            )
  CALL DEFAULT_SEAICE(HPROGRAM,                                                  &
                      SM%S%CINTERPOL_SIC,SM%S%CINTERPOL_SIT, SM%S%XFREEZING_SST, &
                      SM%S%XSEAICE_TSTEP, SM%S%XSIC_EFOLDING_TIME,               &
@@ -344,13 +347,13 @@ ENDWHERE
 !               (Sea current and Sea-ice temperature)
 !               -----------------------------------------------------------------
 !
-IF(LCPL_SEA.OR.SM%S%LHANDLE_SIC)THEN       
+IF(LCPL_SEA.OR.SM%S%LHANDLE_SIC.OR.LCPL_WAVE)THEN       
 ! 
   ALLOCATE(SM%S%XUMER   (ILU))
   ALLOCATE(SM%S%XVMER   (ILU))
 !
-  SM%S%XUMER   (:)=XUNDEF
-  SM%S%XVMER   (:)=XUNDEF
+  SM%S%XUMER   (:)=0.
+  SM%S%XVMER   (:)=0.
 !
 ELSE
 ! 
@@ -359,6 +362,13 @@ ELSE
 !
 ENDIF
 !
+IF(LCPL_WAVE) THEN
+  ALLOCATE(SM%S%XCHARN  (ILU))
+  SM%S%XCHARN  (:)=0.011
+ELSE
+  ALLOCATE(SM%S%XCHARN   (0))
+ENDIF
+!
 IF(LCPL_SEAICE.OR.SM%S%LHANDLE_SIC)THEN       
   ALLOCATE(SM%S%XTICE   (ILU))
   ALLOCATE(SM%S%XICE_ALB(ILU))
index 3f42fc8..9b034ae 100644 (file)
@@ -28,6 +28,8 @@
 !!    -------------
 !!      Original       10/03
 !!      Modified     09/2013 : S. Senesi : introduce variables for sea-ice model
+!!      Modified     03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                         ! from external source
 !
 !*       0.   DECLARATIONS
 !             ------------
@@ -37,10 +39,12 @@ IMPLICIT NONE
 SAVE
 !--------------------------------------------------------------------------
 !
- CHARACTER(LEN=28) :: CFILE_SEAFLX   ! input file name
- CHARACTER(LEN=6)  :: CTYPE_SEAFLX   ! input file type
- CHARACTER(LEN=28) :: CFILEPGD_SEAFLX   ! input file name
- CHARACTER(LEN=6)  :: CTYPEPGD          ! input file type
+CHARACTER(LEN=28) :: CFILE_SEAFLX   ! input file name
+CHARACTER(LEN=6)  :: CTYPE_SEAFLX   ! input file type
+CHARACTER(LEN=28) :: CFILEWAVE_SEAFLX   ! input file name wave parameters
+CHARACTER(LEN=6)  :: CTYPEWAVE      ! file type for wave parameters
+CHARACTER(LEN=28) :: CFILEPGD_SEAFLX   ! input file name
+CHARACTER(LEN=6)  :: CTYPEPGD          ! input file type
 !
 REAL              :: XSST_UNIF   !  uniform prescribed SST
 REAL              :: XSSS_UNIF   !  uniform prescribed SSS
index 14b77ef..360b12c 100644 (file)
@@ -29,6 +29,9 @@
 !!      Original      01/2004
 !!      S. Senesi     01/2014  adapt to fractional seaice, and to seaice scheme
 !!      S. Belamari   03/2014  Include NZ0
+!!      Modified      03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!!      Modified      11/2014 : J. Pianezze ! add surface pressure, evap-rain and charnock coefficient
 !
 !*       0.   DECLARATIONS
 !             ------------
@@ -84,6 +87,7 @@ TYPE SEAFLUX_t
                                                    ! 0= ARPEGE / 1= Smith (1988) / 2= Direct
   INTEGER                           :: NGRVWAVES   ! set to 0,1 or 2 according to the 
                                                    ! gravity waves model used in coare30_flux
+  LOGICAL                           :: LWAVEWIND    ! wave parameters computed from wind only
   REAL                              :: XICHCE      ! CE coef calculation for ECUME
   LOGICAL                           :: LPERTFLUX   ! flag for stochastic flux perturbation
 !
@@ -91,6 +95,8 @@ TYPE SEAFLUX_t
 !
   REAL, POINTER, DIMENSION(:) :: XSST    ! sea surface temperature
   REAL, POINTER, DIMENSION(:) :: XSSS    ! sea surface salinity
+  REAL, POINTER, DIMENSION(:) :: XHS     ! significant wave height
+  REAL, POINTER, DIMENSION(:) :: XTP     ! wave peak period
   REAL, POINTER, DIMENSION(:) :: XTICE   ! sea ice temperature
   REAL, POINTER, DIMENSION(:) :: XSIC    ! sea ice concentration ( constraint for seaice scheme )
   REAL, POINTER, DIMENSION(:) :: XSST_INI! initial sea surface temperature
@@ -110,6 +116,8 @@ TYPE SEAFLUX_t
   REAL, POINTER, DIMENSION(:)   :: XFSIC   ! nudging (or forcing) sea ice cover
   REAL, POINTER, DIMENSION(:)   :: XFSIT   ! nudging sea ice thickness
 !
+  REAL, POINTER, DIMENSION(:) :: XCHARN  ! Charnock coefficient (for ESM coupling)
+!
   REAL, POINTER, DIMENSION(:) :: XCPL_SEA_WIND ! 10m wind speed for ESM coupling
   REAL, POINTER, DIMENSION(:) :: XCPL_SEA_FWSU ! zonal wind stress for ESM coupling
   REAL, POINTER, DIMENSION(:) :: XCPL_SEA_FWSV ! meridian wind stress for ESM coupling
@@ -117,8 +125,10 @@ TYPE SEAFLUX_t
   REAL, POINTER, DIMENSION(:) :: XCPL_SEA_HEAT ! Non solar net heat flux
   REAL, POINTER, DIMENSION(:) :: XCPL_SEA_EVAP ! Evaporation for ESM coupling
   REAL, POINTER, DIMENSION(:) :: XCPL_SEA_RAIN ! Rainfall for ESM coupling
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_EVPR ! Evaporatrion - Rainfall for ESM coupling
   REAL, POINTER, DIMENSION(:) :: XCPL_SEA_SNOW ! Snowfall for ESM coupling
   REAL, POINTER, DIMENSION(:) :: XCPL_SEA_FWSM ! wind stress for ESM coupling
+  REAL, POINTER, DIMENSION(:) :: XCPL_SEA_PRES ! Surface pressure for ESM coupling
 !  
   REAL, POINTER, DIMENSION(:) :: XCPL_SEAICE_SNET ! Solar net heat flux for ESM coupling
   REAL, POINTER, DIMENSION(:) :: XCPL_SEAICE_HEAT ! Non solar net heat flux
@@ -168,6 +178,8 @@ IF (LHOOK) CALL DR_HOOK("MODD_SEAFLUX_N:SEAFLUX_INIT",0,ZHOOK_HANDLE)
   NULLIFY(YSEAFLUX%XSST)
   NULLIFY(YSEAFLUX%XSSS)
   NULLIFY(YSEAFLUX%XSIC)
+  NULLIFY(YSEAFLUX%XHS)
+  NULLIFY(YSEAFLUX%XTP)
   NULLIFY(YSEAFLUX%XTICE)
   NULLIFY(YSEAFLUX%XSST_INI)
   NULLIFY(YSEAFLUX%XZ0)
@@ -191,8 +203,10 @@ IF (LHOOK) CALL DR_HOOK("MODD_SEAFLUX_N:SEAFLUX_INIT",0,ZHOOK_HANDLE)
   NULLIFY(YSEAFLUX%XCPL_SEA_HEAT)
   NULLIFY(YSEAFLUX%XCPL_SEA_EVAP)
   NULLIFY(YSEAFLUX%XCPL_SEA_RAIN)
+  NULLIFY(YSEAFLUX%XCPL_SEA_EVPR)
   NULLIFY(YSEAFLUX%XCPL_SEA_SNOW)
   NULLIFY(YSEAFLUX%XCPL_SEA_FWSM)
+  NULLIFY(YSEAFLUX%XCPL_SEA_PRES)
   NULLIFY(YSEAFLUX%XCPL_SEAICE_SNET)
   NULLIFY(YSEAFLUX%XCPL_SEAICE_HEAT)
   NULLIFY(YSEAFLUX%XCPL_SEAICE_EVAP)
@@ -221,6 +235,7 @@ YSEAFLUX%LPRECIP=.FALSE.
 YSEAFLUX%LPWEBB=.FALSE.
 YSEAFLUX%NZ0=0
 YSEAFLUX%NGRVWAVES=0
+YSEAFLUX%LWAVEWIND=.TRUE.
 YSEAFLUX%XICHCE=0.
 YSEAFLUX%LPERTFLUX=.FALSE.
 YSEAFLUX%JSX=0
index 89807f8..3d8bc24 100644 (file)
@@ -26,8 +26,9 @@ MODULE MODD_SFX_OASIS
 !!    MODIFICATIONS
 !!    -------------
 !!      Original       10/13
+!!      Modified       11/2014 : J. Pianezze - add wave coupling and creation of OASIS grids
 !!      S.Senesi       08/2015 : add CMODEL_NAME
-!!    10/2016 B. Decharme : bug surface/groundwater coupling 
+!!    10/2016 B. Decharme : bug surface/groundwater coupling
 !
 !*       0.   DECLARATIONS
 !             ------------
@@ -42,6 +43,8 @@ IMPLICIT NONE
 !
 LOGICAL             :: LOASIS   = .FALSE. ! To use oasis coupler or not
 !
+LOGICAL             :: LOASIS_GRID = .FALSE. ! To define oasis grids, areas and masks during simulation
+!
 CHARACTER(LEN=6)    :: CMODEL_NAME        ! component model name (i.e. name under which 
 !                                         ! Surfex is declared to Oasis)
 !
@@ -107,7 +110,9 @@ INTEGER             :: NSEA_FWSM_ID ! wind stress id
 INTEGER             :: NSEA_EVAP_ID ! Evaporation id
 INTEGER             :: NSEA_RAIN_ID ! Rainfall id
 INTEGER             :: NSEA_SNOW_ID ! Snowfall id
+INTEGER             :: NSEA_EVPR_ID ! Evap.-Precip. id
 INTEGER             :: NSEA_WATF_ID ! Freshwater id
+INTEGER             :: NSEA_PRES_ID ! Surface pressure id
 !
 ! Sea-ice Output variables
 !
@@ -129,4 +134,25 @@ INTEGER             :: NSEAICE_ALB_ID  ! Sea-ice albedo id
 !
 !-------------------------------------------------------------------------------
 !
+! * Wave variables for Surfex - Oasis coupling 
+!
+!-------------------------------------------------------------------------------
+!
+LOGICAL             :: LCPL_WAVE    = .FALSE. ! Fields to/from surfex wave area
+!
+! Wave Output variables
+!
+INTEGER             :: NWAVE_U10_ID ! 10m u-wind speed id
+INTEGER             :: NWAVE_V10_ID ! 10m v-wind speed id
+!
+! Wave Input variables
+!
+INTEGER             :: NWAVE_CHA_ID ! Charnock coefficient id
+INTEGER             :: NWAVE_UCU_ID ! Wave u-current velocity id
+INTEGER             :: NWAVE_VCU_ID ! Wave v-current velocity id
+INTEGER             :: NWAVE_HS_ID  ! Significant wave height id
+INTEGER             :: NWAVE_TP_ID  ! Peak period id
+!
+!-------------------------------------------------------------------------------
+!
 END MODULE MODD_SFX_OASIS
index 7af0934..ad51a19 100644 (file)
@@ -7,6 +7,9 @@
 !!
 MODULE MODE_READ_NETCDF_MERCATOR
 !!!=============================================================================
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source 
+!!                                        ! + correction of 2 bugs
 !-------------------------------------------------------------------------------
 !
 !
@@ -76,7 +79,6 @@ NVARDIMNAM(:)=' '
 HACTION='get variable type'
 status=nf90_inquire_variable(KCDF_ID,IDVAR,XTYPE=KVARTYPE)
 if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-!write(0,*) 'variable type = ',KVARTYPE
 !
 status=nf90_inquire_variable(KCDF_ID,IDVAR,DIMIDS=NDIMID)
 HACTION='get variable dimensions name'
@@ -86,13 +88,11 @@ if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
 HACTION='get variable dimensions length'
 status=nf90_inquire_dimension(KCDF_ID,NDIMID(NDIMS),LEN=NVARDIMLEN(NDIMS))
 if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-!write(0,*) 'variable dimension ',NDIMS,' named ',NVARDIMNAM(NDIMS),&
 !     &'has a length of',NVARDIMLEN(NDIMS)
 !!
 HACTION='get attributs'
 status=nf90_inquire_variable(KCDF_ID,IDVAR,NATTS=NGATTS)
 if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-!write(0,*) 'number of attributes = ',NGATTS
 allocate(hname(1:NGATTS))
 !
 ALLOCATE(ZVALU1D(1:NVARDIMLEN(NDIMS)))
@@ -157,7 +157,6 @@ NVARDIMNAM(:)=' '
 HACTION='get variable type'
 status=nf90_inquire_variable(KCDF_ID,IDVAR,XTYPE=KVARTYPE)
 if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-!write(0,*) 'variable type = ',KVARTYPE
 !
 HACTION='get variable dimensions identifiant'
 status=nf90_inquire_variable(KCDF_ID,IDVAR,DIMIDS=NVARDIMID)
@@ -166,7 +165,6 @@ if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
 HACTION='get attributs'
 status=nf90_inquire_variable(KCDF_ID,IDVAR,NATTS=NGATTS)
 if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-!write(0,*) 'number of attributes = ',NGATTS
 allocate(hname(1:NGATTS))
 !
 ZSCFA=1.
@@ -174,35 +172,26 @@ ZOFFS=0.
 DO JLOOP=1,NGATTS
   status=nf90_inq_attname(KCDF_ID,IDVAR,JLOOP,hname(JLOOP))
   if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-  !write(0,*) 'attributes names = ', hname(JLOOP)
   if (TRIM(hname(JLOOP))=='missing_value') then
-    !write(0,*) 'missing value search '
     HACTION='get missing value'
     status=nf90_get_att(KCDF_ID,IDVAR,"missing_value",PMISSVALUE)
     if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-    !write(0,*) 'missing value = ',PMISSVALUE
   else
     if (TRIM(hname(JLOOP))=='_FillValue') then
-      !write(0,*) 'missing value found '
       HACTION='get _FillValue'
       status=nf90_get_att(KCDF_ID,IDVAR,"_FillValue",PMISSVALUE)
       if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-      !write(0,*) 'missing value = ',PMISSVALUE
     endif    
   endif
   if (TRIM(hname(JLOOP))=='scale_factor') then
-    !write(0,*) 'missing value found '
     HACTION='get scale factor'
     status=nf90_get_att(KCDF_ID,IDVAR,"scale_factor",ZSCFA)
     if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-    !write(0,*) 'missing value = ',PMISSVALUE
   endif   
   if (TRIM(hname(JLOOP))=='add_offset') then
-    !write(0,*) 'missing value found '
     HACTION='get offset'
     status=nf90_get_att(KCDF_ID,IDVAR,"add_offset",ZOFFS)
     if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-    !write(0,*) 'missing value = ',PMISSVALUE
   endif    
 ENDDO
 !
@@ -214,8 +203,6 @@ DO JLOOP2=1,NDIMS
   HACTION='get variable dimensions length'
   status=nf90_inquire_dimension(KCDF_ID,NVARDIMID(JLOOP2),LEN=NVARDIMLEN(JLOOP2))
   if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-  !write(0,*) 'variable dimension ',JLOOP2,' named ',NVARDIMNAM(JLOOP2),&
-  !     &'has a length of',NVARDIMLEN(JLOOP2)
 ENDDO
 ! 
 IF (KVARTYPE>=5) then
@@ -298,17 +285,14 @@ NVARDIMNAM(:)=' '
 HACTION='get variable type'
 status=nf90_inquire_variable(KCDF_ID,IDVAR,XTYPE=KVARTYPE)
 if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-!write(0,*) 'variable type = ',KVARTYPE
 !
 HACTION='get variable dimensions identifiant'
 status=nf90_inquire_variable(KCDF_ID,IDVAR,DIMIDS=NVARDIMID)
 if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-!write(0,*) 'variable dimension identifiant ',NVARDIMID
 !
 HACTION='get attributs'
 status=nf90_inquire_variable(KCDF_ID,IDVAR,NATTS=NGATTS)
 if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-!write(0,*) 'number of attributes = ',NGATTS
 allocate(hname(1:NGATTS))
 !
 ZSCFA=1.
@@ -316,35 +300,26 @@ ZOFFS=0.
 DO JLOOP=1,NGATTS
   status=nf90_inq_attname(KCDF_ID,IDVAR,JLOOP,hname(JLOOP))
   if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-  !write(0,*) 'attributes names = ', hname(JLOOP)
   if (TRIM(hname(JLOOP))=='missing_value') then
-    !write(0,*) 'missing value found '
     HACTION='get missing value'
     status=nf90_get_att(KCDF_ID,IDVAR,"missing_value",PMISSVALUE)
     if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-    !write(0,*) 'missing value = ',PMISSVALUE
   else
     if (TRIM(hname(JLOOP))=='_FillValue') then
-      !write(0,*) 'missing value found '
       HACTION='get _FillValue'
       status=nf90_get_att(KCDF_ID,IDVAR,"_FillValue",PMISSVALUE)
       if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-      !write(0,*) 'missing value = ',PMISSVALUE
     endif
   endif
   if (TRIM(hname(JLOOP))=='scale_factor') then
-    !write(0,*) 'missing value found '
     HACTION='get scale factor'
     status=nf90_get_att(KCDF_ID,IDVAR,"scale_factor",ZSCFA)
     if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-    !write(0,*) 'missing value = ',PMISSVALUE
   endif  
   if (TRIM(hname(JLOOP))=='add_offset') then
-    !write(0,*) 'missing value found '
     HACTION='get offset'
     status=nf90_get_att(KCDF_ID,IDVAR,"add_offset",ZOFFS)
     if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-    !write(0,*) 'missing value = ',PMISSVALUE
   endif 
 ENDDO
 !
@@ -356,8 +331,6 @@ DO JLOOP2=1,NDIMS
   HACTION='get variable dimensions length'
   status=nf90_inquire_dimension(KCDF_ID,NVARDIMID(JLOOP2),LEN=NVARDIMLEN(JLOOP2))
   if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-  !write(0,*) 'variable dimension ',JLOOP2,' named ',NVARDIMNAM(JLOOP2),&
-  !     &'has a length of',NVARDIMLEN(JLOOP2)
 ENDDO
 ! 
 IF (KVARTYPE>=5) then
@@ -431,11 +404,8 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_DIM_CDF',0,ZHOOK_HANDLE)
 HACTION='open netcdf'
 status=NF90_OPEN(HFILENAME,nf90_nowrite,kcdf_id)
-!write(0,*) 'identifiant de ',HFILENAME,'=',kcdf_id
 if (status/=NF90_NOERR) then 
   CALL HANDLE_ERR_MER(status,HACTION)
-!else
-!  write(0,*) 'netcdf file opened: ',HFILENAME
 endif
 !
 !-----------
@@ -445,7 +415,6 @@ endif
 HACTION='get number of variables'
 status=NF90_INQUIRE(kcdf_id,NVARIABLES=NBVARS)
 if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-!write(0,*) 'nb vars', NBVARS
 ALLOCATE(YVARNAME(NBVARS))
 !
 !-----------
@@ -458,16 +427,12 @@ DO JLOOP1=1,NBVARS
   HACTION='get variables  names'
   status=NF90_INQUIRE_VARIABLE(kcdf_id,JLOOP1,NAME=YVARNAME(JLOOP1))
   if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-  !write(0,*) 'var',JLOOP1,' name: ',YVARNAME(JLOOP1)
   if (YVARNAME(JLOOP1)==HNCVARNAME) then
-    !write(0,*) 'var',JLOOP1,' corresponding to variable required'
     ID_VARTOGET1=JLOOP1
   endif
   if (YVARNAME(JLOOP1)/=HNCVARNAME) then
     if((LGT(TRIM(YVARNAME(JLOOP1)),TRIM(HNCVARNAME))).AND.&
            (SCAN(TRIM(YVARNAME(JLOOP1)),TRIM(HNCVARNAME))==1)) then  
-      !write(0,*) 'var',JLOOP1,YVARNAME(JLOOP1),' could correspond to variable required ?'
-      !write(0,*) HNCVARNAME,' is variable required; only ',YVARNAME(JLOOP1),' found'
       ID_VARTOGET2=JLOOP1
     endif
   endif
@@ -494,7 +459,6 @@ endif
 HACTION='get variable dimensions number'
 status=nf90_inquire_variable(kcdf_id,ID_VARTOGET,NDIMS=NVARDIMS)
 if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-!write(0,*) 'variable dimensions number = ',NVARDIMS
 !
 !     4.2      get the variable dimensions length
 !              ----------------------------------
@@ -523,7 +487,6 @@ END SELECT
 HACTION='close netcdf'
 status=nf90_close(kcdf_id)
 if (status/=NF90_NOERR) CALL HANDLE_ERR_MER(status,HACTION)
-!write(0,*) 'OK: netcdf file closed: ',HFILENAME
 !
 !-----------
 !*    11.     Deallocate 
@@ -541,7 +504,7 @@ END SUBROUTINE READ_DIM_CDF
 USE MODD_SURFEX_MPI, ONLY : WLOG_MPI, NRANK, NPIO, NPROC, NCOMM
 USE MODD_HORIBL, ONLY : LGLOBLON, LGLOBS, LGLOBN, XILO1H, XILO2H, NINLOH, &
                         XLA, XOLA, XOLO, NP, XLOPH, NO
-USE MODD_PREP,       ONLY : XLAT_OUT, XLON_OUT, LINTERP
+USE MODD_PREP,       ONLY : XLAT_OUT, XLON_OUT, LINTERP, XX_OUT, XY_OUT
 !
 USE MODD_GRID_LATLONREGUL
 USE MODD_SURF_PAR
@@ -1509,4 +1472,57 @@ IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_ZS_SEA',1,ZHOOK_H
 END SUBROUTINE READ_NETCDF_ZS_SEA
 !------------------------------------------------------------------------------
 !==============================================================================
+!     ####################
+       SUBROUTINE READ_NETCDF_WAVE(HFILENAME,HNCVARNAME,PFIELD)
+!     ####################
+!
+USE MODD_GRID_LATLONREGUL, ONLY : NINLAT,NINLON,NINDEPTH,NILENGTH
+USE MODD_PREP,       ONLY : CINTERP_TYPE
+!
+IMPLICIT NONE
+!
+ CHARACTER(LEN=28), INTENT(IN) :: HFILENAME   ! Name of the field file.
+ CHARACTER(LEN=28), INTENT(IN) :: HNCVARNAME  ! Name of variable to read in netcdf file
+REAL, POINTER, DIMENSION(:)   :: PFIELD      ! value to get
+!
+REAL,DIMENSION(:), ALLOCATABLE :: ZLATI
+REAL,DIMENSION(:), ALLOCATABLE :: ZLONG
+REAL,TARGET, DIMENSION(:), ALLOCATABLE:: ZVALUE
+REAL(KIND=JPRB) :: ZHOOK_HANDLE
+!
+!
+include 'netcdf.inc'
+!
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_WAVE',0,ZHOOK_HANDLE)
+if(NINDEPTH>0) then
+  !write(0,*) '*****warning*****',HNCVARNAME,' is a 3D field'
+  ALLOCATE(PFIELD(1))
+  PFIELD(:)=0.
+  CINTERP_TYPE='UNIF  ' !!prescribed uniform field
+elseif(NILENGTH>0) then
+  ALLOCATE(ZVALUE(NILENGTH))
+  ALLOCATE(ZLATI(NILENGTH) )
+  ALLOCATE(ZLONG(NILENGTH) )
+!
+  CALL READ_LATLONVAL_CDF(HFILENAME,HNCVARNAME,ZLONG,ZLATI,ZVALUE)
+  ALLOCATE(PFIELD(NILENGTH))
+  PFIELD(:)=ZVALUE(:)
+  CINTERP_TYPE='HORIBL' !!interpolation from gaussian, legendre or regular grid
+!                       !!CINGRID_TYPE='GAUSS  ' ou ='AROME '
+!                       !!CINGRID_TYPE='LATLON '
+else
+  ALLOCATE(PFIELD(1))
+  PFIELD(:)=0.
+  CINTERP_TYPE='UNIF  ' !!prescribed uniform field
+endif
+!
+IF (ALLOCATED(ZVALUE      ))  DEALLOCATE(ZVALUE )
+IF (ALLOCATED(ZLONG       ))  DEALLOCATE(ZLONG  )
+IF (ALLOCATED(ZLATI       ))  DEALLOCATE(ZLATI  )
+!
+IF (LHOOK) CALL DR_HOOK('MODE_READ_NETCDF_MERCATOR:READ_NETCDF_WAVE',1,ZHOOK_HANDLE)
+!
+END SUBROUTINE READ_NETCDF_WAVE
+!------------------------------------------------------------------------------
+!==============================================================================
 END MODULE MODE_READ_NETCDF_MERCATOR
index 3625499..7aaec32 100644 (file)
 !!      Modified    07/2012, P. Le Moigne : CMO1D phasing
 !!                  07/2013, S. Senesi    : handle seaice scheme
 !!                              and uniform sea surface salinity and ice cover
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
 USE MODD_PREP_SEAFLUX, ONLY : CFILE_SEAFLX, CTYPE_SEAFLX, CFILEPGD_SEAFLX, CTYPEPGD, &
-                              XSST_UNIF, XSSS_UNIF, XSIC_UNIF
+                              XSST_UNIF, XSSS_UNIF, XSIC_UNIF, CFILEWAVE_SEAFLX, CTYPEWAVE
 !
 IMPLICIT NONE
 !
@@ -60,6 +62,7 @@ REAL              :: XCORFLX          ! correction coefficient ( W.m-2.K-1)
 LOGICAL           :: LDIAPYC          ! If T, fluxes correction is made                                      
 !
 NAMELIST/NAM_PREP_SEAFLUX/CFILE_SEAFLX, CTYPE_SEAFLX, CFILEPGD_SEAFLX, CTYPEPGD, XSST_UNIF,  &
+                          CFILEWAVE_SEAFLX, CTYPEWAVE, &        
                           XSSS_UNIF, XSIC_UNIF, NYEAR, NMONTH, NDAY, XTIME, LSEA_SBL, &
                           CSEAICE_SCHEME, LOCEAN_MERCATOR, LOCEAN_CURRENT,              & 
                           XTIME_REL,LCUR_REL,LTS_REL,                                  &
index 43fa0d2..cd647ff 100644 (file)
@@ -31,6 +31,8 @@
 !!      Modified    08/2009 : LSURF_BUDGETC
 !!      Modified    01/2014 : S. Senesi : introduce sea-ice model
 !!      Modified    03/2014 : S. Belamari - add NZ0 (to choose PZ0SEA formulation)
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -61,6 +63,7 @@ LOGICAL  :: LPWG
 LOGICAL  :: LPRECIP
 LOGICAL  :: LPWEBB
 LOGICAL  :: LDIAG_OCEAN
+LOGICAL  :: LWAVEWIND
 LOGICAL  :: LDIAG_MISC_SEAICE
 INTEGER  :: NZ0
 INTEGER  :: NGRVWAVES
@@ -83,7 +86,7 @@ REAL     :: XSI_FLX_DRV
 !
 NAMELIST/NAM_SEAFLUXn/CSEA_FLUX,CSEA_ALB, LPWG, LPRECIP, LPWEBB, NGRVWAVES, &
                       NZ0, LPROGSST, NTIME_COUPLING, XOCEAN_TSTEP, XICHCE, &
-                      CINTERPOL_SST, CINTERPOL_SSS, LPERTFLUX
+                      CINTERPOL_SST, CINTERPOL_SSS, LPERTFLUX, LWAVEWIND
 NAMELIST/NAM_DIAG_SURFn/N2M,L2M_MIN_ZS,LSURF_BUDGET,LRAD_BUDGET, &
                           LSURF_BUDGETC,LRESET_BUDGETC,LCOEF,LSURF_VARS  
 NAMELIST/NAM_CH_SEAFLUXn/CCH_DRY_DEP
@@ -118,6 +121,7 @@ SUBROUTINE INIT_NAM_SEAFLUXn (O, S)
   LPWEBB = S%LPWEBB
   NZ0 = S%NZ0
   NGRVWAVES = S%NGRVWAVES
+  LWAVEWIND = S%LWAVEWIND
   LPROGSST = O%LPROGSST
   NTIME_COUPLING = O%NTIME_COUPLING
   XOCEAN_TSTEP = O%XOCEAN_TSTEP
@@ -150,6 +154,7 @@ SUBROUTINE UPDATE_NAM_SEAFLUXn (O, S)
   S%LPWEBB = LPWEBB
   S%NZ0 = NZ0
   S%NGRVWAVES = NGRVWAVES
+  S%LWAVEWIND = LWAVEWIND  
   O%LPROGSST = LPROGSST
   O%NTIME_COUPLING = NTIME_COUPLING
   O%XOCEAN_TSTEP = XOCEAN_TSTEP
index 017fd42..5572ee6 100644 (file)
@@ -27,6 +27,8 @@ MODULE MODN_SFX_OASIS
 !!    -------------
 !!      Original       10/13
 !!    10/2016 B. Decharme : bug surface/groundwater coupling
+!!      Modified       11/2014 : J. Pianezze - add wave coupling parameters
+!!                                             and surface pressure parameter for ocean coupling
 !
 !*       0.   DECLARATIONS
 !             ------------
@@ -37,6 +39,7 @@ IMPLICIT NONE
 REAL             :: XTSTEP_CPL_LAND = -1.0  ! Coupling time step for land
 REAL             :: XTSTEP_CPL_SEA  = -1.0  ! Coupling time step for sea
 REAL             :: XTSTEP_CPL_LAKE = -1.0  ! Coupling time step for lake
+REAL             :: XTSTEP_CPL_WAVE = -1.0  ! Coupling time step for wave
 !
 !-------------------------------------------------------------------------------
 !
@@ -90,7 +93,9 @@ CHARACTER(LEN=8) :: CSEA_FWSM = '        '   ! module of wind stress
 CHARACTER(LEN=8) :: CSEA_EVAP = '        '   ! Evaporation 
 CHARACTER(LEN=8) :: CSEA_RAIN = '        '   ! Rainfall 
 CHARACTER(LEN=8) :: CSEA_SNOW = '        '   ! Snowfall 
+CHARACTER(LEN=8) :: CSEA_EVPR = '        '   ! Evaporation - Preci.
 CHARACTER(LEN=8) :: CSEA_WATF = '        '   ! Net freshwater flux
+CHARACTER(LEN=8) :: CSEA_PRES = '        '   ! Surface pressure 
 !
 ! Sea-ice Output variables
 !  
@@ -110,6 +115,25 @@ CHARACTER(LEN=8) :: CSEAICE_SIT = '        ' ! Sea-ice temperature
 CHARACTER(LEN=8) :: CSEAICE_CVR = '        ' ! Sea-ice cover
 CHARACTER(LEN=8) :: CSEAICE_ALB = '        ' ! Sea-ice albedo
 !
+!-------------------------------------------------------------------------------
+!
+! * Wave variables for Surfex - Oasis coupling 
+!
+!-------------------------------------------------------------------------------
+!
+! Wave Output variables
+!
+CHARACTER(LEN=8) :: CWAVE_U10  = '        '   ! 10m u-wind speed 
+CHARACTER(LEN=8) :: CWAVE_V10  = '        '   ! 10m u-wind speed 
+!
+! Wave Input variables
+!
+CHARACTER(LEN=8) :: CWAVE_CHA    = '        ' ! Charnock coefficient
+CHARACTER(LEN=8) :: CWAVE_UCU    = '        ' ! Wave u-current velocity
+CHARACTER(LEN=8) :: CWAVE_VCU    = '        ' ! Wave v-current velocity
+CHARACTER(LEN=8) :: CWAVE_HS     = '        ' ! Significant wave height
+CHARACTER(LEN=8) :: CWAVE_TP     = '        ' ! Peak period
+!
 ! Switch to add water into sea oasis mask
 !
 LOGICAL          :: LWATER = .FALSE.
@@ -135,11 +159,18 @@ NAMELIST/NAM_SFX_LAKE_CPL/XTSTEP_CPL_LAKE,                              &
 !
 NAMELIST/NAM_SFX_SEA_CPL/XTSTEP_CPL_SEA, LWATER,                               &
                           CSEA_FWSU,CSEA_FWSV,CSEA_HEAT,CSEA_SNET,CSEA_WIND,   &
-                          CSEA_FWSM,CSEA_EVAP,CSEA_RAIN,CSEA_SNOW,CSEA_WATF,   &
-                          CSEAICE_HEAT,CSEAICE_SNET,CSEAICE_EVAP,              &
-                          CSEA_SST,CSEA_UCU,CSEA_VCU,                          &
+                          CSEA_FWSM,CSEA_EVAP,CSEA_RAIN,CSEA_SNOW,CSEA_EVPR,   &
+                          CSEA_WATF,CSEA_PRES,CSEAICE_HEAT,CSEAICE_SNET,       &
+                          CSEAICE_EVAP,CSEA_SST,CSEA_UCU,CSEA_VCU,             &
                           CSEAICE_SIT,CSEAICE_CVR,CSEAICE_ALB
 !
+!*       4.    NAMELISTS FOR WAVE FIELD
+!              ---------------------------------------------------------------
+!
+NAMELIST/NAM_SFX_WAVE_CPL/XTSTEP_CPL_WAVE,                                     &
+                          CWAVE_U10, CWAVE_V10,                                &
+                          CWAVE_CHA, CWAVE_UCU, CWAVE_VCU, CWAVE_HS, CWAVE_TP
+!
 !-------------------------------------------------------------------------------
 !
 END MODULE MODN_SFX_OASIS
index 65922f9..9864abb 100644 (file)
@@ -30,6 +30,8 @@ SUBROUTINE PREP_HOR_SEAFLUX_FIELD (DTCO, UG, U, GCP, DTS, O, OR, KLAT, S, &
 !!      P. Le Moigne 09/2007, sst from clim
 !!      S. Senesi    09/2013, extends to fields of SSS and SIC
 !!      P. Marguinaud10/2014, Support for a 2-part PREP
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
 !!------------------------------------------------------------------
 !
 USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t
@@ -44,7 +46,8 @@ USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
 !
 USE MODD_TYPE_DATE_SURF, ONLY : DATE_TIME
 USE MODD_SURFEX_MPI, ONLY : NRANK, NPIO, NCOMM, NPROC
-USE MODD_PREP,           ONLY : CINGRID_TYPE, CINTERP_TYPE, XZS_LS, CMASK
+USE MODD_PREP,           ONLY : CINGRID_TYPE, CINTERP_TYPE, XZS_LS, XLAT_OUT, XLON_OUT, &
+                                XX_OUT, XY_OUT, CMASK
 !
 USE MODD_GRID_GRIB, ONLY : CINMODEL
 !
@@ -205,6 +208,12 @@ IF (YDCTL%LPART5) THEN
   CASE('SIC    ')
     ALLOCATE(S%XSIC(SIZE(ZFIELDOUT,1)))
     S%XSIC(:) = ZFIELDOUT(:,1)
+  CASE('HS     ')
+    ALLOCATE(S%XHS(SIZE(ZFIELDOUT,1)))
+    S%XHS(:) = ZFIELDOUT(:,1)
+  CASE('TP     ')
+    ALLOCATE(S%XTP(SIZE(ZFIELDOUT,1)))
+    S%XTP(:) = ZFIELDOUT(:,1)    
   END SELECT
 !
 ENDIF
index 76a05e2..b136269 100644 (file)
@@ -31,6 +31,8 @@ SUBROUTINE PREP_SEAFLUX (DTCO, UG, U, GCP, SG, SB, S, DTS, O, OR, &
 !!      Modified    01/2014, S. Senesi : introduce sea-ice model 
 !!      Modified    01/2015, R. Séférian : introduce ocean surface albedo 
 !!      P. Marguinaud10/2014, Support for a 2-part PREP
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
 !!------------------------------------------------------------------
 !
 USE MODD_SFX_GRID_n, ONLY : GRID_t
@@ -152,6 +154,16 @@ IF (CSEAICE_SCHEME /= 'NONE  ') THEN
                     HPROGRAM,HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,YDCTL)
 ENDIF
 !
+!
+!*      2.2    Significant height and peak period
+!
+ CALL PREP_HOR_SEAFLUX_FIELD(DTCO, UG, U, GCP, DTS, O, OR, SIZE(SG%XLAT), S, &
+                             HPROGRAM,'HS     ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,YDCTL)
+!
+ CALL PREP_HOR_SEAFLUX_FIELD(DTCO, UG, U, GCP, DTS, O, OR, SIZE(SG%XLAT), S, &
+                             HPROGRAM,'TP     ',HATMFILE,HATMFILETYPE,HPGDFILE,HPGDFILETYPE,YDCTL)
+!
+!
  CALL CLEAN_PREP_OUTPUT_GRID
 
 IF (YDCTL%LPART6) THEN
index 78c8a5f..3fdd63d 100644 (file)
@@ -25,7 +25,9 @@ SUBROUTINE PREP_SEAFLUX_NETCDF(HPROGRAM,HSURF,HFILE,KLUOUT,PFIELD)
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    01/2008
-!!      Modified    09/2013 : S. Senesi : extends to SSS and SIC fields 
+!!      Modified    09/2013 : S. Senesi : extends to SSS and SIC fields
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
 !!------------------------------------------------------------------
 !
 USE MODE_READ_NETCDF_MERCATOR
@@ -111,6 +113,26 @@ SELECT CASE(HSURF)
       DEALLOCATE(ZFIELD)
     ENDIF
 !
+!
+!* 2.3 Wave parameters
+!      --------------------
+!
+  CASE('HS     ')
+    YNCVAR='significant_h'
+    CALL PREP_NETCDF_GRID(HFILE,YNCVAR)
+    CALL READ_NETCDF_WAVE(HFILE,YNCVAR,ZFIELD)
+    ALLOCATE(PFIELD(MAX(1,NILENGTH),1))
+    PFIELD(:,1) = ZFIELD(:)
+    DEALLOCATE(ZFIELD)
+!
+  CASE('TP     ')
+    YNCVAR='peak_period'
+    CALL PREP_NETCDF_GRID(HFILE,YNCVAR)
+    CALL READ_NETCDF_WAVE(HFILE,YNCVAR,ZFIELD)
+    ALLOCATE(PFIELD(MAX(1,NILENGTH),1))
+    PFIELD(:,1) = ZFIELD(:)
+    DEALLOCATE(ZFIELD)
+!
 END SELECT
 !
 IF (NPROC>1) THEN
index 220cc03..7af8afc 100644 (file)
@@ -26,6 +26,8 @@ SUBROUTINE PREP_SEAFLUX_UNIF(KLUOUT,HSURF,PFIELD)
 !!    -------------
 !!      Original    01/2004
 !!      Modified    09/2013 : S. Senesi : extends to SSS and SIC variables
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
 !!------------------------------------------------------------------
 !
 
@@ -79,6 +81,15 @@ SELECT CASE(HSURF)
     ALLOCATE(PFIELD(1,1))
     PFIELD = XSIC_UNIF
 !
+!*      3.4    Wave parameters
+!
+  CASE('HS     ')
+    ALLOCATE(PFIELD(1,1))
+    PFIELD = 1.
+!
+  CASE('TP     ')
+    ALLOCATE(PFIELD(1,1))
+    PFIELD = 8.
 END SELECT
 !
 !*      4.     Interpolation method
index d08c045..36d6188 100644 (file)
@@ -43,7 +43,8 @@ USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
 USE MODD_SURF_ATM_n, ONLY : SURF_ATM_t
 USE MODD_WATFLUX_n, ONLY : WATFLUX_t
 !
-USE MODD_SURF_PAR,   ONLY : XUNDEF
+USE MODD_SFX_OASIS
+USE MODD_SURF_PAR,   ONLY : XUNDEF, NUNDEF
 USE MODD_CSTS,       ONLY : XTT, XTTS, XICEC
 !
 !
@@ -132,31 +133,37 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 IF (LHOOK) CALL DR_HOOK('PUT_SFX_SEA:TREAT_SEA',0,ZHOOK_HANDLE)
 !
-YCOMMENT='Sea surface temperature'
-CALL PACK_SAME_RANK(U%NR_SEA(:),PSEA_SST(:),ZSST(:))
-WHERE (ZSST(:)/=0.0) S%XSST(:)=ZSST(:)
-CALL CHECK_SEA(YCOMMENT,S%XSST(:))
-!
-ZTMIN=MINVAL(S%XSST(:))
-ZTMAX=MAXVAL(S%XSST(:))
-!
-IF(ZTMIN<=0.0.OR.ZTMAX>500.)THEN
-  WRITE(KLUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
-  WRITE(KLUOUT,*)'SST from ocean model not define or not physic'
-  WRITE(KLUOUT,*)'SST MIN =',ZTMIN,'SST MAX =',ZTMAX
-  WRITE(KLUOUT,*)'There is certainly a problem between         '
-  WRITE(KLUOUT,*)'SURFEX and OASIS sea/land mask               '
-  WRITE(KLUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
-  CALL ABOR1_SFX('PUT_SFX_SEA: SST from ocean model not define or not physic')
+IF(NSEA_SST_ID/=NUNDEF)THEN
+  YCOMMENT='Sea surface temperature'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PSEA_SST(:),ZSST(:))
+  WHERE (ZSST(:)/=0.0) S%XSST(:)=ZSST(:)
+  CALL CHECK_SEA(YCOMMENT,S%XSST(:))
+  !
+  ZTMIN=MINVAL(S%XSST(:))
+  ZTMAX=MAXVAL(S%XSST(:))
+  !
+  IF(ZTMIN<=0.0.OR.ZTMAX>500.)THEN
+    WRITE(KLUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+    WRITE(KLUOUT,*)'SST from ocean model not define or not physic'
+    WRITE(KLUOUT,*)'SST MIN =',ZTMIN,'SST MAX =',ZTMAX
+    WRITE(KLUOUT,*)'There is certainly a problem between         '
+    WRITE(KLUOUT,*)'SURFEX and OASIS sea/land mask               '
+    WRITE(KLUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+    CALL ABOR1_SFX('PUT_SFX_SEA: SST from ocean model not define or not physic')
+  ENDIF
 ENDIF
 !
-YCOMMENT='Sea u-current stress'
-CALL PACK_SAME_RANK(U%NR_SEA(:),PSEA_UCU(:),S%XUMER(:))
-CALL CHECK_SEA(YCOMMENT,S%XUMER(:))
+IF(NSEA_UCU_ID/=NUNDEF)THEN
+  YCOMMENT='Sea u-current stress'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PSEA_UCU(:),S%XUMER(:))
+  CALL CHECK_SEA(YCOMMENT,S%XUMER(:))
+ENDIF
 !
-YCOMMENT='Sea v-current stress'
-CALL PACK_SAME_RANK(U%NR_SEA(:),PSEA_VCU(:),S%XVMER(:))
-CALL CHECK_SEA(YCOMMENT,S%XVMER(:))
+IF(NSEA_VCU_ID/=NUNDEF)THEN
+  YCOMMENT='Sea v-current stress'
+  CALL PACK_SAME_RANK(U%NR_SEA(:),PSEA_VCU(:),S%XVMER(:))
+  CALL CHECK_SEA(YCOMMENT,S%XVMER(:))
+ENDIF
 !
 IF(OCPL_SEAICE)THEN
 !
index 3f24c25..9906628 100644 (file)
@@ -9,7 +9,9 @@ SUBROUTINE PUT_SFXCPL_n (F, IM, S, U, W, &
                         PLAND_PIFLOOD,PSEA_SST,PSEA_UCU,   &
                         PSEA_VCU,PSEAICE_SIT,PSEAICE_CVR,  &
                         PSEAICE_ALB,PTSRAD,                &
-                        PDIR_ALB,PSCA_ALB,PEMIS,PTSURF     )  
+                        PDIR_ALB,PSCA_ALB,PEMIS,PTSURF,    & 
+                        PWAVE_CHA,PWAVE_UCU,PWAVE_VCU,     &
+                        PWAVE_HS,PWAVE_TP     )  
 !     #################################################################################################
 !
 !!****  *PUT_SFXCPL_n* - routine to modify some variables in surfex from information coming
@@ -40,6 +42,7 @@ SUBROUTINE PUT_SFXCPL_n (F, IM, S, U, W, &
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    08/2009
+!!      Modified       11/2014 : J. Pianezze - add wave coupling parameters
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -56,13 +59,14 @@ USE MODD_SURF_PAR,   ONLY : XUNDEF
 USE MODN_SFX_OASIS,  ONLY : LWATER
 USE MODD_SFX_OASIS,  ONLY : LCPL_SEA, LCPL_SEAICE, &
                             LCPL_LAND, LCPL_GW,    &
-                            LCPL_FLOOD
+                            LCPL_FLOOD, LCPL_WAVE
 !                          
 USE MODI_GET_LUOUT
 !
 USE MODI_ABOR1_SFX
 USE MODI_PUT_SFX_LAND
 USE MODI_PUT_SFX_SEA
+USE MODI_PUT_SFX_WAVE
 USE MODI_UPDATE_ESM_SURF_ATM_n
 !
 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
@@ -100,6 +104,12 @@ REAL, DIMENSION(KI),      INTENT(IN) :: PSEAICE_SIT ! Sea-ice Temperature (K)
 REAL, DIMENSION(KI),      INTENT(IN) :: PSEAICE_CVR ! Sea-ice cover (-)
 REAL, DIMENSION(KI),      INTENT(IN) :: PSEAICE_ALB ! Sea-ice albedo (-)
 !
+REAL, DIMENSION(KI),      INTENT(IN) :: PWAVE_CHA ! Charnock coefficient (-)
+REAL, DIMENSION(KI),      INTENT(IN) :: PWAVE_UCU ! u-current velocity   (m/s)
+REAL, DIMENSION(KI),      INTENT(IN) :: PWAVE_VCU ! v-current velocity   (m/s)
+REAL, DIMENSION(KI),      INTENT(IN) :: PWAVE_HS  ! Significant wave height (m)
+REAL, DIMENSION(KI),      INTENT(IN) :: PWAVE_TP  ! Peak period (s)
+!
 REAL, DIMENSION(KI),     INTENT(OUT) :: PTSRAD   ! Total radiative temperature see by the atmosphere
 REAL, DIMENSION(KI),     INTENT(OUT) :: PTSURF   ! Total surface temperature see by the atmosphere
 REAL, DIMENSION(KI),     INTENT(OUT) :: PEMIS    ! Total emissivity see by the atmosphere
@@ -149,6 +159,17 @@ IF(LCPL_SEA)THEN
 ENDIF
 !
 !-------------------------------------------------------------------------------
+! Put variable over sea and/or water tile for waves
+!-------------------------------------------------------------------------------
+!
+IF(LCPL_WAVE)THEN
+!
+  CALL PUT_SFX_WAVE(S, U, &
+                    ILUOUT,PWAVE_CHA(:),PWAVE_UCU(:),PWAVE_VCU(:),PWAVE_HS(:),PWAVE_TP(:) )
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
 ! Update radiative properties at time t+1 for radiative scheme
 !-------------------------------------------------------------------------------
 !
index 575b0ba..0d60f0e 100644 (file)
 !!    -------------
 !!      Original    10/2008
 !!      M. Moge     02/2015 parallelization for mésonh
+!!      J. Pianezze 08/2016 replacement of MPI_COMM_WOLRD by NMNH_COMM_WORLD
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-!
-!
+#ifdef MNH_PARALLEL
+USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
+#endif
 !
 USE MODD_DATA_COVER_PAR, ONLY : JPCOVER
 !
@@ -103,6 +105,8 @@ OCOVER(:SIZE(GCOVER))=GCOVER(:)
 !
 #ifdef MNH_PARALLEL
 #ifndef NOMPI
+CALL MPI_ALLREDUCE(GCOVER, OCOVER, SIZE(GCOVER),MPI_LOGICAL, MPI_LOR, NMNH_COMM_WORLD, IINFO)
+#else
 CALL MPI_ALLREDUCE(GCOVER, OCOVER, SIZE(GCOVER),MPI_LOGICAL, MPI_LOR, MPI_COMM_WORLD, IINFO)
 #endif
 #endif
index 8d6a542..0f294e6 100644 (file)
@@ -6,6 +6,8 @@
 SUBROUTINE READ_NAM_PREP_SEAFLUX_n(HPROGRAM)
 !     #######################################################
 !
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
 !---------------------------------------
 !
 USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF
@@ -53,6 +55,8 @@ CALL TEST_NAM_VAR_SURF(ILUOUT,'CTYPE_SEAFLX',   CTYPE_SEAFLX,   '      ','GRIB
                           'ASCII ','NETCDF','LFI   ','FA    ')   
 CALL TEST_NAM_VAR_SURF(ILUOUT,'CTYPEPGD',   CTYPEPGD,   '      ','GRIB  ','MESONH','ASCII ','LFI   ','FA    ')
 CALL TEST_NAM_VAR_SURF(ILUOUT,'CSEAICE_SCHEME',CSEAICE_SCHEME,'GELATO','NONE  ')
+ CALL TEST_NAM_VAR_SURF(ILUOUT,'CTYPEWAVE', CTYPEWAVE, '      ','GRIB  ','MESONH','ASCII ',&
+                          'NETCDF','LFI   ')
 ! 
 IF (LHOOK) CALL DR_HOOK('READ_NAM_PREP_SEAFLUX_N',1,ZHOOK_HANDLE)
 !------------------------------------
index 0a6bb1e..0630335 100644 (file)
@@ -7,6 +7,8 @@ SUBROUTINE READ_NAMELISTS_SEAFLUX_n (SM, &
                                      HPROGRAM,HINIT)
 !     #######################################################
 !
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
 !---------------------------------------------------------------------------   
 !
 !
@@ -44,7 +46,7 @@ IF (LHOOK) CALL DR_HOOK('READ_NAMELISTS_SEAFLUX_N',0,ZHOOK_HANDLE)
 CALL DEFAULT_SEAFLUX(XTSTEP,XOUT_TSTEP,CSEA_ALB,CSEA_FLUX,LPWG,         &
                      LPRECIP,LPWEBB,NZ0,NGRVWAVES,LPROGSST,           &
                      NTIME_COUPLING,XOCEAN_TSTEP,XICHCE,CINTERPOL_SST,&
-                     CINTERPOL_SSS)
+                     CINTERPOL_SSS,LWAVEWIND)
 CALL DEFAULT_SEAICE(HPROGRAM, CINTERPOL_SIC, CINTERPOL_SIT,             &
                     XFREEZING_SST,XSEAICE_TSTEP, XSIC_EFOLDING_TIME,    &
                     XSIT_EFOLDING_TIME, XCD_ICE_CST, XSI_FLX_DRV        )     
index 83e5bc1..d0d8190 100644 (file)
@@ -38,6 +38,8 @@
 !!      P. Le Moigne 10/2005, Phasage Arome
 !!      C. Lebeaupin 01/2008  Add oceanic variables initialization
 !!      Modified     09/2013  S. Senesi : introduce variables for sea-ice scheme 
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -52,7 +54,7 @@ USE MODI_READ_PREP_SURF_ATM_CONF
 USE MODI_PREP_OCEAN_MERCATORVERGRID
 !
 USE MODD_PREP_SEAFLUX, ONLY : CFILE_SEAFLX, CTYPE_SEAFLX, CFILEPGD_SEAFLX, CTYPEPGD, &
-                              XSST_UNIF, XSSS_UNIF, XSIC_UNIF
+                              CFILEWAVE_SEAFLX, CTYPEWAVE, XSST_UNIF, XSSS_UNIF, XSIC_UNIF
 !
 USE MODD_SURF_PAR,   ONLY : XUNDEF
 !
@@ -111,9 +113,16 @@ OUNIF     = .FALSE.
 !* Select seaflux files if they are defined
 !  -----------------------------------------
 !
-IF (LEN_TRIM(HFILE)==0 .AND. LEN_TRIM(CFILE_SEAFLX)>0 .AND. LEN_TRIM(CTYPE_SEAFLX)>0) THEN
-  HFILE     = CFILE_SEAFLX
-  HFILETYPE = CTYPE_SEAFLX
+IF (HVAR .EQ. 'HS     ' .OR. HVAR .EQ. 'TP     ') THEN
+  IF (LEN_TRIM(HFILE)==0 .AND. LEN_TRIM(CFILEWAVE_SEAFLX)>0 .AND. LEN_TRIM(CTYPEWAVE)>0) THEN
+    HFILE     = CFILEWAVE_SEAFLX
+    HFILETYPE = CTYPEWAVE
+  END IF
+ELSE
+  IF (LEN_TRIM(HFILE)==0 .AND. LEN_TRIM(CFILE_SEAFLX)>0 .AND. LEN_TRIM(CTYPE_SEAFLX)>0) THEN
+    HFILE     = CFILE_SEAFLX
+    HFILETYPE = CTYPE_SEAFLX
+  END IF
 END IF
 !
 IF (LEN_TRIM(HFILEPGD)==0 .AND. LEN_TRIM(CFILEPGD_SEAFLX)>0 .AND. LEN_TRIM(CTYPEPGD)>0) THEN
@@ -161,6 +170,19 @@ IF (HVAR=='DATE   ' .OR. HVAR=='ZS     ') THEN
   RETURN
 END IF
 !
+!-------------------------------------------------------------------------------
+!
+!* If no file and var == wave: uniform field
+!  ---------------------------------------------
+!
+IF (HVAR=='HS    ' .OR. HVAR=='TP    ') THEN
+  OUNIF = (HFILETYPE/='NETCDF')
+  IF (LHOOK) CALL DR_HOOK('READ_PREP_SEAFLUX_CONF',1,ZHOOK_HANDLE)
+  RETURN
+END IF
+!
+!-------------------------------------------------------------------------------
+!
 IF (LEN_TRIM(HFILETYPE)==0 .AND. .NOT. OUNIF) THEN
    CALL ABOR1_SFX('READ_PREP_SEAFLUX_CONF: AN INPUT VALUE IS REQUIRED FOR '//HVAR)
 END IF
index 64ed006..bf2ea39 100644 (file)
@@ -35,7 +35,9 @@
 !!      Original    01/2003 
 !!      Modified    02/2008 Add oceanic variables initialisation
 !!      S. Belamari 04/2014 Suppress LMERCATOR
-!!      R. Séférian 01/2015 introduce new ocean surface albedo 
+!!      R. Séférian 01/2015 introduce new ocean surface albedo
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -214,6 +216,21 @@ ELSE
 !
 ENDIF
 !
+!* Peak frequency and significant wave height
+!
+ALLOCATE(S%XHS(ILU))
+ALLOCATE(S%XTP(ILU))
+!
+IF (.NOT.S%LWAVEWIND) THEN
+  YRECFM='HS'
+  CALL READ_SURF(HPROGRAM,YRECFM,S%XHS(:),IRESP)
+  YRECFM='TP'
+  CALL READ_SURF(HPROGRAM,YRECFM,S%XTP(:),IRESP)
+ELSE
+  S%XHS(:)=XUNDEF
+  S%XTP(:)=XUNDEF
+END IF
+!
 IF (LHOOK) CALL DR_HOOK('READ_SEAFLUX_N',1,ZHOOK_HANDLE)
 !
 !-------------------------------------------------------------------------------
index 54a71c1..d7de437 100644 (file)
@@ -33,6 +33,8 @@ SUBROUTINE SFX_OASIS_DEFINE (IO, U, HPROGRAM,KNPTS,KPARAL)
 !!    -------------
 !!      Original    10/2013
 !!    10/2016 B. Decharme : bug surface/groundwater coupling
+!!      Modified    11/2014 : J. Pianezze - add wave coupling parameters
+!!                                          and surface pressure for ocean coupling
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -199,6 +201,13 @@ IF(LCPL_SEA)THEN
     NSEA_SNOW_ID=NUNDEF
   ENDIF
 !
+  IF(LEN_TRIM(CSEA_EVPR)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_EVPR_ID,CSEA_EVPR,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea Evap.-Precip. rate')
+  ELSE
+    NSEA_EVPR_ID=NUNDEF
+  ENDIF
+!
   IF(LEN_TRIM(CSEA_WATF)/=0)THEN
     CALL OASIS_DEF_VAR(NSEA_WATF_ID,CSEA_WATF,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
     IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for sea freshwater rate')
@@ -206,16 +215,35 @@ IF(LCPL_SEA)THEN
     NSEA_WATF_ID=NUNDEF
   ENDIF
 !
+  IF(LEN_TRIM(CSEA_PRES)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_PRES_ID,CSEA_PRES,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for surface pressure')
+  ELSE
+    NSEA_PRES_ID=NUNDEF
+  ENDIF
+!
 ! Sea intput fields
 !
-  CALL OASIS_DEF_VAR(NSEA_SST_ID,CSEA_SST,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)
-  IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea surface temperature')
+  IF(LEN_TRIM(CSEA_SST)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_SST_ID,CSEA_SST,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea surface temperature')
+  ELSE
+    NSEA_SST_ID=NUNDEF
+  ENDIF
 !
-  CALL OASIS_DEF_VAR(NSEA_UCU_ID,CSEA_UCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)
-  IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea u-current stress')
+  IF(LEN_TRIM(CSEA_UCU)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_UCU_ID,CSEA_UCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea u-current stress')
+  ELSE
+    NSEA_UCU_ID=NUNDEF
+  ENDIF
 !
-  CALL OASIS_DEF_VAR(NSEA_VCU_ID,CSEA_VCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)
-  IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea v-current stress')
+  IF(LEN_TRIM(CSEA_VCU)/=0)THEN
+    CALL OASIS_DEF_VAR(NSEA_VCU_ID,CSEA_VCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_DOUBLE,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for Sea v-current stress')
+  ELSE
+    NSEA_VCU_ID=NUNDEF
+  ENDIF
 !
 ! Particular case due to Sea-ice
 !
@@ -361,6 +389,68 @@ ENDIF
 !
 !-------------------------------------------------------------------------------
 !
+!*       6.     Wave variables for Surfex - Oasis coupling :
+!               -------------------------------------------
+!
+IF(LCPL_WAVE) THEN
+!
+! Wave output fields
+!
+  IF(LEN_TRIM(CWAVE_U10)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_U10_ID,CWAVE_U10,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for U10')
+  ELSE
+    NWAVE_U10_ID=NUNDEF
+  ENDIF
+!
+  IF(LEN_TRIM(CWAVE_V10)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_V10_ID,CWAVE_V10,IPART_ID,IVAR_NODIMS,OASIS_OUT,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for V10')
+  ELSE
+    NWAVE_V10_ID=NUNDEF
+  ENDIF
+!
+! Wave input fields
+!
+  IF (LEN_TRIM(CWAVE_CHA)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_CHA_ID,CWAVE_CHA,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for CHA')
+  ELSE
+    NWAVE_CHA_ID=NUNDEF
+  ENDIF
+!
+  IF (LEN_TRIM(CWAVE_UCU)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_UCU_ID,CWAVE_UCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for UCU')
+  ELSE
+    NWAVE_UCU_ID=NUNDEF
+  ENDIF
+!
+  IF (LEN_TRIM(CWAVE_VCU)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_VCU_ID,CWAVE_VCU,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for VCU')
+  ELSE
+    NWAVE_VCU_ID=NUNDEF
+  ENDIF
+!
+  IF (LEN_TRIM(CWAVE_HS)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_HS_ID,CWAVE_HS,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for HS')
+  ELSE
+    NWAVE_HS_ID=NUNDEF
+  ENDIF
+!
+  IF (LEN_TRIM(CWAVE_TP)/=0)THEN
+    CALL OASIS_DEF_VAR(NWAVE_TP_ID,CWAVE_TP,IPART_ID,IVAR_NODIMS,OASIS_IN,IVAR_SHAPE,OASIS_REAL,IERR)
+    IF(IERR/=OASIS_OK) CALL ABOR1_SFX('SFX_OASIS_DEFINE: OASIS def var problem for TP')
+  ELSE
+    NWAVE_TP_ID=NUNDEF
+  ENDIF
+!
+ENDIF
+!
+!-------------------------------------------------------------------------------
+!
 !*       6.     End of declaration phase:
 !               --------------
 !
index 022a8c4..2a0e348 100644 (file)
@@ -48,13 +48,14 @@ SUBROUTINE SFX_OASIS_INIT(HNAMELIST,KLOCAL_COMM,HINIT)
 !!     Original    10/2013
 !!     S.Sénési    08/2015 - handle XIOS
 !!     B.Decharme  09/2016 - no CALL ABORT if no namelist in Arpege
+!!     Modified    11/2014 : J. Pianezze - add LOASIS_GRID flag
 !!
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_SFX_OASIS, ONLY : LOASIS, CMODEL_NAME, XRUNTIME
+USE MODD_SFX_OASIS, ONLY : LOASIS, LOASIS_GRID, CMODEL_NAME, XRUNTIME
 USE MODI_ABOR1_SFX
 !
 USE MODD_XIOS , ONLY : LXIOS ! Should we call XIOS_INITIALIZE instead of OASIS_GET_LOCAL_COMM
@@ -95,7 +96,7 @@ LOGICAL            :: GFOUND
 !*       0.3   Declarations of namelist variables
 !              ----------------------------------
 !
-NAMELIST/NAM_OASIS/LOASIS,CMODEL_NAME
+NAMELIST/NAM_OASIS/LOASIS,LOASIS_GRID,CMODEL_NAME
 !
 !-------------------------------------------------------------------------------
 !
@@ -105,6 +106,7 @@ NAMELIST/NAM_OASIS/LOASIS,CMODEL_NAME
 !               ---------------
 !
 LOASIS      = .FALSE.
+LOASIS_GRID = .FALSE.
  CMODEL_NAME = 'surfex'
 XRUNTIME    = 0.0
 !
index 41346a2..c1b5b59 100644 (file)
@@ -33,6 +33,8 @@ SUBROUTINE SFX_OASIS_READ_NAM(HPROGRAM,PTSTEP_SURF,HINIT)
 !!    -------------
 !!      Original    05/2008 
 !!    10/2016 B. Decharme : bug surface/groundwater coupling 
+!!      Modified    11/2014 : J. Pianezze - add wave coupling parameters
+!!                                          and surface pressure for ocean coupling
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -43,7 +45,7 @@ USE MODN_SFX_OASIS
 USE MODD_SFX_OASIS, ONLY : LOASIS, XRUNTIME,               &
                            LCPL_LAND, LCPL_GW, LCPL_FLOOD, &
                            LCPL_CALVING, LCPL_LAKE,        &
-                           LCPL_SEA, LCPL_SEAICE
+                           LCPL_SEA, LCPL_SEAICE, LCPL_WAVE
 !
 USE MODE_POS_SURF
 !
@@ -73,6 +75,7 @@ INTEGER,          PARAMETER :: KOUT  = 0
 CHARACTER(LEN=5), PARAMETER :: YLAND = 'land'
 CHARACTER(LEN=5), PARAMETER :: YLAKE = 'lake'
 CHARACTER(LEN=5), PARAMETER :: YSEA  = 'ocean'
+CHARACTER(LEN=5), PARAMETER :: YWAVE = 'wave'
 !
 !*       0.3   Declarations of local variables
 !              -------------------------------
@@ -101,6 +104,7 @@ LCPL_CALVING = .FALSE.
 LCPL_LAKE    = .FALSE.
 LCPL_SEA     = .FALSE.
 LCPL_SEAICE  = .FALSE.
+LCPL_WAVE    = .FALSE.
 !
 IF(.NOT.LOASIS)THEN
   IF (LHOOK) CALL DR_HOOK('SFX_OASIS_READ_NAM',1,ZHOOK_HANDLE)
@@ -153,13 +157,26 @@ ELSE
    WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
 ENDIF
 !
+CALL POSNAM(ILUNAM,'NAM_SFX_WAVE_CPL',GFOUND,ILUOUT)
+!
+IF (GFOUND) THEN
+   READ(UNIT=ILUNAM,NML=NAM_SFX_WAVE_CPL)
+ELSE
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'NAM_SFX_WAVE_CPL not found : Surfex not coupled with wave model'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+   WRITE(ILUOUT,*)'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
+ENDIF
+!
 CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM)
 !
 IF(XTSTEP_CPL_LAND>0.0)LCPL_LAND=.TRUE.
 IF(XTSTEP_CPL_LAKE>0.0)LCPL_LAKE=.TRUE.
 IF(XTSTEP_CPL_SEA >0.0)LCPL_SEA =.TRUE.
+IF(XTSTEP_CPL_WAVE>0.0)LCPL_WAVE=.TRUE.
 !
-IF(.NOT.LCPL_LAND.AND..NOT.LCPL_SEA)THEN
+IF(.NOT.LCPL_LAND.AND..NOT.LCPL_SEA.AND..NOT.LCPL_WAVE)THEN
   CALL ABOR1_SFX('SFX_OASIS_READ_NAM: OASIS USED BUT NAMELIST NOT FOUND')
 ENDIF
 !
@@ -355,10 +372,18 @@ IF(LCPL_SEA)THEN
   YCOMMENT='Snowfall rate'
   CALL CHECK_FIELD(CSEA_SNOW,YKEY,YCOMMENT,YSEA,KOUT)
 !
+  YKEY  ='CSEA_EVPR'
+  YCOMMENT='Evap. - Precip. rate'
+  CALL CHECK_FIELD(CSEA_EVPR,YKEY,YCOMMENT,YSEA,KOUT)
+!
   YKEY  ='CSEA_WATF'
   YCOMMENT='Freshwater flux'
   CALL CHECK_FIELD(CSEA_WATF,YKEY,YCOMMENT,YSEA,KOUT)
 !
+  YKEY  ='CSEA_PRES'
+  YCOMMENT='Surface pressure'
+  CALL CHECK_FIELD(CSEA_PRES,YKEY,YCOMMENT,YSEA,KOUT)
+!
 ! Sea Input variables
 !
   YKEY  ='CSEA_SST'
@@ -415,6 +440,57 @@ IF(LCPL_SEA)THEN
 !  
 ENDIF
 !
+!-------------------------------------------------------------------------------
+!
+!*       6.     Check status for Wave fields 
+!               ---------------------------
+!
+IF(LCPL_WAVE)THEN
+!
+  IF(YINIT/='PRE')THEN
+    IF(MOD(XTSTEP_CPL_WAVE,PTSTEP_SURF)/=0.)THEN
+      WRITE(ILUOUT,*)'! MOD(XTSTEP_SURF,XTSTEP_CPL_WAVE) /= 0     !'
+      WRITE(ILUOUT,*)'XTSTEP_SURF =',PTSTEP_SURF,'XTSTEP_CPL_WAVE = ',XTSTEP_CPL_WAVE
+      IF(PTSTEP_SURF>XTSTEP_CPL_WAVE) &
+      WRITE(ILUOUT,*)'! XTSTEP_SURF (model timestep) is superiror to  XTSTEP_CPL_WAVE !'
+      CALL ABOR1_SFX('SFX_OASIS_READ_NAM: XTSTEP_SURF and XTSTEP_CPL_WAVE not consistent !!!')
+    ENDIF
+  ENDIF
+!
+! Wave Output variables
+!
+  YKEY  ='CWAVE_U10'
+  YCOMMENT='10m u-wind speed'
+  CALL CHECK_FIELD(CWAVE_U10,YKEY,YCOMMENT,YWAVE,KOUT)
+!
+  YKEY  ='CWAVE_V10'
+  YCOMMENT='10m v-wind speed'
+  CALL CHECK_FIELD(CWAVE_V10,YKEY,YCOMMENT,YWAVE,KOUT)
+!
+! Wave Input variables
+!
+  YKEY  ='CWAVE_CHA'
+  YCOMMENT='Charnock Coefficient'
+  CALL CHECK_FIELD(CWAVE_CHA,YKEY,YCOMMENT,YWAVE,KIN)
+!
+  YKEY  ='CWAVE_UCU'
+  YCOMMENT='u-current velocity'
+  CALL CHECK_FIELD(CWAVE_UCU,YKEY,YCOMMENT,YWAVE,KIN)
+!
+  YKEY  ='CWAVE_VCU'
+  YCOMMENT='v-current velocity'
+  CALL CHECK_FIELD(CWAVE_VCU,YKEY,YCOMMENT,YWAVE,KIN)
+!
+  YKEY  ='CWAVE_HS'
+  YCOMMENT='Significant wave height'
+  CALL CHECK_FIELD(CWAVE_HS,YKEY,YCOMMENT,YWAVE,KIN)
+!
+  YKEY  ='CWAVE_TP'
+  YCOMMENT='Peak period'
+  CALL CHECK_FIELD(CWAVE_TP,YKEY,YCOMMENT,YWAVE,KIN)
+!  
+ENDIF
+!
 IF (LHOOK) CALL DR_HOOK('SFX_OASIS_READ_NAM',1,ZHOOK_HANDLE)
 !
 !-------------------------------------------------------------------------------
@@ -455,7 +531,9 @@ IF(LEN_TRIM(HFIELD)==0)THEN
      CASE(YSEA)
           YNAMELIST='NAM_SFX_SEA_CPL'
      CASE(YLAKE)
-          YNAMELIST='NAM_SFX_LAKE_CPL'          
+          YNAMELIST='NAM_SFX_LAKE_CPL' 
+     CASE(YWAVE)
+          YNAMELIST='NAM_SFX_WAVE_CPL'
      CASE DEFAULT
           CALL ABOR1_SFX('SFX_OASIS_READ_NAM: TYPE NOT SUPPORTED OR IMPLEMENTD : '//TRIM(HTYP))               
   END SELECT
@@ -469,7 +547,7 @@ IF(LEN_TRIM(HFIELD)==0)THEN
 ! For oceanic coupling do not stop the model if a field from surfex to ocean is
 ! not  done because many particular case can be used
 !
-  IF(KID==0.AND.HTYP/=YLAND)THEN
+  IF((KID==0.OR.KID==1).AND.HTYP/=YLAND)THEN
     LSTOP=.FALSE.
   ELSE
     LSTOP=.TRUE.
index 124cb30..8aa1821 100644 (file)
@@ -4,11 +4,13 @@
 !SFX_LIC for details. version 1.
 !#########
 SUBROUTINE SFX_OASIS_RECV(HPROGRAM,KI,KSW,PTIMEC,                &
-                          ORECV_LAND, ORECV_SEA,                 &
+                          ORECV_LAND, ORECV_SEA, ORECV_WAVE,     &
                           PLAND_WTD,PLAND_FWTD,                  &
-                          PLAND_FFLOOD, PLAND_PIFLOOD,           &
+                          PLAND_FFLOOD,PLAND_PIFLOOD,            &
                           PSEA_SST,PSEA_UCU,PSEA_VCU,            &
-                          PSEAICE_SIT,PSEAICE_CVR,PSEAICE_ALB    )
+                          PSEAICE_SIT,PSEAICE_CVR,PSEAICE_ALB,   &
+                          PWAVE_CHA,PWAVE_UCU,PWAVE_VCU,         &
+                          PWAVE_HS,PWAVE_TP             )
 !########################################
 !
 !!****  *SFX_OASIS_RECV* - Receive coupling fields from oasis
@@ -37,12 +39,14 @@ SUBROUTINE SFX_OASIS_RECV(HPROGRAM,KI,KSW,PTIMEC,                &
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    10/2013
+!!      Modified    11/2014 : J. Pianezze - add wave coupling parameters
+!
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_SURF_PAR,   ONLY : XUNDEF
+USE MODD_SURF_PAR,   ONLY : XUNDEF, NUNDEF
 !
 USE MODD_SFX_OASIS
 !
@@ -67,6 +71,7 @@ REAL,                   INTENT(IN)  :: PTIMEC    ! Cumulated run time step (s)
 !
 LOGICAL,                INTENT(IN)  :: ORECV_LAND
 LOGICAL,                INTENT(IN)  :: ORECV_SEA
+LOGICAL,                INTENT(IN)  :: ORECV_WAVE
 !
 REAL, DIMENSION(KI),    INTENT(OUT) :: PLAND_WTD     ! Land water table depth (m)
 REAL, DIMENSION(KI),    INTENT(OUT) :: PLAND_FWTD    ! Land grid-cell fraction of water table rise (-)
@@ -81,6 +86,11 @@ REAL, DIMENSION(KI),    INTENT(OUT) :: PSEAICE_SIT ! Sea-ice Temperature (K)
 REAL, DIMENSION(KI),    INTENT(OUT) :: PSEAICE_CVR ! Sea-ice cover (-)
 REAL, DIMENSION(KI),    INTENT(OUT) :: PSEAICE_ALB ! Sea-ice albedo (-)
 !
+REAL, DIMENSION(KI),    INTENT(OUT) :: PWAVE_CHA ! Charnock coefficient (-)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PWAVE_UCU ! u-current velocity (m/s)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PWAVE_VCU ! v-current velocity (m/s)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PWAVE_HS  ! Significant wave height (m)
+REAL, DIMENSION(KI),    INTENT(OUT) :: PWAVE_TP  ! Peak period (s)
 !
 !*       0.2   Declarations of local variables
 !              -------------------------------
@@ -179,20 +189,26 @@ IF(ORECV_SEA)THEN
 !
 ! * Receive ocean input fields
 !
-  YCOMMENT='Sea surface temperature'
-  CALL OASIS_GET(NSEA_SST_ID,IDATE,ZREAD(:,:),IERR)
-  CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
-  PSEA_SST(:)=ZREAD(:,1)
+  IF(NSEA_SST_ID/=NUNDEF)THEN
+    YCOMMENT='Sea surface temperature'
+    CALL OASIS_GET(NSEA_SST_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PSEA_SST(:)=ZREAD(:,1)
+  ENDIF
 !
-  YCOMMENT='Sea u-current stress'
-  CALL OASIS_GET(NSEA_UCU_ID,IDATE,ZREAD(:,:),IERR)
-  CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
-  PSEA_UCU(:)=ZREAD(:,1)
+  IF(NSEA_UCU_ID/=NUNDEF)THEN
+    YCOMMENT='Sea u-current stress'
+    CALL OASIS_GET(NSEA_UCU_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PSEA_UCU(:)=ZREAD(:,1)
+  ENDIF
 !
-  YCOMMENT='Sea v-current stress'
-  CALL OASIS_GET(NSEA_VCU_ID,IDATE,ZREAD(:,:),IERR)
-  CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
-  PSEA_VCU(:)=ZREAD(:,1)
+  IF(NSEA_VCU_ID/=NUNDEF)THEN
+    YCOMMENT='Sea v-current stress'
+    CALL OASIS_GET(NSEA_VCU_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PSEA_VCU(:)=ZREAD(:,1)
+  ENDIF
 !
   IF(LCPL_SEAICE)THEN
 !
@@ -216,6 +232,62 @@ IF(ORECV_SEA)THEN
 ENDIF
 !-------------------------------------------------------------------------------
 !
+!*       4.     Get Wave variables :
+!               -----------------------------
+!
+!
+IF(ORECV_WAVE)THEN
+!
+! * Init ocean input fields
+!
+  ZREAD(:,:) = XUNDEF
+!
+  PWAVE_CHA (:) = XUNDEF
+  PWAVE_UCU  (:) = XUNDEF
+  PWAVE_VCU  (:) = XUNDEF
+  PWAVE_HS  (:) = XUNDEF
+  PWAVE_TP  (:) = XUNDEF
+!
+! * Receive wave input fields
+!
+  IF(NWAVE_CHA_ID/=NUNDEF)THEN
+    YCOMMENT='Charnock coefficient'
+    CALL OASIS_GET(NWAVE_CHA_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PWAVE_CHA(:)=ZREAD(:,1)
+  ENDIF
+!
+  IF(NWAVE_UCU_ID/=NUNDEF)THEN
+    YCOMMENT='u-current velocity'
+    CALL OASIS_GET(NWAVE_UCU_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PWAVE_UCU(:)=ZREAD(:,1)
+  ENDIF
+!
+  IF(NWAVE_VCU_ID/=NUNDEF)THEN
+    YCOMMENT='v-current velocity'
+    CALL OASIS_GET(NWAVE_VCU_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PWAVE_VCU(:)=ZREAD(:,1)
+  ENDIF
+!
+  IF(NWAVE_HS_ID/=NUNDEF)THEN
+    YCOMMENT='Significant wave height'
+    CALL OASIS_GET(NWAVE_HS_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PWAVE_HS(:)=ZREAD(:,1)
+  ENDIF
+!
+  IF(NWAVE_TP_ID/=NUNDEF)THEN
+    YCOMMENT='Peak period'
+    CALL OASIS_GET(NWAVE_TP_ID,IDATE,ZREAD(:,:),IERR)
+    CALL CHECK_RECV(ILUOUT,IERR,YCOMMENT)
+    PWAVE_TP(:)=ZREAD(:,1)
+  ENDIF
+!
+ENDIF
+!-------------------------------------------------------------------------------
+!
 IF (LHOOK) CALL DR_HOOK('SFX_OASIS_RECV',1,ZHOOK_HANDLE)
 !
 !-------------------------------------------------------------------------------
index c1982c5..6d20b47 100644 (file)
@@ -3,13 +3,14 @@
 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !SFX_LIC for details. version 1.
 !#########
-SUBROUTINE SFX_OASIS_SEND(KLUOUT,KI,KDATE,OSEND_LAND,OSEND_LAKE,OSEND_SEA,      &
+SUBROUTINE SFX_OASIS_SEND(KLUOUT,KI,KDATE,OSEND_LAND,OSEND_LAKE,OSEND_SEA,OSEND_WAVE,  &
                           PLAND_RUNOFF,PLAND_DRAIN,PLAND_CALVING,               &
                           PLAND_SRCFLOOD,                                       &
                           PLAKE_EVAP,PLAKE_RAIN,PLAKE_SNOW,PLAKE_WATF,          &
                           PSEA_FWSU,PSEA_FWSV,PSEA_HEAT,PSEA_SNET,PSEA_WIND,    &
-                          PSEA_FWSM,PSEA_EVAP,PSEA_RAIN,PSEA_SNOW,PSEA_WATF,    &
-                          PSEAICE_HEAT,PSEAICE_SNET,PSEAICE_EVAP                )
+                          PSEA_FWSM,PSEA_EVAP,PSEA_RAIN,PSEA_SNOW,PSEA_EVPR,    &
+                          PSEA_WATF,PSEA_PRES,PSEAICE_HEAT,PSEAICE_SNET,        &
+                          PSEAICE_EVAP,PWAVE_U10,PWAVE_V10            )
 !###########################################
 !
 !!****  *SFX_OASIS_SEND* - Send coupling fields
@@ -42,13 +43,15 @@ SUBROUTINE SFX_OASIS_SEND(KLUOUT,KI,KDATE,OSEND_LAND,OSEND_LAKE,OSEND_SEA,
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    10/2013
-!!    10/2016 B. Decharme : bug surface/groundwater coupling 
+!!      Modified    11/2014 : J. Pianezze - add wave coupling parameters
+!!                                          and surface pressure for ocean coupling
+!!    10/2016 B. Decharme : bug surface/groundwater coupling
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODN_SFX_OASIS,  ONLY : XTSTEP_CPL_SEA, XTSTEP_CPL_LAKE, &
+USE MODN_SFX_OASIS,  ONLY : XTSTEP_CPL_SEA, XTSTEP_CPL_WAVE, XTSTEP_CPL_LAKE, &
                             XTSTEP_CPL_LAND
 !                    
 USE MODD_SURF_PAR,   ONLY : XUNDEF, NUNDEF
@@ -75,6 +78,7 @@ INTEGER,             INTENT(IN) :: KDATE  ! current coupling time step (s)
 LOGICAL,             INTENT(IN) :: OSEND_LAND
 LOGICAL,             INTENT(IN) :: OSEND_LAKE
 LOGICAL,             INTENT(IN) :: OSEND_SEA
+LOGICAL,             INTENT(IN) :: OSEND_WAVE
 !
 REAL, DIMENSION(KI), INTENT(IN) :: PLAND_RUNOFF    ! Cumulated Surface runoff             (kg/m2)
 REAL, DIMENSION(KI), INTENT(IN) :: PLAND_DRAIN     ! Cumulated Deep drainage              (kg/m2)
@@ -95,12 +99,17 @@ REAL, DIMENSION(KI), INTENT(IN) :: PSEA_FWSM  ! Cumulated wind stress
 REAL, DIMENSION(KI), INTENT(IN) :: PSEA_EVAP  ! Cumulated Evaporation             (kg/m2)
 REAL, DIMENSION(KI), INTENT(IN) :: PSEA_RAIN  ! Cumulated Rainfall rate           (kg/m2)
 REAL, DIMENSION(KI), INTENT(IN) :: PSEA_SNOW  ! Cumulated Snowfall rate           (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_EVPR  ! Evap. - Precip. rate              (kg/m2)
 REAL, DIMENSION(KI), INTENT(IN) :: PSEA_WATF  ! Cumulated freshwater flux         (kg/m2)
+REAL, DIMENSION(KI), INTENT(IN) :: PSEA_PRES  ! Cumulated Surface pressure        (Pa.s)
 !
 REAL, DIMENSION(KI), INTENT(IN) :: PSEAICE_HEAT ! Cumulated Sea-ice non solar net heat flux (J/m2)
 REAL, DIMENSION(KI), INTENT(IN) :: PSEAICE_SNET ! Cumulated Sea-ice solar net heat flux     (J/m2)
 REAL, DIMENSION(KI), INTENT(IN) :: PSEAICE_EVAP ! Cumulated Sea-ice sublimation             (kg/m2)
 !
+REAL, DIMENSION(KI), INTENT(IN) :: PWAVE_U10  ! 
+REAL, DIMENSION(KI), INTENT(IN) :: PWAVE_V10  !
+!
 !*       0.2   Declarations of local variables
 !              -------------------------------
 !
@@ -268,6 +277,13 @@ IF(OSEND_SEA)THEN
     CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
   ENDIF
 !
+  IF(NSEA_EVPR_ID/=NUNDEF)THEN
+    YCOMMENT='Evap. - Precip. rate over sea'
+    CALL OUTVAR(PSEA_EVPR,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_EVPR_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
   IF(NSEA_WATF_ID/=NUNDEF)THEN
     YCOMMENT='Freshwater flux over sea (P-E)'
     CALL OUTVAR(PSEA_WATF,XTSTEP_CPL_SEA,ZWRITE(:,1))
@@ -275,6 +291,13 @@ IF(OSEND_SEA)THEN
     CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
   ENDIF
 !
+  IF(NSEA_PRES_ID/=NUNDEF)THEN
+    YCOMMENT='Surface pressure'
+    CALL OUTVAR(PSEA_PRES,XTSTEP_CPL_SEA,ZWRITE(:,1))
+    CALL OASIS_PUT(NSEA_PRES_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
 ! * Sea-ice output fields (in W/m2 or kg/m2/s)
 !
   IF(LCPL_SEAICE)THEN
@@ -304,6 +327,30 @@ IF(OSEND_SEA)THEN
 !
 ENDIF
 !
+!-------------------------------------------------------------------------------
+!
+!*       5.     Send wave fields to OASIS :
+!               --------------------------
+IF(OSEND_WAVE)THEN
+!
+! * Send output fields
+!
+  IF(NWAVE_U10_ID/=NUNDEF)THEN
+    YCOMMENT='10m u-wind speed'
+    ZWRITE(:,1) = PWAVE_U10(:)
+    CALL OASIS_PUT(NWAVE_U10_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+  IF(NWAVE_V10_ID/=NUNDEF)THEN
+    YCOMMENT='10m v-wind speed'
+    ZWRITE(:,1) = PWAVE_V10(:)
+    CALL OASIS_PUT(NWAVE_V10_ID,KDATE,ZWRITE(:,:),IERR)
+    CALL CHECK_SFX_SEND(KLUOUT,IERR,YCOMMENT,ZWRITE(:,1))
+  ENDIF
+!
+ENDIF
+!
 IF (LHOOK) CALL DR_HOOK('SFX_OASIS_SEND',1,ZHOOK_HANDLE)
 !
 !-------------------------------------------------------------------------------
index 1916874..32a1be5 100644 (file)
 !!
 !!    MODIFICATIONS
 !!    -------------
+!!      J. Pianezze 08/2016 replacement of MPI_COMM_WOLRD by NMNH_COMM_WORLD
 !!
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
+#ifdef MNH_PARALLEL
+USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
+#endif
+!
 USE MODD_DATA_COVER_PAR, ONLY : JPCOVER
 !
 USE MODI_WRITE_SURF
@@ -77,14 +82,12 @@ INTEGER   :: IINFO
 !
 !* ascendant compatibility
 IF (LHOOK) CALL DR_HOOK('WRITE_LCOVER',0,ZHOOK_HANDLE)
-!
 #ifdef MNH_PARALLEL
 #ifndef NOMPI
-CALL MPI_ALLREDUCE(OCOVER, GCOVER, SIZE(OCOVER),MPI_LOGICAL, MPI_LOR, MPI_COMM_WORLD, IINFO)
+CALL MPI_ALLREDUCE(OCOVER, GCOVER, SIZE(OCOVER),MPI_LOGICAL, MPI_LOR, NMNH_COMM_WORLD, IINFO)
 OCOVER(:)=GCOVER(:)
 #endif
 #endif
-!
 YRECFM='COVER_LIST'
 YCOMMENT='(LOGICAL LIST)'
 CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,OCOVER(:),IRESP,HCOMMENT=YCOMMENT,HDIR='-')
index ea47e0a..69bb0a8 100644 (file)
@@ -36,6 +36,9 @@
 !!      S. Belamari 03/2014   Include sea surface salinity XSSS
 !!      R. Séférian 01/2015 : introduce interactive ocean surface albedo
 !!      S. Senesi   08/2015 : fix units in some HCOMMENTs
+!!      Modified    03/2014 : M.N. Bouin  ! possibility of wave parameters
+!!                                        ! from external source
+!!      Modified    11/2014 : J. Pianezze ! add currents and charnock coefficient
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -48,9 +51,11 @@ USE MODD_OCEAN_n, ONLY : OCEAN_t
 USE MODD_OCEAN_REL_n, ONLY : OCEAN_REL_t
 USE MODD_SEAFLUX_n, ONLY : SEAFLUX_t
 !
+USE MODD_SFX_OASIS,  ONLY : LCPL_WAVE, LCPL_SEA
+!
 USE MODI_WRITE_SURF
 USE MODI_WRITESURF_OCEAN_n
-USE MODI_WRITESURF_SEAICE_N
+USE MODI_WRITESURF_SEAICE_n
 !
 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
 USE PARKIND1  ,ONLY : JPRB
@@ -130,7 +135,45 @@ YCOMMENT='SST (K)'
 YRECFM='Z0SEA'
 YCOMMENT='Z0SEA (m)'
  CALL WRITE_SURF(HSELECT, HPROGRAM,YRECFM,S%XZ0(:),IRESP,HCOMMENT=YCOMMENT)
-!
+ !
+!* significant height
+!
+YRECFM='HS'
+YCOMMENT='HS (m)'
+ CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,S%XHS(:),IRESP,HCOMMENT=YCOMMENT)
+!
+!* peak period
+!
+YRECFM='TP'
+YCOMMENT='TP (s)'
+ CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,S%XTP(:),IRESP,HCOMMENT=YCOMMENT)
+!
+!
+IF (LCPL_WAVE) THEN
+  !
+  !* Charnock coefficient
+  !
+  YRECFM='CHARN'
+  YCOMMENT='CHARN (-)'
+  CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,S%XCHARN(:),IRESP,HCOMMENT=YCOMMENT)
+  !
+END IF
+!
+IF (LCPL_WAVE .OR. LCPL_SEA) THEN
+  !
+  !* u-current velocity
+  !
+  YRECFM='UMER'
+  YCOMMENT='UMER (m/s)'
+  CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,S%XUMER(:),IRESP,HCOMMENT=YCOMMENT)
+  !
+  !* v-current velocity
+  !
+  YRECFM='VMER'
+  YCOMMENT='VMER (m/s)'
+  CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,S%XVMER(:),IRESP,HCOMMENT=YCOMMENT)
+  !
+ENDIF
 !
 !* sea surface salinity
 !