Skip to content
Snippets Groups Projects
Commit 6354ee31 authored by ESCOBAR Juan's avatar ESCOBAR Juan
Browse files

Juan 23/03/2012: add mode_mnh_zwork to managed pool of mirror array

parent b32fc9c8
No related branches found
No related tags found
1 merge request!4Jean Wurtz 30/04/2025 : Bugfixes mainly for TEB and for simple precision
!-----------------------------------------------------------------
!--------------- 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
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment