Skip to content
Snippets Groups Projects
read_exsegn.f90 120 KiB
Newer Older
  END IF     
END IF 
!
! Orilam SV case
!
IF (LORILAM) THEN
  IF (OORILAM) THEN
    CGETSVT(NSV_AERBEG:NSV_AEREND)='READ'
!   IF(CCONF=='START') CGETSVT(NSV_AERBEG:NSV_AEREND)='INIT'
  ELSE
    WRITE(UNIT=ILUOUT,FMT=9001) KMI
    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR AEROSOL &
         &SCHEME IN INITIAL FMFILE",/,&
         & "THE AEROSOLS VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
    CGETSVT(NSV_AERBEG:NSV_AEREND)='INIT'
  END IF
  IF (LDEPOS_AER(KMI)) THEN

  IF((CCLOUD /= 'ICE3').AND.(CCLOUD /= 'ICE4').AND.(CCLOUD /= 'KESS')&
  .AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND.(CCLOUD /= 'LIMA').AND. &
  !.AND.(CCLOUD /= 'KHKO').AND.(CCLOUD /= 'C2R2').AND.                &
       (CPROGRAM/='SPAWN').AND.(CPROGRAM/='REAL'))  THEN
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(UNIT=ILUOUT,FMT='("ERROR: WET DEPOSITION OF ORILAM AEROSOLS IS ONLY CODED FOR THE",/,&
         & "MICROPHYSICAL SCHEME as ICE3, ICE4, KESS, KHKO, LIMA and C2R2")') 
          !UPG*PT
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  END IF  

   IF (ODEPOS_AER(KMI) ) THEN
    CGETSVT(NSV_AERDEPBEG:NSV_AERDEPEND)='READ'
!   IF(CCONF=='START') CGETSVT(NSV_AERDEPBEG:NSV_AERDEPEND)='INIT'    
   ELSE
    WRITE(UNIT=ILUOUT,FMT=9001) KMI
    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR RAIN and IN CLOUD  &
         &  AEROSOL SCHEME IN INITIAL FMFILE",/,&
         & "THE MOIST AEROSOL VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
    CGETSVT(NSV_AERDEPBEG:NSV_AERDEPEND)='INIT'    
   END IF
  END IF
END IF
!
! Lagrangian variables
!
IF (LINIT_LG .AND. .NOT.(LLG)) THEN
      WRITE(UNIT=ILUOUT,FMT=9001) KMI
      WRITE(UNIT=ILUOUT,FMT='("IT IS INCOHERENT TO HAVE LINIT_LG=.T. AND LLG=.F.",/,&
      & "IF YOU WANT LAGRANGIAN TRACERS CHANGE LLG TO .T. ")')
ENDIF
IF (LLG) THEN
  IF (OLG .AND. .NOT.(LINIT_LG .AND. CPROGRAM=='MESONH')) THEN
    CGETSVT(NSV_LGBEG:NSV_LGEND)='READ'
!   IF(CCONF=='START') CGETSVT(NSV_LGBEG:NSV_LGEND)='INIT'
  ELSE
    IF(.NOT.(LINIT_LG) .AND. CPROGRAM=='MESONH') THEN
      WRITE(UNIT=ILUOUT,FMT=9001) KMI
      WRITE(UNIT=ILUOUT,FMT='("THERE IS NO LAGRANGIAN VARIABLES IN INITIAL FMFILE",/,&
                       & "THE LAGRANGIAN VARIABLES HAVE BEEN REINITIALIZED")')
      LINIT_LG=.TRUE.
    ENDIF
    CGETSVT(NSV_LGBEG:NSV_LGEND)='INIT'
  END IF
END IF
!
!
! LINOx SV case
!
IF (.NOT.LUSECHEM .AND. LCH_CONV_LINOX) THEN
  IF (.NOT.OUSECHEM .AND. OCH_CONV_LINOX) THEN
    CGETSVT(NSV_LNOXBEG:NSV_LNOXEND)='READ'
  ELSE
    WRITE(UNIT=ILUOUT,FMT=9002) KMI
    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR LINOX &
         &IN INITIAL FMFILE",/,&
         & "THE LINOX VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
    CGETSVT(NSV_LNOXBEG:NSV_LNOXEND)='INIT'
  END IF
