Skip to content
Snippets Groups Projects
read_exsegn.f90 111 KiB
Newer Older
    ! Check the validity of the LCLEAR_SKY approximation
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE BOTH THE CLEAR-SKY APPROXIMATION'
    WRITE(UNIT=ILUOUT,FMT=*) '(i.e. AVERAGE THE WHOLE CLOUDFREE VERTICALS BUT KEEP'
    WRITE(UNIT=ILUOUT,FMT=*) 'ALL THE CLOUDY VERTICALS) AND'
    WRITE(UNIT=ILUOUT,FMT=*) 'THE CLOUD-ONLY APPROXIMATION (i.e. YOU CALL MORE OFTEN THE'
    WRITE(UNIT=ILUOUT,FMT=*) 'RADIATIONS FOR THE CLOUDY VERTICALS THAN FOR CLOUDFREE ONES).'
    WRITE(UNIT=ILUOUT,FMT=*) 'THIS IS NOT POSSIBLE, SO CHOOSE BETWEEN :'
    WRITE(UNIT=ILUOUT,FMT=*) 'XDTRAD_CLONLY = XDTRAD and LCLEAR_SKY = FALSE'
!
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  END IF
!
  IF( XDTRAD_CLONLY > XDTRAD ) THEN
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(UNIT=ILUOUT,FMT='("BAD USE OF THE CLOUD-ONLY APPROXIMATION   " ,&
    &" XDTRAD SHOULD BE LARGER THAN XDTRAD_CLONLY                      ")')
!
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  END IF
!
  IF(( XDTRAD < XTSTEP ).OR. ( XDTRAD_CLONLY < XTSTEP )) THEN
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(UNIT=ILUOUT,FMT='("THE RADIATION CALL XDTRAD OR XDTRAD_CLONLY " ,&
    &" IS MORE FREQUENT THAN THE TIME STEP SO ADJUST XDTRAD OR XDTRAD_CLONLY ")')
!
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
IF ( CRAD /= 'NONE' .AND. CPROGRAM=='MESONH' ) THEN
  CGETRAD='READ'
  IF( HRAD == 'NONE' .AND. CCONF=='RESTA') THEN
    WRITE(UNIT=ILUOUT,FMT=9001) KMI
    WRITE(UNIT=ILUOUT,FMT=*) 'YOU ARE PERFORMING A RESTART. FOR THIS SEGMENT, YOU ARE USING A RADIATION'
    WRITE(UNIT=ILUOUT,FMT=*) 'SCHEME AND NO RADIATION SCHEME WAS USED FOR THE PREVIOUS SEGMENT.'
    CGETRAD='INIT'
  END IF
  IF(CCONF=='START') THEN
    CGETRAD='INIT'
  END IF
END IF
!
!        3.6  check the initialization of the deep convection scheme
!
IF ( (CDCONV /= 'KAFR') .AND. &
      (CSCONV /= 'KAFR') .AND. LCHTRANS ) THEN
   WRITE(UNIT=ILUOUT,FMT=9003) KMI
   WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE LCHTRANS OPTION= ",&
    &"CONVECTIVE TRANSPORT OF TRACERS BUT  IT CAN ONLY",&
    &"BE USED FOR THE KAIN FRITSCH SCHEME ")')
 !callabortstop
   CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
END IF
!
SELECT CASE ( CDCONV )
  CASE( 'KAFR' )
    IF (.NOT. ( LUSERV ) ) THEN
      WRITE(UNIT=ILUOUT,FMT=9002) KMI
      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH DEEP CONV. ",&
      &" SCHEME. YOU MUST HAVE VAPOR ",/,"LUSERV IS SET TO TRUE ")')
      LUSERV=.TRUE.
    ELSE IF (.NOT. ( LUSERI ) ) THEN
      WRITE(UNIT=ILUOUT,FMT=9002) KMI
      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH",&
      &" DEEP CONV. SCHEME. BUT THE DETRAINED CLOUD ICE WILL BE ADDED TO   ",&
      &" THE CLOUD WATER  ")')
    ELSE IF (.NOT. ( LUSERI.AND.LUSERC ) ) THEN
      WRITE(UNIT=ILUOUT,FMT=9002) KMI
      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH",&
      &" DEEP CONV. SCHEME. BUT THE DETRAINED CLOUD WATER AND CLOUD ICE    ",&
      &" WILL BE ADDED TO THE WATER VAPOR FIELD  ")')
    END IF
    IF ( LCHTRANS .AND. NSV == 0 ) THEN
      WRITE(UNIT=ILUOUT,FMT=9002) KMI
      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE LCHTRANS OPTION= ",&
      &"CONVECTIVE TRANSPORT OF TRACERS BUT YOUR TRACER ",&
      &"NUMBER NSV IS ZERO ",/,"LCHTRANS IS SET TO FALSE")')
      LCHTRANS=.FALSE.
    END IF
END SELECT
!
IF ( CDCONV == 'KAFR' .AND. LCHTRANS .AND. NSV > 0 ) THEN
  IF( OCHTRANS ) THEN
    CGETSVCONV='READ'
  ELSE  
    CGETSVCONV='INIT'
  END IF
