From 2974c734f0fcb86ff7bfdbffb34412d56995b181 Mon Sep 17 00:00:00 2001 From: Juan Escobar <escj@aero.obs-mip.fr> Date: Thu, 24 May 2018 15:09:10 +0200 Subject: [PATCH] Juan 24/05/2018: COUPLING , move modified OASIS/MNH source to original/true MNH --- src/MNH/ground_paramn.f90 | 56 ++++++++++++++++++++++++++++----- src/MNH/ini_modeln.f90 | 10 ++++++ src/MNH/mesonh.f90 | 65 +++++++++++++++++++++++++++++++++++++-- 3 files changed, 121 insertions(+), 10 deletions(-) diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90 index 0c180144e..a492a36b3 100644 --- a/src/MNH/ground_paramn.f90 +++ b/src/MNH/ground_paramn.f90 @@ -98,9 +98,10 @@ END MODULE MODI_GROUND_PARAM_n ! (P.Tulet ) 01/11/03 externalisation of the surface chemistry! !! (D.Gazen) 01/12/03 change emissions handling for surf. externalization !! (J.escobar) 18/10/2012 missing USE MODI_COUPLING_SURF_ATM_n & MODI_DIAG_SURF_ATM_n -! (J.escobar) 2/2014 add Forefire coupling -!! 06/2016 (G.Delautier) phasage surfex 8 +! (J.escobar) 02/2014 add Forefire coupling +!! (G.Delautier) 06/2016 phasage surfex 8 !! (B.Vie) 2016 LIMA +!! (J.Pianezze) 08/2016 add send/recv oasis functions !! (M.Leriche) 24/03/16 remove flag for chemical surface fluxes !! (M.Leriche) 01/07/2017 Add DIAG chimical surface fluxes !! 01/2018 (G.Delautier) SURFEX 8.1 @@ -113,6 +114,16 @@ END MODULE MODI_GROUND_PARAM_n !* 0. DECLARATIONS ! ------------ ! +! +#ifdef CPLOASIS +USE MODI_GET_HALO +USE MODI_MNH_OASIS_RECV +USE MODI_MNH_OASIS_SEND +USE MODD_SFX_OASIS, ONLY : LOASIS +USE MODD_DYN, ONLY : XSEGLEN +#endif +! +USE MODD_LUNIT_n, ONLY: TLUOUT USE MODD_CST, ONLY : XP00, XCPD, XRD, XRV,XRHOLW, XDAY, XPI, XLVTT, XMD, XAVOGADRO USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF USE MODD_DYN_n, ONLY : XTSTEP @@ -336,10 +347,12 @@ CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: YSV_SURF ! name of the scalar var ! sent to SURFEX ! REAL :: ZTIMEC +INTEGER :: ILUOUT ! logical unit ! !------------------------------------------------------------------------------- ! ! +ILUOUT=TLUOUT%NLU IKB= 1+JPVEXT IKU=NKMAX + 2* JPVEXT IKE=IKU-JPVEXT @@ -553,6 +566,22 @@ CALL RESHAPE_SURF(IDIM1D) ! call to have the cumulated time since beginning of simulation ! CALL DATETIME_DISTANCE(TDTSEG,TDTCUR,ZTIMEC) + +#ifdef CPLOASIS +IF (LOASIS) THEN + IF ( MOD(ZTIMEC,1.0) .LE. 1E-2 .OR. (1.0 - MOD(ZTIMEC,1.0)) .LE. 1E-2 ) THEN + IF ( NINT(ZTIMEC-(XSEGLEN-XTSTEP)) .LT. 0 ) THEN + WRITE(ILUOUT,*) '----------------------------' + WRITE(ILUOUT,*) ' Reception des champs avec OASIS' + WRITE(ILUOUT,*) 'NINT(ZTIMEC)=', NINT(ZTIMEC) + CALL MNH_OASIS_RECV(CPROGRAM,IDIM1D,SIZE(XSW_BANDS),ZTIMEC+XTSTEP,XTSTEP, & + ZP_ZENITH,XSW_BANDS , & + ZP_TSRAD,ZP_DIR_ALB,ZP_SCA_ALB,ZP_EMIS,ZP_TSURF) + WRITE(ILUOUT,*) '----------------------------' + END IF + END IF +END IF +#endif ! ! Call to surface schemes ! @@ -568,7 +597,20 @@ CALL COUPLING_SURF_ATM_n(YSURF_CUR,'MESONH', 'E',ZTIMEC, ZP_PET_A_COEF, ZP_PEQ_A_COEF, ZP_PET_B_COEF, ZP_PEQ_B_COEF, & 'OK' ) ! - +#ifdef CPLOASIS +IF (LOASIS) THEN + IF ( MOD(ZTIMEC,1.0) .LE. 1E-2 .OR. (1.0 - MOD(ZTIMEC,1.0)) .LE. 1E-2 ) THEN + IF (NINT(ZTIMEC-(XSEGLEN-XTSTEP)) .LT. 0) THEN + WRITE(ILUOUT,*) '----------------------------' + WRITE(ILUOUT,*) ' Envoi des champs avec OASIS' + WRITE(ILUOUT,*) 'NINT(ZTIMEC)=', NINT(ZTIMEC) + CALL MNH_OASIS_SEND(CPROGRAM,IDIM1D,ZTIMEC+XTSTEP,XTSTEP) + WRITE(ILUOUT,*) '----------------------------' + END IF + END IF +END IF +#endif +! IF (CPROGRAM=='DIAG ' .OR. LDIAG_IN_RUN) THEN CALL DIAG_SURF_ATM_n(YSURF_CUR,'MESONH') CALL MNHGET_SURF_PARAM_n(PRN=ZP_RN,PH=ZP_H,PLE=ZP_LE,PGFLUX=ZP_GFLUX, & @@ -637,10 +679,10 @@ END IF !* conversion from chemistry flux (molec/m2/s) to (ppp.m.s-1) ! IF (LUSECHEM) THEN - DO JSV=NSV_CHEMBEG,NSV_CHEMEND - PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB)) - IF ((LCHEMDIAG).AND.(CPROGRAM == 'DIAG ')) XCHFLX(:,:,JSV) = PSFSV(:,:,JSV) - END DO + DO JSV=NSV_CHEMBEG,NSV_CHEMEND + PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB)) + IF ((LCHEMDIAG).AND.(CPROGRAM == 'DIAG ')) XCHFLX(:,:,JSV) = PSFSV(:,:,JSV) + END DO ELSE PSFSV(:,:,NSV_CHEMBEG:NSV_CHEMEND) = 0. END IF diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index dbe00b678..c16588e4a 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -265,6 +265,7 @@ END MODULE MODI_INI_MODEL_n !! J.Escobar : 01/06/2016 : correct check limit of NRIM versus local subdomain size IDIM !! 06/2016 (G.Delautier) phasage surfex 8 !! Modification 01/2016 (JP Pinty) Add LIMA +!! Aug. 2016 (J.Pianezze) Add SFX_OASIS_READ_NAM function from SurfEx !! M.Leriche 2016 Chemistry !! 10/2016 M.Mazoyer New KHKO output fields !! 10/2016 (C.Lac) Add max values @@ -281,6 +282,11 @@ END MODULE MODI_INI_MODEL_n ! !* 0. DECLARATIONS ! ------------ +! +#ifdef CPLOASIS + USE MODI_SFX_OASIS_READ_NAM +#endif +! USE MODE_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll USE MODE_IO_ll @@ -2068,6 +2074,10 @@ IF (CSURF=='EXTE' .AND. (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ')) THEN END IF ! CALL GOTO_SURFEX(KMI) +#ifdef CPLOASIS + CALL SFX_OASIS_READ_NAM(CPROGRAM,XTSTEP) + WRITE(*,*) 'SFX-OASIS: READ NAM_SFX_SEA_CPL OK' +#endif !* initialization of surface CALL INIT_GROUND_PARAM_n ('ALL',SIZE(CSV),CSV,ZCO2, & XZENITH,XAZIM,XSW_BANDS,XLW_BANDS,ZDIR_ALB,ZSCA_ALB, & diff --git a/src/MNH/mesonh.f90 b/src/MNH/mesonh.f90 index 46cd7c3d8..6234bbf8c 100644 --- a/src/MNH/mesonh.f90 +++ b/src/MNH/mesonh.f90 @@ -69,17 +69,24 @@ !! J.Stein 08/04/99 general case of the sequential form !! V. Masson 15/03/99 MASDEV number and PROGRAM name !! J.P. Chaboureau 15/03/04 loop limited to 100000 iterations -!! remplaced by infinite loop +!! remplaced by infinite loop !! J.Escobar 19/03/2008 rename INIT to INIT_MNH --> grib problem !! J.Escobar 6/11/2014 remove test on LCHECK otherwise never call MPPDB_INIT -!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 -!! 06/2016 (G.Delautier) phasage surfex 8 +!! J.Escobar 15/09/2015 WENO5 & JPHEXT <> 1 +!! G.Delautier 06/2016 phasage surfex 8 +!! J. Pianezze 01/08/2016 add sfxoasis coupling functions !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS ! ------------ ! +#ifdef CPLOASIS + USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD, IP + USE MODD_DYN_n, ONLY : XTSTEP + USE MODD_SFX_OASIS, ONLY : LOASIS, LOASIS_GRID +#endif +! USE MODD_CONF USE MODD_NESTING USE MODD_CONF_n @@ -97,6 +104,13 @@ USE MODI_VERSION USE MODI_INIT_MNH USE MODD_MNH_SURFEX_n ! +#ifdef CPLOASIS + USE MODI_SFX_OASIS_INIT + USE MODI_MNH_OASIS_GRID + USE MODI_MNH_OASIS_DEFINE + USE MODI_SFX_OASIS_END +#endif +! USE MODE_MPPDB ! IMPLICIT NONE @@ -109,14 +123,27 @@ LOGICAL :: GEXIT ! flag for the end of the ! temporal loop INTEGER :: IINFO_ll ! return code of // routines ! +#ifdef CPLOASIS + CHARACTER(LEN=28) :: CNAMELIST + LOGICAL :: L_MASTER +#endif +! !------------------------------------------------------------------------------- ! !* 1. INITIALIZATION ! -------------- ! Switch to model 1 variables +#ifndef CPLOASIS CALL MPPDB_INIT() +#endif +! CALL GOTO_MODEL(1,ONOFIELDLIST=.TRUE.) ! +#ifdef CPLOASIS + CNAMELIST='EXSEG1.nam' + CALL SFX_OASIS_INIT(CNAMELIST, NMNH_COMM_WORLD) +#endif +! CALL INITIO_ll() ! CALL VERSION @@ -127,6 +154,33 @@ CALL INIT_MNH ! GEXIT=.FALSE. ! +! +!* 1.1 INITIALIZATION GRID OASIS +! ------------------------- +! +! +#ifdef CPLOASIS +IF(IP==1) THEN + L_MASTER=.TRUE. +ELSE + L_MASTER=.FALSE. +END IF +! +IF (LOASIS_GRID) THEN + CALL MNH_OASIS_GRID(L_MASTER,NMNH_COMM_WORLD) +ENDIF +#endif +! +! +!* 1.2 INITIALIZATION PARTITION OASIS +! ------------------------------ +! +#ifdef CPLOASIS +IF (LOASIS) THEN + CALL MNH_OASIS_DEFINE(CPROGRAM,IP) +END IF +#endif +! !------------------------------------------------------------------------------- ! !* 2. TEMPORAL LOOP @@ -170,6 +224,11 @@ IF (LCHECK) THEN CALL MPPDB_BARRIER() ELSE CALL END_PARA_ll(IINFO_ll) +#ifdef CPLOASIS +IF (LOASIS) THEN + CALL SFX_OASIS_END +END IF +#endif END IF ! ! -- GitLab