END IF
!
! Passive pollutant case
!
IF (LPASPOL) THEN
  IF (OPASPOL) THEN
    CGETSVT(NSV_PPBEG:NSV_PPEND)='READ'
!   IF(CCONF=='START') CGETSVT(NSV_PPBEG:NSV_PPEND)='INIT'    
  ELSE
    WRITE(UNIT=ILUOUT,FMT=9001) KMI
    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO PASSIVE SCALAR VARIABLES IN INITIAL FMFILE",/,&
                       & "THE VARIABLES HAVE BEEN INITIALIZED TO ZERO")')
    CGETSVT(NSV_PPBEG:NSV_PPEND)='INIT'
  END IF
END IF
!
#ifdef MNH_FOREFIRE
! ForeFire
!
IF (LFOREFIRE) THEN
  IF (OFOREFIRE) THEN
    CGETSVT(NSV_FFBEG:NSV_FFEND)='READ'
  ELSE
    WRITE(UNIT=ILUOUT,FMT=9001) KMI
    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO FOREFIRE SCALAR VARIABLES IN INITIAL FMFILE",/,&
                       & "THE VARIABLES HAVE BEEN INITIALIZED TO ZERO")')
    CGETSVT(NSV_FFBEG:NSV_FFEND)='INIT'
  END IF
END IF
#endif
! Blaze smoke
!
IF (LBLAZE) THEN
  IF (OFIRE) THEN
    CGETSVT(NSV_FIREBEG:NSV_FIREEND)='READ'
  ELSE
    WRITE(UNIT=ILUOUT,FMT=9001) KMI
    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO BLAZE SCALAR VARIABLES IN INITIAL FMFILE",/,&
                       & "THE VARIABLES HAVE BEEN INITIALIZED TO ZERO")')
    CGETSVT(NSV_FIREBEG:NSV_FIREEND)='INIT'
  END IF
END IF
! Conditional sampling case
!
IF (LCONDSAMP) THEN
  IF (OCONDSAMP) THEN
    CGETSVT(NSV_CSBEG:NSV_CSEND)='READ'
!   IF(CCONF=='START') CGETSVT(NSV_CSBEG:NSV_CSEND)='INIT'       
  ELSE
    WRITE(UNIT=ILUOUT,FMT=9001) KMI
    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO PASSIVE SCALAR VARIABLES IN INITIAL FMFILE",/,&
                       & "THE VARIABLES HAVE BEEN INITIALIZED TO ZERO")')
    CGETSVT(NSV_CSBEG:NSV_CSEND)='INIT'
  END IF
END IF
!
! Blowing snow scheme
!
IF (LBLOWSNOW) THEN
  IF (OBLOWSNOW) THEN
    CGETSVT(NSV_SNWBEG:NSV_SNWEND)='READ'
  ELSE
    WRITE(UNIT=ILUOUT,FMT=9001) KMI
    WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR BLOWING SNOW &
         &SCHEME IN INITIAL FMFILE",/,&
         & "THE BLOWING SNOW VARIABLES HAVE BEEN INITIALIZED TO ZERO ")')
    CGETSVT(NSV_SNWBEG:NSV_SNWEND)='INIT'
  END IF
END IF
!
!
!
!*       3.5  Check coherence between the radiation control parameters
!
IF( CRAD == 'ECMW' .AND. CPROGRAM=='MESONH' ) THEN
  IF(CLW == 'RRTM' .AND. COPILW == 'SMSH') THEN
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(UNIT=ILUOUT,FMT=*) 'the SMSH parametrisation of LW optical properties for cloud ice'
    WRITE(UNIT=ILUOUT,FMT=*) '(COPILW) can not be used with RRTM radiation scheme'
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  ENDIF
  IF(CLW == 'MORC' .AND. COPWLW == 'LILI') THEN
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(UNIT=ILUOUT,FMT=*) 'the LILI parametrisation of LW optical properties for cloud water'
    WRITE(UNIT=ILUOUT,FMT=*) '(COPWLW) can not be used with MORC radiation scheme'
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  ENDIF
  IF( .NOT. LSUBG_COND) THEN
    WRITE(UNIT=ILUOUT,FMT=9000) KMI
    WRITE(UNIT=ILUOUT,FMT=*) 'YOU DO NOT WANT TO USE SUBGRID CONDENSATION'             
    WRITE(UNIT=ILUOUT,FMT=*) 'THE OVERLAP OPTION IS NOVLP=5 IN ini_radconf.f90'
  ELSE IF (CLW == 'MORC') THEN
    WRITE(UNIT=ILUOUT,FMT=9000) KMI
    WRITE(UNIT=ILUOUT,FMT=*) 'YOU WANT TO USE MORCRETTE LW SCHEME'                   
    WRITE(UNIT=ILUOUT,FMT=*) 'THE OVERLAP OPTION IS NOVLP=5 IN ini_radconf.f90'
  ELSE
    WRITE(UNIT=ILUOUT,FMT=9000) KMI
    WRITE(UNIT=ILUOUT,FMT=*) 'THE OVERLAP OPTION IS NOVLP=6 IN ini_radconf.f90'
  ENDIF
