Skip to content
Snippets Groups Projects
spawn_field2.f90 47.3 KiB
Newer Older
  • Learn to ignore specific revisions
  •       TZFIELD%NTYPE      = TYPEREAL
          TZFIELD%NDIMS      = 3
          !
          DO JSV = NSV_SLTBEG,NSV_SLTEND
            TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
            TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
            WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
            CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
            IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
          END DO
        END IF
        !
        ! LG Scalar Variables
        !
        IF (NSV_LGEND>=NSV_LGBEG) THEN
          TZFIELD%CSTDNAME   = ''
          TZFIELD%CUNITS     = 'm'
          TZFIELD%CDIR       = 'XY'
          TZFIELD%NGRID      = 1
          TZFIELD%NTYPE      = TYPEREAL
          TZFIELD%NDIMS      = 3
          !
          DO JSV = NSV_LGBEG,NSV_LGEND
            TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
            TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
            WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
            CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
            IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
          END DO
        END IF
        !
        ! LNOx Scalar Variables
        !
    !PW:TODO/bug1?: LINOX or LINOXT?
    !PW:TODO/bug2?: Same name of variable in a loop!
        IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN
          TZFIELD%CSTDNAME   = ''
          TZFIELD%CUNITS     = 'ppp' !PW: TODO: not sure (depends if LINOX or LINOXT)
          TZFIELD%CDIR       = 'XY'
          TZFIELD%NGRID      = 1
          TZFIELD%NTYPE      = TYPEREAL
          TZFIELD%NDIMS      = 3
          !
          DO JSV = NSV_LNOXBEG,NSV_LNOXEND
            TZFIELD%CMNHNAME   = 'LINOX'
            TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
            WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
            CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
            IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
          END DO
        END IF
        !
        ! Passive scalar variables
        !
        IF (NSV_PPEND>=NSV_PPBEG) THEN
          TZFIELD%CSTDNAME   = ''
          TZFIELD%CUNITS     = 'kg kg-1'
          TZFIELD%CDIR       = 'XY'
          TZFIELD%NGRID      = 1
          TZFIELD%NTYPE      = TYPEREAL
          TZFIELD%NDIMS      = 3
          !
          DO JSV = NSV_PPBEG,NSV_PPEND
            WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
            TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
            TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
            CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
            IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
          END DO
        END IF
    
        !
        ! ForeFire variables
        !
        IF (NSV_FFEND>=NSV_FFBEG) THEN
          TZFIELD%CSTDNAME   = ''
          TZFIELD%CUNITS     = 'kg kg-1'
          TZFIELD%CDIR       = 'XY'
          TZFIELD%NGRID      = 1
          TZFIELD%NTYPE      = TYPEREAL
          TZFIELD%NDIMS      = 3
          !
          DO JSV = NSV_FFBEG,NSV_FFEND
            WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
            TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
            TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
            CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
            IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
          END DO
        END IF
    
        !
        ! Passive scalar variables
        !
        IF (NSV_CSEND>=NSV_CSBEG) THEN
          TZFIELD%CSTDNAME   = ''
          TZFIELD%CUNITS     = 'kg kg-1'
          TZFIELD%CDIR       = 'XY'
          TZFIELD%NGRID      = 1
          TZFIELD%NTYPE      = TYPEREAL
          TZFIELD%NDIMS      = 3
          !
          DO JSV = NSV_CSBEG,NSV_CSEND
            WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
            TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
            TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
            CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
            IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
          END DO
        END IF
        !
        ! Passive scalar variables
        !
        IF (NSV_PP>=1) THEN
          TZFIELD%CSTDNAME   = ''
          TZFIELD%CUNITS     = 'm-3'
          TZFIELD%CDIR       = 'XY'
          TZFIELD%NGRID      = 1
          TZFIELD%NTYPE      = TYPEREAL
          TZFIELD%NDIMS      = 3
          !
          DO JSV = 1,NSV_PP
            WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_PPBEG-1
            TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
            WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1
            CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
            IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
          END DO
        END IF
    
        !
        ! ForeFire variables
        !
        IF (NSV_FF>=1) THEN
          TZFIELD%CSTDNAME   = ''
          TZFIELD%CUNITS     = 'm-3'
          TZFIELD%CDIR       = 'XY'
          TZFIELD%NGRID      = 1
          TZFIELD%NTYPE      = TYPEREAL
          TZFIELD%NDIMS      = 3
          !
          DO JSV = 1,NSV_FF
            WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_FFBEG-1
            TZFIELD%CLONGNAME  = 'MesoNH: '//TRIM(TZFIELD%CMNHNAME)
            WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_FFBEG-1
            CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
            IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
          END DO
        END IF
    
      END IF
      !
      ! Secondary pronostic variables
      !
      IF (HTURB /= 'NONE' .AND. IRR>1) THEN
    
        CALL IO_READ_FIELD(TPSONFILE,'SRCT',ZWORK3D,IRESP) ! turbulent flux SRC at time t
    
        IF(IRESP == 0) PSRCT(KIB2:KIE2,KJB2:KJE2,:) =                    &
                                            ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
    
        CALL IO_READ_FIELD(TPSONFILE,'SIGS',ZWORK3D,IRESP) ! subgrid condensation
    
        IF(IRESP == 0) PSIGS(KIB2:KIE2,KJB2:KJE2,:) =                    &
                                            ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
      END IF
    END IF
    !
    !*       2.2.4  secondary prognostic variables correction
    !
    IF (CONF_MODEL(1)%NRR > 1 .AND. HTURB /= 'NONE')  PSRCT(:,:,:) = MIN( 1.0, MAX( 0.0, PSRCT(:,:,:)) )
    !
    IF ( CONF_MODEL(1)%NRR == 0 ) THEN
      PHUT (:,:,:)= 0.
    END IF
    !-------------------------------------------------------------------------------
    !
    CALL GOTO_MODEL(IMI)
    
    CALL GO_TOMODEL_ll(IMI, IINFO_ll)
    
    CONTAINS 
    !      
          SUBROUTINE COMPUTE_THV_HU(OUSERV,PR,PTH,PPABS,PTHV,PHU)
    !
    IMPLICIT NONE
    !
    !*       0.1   Declarations of dummy arguments :
    !
    LOGICAL, INTENT(IN)   :: OUSERV
    REAL, DIMENSION(:,:,:),   INTENT(IN)   :: PTH,PPABS
    REAL, DIMENSION(:,:,:,:), INTENT(IN)   :: PR
    REAL, DIMENSION(:,:,:),   INTENT(OUT)  :: PTHV,PHU
    !
    !*       0.2    Declarations of local variables 
    !
    REAL, DIMENSION(SIZE(PR,1),SIZE(PR,2),SIZE(PR,3)) :: ZSUMR ! sum of water ratios
    !
    IF (OUSERV) THEN
      ZSUMR(:,:,:) = 0.
      IRR=SIZE(PR,4)
      DO JRR=1,IRR
        ZSUMR(:,:,:) = ZSUMR(:,:,:) + PR(:,:,:,JRR)
      END DO
      PTHV(:,:,:)=PTH(:,:,:)*(1.+XRV/XRD*PR(:,:,:,1))/(1.+ZSUMR(:,:,:))
      PHU (:,:,:)=100.*PPABS(:,:,:)/(XRD/XRV/MAX(PR(:,:,:,1),1.E-16)+1.) &
                   /SM_FOES(PTH(:,:,:)*(PPABS(:,:,:)/XP00)**(XRD/XCPD))
    ELSE
      PTHV(:,:,:)=PTH(:,:,:)
      PHU (:,:,:)=0.
    END IF
    !
    !
    END SUBROUTINE COMPUTE_THV_HU
    !
    END SUBROUTINE SPAWN_FIELD2