Skip to content
Snippets Groups Projects
boundaries.f90 47.6 KiB
Newer Older
     IF (GLIMABOUNDARY(JSV-NSV_LIMA_BEG+1)) THEN
        PSVT(IIB-1,:,:,JSV)=ZSVT(IIB-1,:,:,JSV)
        PSVT(IIE+1,:,:,JSV)=ZSVT(IIE+1,:,:,JSV)
        PSVT(:,IJB-1,:,JSV)=ZSVT(:,IJB-1,:,JSV)
        PSVT(:,IJE+1,:,JSV)=ZSVT(:,IJE+1,:,JSV)
     ENDIF
  END DO

  CALL SET_CONC_LIMA( IMI, 'NONE', PRHODREF, ZRT(:, :, :, :), ZSVT(:, :, :, NSV_LIMA_BEG:NSV_LIMA_END) )
  IF (NSV_LIMA_NC.GE.1) THEN
     IF (GLIMABOUNDARY(NSV_LIMA_NC-NSV_LIMA_BEG+1)) THEN
        PSVT(IIB-1,:,:,NSV_LIMA_NC)=ZSVT(IIB-1,:,:,NSV_LIMA_NC) ! cloud
        PSVT(IIE+1,:,:,NSV_LIMA_NC)=ZSVT(IIE+1,:,:,NSV_LIMA_NC)
        PSVT(:,IJB-1,:,NSV_LIMA_NC)=ZSVT(:,IJB-1,:,NSV_LIMA_NC)
        PSVT(:,IJE+1,:,NSV_LIMA_NC)=ZSVT(:,IJE+1,:,NSV_LIMA_NC)
     ENDIF
  ENDIF
  IF (NSV_LIMA_NR.GE.1) THEN
     IF (GLIMABOUNDARY(NSV_LIMA_NR-NSV_LIMA_BEG+1)) THEN
        PSVT(IIB-1,:,:,NSV_LIMA_NR)=ZSVT(IIB-1,:,:,NSV_LIMA_NR) ! rain
        PSVT(IIE+1,:,:,NSV_LIMA_NR)=ZSVT(IIE+1,:,:,NSV_LIMA_NR)
        PSVT(:,IJB-1,:,NSV_LIMA_NR)=ZSVT(:,IJB-1,:,NSV_LIMA_NR)
        PSVT(:,IJE+1,:,NSV_LIMA_NR)=ZSVT(:,IJE+1,:,NSV_LIMA_NR)
     ENDIF
  ENDIF
  IF (NSV_LIMA_NI.GE.1) THEN
     IF (GLIMABOUNDARY(NSV_LIMA_NI-NSV_LIMA_BEG+1)) THEN
        PSVT(IIB-1,:,:,NSV_LIMA_NI)=ZSVT(IIB-1,:,:,NSV_LIMA_NI) ! ice
        PSVT(IIE+1,:,:,NSV_LIMA_NI)=ZSVT(IIE+1,:,:,NSV_LIMA_NI)
        PSVT(:,IJB-1,:,NSV_LIMA_NI)=ZSVT(:,IJB-1,:,NSV_LIMA_NI)
        PSVT(:,IJE+1,:,NSV_LIMA_NI)=ZSVT(:,IJE+1,:,NSV_LIMA_NI)
     ENDIF
  END IF
END IF
!
!
IF (LUSECHEM .AND. IMI == 1) THEN
  IF (GFIRSTCALL1) THEN
    ALLOCATE(GCHBOUNDARY(NSV_CHEM))
    GFIRSTCALL1 = .FALSE.
    DO JSV=NSV_CHEMBEG,NSV_CHEMEND
       GCHTMP = .FALSE.
       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
       GCHBOUNDARY(JSV-NSV_CHEMBEG+1) = GCHTMP
    ENDDO
  ENDIF

  DO JSV=NSV_CHEMBEG,NSV_CHEMEND
    IF (GCHBOUNDARY(JSV-NSV_CHEMBEG+1))  THEN
      IF (SIZE(PSVT)>0) THEN
        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
      ENDIF
    ENDIF
  ENDDO