!
  IF( LCLEAR_SKY .AND. XDTRAD_CLONLY /= XDTRAD) THEN
    ! 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
  IF(CCONF=='RESTA' .AND. (.NOT. LAERO_FT) .AND.  (.NOT. LORILAM) &
                    .AND. (.NOT. LSALT)  .AND. (.NOT. LDUST)) THEN
    WRITE(UNIT=ILUOUT,FMT=9001) KMI
    WRITE(UNIT=ILUOUT,FMT=*) '!!! WARNING !!! FOR REPRODUCTIBILITY BETWEEN START and START+RESTART,'
    WRITE(UNIT=ILUOUT,FMT=*) 'YOU MUST USE LAERO_FT=T WITH CAER=TEGE IF CCONF=RESTA IN ALL SEGMENTS'
    WRITE(UNIT=ILUOUT,FMT=*) 'TO UPDATE THE OZONE AND AEROSOLS CLIMATOLOGY USED BY THE RADIATION CODE;'
  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. LRELAX_UVMEAN_FRC) THEN
    WRITE(UNIT=ILUOUT,FMT=9003) KMI
    WRITE(ILUOUT,FMT=*) 'YOU MUST CHOOSE BETWEEN A RELAXATION APPLIED TO'
    WRITE(ILUOUT,FMT=*) 'THE 3D FULL WIND FIELD (LRELAX_UV_FRC) OR'
    WRITE(ILUOUT,FMT=*) 'THE HORIZONTAL MEAN WIND (LRELAX_UVMEAN_FRC)'
 !callabortstop
    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
  END IF
!
  IF ( (LRELAX_UV_FRC .OR. LRELAX_UVMEAN_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, LRELAX_UVMEAN_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. LBLAZE .AND. LHORELAX_SVFIRE) THEN
  LHORELAX_SVFIRE=.FALSE.
  WRITE(UNIT=ILUOUT,FMT=9002) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO RELAX BLAZE FLUXES BUT THEY DO NOT EXIST.'
  WRITE(ILUOUT,FMT=*) 'THEREFORE LHORELAX_SVFIRE=FALSE'
END IF
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. (.NOT. LHORELAX_SVFIRE)   .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. LHORELAX_SVFIRE .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
  WRITE(ILUOUT,FMT=*) "LHORELAX_SVFIRE=",LHORELAX_SVFIRE
#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. LHORELAX_SVFIRE .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','')
!
IF ((LHORELAX_UVWTH  .OR. LHORELAX_SVPP  .OR.   &
     LHORELAX_SVCS   .OR. LHORELAX_SVFIRE .OR.  &
#ifdef MNH_FOREFIRE
     LHORELAX_SVFF   .OR.                       &
#endif
     LHORELAX_SVC2R2 .OR. LHORELAX_SVC1R3 .OR.  &
     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. (CLBCX(1)=='CYCL'.OR.CLBCX(2)=='CYCL' &
          .OR.CLBCY(1)=='CYCL'.OR.CLBCY(2)=='CYCL')) THEN
  WRITE(UNIT=ILUOUT,FMT=9003) KMI
  WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE THE HORIZONTAL RELAXATION '
  WRITE(ILUOUT,FMT=*) 'FOR CYCLIC CLBCX OR CLBCY VALUES' 
  WRITE(ILUOUT,FMT=*) '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