END IF
!
SELECT CASE ( CSCONV )
  CASE( 'KAFR' )
    IF (.NOT. ( LUSERV ) ) THEN
      WRITE(UNIT=ILUOUT,FMT=9002) KMI
      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH SHALLOW CONV. ",&
      &" SCHEME. YOU MUST HAVE VAPOR ",/,"LUSERV IS SET TO TRUE ")')
      LUSERV=.TRUE.
    ELSE IF (.NOT. ( LUSERI ) ) THEN
      WRITE(UNIT=ILUOUT,FMT=9002) KMI
      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH",&
      &" SHALLOW CONV. SCHEME. BUT THE DETRAINED CLOUD ICE WILL BE ADDED TO   ",&
      &" THE CLOUD WATER  ")')
    ELSE IF (.NOT. ( LUSERI.AND.LUSERC ) ) THEN
      WRITE(UNIT=ILUOUT,FMT=9002) KMI
      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE KAIN-FRITSCH",&
      &" SHALLOW CONV. SCHEME. BUT THE DETRAINED CLOUD WATER AND CLOUD ICE    ",&
      &" WILL BE ADDED TO THE WATER VAPOR FIELD  ")')
    END IF
    IF ( LCHTRANS .AND. NSV == 0 ) THEN
      WRITE(UNIT=ILUOUT,FMT=9002) KMI
      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE LCHTRANS OPTION= ",&
      &"CONVECTIVE TRANSPORT OF TRACERS BUT YOUR TRACER ",&
      &"NUMBER NSV IS ZERO ",/,"LCHTRANS IS SET TO FALSE")')
      LCHTRANS=.FALSE.
    END IF
 CASE( 'EDKF' )
    IF (CTURB == 'NONE' ) THEN
      WRITE(UNIT=ILUOUT,FMT=9003) KMI
      WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE THE EDKF ", & 
      &"SHALLOW CONVECTION WITHOUT TURBULENCE SCHEME : ", &
      &"IT IS NOT POSSIBLE")')
!
 !callabortstop
      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
    END IF
END SELECT
!
!
CGETCONV = 'SKIP'
!
IF ( (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR' ) .AND. CPROGRAM=='MESONH') THEN
  CGETCONV = 'READ'
  IF( HDCONV == 'NONE' .AND. CCONF=='RESTA') THEN
    WRITE(UNIT=ILUOUT,FMT=9001) KMI
    WRITE(UNIT=ILUOUT,FMT='(" YOU ARE PERFORMING A RESTART. FOR THIS  ",&
     &" SEGMENT, YOU ARE USING A DEEP CONVECTION SCHEME AND NO DEEP    ",&
     &" CONVECTION SCHEME WAS USED FOR THE PREVIOUS SEGMENT. ")')
!
    CGETCONV = 'INIT'
  END IF
  IF(CCONF=='START') THEN
    CGETCONV = 'INIT'
  END IF
END IF
!
!*       3.7  configuration and model version
!
IF (KMI == 1) THEN                                                
! 
  IF (L1D.AND.(CLBCX(1)/='CYCL'.AND.CLBCX(2)/='CYCL' &
          .AND.CLBCY(1)/='CYCL'.AND.CLBCY(2)/='CYCL')) THEN
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 1D MODEL VERSION WITH NON-CYCL",&
                & "CLBCX OR CLBCY VALUES")')
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  END IF
  IF (L2D.AND.(CLBCY(1)/='CYCL'.AND.CLBCY(2)/='CYCL')) THEN
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 2D MODEL VERSION WITH NON-CYCL",&
                & " CLBCY VALUES")')
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  END IF
  !
 IF ( (.NOT. LCARTESIAN) .AND. ( LCORIO) .AND. (.NOT. LGEOST_UV_FRC) ) THEN
   WRITE(UNIT=ILUOUT,FMT=9002) KMI
   WRITE(UNIT=ILUOUT,FMT='("BE CAREFUL YOU COULD HAVE SPURIOUS MOTIONS      " ,&
        & " NEAR THE LBC AS LCORIO=T and  LGEOST_UV_FRC=F")')
 END IF
  !
  IF ((.NOT.LFLAT).AND.OFLAT) THEN                                      
    WRITE(UNIT=ILUOUT,FMT=9002) KMI 
    WRITE(UNIT=ILUOUT,FMT=*) 'ZERO OROGRAPHY IN INITIAL FILE'
    WRITE(UNIT=ILUOUT,FMT=*) '***** ALL TERMS HAVE BEEN NEVERTHELESS COMPUTED WITHOUT SIMPLIFICATION*****'
    WRITE(UNIT=ILUOUT,FMT=*) 'THIS SHOULD LEAD TO ERRORS IN THE PRESSURE COMPUTATION'     
  END IF
  IF (LFLAT.AND.(.NOT.OFLAT)) THEN
    WRITE(UNIT=ILUOUT,FMT=9002) KMI
    WRITE(UNIT=ILUOUT,FMT='(" OROGRAPHY IS NOT EQUAL TO ZERO ",            &
          & "IN INITIAL FILE" ,/,                                          &
          & "******* OROGRAPHY HAS BEEN SET TO ZERO *********",/,          &
          & "ACCORDING TO ZERO OROGRAPHY, SIMPLIFICATIONS  HAVE  ",        &
          & "BEEN MADE IN  COMPUTATIONS")')
  END IF 
END IF
!
!*       3.8  System of equations
!
IF ( HEQNSYS /= CEQNSYS ) THEN
  WRITE(UNIT=ILUOUT,FMT=9003) KMI
  WRITE(ILUOUT,FMT=*) 'YOU HAVE CHANGED THE SYSTEM OF EQUATIONS'
  WRITE(ILUOUT,FMT=*) 'THE ANELASTIC CONSTRAINT IS PERHAPS CHANGED :'
  WRITE(ILUOUT,FMT=*) 'FOR THE INITIAL FILE YOU HAVE USED ',HEQNSYS
  WRITE(ILUOUT,FMT=*) 'FOR THE RUN YOU PLAN TO USE ',CEQNSYS
  WRITE(ILUOUT,FMT=*) 'THIS CAN LEAD TO A NUMERICAL EXPLOSION IN THE FIRST TIME STEPS'
 !callabortstop
  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
!
!        3.9  Numerical schemes
!
IF ( (CUVW_ADV_SCHEME == 'CEN4TH') .AND. &
      (CTEMP_SCHEME /= 'LEFR') .AND. (CTEMP_SCHEME /= 'RKC4') ) THEN
   WRITE(UNIT=ILUOUT,FMT=9003) KMI
   WRITE(UNIT=ILUOUT,FMT='("CEN4TH SCHEME HAS TO BE USED WITH ",&
    &"CTEMP_SCHEME = LEFR of RKC4 ONLY")')   
 !callabortstop
   CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
END IF
!
IF ( (CUVW_ADV_SCHEME == 'WENO_K') .AND. LNUMDIFU ) THEN
   WRITE(UNIT=ILUOUT,FMT=9002) KMI
   WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE NUMERICAL DIFFUSION ",&
    &"WITH WENO SCHEME ALREADY DIFFUSIVE")')   
END IF
!-------------------------------------------------------------------------------
!
!*       4.    CHECK COHERENCE BETWEEN EXSEG VARIABLES
!              ---------------------------------------
!        
!*       4.1  coherence between coupling variables in EXSEG file  
!                      
IF (KMI == 1) THEN
  NCPL_NBR = 0
  DO JCI = 1,JPCPLFILEMAX
    IF (LEN_TRIM(CCPLFILE(JCI)) /= 0) THEN        ! Finds the number 
      NCPL_NBR = NCPL_NBR + 1                     ! of coupling files
    ENDIF
    IF (JCI/=JPCPLFILEMAX) THEN                   ! Deplaces the coupling files
      IF ((LEN_TRIM(CCPLFILE(JCI)) == 0) .AND.   &! names if one missing
          (LEN_TRIM(CCPLFILE(JCI+1)) /= 0)) THEN
        DO JI=JCI,JPCPLFILEMAX-1
          CCPLFILE(JI)=CCPLFILE(JI+1)
        END DO
        CCPLFILE(JPCPLFILEMAX)='    '
      END IF
    END IF
  END DO
!
  IF (NCPL_NBR /= 0) THEN         
    LSTEADYLS = .FALSE.
  ELSE
    LSTEADYLS = .TRUE.
  ENDIF 
END IF
!        
!*       4.3   check consistency in forcing switches
!
IF ( LFORCING ) THEN
  IF ( LRELAX_THRV_FRC .AND. ( LTEND_THRV_FRC .OR. LGEOST_TH_FRC ) ) THEN
    WRITE(UNIT=ILUOUT,FMT=9002) KMI
    WRITE(ILUOUT,FMT=*) 'YOU CHOSE A TEMPERATURE AND HUMIDITY RELAXATION'
    WRITE(ILUOUT,FMT=*) 'TOGETHER WITH TENDENCY OR GEOSTROPHIC FORCING'
    WRITE(ILUOUT,FMT=*) &
  'YOU MIGHT CHECK YOUR SWITCHES:  LRELAX_THRV_FRC, LTEND_THRV_FRC, AND'
    WRITE(ILUOUT,FMT=*) 'LGEOST_TH_FRC'
  END IF
