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