File: N:\mfix\model\physprop_mod.f

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