!
  IF ( LRELAX_UV_FRC .AND. LGEOST_UV_FRC ) THEN
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(ILUOUT,FMT=*) 'YOU MUST NOT USE A WIND RELAXATION' 
    WRITE(ILUOUT,FMT=*) 'TOGETHER WITH A GEOSTROPHIC FORCING'
    WRITE(ILUOUT,FMT=*) 'CHECK SWITCHES:  LRELAX_UV_FRC, LGEOST_UV_FRC'
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  END IF
!
  IF ( CRELAX_HEIGHT_TYPE.NE."FIXE" .AND. CRELAX_HEIGHT_TYPE.NE."THGR" ) THEN
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(ILUOUT,FMT=*) 'CRELAX_HEIGHT_TYPE MUST BE EITHER "FIXE" OR "THGR"'
    WRITE(ILUOUT,FMT=*) 'BUT IT IS "', CRELAX_HEIGHT_TYPE, '"'
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  END IF
!
  IF ( .NOT.LCORIO .AND. LGEOST_UV_FRC ) THEN
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(ILUOUT,FMT=*) 'YOU CANNOT HAVE A GEOSTROPHIC FORCING WITHOUT'
    WRITE(ILUOUT,FMT=*) 'ACTIVATING LCORIOLIS OPTION'
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  END IF
!
  IF ( LPGROUND_FRC ) THEN
    WRITE(ILUOUT,FMT=*) 'SURFACE PRESSURE FORCING NOT YET IMPLEMENTED'
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  END IF
!
END IF
!
IF (LTRANS .AND. .NOT. LFLAT ) THEN
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(ILUOUT,FMT=*) 'YOU ASK FOR A CONSTANT SPEED DOMAIN TRANSLATION '
    WRITE(ILUOUT,FMT=*) 'BUT NOT IN THE FLAT TERRAIN CASE:'
    WRITE(ILUOUT,FMT=*) 'THIS IS NOT ALLOWED ACTUALLY'
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
END IF
!
!*       4.4  Check the coherence between the LUSERn and LHORELAX
!
IF (.NOT. LUSERV .AND. LHORELAX_RV) THEN
  LHORELAX_RV=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RV FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RV=FALSE'
END IF
!
IF (.NOT. LUSERC .AND. LHORELAX_RC) THEN
  LHORELAX_RC=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RC FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RC=FALSE'
END IF
!
IF (.NOT. LUSERR .AND. LHORELAX_RR) THEN
  LHORELAX_RR=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RR FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RR=FALSE'
END IF
!
IF (.NOT. LUSERI .AND. LHORELAX_RI) THEN
  LHORELAX_RI=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RI FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RI=FALSE'
END IF
!
IF (.NOT. LUSERS .AND. LHORELAX_RS) THEN
  LHORELAX_RS=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RS FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RS=FALSE'
END IF
!
IF (.NOT. LUSERG .AND. LHORELAX_RG) THEN
  LHORELAX_RG=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RG FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RG=FALSE'
END IF
!
IF (.NOT. LUSERH .AND. LHORELAX_RH) THEN
  LHORELAX_RH=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX RH FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RH=FALSE'
END IF
!
IF (CTURB=='NONE' .AND. LHORELAX_TKE) THEN
  LHORELAX_TKE=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX TKE FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_TKE=FALSE'
END IF
!
!
IF (CCLOUD/='C2R2'  .AND. CCLOUD/='KHKO'  .AND. LHORELAX_SVC2R2) THEN
  LHORELAX_SVC2R2=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX C2R2 or KHKO FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVC2R2=FALSE'
END IF
!
IF (CCLOUD/='C3R5' .AND. LHORELAX_SVC1R3) THEN
  LHORELAX_SVC1R3=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX C3R5 FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVC1R3=FALSE'
END IF
!
Gaelle TANGUY's avatar
Gaelle TANGUY committed
IF (CCLOUD/='LIMA' .AND. LHORELAX_SVLIMA) THEN
  LHORELAX_SVLIMA=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX LIMA FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVLIMA=FALSE'
END IF
!
IF (CELEC(1:3) /= 'ELE' .AND. LHORELAX_SVELEC) THEN
  LHORELAX_SVELEC=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX ELEC FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVELEC=FALSE'
END IF
!
IF (.NOT. LUSECHEM .AND. LHORELAX_SVCHEM) THEN
  LHORELAX_SVCHEM=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX CHEM FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVCHEM=FALSE'
END IF
!
IF (.NOT. LUSECHIC .AND. LHORELAX_SVCHIC) THEN
  LHORELAX_SVCHIC=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX ICE CHEM FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVCHIC=FALSE'
END IF
!
IF (.NOT. LORILAM .AND. LHORELAX_SVAER) THEN
  LHORELAX_SVAER=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX AEROSOL FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVAER=FALSE'
END IF

IF (.NOT. LDUST .AND. LHORELAX_SVDST) THEN
  LHORELAX_SVDST=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX DUST FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVDST=FALSE'
END IF

IF (.NOT. LSALT .AND. LHORELAX_SVSLT) THEN
  LHORELAX_SVSLT=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX SEA SALT FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVSLT=FALSE'
END IF

IF (.NOT. LPASPOL .AND. LHORELAX_SVPP) THEN
  LHORELAX_SVPP=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX PASSIVE POLLUTANT FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVPP=FALSE'
END IF
#ifdef MNH_FOREFIRE
IF (.NOT. LFOREFIRE .AND. LHORELAX_SVFF) THEN
  LHORELAX_SVFF=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX FOREFIRE FLUXES BUT THEY DO NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVFF=FALSE'
