From 6354ee31c4e5a117d97bc6444434d6b425f3c7cb Mon Sep 17 00:00:00 2001 From: ESCOBAR Juan <escj@nuwa.aerologie.net> Date: Sat, 23 Mar 2013 23:14:20 +0100 Subject: [PATCH] Juan 23/03/2012: add mode_mnh_zwork to managed pool of mirror array --- MNH/init_mnh.f90 | 235 +++++++++++++++++++++++++++++++++++++++++ MNH/mode_mnh_zwork.f90 | 104 ++++++++++++++++++ 2 files changed, 339 insertions(+) create mode 100644 MNH/init_mnh.f90 create mode 100644 MNH/mode_mnh_zwork.f90 diff --git a/MNH/init_mnh.f90 b/MNH/init_mnh.f90 new file mode 100644 index 000000000..80766f248 --- /dev/null +++ b/MNH/init_mnh.f90 @@ -0,0 +1,235 @@ +!----------------------------------------------------------------- +!--------------- special set of characters for RCS information +!----------------------------------------------------------------- +! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/Attic/init_mnh.f90,v $ $Revision: 1.1.2.1.2.1.2.4 $ +! masdev4_7 BUG1 2007/06/15 17:47:18 +!----------------------------------------------------------------- +! ############### + SUBROUTINE INIT_MNH +! ############### +! +!!**** *INIT_MNH * - monitor to initialize the variables of the model +!! +!! PURPOSE +!! ------- +! The purpose of this routine is to initialize all the variables +! used in the model temporal loop or in the post-processings +! +!!** METHOD +!! ------ +!! This initialization is separated in three parts : +!! 1. A part common to all models where : +!! - The output-listing file common to all models is opened. +!! - The physical constants are initialized. +!! - The other constants for all models are initialized. +!! 2. The treatment of descriptor files model by model : +!! The DESFM and EXSEG files are read and the EXSEG file is updated +!! 3. The sequential initialization of nested models : +!! The initial data fields are read in different files for each +!! model and variables which are not in these initial files are +!! deduced. +!! +!! +!! EXTERNAL +!! -------- +!! INI_CST : to initialize physical constants +!! INI_CTURB : to initialize for all models the constants used in the +!! turbulence scheme +!! INI_SEG_n : to read and update descriptor files +!! INI_SIZE : to initialize the sizes of the different models +!! INI_MODEL : to initialize each nested model +!! INI_PARA_ll: to build the ll data structures +!! GO_TOMODEL : displace the ll lists to the right nested model +!! +!! +!! IMPLICIT ARGUMENTS +!! ------------------ +!! Module MODD_PARAMETERS : JPMODELMAX +!! +!! Module MODD_CONF : NMODEL,NVERB +!! +!! Module MODD_LUNIT : CLUOUT0 +!! +!! REFERENCE +!! --------- +!! Book2 of documentation (routine INIT_MNH) +!! +!! +!! AUTHOR +!! ------ +!! V. Ducrocq * Meteo France * +!! +!! MODIFICATIONS +!! ------------- +!! Original 02/06/94 +!! J.Stein 05/01/95 add ini_cturb +!! J.P. Lafore 18/08/95 Time STEP change +!! J.P. Lafore 22/07/96 ZTSTEP_ALL introduction for nesting +!! V. Ducrocq 7/08/98 // +!! P. Jabouille 7/07/99 split ini_modeln in 2 parts+ cleaning +!! V. Masson 15/03/99 call to ini_data_cover +!! P.Jabouille 15/07/99 special initialisation for spawning +!------------------------------------------------------------------------------- +! +!* 0. DECLARATIONS +! ------------ +USE MODD_PARAMETERS +USE MODD_CONF +USE MODD_LUNIT +USE MODD_LBC_n, ONLY: CLBCX,CLBCY ! only for spawning purpose +USE MODD_DYN_n, ONLY: CPRESOPT,NITR ! only for spawning purpose +! +USE MODE_IO_ll +USE MODE_ll +USE MODE_FM +! +USE MODI_INI_CST +USE MODI_INI_CTURB +USE MODI_INI_CMFSHALL +USE MODI_INI_SEG_n +USE MODI_INI_MODEL_n +USE MODI_INI_SIZE_n +USE MODI_INI_SIZE_SPAWN +USE MODI_RESET_EXSEG +USE MODE_MODELN_HANDLER +! +!JUAN +USE MODE_SPLITTINGZ_ll +!JUAN +USE MODI_ALLOC_SURFEX +USE MODI_READ_ALL_NAMELISTS +! +USE MODE_MNH_ZWORK +! +! +IMPLICIT NONE +! +!* 0.1 Local variables +! +INTEGER :: JMI ! Loop index +CHARACTER (LEN=16), DIMENSION(JPMODELMAX) :: YLUOUT ! Name for output-listing + ! of nested models +CHARACTER (LEN=28), DIMENSION(JPMODELMAX) :: YINIFILE ! names of + ! the initial files +INTEGER :: ILUOUT0,IRESP ! Logical unit number for + ! output-listing common + ! to all models and return + ! code of file management +REAL, DIMENSION(JPMODELMAX) :: ZTSTEP_OLD ! OLD Time STEP (DESFM) +REAL, DIMENSION(JPMODELMAX) :: ZTSTEP_ALL ! Time STEP of ALL models +INTEGER :: IINFO_ll ! return code of // routines +! +! Dummy pointers needed to correct an ifort Bug +CHARACTER(LEN=4), DIMENSION(:), POINTER :: DPTR_CLBCX,DPTR_CLBCY + +!------------------------------------------------------------------------------- +! +!* 1. INITIALIZATION COMMON TO ALL MODELS +! ------------------------------------ +! +!* 1.1 initialize // E/S and open output-listing file +! +! +IF (CPROGRAM/='REAL ') THEN + CLUOUT0 = 'OUTPUT_LISTING0' + CALL OPEN_ll(UNIT=ILUOUT0,FILE=CLUOUT0,IOSTAT=IRESP,FORM='FORMATTED', & + ACTION='WRITE',MODE=GLOBAL) +ELSE + CALL FMLOOK_ll(CLUOUT0,CLUOUT0,ILUOUT0,IRESP) +END IF +! +WRITE(UNIT=ILUOUT0,FMT="(50('*'),/,'*',48X,'*',/, & + & 7('*'),10X, ' MESO-NH MODEL ',10X,8('*'),/, & + & '*',48X,'*',/, & + & 7('*'),12X,' CNRM - LA ',12X,8('*'),/, & + & '*',48X,'*',/, 50('*'))") +! +! +!* 1.2 initialize physical constants +! +CALL INI_CST +! +! +!* 1.3 initialize constants for the turbulence scheme +! +CALL INI_CTURB +! +! +!* 1.4 initialize constants for the mass flux scheme +! +CALL INI_CMFSHALL +! +!------------------------------------------------------------------------------- +! +!* 2. READ AND UPDATE DESCRIPTOR FILES +! -------------------------------- +! +DO JMI=1,JPMODELMAX + CALL GOTO_MODEL(JMI) + CALL INI_SEG_n(JMI,YLUOUT(JMI),YINIFILE(JMI),ZTSTEP_OLD(JMI),ZTSTEP_ALL) + IF (JMI.EQ.NMODEL) EXIT +END DO +! +IF (CPROGRAM=='DIAG') CALL RESET_EXSEG(YLUOUT(1)) +! +!------------------------------------------------------------------------------- +! +! +!* 3. INITIALIZE EACH MODEL SIZES AND DEPENDENCY +! ------------------------------------------ +! +DO JMI=1,NMODEL + CALL GOTO_MODEL(JMI) + CALL INI_SIZE_n(JMI,YLUOUT(JMI),YINIFILE(JMI)) +END DO +! +IF (CPROGRAM=='SPAWN ') THEN + DPTR_CLBCX=>CLBCX + DPTR_CLBCY=>CLBCY + CALL INI_SIZE_SPAWN(DPTR_CLBCX,DPTR_CLBCY,CPRESOPT,NITR,YINIFILE(1)) +END IF +! +! INITIALIZE data structures of ComLib +! +!JUAN CALL INI_PARA_ll(IINFO_ll) +CALL INI_PARAZ_ll(IINFO_ll) +! +!------------------------------------------------------------------------------- +! +! +CALL ALLOC_SURFEX(NMODEL) +! +IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL ') THEN + CALL READ_ALL_NAMELISTS('MESONH','PRE',.FALSE.) +ELSE + CALL READ_ALL_NAMELISTS('MESONH','ALL',.TRUE.) +ENDIF +! +CALL MNH_ALLOC_ZWORK(NMODEL) +! +!------------------------------------------------------------------------------- +! +!* 4. INITIALIZE EACH MODEL +! --------------------- +! +DO JMI=1,NMODEL + CALL GO_TOMODEL_ll(JMI,IINFO_ll) + CALL GOTO_MODEL(JMI) + CALL INI_MODEL_n(JMI,ZTSTEP_OLD(JMI),YLUOUT(JMI),YINIFILE(JMI)) +END DO +! +!------------------------------------------------------------------------------- +! +!* 5. WRITE MESSAGE ON OUTPUT-LISTING +! ------------------------------- +! +IF (NVERB >= 5) THEN + WRITE(UNIT=ILUOUT0,FMT="(50('*'),/,'*',48X,'*',/, & + & '*',10X,' INITIALIZATION TERMINATED',10X,'*',/, & + & '*',48X,'*',/,50('*'))") +END IF +! +!------------------------------------------------------------------------------- +! +! +END SUBROUTINE INIT_MNH diff --git a/MNH/mode_mnh_zwork.f90 b/MNH/mode_mnh_zwork.f90 new file mode 100644 index 000000000..dbfa083c9 --- /dev/null +++ b/MNH/mode_mnh_zwork.f90 @@ -0,0 +1,104 @@ +MODULE MODE_MNH_ZWORK + +INTEGER, SAVE :: IIB,IJB ! Begining useful area in x,y,z directions +INTEGER, SAVE :: IIE,IJE ! End useful area in x,y,z directions +! +INTEGER,SAVE :: IJS,IJN, IIW,IIA +! +INTEGER, SAVE :: IIU,IJU,IKU +LOGICAL, SAVE :: GWEST , GEAST +LOGICAL, SAVE :: GSOUTH , GNORTH + +LOGICAL, SAVE :: GFIRST_CALL_MNH_ALLOC_ZWORK = .TRUE. +! +REAL, SAVE, ALLOCATABLE , DIMENSION(:,:,:) :: & + ZW3D1,ZW3D2,ZW3D3,ZW3D4,ZW3D5,ZW3D6,ZW3D7, & +& ZW3D8,ZW3D9,ZW3D10,ZW3D11,ZW3D12,ZW3D13,ZW3D14,ZW3D15 + +REAL, SAVE, ALLOCATABLE , DIMENSION(:,:) :: ZPSRC_HALO2_WEST +REAL, SAVE, ALLOCATABLE , DIMENSION(:,:) :: ZPSRC_HALO2_SOUTH + +#define ACC_MIRROR +#ifdef ACC_MIRROR +!$acc declare mirror(ZW3D1,ZW3D2,ZW3D3,ZW3D4,ZW3D5,ZW3D6,ZW3D7) +!$acc declare mirror(ZW3D8,ZW3D9,ZW3D10,ZW3D11,ZW3D12,ZW3D13,ZW3D14,ZW3D15) +!$acc declare mirror(ZPSRC_HALO2_WEST,ZPSRC_HALO2_SOUTH) +#endif +! +CONTAINS + +SUBROUTINE MNH_ALLOC_ZWORK(IMODEL) + + USE MODE_TOOLS_ll, ONLY : LWEST_ll,LEAST_ll, LSOUTH_ll, LNORTH_ll + + USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF + USE MODD_DIM_n, ONLY : NKMAX + + IMPLICIT NONE + + INTEGER :: IMODEL + + IF (GFIRST_CALL_MNH_ALLOC_ZWORK) THEN + GFIRST_CALL_MNH_ALLOC_ZWORK = .FALSE. + + CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) + IJS=IJB + IJN=IJE + IIW=IIB + IIA=IIE + + CALL GET_DIM_EXT_ll('B',IIU,IJU) + IKU=NKMAX + 2* JPVEXT + + GWEST = LWEST_ll() + GEAST = LEAST_ll() + + GSOUTH=LSOUTH_ll() + GNORTH=LNORTH_ll() + + ALLOCATE (ZW3D1(IIU,IJU,IKU)) + ALLOCATE (ZW3D2(IIU,IJU,IKU)) + ALLOCATE (ZW3D3(IIU,IJU,IKU)) + ALLOCATE (ZW3D4(IIU,IJU,IKU)) + ALLOCATE (ZW3D5(IIU,IJU,IKU)) + ALLOCATE (ZW3D6(IIU,IJU,IKU)) + ALLOCATE (ZW3D7(IIU,IJU,IKU)) + ALLOCATE (ZW3D8(IIU,IJU,IKU)) + ALLOCATE (ZW3D9(IIU,IJU,IKU)) + ALLOCATE (ZW3D10(IIU,IJU,IKU)) + ALLOCATE (ZW3D11(IIU,IJU,IKU)) + ALLOCATE (ZW3D12(IIU,IJU,IKU)) + ALLOCATE (ZW3D13(IIU,IJU,IKU)) + ALLOCATE (ZW3D14(IIU,IJU,IKU)) + ALLOCATE (ZW3D15(IIU,IJU,IKU)) + + ALLOCATE (ZPSRC_HALO2_WEST(IJU,IKU)) + ALLOCATE (ZPSRC_HALO2_SOUTH(IIU,IKU)) + +!$acc kernels + ZW3D1 = XUNDEF + ZW3D2 = XUNDEF + ZW3D3 = XUNDEF + ZW3D4 = XUNDEF + ZW3D5 = XUNDEF + ZW3D6 = XUNDEF + ZW3D7 = XUNDEF + ZW3D8 = XUNDEF + ZW3D9 = XUNDEF + ZW3D10 = XUNDEF + ZW3D11 = XUNDEF + ZW3D12 = XUNDEF + ZW3D13 = XUNDEF + ZW3D14 = XUNDEF + ZW3D15 = XUNDEF + + ZPSRC_HALO2_WEST = XUNDEF + ZPSRC_HALO2_SOUTH = XUNDEF + +!$acc end kernels + + END IF + +END SUBROUTINE MNH_ALLOC_ZWORK + +END MODULE MODE_MNH_ZWORK -- GitLab