ENDIF
!
IF (LUSECHIC .AND. IMI == 1) THEN
  IF (GFIRSTCALLIC) THEN
    ALLOCATE(GICBOUNDARY(NSV_CHIC))
    GFIRSTCALLIC = .FALSE.
    DO JSV=NSV_CHICBEG,NSV_CHICEND
       GCHTMP = .FALSE.
       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
       GICBOUNDARY(JSV-NSV_CHICBEG+1) = GCHTMP
    ENDDO
  ENDIF

  DO JSV=NSV_CHICBEG,NSV_CHICEND
    IF (GICBOUNDARY(JSV-NSV_CHICBEG+1))  THEN
      IF (SIZE(PSVT)>0) THEN
        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
      ENDIF
    ENDIF
  ENDDO
ENDIF
IF (LORILAM .AND. IMI == 1) THEN
  IF (GFIRSTCALL2) THEN
    ALLOCATE(GAERBOUNDARY(NSV_AER))
    GFIRSTCALL2 = .FALSE.
    DO JSV=NSV_AERBEG,NSV_AEREND
       GCHTMP = .FALSE.
       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
       GAERBOUNDARY(JSV-NSV_AERBEG+1) = GCHTMP
    ENDDO
  ENDIF

  DO JSV=NSV_AERBEG,NSV_AEREND
    IF (GAERBOUNDARY(JSV-NSV_AERBEG+1)) THEN
      IF (SIZE(PSVT)>0) THEN
        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
      ENDIF
    ENDIF
  ENDDO
ENDIF
!
IF (LDUST .AND. IMI == 1) THEN
  IF (GFIRSTCALL3) THEN
    ALLOCATE(GDSTBOUNDARY(NSV_DST))
    GFIRSTCALL3 = .FALSE.
    DO JSV=NSV_DSTBEG,NSV_DSTEND
       GCHTMP = .FALSE.
       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
       GDSTBOUNDARY(JSV-NSV_DSTBEG+1) = GCHTMP
    ENDDO
    ENDIF

  DO JSV=NSV_DSTBEG,NSV_DSTEND
    IF (GDSTBOUNDARY(JSV-NSV_DSTBEG+1)) THEN
      IF (SIZE(PSVT)>0) THEN
        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
      ENDIF
    ENDIF
  ENDDO 
ENDIF
!
IF (LSALT .AND. IMI == 1) THEN
  IF (GFIRSTCALL5) THEN
    ALLOCATE(GSLTBOUNDARY(NSV_SLT))
    GFIRSTCALL5 = .FALSE.
    DO JSV=NSV_SLTBEG,NSV_SLTEND
       GCHTMP = .FALSE.
       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
       GSLTBOUNDARY(JSV-NSV_SLTBEG+1) = GCHTMP
    ENDDO
  ENDIF

  DO JSV=NSV_SLTBEG,NSV_SLTEND
    IF (GSLTBOUNDARY(JSV-NSV_SLTBEG+1)) THEN
      IF (SIZE(PSVT)>0) THEN
        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
      ENDIF
    ENDIF
  ENDDO
ENDIF
!
IF ( LPASPOL .AND. IMI == 1) THEN
  IF (GFIRSTCALLPP) THEN
    ALLOCATE(GPPBOUNDARY(NSV_PP))
    GFIRSTCALLPP = .FALSE.
    DO JSV=NSV_PPBEG,NSV_PPEND
      GPPTMP = .FALSE.
      IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
      IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
      IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
      IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GPPTMP = GPPTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
      GPPBOUNDARY(JSV-NSV_PPBEG+1) = GPPTMP
    ENDDO
  ENDIF

  DO JSV=NSV_PPBEG,NSV_PPEND
    IF (GPPBOUNDARY(JSV-NSV_PPBEG+1)) THEN
      IF (SIZE(PSVT)>0) THEN
        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
      ENDIF
    ENDIF
  ENDDO
