!-------------------------------------- LICENCE BEGIN ------------------------------------
!Environment Canada - Atmospheric Science and Technology License/Disclaimer, 
!                     version 3; Last Modified: May 7, 2008.
!This is free but copyrighted software; you can use/redistribute/modify it under the terms 
!of the Environment Canada - Atmospheric Science and Technology License/Disclaimer 
!version 3 or (at your option) any later version that should be found at: 
!http://collaboration.cmc.ec.gc.ca/science/rpn.comm/license.html 
!
!This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
!without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
!See the above mentioned License/Disclaimer for more details.
!You should have received a copy of the License/Disclaimer along with this software; 
!if not, you can write to: EC-RPN COMM Group, 2121 TransCanada, suite 500, Dorval (Quebec), 
!CANADA, H9P 1J3; or send e-mail to service.rpn@ec.gc.ca
!-------------------------------------- LICENCE END --------------------------------------
*** S/P PHY_OPT
*

      SUBROUTINE PHY_OPTC (NOM,VALEURC,NV,MODE,prout,err) 5
*
      IMPLICIT NONE
*
      CHARACTER *(*) NOM, MODE
      logical prout
      INTEGER NV,err
      CHARACTER *(*) VALEURC(NV)
      INTEGER        VALEURI(NV)
      LOGICAL        VALEURL(NV)
      REAL           VALEURR(NV)
*
*Author
*          B. Bilodeau (Spring 1994)
*
*Revisions
* 001      M. Gagnon   (Jul 95) - Initialize radnivl
* 002      M. Desgagne (Nov 95) - Schmsol for CLASS
* 003      B. Dugas    (Sep 96) - 1) Change GWDRAG switch to character
*                                 2) Add RADFIX logical option
*                                 3) Add ETRMIN,TAUFAC,Z0MIN real options
*                                 4) Add SHLCVT character switch
* 004      G. Pellerin (Oct 96) - Options KUOSTD,KUOSYM,KUOSUN added
*                                 along with updated condensation CONSUN
* 005      G. Pellerin (Nov 96) - Options RAS and SHALODQC added
* 006      G. Pellerin (Apr 97) - Advection of liquid water switch
* 007      M. Desgagne (Apr 96) - ADVECTKE
* 008      F. Kong     (Dec 96) - Explicit schemes in STCOND
* 009      B. Bilodeau (Aug 97) - Z0DIR
* 010      B. Bilodeau (Jun 98) - RADFILES
* 011      P.-A. Michelangeli (Jul 98) - Add FOMIC logical option
* 012      B. Bilodeau (Dec 99) - NSLOFLUX
* 013      N. Brunet   (Sep 99) - add 5 logical options
*                                 (cortm,corts,drylaps,montagn,bkgalb)
*                                 (project to move treatment of geophysical
*                                  fields into physical library)
* 014      B. Bilodeau (Apr 2000) - ICEMELT (sea ice melting)
* 015      B. Bilodeau (Mar 2001) - SNOALB_ANL
* 016      J. Mailhot  (Nov 2000) - Add moist turbulence option (ifluvert=3)
* 017      A.-M. Leduc (Nov 2001) - Add KFC parameters
* 018      A. Erfani   (Nov 2001) - Add KFCKUO2 option
* 019      B. Bilodeau (Feb 2002) - Add Z0TCST option
* 020      B. Bilodeau (Mar 2002) - Remove AIRE
* 021      S. Laroche  (Mar 2002) - Add options for the linearized physics
* 022      A-M. Leduc , B. Bilodeau (Dec 2002) - Switch shlcvt with double options
* 023      A-M. Leduc  (Dec 2002) - Add KFCPCP switch: conservation of pcpn in kfcp
* 024      B. Dugas    (Sep 2002) - Add CO2 concentration parameter
* 025      B. Bilodeau (Feb 2003) - Add AS2, BETA2 and KKL2 parameters
* 026      B. Dugas    (Mar 2003) - Add STRATOS parametre
* 027      JF Mahfouf  (May 2003) - Add IMPFLX option for coupling surface with vert. diff.
* 028      A-M. Leduc  (Jun 2003) - add RADFLTR switch
* 029      A. Plante   (Sep 2003) - add PCPTYPE switch
* 030      B. Bilodeau (Mar 2004) - add TSCONFC and KFCTRIG4
* 031      B. Bilodeau (Jul 2004) - add Z0TLAT and remove Z0TCST.
*            Double character options names from 8 to 16 characters.
* 032      A-M. Leduc  (Feb 2004) - add KTICEFRAC switch
* 033      L. Spacek   (Aug 2004) - cloud clean-up; elimination of ISTCOND=2,6,7,8 ICONVEC=4
* 034      D. Talbot   (Mar 2005) - add TDIAGLIM switch
* 035      A-M. Leduc  (May 2005) - add TS_FLXIR switch
* 036      S. Valcke   (Apr 2005) - add COUPLING and CPL_FLD and indx_xxx
* 037      A. Lemonsu  (Jun 2005) - add SCHMURB
* 038      B. Dugas    (Jun 2005) - add KFCTRIGA trigger modifier for KF convection
* 039      B. Dugas    (Aug 2005) - use PHYOPT_DATA to initialize OPTIONS and DZSEDI
* 040      A-M. Leduc  (Oct 2005) - add LIMSNODP switch
* 041      M. Desgagne (July 2006)- revised interface
* 042      J. Milbrandt (Dec 2006)- added options for Milbrandt-Yau scheme
* 043      B. Bilodeau (Feb 2007) - Cleanup
* 044      B. Bilodeau (Apr 2007) - Offline
* 045      J. Milbrandt (Apr 2008)- added single/double-moment namelist switches for M-Y scheme;
*                                   removed unused physics namelist options for M-Y
* 046      M. Desgagne (Mar 2008) - optional ozone file
* 047      L. Spacek   (Sep 2008) - added icelac
* 048      A-M. Leduc  (Feb 2009) - add KFCTRIGLAT, KFCTRIGL and TRIGLAT 
* 049      J. Toviessi (July 2009) - added radslope modifications
*
*Object
*          Initialize/Extract physics comdeck OPTIONS
*
*Arguments
*
*          - Input -
* NOM      name of the option to be treated
*
*          - Input/Output -
* VALEURC  value of the character constant
* VALEURI  value of the integer   constant
* VALEURL  value of the logical   constant
* VALEURR  value of the real      constant
*
*          - Input -
* NV       number of values to be treated
* MODE     mode of operation : SET = initialize the value
*                              GET = extract the value
*
*Notes
*          phy_opt sets or gets options of four
*          types : character, integer, logical
*          and real. It includes 3 entry points.
*
**
#include "phy_master_ctrl.cdk"
#include "options.cdk"
#include "phy_macros_f.h"
#include "indx_sfc.cdk"
*
      CHARACTER MODEC*3,NOMC*16,TYPE*1
      INTEGER i,j,n
