Skip to content
Snippets Groups Projects
Commit 2974c734 authored by Juan Escobar's avatar Juan Escobar
Browse files

Juan 24/05/2018: COUPLING , move modified OASIS/MNH source to original/true MNH

parent 25c061e0
No related branches found
No related tags found
No related merge requests found
...@@ -98,9 +98,10 @@ END MODULE MODI_GROUND_PARAM_n ...@@ -98,9 +98,10 @@ END MODULE MODI_GROUND_PARAM_n
! (P.Tulet ) 01/11/03 externalisation of the surface chemistry! ! (P.Tulet ) 01/11/03 externalisation of the surface chemistry!
!! (D.Gazen) 01/12/03 change emissions handling for surf. externalization !! (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) 18/10/2012 missing USE MODI_COUPLING_SURF_ATM_n & MODI_DIAG_SURF_ATM_n
! (J.escobar) 2/2014 add Forefire coupling ! (J.escobar) 02/2014 add Forefire coupling
!! 06/2016 (G.Delautier) phasage surfex 8 !! (G.Delautier) 06/2016 phasage surfex 8
!! (B.Vie) 2016 LIMA !! (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) 24/03/16 remove flag for chemical surface fluxes
!! (M.Leriche) 01/07/2017 Add DIAG chimical surface fluxes !! (M.Leriche) 01/07/2017 Add DIAG chimical surface fluxes
!! 01/2018 (G.Delautier) SURFEX 8.1 !! 01/2018 (G.Delautier) SURFEX 8.1
...@@ -113,6 +114,16 @@ END MODULE MODI_GROUND_PARAM_n ...@@ -113,6 +114,16 @@ END MODULE MODI_GROUND_PARAM_n
!* 0. DECLARATIONS !* 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_CST, ONLY : XP00, XCPD, XRD, XRV,XRHOLW, XDAY, XPI, XLVTT, XMD, XAVOGADRO
USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF
USE MODD_DYN_n, ONLY : XTSTEP USE MODD_DYN_n, ONLY : XTSTEP
...@@ -336,10 +347,12 @@ CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: YSV_SURF ! name of the scalar var ...@@ -336,10 +347,12 @@ CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: YSV_SURF ! name of the scalar var
! sent to SURFEX ! sent to SURFEX
! !
REAL :: ZTIMEC REAL :: ZTIMEC
INTEGER :: ILUOUT ! logical unit
! !
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
! !
ILUOUT=TLUOUT%NLU
IKB= 1+JPVEXT IKB= 1+JPVEXT
IKU=NKMAX + 2* JPVEXT IKU=NKMAX + 2* JPVEXT
IKE=IKU-JPVEXT IKE=IKU-JPVEXT
...@@ -553,6 +566,22 @@ CALL RESHAPE_SURF(IDIM1D) ...@@ -553,6 +566,22 @@ CALL RESHAPE_SURF(IDIM1D)
! call to have the cumulated time since beginning of simulation ! call to have the cumulated time since beginning of simulation
! !
CALL DATETIME_DISTANCE(TDTSEG,TDTCUR,ZTIMEC) 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 ! Call to surface schemes
! !
...@@ -568,7 +597,20 @@ CALL COUPLING_SURF_ATM_n(YSURF_CUR,'MESONH', 'E',ZTIMEC, ...@@ -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, & ZP_PET_A_COEF, ZP_PEQ_A_COEF, ZP_PET_B_COEF, ZP_PEQ_B_COEF, &
'OK' ) '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 IF (CPROGRAM=='DIAG ' .OR. LDIAG_IN_RUN) THEN
CALL DIAG_SURF_ATM_n(YSURF_CUR,'MESONH') 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, & CALL MNHGET_SURF_PARAM_n(PRN=ZP_RN,PH=ZP_H,PLE=ZP_LE,PGFLUX=ZP_GFLUX, &
...@@ -637,10 +679,10 @@ END IF ...@@ -637,10 +679,10 @@ END IF
!* conversion from chemistry flux (molec/m2/s) to (ppp.m.s-1) !* conversion from chemistry flux (molec/m2/s) to (ppp.m.s-1)
! !
IF (LUSECHEM) THEN IF (LUSECHEM) THEN
DO JSV=NSV_CHEMBEG,NSV_CHEMEND DO JSV=NSV_CHEMBEG,NSV_CHEMEND
PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB)) PSFSV(:,:,JSV) = ZSFTS(:,:,JSV) * XMD / ( XAVOGADRO * XRHODREF(:,:,IKB))
IF ((LCHEMDIAG).AND.(CPROGRAM == 'DIAG ')) XCHFLX(:,:,JSV) = PSFSV(:,:,JSV) IF ((LCHEMDIAG).AND.(CPROGRAM == 'DIAG ')) XCHFLX(:,:,JSV) = PSFSV(:,:,JSV)
END DO END DO
ELSE ELSE
PSFSV(:,:,NSV_CHEMBEG:NSV_CHEMEND) = 0. PSFSV(:,:,NSV_CHEMBEG:NSV_CHEMEND) = 0.
END IF END IF
......
...@@ -265,6 +265,7 @@ END MODULE MODI_INI_MODEL_n ...@@ -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 !! J.Escobar : 01/06/2016 : correct check limit of NRIM versus local subdomain size IDIM
!! 06/2016 (G.Delautier) phasage surfex 8 !! 06/2016 (G.Delautier) phasage surfex 8
!! Modification 01/2016 (JP Pinty) Add LIMA !! Modification 01/2016 (JP Pinty) Add LIMA
!! Aug. 2016 (J.Pianezze) Add SFX_OASIS_READ_NAM function from SurfEx
!! M.Leriche 2016 Chemistry !! M.Leriche 2016 Chemistry
!! 10/2016 M.Mazoyer New KHKO output fields !! 10/2016 M.Mazoyer New KHKO output fields
!! 10/2016 (C.Lac) Add max values !! 10/2016 (C.Lac) Add max values
...@@ -281,6 +282,11 @@ END MODULE MODI_INI_MODEL_n ...@@ -281,6 +282,11 @@ END MODULE MODI_INI_MODEL_n
! !
!* 0. DECLARATIONS !* 0. DECLARATIONS
! ------------ ! ------------
!
#ifdef CPLOASIS
USE MODI_SFX_OASIS_READ_NAM
#endif
!
USE MODE_ll USE MODE_ll
USE MODD_ARGSLIST_ll, ONLY : LIST_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll
USE MODE_IO_ll USE MODE_IO_ll
...@@ -2068,6 +2074,10 @@ IF (CSURF=='EXTE' .AND. (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ')) THEN ...@@ -2068,6 +2074,10 @@ IF (CSURF=='EXTE' .AND. (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG ')) THEN
END IF END IF
! !
CALL GOTO_SURFEX(KMI) 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 !* initialization of surface
CALL INIT_GROUND_PARAM_n ('ALL',SIZE(CSV),CSV,ZCO2, & CALL INIT_GROUND_PARAM_n ('ALL',SIZE(CSV),CSV,ZCO2, &
XZENITH,XAZIM,XSW_BANDS,XLW_BANDS,ZDIR_ALB,ZSCA_ALB, & XZENITH,XAZIM,XSW_BANDS,XLW_BANDS,ZDIR_ALB,ZSCA_ALB, &
......
...@@ -69,17 +69,24 @@ ...@@ -69,17 +69,24 @@
!! J.Stein 08/04/99 general case of the sequential form !! J.Stein 08/04/99 general case of the sequential form
!! V. Masson 15/03/99 MASDEV number and PROGRAM name !! V. Masson 15/03/99 MASDEV number and PROGRAM name
!! J.P. Chaboureau 15/03/04 loop limited to 100000 iterations !! 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 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 6/11/2014 remove test on LCHECK otherwise never call MPPDB_INIT
!! J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 !! J.Escobar 15/09/2015 WENO5 & JPHEXT <> 1
!! 06/2016 (G.Delautier) phasage surfex 8 !! 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 !! Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
!* 0. DECLARATIONS !* 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_CONF
USE MODD_NESTING USE MODD_NESTING
USE MODD_CONF_n USE MODD_CONF_n
...@@ -97,6 +104,13 @@ USE MODI_VERSION ...@@ -97,6 +104,13 @@ USE MODI_VERSION
USE MODI_INIT_MNH USE MODI_INIT_MNH
USE MODD_MNH_SURFEX_n 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 USE MODE_MPPDB
! !
IMPLICIT NONE IMPLICIT NONE
...@@ -109,14 +123,27 @@ LOGICAL :: GEXIT ! flag for the end of the ...@@ -109,14 +123,27 @@ LOGICAL :: GEXIT ! flag for the end of the
! temporal loop ! temporal loop
INTEGER :: IINFO_ll ! return code of // routines INTEGER :: IINFO_ll ! return code of // routines
! !
#ifdef CPLOASIS
CHARACTER(LEN=28) :: CNAMELIST
LOGICAL :: L_MASTER
#endif
!
!------------------------------------------------------------------------------- !-------------------------------------------------------------------------------
! !
!* 1. INITIALIZATION !* 1. INITIALIZATION
! -------------- ! --------------
! Switch to model 1 variables ! Switch to model 1 variables
#ifndef CPLOASIS
CALL MPPDB_INIT() CALL MPPDB_INIT()
#endif
!
CALL GOTO_MODEL(1,ONOFIELDLIST=.TRUE.) CALL GOTO_MODEL(1,ONOFIELDLIST=.TRUE.)
! !
#ifdef CPLOASIS
CNAMELIST='EXSEG1.nam'
CALL SFX_OASIS_INIT(CNAMELIST, NMNH_COMM_WORLD)
#endif
!
CALL INITIO_ll() CALL INITIO_ll()
! !
CALL VERSION CALL VERSION
...@@ -127,6 +154,33 @@ CALL INIT_MNH ...@@ -127,6 +154,33 @@ CALL INIT_MNH
! !
GEXIT=.FALSE. 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 !* 2. TEMPORAL LOOP
...@@ -170,6 +224,11 @@ IF (LCHECK) THEN ...@@ -170,6 +224,11 @@ IF (LCHECK) THEN
CALL MPPDB_BARRIER() CALL MPPDB_BARRIER()
ELSE ELSE
CALL END_PARA_ll(IINFO_ll) CALL END_PARA_ll(IINFO_ll)
#ifdef CPLOASIS
IF (LOASIS) THEN
CALL SFX_OASIS_END
END IF
#endif
END IF END IF
! !
! !
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment