Skip to content
Snippets Groups Projects
ini_lb.f90 47.3 KiB
Newer Older
            STOP
          ENDIF
        END IF
      END IF
    END IF
  CASE('INIT')
    IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
    IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
  END SELECT
END DO
! Sea salt scalar variables
DO JSV = NSV_SLTBEG, NSV_SLTEND
  SELECT CASE(HGETSVM(JSV))
  CASE ('READ')
    IF ( KSIZELBXSV_ll /= 0 ) THEN
      YRECFM = 'LBX_'//TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1)))
      YDIRLB='LBX'
      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,&
           & IGRID,ILENCH,YCOMMENT,IRESP)
      IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
        IF (IRESP/=0) THEN
          IF (PRESENT(PLBXSVMM)) THEN
            PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
            WRITE(ILUOUT,*) 'Sea Salt PLBXSVM   will be initialized to 0'
          ELSE
            WRITE(ILUOUT,*) 'Pb to initialize sea salt PLBXSVM '
!callabortstop
            CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
            CALL ABORT
            STOP
          ENDIF
        END IF
      END IF
    END IF
!
    IF (KSIZELBYSV_ll  /= 0 ) THEN
      YRECFM = 'LBY_'//TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1)))
      YDIRLB='LBY'
      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,&
           & IGRID,ILENCH,YCOMMENT,IRESP)
      IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
        IF (IRESP/=0) THEN
          IF (PRESENT(PLBYSVMM)) THEN
            PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
            WRITE(ILUOUT,*) 'Sea Salt PLBYSVM   will be initialized to 0'
          ELSE
            WRITE(ILUOUT,*) 'Pb to initialize sea salt PLBYSVM '
!callabortstop
            CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
            CALL ABORT
            STOP
          ENDIF
        END IF
      END IF
    END IF
  CASE('INIT')
    IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
    IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
  END SELECT
END DO
! Passive pollutant variables
DO JSV = NSV_PPBEG, NSV_PPEND
  SELECT CASE(HGETSVM(JSV))
  CASE ('READ')
    IF ( KSIZELBXSV_ll /= 0 ) THEN
      YRECFM = 'LBX_PP'
      YDIRLB='LBX'
      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,&
           & IGRID,ILENCH,YCOMMENT,IRESP)
      IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
        IF (IRESP/=0) THEN
          IF (PRESENT(PLBXSVMM)) THEN
            PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
            WRITE(ILUOUT,*) 'Passive pollutant PLBXSVM   will be initialized to 0'
          ELSE
            PLBXSVM(:,:,:,JSV)=0.
            WRITE(ILUOUT,*) 'Passive pollutant PLBXSVM   will be initialized to 0'
          ENDIF
        END IF
      END IF
    END IF
!
    IF (KSIZELBYSV_ll  /= 0 ) THEN
      YRECFM = 'LBY_PP'
      YDIRLB='LBY'
      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,&
           & IGRID,ILENCH,YCOMMENT,IRESP)
      IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
        IF (IRESP/=0) THEN
          IF (PRESENT(PLBYSVMM)) THEN
            PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
            WRITE(ILUOUT,*) 'Passive pollutant PLBYSVM   will be initialized to 0'
          ELSE
            PLBYSVM(:,:,:,JSV)=0.
            WRITE(ILUOUT,*) 'Passive pollutant PLBYSVM   will be initialized to 0'
          ENDIF
        END IF
      END IF
    END IF
  CASE('INIT')
    IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
    IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
  END SELECT
END DO
#ifdef MNH_FOREFIRE
! ForeFire scalar variables
DO JSV = NSV_FFBEG, NSV_FFEND
  SELECT CASE(HGETSVM(JSV))
  CASE ('READ')
    IF ( KSIZELBXSV_ll /= 0 ) THEN
      YRECFM = 'LBX_FF'
      YDIRLB='LBX'
      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,&
           & IGRID,ILENCH,YCOMMENT,IRESP)
       WRITE(ILUOUT,*) 'ForeFire LBX_FF ', IRESP
       IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
        IF (IRESP/=0) THEN
          IF (PRESENT(PLBXSVMM)) THEN
            PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
            WRITE(ILUOUT,*) 'ForeFire pollutant PLBXSVM   will be initialized to 0'
          ELSE
            PLBXSVM(:,:,:,JSV)=0.
            WRITE(ILUOUT,*) 'ForeFire pollutant PLBXSVM   will be initialized to 0'
          ENDIF
        END IF
      END IF
    END IF
!
    IF (KSIZELBYSV_ll  /= 0 ) THEN
      YRECFM = 'LBY_FF'
      YDIRLB='LBY'
      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,&
           & IGRID,ILENCH,YCOMMENT,IRESP)
      IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
        IF (IRESP/=0) THEN
          IF (PRESENT(PLBYSVMM)) THEN
            PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
            WRITE(ILUOUT,*) 'ForeFire scalar variable PLBYSVM will be initialized to 0'
          ELSE
            PLBYSVM(:,:,:,JSV)=0.
            WRITE(ILUOUT,*) 'ForeFire scalar variable PLBYSVM will be initialized to 0'
          ENDIF
        END IF
      END IF
    END IF
  CASE('INIT')
    IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
    IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
  END SELECT
END DO
#endif
! Conditional sampling variables
DO JSV = NSV_CSBEG, NSV_CSEND
  SELECT CASE(HGETSVM(JSV))
  CASE ('READ')
    IF ( KSIZELBXSV_ll /= 0 ) THEN
      YRECFM = 'LBX_CS'
      YDIRLB='LBX'
      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,&
           & IGRID,ILENCH,YCOMMENT,IRESP)
      IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
        IF (IRESP/=0) THEN
          IF (PRESENT(PLBXSVMM)) THEN
            PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
            WRITE(ILUOUT,*) 'Conditional sampling LBXSVM   will be initialized to 0'
          ELSE
            PLBXSVM(:,:,:,JSV)=0.
            WRITE(ILUOUT,*) 'Conditional sampling PLBXSVM   will be initialized to 0'
          ENDIF
        END IF
      END IF
    END IF
!
    IF (KSIZELBYSV_ll  /= 0 ) THEN
      YRECFM = 'LBY_CS'
      YDIRLB='LBY'
      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,&
           & IGRID,ILENCH,YCOMMENT,IRESP)
      IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
        IF (IRESP/=0) THEN
          IF (PRESENT(PLBYSVMM)) THEN
            PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
            WRITE(ILUOUT,*) 'Conditional sampling PLBYSVM   will be initialized to 0'
          ELSE
            PLBYSVM(:,:,:,JSV)=0.
            WRITE(ILUOUT,*) 'Conditional sampling PLBYSVM   will be initialized to 0'
          ENDIF
        END IF
      END IF
    END IF
  CASE('INIT')
    IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
    IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
  END SELECT
END DO
! Linox scalar variables
DO JSV = NSV_LNOXBEG, NSV_LNOXEND
  SELECT CASE(HGETSVM(JSV))
  CASE ('READ')
    IF ( KSIZELBXSV_ll /= 0 ) THEN
      YRECFM = 'LBX_LINOX'
      YDIRLB='LBX'
      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,&
           & IGRID,ILENCH,YCOMMENT,IRESP)
      IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
        IF (IRESP/=0) THEN
          IF (PRESENT(PLBXSVMM)) THEN
            PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
            WRITE(ILUOUT,*) 'Linox PLBXSVM   will be initialized to 0'
          ELSE
            WRITE(ILUOUT,*) 'Pb to initialize Linox PLBXSVM '
!callabortstop
            CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
            CALL ABORT
            STOP
          ENDIF
        END IF
      END IF
    END IF
!
    IF (KSIZELBYSV_ll  /= 0 ) THEN
      YRECFM = 'LBY_LINOX'
      YDIRLB='LBY'
      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,&
           & IGRID,ILENCH,YCOMMENT,IRESP)
      IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
        IF (IRESP/=0) THEN
          IF (PRESENT(PLBYSVMM)) THEN
            PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
            WRITE(ILUOUT,*) 'Linox PLBYSVM   will be initialized to 0'
          ELSE
            WRITE(ILUOUT,*) 'Pb to initialize Linox PLBYSVM '
!calla bortstop
            CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
            CALL ABORT
            STOP
          ENDIF
        END IF
      END IF
    END IF
  CASE('INIT')
    IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
    IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
  END SELECT
END DO
! Lagrangian variables
DO JSV = NSV_LGBEG, NSV_LGEND
  SELECT CASE(HGETSVM(JSV))
  CASE ('READ')
    IF ( KSIZELBXSV_ll /= 0 ) THEN
      YRECFM = 'LBX_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
      YDIRLB='LBX'
      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBXSVM(:,:,:,JSV),IRIMX,IL3DX,&
           & IGRID,ILENCH,YCOMMENT,IRESP)
      IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
        IF (IRESP/=0) THEN
          IF (PRESENT(PLBXSVMM)) THEN
            PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
            WRITE(ILUOUT,*) 'lagrangian PLBXSVM   will be initialized to 0'
          ELSE
            WRITE(ILUOUT,*) 'Pb to initialize lagrangian PLBXSVM '
!callabortstop
            CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
            CALL ABORT
            STOP
          ENDIF
        END IF
      END IF
    END IF
!
    IF (KSIZELBYSV_ll  /= 0 ) THEN
      YRECFM = 'LBY_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
      YDIRLB='LBY'
      CALL FMREAD_LB(HINIFILE,YRECFM,HLUOUT,YDIRLB,PLBYSVM(:,:,:,JSV),IRIMY,IL3DY,&
           & IGRID,ILENCH,YCOMMENT,IRESP)
      IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
        IF (IRESP/=0) THEN
          IF (PRESENT(PLBYSVMM)) THEN
            PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
            WRITE(ILUOUT,*) 'lagrangian PLBYSVM   will be initialized to 0'
          ELSE
            WRITE(ILUOUT,*) 'Pb to initialize lagrangian PLBYSVM '
!callabortstop
            CALL CLOSE_ll(HLUOUT,IOSTAT=IRESP)
            CALL ABORT
            STOP
          ENDIF
        END IF
      END IF
    END IF
!
  CASE('INIT')
    IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
    IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
  END SELECT
END DO
!-------------------------------------------------------------------------------
!
!*       3.    COMPUTE THE LB SOURCES
!              -----------------------
!
! IN case of initialization of LB source terms (OLSOURCE=T) :
! xxxM are LB source terms 
! xxxMM are LB fields at time t -dt 
IF (OLSOURCE) THEN 
  IF (PRESENT(PLBXUMM).AND.PRESENT(PLBYUMM)) THEN
    PLBXUM(:,:,:) = (PLBXUM(:,:,:) - PLBXUMM(:,:,:))   / PLENG
    PLBYUM(:,:,:) = (PLBYUM(:,:,:) - PLBYUMM(:,:,:))   / PLENG
  ENDIF
  IF (PRESENT(PLBXVMM).AND.PRESENT(PLBYVMM)) THEN
    PLBXVM(:,:,:) = (PLBXVM(:,:,:) - PLBXVMM(:,:,:))   / PLENG
    PLBYVM(:,:,:) = (PLBYVM(:,:,:) - PLBYVMM(:,:,:))   / PLENG
  ENDIF
  IF (PRESENT(PLBXWMM).AND.PRESENT(PLBYWMM)) THEN 
    PLBXWM(:,:,:) = (PLBXWM(:,:,:) - PLBXWMM(:,:,:))   / PLENG
    PLBYWM(:,:,:) = (PLBYWM(:,:,:) - PLBYWMM(:,:,:))   / PLENG
  ENDIF
   IF (PRESENT(PLBXTHMM).AND.PRESENT(PLBYTHMM)) THEN 
    PLBXTHM(:,:,:) = (PLBXTHM(:,:,:) - PLBXTHMM(:,:,:))   / PLENG
    PLBYTHM(:,:,:) = (PLBYTHM(:,:,:) - PLBYTHMM(:,:,:))   / PLENG
  ENDIF
  IF (HGETTKEM =='READ') THEN
    IF (PRESENT(PLBXTKEMM).AND.PRESENT(PLBYTKEMM)) THEN 
      PLBXTKEM(:,:,:) = (PLBXTKEM(:,:,:) - PLBXTKEMM(:,:,:))   / PLENG
      PLBYTKEM(:,:,:) = (PLBYTKEM(:,:,:) - PLBYTKEMM(:,:,:))   / PLENG
    ENDIF
  ENDIF
  IF (HGETTKEM =='INIT') THEN
      PLBXTKEM(:,:,:) = 0.
      PLBYTKEM(:,:,:) = 0.
  ENDIF
! LB moist variables 
  IRR=0
  IF (PRESENT(PLBXRMM).AND.PRESENT(PLBYRMM))   THEN      
    DO JRR=1,7
      IF (YGETRXM(JRR) == 'READ') THEN      
        IRR=IRR+1  
        PLBXRM(:,:,:,IRR) = (PLBXRM(:,:,:,IRR) - PLBXRMM(:,:,:,IRR))   / PLENG
        PLBYRM(:,:,:,IRR) = (PLBYRM(:,:,:,IRR) - PLBYRMM(:,:,:,IRR))   / PLENG  
      ENDIF
    END DO
  ENDIF
! LB-scalar variables
  DO JSV=1,KSV
    IF (HGETSVM(JSV) == 'READ') THEN   
      PLBXSVM(:,:,:,JSV) = (PLBXSVM(:,:,:,JSV) - PLBXSVMM(:,:,:,JSV))   / PLENG
      PLBYSVM(:,:,:,JSV) = (PLBYSVM(:,:,:,JSV) - PLBYSVMM(:,:,:,JSV))   / PLENG 
    ENDIF
  END DO
! 
ENDIF

CONTAINS
FUNCTION UPCASE(HSTRING)

CHARACTER(LEN=*)            :: HSTRING
CHARACTER(LEN=LEN(HSTRING)) :: UPCASE

INTEGER :: JC
INTEGER, PARAMETER :: IAMIN = IACHAR("a")
INTEGER, PARAMETER :: IAMAJ = IACHAR("A")

DO JC=1,LEN(HSTRING)
  IF (HSTRING(JC:JC) >= "a" .AND. HSTRING(JC:JC) <= "z") THEN
      UPCASE(JC:JC) = ACHAR(IACHAR(HSTRING(JC:JC)) - IAMIN + IAMAJ)
  ELSE
      UPCASE(JC:JC) = HSTRING(JC:JC)
  END IF
END DO

END FUNCTION UPCASE
!
END SUBROUTINE INI_LB