*
*     LIST OF VARIABLES THAT CAN BET "SET"
      INTEGER NVAR_SET
      PARAMETER (NVAR_SET=8)
      CHARACTER*16 VAR_SET(NVAR_SET)
      DATA VAR_SET                                              \
          /'CLIMAT'   , 'COUPLING' , 'DATE'     , 'DELT'     ,  \
           'LIN_V4D'  , 'OFFLINE'  , 'PTOP_NML' , 'WET'/
*
************************************************************************
*     AUTOMATIC ARRAYS
************************************************************************
*
      AUTOMATIC ( VALC    , CHARACTER*16 , (NV) )
*
************************************************************************
*
      TYPE = 'C'
*
      GO TO 500
*
100   CONTINUE
*
      err = 0
      DO I=1,NV
         CALL LOW2UP(VALEURC(I),VALC(I))
      END DO
*
      IF (NOMC.EQ.'CONVEC')                       THEN
*
         IF (MODEC.EQ.'GET')                      THEN
*
            VALEURC(1) = CONVEC
*
         ENDIF
*
      ELSE IF (NOMC.EQ.'FLUVERT')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
*
            VALEURC(1) = FLUVERT
*
         ENDIF
*
      ELSE IF (NOMC.EQ.'GWDRAG')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
*
            VALEURC(1) = GWDRAG
*
         ENDIF
*
       ELSE IF (NOMC.EQ.'KFCPCP')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
*
            VALEURC(1) = KFCPCP
*
         ENDIF
*
      ELSE IF (NOMC.EQ.'LONGMEL')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
*
             VALEURC(1) = LONGMEL
         ENDIF
*
      ELSE IF (NOMC.EQ.'RADIA')                   THEN
*
         IF (MODEC.EQ.'GET')                      THEN
*
            VALEURC(1) = RADIA
*
         ENDIF
*
      ELSE IF (NOMC.EQ.'RADFILES')                THEN
*
         IF (MODEC.EQ.'GET')                      THEN
*
            VALEURC(1) = RADFILES
*
         ENDIF
*
      ELSE IF (NOMC.EQ.'SHLCVT')                  THEN
*
         IF (NV.NE.2) THEN
            if (prout) WRITE(6,1012) NOMC
            err = -1
            return
         ENDIF
*
         IF (MODEC.EQ.'GET')                      THEN
*
            DO I=1,NV
               VALEURC(I) = SHLCVT(I)
            END DO
*
         ENDIF
*
      ELSE IF (NOMC.EQ.'STCOND')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
*
            VALEURC(1) = STCOND
*
         ENDIF
*
      ELSE IF (NOMC.EQ.'SCHMSOL')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
*
            VALEURC(1) = SCHMSOL
*
         ENDIF
*
      ELSE IF (NOMC.EQ.'SCHMURB')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
*
            VALEURC(1) = SCHMURB
*
         ENDIF
*
      ELSE IF (NOMC.EQ.'PCPTYPE')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
*
            VALEURC(1) = PCPTYPE
*
         ENDIF
*
      ELSE IF (NOMC.EQ.'PVERSION')                THEN
*
         IF      (MODEC.EQ.'GET')                 THEN
*
            VALEURC(1) = trim( phy_pck_version )
     +                 //' '//
     +                   trim( phy_release_pck_version )
*
         ENDIF
*
      ELSE
*
         if (prout) then
         WRITE(6,1020) NOMC,'CONVEC, FLUVERT, GWDRAG, LONGMEL, '
         WRITE(6,1021)      'RADIA,SCHMSOL,STCOND,SHLCVT,KFCPCP'
         WRITE(6,1021)      'PCPTYPE                           '
         WRITE(6,1022)
         endif
         err = -1
