!copyright (C) 2001 MSC-RPN COMM %%%RPNPHY%%% *** S/P PHYOPT *SUBROUTINE PHYOPTC (NOM,VALEURC,NV,MODE) 11 * IMPLICIT NONE * CHARACTER *(*) NOM, MODE CHARACTER MODEC*3,NOMC*16,TYPE*1 INTEGER I,NV 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 * *Object * to initialize the 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 * phyopt sets or gets options of four * types : character, integer, logical * and real. It includes 3 entry points. * ** * #include "options.cdk"
#include "dzsedi.cdk"
#include "phy_macros_f.h"
* ************************************************************************ * AUTOMATIC ARRAYS ************************************************************************ * AUTOMATIC ( VALC , CHARACTER*8 , (NV) ) * ************************************************************************ * * INITIALISATION DES CLEFS * DATA ICONVEC,IFLUVERT,IGWDRAG,ILONGMEL /4*1000/ DATA IRADIA,ISCHMSOL,ISHLCVT,ISTCOND /5*1000/ DATA IKFCPCP,IPCPTYPE /2*1000/ DATA CONVEC,FLUVERT,GWDRAG,LONGMEL,RADIA,SCHMSOL /6*' '/ DATA PCPTYPE /' '/ DATA SHLCVT,STCOND,KFCPCP /4*' '/ DATA RADFILES /'STD'/ DATA DATE,KNTRAD,MOYHR /16*0/ DATA NSLOFLUX /0/ DATA BKGALB,CHAUF,CORTM,DMOM,DRAG,DRYLAPS,EVAP, + MONTAGN,RADFIX,RADFLTR,SATUCO,SNOALB_ANL,WET,Z0TCST + /14*.TRUE. / DATA ADVECTKE,AGREGAT,CLIMAT,CORTS,DBGMEM,DIFFUW, + FOMIC,ICEMELT,INILWC,SNOWMELT,STOMATE, + STRATOS,TSCONFC,TYPSOL,Z0DIR + /15*.FALSE./ DATA AS2,BETA2,KKL2 /12., 1.0, 0.1/ DATA DZSEDI, DZSEDI_DEF /2*350./ DATA FACDIFV, FACTDT /2*0.0/, + HC2, HF2, HM2 /0.6, 1.0, 1.0/, + PARSOL/6*0.0/, EPONGE /LEVMAX * 0.0 / DATA ETRMIN2,QCO2,TAUFAC,Z0MIN2 / 1.E-4,360.,8.E-6,1.5E-5 / DATA RADNIVL /LEVMAX * 0, 0/ DATA KFCMOM /.TRUE./ DATA KFCTRIG4 / 0., 0., 0.05, 0.05 / DATA KFCRAD,KFCDEPTH,KFCDLEV + /1500., 4000., 0.5 / DATA KFCDET,KFCTIMEC,KFCTIMEA + /0., 3600., 3600. / * TYPE = 'C' * GO TO 500 * 100 CONTINUE * DO I=1,NV CALL LOW2UP(VALEURC(I),VALC(I)) END DO * IF (NOMC.EQ.'CONVEC') THEN * IF (MODEC.EQ.'SET') THEN * IF (VALC(1).EQ.'NIL') THEN ICONVEC = 0 ELSE IF (VALC(1).EQ.'SEC') THEN ICONVEC = 1 ELSE IF (VALC(1).EQ.'MANABE') THEN ICONVEC = 2 ELSE IF (VALC(1).EQ.'OLDKUO') THEN ICONVEC = 3 ELSE IF (VALC(1).EQ.'NEWKUO') THEN ICONVEC = 4 ELSE IF (VALC(1).EQ.'FCP') THEN ICONVEC = 5 ELSE IF (VALC(1).EQ.'KFC') THEN ICONVEC = 6 ELSE IF (VALC(1).EQ.'KUOSTD') THEN ICONVEC = 7 ELSE IF (VALC(1).EQ.'KUOSYM') THEN ICONVEC = 8 ELSE IF (VALC(1).EQ.'KUOSUN') THEN ICONVEC = 9 ELSE IF (VALC(1).EQ.'RAS') THEN ICONVEC =10 ELSE IF (VALC(1).EQ.'FCPKUO') THEN ICONVEC =11 ELSE IF (VALC(1).EQ.'KFCKUO2') THEN ICONVEC =12 ELSE WRITE(6,1010) NOMC, + 'SEC, MANABE, OLDKUO, NEWKUO, FCP, KFC, +KUOSTD, KUOSYM, KUOSUN, RAS, FCPKUO2, FCPKUO, +KFCKUO2, NIL' CALL QQEXIT(1) ENDIF * CONVEC = VALC(1) * ELSE IF (MODEC.EQ.'GET') THEN * VALEURC(1) = CONVEC * ENDIF * ELSE IF (NOMC.EQ.'FLUVERT') THEN * IF (MODEC.EQ.'SET') THEN * IF (VALC(1).EQ.'NIL') THEN IFLUVERT = 0 ELSE IF (VALC(1).EQ.'PHYSIMP') THEN IFLUVERT = 1 ELSE IF (VALC(1).EQ.'CLEF') THEN IFLUVERT = 2 ELSE IF (VALC(1).EQ.'MOISTKE') THEN IFLUVERT = 3 ELSE WRITE(6,1010) NOMC,'MOISTKE, CLEF, PHYSIMP, NIL' CALL QQEXIT(1) ENDIF * FLUVERT = VALC(1) * ELSE IF (MODEC.EQ.'GET') THEN * VALEURC(1) = FLUVERT * ENDIF * ELSE IF (NOMC.EQ.'GWDRAG') THEN * IF (MODEC.EQ.'SET') THEN * IF (VALC(1).EQ.'NIL') THEN IGWDRAG = 0 ELSE IF (VALC(1).EQ.'GWD86') THEN IGWDRAG = 1 ELSE IF (VALC(1).EQ.'GWD95') THEN IGWDRAG = 2 ELSE WRITE(6,1010) NOMC,' GWD86, GWD95, NIL' CALL QQEXIT(1) ENDIF * GWDRAG = VALC(1) * ELSE IF (MODEC.EQ.'GET') THEN * VALEURC(1) = GWDRAG * ENDIF * ELSE IF (NOMC.EQ.'KFCPCP') THEN * IF (MODEC.EQ.'SET') THEN * IF (VALC(1).EQ.'ORI') THEN IKFCPCP = 0 ELSE IF (VALC(1).EQ.'CONSPCPN') THEN IKFCPCP = 1 ELSE WRITE(6,1010) NOMC,' ORI, CONSPCPN' CALL QQEXIT(1) ENDIF * KFCPCP= VALC(1) * ELSE IF (MODEC.EQ.'GET') THEN * VALEURC(1) = KFCPCP * ENDIF * ELSE IF (NOMC.EQ.'LONGMEL') THEN * IF (MODEC.EQ.'SET') THEN * IF (VALC(1).EQ.'BLAC62') THEN ILONGMEL= 0 ELSE IF (VALC(1).EQ.'BOUJO') THEN ILONGMEL= 1 ELSE WRITE(6,1010) NOMC,'BLAC62, BOUJO ' CALL QQEXIT(1) ENDIF * LONGMEL = VALC(1) * ELSE IF (MODEC.EQ.'GET') THEN * VALEURC(1) = LONGMEL ENDIF * ELSE IF (NOMC.EQ.'RADIA') THEN * IF (MODEC.EQ.'SET') THEN * IF (VALC(1).EQ.'NIL') THEN IRADIA = 0 ELSE IF (VALC(1).EQ.'OLDRAD') THEN IRADIA = 1 ELSE IF (VALC(1).EQ.'NEWRAD') THEN IRADIA = 2 ELSE WRITE(6,1010) NOMC,'NEWRAD, OLDRAD, NIL' CALL QQEXIT(1) ENDIF * RADIA = VALC(1) * ELSE IF (MODEC.EQ.'GET') THEN * VALEURC(1) = RADIA * ENDIF * ELSE IF (NOMC.EQ.'RADFILES') THEN * IF (MODEC.EQ.'SET') THEN * IF (VALC(1).NE.'UNF'.AND.VALC(1).NE.'STD') THEN WRITE(6,1010) NOMC,'UNF, STD' CALL QQEXIT(1) ENDIF * RADFILES = VALC(1) * ELSE IF (MODEC.EQ.'GET') THEN * VALEURC(1) = RADFILES * ENDIF * ELSE IF (NOMC.EQ.'SHLCVT') THEN * IF (MODEC.EQ.'SET') THEN * IF (NV.NE.2) THEN WRITE(6,1012) NOMC CALL QQEXIT(1) ENDIF * * IF (VALC(1).EQ.'NIL') THEN ISHLCVT(1) = 0 ELSE IF (VALC(1).EQ.'GELEYN') THEN ISHLCVT(1) = 1 ELSE IF (VALC(1).EQ.'CONRES') THEN ISHLCVT(1) = 2 ELSE IF (VALC(1).EQ.'SHALOW') THEN ISHLCVT(1) = 3 ELSE IF (VALC(1).EQ.'SHALODQC') THEN ISHLCVT(1) = 4 ELSE WRITE(6,1010)'SHLCVT(1)','GELEYN,CONRES,SHALOW,SHALODQC, +NIL' CALL QQEXIT(1) ENDIF * IF (VALC(2).EQ.'NIL') THEN ISHLCVT(2) = 0 ELSE IF (VALC(2).EQ.'KTRSNT') THEN ISHLCVT(2) = 1 ELSE WRITE(6,1010) 'SHLCVT(2)','KTRSNT, NIL' CALL QQEXIT(1) ENDIF DO I=1,NV SHLCVT(I) = VALC(I) END DO * ELSE IF (MODEC.EQ.'GET') THEN * * IF (NV.NE.2) THEN WRITE(6,1012) NOMC CALL QQEXIT(1) ENDIF * DO I=1,NV VALEURC(I) = SHLCVT(I) END DO * ENDIF * ELSE IF (NOMC.EQ.'STCOND') THEN * IF (MODEC.EQ.'SET') THEN * IF (VALC(1).EQ.'NIL') THEN ISTCOND = 0 ELSE IF (VALC(1).EQ.'CONDS') THEN ISTCOND = 1 ELSE IF (VALC(1).EQ.'OLDSUND') THEN ISTCOND = 2 ELSE IF (VALC(1).EQ.'NEWSUND') THEN ISTCOND = 3 ELSE IF (VALC(1).EQ.'CONSUN') THEN ISTCOND = 4 ELSE IF (VALC(1).EQ.'EXC') THEN ISTCOND = 5 ELSE IF (VALC(1).EQ.'EXCR1') THEN ISTCOND = 6 ELSE IF (VALC(1).EQ.'EXCR2') THEN ISTCOND = 7 ELSE IF (VALC(1).EQ.'EXCRI') THEN ISTCOND = 8 ELSE IF (VALC(1).EQ.'EXCRIG') THEN ISTCOND = 9 ELSE WRITE(6,1010) NOMC,'CONDS, NEWSUND, OLDSUND, +CONSUN, EXC, EXCR1, EXCR2, EXCRI, EXCRIG, NIL' CALL QQEXIT(1) ENDIF * STCOND = VALC(1) * ELSE IF (MODEC.EQ.'GET') THEN * VALEURC(1) = STCOND * ENDIF * ELSE IF (NOMC.EQ.'SCHMSOL') THEN * IF (MODEC.EQ.'SET') THEN * IF (VALC(1).EQ.'FCREST') THEN ISCHMSOL = 1 ELSE IF (VALC(1).EQ.'CLASS') THEN ISCHMSOL = 2 ELSE IF (VALC(1).EQ.'ISBA') THEN ISCHMSOL = 3 ELSE WRITE(6,1010) NOMC,'FCREST, CLASS, ISBA' CALL QQEXIT(1) ENDIF * SCHMSOL = VALC(1) * ELSE IF (MODEC.EQ.'GET') THEN * VALEURC(1) = SCHMSOL * ENDIF * ELSE IF (NOMC.EQ.'PCPTYPE') THEN * IF (MODEC.EQ.'SET') THEN * IF (VALC(1).EQ.'NIL') THEN IPCPTYPE = 0 ELSE IF (VALC(1).EQ.'BOURGE') THEN IPCPTYPE = 1 ELSE WRITE(6,1010) NOMC,'BOURGE' CALL QQEXIT(1) ENDIF * PCPTYPE = VALC(1) * ELSE IF (MODEC.EQ.'GET') THEN * VALEURC(1) = PCPTYPE * ENDIF * ELSE * WRITE(6,1020) NOMC,'CONVEC, FLUVERT, GWDRAG, LONGMEL, ' WRITE(6,1021) 'RADIA,SCHMSOL,STCOND,SHLCVT,KFCPCP' WRITE(6,1021) 'PCPTYPE ' WRITE(6,1022) CALL QQEXIT(1) * ENDIF * RETURN * ENTRY PHYOPTI (NOM,VALEURI,NV,MODE) * *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 * IF (NOMC.EQ.'DATE') THEN * IF (MODEC.EQ.'SET') THEN DO 55 I=1,NV DATE(I) = VALEURI(I) 55 CONTINUE ELSE IF (MODEC.EQ.'GET') THEN DO 56 I=1,NV VALEURI(I) = DATE(I) 56 CONTINUE ENDIF * ELSE IF (NOMC.EQ.'DEBUT') THEN * IF (MODEC.EQ.'SET') THEN DEBUT = VALEURI(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURI(1) = DEBUT ENDIF * ELSE IF (NOMC.EQ.'ICONVEC') THEN * IF (MODEC.EQ.'GET') THEN VALEURI(1) = ICONVEC 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.'SET') THEN MOYHR = VALEURI(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURI(1) = MOYHR ENDIF * ELSE IF (NOMC.EQ.'NSLOFLUX') THEN * IF (MODEC.EQ.'SET') THEN NSLOFLUX = VALEURI(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURI(1) = NSLOFLUX ENDIF * ELSE IF (NOMC.EQ.'KNTRAD') THEN * IF (MODEC.EQ.'SET') THEN KNTRAD = VALEURI(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURI(1) = KNTRAD ENDIF * ELSE IF (NOMC.EQ.'LIN_KPH') THEN * IF (MODEC.EQ.'SET') THEN LIN_KPH = VALEURI(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURI(1) = LIN_KPH ENDIF * ELSE IF (NOMC.EQ.'LIN_LSC') THEN * IF (MODEC.EQ.'SET') THEN LIN_LSC = VALEURI(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURI(1) = LIN_LSC ENDIF * ELSE IF (NOMC.EQ.'LIN_PBL') THEN * IF (MODEC.EQ.'SET') THEN LIN_PBL = VALEURI(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURI(1) = LIN_PBL ENDIF * ELSE IF (NOMC.EQ.'LIN_SGO') THEN * IF (MODEC.EQ.'SET') THEN LIN_SGO = VALEURI(1) ELSE 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) ELSE IF (MODEC.EQ.'GET') THEN VALEURI(1) = LIN_V4D ENDIF * ELSE IF (NOMC.EQ.'RADNIV') THEN IF (MODEC.EQ.'SET') THEN IF (VALEURI(1).NE.0) THEN DO I=1,NV RADNIVL(I) = VALEURI(I) ENDDO ENDIF ELSE IF (MODEC.EQ.'GET') THEN DO I=1,NV VALEURI(I) = RADNIVL(I) ENDDO ENDIF * ELSE * WRITE(6,1020) NOMC,'DATE, DEBUT, KNTRAD, RADNIVL ' WRITE(6,1022) CALL QQEXIT(1) * ENDIF * RETURN * ENTRY PHYOPTL (NOM,VALEURL,NV,MODE) * *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 * * IF (NOMC.EQ.'ADVECTKE') THEN * IF (MODEC.EQ.'SET') THEN ADVECTKE = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = ADVECTKE ENDIF * ELSE IF (NOMC.EQ.'AGREGAT') THEN * IF (MODEC.EQ.'SET') THEN AGREGAT = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = AGREGAT ENDIF * ELSE IF (NOMC.EQ.'CHAUF') THEN * IF (MODEC.EQ.'SET') THEN CHAUF = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = CHAUF ENDIF * ELSE IF (NOMC.EQ.'CLIMAT') THEN * IF (MODEC.EQ.'SET') THEN CLIMAT = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = CLIMAT ENDIF * ELSE IF (NOMC.EQ.'DBGMEM') THEN * IF (MODEC.EQ.'SET') THEN DBGMEM = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = DBGMEM ENDIF * ELSE IF (NOMC.EQ.'DIFFUW') THEN * IF (MODEC.EQ.'SET') THEN DIFFUW = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = DIFFUW ENDIF * ELSE IF (NOMC.EQ.'DMOM') THEN * IF (MODEC.EQ.'SET') THEN DMOM = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = DMOM ENDIF * ELSE IF (NOMC.EQ.'DRAG') THEN * IF (MODEC.EQ.'SET') THEN DRAG = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = DRAG ENDIF * ELSE IF (NOMC.EQ.'EVAP') THEN * IF (MODEC.EQ.'SET') THEN EVAP = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = EVAP ENDIF * ELSE IF (NOMC.EQ.'ICEMELT') THEN * IF (MODEC.EQ.'SET') THEN ICEMELT = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = ICEMELT ENDIF * ELSE IF (NOMC.EQ.'IMPFLX') THEN * IF (MODEC.EQ.'SET') THEN IMPFLX = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = IMPFLX ENDIF * ELSE IF (NOMC.EQ.'INILWC') THEN * IF (MODEC.EQ.'SET') THEN INILWC = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = INILWC ENDIF * ELSE IF (NOMC.EQ.'KFCMOM') THEN * IF (MODEC.EQ.'SET') THEN KFCMOM=VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1)= KFCMOM ENDIF * ELSE IF (NOMC.EQ.'RADFIX') THEN * IF (MODEC.EQ.'SET') THEN RADFIX = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = RADFIX ENDIF * ELSE IF (NOMC.EQ.'RADFLTR') THEN * IF (MODEC.EQ.'SET') THEN RADFLTR = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = RADFLTR ENDIF * ELSE IF (NOMC.EQ.'SATUCO') THEN * IF (MODEC.EQ.'SET') THEN SATUCO = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = SATUCO ENDIF * ELSE IF (NOMC.EQ.'SNOALB_ANL') THEN * IF (MODEC.EQ.'SET') THEN SNOALB_ANL = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = SNOALB_ANL ENDIF * ELSE IF (NOMC.EQ.'SNOWMELT') THEN * IF (MODEC.EQ.'SET') THEN SNOWMELT = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = SNOWMELT ENDIF * ELSE IF (NOMC.EQ.'STOMATE') THEN * IF (MODEC.EQ.'SET') THEN STOMATE = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = STOMATE ENDIF * ELSE IF (NOMC.EQ.'STRATOS') THEN * IF (MODEC.EQ.'SET') THEN STRATOS = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = STRATOS ENDIF * ELSE IF (NOMC.EQ.'TSCONFC') THEN * IF (MODEC.EQ.'SET') THEN TSCONFC = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = TSCONFC ENDIF * ELSE IF (NOMC.EQ.'TYPSOL') THEN * IF (MODEC.EQ.'SET') THEN TYPSOL = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = TYPSOL ENDIF * ELSE IF (NOMC.EQ.'WET') THEN * IF (MODEC.EQ.'SET') THEN WET = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = WET ENDIF * ELSE IF (NOMC.EQ.'Z0DIR') THEN * IF (MODEC.EQ.'SET') THEN Z0DIR = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = Z0DIR ENDIF * ELSE IF (NOMC.EQ.'Z0TCST') THEN * IF (MODEC.EQ.'SET') THEN Z0TCST = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = Z0TCST ENDIF * ELSE IF (NOMC.EQ.'CORTM') THEN * IF (MODEC.EQ.'SET') THEN CORTM = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = CORTM ENDIF * ELSE IF (NOMC.EQ.'CORTS') THEN * IF (MODEC.EQ.'SET') THEN CORTS = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = CORTS ENDIF * ELSE IF (NOMC.EQ.'DRYLAPS') THEN * IF (MODEC.EQ.'SET') THEN DRYLAPS = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = DRYLAPS ENDIF * ELSE IF (NOMC.EQ.'MONTAGN') THEN * IF (MODEC.EQ.'SET') THEN MONTAGN = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = MONTAGN ENDIF * ELSE IF (NOMC.EQ.'BKGALB') THEN * IF (MODEC.EQ.'SET') THEN BKGALB = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = BKGALB ENDIF * ELSE IF (NOMC.EQ.'FOMICHEV') THEN * IF (MODEC.EQ.'SET') THEN FOMIC = VALEURL(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURL(1) = FOMIC ENDIF * ELSE * WRITE(6,1020) NOMC,'ADVECTKE, DIFFUW, CHAUF, CLIMAT,' WRITE(6,1021) 'DBGMEM, DMOM, DRAG, EVAP, FOMIC, ' WRITE(6,1021) 'INILWC, KFCMOM, RADFIX, RADFLTR, ' WRITE(6,1021) 'SATUCO, SNOWMELT, STOMATE, STRATOS,' WRITE(6,1021) 'TYPSOL, WET, Z0DIR, CORTM, CORTS, ' WRITE(6,1021) 'DRYLAPS, MONTAGN, BKGALB,IMPFLX ' WRITE(6,1022) CALL QQEXIT(1) * ENDIF * RETURN * ENTRY PHYOPTR (NOM,VALEURR,NV,MODE) * *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 * IF (NOMC.EQ.'AS') THEN * IF (MODEC.EQ.'SET') THEN AS2 = VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) = AS2 ENDIF * ELSE IF (NOMC.EQ.'BETA') THEN * IF (MODEC.EQ.'SET') THEN BETA2 = VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) = BETA2 ENDIF * ELSE IF (NOMC.EQ.'DELT') THEN * IF (MODEC.EQ.'SET') THEN DELT = VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) = DELT ENDIF * ELSE IF (NOMC.EQ.'DZSEDI') THEN * IF (MODEC.EQ.'SET') THEN DZSEDI = VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) = DZSEDI ENDIF * ELSE IF (NOMC.EQ.'EPONGE') THEN * IF (MODEC.EQ.'SET') THEN DO I=1,NV EPONGE(I) = VALEURR(I) END DO ELSE 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.'SET') THEN ETRMIN2 = VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) = ETRMIN2 ENDIF * ELSE IF (NOMC.EQ.'FACDIFV') THEN * IF (MODEC.EQ.'SET') THEN FACDIFV = VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) = FACDIFV ENDIF * ELSE IF (NOMC.EQ.'FACTDT') THEN * IF (MODEC.EQ.'SET') THEN FACTDT = VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) = FACTDT ENDIF * ELSE IF (NOMC.EQ.'HC') THEN * IF (MODEC.EQ.'SET') THEN IF (VALEURR(1).GT.1.0 .OR. + VALEURR(1).LT.0.0) THEN WRITE(6,1010) NOMC,'0.0 <= HC <= 1.0' CALL QQEXIT(1) ENDIF HC2 = VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) = HC2 ENDIF * ELSE IF (NOMC.EQ.'HF') THEN * IF (MODEC.EQ.'SET') THEN * IF (VALEURR(1).GT.1.0 .OR. + VALEURR(1).LT.0.0) THEN WRITE(6,1010) NOMC,'0.0 <= HF <= 1.0' CALL QQEXIT(1) ENDIF HF2 = VALEURR(1) * ELSE IF (MODEC.EQ.'GET') THEN * VALEURR(1) = HF2 * ENDIF * ELSE IF (NOMC.EQ.'HM') THEN * IF (MODEC.EQ.'SET') THEN * IF (VALEURR(1).GT.1.0 .OR. + VALEURR(1).LT.0.0) THEN WRITE(6,1010) NOMC,'0.0 <= HM <= 1.0' CALL QQEXIT(1) ENDIF HM2 = VALEURR(1) * ELSE IF (MODEC.EQ.'GET') THEN * VALEURR(1) = HM2 * ENDIF * ELSE IF (NOMC.EQ.'KFCDEPTH') THEN * IF (MODEC.EQ.'SET') THEN KFCDEPTH= VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) =KFCDEPTH ENDIF * ELSE IF (NOMC.EQ.'KFCDET') THEN * IF (MODEC.EQ.'SET') THEN KFCDET= VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) =KFCDET ENDIF * ELSE IF (NOMC.EQ.'KFCDLEV') THEN * IF (MODEC.EQ.'SET') THEN KFCDLEV= VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) =KFCDLEV ENDIF * ELSE IF (NOMC.EQ.'KFCRAD') THEN * IF (MODEC.EQ.'SET') THEN KFCRAD= VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) =KFCRAD ENDIF * ELSE IF (NOMC.EQ.'KFCTIMEA') THEN * IF (MODEC.EQ.'SET') THEN KFCTIMEA= VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) =KFCTIMEA ENDIF * ELSE IF (NOMC.EQ.'KFCTIMEC') THEN * IF (MODEC.EQ.'SET') THEN KFCTIMEC= VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) =KFCTIMEC ENDIF * ELSE IF (NOMC.EQ.'KFCTRIG4') THEN * IF (MODEC.EQ.'SET') THEN KFCTRIG4(1) = VALEURR(1) KFCTRIG4(2) = VALEURR(2) KFCTRIG4(3) = VALEURR(3) KFCTRIG4(4) = VALEURR(4) ELSE 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.'KKL') THEN * IF (MODEC.EQ.'SET') THEN KKL2 = VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) = KKL2 ENDIF * ELSE IF (NOMC.EQ.'PARSOL') THEN * IF (MODEC.EQ.'SET') THEN DO I=1,NV PARSOL(I) = VALEURR(I) END DO ELSE 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.'SET') THEN QCO2 = VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) = QCO2 ENDIF * ELSE IF (NOMC.EQ.'TAUFAC') THEN * IF (MODEC.EQ.'SET') THEN TAUFAC = VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) = TAUFAC ENDIF * ELSE IF (NOMC.EQ.'Z0MIN') THEN * IF (MODEC.EQ.'SET') THEN Z0MIN2 = VALEURR(1) ELSE IF (MODEC.EQ.'GET') THEN VALEURR(1) = Z0MIN2 ENDIF * ELSE * WRITE(6,1020) NOMC,'AS, BETA, DELT, DZSEDI, ' 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, KFCTRIG, ' WRITE(6,1021) 'KKL,PARSOL, QCO2, TAUFAC, Z0MIN ' WRITE(6,1022) CALL QQEXIT(1) * ENDIF * RETURN * ************************************************************************ * * SECTION COMMUNE AUX POINTS D'ENTREE * ************************************************************************ * 500 CONTINUE * * 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 WRITE(6,1000) CALL QQEXIT(1) ENDIF * * 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 PHYOPT: INVALID MODE *', + / ' * *', + / ' * USE EITHER SET OR GET *', + / ' * *', + / ' *****************************************', + / ' *****************************************') * 1010 FORMAT ( ' *****************************************', + / ' *****************************************', + / ' * *', + / ' ***** ABORT ***** ABORT ***** ABORT *****', + / ' * *', + / ' * S/R PHYOPT : ILLEGAL VALUE *', + / ' * FOR OPTION ', A9, ' *', + / ' * ALLOWED :',A,' *', + / ' * *', + / ' *****************************************', + / ' *****************************************') * 1012 FORMAT ( ' *****************************************', + / ' *****************************************', + / ' * *', + / ' ***** ABORT ***** ABORT ***** ABORT *****', + / ' * *', + / ' * S/R PHYOPT : ILLEGAL NUMBER *', + / ' * OF VALUES FOR OPTION ', A8 ' *', + / ' * *', + / ' *****************************************', + / ' *****************************************') * 1020 FORMAT (2(1x,60('*')/),1x,'*',58(' '),'*'/ + 1x,5('***** ABORT'),'*****'/1x,'*',58(' '),'*'/ + ' *',9(' '),"S/R PHYOPT: INVALID OPTION: '",A8,"'", + 10(' '),'*'/' * ','ALLOWED: ',a,13(' '),'*',) 1021 FORMAT (' * ',a,11(' '),'*',) 1022 FORMAT (1x,'*',58(' '),'*',/2(1x,60('*')/)) * * END