MFIX  2016-1
des_reaction_model.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2 ! !
3 ! Module name: DES_REACTION_MODEL !
4 ! !
5 ! Purpose: !
6 ! !
7 ! !
8 ! Author: J.Musser Date: 16-Jun-10 !
9 ! !
10 ! Comments: !
11 ! !
12 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
13  SUBROUTINE des_reaction_model
14 
15  USE compar
16  USE constant
17  USE des_rxns
18  USE des_thermo
19  USE discretelement
20  USE geometry
21  USE indices
22  USE param, only: dimension_n_s
23  USE param1, only: zero
24  USE run, only: any_species_eq, species_eq
25  USE physprop, only: nmax
26  USE run, only: dt
27  USE run, only: solve_ros
28  USE functions
29 
30  IMPLICIT NONE
31 
32 ! Passed variables
33 !-----------------------------------------------
34 ! None
35 
36 ! Local variables
37 !-----------------------------------------------
38 ! Loop counter
39  INTEGER :: NN
40 ! total rate of consumption/production of species (g/sec)
41  DOUBLE PRECISION :: SUM_DES_Rs(1:max_pip)
42 
43  DOUBLE PRECISION :: PIx4o3
44  DOUBLE PRECISION :: o3 = 1.0d0/3.0d0
45 
46  DOUBLE PRECISION :: lDT, lOoDT
47 ! Logical for Adams-Bashfort integration.
48  LOGICAL,SAVE:: FIRST_PASS = .true.
49 
50 !---------------------------------------------------------------------//
51 
52  IF(.NOT.any_species_eq) RETURN
53 
54  pix4o3 = pi*4.0d0/3.0d0
55 
56  ldt = merge(dt, dtsolid, des_explicitly_coupled)
57  loodt = -1.0d0/ldt
58 
59 ! Bound the amount of mass loss.
60  FORALL(nn=1:dimension_n_s)
61  WHERE(particle_state(:max_pip) == normal_particle) &
62  des_r_s(:max_pip,nn) = max(des_r_s(:max_pip,nn), &
63  des_x_s(:max_pip,nn)*pmass(:max_pip)*loodt)
64  END FORALL
65 
66 ! First-order method: Euler
67  IF(intg_euler) THEN
68  WHERE(particle_state(:max_pip) == normal_particle) &
69  sum_des_rs(:max_pip) = sum(des_r_s(:max_pip,:),dim=2)
70 
71  WHERE(particle_state(:max_pip) == normal_particle) &
72  pmass(:max_pip) = pmass(:max_pip) + ldt*sum_des_rs(:max_pip)
73 
74  FORALL(nn=1:dimension_n_s)
75  WHERE(particle_state(:max_pip) == normal_particle) &
76  des_x_s(:max_pip,nn) = max(des_x_s(:max_pip,nn) + ldt* &
77  (des_r_s(:max_pip,nn) - des_x_s(:max_pip,nn)* &
78  sum_des_rs(:max_pip))/pmass(:max_pip), zero)
79  END FORALL
80 
81  ELSE
82  IF(first_pass) THEN
83  ENDIF
84  ENDIF
85 
86  DO nn=1,max_pip
87  IF(is_normal(nn)) THEN
88  IF(solve_ros(pijk(nn,5))) THEN
89  ro_sol(nn)= pmass(nn)/pvol(nn)
90  ELSE
91  des_radius(nn) = (pmass(nn)/(pix4o3*ro_sol(nn)))**o3
92  pvol(nn) = pmass(nn)/ro_sol(nn)
93  ENDIF
94  ENDIF
95  ENDDO
96 
97 ! Clear the necessary variables.
98  des_r_s = zero
99 
100 ! Flag that the first pass is over
101  first_pass = .false.
102 
103  RETURN
104  END SUBROUTINE des_reaction_model
double precision, dimension(:,:), allocatable des_r_s
Definition: des_rxns_mod.f:24
logical, dimension(0:dim_m) species_eq
Definition: run_mod.f:115
logical, dimension(dim_m) solve_ros
Definition: run_mod.f:250
double precision dt
Definition: run_mod.f:51
double precision, dimension(:,:), allocatable des_x_s
Definition: des_rxns_mod.f:21
logical any_species_eq
Definition: run_mod.f:118
Definition: run_mod.f:13
Definition: param_mod.f:2
integer, dimension(0:dim_m) nmax
Definition: physprop_mod.f:119
subroutine des_reaction_model
integer dimension_n_s
Definition: param_mod.f:21
double precision, parameter pi
Definition: constant_mod.f:158
double precision, parameter zero
Definition: param1_mod.f:27