*
      ENDIF
*
      RETURN
*
      ENTRY PHY_OPTI      (NOM,VALEURI,NV,MODE,prout,err)
*
*Author
*          B. Bilodeau (Spring 1994)
*
*Object
*          to initialize the physics comdeck OPTIONS
*
*Arguments
*
*          - Input -
* NOM      name of the option to be treated
*
*          - Input/Output -
* VALEURI  value of the integer   constant
*
*          - Input -
* NV       number of values to be treated
* MODE     mode of operation : SET = initialize the value
*                              GET = extract the value
**
*
      TYPE = 'I'
      GO TO 500
*
200   CONTINUE
*
      err = 0
      IF (NOMC.EQ.'DATE')                         THEN
*
         IF      (MODEC.EQ.'SET')                 THEN
            DO 55 I=1,NV
               DATE(I) = VALEURI(I)
55          CONTINUE
            IF (PROUT) THEN
               WRITE(6,'(/A,5I10)') 'PHYSICS OPTION DATE = ',(DATE(I),I=1,5)
            ENDIF
         ENDIF
*
      ELSE IF (NOMC.EQ.'ICONVEC')                 THEN
*
         IF      (MODEC.EQ.'GET')                 THEN
            VALEURI(1) = ICONVEC
         ENDIF
*
      ELSE IF (NOMC.EQ.'IHEATCAL')                THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURI(1) = IHEATCAL
         ENDIF
*
      ELSE IF (NOMC.EQ.'IKFCPCP')                 THEN
*
         IF      (MODEC.EQ.'GET')                 THEN
            VALEURI(1) = IKFCPCP
         ENDIF
*
      ELSE IF (NOMC.EQ.'ISTCOND')                 THEN
*
         IF      (MODEC.EQ.'GET')                 THEN
            VALEURI(1) = ISTCOND
         ENDIF
*
      ELSE IF (NOMC.EQ.'MOYHR')                   THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURI(1) = MOYHR
         ENDIF
*
      ELSE IF (NOMC.EQ.'NSLOFLUX')                THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURI(1) = NSLOFLUX
         ENDIF
*
      ELSE IF (NOMC.EQ.'KNTRAD')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURI(1) = KNTRAD
         ENDIF
*
      ELSE IF (NOMC.EQ.'LIN_KPH')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURI(1) = LIN_KPH
         ENDIF
*
      ELSE IF (NOMC.EQ.'LIN_LSC')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURI(1) = LIN_LSC
         ENDIF
*
      ELSE IF (NOMC.EQ.'LIN_PBL')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURI(1) = LIN_PBL
         ENDIF
*
      ELSE IF (NOMC.EQ.'LIN_SGO')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURI(1) = LIN_SGO
         ENDIF
*
      ELSE IF (NOMC.EQ.'LIN_V4D')                 THEN
*
         IF      (MODEC.EQ.'SET')                 THEN
            LIN_V4d = VALEURI(1)
         ENDIF
         IF (PROUT) THEN
            WRITE(6,'(/A,I4)') 'PHYSICS OPTION LIN_V4D = ',LIN_V4D
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_CCNTYPE')              THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURI(1) = MY_CCNTYPE
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_FULL_VERSION')        THEN
*
         IF (MODEC.EQ.'GET')                     THEN
           VALEURI(1) = MY_FULL_VERSION
         ENDIF
*
      ELSE IF (NOMC.EQ.'RADNIV')                  THEN

         IF (MODEC.EQ.'GET')                      THEN
            DO I=1,NV
               VALEURI(I) = RADNIVL(I)
            ENDDO
         ENDIF
*
      ELSE IF (NOMC.EQ.'INDX_SOIL')               THEN
         IF (MODEC.EQ.'GET')                 THEN
               VALEURI(1) = indx_soil
         ENDIF
      ELSE IF (NOMC.EQ.'INDX_GLACIER')               THEN
         IF (MODEC.EQ.'GET')                 THEN
               VALEURI(1) = indx_glacier
         ENDIF
      ELSE IF (NOMC.EQ.'INDX_WATER')               THEN
         IF (MODEC.EQ.'GET')                 THEN
               VALEURI(1) = indx_water
         ENDIF
      ELSE IF (NOMC.EQ.'INDX_ICE')               THEN
         IF (MODEC.EQ.'GET')                 THEN
               VALEURI(1) = indx_ice
         ENDIF
      ELSE IF (NOMC.EQ.'INDX_URB')                  THEN
         IF (MODEC.EQ.'GET')                 THEN
               VALEURI(1) = indx_urb
         ENDIF
      ELSE IF (NOMC.EQ.'INDX_AGREGE')               THEN
         IF (MODEC.EQ.'GET')                 THEN
               VALEURI(1) = indx_agrege
         ENDIF
      ELSE
*
         if (prout) then
         WRITE(6,1020) NOMC,'DATE, KNTRAD, RADNIVL, IHEATCAL '
         WRITE(6,1022)
         endif
         err = -1
*
      ENDIF
*
      RETURN
*
      ENTRY PHY_OPTL      (NOM,VALEURL,NV,MODE,prout,err)
*
*Author
*          B. Bilodeau (Spring 1994)
*
*Object
*          to initialize the physics comdeck OPTIONS
*
*Arguments
*
*          - Input -
* NOM      name of the option to be treated
*
*          - Input/Output -
* VALEURL  value of the logical   constant
*
*          - Input -
* NV       number of values to be treated
* MODE     mode of operation : SET = initialize the value
*                              GET = extract the value
**
*
      TYPE = 'L'
      GO TO 500
*
300   CONTINUE
*
      err = 0
      IF (NOMC.EQ.'ADVECTKE')                     THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = ADVECTKE
         ENDIF
*
      ELSE IF (NOMC.EQ.'AGREGAT')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = AGREGAT
         ENDIF
*

      ELSE IF (NOMC.EQ.'CHAUF')                   THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = CHAUF
         ENDIF
*
      ELSE IF (NOMC.EQ.'CLIMAT')                  THEN
*
         IF      (MODEC.EQ.'SET')                 THEN
            CLIMAT = VALEURL(1)
         ENDIF
         IF (PROUT) THEN
            WRITE(6,'(/A,L2)') 'PHYSICS OPTION CLIMAT = ',CLIMAT
         ENDIF
*
      ELSE IF (NOMC.EQ.'DBGMEM')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = DBGMEM
         ENDIF
*
      ELSE IF (NOMC.EQ.'DIFFUW')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = DIFFUW
         ENDIF
*
      ELSE IF (NOMC.EQ.'DRAG')                    THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = DRAG
         ENDIF
*
      ELSE IF (NOMC.EQ.'EVAP')                    THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = EVAP
         ENDIF
*
      ELSE IF (NOMC.EQ.'ICELAC')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = ICELAC
         ENDIF
*
      ELSE IF (NOMC.EQ.'ICEMELT')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = ICEMELT
         ENDIF
*
      ELSE IF (NOMC.EQ.'IMPFLX')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = IMPFLX
         ENDIF
*
      ELSE IF (NOMC.EQ.'INILWC')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = INILWC
         ENDIF
*
      ELSE IF (NOMC.EQ.'KFCMOM')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1)= KFCMOM
         ENDIF
*
      ELSE IF (NOMC.EQ.'KTICEFRAC')               THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1)= KTICEFRAC
         ENDIF
*
      ELSE IF (NOMC.EQ.'LMETOX')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1)= LMETOX
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_DBLMOM_C')             THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_DBLMOM_C
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_DBLMOM_R')             THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_DBLMOM_R
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_DBLMOM_I')             THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_DBLMOM_I
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_DBLMOM_S')             THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_DBLMOM_S
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_DBLMOM_G')             THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_DBLMOM_G
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_DBLMOM_H')             THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_DBLMOM_H
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_ICEON')                THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_ICEON
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_WARMON')               THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_WARMON
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_SEDION')               THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_SEDION
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_RAINON')               THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_RAINON
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_SNOWON')               THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_SNOWON
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_DIAGON')               THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_DIAGON
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_INITN')                THEN
*
         IF (MODEC.EQ.'GET')                      THEN
           VALEURL(1) = MY_INITN
         ENDIF
*
      ELSE IF (NOMC.EQ.'NON_ORO')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = NON_ORO
         ENDIF
*
      ELSE IF (NOMC.EQ.'OFFLINE')                 THEN
*
         IF      (MODEC.EQ.'SET')                 THEN
            OFFLINE = VALEURL(1)
         ENDIF
         IF (PROUT) THEN
            WRITE(6,'(/A,L2)') 'PHYSICS OPTION OFFLINE = ',OFFLINE
         ENDIF
*
      ELSE IF (NOMC.EQ.'RADFIX')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = RADFIX
         ENDIF
*
      ELSE IF (NOMC.EQ.'RADFLTR')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = RADFLTR
         ENDIF
*
      ELSE IF (NOMC.EQ.'RADSLOPE')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = RADSLOPE
         ENDIF
*
      ELSE IF (NOMC.EQ.'TS_FLXIR')                THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = TS_FLXIR
         ENDIF
*
*
      ELSE IF (NOMC.EQ.'SATUCO')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = SATUCO
         ENDIF
*
      ELSE IF (NOMC.EQ.'SIMISCCP')                THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = SIMISCCP
         ENDIF
*
      ELSE IF (NOMC.EQ.'SNOALB_ANL')              THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = SNOALB_ANL
         ENDIF
*
      ELSE IF (NOMC.EQ.'SNOWMELT')                THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = SNOWMELT
         ENDIF
*
      ELSE IF (NOMC.EQ.'STOMATE')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = STOMATE
         ENDIF
*
      ELSE IF (NOMC.EQ.'STRATOS')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = STRATOS
         ENDIF
*
      ELSE IF (NOMC.EQ.'TSCONFC')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = TSCONFC
         ENDIF
*
      ELSE IF (NOMC.EQ.'TYPSOL')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = TYPSOL
         ENDIF
*
      ELSE IF (NOMC.EQ.'WET')                     THEN
*
         IF      (MODEC.EQ.'SET')                 THEN
            WET = VALEURL(1)
         ENDIF
         IF (PROUT) THEN
            WRITE(6,'(/A,L2)') 'PHYSICS OPTION WET = ',WET
         ENDIF
*
      ELSE IF (NOMC.EQ.'Z0DIR')                   THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = Z0DIR
         ENDIF
*
      ELSE IF (NOMC.EQ.'CORTM')                   THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = CORTM
         ENDIF
*
      ELSE IF (NOMC.EQ.'DRYLAPS')                 THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = DRYLAPS
         ENDIF
*
      ELSE IF (NOMC.EQ.'BKGALB')                  THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = BKGALB
         ENDIF
*
      ELSE IF (NOMC.EQ.'FOMICHEV')                THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = FOMIC
         ENDIF
*
      ELSE IF (NOMC.EQ.'TDIAGLIM')                THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = TDIAGLIM
         ENDIF
*
*
      ELSE IF (NOMC.EQ.'LIMSNODP')                THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = LIMSNODP
         ENDIF
*
      ELSE IF (NOMC.EQ.'COUPLING')                THEN
*
         IF      (MODEC.EQ.'SET')                 THEN
            COUPLING = VALEURL(1)
         ENDIF
         IF (PROUT) THEN
            WRITE(6,'(/A,L2)') 'PHYSICS OPTION COUPLING = ',COUPLING
         ENDIF
*
      ELSE
*
         if (prout) then
         WRITE(6,1020) NOMC,'ADVECTKE, BKGALB, CHAUF, CLIMAT,  '
         WRITE(6,1021)      'CORTM, COUPLING,DBGMEM,    '
         WRITE(6,1021)      'DIFFUW,DRAG, DRYLAPS, EVAP,  '
         WRITE(6,1021)      'FOMIC,IMPFLX,INILWC,ICELAC,KFCMOM,'
         WRITE(6,1021)      'KTICEFRAC,LIMSNODP,LMETOX,        '
         WRITE(6,1021)      'NON_ORO, RADFIX,         '
         WRITE(6,1021)      'RADFLTR, TS_FLXIR, SATUCO,        '
         WRITE(6,1021)      'SIMISCCP, SNOALB_ANL, SNOWMELT,   '
         WRITE(6,1021)      'STOMATE, STRATOS, TDIAGLIM,       '
         WRITE(6,1021)      'TYPSOL, WET, Z0DIR                '
         WRITE(6,1022)
         endif
         err = -1
*
      ENDIF
*
      RETURN
*
      ENTRY PHY_OPTR      (NOM,VALEURR,NV,MODE,prout,err)
*
*Author
*          B. Bilodeau (Spring 1994)
*
*Object
*          to initialize the physics comdeck OPTIONS
*
*Arguments
*
*          - Input -
* NOM      name of the option to be treated
*
*          - Input/Output -
* VALEURR  value of the real      constant
*
*          - Input -
* NV       number of values to be treated
* MODE     mode of operation : SET = initialize the value
*                              GET = extract the value
**
*
      TYPE = 'R'
      GO TO 500
*
400   CONTINUE
*
      err = 0
      IF (NOMC.EQ.'AS')                          THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = AS2
         ENDIF
*
      ELSE IF (NOMC.EQ.'BETA')                   THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = BETA2
         ENDIF
*
      ELSE IF (NOMC.EQ.'DELT')                   THEN
*
         IF      (MODEC.EQ.'SET')                THEN
            DELT = VALEURR(1)
         ENDIF
         IF (PROUT) THEN
            WRITE(6,'(/A,F7.1)') 'PHYSICS OPTION DELT = ',DELT
         ENDIF
*
      ELSE IF (NOMC.EQ.'DZSEDI')                 THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = DZSEDI
         ENDIF
*
      ELSE IF (NOMC.EQ.'EPONGE')                 THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            DO I=1,NV
               VALEURR(I) = EPONGE(I)
            END DO
         ENDIF
*
      ELSE IF (NOMC.EQ.'ETRMIN')                 THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = ETRMIN2
         ENDIF
*
      ELSE IF (NOMC.EQ.'FACDIFV')                THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = FACDIFV
         ENDIF
*
      ELSE IF (NOMC.EQ.'FACTDT')                 THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = FACTDT
         ENDIF
*
      ELSE IF (NOMC.EQ.'HC2')                    THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = HC2
         ENDIF
*
      ELSE IF (NOMC.EQ.'HF2')                    THEN
*
         IF (MODEC.EQ.'GET')                     THEN
*
            VALEURR(1) = HF2
*
         ENDIF
*
      ELSE IF (NOMC.EQ.'HM2')                    THEN
*
         IF (MODEC.EQ.'GET')                     THEN
*
            VALEURR(1) = HM2
*
         ENDIF
*
       ELSE IF (NOMC.EQ.'KFCDEPTH')              THEN
*
         IF (MODEC.EQ.'GET')                     THEN
           VALEURR(1) =KFCDEPTH
         ENDIF
*
       ELSE IF (NOMC.EQ.'KFCDET')                THEN
*
         IF (MODEC.EQ.'GET')                     THEN
           VALEURR(1) =KFCDET
         ENDIF
*
       ELSE IF (NOMC.EQ.'KFCDLEV')               THEN
*
         IF (MODEC.EQ.'GET')                     THEN
           VALEURR(1) =KFCDLEV
         ENDIF
*
       ELSE IF (NOMC.EQ.'KFCRAD')                THEN
*
         IF (MODEC.EQ.'GET')                     THEN
           VALEURR(1) =KFCRAD
         ENDIF
*
       ELSE IF (NOMC.EQ.'KFCTIMEA')              THEN
*
         IF (MODEC.EQ.'GET')                     THEN
           VALEURR(1) =KFCTIMEA
         ENDIF
*
       ELSE IF (NOMC.EQ.'KFCTIMEC')              THEN
*
         IF (MODEC.EQ.'GET')                     THEN
           VALEURR(1) =KFCTIMEC
         ENDIF
*
      ELSE IF (NOMC.EQ.'KFCTRIG4')               THEN
*
         IF (MODEC.EQ.'GET')                     THEN
           VALEURR(1) = KFCTRIG4(1)
           VALEURR(2) = KFCTRIG4(2)
           VALEURR(3) = KFCTRIG4(3)
           VALEURR(4) = KFCTRIG4(4)
         ENDIF
*
      ELSE IF (NOMC.EQ.'KFCTRIGA')               THEN
*
         IF (MODEC.EQ.'GET')                     THEN
           VALEURR(1) = KFCTRIGA
         ENDIF
*
      ELSE IF (NOMC.EQ.'KFCTRIGL')               THEN
*
         IF (MODEC.EQ.'GET')                     THEN
           VALEURR(1) = KFCTRIGL
         ENDIF
*
      ELSE IF (NOMC.EQ.'KFCTRIGLAT')              THEN
*
         IF (MODEC.EQ.'GET')                      THEN
            VALEURL(1) = KFCTRIGLAT
         ENDIF
*
      ELSE IF (NOMC.EQ.'KKL')                    THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = KKL2
         ENDIF
*
      ELSE IF (NOMC.EQ.'MY_DZSEDI')              THEN
*
         IF (MODEC.EQ.'GET')                     THEN
           VALEURR(1) = MY_DZSEDI
         ENDIF
*
      ELSE IF (NOMC.EQ.'PARSOL')                 THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            DO I=1,NV
               VALEURR(I) = PARSOL(I)
            END DO
         ENDIF
*
      ELSE IF (NOMC.EQ.'QCO2')                   THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = QCO2
         ENDIF
*
      ELSE IF (NOMC.EQ.'QCH4')                   THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = QCH4
         ENDIF
*
      ELSE IF (NOMC.EQ.'QN2O')                   THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = QN2O
         ENDIF
*
      ELSE IF (NOMC.EQ.'QCFC11')                 THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = QCFC11
         ENDIF
*
      ELSE IF (NOMC.EQ.'QCFC12')                 THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = QCFC12
         ENDIF
*
      ELSE IF (NOMC.EQ.'RMSCON')                 THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = RMSCON
         ENDIF
*
      ELSE IF (NOMC.EQ.'TAUFAC')                 THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = TAUFAC
         ENDIF
*
      ELSE IF (NOMC.EQ.'TRIGLAT')                THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            DO I=1,NV
               VALEURR(I) = TRIGLAT(I)
            END DO
         ENDIF
*
      ELSE IF (NOMC.EQ.'Z0MIN')                  THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = Z0MIN2
         ENDIF
*
      ELSE IF (NOMC.EQ.'Z0TLAT')                 THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            DO I=1,NV
               VALEURR(I) = Z0TLAT(I)
            END DO
         ENDIF
*
      ELSE IF (NOMC.EQ.'ZUA')                    THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = ZUA
         ENDIF

      ELSE IF (NOMC.EQ.'ZTA')                    THEN
*
         IF (MODEC.EQ.'GET')                     THEN
            VALEURR(1) = ZTA
         ENDIF
*
      ELSE IF (NOMC.EQ.'PTOP_NML')               THEN
*
         IF      (MODEC.EQ.'SET')                THEN
             PTOP_NML = VALEURR(1)
         ENDIF
         IF (PROUT) THEN
            WRITE(6,'(/A,F7.2)') 'PHYSICS OPTION PTOP_NML = ',PTOP_NML
         ENDIF
*
      ELSE
*
         if (prout) then
         WRITE(6,1020) NOMC,'AS, BETA, DELT,                   '
         WRITE(6,1021)      'EPONGE, ETRMIN, FACDIFV, FACTDT,  '
         WRITE(6,1021)      'HC, HF, HM, KFCDEPTH, KFCDET,     '
         WRITE(6,1021)      'KFCDLEV, KFCMOM, KFCPCP, KFCRAD,  '
         WRITE(6,1021)      'KFCTIMEC, KFCTIMEA, KFCTRIG4,     '
         WRITE(6,1021)      'KFCTRIGA, KFCTRIGL , KFCTRIGLAT,  '
         WRITE(6,1021)      'KKL, KTICEFRAC, PARSOL,           '
         WRITE(6,1021)      'QCO2, RMSCON,TAUFAC, TRIGLAT,     '
         WRITE(6,1021)      'Z0MIN, Z0TLAT','QCH4, QN2O,       '
         WRITE(6,1021)      'QCFC11, QCFC12                    '
         WRITE(6,1022)
         endif
         err = -1
*
      ENDIF
*
      RETURN
*
************************************************************************
*
*     SECTION COMMUNE AUX POINTS D'ENTREE
*
************************************************************************
*
500   CONTINUE
      err = -1
