!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_RECYCL_INIT ! ##################### ! INTERFACE ! SUBROUTINE RECYCL_INIT(PPTAB,PXMIN1,PXMAX1,PYMIN1,PYMAX1,PXMIN2,PXMAX2,PYMIN2,PYMAX2,PDIST,PALPH) REAL, DIMENSION(:,:,:) ,INTENT(INOUT) :: PPTAB REAL ,INTENT(IN) :: PXMIN1,PXMAX1,PYMIN1,PYMAX1 REAL ,INTENT(IN) :: PXMIN2,PXMAX2,PYMIN2,PYMAX2,PDIST,PALPH END SUBROUTINE RECYCL_INIT ! END INTERFACE ! END MODULE MODI_RECYCL_INIT ! ! ! ! #################################### SUBROUTINE RECYCL_INIT(PPTAB,PXMIN1,PXMAX1,PYMIN1,PYMAX1,PXMIN2,PXMAX2,PYMIN2,PYMAX2,PDIST,PALPH) ! #################################### ! !!**** *RECYCL_INIT* - routine to configure the emission/reception surfaces for the turbulence generation !! !! PURPOSE !! ------- ! SIMPLE RECYCLING METHOD ! !! METHOD !! ------ !!! !! 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_GRID_n, ONLY: XXHAT,XYHAT,XZZ USE MODD_DIM_n, ONLY: NIMAX,NJMAX,NKMAX USE MODD_PARAMETERS, ONLY: JPVEXT,JPHEXT USE MODD_VAR_ll, ONLY: IP USE MODD_CONF, ONLY: NHALO ! ! interface USE MODI_SHUMAN USE MODI_IBM_INTERPOS USE MODI_GATHER_ll USE MODI_IBM_WRITE USE MODI_RECYCL_AFFE2 ! IMPLICIT NONE ! !------------------------------------------------------------------------------ ! ! 0.1 declarations of arguments REAL, DIMENSION(:,:,:) ,INTENT(INOUT) :: PPTAB REAL ,INTENT(IN) :: PXMIN1,PXMAX1,PYMIN1,PYMAX1 REAL ,INTENT(IN) :: PXMIN2,PXMAX2,PYMIN2,PYMAX2,PDIST,PALPH ! !------------------------------------------------------------------------------ ! ! 0.2 declaration of local variables INTEGER :: IIU,IJU,IKU ! domain size INTEGER :: IIB,IIE,IJB,IJE,IKB,IKE INTEGER :: JI,JJ,JK,JM,JN ! loop index REAL :: ZXDIST,ZYDIST REAL :: ZXMIN3,ZYMIN3,ZXMAX3,ZYMAX3 REAL :: ZXMIN4,ZYMIN4,ZXMAX4,ZYMAX4 TYPE(LIST_ll), POINTER :: TZFIELDS_ll INTEGER :: IINFO_ll REAL, DIMENSION(:,:), ALLOCATABLE :: ZPTAB ! !------------------------------------------------------------------------------ ! ! Allocation/Dimension ! IIU = SIZE(PPTAB,1) IJU = SIZE(PPTAB,2) PPTAB(:,:,1)=0. CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) ! ! distance between emission/recpetion ! ! WRITE(*,*)'PDIST',PDIST ! WRITE(*,*)'PALPH',PALPH ZXDIST = PDIST*cos(PALPH) ZYDIST = PDIST*sin(PALPH) ! WRITE(*,*)'ZXDIST',ZXDIST ! WRITE(*,*)'ZYDIST',ZYDIST ! ! surface used in the inlet/outlet smoothing of the reception surface ! ZXMIN3 = MIN(PXMIN1,PXMIN2,PXMAX1,PXMAX2) ZYMIN3 = MIN(PYMIN1,PYMIN2,PYMAX1,PYMAX2) ZXMAX3 = MAX(PXMIN1,PXMIN2,PXMAX1,PXMAX2) ZYMAX3 = MAX(PYMIN1,PYMIN2,PYMAX1,PYMAX2) ZXMIN3 = MIN(ZXMIN3,PXMIN1+ZXDIST,PXMIN2+ZXDIST,PXMAX1+ZXDIST,PXMAX2+ZXDIST) ZYMIN3 = MIN(ZYMIN3,PYMIN1+ZYDIST,PYMIN2+ZYDIST,PYMAX1+ZYDIST,PYMAX2+ZYDIST) ZXMAX3 = MAX(ZXMAX3,PXMIN1+ZXDIST,PXMIN2+ZXDIST,PXMAX1+ZXDIST,PXMAX2+ZXDIST) ZYMAX3 = MAX(ZYMAX3,PYMIN1+ZYDIST,PYMIN2+ZYDIST,PYMAX1+ZYDIST,PYMAX2+ZYDIST) ! WRITE(*,*)'PXMIN12',PXMIN1,PXMIN2 ! WRITE(*,*)'PYMIN12',PYMIN1,PYMIN2 ! WRITE(*,*)'PXMAX12',PXMAX1,PXMAX2 ! WRITE(*,*)'PYMAX12',PYMAX1,PYMAX2 ! WRITE(*,*)'ZXMINAX',ZXMIN3,ZXMAX3 ! WRITE(*,*)'ZYMINAX',ZYMIN3,ZYMAX3 ! ! location/index of emission/reception ! DO JI = IIB,IIE DO JJ = IJB,IJE ! ! 0.9999 for the intermediate region ! IF ((XXHAT(JI)+XXHAT(JI+1))>2.*ZXMIN3.AND.(XXHAT(JI)+XXHAT(JI+1))<2.*ZXMAX3.AND.& (XYHAT(JJ)+XYHAT(JJ+1))>2.*ZYMIN3.AND.(XYHAT(JJ)+XYHAT(JJ+1))<2.*ZYMAX3) THEN PPTAB(JI,JJ,1)=0. ! WRITE(*,*)'RECEPTION0',IP ENDIF ! ! two for the reception surface ! IF ((XXHAT(JI)+XXHAT(JI+1))>2.*PXMIN1.AND.(XXHAT(JI)+XXHAT(JI+1))<2.*PXMAX1.AND.& (XYHAT(JJ)+XYHAT(JJ+1))>2.*PYMIN1.AND.(XYHAT(JJ)+XYHAT(JJ+1))<2.*PYMAX1) THEN PPTAB(JI,JJ,1)=2. ! WRITE(*,*)'RECEPTION1',IP ENDIF IF ((XXHAT(JI)+XXHAT(JI+1))>2.*PXMIN2.AND.(XXHAT(JI)+XXHAT(JI+1))<2.*PXMAX2.AND.& (XYHAT(JJ)+XYHAT(JJ+1))>2.*PYMIN2.AND.(XYHAT(JJ)+XYHAT(JJ+1))<2.*PYMAX2) THEN PPTAB(JI,JJ,1)=2. ! WRITE(*,*)'RECEPTION2',IP ENDIF ! ! one for the emission surface ! IF ((XXHAT(JI)+XXHAT(JI+1)-2.*ZXDIST)>2.*PXMIN1.AND.(XXHAT(JI)+XXHAT(JI+1)-2.*ZXDIST)<2.*PXMAX1.AND.& (XYHAT(JJ)+XYHAT(JJ+1)-2.*ZYDIST)>2.*PYMIN1.AND.(XYHAT(JJ)+XYHAT(JJ+1)-2.*ZYDIST)<2.*PYMAX1) THEN PPTAB(JI,JJ,1)=1. ! WRITE(*,*)'EMISSION1',IP ENDIF IF ((XXHAT(JI)+XXHAT(JI+1)-2.*ZXDIST)>2.*PXMIN2.AND.(XXHAT(JI)+XXHAT(JI+1)-2.*ZXDIST)<2.*PXMAX2.AND.& (XYHAT(JJ)+XYHAT(JJ+1)-2.*ZYDIST)>2.*PYMIN2.AND.(XYHAT(JJ)+XYHAT(JJ+1)-2.*ZYDIST)<2.*PYMAX2) THEN PPTAB(JI,JJ,1)=1. ! WRITE(*,*)'EMISSION2',IP ENDIF ENDDO ENDDO ! ! communication ! NULLIFY(TZFIELDS_ll) CALL ADD2DFIELD_ll(TZFIELDS_ll,PPTAB(:,:,1)) CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) CALL CLEANLIST_ll(TZFIELDS_ll) PPTAB(:,:,2)=PPTAB(:,:,1) !DO JN = 1,2 ! !ALLOCATE(ZPTAB(IIU,IJU)) !ZPTAB = 0. !ZPTAB(IIB:IIE,IJB:IJE) = (1./4.)*(PPTAB(IIB-1:IIE-1,IJB:IJE,2)+PPTAB(IIB+1:IIE+1,IJB:IJE,2)+& ! PPTAB(IIB:IIE,IJB+1:IJE+1,2)+PPTAB(IIB:IIE,IJB-1:IJE-1,2)) !PPTAB(:,:,2) = ZPTAB(:,:) !DEALLOCATE(ZPTAB) ! !NULLIFY(TZFIELDS_ll) !CALL ADD2DFIELD_ll(TZFIELDS_ll,PPTAB(:,:,2)) !CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll) !CALL CLEANLIST_ll(TZFIELDS_ll) ! !ENDDO ! ! end ! RETURN END SUBROUTINE RECYCL_INIT