END IF
#endif
IF (.NOT. LCONDSAMP .AND. LHORELAX_SVCS) THEN
  LHORELAX_SVCS=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX CONDITIONAL SAMPLING FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVCS=FALSE'
END IF

IF (.NOT. LBLOWSNOW .AND. LHORELAX_SVSNW) THEN
  LHORELAX_SVSNW=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX BLOWING SNOW FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVSNW=FALSE'
END IF

IF (ANY(LHORELAX_SV(NSV+1:))) THEN
  LHORELAX_SV(NSV+1:)=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX SV(NSV+1:) FIELD BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SV(NSV+1:)=FALSE'
END IF
!
!*       4.5   check the number of points for the horizontal relaxation
!
IF ( NRIMX > KRIMX .AND. .NOT.LHORELAX_SVELEC ) THEN
  NRIMX = KRIMX 
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE A LARGER NUMBER OF POINTS '
  WRITE(ILUOUT,FMT=*) 'FOR THE HORIZONTAL RELAXATION THAN THE '
  WRITE(ILUOUT,FMT=*) 'CORRESPONDING NUMBER OF LARGE SCALE FIELDS:'
  WRITE(ILUOUT,FMT=*) 'IT IS THEREFORE REDUCED TO NRIMX =',NRIMX
END IF
!
IF ( L2D .AND. KRIMY>0 ) THEN
  NRIMY = 0 
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE A 2D MODEL THEREFORE  NRIMY=0 '
END IF
!
IF ( NRIMY > KRIMY .AND. .NOT.LHORELAX_SVELEC ) THEN
  NRIMY = KRIMY 
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE A LARGER NUMBER OF POINTS '
  WRITE(ILUOUT,FMT=*) 'FOR THE HORIZONTAL RELAXATION THAN THE '
  WRITE(ILUOUT,FMT=*) 'CORRESPONDING NUMBER OF LARGE SCALE FIELDS:'
  WRITE(ILUOUT,FMT=*) 'IT IS THEREFORE REDUCED TO NRIMY =',NRIMY
END IF
!
IF ( (.NOT. LHORELAX_UVWTH) .AND. (.NOT.(ANY(LHORELAX_SV))) .AND.  &
     (.NOT. LHORELAX_SVC2R2).AND. (.NOT. LHORELAX_SVC1R3)   .AND.  &
Gaelle TANGUY's avatar
Gaelle TANGUY committed
     (.NOT. LHORELAX_SVLIMA).AND.                                  &
     (.NOT. LHORELAX_SVELEC).AND. (.NOT. LHORELAX_SVCHEM)   .AND.  &
     (.NOT. LHORELAX_SVLG)  .AND. (.NOT. LHORELAX_SVPP)     .AND.  &
     (.NOT. LHORELAX_SVCS)  .AND.                                  &
#ifdef MNH_FOREFIRE
     (.NOT. LHORELAX_SVFF)  .AND.                                  &
#endif
     (.NOT. LHORELAX_RV)    .AND. (.NOT. LHORELAX_RC)       .AND.  &
     (.NOT. LHORELAX_RR)    .AND. (.NOT. LHORELAX_RI)       .AND.  &
     (.NOT. LHORELAX_RS)    .AND. (.NOT. LHORELAX_RG)       .AND.  &
     (.NOT. LHORELAX_RH)    .AND. (.NOT. LHORELAX_TKE)      .AND.  &
     (.NOT. LHORELAX_SVCHIC).AND.                                  &
                                  (NRIMX /= 0 .OR. NRIMY /= 0))  THEN  
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU DO NOT WANT TO USE THE HORIZONTAL RELAXATION '
  WRITE(ILUOUT,FMT=*) 'THEREFORE NRIMX=NRIMY=0     '
  NRIMX=0
  NRIMY=0
END IF
!
IF ((LHORELAX_UVWTH  .OR. LHORELAX_SVPP   .OR.  &
     LHORELAX_SVCS   .OR.                       &
#ifdef MNH_FOREFIRE
     LHORELAX_SVFF   .OR.                       &
#endif
     LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR.  &
Gaelle TANGUY's avatar
Gaelle TANGUY committed
     LHORELAX_SVLIMA .OR.                       &
     LHORELAX_SVELEC .OR. LHORELAX_SVCHEM .OR.  &
     LHORELAX_SVLG   .OR. ANY(LHORELAX_SV) .OR. &
     LHORELAX_RV     .OR. LHORELAX_RC .OR.      &
     LHORELAX_RR     .OR. LHORELAX_RI .OR.      &
     LHORELAX_RG     .OR. LHORELAX_RS .OR.      &
     LHORELAX_RH     .OR. LHORELAX_TKE.OR.      &
     LHORELAX_SVCHIC )                          &
     .AND. (NRIMX==0 .OR. (NRIMY==0 .AND. .NOT.(L2D) ))) THEN
  WRITE(UNIT=ILUOUT,FMT=9003) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE THE HORIZONTAL RELAXATION '
  WRITE(ILUOUT,FMT=*) 'BUT NRIMX OR NRIMY=0 CHANGE YOUR VALUES   '
  WRITE(ILUOUT,FMT=*) "LHORELAX_UVWTH=",LHORELAX_UVWTH
  WRITE(ILUOUT,FMT=*) "LHORELAX_SVC2R2=",LHORELAX_SVC2R2
  WRITE(ILUOUT,FMT=*) "LHORELAX_SVC1R3=",LHORELAX_SVC1R3
