File: N:\mfix\model\des\des_reaction_model.f

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
105