ENDIF
!
IF ( LCONDSAMP .AND. IMI == 1) THEN
  IF (GFIRSTCALLCS) THEN
    ALLOCATE(GCSBOUNDARY(NSV_CS))
    GFIRSTCALLCS = .FALSE.
    DO JSV=NSV_CSBEG,NSV_CSEND
      GCSTMP = .FALSE.
      IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
      IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
      IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
      IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCSTMP = GCSTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
      GCSBOUNDARY(JSV-NSV_CSBEG+1) = GCSTMP
    ENDDO
  ENDIF

  DO JSV=NSV_CSBEG,NSV_CSEND
    IF (GCSBOUNDARY(JSV-NSV_CSBEG+1)) THEN
      IF (SIZE(PSVT)>0) THEN
        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
      ENDIF
    ENDIF
  ENDDO
ENDIF

IF (LBLOWSNOW .AND. IMI == 1) THEN
  IF (GFIRSTCALL3) THEN
    ALLOCATE(GSNWBOUNDARY(NSV_SNW))
    GFIRSTCALL3 = .FALSE.
    DO JSV=NSV_SNWBEG,NSV_SNWEND
       GCHTMP = .FALSE.
       IF (LWEST_ll().AND.HLBCX(1)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(1,:,:,JSV)==0)
       IF (LEAST_ll().AND.HLBCX(2)=='OPEN')  GCHTMP = GCHTMP .OR. ALL(PLBXSVM(ILBX,:,:,JSV)==0)
       IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,1,:,JSV)==0)
       IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GCHTMP = GCHTMP .OR. ALL(PLBYSVM(:,ILBY,:,JSV)==0)
       GSNWBOUNDARY(JSV-NSV_SNWBEG+1) = GCHTMP
    ENDDO
  ENDIF
ENDIF

#ifdef MNH_FOREFIRE
!ForeFire 
IF ( LFOREFIRE .AND. IMI == 1) THEN
  IF (GFIRSTCALLFF) THEN
    ALLOCATE(GFFBOUNDARY(NSV_FF))
    GFIRSTCALLFF = .FALSE.
    DO JSV=NSV_FFBEG,NSV_FFEND
      GFFTMP = .FALSE.
      IF (LWEST_ll().AND.HLBCX(1)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBXSVM(JPHEXT,:,:,JSV)==0)
      IF (LEAST_ll().AND.HLBCX(2)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBXSVM(ILBX-JPHEXT+1,:,:,JSV)==0)
      IF (LSOUTH_ll().AND.HLBCY(1)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBYSVM(:,JPHEXT,:,JSV)==0)
      IF (LNORTH_ll().AND.HLBCY(2)=='OPEN') GFFTMP = GFFTMP .OR. ALL(PLBYSVM(:,ILBY-JPHEXT+1,:,JSV)==0)
      GFFBOUNDARY(JSV-NSV_FFBEG+1) = GFFTMP
    ENDDO
  ENDIF

  DO JSV=NSV_FFBEG,NSV_FFEND
    IF (GFFBOUNDARY(JSV-NSV_FFBEG+1)) THEN
      IF (SIZE(PSVT)>0) THEN
        CALL CH_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT(:,:,:,JSV),XSVMIN(JSV))
      ENDIF
    ENDIF
  ENDDO
ENDIF
#endif
!
IF ( CELEC /= 'NONE' .AND. (NSV_ELEC_A(NDAD(IMI)) == 0 .OR. IMI == 1)) THEN
  CALL ION_BOUNDARIES (HLBCX,HLBCY,PUT,PVT,PSVT)
ENDIF
!
!-------------------------------------------------------------------------------
!
END SUBROUTINE BOUNDARIES