Gaelle TANGUY's avatar
Gaelle TANGUY committed
  WRITE(ILUOUT,FMT=*) "LHORELAX_SVLIMA=",LHORELAX_SVLIMA
  WRITE(ILUOUT,FMT=*) "LHORELAX_SVELEC=",LHORELAX_SVELEC
  WRITE(ILUOUT,FMT=*) "LHORELAX_SVCHEM=",LHORELAX_SVCHEM
  WRITE(ILUOUT,FMT=*) "LHORELAX_SVCHIC=",LHORELAX_SVCHIC
  WRITE(ILUOUT,FMT=*) "LHORELAX_SVLG=",LHORELAX_SVLG
  WRITE(ILUOUT,FMT=*) "LHORELAX_SVPP=",LHORELAX_SVPP
#ifdef MNH_FOREFIRE
  WRITE(ILUOUT,FMT=*) "LHORELAX_SVFF=",LHORELAX_SVFF
#endif
  WRITE(ILUOUT,FMT=*) "LHORELAX_SVCS=",LHORELAX_SVCS
  WRITE(ILUOUT,FMT=*) "LHORELAX_SV=",LHORELAX_SV
  WRITE(ILUOUT,FMT=*) "LHORELAX_RV=",LHORELAX_RV
  WRITE(ILUOUT,FMT=*) "LHORELAX_RC=",LHORELAX_RC
  WRITE(ILUOUT,FMT=*) "LHORELAX_RR=",LHORELAX_RR
  WRITE(ILUOUT,FMT=*) "LHORELAX_RI=",LHORELAX_RI
  WRITE(ILUOUT,FMT=*) "LHORELAX_RG=",LHORELAX_RG
  WRITE(ILUOUT,FMT=*) "LHORELAX_RS=",LHORELAX_RS
  WRITE(ILUOUT,FMT=*) "LHORELAX_RH=",LHORELAX_RH
  WRITE(ILUOUT,FMT=*) "LHORELAX_TKE=", LHORELAX_TKE
  WRITE(ILUOUT,FMT=*) "NRIMX=",NRIMX
  WRITE(ILUOUT,FMT=*) "NRIMY=",NRIMY
  WRITE(ILUOUT,FMT=*) "L2D=",L2D
 !callabortstop
  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
END IF
! 
IF ((LHORELAX_UVWTH  .OR. LHORELAX_SVPP  .OR.   &
     LHORELAX_SVCS   .OR.                       &
#ifdef MNH_FOREFIRE
     LHORELAX_SVFF   .OR.                       &
#endif
     LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR.  &
Gaelle TANGUY's avatar
Gaelle TANGUY committed
     LHORELAX_SVLIMA .OR.                       &
     LHORELAX_SVELEC .OR. LHORELAX_SVCHEM .OR.  &
     LHORELAX_SVLG   .OR. ANY(LHORELAX_SV) .OR. &
     LHORELAX_RV     .OR. LHORELAX_RC .OR.      &
     LHORELAX_RR     .OR. LHORELAX_RI .OR.      &
     LHORELAX_RG     .OR. LHORELAX_RS .OR.      &
     LHORELAX_RH     .OR. LHORELAX_TKE.OR.      &
     LHORELAX_SVCHIC )                          &
     .AND. (KMI /=1)) THEN
  WRITE(UNIT=ILUOUT,FMT=9003) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE THE HORIZONTAL RELAXATION '
  WRITE(ILUOUT,FMT=*) 'FOR A NESTED MODEL BUT THE COUPLING IS ALREADY DONE' 
  WRITE(ILUOUT,FMT=*) 'BY THE GRID NESTING. CHANGE LHORELAX TO FALSE'
 !callabortstop
  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
END IF
! 
IF (KMI==1) THEN
  GRELAX = .NOT.(OUSERV)  .AND.  LUSERV  .AND. LHORELAX_RV
ELSE
  GRELAX = .NOT.(LUSERV_G(NDAD(KMI)))  .AND.  LUSERV_G(KMI).AND. LHORELAX_RV 
END IF 
!
IF ( GRELAX )  THEN
  LHORELAX_RV=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RV FIELD'
  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RV=FALSE'
END IF
!
IF (KMI==1) THEN
  GRELAX = .NOT.(OUSERC)  .AND.  LUSERC  .AND. LHORELAX_RC
ELSE
  GRELAX = .NOT.(LUSERC_G(NDAD(KMI)))  .AND.  LUSERC_G(KMI).AND. LHORELAX_RC 
END IF 
!
IF ( GRELAX )  THEN
  LHORELAX_RC=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RC FIELD'
  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RC=FALSE'
END IF
!
IF (KMI==1) THEN
  GRELAX = .NOT.(OUSERR)  .AND.  LUSERR  .AND. LHORELAX_RR
