1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC 2 ! C 3 ! Module: physprop C 4 ! Purpose: Common block containing physical property data C 5 ! C 6 ! Author: M. Syamlal Date: dd-mmm-yy C 7 ! Reviewer: Date: dd-mmm-yy C 8 ! C 9 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C 10 MODULE physprop 11 12 ! Modules 13 !---------------------------------------------------------------------// 14 Use param, only: dim_m, dim_n, dim_n_g, dim_n_s 15 !---------------------------------------------------------------------// 16 17 18 ! Number of solids phases 19 INTEGER :: MMAX 20 21 ! Real number of solids phases for GHD theory 22 INTEGER :: SMAX 23 24 ! Particle diameters 25 DOUBLE PRECISION :: D_p0(DIM_M) 26 27 ! Constant or baseline solids phase densities. 28 DOUBLE PRECISION :: RO_s0(DIM_M) 29 30 ! Constant solids phase species mass fractions. These values delinate 31 ! the baseline/initial solids phase composition for ariable density 32 DOUBLE PRECISION :: X_S0(DIM_M, DIM_N_s) 33 34 ! Density of solid species (constant) 35 DOUBLE PRECISION :: RO_Xs0(DIM_M, DIM_N_s) 36 37 ! The index of an inert solids phase species. This is needed for 38 ! calculating the variable solids phase density. 39 INTEGER :: INERT_SPECIES(DIM_M) 40 41 ! Inert solids phase species mass fraction in dilute region. This is needed for 42 ! calculating the variable solids phase density. 43 DOUBLE PRECISION :: DIL_INERT_X_VSD(DIM_M) 44 45 ! Factor to define dilute region for special treatment of 46 ! the variable solids phase density. 47 DOUBLE PRECISION :: DIL_FACTOR_VSD 48 49 ! Particle shape factor 50 DOUBLE PRECISION :: SHAPE_FACTOR(DIM_M) 51 52 ! Specified constant solids viscosity 53 DOUBLE PRECISION MU_s0(DIM_M) 54 55 ! Flag indicates whether the phase becomes close-packed at ep_star 56 LOGICAL :: CLOSE_PACKED (DIM_M) 57 58 ! Specified constant gas density 59 DOUBLE PRECISION RO_g0 60 61 ! Specified constant gas viscosity 62 DOUBLE PRECISION MU_g0 63 64 ! Virtual (added) mass coefficient Cv 65 DOUBLE PRECISION Cv 66 67 ! Gas viscosity 68 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MU_g 69 70 ! Average molecular weight of gas 71 DOUBLE PRECISION MW_AVG 72 73 ! Constant constant-pressure specific heat of gas 74 DOUBLE PRECISION C_pg0 75 76 ! Reference temperature for enthalpy calculations (K) 77 DOUBLE PRECISION, PARAMETER :: T_ref = 298 78 79 ! Constant pressure specific heat of gas 80 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: C_pg 81 82 ! Constant constant-pressure specific heat of solids 83 DOUBLE PRECISION C_ps0(DIM_M) 84 85 ! Constant pressure specific heat of solids 86 DOUBLE PRECISION, DIMENSION(:, :), ALLOCATABLE :: C_ps 87 88 ! Specified constant gas conductivity 89 DOUBLE PRECISION :: K_g0 90 91 ! Conductivity of gas 92 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: K_g 93 94 ! Specified constant solids conductivity 95 DOUBLE PRECISION K_s0(DIM_M) 96 97 ! Conductivity of solids 98 DOUBLE PRECISION, DIMENSION(:, :), ALLOCATABLE :: K_s 99 100 ! Granular Temperature Conductivity (associated with temperature grad) 101 DOUBLE PRECISION, DIMENSION(:, :), ALLOCATABLE :: Kth_s 102 103 ! Granular Temperature Conductivity (associated with volume fraction grad) 104 DOUBLE PRECISION, DIMENSION(:, :), ALLOCATABLE :: Kphi_s 105 106 ! Specified constant gas diffusivity 107 DOUBLE PRECISION DIF_g0 108 109 ! Diffusivity of gas species N 110 DOUBLE PRECISION, DIMENSION(:, :), ALLOCATABLE :: DIF_g 111 112 ! Specified constant solids diffusivity 113 DOUBLE PRECISION DIF_s0(DIM_M) 114 115 ! Diffusivity of solids species N 116 DOUBLE PRECISION, DIMENSION(:, :, :), ALLOCATABLE :: DIF_s 117 118 ! Total number of gas or solids species 119 INTEGER :: NMAX(0:DIM_M) ! Runtime (all phases) 120 INTEGER :: NMAX_g ! Number of gas phase species 121 INTEGER :: NMAX_s(DIM_M) ! Number of solids phase species 122 123 ! Molecular weight of gas species 124 DOUBLE PRECISION :: MW_g (DIM_N_g) 125 126 ! Molecular weight of solids species 127 DOUBLE PRECISION :: MW_s (DIM_M, DIM_N_s) 128 129 ! Molecular weight of gas mixture 130 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: MW_MIX_g 131 132 ! Logical for reading thermochemical database. 133 LOGICAL :: DATABASE_READ = .TRUE. 134 135 ! Polynomical coefficients for calculating specific heat. 136 DOUBLE PRECISION Alow (7,0:DIM_M, DIM_N) ! Tlow --> Tcom 137 DOUBLE PRECISION Ahigh(7,0:DIM_M, DIM_N) ! Tcom --> Thigh 138 139 ! Range where the polynomials are valid. 140 DOUBLE PRECISION Thigh(0:DIM_M, DIM_N) ! Upper bound 141 DOUBLE PRECISION Tlow (0:DIM_M, DIM_N) ! Lower bound 142 DOUBLE PRECISION Tcom (0:DIM_M, DIM_N) ! Switch from low to high 143 144 ! Heat of formation at Tref divided by the gas constant. 145 DOUBLE PRECISION HfrefoR(0:DIM_M, DIM_N) 146 147 ! Reference values. 148 DOUBLE PRECISION ICpoR_l(0:DIM_M, DIM_N) 149 DOUBLE PRECISION ICpoR_h(0:DIM_M, DIM_N) 150 151 CONTAINS 152 153 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC 154 ! C 155 ! Module name: CALC_MW (X_g, DIM, L, NMAX, MW_g) C 156 ! Purpose: Calculate average molecular weight of gas C 157 ! C 158 ! Author: M. Syamlal Date: 19-OCT-92 C 159 ! Reviewer: P. Nicoletti Date: 11-DEC-92 C 160 ! C 161 ! Revision Number: C 162 ! Purpose: C 163 ! Author: Date: dd-mmm-yy C 164 ! Reviewer: Date: dd-mmm-yy C 165 ! C 166 ! Literature/Document References: C 167 ! C 168 ! Variables referenced:None C 169 ! Variables modified:None C 170 ! C 171 ! Local variables: SUM, N C 172 ! C 173 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C 174 ! 175 DOUBLE PRECISION FUNCTION CALC_MW (X_G, DIM, L, NMAX, MW_G) 176 !...Translated by Pacific-Sierra Research VAST-90 2.06G5 12:17:31 12/09/98 177 !...Switches: -xf 178 !----------------------------------------------- 179 ! M o d u l e s 180 !----------------------------------------------- 181 USE param 182 USE param1 183 USE toleranc 184 IMPLICIT NONE 185 !----------------------------------------------- 186 ! D u m m y A r g u m e n t s 187 !----------------------------------------------- 188 ! 189 ! Mass fraction array's Ist dimension 190 INTEGER DIM 191 ! 192 ! 193 ! Max of X_g array 2nd index and MW_g array index 194 INTEGER NMAX 195 ! 196 ! Mass fraction array 197 ! 198 DOUBLE PRECISION X_g(DIM, NMAX) 199 ! 200 ! Moleculare weight array 201 ! 202 DOUBLE PRECISION MW_g(NMAX) 203 ! 204 ! Mass fraction array Ist index 205 INTEGER L 206 ! 207 ! Local variable 208 ! 209 ! local sum 210 DOUBLE PRECISION SUM 211 ! 212 ! local index 213 INTEGER NN 214 !----------------------------------------------- 215 ! 216 SUM = ZERO 217 DO NN = 1, NMAX 218 SUM = SUM + X_G(L,NN)/MW_G(NN) 219 END DO 220 CALC_MW = ONE/MAX(SUM,OMW_MAX) 221 ! 222 RETURN 223 END FUNCTION CALC_MW 224 225 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvC 226 ! C 227 ! FUNCTION: blend_function C 228 ! Purpose: To calculate blending function C 229 ! C 230 ! Author: S. Pannala Date: 28-FEB-06 C 231 ! Reviewer: Date: C 232 ! Modified: Date: 24-OCT-06 C 233 ! C 234 ! C 235 ! Literature/Document References: C 236 ! Variables referenced: C 237 ! Variables modified: C 238 ! C 239 ! Local variables: C 240 ! C 241 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^C 242 243 DOUBLE PRECISION FUNCTION blend_function(IJK) 244 245 !----------------------------------------------- 246 ! Modules 247 !----------------------------------------------- 248 USE compar 249 USE constant 250 USE fldvar 251 USE fun_avg 252 USE functions 253 USE geometry 254 USE indices 255 USE param 256 USE param1 257 USE run 258 USE toleranc 259 USE visc_s 260 IMPLICIT NONE 261 !----------------------------------------------- 262 ! Dummy arguments 263 !----------------------------------------------- 264 ! IJK index 265 INTEGER, INTENT(IN) :: IJK 266 !----------------------------------------------- 267 ! Local variables 268 !----------------------------------------------- 269 ! Logical to see whether this is the first entry to this routine 270 LOGICAL,SAVE:: FIRST_PASS = .TRUE. 271 ! Blend Factor 272 Double Precision:: blend, blend_right 273 ! Scale Factor 274 Double Precision, Save:: scale 275 ! Midpoint 276 Double Precision, Save:: ep_mid_point 277 !----------------------------------------------- 278 279 ! Tan hyperbolic blending of stresses 280 IF(TANH_BLEND) THEN 281 IF(EP_g(IJK) .LT. ep_g_blend_end(ijk).AND. EP_g(IJK) .GT. ep_g_blend_start(ijk)) THEN 282 ep_mid_point = (ep_g_blend_end(IJK)+ep_g_blend_start(IJK))/2.0d0 283 blend = tanh(2.0d0*pi*(ep_g(IJK)-ep_mid_point)/ & 284 (ep_g_blend_end(IJK)-ep_g_blend_start(IJK))) 285 blend = (blend+1.0d0)/2.0d0 286 ELSEIF(EP_g(IJK) .GE. ep_g_blend_end(ijk)) THEN 287 blend = 1.0d0 288 ELSEIF(EP_g(IJK) .LE. ep_g_blend_start(ijk)) THEN 289 blend = 0.0d0 290 ENDIF 291 292 ! Truncated and Scaled Sigmoidal blending of stresses 293 ELSEIF(SIGM_BLEND) THEN 294 IF(FIRST_PASS) THEN 295 blend_right = 1.0d0/(1+0.01d0**((ep_g_blend_end(IJK)-ep_star_array(IJK))& 296 /(ep_g_blend_end(IJK)-ep_g_blend_start(IJK)))) 297 blend_right = (blend_right+1.0d0)/2.0d0 298 scale = 1.0d0/blend_right 299 write(*,*) 'Blending value at end and scaling factor', blend_right, scale 300 FIRST_PASS = .FALSE. 301 ENDIF 302 IF(EP_g(IJK) .LT. ep_g_blend_end(ijk)) THEN 303 blend = scale/(1+0.01d0**((ep_g(IJK)-ep_star_array(IJK))& 304 /(ep_g_blend_end(IJK)-ep_g_blend_start(IJK)))) 305 ELSEIF(EP_g(IJK) .GE. ep_g_blend_end(ijk)) THEN 306 blend = 1.0d0 307 ENDIF 308 309 ENDIF 310 311 blend_function = blend 312 313 RETURN 314 END FUNCTION blend_function 315 316 END MODULE physprop 317