*
*     CONVERSION DE MINUSCULES A MAJUSCULES
*
      CALL LOW2UP(NOM, NOMC)
      CALL LOW2UP(MODE,MODEC)
*
*     VERIFICATION DU MODE D'OPERATION
*
      IF (MODEC.NE.'SET' .AND. MODEC.NE.'GET') THEN
         if (prout) WRITE(6,1000)
         return
      ENDIF
*
*     SEULES CERTAINES VARIABLES PEUVENT ETRE DEFINIES
*     EN MODE "SET". LA PLUPART DES VARIABLES SONT
*     LUES DIRECTEMENT DU NAMELIST "PHYSICS" PAR PHY_INIT;
*     POUR CES VARIABLES, PHY_OPT NE PEUT QU'ETRE APPELE
*     EN MODE "GET".
      IF (MODEC.EQ.'SET') THEN
         DO I=1,NVAR_SET
            IF (NOMC.EQ.VAR_SET(I)) GOTO 600
         END DO
         IF (PROUT) WRITE(6,1005) NOMC
         RETURN
      ENDIF
600   CONTINUE
*
*     RETOUR AUX POINTS D'ENTREE
*
      IF      (TYPE.EQ.'C') THEN
         GO TO 100
      ELSE IF (TYPE.EQ.'I') THEN
         GO TO 200
      ELSE IF (TYPE.EQ.'L') THEN
         GO TO 300
      ELSE IF (TYPE.EQ.'R') THEN
         GO TO 400
      ENDIF

************************************************************************
*
*     FIN DE LA SECTION COMMUNE
*
************************************************************************
*
*
1000   FORMAT ( ' *****************************************',
     +        / ' *****************************************',
     +        / ' *                                       *',
     +        / ' ***** ABORT ***** ABORT ***** ABORT *****',
     +        / ' *                                       *',
     +        / ' *     S/R PHY_OPT:  INVALID MODE        *',
     +        / ' *                                       *',
     +        / ' *     USE EITHER SET OR GET             *',
     +        / ' *                                       *',
     +        / ' *****************************************',
     +        / ' *****************************************')
*
1005   FORMAT ( ' *****************************************',
     +        / ' *****************************************',
     +        / ' *                                       *',
     +        / ' ***** ABORT ***** ABORT ***** ABORT *****',
     +        / ' *                                       *',
     +        / ' *     S/R PHY_OPT:                      *',
     +        / ' *                                       *',
     +        / ' *     "SET" MODE NOT ALLOWED            *',
     +        / ' *                                       *',
     +        / ' *      FOR OPTION ', A16,        '      *',
     +        / ' *                                       *',
     +        / ' *****************************************',
     +        / ' *****************************************')
*
1012   FORMAT ( ' *****************************************',
     +        / ' *****************************************',
     +        / ' *                                       *',
     +        / ' ***** ABORT ***** ABORT ***** ABORT *****',
     +        / ' *                                       *',
     +        / ' *     S/R PHY_OPT : ILLEGAL NUMBER      *',
     +        / ' *     OF VALUES FOR OPTION ', A16,     '*',
     +        / ' *                                       *',
     +        / ' *****************************************',
     +        / ' *****************************************')
1013   FORMAT ( ' *****************************************',
     +        / ' *****************************************',
     +        / ' *                                       *',
     +        / ' ***** ABORT ***** ABORT ***** ABORT *****',
     +        / ' *                                       *',
     +        / ' *     S/R PHY_OPT:   OPTION Z0TCST       *',
     +        / ' *                                       *',
     +        / ' *     HAS BEEN REPLACED BY Z0TLAT       *',
     +        / ' *                                       *',
     +        / ' *****************************************',
     +        / ' *****************************************')
*
1020   FORMAT (2(1x,60('*')/),1x,'*',58(' '),'*'/
     +         1x,5('***** ABORT'),'*****'/1x,'*',58(' '),'*'/
     +         ' *',9(' '),"S/R PHY_OPT:  INVALID OPTION: '",A8,"'",
     +         10(' '),'*'/' *    ','ALLOWED: ',a,13(' '),'*')
1021   FORMAT (' *             ',a,11(' '),'*')
1022   FORMAT (1x,'*',58(' '),'*',/2(1x,60('*')/))
*
*
      END
      BLOCK DATA PHY_OPTIONS_DATA