ELSE
  GRELAX = .NOT.(LUSERR_G(NDAD(KMI)))  .AND.  LUSERR_G(KMI).AND. LHORELAX_RR 
END IF 
!
IF ( GRELAX )  THEN
  LHORELAX_RR=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RR FIELD'
  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RR=FALSE'
END IF
!
IF (KMI==1) THEN
  GRELAX = .NOT.(OUSERI)  .AND.  LUSERI  .AND. LHORELAX_RI
ELSE
  GRELAX = .NOT.(LUSERI_G(NDAD(KMI)))  .AND.  LUSERI_G(KMI).AND. LHORELAX_RI 
END IF 
!
IF ( GRELAX )  THEN
  LHORELAX_RI=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RI FIELD'
  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RI=FALSE'
END IF
!
IF (KMI==1) THEN
  GRELAX = .NOT.(OUSERG)  .AND.  LUSERG  .AND. LHORELAX_RG
ELSE
  GRELAX = .NOT.(LUSERG_G(NDAD(KMI)))  .AND.  LUSERG_G(KMI).AND. LHORELAX_RG 
END IF 
!
IF ( GRELAX )  THEN
  LHORELAX_RG=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RG FIELD'
  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RG=FALSE'
END IF
!
IF (KMI==1) THEN
  GRELAX = .NOT.(OUSERH)  .AND.  LUSERH  .AND. LHORELAX_RH
ELSE
  GRELAX = .NOT.(LUSERH_G(NDAD(KMI)))  .AND.  LUSERH_G(KMI).AND. LHORELAX_RH 
END IF 
!
IF ( GRELAX )  THEN
  LHORELAX_RH=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RH FIELD'
  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RH=FALSE'
END IF
!
IF (KMI==1) THEN
  GRELAX = .NOT.(OUSERS)  .AND.  LUSERS  .AND. LHORELAX_RS
ELSE
  GRELAX = .NOT.(LUSERS_G(NDAD(KMI)))  .AND.  LUSERS_G(KMI).AND. LHORELAX_RS 
END IF 
!
IF ( GRELAX )  THEN
  LHORELAX_RS=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE RS FIELD'
  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_RS=FALSE'
END IF
!
IF (KMI==1) THEN
  GRELAX = HTURB=='NONE'  .AND.  LUSETKE(1).AND. LHORELAX_TKE
ELSE
  GRELAX = .NOT.(LUSETKE(NDAD(KMI)))  .AND.  LUSETKE(KMI) .AND. LHORELAX_TKE 
END IF 
!
IF ( GRELAX )  THEN
  LHORELAX_TKE=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE TKE FIELD'
  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_TKE=FALSE'
END IF
!
!
DO JSV = 1,NSV_USER
!
  IF (KMI==1) THEN
    GRELAX = KSV_USER<JSV  .AND.  LUSESV(JSV,1).AND.  LHORELAX_SV(JSV) 
  ELSE
    GRELAX = .NOT.(LUSESV(JSV,NDAD(KMI))) .AND. LUSESV(JSV,KMI) .AND. LHORELAX_SV(JSV)   
  END IF 
  !
  IF ( GRELAX )  THEN
  LHORELAX_SV(JSV)=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9001) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX THE ',JSV,'  SV FIELD'
  WRITE(ILUOUT,FMT=*) 'TOWARDS THE LARGE SCALE FIELD OF MODEL',NDAD(KMI)
  WRITE(ILUOUT,FMT=*) 'BUT IT DOES NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SV(',JSV,')=FALSE'
 END IF
END DO
!
!*       4.6   consistency in LES diagnostics choices
!
IF (CLES_NORM_TYPE=='EKMA' .AND. .NOT. LCORIO) THEN
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE THE EKMAN NORMALIZATION'
  WRITE(ILUOUT,FMT=*) 'BUT CORIOLIS FORCE IS NOT USED (LCORIO=.FALSE.)'
  WRITE(ILUOUT,FMT=*) 'THEN, NO NORMALIZATION IS PERFORMED'
  CLES_NORM_TYPE='NONE'
END IF
!
!*       4.7  Check the coherence with LNUMDIFF
!
IF (L1D .AND. (LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV) ) THEN
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE HORIZONTAL DIFFUSION '
  WRITE(ILUOUT,FMT=*) 'BUT YOU ARE IN A COLUMN MODEL (L1D=.TRUE.).'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LNUMDIFU and LNUMDIFTH and LNUMDIFSV'
  WRITE(ILUOUT,FMT=*) 'ARE SET TO FALSE'
  LNUMDIFU=.FALSE.
  LNUMDIFTH=.FALSE.
  LNUMDIFSV=.FALSE.
END IF
!
IF (.NOT. LNUMDIFTH .AND. LZDIFFU) THEN
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU DO NOT WANT TO USE HORIZONTAL DIFFUSION (LNUMDIFTH=F)'
  WRITE(ILUOUT,FMT=*) 'BUT YOU WANT TO USE Z-NUMERICAL DIFFUSION  '
  WRITE(ILUOUT,FMT=*) 'THEREFORE LNUMDIFTH IS SET TO TRUE'
  LNUMDIFTH=.TRUE.
