Skip to content
Snippets Groups Projects
read_exsegn.f90 124 KiB
Newer Older
  • Learn to ignore specific revisions
  •     CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
    
      END IF  
    
       IF (ODEPOS_SLT(KMI) ) THEN
        CGETSVT(NSV_SLTDEPBEG:NSV_SLTDEPEND)='READ'
    
    !   IF(CCONF=='START') CGETSVT(NSV_SLTDEPBEG:NSV_SLTDEPEND)='INIT'    
    
       ELSE
        WRITE(UNIT=ILUOUT,FMT=9001) KMI
        WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR RAIN and CLOUD SEA SALT &
             &  SCHEME IN INITIAL FMFILE",/,&
             & "THE MOIST SEA SALT VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
        CGETSVT(NSV_SLTDEPBEG:NSV_SLTDEPEND)='INIT'    
       END IF
      END IF
    
      IF(NMODE_SLT.GT.8 .OR. NMODE_SLT.LT.1) THEN
    
        WRITE(UNIT=ILUOUT,FMT=9003) KMI
    
        WRITE(UNIT=ILUOUT,FMT='("SALT MODES MUST BE BETWEEN 1 and 8 ")') 
    
     !callabortstop
    
        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
    
      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
    
    !
    ! impossible to have aggregation of radiative columns and LCEAR_SKy or CLOUD_ONLY options
    ! because of parallelization issues when aggregating all clear sky columns between processors
    !
    ! Please note that XDTRAD_CLONLY and XDTRAD are both initialized per default to 60. sec.
    ! This is because the default time step is 60. sec, which is almost never the case.
    ! This should be corrected (put a XUNDEF value for default for XDTRAD_CLONLY would be nice)
    !
      IF (NRAD_AGG>1 .AND. (LCLEAR_SKY .OR. (XDTRAD<XDTRAD_CLONLY) ) ) THEN
        WRITE(UNIT=ILUOUT,FMT=9003) KMI
        WRITE(UNIT=ILUOUT,FMT=*) 'AGGREGATION OF RADIATIVE COLUMNS CANNOT BE DONE IF LCLEAR_SKY OPTION,'
        WRITE(UNIT=ILUOUT,FMT=*) 'OR CLOUD_ONLY OPTION ARE ACTIVATED'
        WRITE(UNIT=ILUOUT,FMT=*) 'AGGREGATION OF RADIATIVE COLUMNS : NRAD_AGG         =', NRAD_AGG
        WRITE(UNIT=ILUOUT,FMT=*) 'LCLEAR_SKY OPTION                : LCLEAR_SKY       =', LCLEAR_SKY
        WRITE(UNIT=ILUOUT,FMT=*) 'CLOUD_ONLY OPTION, XDTRAD /= XDTRAD_CLONLY : '
        WRITE(UNIT=ILUOUT,FMT=*) 'CLOUD_ONLY OPTION                : XDTRAD           =', XDTRAD
        WRITE(UNIT=ILUOUT,FMT=*) 'CLOUD_ONLY OPTION                : XDTRAD_CLONLY    =', XDTRAD_CLONLY
        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','NRAD_AGG OPTION NOT IMPLEMENTED FOR LCLEAR_SKY AND CLOUD_ONLY OPTIONS')
      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
    !
    
    IF (LLES_CS_MASK .AND. .NOT. LCONDSAMP) THEN
      WRITE(ILUOUT,FMT=*) 'YOU WANT TO USE CONDITIONAL SAMPLING LES DIAG'
      WRITE(ILUOUT,FMT=*) 'BUT THE CONDITIONAL SAMPLING IS NOT ACTIVATED'
      WRITE(ILUOUT,FMT=*) 'USE NAM_CONDSAMP LCONDSAMP=T'