!
#include "phy_master_ctrl.cdk"
#include "options.cdk"
!
!     _________________________________________
!
!     INITIALIZATION OF PHYSICS OPTIONS
!
!     PLEASE KEEP IN STRICT ALPHABETICAL ORDER!
!     _________________________________________
!
!
      DATA ADVECTKE        /.FALSE./
      DATA AGREGAT         /.FALSE./
      DATA AS2             /12./
      DATA BETA2           /1.0/
      DATA BKGALB          /.TRUE./
      DATA CHAUF           /.TRUE./
      DATA CLIMAT          /.FALSE./
      DATA CONVEC          /'NIL'/
      DATA CORTM           /.TRUE./
      DATA COUPLING        /.FALSE./
      DATA DATE            /14 * 0/
      DATA DBGMEM          /.FALSE./
      DATA DELT            /0/
      DATA DIFFUW          /.FALSE./
      DATA DRAG            /.TRUE./
      DATA DRYLAPS         /.TRUE./
      DATA DZSEDI          /60./
      DATA EPONGE          /LEVMAX * 0.0/
      DATA ETRMIN2         /1.E-4/
      DATA EVAP            /.TRUE./
      DATA FACDIFV         /1.0/
      DATA FACTDT          /1.0/
      DATA FLUVERT         /'NIL'/
      DATA FOMIC           /.FALSE./
      DATA GWDRAG          /'NIL'/
      DATA HC2             /0.6/
      DATA HF2             /1.0/
      DATA HM2             /1.0/
      DATA ICELAC          /.FALSE./
      DATA ICEMELT         /.FALSE./
      DATA ICONVEC         /1000/
      DATA IFLUVERT        /1000/
      DATA IGWDRAG         /1000/
      DATA IHEATCAL        /0/
      DATA IKFCPCP         /1000/
      DATA ILONGMEL        /1000/
      DATA IMPFLX          /.FALSE./
      DATA INILWC          /.FALSE./
      DATA IPCPTYPE        /1000/
      DATA IRADIA          /1000/
      DATA ISCHMSOL        /1000/
      DATA ISCHMURB        /0/
      DATA ISHLCVT         /2 * 1000/
      DATA ISTCOND         /1000/
      DATA KFCDEPTH        /4000./
      DATA KFCDET          /0./
      DATA KFCDLEV         /0.5/
      DATA KFCMOM          /.FALSE./
      DATA KFCPCP          /'ORI'/
      DATA KFCRAD          /1500./
      DATA KFCTIMEA        /3600./
      DATA KFCTIMEC        /3600./
      DATA KFCTRIG4        /0., 0., 0.05, 0.05/
      DATA KFCTRIGA        /-1.0/
      DATA KFCTRIGL        /0.05/
      DATA KFCTRIGLAT      /.FALSE./
      DATA KKL2            /0.1/
      DATA KNTRAD          /0/
      DATA KTICEFRAC       /.TRUE./
      DATA LIMSNODP        /.FALSE./
      DATA LIN_KPH         /0/
      DATA LIN_PBL         /0/
      DATA LIN_LSC         /0/
      DATA LIN_SGO         /0/
      DATA LIN_V4D         /0/
      DATA LMETOX          /.FALSE./
      DATA LONGMEL         /'BLAC62'/
      DATA MY_CCNTYPE      /1/
      DATA MY_DIAGON       /.TRUE./
      DATA MY_DZSEDI       /50./
      DATA MY_DBLMOM_C     /.TRUE./
      DATA MY_DBLMOM_R     /.TRUE./
      DATA MY_DBLMOM_I     /.TRUE./
      DATA MY_DBLMOM_S     /.TRUE./
      DATA MY_DBLMOM_G     /.TRUE./
      DATA MY_DBLMOM_H     /.TRUE./
      DATA MY_FULL_VERSION /4/
      DATA MY_ICEON        /.TRUE./
      DATA MY_INITN        /.TRUE./
      DATA MY_RAINON       /.TRUE./
      DATA MY_SEDION       /.TRUE./
      DATA MY_SNOWON       /.TRUE./
      DATA MY_WARMON       /.TRUE./
      DATA MOYHR           /0/
      DATA NON_ORO         /.FALSE./
      DATA NSLOFLUX        /0/
      DATA OWFLUX          /.FALSE./
      DATA OZONE_FILE_S    /'NIL'/
      DATA PARSOL          /2.3E+06, 1.0E+06, 2.0E+06, 0.5E-06, \
                            0.6E-06, 1.1E-06/
      DATA PCPTYPE         /'NIL'/
      DATA PHY_PCK_VERSION /'@#$%'/
      DATA QCFC11          /0.280/
      DATA QCFC12          /0.530/
      DATA QCH4            /1.783/
      DATA QCO2            /380./
      DATA QN2O            /0.3186/
      DATA RADFILES        /'STD'/
      DATA RADFIX          /.TRUE./
      DATA RADFLTR         /.TRUE./
      DATA RADIA           /'NIL'/
      DATA RADNIVL         /LEVMAX * 0, 0/
      DATA RADSLOPE        /.FALSE./
      DATA RMSCON          /1.0/
      DATA SATUCO          /.TRUE./
      DATA SCHMSOL         /'FCREST'/
      DATA SCHMURB         /'NIL'/
      DATA SHLCVT          /2 * 'NIL'/
      DATA SIMISCCP        /.FALSE./
      DATA SNOALB_ANL      /.TRUE./
      DATA SNOWMELT        /.FALSE./
      DATA STCOND          /'NIL'/
      DATA STOMATE         /.FALSE./
      DATA STRATOS         /.FALSE./
      DATA TAUFAC          /8.E-6/
      DATA TDIAGLIM        /.FALSE./
      DATA TRIGLAT         /2*0.0/
      DATA TS_FLXIR        /.FALSE./
      DATA TSCONFC         /.FALSE./
      DATA TYPSOL          /.FALSE./
      DATA Z0DIR           /.FALSE./
      DATA Z0MIN2          /1.5E-5/
      DATA Z0TLAT          /2*0.0/
      DATA ZTA             /-1./
      DATA ZUA             /-1./
!
      END BLOCK DATA PHY_OPTIONS_DATA