END IF
!
!*       4.8  Other
!
IF (XTNUDGING < 4.*XTSTEP) THEN
  XTNUDGING = 4.*XTSTEP
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(UNIT=ILUOUT,FMT='("TIME SCALE FOR NUDGING CAN NOT BE SMALLER THAN",  &
                 &   " FOUR TIMES THE TIME STEP")')
  WRITE(ILUOUT,FMT=*) 'XTNUDGING is SET TO ',XTNUDGING
END IF
!
!
IF (XWAY(KMI) == 3. ) THEN
  XWAY(KMI) = 2.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(UNIT=ILUOUT,FMT='("XWAY=3 DOES NOT EXIST ANYMORE; ", &                               
                 &   " IT IS REPLACED BY XWAY=2 ")')
END IF
!
IF ( (KMI == 1) .AND. XWAY(KMI) /= 0. ) THEN
  XWAY(KMI) = 0.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(UNIT=ILUOUT,FMT='("XWAY MUST BE EQUAL TO 0 FOR DAD MODEL")')   
END IF
!
!JUANZ ZRESI solver need BSPLITTING 
IF ( CPRESOPT == 'ZRESI' .AND. CSPLIT /= 'BSPLITTING' ) THEN
  WRITE(UNIT=ILUOUT,FMT=9003) KMI
  WRITE(UNIT=ILUOUT,FMT='("Paralleliez in Z solver CPRESOPT=ZRESI need also CSPLIT=BSPLITTING ")')
  WRITE(ILUOUT,FMT=*) ' ERROR you have to set also CSPLIT=BSPLITTING '
 !callabortstop
  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
END IF
!
IF ( LEN_TRIM(HINIFILEPGD)>0 ) THEN
  IF ( CINIFILEPGD/=HINIFILEPGD ) THEN 
    WRITE(UNIT=ILUOUT,FMT=9001) KMI
    WRITE(ILUOUT,FMT=*) ' ERROR : in EXSEG1.nam, in NAM_LUNITn you have CINIFILEPGD= ',CINIFILEPGD
    WRITE(ILUOUT,FMT=*) ' whereas in .des you have CINIFILEPGD= ',HINIFILEPGD
    WRITE(ILUOUT,FMT=*) ' Please check your Namelist '
    WRITE(ILUOUT,FMT=*) ' For example, you may have specified the un-nested PGD file instead of the nested PGD file '
    WRITE(ILUOUT,FMT=*) 
    WRITE(ILUOUT,FMT=*) '###############'
    WRITE(ILUOUT,FMT=*) ' MESONH ABORTS'
    WRITE(ILUOUT,FMT=*) '###############'
    WRITE(ILUOUT,FMT=*) 
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  END IF
ELSE
  CINIFILEPGD = ''
!* note that after a spawning, there is no value for CINIFILEPGD in the .des file,
!  so the checking cannot be made if the user starts a simulation directly from
!  a spawned file (without the prep_real_case stage)
END IF
!-------------------------------------------------------------------------------
!
!*       5.    WE DO NOT FORGET TO UPDATE ALL DOLLARN NAMELIST VARIABLES
!              ---------------------------------------------------------
!
CALL UPDATE_NAM_LUNITN
CALL UPDATE_NAM_CONFN
CALL UPDATE_NAM_DYNN
CALL UPDATE_NAM_ADVN
CALL UPDATE_NAM_PARAMN
CALL UPDATE_NAM_PARAM_RADN
#ifdef MNH_ECRAD
CALL UPDATE_NAM_PARAM_ECRADN
#endif
CALL UPDATE_NAM_PARAM_KAFRN
CALL UPDATE_NAM_PARAM_MFSHALLN
CALL UPDATE_NAM_LBCN
CALL UPDATE_NAM_NUDGINGN
CALL UPDATE_NAM_TURBN
CALL UPDATE_NAM_CH_MNHCN
CALL UPDATE_NAM_CH_SOLVERN
CALL UPDATE_NAM_SERIESN
!-------------------------------------------------------------------------------
WRITE(UNIT=ILUOUT,FMT='(/)')
!-------------------------------------------------------------------------------
!
!*       6.    FORMATS
!              -------
!
9000  FORMAT(/,'NOTE  IN READ_EXSEG FOR MODEL ', I2, ' : ',/, &
             '--------------------------------')
9001  FORMAT(/,'CAUTION ERROR IN READ_EXSEG FOR MODEL ', I2,' : ',/, &
             '----------------------------------------' )
9002  FORMAT(/,'WARNING IN READ_EXSEG FOR MODEL ', I2,' : ',/, &
             '----------------------------------' )
9003  FORMAT(/,'FATAL ERROR IN READ_EXSEG FOR MODEL ', I2,' : ',/, &
             '--------------------------------------' )
!
!-------------------------------------------------------------------------------
!
END SUBROUTINE READ_EXSEG_n