SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/ch_init_depconst.F90
Go to the documentation of this file.
00001 !     #########
00002        SUBROUTINE CH_INIT_DEPCONST(KCH,KLUOUT,HSV)
00003 !!    ##################################################
00004 !!
00005 !!*** *CH_INIT_DEPCONST*
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !      Read Henry Specific constant,  Molecular Mass and Biological reactivity
00010 !!     factor.
00011 !!     
00012 !!
00013 !!**  METHOD
00014 !!    ------
00015 !
00016 !!    Chemical constant will be read from
00017 !!    the general purpose input file . 
00018 !!
00019 !!       chemical molecular diffusivity MASS_MOL
00020 !!       molecular reactivity factor REA_FACT     
00021 !!       molecular effective Henry constant HENRY_SP
00022 !!
00023 !!
00024 !!    REFERENCE
00025 !!    ---------
00026 !!    
00027 !!    AUTHOR
00028 !!    ------
00029 !!    P. Tulet    *Meteo France*
00030 !!
00031 !!    MODIFICATIONS
00032 !!    -------------
00033 !!    Original 16/02/01
00034 
00035 !!    EXTERNAL
00036 !!    --------
00037 !!
00038 ! open the general purpose ASCII input file
00039 USE MODI_CH_OPEN_INPUTB
00040 USE MODD_CH_SURF
00041 !!
00042 !!    IMPLICIT ARGUMENTS
00043 !!    ------------------
00044 !-------------------------------------------------------------------------------
00045 !
00046 !*       0.     DECLARATIONS
00047 !               ------------
00048 !
00049 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00050 USE PARKIND1  ,ONLY : JPRB
00051 !
00052 IMPLICIT NONE
00053 !
00054 !*      0.1    declarations of arguments
00055 !
00056 INTEGER,                  INTENT(IN)  :: KCH      ! chemistry input namelist logical unit
00057 INTEGER,                  INTENT(IN)  :: KLUOUT   ! output listing channel
00058  CHARACTER(LEN=*), DIMENSION(:),  INTENT(IN)  :: HSV      ! name of chemical species
00059 !
00060 !*      0.2    declarations of local variables
00061 !
00062  CHARACTER(LEN=40) :: YFORMAT    
00063                           ! format for input
00064  CHARACTER(LEN=40) :: YOUTFORMAT = '(A32,2E15.5)'
00065                           ! format for output
00066 !
00067 INTEGER :: IMASS          ! number of molecular diffusivity to be read
00068  CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE :: YMASSMOLNAME !species names
00069 REAL             , DIMENSION(:), ALLOCATABLE :: ZMASSMOLVAL
00070                           ! molecular diffusivity value
00071 !
00072 INTEGER :: IREACT         ! number of chemical reactivity factor to be read
00073  CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE :: YREACTNAME !species names
00074 REAL             , DIMENSION(:), ALLOCATABLE :: ZREACTVAL 
00075                           ! chemical reactivity factor value
00076 !
00077 INTEGER :: IHENRY         ! number of chemical Henry constant to be read
00078  CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE :: YHENRYNAME !species names
00079 REAL             , DIMENSION(:,:), ALLOCATABLE :: ZHENRYVAL
00080                           !chemical Henry constant value
00081 !
00082 INTEGER :: JI, JN, JNREAL ! loop control variables
00083 INTEGER :: INACT          ! array pointer
00084 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00085 !
00086 !-------------------------------------------------------------------------------
00087 !
00088 !*       1.    ALLOCATE FIELD
00089 !              --------------
00090 !
00091 IF (LHOOK) CALL DR_HOOK('CH_INIT_DEPCONST',0,ZHOOK_HANDLE)
00092 IF(.NOT. ALLOCATED(XSREALMASSMOLVAL)) ALLOCATE( XSREALMASSMOLVAL(SIZE(HSV,1)) )
00093 IF(.NOT. ALLOCATED(XSREALREACTVAL)  ) ALLOCATE( XSREALREACTVAL(SIZE(HSV,1)) )
00094 IF(.NOT. ALLOCATED(XSREALHENRYVAL)  ) ALLOCATE( XSREALHENRYVAL(SIZE(HSV,1),2) )
00095 !
00096 !
00097 !*       2.  read chemical molecular diffusivity MASS_MOL
00098 !
00099 ! open input file
00100   WRITE(KLUOUT,*) &
00101        "CH_INIT_CONST: reading  molar mass"  
00102   CALL CH_OPEN_INPUTB("MASS_MOL", KCH, KLUOUT)
00103 !
00104 ! read number of molecular diffusivity IMASS
00105   READ(KCH, *) IMASS
00106   WRITE(KLUOUT,*) "number of molecular diffusivity: ", IMASS
00107 !
00108 ! read data input format
00109   READ(KCH,"(A)") YFORMAT
00110   WRITE(KLUOUT,*) "input format is: ", YFORMAT
00111 !
00112 ! allocate fields
00113   ALLOCATE(YMASSMOLNAME(IMASS))
00114   ALLOCATE(ZMASSMOLVAL(IMASS))
00115 !
00116 ! read molecular diffusivity
00117   DO JI = 1, IMASS
00118     READ(KCH,YFORMAT) YMASSMOLNAME(JI), ZMASSMOLVAL(JI)
00119     WRITE(KLUOUT,YFORMAT) YMASSMOLNAME(JI), ZMASSMOLVAL(JI)
00120   END DO
00121 !
00122 !
00123     WRITE(KLUOUT,'(A)') '----------------------------------------------------'
00124     WRITE(KLUOUT,'(A)') 'MASS_MOL'
00125     WRITE(KLUOUT,'(A)') 'molecular mass (in g/mol) for molecular diffusion'
00126     WRITE(KLUOUT,'(I4)') SIZE(HSV,1)
00127     WRITE(KLUOUT,'(A)') YOUTFORMAT
00128   XSREALMASSMOLVAL(:) = 50. ! default molecular mass 
00129   DO JNREAL = 1, SIZE(HSV,1)
00130     INACT = 0
00131     search_loop3 : DO JN = 1, IMASS
00132       IF (HSV(JNREAL) .EQ. YMASSMOLNAME(JN)) THEN
00133         INACT = JN
00134         EXIT search_loop3
00135       END IF
00136     END DO search_loop3
00137     IF (INACT .NE. 0) XSREALMASSMOLVAL(JNREAL) = ZMASSMOLVAL(INACT)
00138       WRITE(KLUOUT,YOUTFORMAT) HSV(JNREAL), XSREALMASSMOLVAL(JNREAL)
00139   END DO
00140 !
00141 !
00142 !-----------------------------------------------------------------------------
00143 !
00144 !*       3.  read molecular reactivity factor REA_FACT
00145 !
00146 ! open input file
00147    WRITE(KLUOUT,*) &
00148        "CH_INIT_CONST: reading  reactivity factor "  
00149   CALL CH_OPEN_INPUTB("REA_FACT", KCH, KLUOUT)
00150 !
00151 ! read number of molecular diffusivity IREACT
00152   READ(KCH, *) IREACT
00153   WRITE(KLUOUT,*) "number of reactivity factor : ", IREACT
00154 !
00155 ! read data input format
00156   READ(KCH,"(A)") YFORMAT
00157   WRITE(KLUOUT,*) "input format is: ", YFORMAT
00158 !
00159 ! allocate fields
00160   ALLOCATE(YREACTNAME(IREACT))
00161   ALLOCATE(ZREACTVAL(IREACT))
00162 ! read reactivity factor 
00163   DO JI = 1, IREACT
00164     READ(KCH,YFORMAT) YREACTNAME(JI), ZREACTVAL(JI)
00165     WRITE(KLUOUT,YFORMAT) YREACTNAME(JI), ZREACTVAL(JI)
00166   END DO
00167 !
00168 !
00169     WRITE(KLUOUT,'(A)') '----------------------------------------------------'
00170     WRITE(KLUOUT,'(A)') 'REA_FACT'
00171     WRITE(KLUOUT,'(A)') 'reactivity factor'
00172     WRITE(KLUOUT,'(I4)') SIZE(HSV,1)
00173     WRITE(KLUOUT,'(A)') YOUTFORMAT
00174   XSREALREACTVAL(:) = 0.0 ! default (high surface resistance)
00175   DO JNREAL = 1, SIZE(HSV,1)
00176     INACT = 0
00177     search_loop4 : DO JN = 1, IREACT
00178       IF (HSV(JNREAL) .EQ. YREACTNAME(JN)) THEN
00179         INACT = JN
00180         EXIT search_loop4
00181       END IF
00182     END DO search_loop4
00183     IF (INACT .NE. 0) XSREALREACTVAL(JNREAL) = ZREACTVAL(INACT)
00184       WRITE(KLUOUT,YOUTFORMAT) HSV(JNREAL), XSREALREACTVAL(JNREAL)
00185   END DO
00186 !
00187 !
00188 !-----------------------------------------------------------------------------
00189 !
00190 !*       4.  read molecular effective  Henry constant HENRY_SP
00191 !
00192 ! open input file
00193   WRITE(KLUOUT,*) &
00194        "CH_INIT_CONST: reading effective Henry constant", &
00195        " and its temperature correction "  
00196   CALL CH_OPEN_INPUTB("HENRY_SP", KCH, KLUOUT)
00197 !
00198 ! read number of molecular diffusivity IHENRY
00199   READ(KCH, *) IHENRY
00200   WRITE(KLUOUT,*) "number of reactivity factor : ", IHENRY
00201 !
00202 ! read data input format
00203   READ(KCH,"(A)") YFORMAT
00204   WRITE(KLUOUT,*) "input format is: ", YFORMAT
00205 !
00206 ! allocate fields
00207   ALLOCATE(YHENRYNAME(IHENRY))
00208   ALLOCATE(ZHENRYVAL(IHENRY,2))
00209 !
00210 ! read reactivity factor 
00211   DO JNREAL = 1, IHENRY
00212     READ(KCH,YFORMAT) YHENRYNAME(JNREAL), ZHENRYVAL(JNREAL,1),&
00213                              ZHENRYVAL(JNREAL,2)  
00214     WRITE(KLUOUT,YFORMAT) YHENRYNAME(JNREAL), ZHENRYVAL(JNREAL,1),&
00215                              ZHENRYVAL(JNREAL,2)  
00216   END DO
00217 !
00218 !
00219   WRITE(KLUOUT,'(A)') '----------------------------------------------------'
00220   WRITE(KLUOUT,'(A)') 'HENRY_SP'
00221   WRITE(KLUOUT,'(A)') 'Henrys law constants factor / exponent'
00222   WRITE(KLUOUT,'(I4)') SIZE(HSV,1)
00223   WRITE(KLUOUT,'(A)') YOUTFORMAT
00224   XSREALHENRYVAL(:,1) = 1E-8 ! no deposition; low Henry constant
00225   XSREALHENRYVAL(:,2) = 0. ! 
00226   DO JNREAL = 1, SIZE(HSV,1)
00227     INACT = 0
00228     search_loop5 : DO JN = 1, IHENRY
00229       IF (HSV(JNREAL) .EQ. YHENRYNAME(JN)) THEN
00230         INACT = JN
00231         EXIT search_loop5
00232       END IF
00233     END DO search_loop5
00234     IF (INACT .NE. 0) XSREALHENRYVAL(JNREAL,1) = ZHENRYVAL(INACT,1)
00235     IF (INACT .NE. 0) XSREALHENRYVAL(JNREAL,2) = ZHENRYVAL(INACT,2)
00236     WRITE(KLUOUT,YOUTFORMAT) HSV(JNREAL), &
00237                       XSREALHENRYVAL(JNREAL,1),&
00238                       XSREALHENRYVAL(JNREAL,2)  
00239   END DO
00240 IF (LHOOK) CALL DR_HOOK('CH_INIT_DEPCONST',1,ZHOOK_HANDLE)
00241 !
00242 END SUBROUTINE CH_INIT_DEPCONST