SURFEX v7.3
General documentation of Surfex
|
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