File: RELATIVE:/../../../mfix.git/model/des/set_phase_index.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     !  Subroutine: SET_PHASE_INDEX                                         !
4     !                                                                      !
5     !  Purpose: Set the index of all particles based on their diameter and !
6     !  density.                                                            !
7     !                                                                      !
8     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
9           SUBROUTINE SET_PHASE_INDEX
10     
11           use param1, only: small_number
12     
13           USE physprop, only: SMAX
14     
15           use discretelement, only: PIJK
16           USE discretelement, only: DES_RADIUS, RO_SOL
17           USE discretelement, only: DES_MMAX, DES_D_P0, DES_RO_s
18           USE discretelement, only: MAX_PIP
19           USE functions, only: IS_NONEXISTENT, IS_GHOST, IS_ENTERING_GHOST, IS_EXITING_GHOST
20           use mpi_funs_des, only: des_par_exchange
21     
22           USE run, only: RUN_TYPE
23           USE run, only: ANY_SPECIES_EQ
24     
25           use mpi_utility
26           use sendrecv
27     
28           USE error_manager
29     
30           IMPLICIT NONE
31     !-----------------------------------------------
32     ! Local Variables
33     !-----------------------------------------------
34     ! particle no.
35           INTEGER :: L
36     ! solids phase no.
37           INTEGER :: M
38     ! IER for error reporting
39           INTEGER :: IER
40     ! Difference between a particles diameter (density) and the diameter
41     ! (density) of a phase specified in the data file.
42           DOUBLE PRECISION dDp, dRho
43     
44     ! The restart file contains the phase index for reacting cases as the
45     ! diameter and/or density of the particle may have changed.
46           IF(RUN_TYPE /= 'NEW' .AND. ANY_SPECIES_EQ) RETURN
47     
48     ! Initialize the error flag.
49           IER = 0
50     
51     ! solids phase index of particle.
52     ! ---------------------------------------------------------------->>>
53           DO L = 1, MAX_PIP
54              IF(IS_NONEXISTENT(L)) CYCLE
55              IF(IS_GHOST(L) .OR. IS_ENTERING_GHOST(L) .OR. IS_EXITING_GHOST(L)) CYCLE
56     
57     ! Determining the solids phase of each particle by matching the diameter
58     ! and density to those specified in the data file.
59              M_LP: DO M = 1, DES_MMAX
60                 dDp  = ABS(2.0d0*DES_RADIUS(L)-DES_D_P0(M))
61                 dRho = ABS( RO_Sol(L)-DES_RO_S(M))
62                 IF( dDp < SMALL_NUMBER .AND. dRho < SMALL_NUMBER) THEN
63                    PIJK(L,5) = M
64                    EXIT M_LP
65                 ENDIF
66              ENDDO M_LP
67     ! Flag error if no match is found.
68              IF(PIJK(L,5).EQ.0) IER = 1
69           ENDDO
70     
71     ! Sync up the error flag across all processes.
72           CALL GLOBAL_ALL_SUM(IER)
73           IF(IER == 0) RETURN
74     
75     ! Point of no return: Report errors and abort
76     !----------------------------------------------------------------------
77           CALL INIT_ERR_MSG("SET_PHASE_INDEX")
78     
79           CALL OPEN_PE_LOG(IER)
80     
81           WRITE(ERR_MSG, 1100)
82           CALL FLUSH_ERR_MSG(FOOTER=.FALSE.)
83     
84      1100 FORMAT('Error 1100: Unable to determine the phase of one or ',&
85              'more particles.',/8x,'ID',4X,'Diameter',6x,'Density',/)
86     
87           DO L = 1, MAX_PIP
88     ! skipping particles that do not exist
89              IF(IS_NONEXISTENT(L)) CYCLE
90              IF(IS_GHOST(L) .OR. IS_ENTERING_GHOST(L) .OR. IS_EXITING_GHOST(L)) CYCLE
91     
92     ! Flag as an error if no match is found.
93              IF(PIJK(L,5).EQ.0) THEN
94                 WRITE(ERR_MSG,9000) L,  2.0*DES_RADIUS(L), Ro_Sol(L)
95                 CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE.)
96              ENDIF
97           ENDDO
98     
99           WRITE(ERR_MSG, 1101)
100           CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE.)
101     
102      1101 FORMAT(' ',/'Defined phase parameters from mfix.dat:',/3x,'ID',&
103              5X,'Diameter',5x,'Density')
104     
105           DO M = 1, DES_MMAX
106              WRITE(ERR_MSG, 9000) SMAX+M, DES_D_P0(M), DES_RO_S(M)
107              CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE.)
108           ENDDO
109     
110           WRITE(ERR_MSG, 1102)
111           CALL FLUSH_ERR_MSG(HEADER=.FALSE., ABORT=.TRUE.)
112     
113      1102 FORMAT('Please correct the mfix.dat or particle_input.dat files.')
114     
115      9000 FORMAT(I10,2(2x,g12.5))
116     
117           END SUBROUTINE SET_PHASE_INDEX
118