!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- !--------------- special set of characters for RCS information !----------------------------------------------------------------- ! $Source: /srv/cvsroot/MNH-VX-Y-Z/src/MNH/ini_cturb.f90,v $ $Revision: 1.2.4.1.2.2.2.1.2.2 $ $Date: 2014/01/09 15:01:55 $ !----------------------------------------------------------------- !----------------------------------------------------------------- ! #################### MODULE MODI_IBM_INIT ! #################### ! INTERFACE ! SUBROUTINE IBM_INIT ! END SUBROUTINE IBM_INIT ! END INTERFACE ! END MODULE MODI_IBM_INIT ! ! ! ! ################### SUBROUTINE IBM_INIT ! ################### ! !!**** *IBM_INIT* - routine to initialize the immersed boundary method !! !! PURPOSE !! ------- ! The purpose of this routine is to initialize the IBM variables ! that are stored in module MODD_IBM_PARAM_n ! !! METHOD !! ------ !! The constants are set to their numerical values !! !! EXTERNAL !! -------- !! NONE !! !! IMPLICIT ARGUMENTS !! ------------------ !! !! REFERENCE !! --------- !! !! AUTHOR !! ------ !! Franck Auguste * CERFACS(AE) * !! !! MODIFICATIONS !! ------------- !! Original 01/01/2015 !! !------------------------------------------------------------------------------ ! !**** 0. DECLARATIONS ! --------------- ! ! module USE MODE_POS USE MODE_ll USE MODE_IO_ll USE MODD_ARGSLIST_ll, ONLY : LIST_ll ! ! declaration USE MODD_IBM_PARAM_n USE MODD_FIELD_n USE MODD_PARAMETERS, ONLY: JPVEXT,JPHEXT!!!!!!!!!!!!!!!!! USE MODD_GRID USE MODD_GRID_n USE MODD_CST USE MODD_METRICS_n, ONLY: XDXX,XDYY,XDZZ,XDZX,XDZY USE MODD_VAR_ll, ONLY: IP USE MODD_LBC_n USE MODD_CONF USE MODD_PAST_FIELD_n USE MODD_CONF USE MODD_REF_n USE MODD_SUB_MODEL_n USE MODD_NSV USE MODD_CTURB USE MODN_PARAM_n ! ! interface USE MODI_IBM_PREP USE MODI_IBM_SMOOTH USE MODI_IBM_DETECT USE MODI_IBM_INIDIV USE MODI_IBM_INIPRE USE MODI_IBM_WRITE USE MODI_IBM_WRITE3 USE MODI_SECOND_MNH USE MODI_IBM_FORCING USE MODI_SHUMAN USE MODI_IBM_PRESSURE USE MODI_IBM_MIXINGLENGTH USE MODI_GRADIENT_M USE MODI_RECYCL_INIT USE MODI_RECYCL_INIT2 USE MODI_IBM_SOLAR_SHADOW USE MODI_SUNPOS_n USE MODD_RADIATIONS_n ! IMPLICIT NONE ! !------------------------------------------------------------------------------ ! ! 0.1 declarations of arguments ! !------------------------------------------------------------------------------ ! ! 0.2 declaration of local variables REAL,DIMENSION(:,:,:,:),ALLOCATABLE :: ZPHI INTEGER :: ILUOUT REAL :: ZTIME0,ZTIME1, ZTIME2 INTEGER :: IINFO_ll TYPE(LIST_ll), POINTER :: TZFIELDS2_ll REAL,DIMENSION(:,:,:),ALLOCATABLE :: ZUT,ZVT,ZWT,ZLM,ZLE,ZET,ZTEMP INTEGER::JI,JJ,JK,IIE,IIB,IJB,IJE,IKE,IKB,JM,JN,JIMAX,JJMAX INTEGER::IIU,IJU,IKU REAL::ZRAY,ZVIT,ZRAD,ZCOS,ZSIN,ZVITT,ZVITR,ZCENX,ZCENY,ZCENZ,ZRAD0,ZRAD1,ZRAD2,ZDIST REAL:: ZX0,ZY0,ZX1,ZX2,ZY1,ZY2 REAL:: ZFLUX_B,ZFLUX_M,ZFLUX_E,ZFLUX_1,ZFLUX_2,ZFLUX_3,ZFLUX_4 REAL :: ZCOSZEN,ZSINZEN,ZAZIMSOL !------------------------------------------------------------------------------ ! ! 0.3 Allocation ! ALLOCATE(ZPHI(SIZE(XZZ,1),SIZE(XZZ,2),SIZE(XZZ,3),7)) ZPHI = -XIBM_IEPS CALL GET_DIM_EXT_ll('B',IIU,IJU) IKU=SIZE(XZZ,3) IIB=1+JPHEXT IIE=IIU-JPHEXT IJB=1+JPHEXT IJE=IJU-JPHEXT IKB=1+JPVEXT IKE=IKU-JPVEXT LCARTESIAN = .TRUE. LFLAT = .TRUE. XRHODJ2(:,:,:,1) = MXM(XRHODJ) XRHODJ2(:,:,:,2) = MYM(XRHODJ) XRHODJ2(:,:,:,3) = MZM(1,IKU,1,XRHODJ) XRHODJ2(:,:,:,4) = 0. NULLIFY(TZFIELDS2_ll) CALL ADD3DFIELD_ll(TZFIELDS2_ll, XRHODJ2(:,:,:,1)) CALL ADD3DFIELD_ll(TZFIELDS2_ll, XRHODJ2(:,:,:,2)) CALL ADD3DFIELD_ll(TZFIELDS2_ll, XRHODJ2(:,:,:,3)) CALL ADD3DFIELD_ll(TZFIELDS2_ll, XRHODJ2(:,:,:,4)) CALL UPDATE_HALO_ll(TZFIELDS2_ll,IINFO_ll) CALL CLEANLIST_ll(TZFIELDS2_ll) ! !------------------------------------------------------------------------------ ! !**** 1. PRELIMINARIES ! ---------------- ! ZTIME1=0. ZTIME2=0. XT_IBM_DETE = 0. XT_IBM_PREP = 0. IF (IP==1) THEN IF (CIBM_TYPE == 'NONE') THEN WRITE(*,*) '*****************************' WRITE(*,*) '******** LIBM = TRUE ********' WRITE(*,*) '*** CIBM_TYPE IS REQUIRED ***' WRITE(*,*) '******** = GENE/IDEA ********' WRITE(*,*) '**** (stopped execution) ****' WRITE(*,*) '*****************************' STOP ENDIF ! WRITE(*,*) '********************************' WRITE(*,*) '**** BEGIN BEFORE IBM FILES ****' WRITE(*,*) '********************************' ENDIF ! XLATORI = XIBM_LATORI XLONORI = XIBM_LONORI !------------------------------------------------------------------------------- ! !**** 2. EXECUTIONS ! ------------- ! ! !=== recycling method initialization === IF (LRECYCL .AND. CTURB /= 'NONE') THEN IF (IP==1) WRITE(*,*)'INIT_RECYCL' XRECYCL_IND=0. CALL RECYCL_INIT(XRECYCL_IND,XXRECYCLB1,XXRECYCLE1,XYRECYCLB1,XYRECYCLE1, & XXRECYCLB2,XXRECYCLE2,XYRECYCLB2,XYRECYCLE2,XDRECYCL,XARECYCL) CALL RECYCL_INIT2(NSAV_RECYCL1,NSAV_RECYCL2,XRECYCL_IND,XDRECYCL,XARECYCL) ENDIF ! !=== levelset function initialization === CALL SECOND_MNH(ZTIME1) IF (.NOT. LIBM_RLS) THEN IF (IP==1) WRITE(*,*)'INIT_PREP' CALL IBM_PREP(LIBM,CIBM_TYPE,ZPHI) IF (IP==1) WRITE(*,*)'INIT_SMOOTH' CALL IBM_SMOOTH(NIBM_SMOOTH,XIBM_SMOOTH,ZPHI) XIBM_LS(:,:,:,1)=ZPHI(:,:,:,1) XIBM_LS(:,:,:,2)=ZPHI(:,:,:,2) XIBM_LS(:,:,:,3)=ZPHI(:,:,:,3) XIBM_LS(:,:,:,4)=ZPHI(:,:,:,4) XIBM_LS(:,:,:,5)=ZPHI(:,:,:,5) XIBM_LS(:,:,:,6)=ZPHI(:,:,:,6) XIBM_LS(:,:,:,7)=ZPHI(:,:,:,7) ELSE ZPHI(:,:,:,1)=XIBM_LS(:,:,:,1) ZPHI(:,:,:,2)=XIBM_LS(:,:,:,2) ZPHI(:,:,:,3)=XIBM_LS(:,:,:,3) ZPHI(:,:,:,4)=XIBM_LS(:,:,:,4) ZPHI(:,:,:,5)=XIBM_LS(:,:,:,5) ZPHI(:,:,:,6)=XIBM_LS(:,:,:,6) ZPHI(:,:,:,7)=XIBM_LS(:,:,:,7) ENDIF CALL SECOND_MNH(ZTIME2) XT_IBM_PREP=ZTIME2-ZTIME1 ! !=== LevelSet for MNH ALLOCATE(XIBM_SU(SIZE(ZPHI,1),SIZE(ZPHI,2),SIZE(ZPHI,3),9)) XIBM_SU(:,:,:,1)=0. XIBM_SU(:,:,:,2)=0. XIBM_SU(:,:,:,3)=0. XIBM_SU(:,:,:,4)=0. XIBM_SU(:,:,:,5)=0. XIBM_SU(:,:,:,6)=1. XIBM_SU(:,:,:,7)=1. XIBM_SU(:,:,:,8)=1. XIBM_SU(:,:,:,9)=1. WHERE (XIBM_LS(:,:,:,1).GT.XIBM_EPSI) XIBM_SU(:,:,:,6)=0. WHERE (XIBM_LS(:,:,:,2).GT.XIBM_EPSI) XIBM_SU(:,:,:,7)=0. WHERE (XIBM_LS(:,:,:,3).GT.XIBM_EPSI) XIBM_SU(:,:,:,8)=0. WHERE (XIBM_LS(:,:,:,4).GT.XIBM_EPSI) XIBM_SU(:,:,:,9)=0. ! !=== thermal exchanges and immersed walls (in progress) IF (LIBM_SOLAR) THEN XIBM_TIME = 0. XTSRAD = 360. XIBM_SOLAR_ANX = 0.0 XIBM_SOLAR_ANY = 0.0 XIBM_SOLAR_ANZ = 0.0 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) ALLOCATE(XIBM_LAMT(SIZE(ZPHI,1),SIZE(ZPHI,2),SIZE(ZPHI,3),4)) ; XIBM_LAMT = 0. ALLOCATE(XIBM_SOLAR_INDEXK(IIU,IJU,4)) ; XIBM_SOLAR_INDEXK = 2. ALLOCATE(XIBM_LW0(IIU,IJU,IKU)) ; XIBM_LW0 = 0. ALLOCATE(XIBM_SW0(IIU,IJU,IKU)) ; XIBM_SW0 = 0. ALLOCATE(XIBM_ALTI(IIU,IJU,2)) ; XIBM_ALTI= 0. DO JN = 1,4 JIMAX=IIE JJMAX=IJE IF (JN==2) JIMAX=JIMAX+1 IF (JN==3) JJMAX=JJMAX+1 DO JI=IIB,JIMAX DO JJ=IJB,JJMAX JK = 2 DO WHILE ((XIBM_LS(JI,JJ,JK,JN).GT.XIBM_EPSI).AND.(JK