File: RELATIVE:/../../../mfix.git/model/check_data/check_geometry.f

1     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2     !                                                                      !
3     !  SUBROUTINE: CHECK_GEOMETRY                                          !
4     !  Purpose: Check the distributed parallel namelist variables.         !
5     !                                                                      !
6     !  Author: P. Nicoletti                               Date: 14-DEC-99  !
7     !  Reviewer: J.Musser                                 Date: 16-Jan-14  !
8     !                                                                      !
9     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
10           SUBROUTINE CHECK_GEOMETRY(SHIFT)
11     
12     
13     ! Global Variables:
14     !---------------------------------------------------------------------//
15     ! Domain partitions in various directions.
16           use geometry, only: DX, XLENGTH
17           use geometry, only: DY, YLENGTH
18           use geometry, only: DZ, ZLENGTH
19     
20           use geometry, only: NO_I, IMIN1, IMAX, IMAX1, IMAX3
21           use geometry, only: NO_J, JMIN1, JMAX, JMAX1, JMAX3
22           use geometry, only: NO_K, KMIN1, KMAX, KMAX1, KMAX3
23     
24     ! Runtime flag specifying 2D simulations
25     !      use geometry, only: NO_K
26     
27           use geometry, only: CYLINDRICAL
28           use geometry, only: CYCLIC_X, CYCLIC_X_PD
29           use geometry, only: CYCLIC_Y, CYCLIC_Y_PD
30           use geometry, only: CYCLIC_Z, CYCLIC_Z_PD
31     !      use geometry, only: COORDINATES
32     
33     ! Use the error manager for posting error messages.
34     !---------------------------------------------------------------------//
35           use error_manager
36     
37           implicit none
38     
39     
40           LOGICAL, intent(IN) :: SHIFT
41           LOGICAL, external :: COMPARE
42     
43     ! Local Variables:
44     !---------------------------------------------------------------------//
45     
46     
47     ! Initialize the error manager.
48           CALL INIT_ERR_MSG("CHECK_GEOMETRY")
49     
50           CALL GET_DXYZ_FROM_CONTROL_POINTS
51     
52           CALL CHECK_AXIS(IMAX, IMAX3, XLENGTH, DX, 'X', 'I', NO_I, SHIFT)
53           CALL CHECK_AXIS(JMAX, JMAX3, YLENGTH, DY, 'Y', 'J', NO_J, SHIFT)
54           CALL CHECK_AXIS(KMAX, KMAX3, ZLENGTH, DZ, 'Z', 'K', NO_K, SHIFT)
55     
56           IF(SHIFT) CALL SHIFT_DXYZ
57     
58     !  Ensure that the cell sizes across cyclic boundaries are comparable
59           IF(CYCLIC_X .OR. CYCLIC_X_PD) THEN
60              IF(DX(IMIN1) /= DX(IMAX1)) THEN
61                 WRITE(ERR_MSG,1100) 'DX(IMIN1)',DX(IMIN1),'DX(IMAX1)',DX(IMAX1)
62                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
63              ENDIF
64           ENDIF
65     
66           IF(CYCLIC_Y .OR. CYCLIC_Y_PD) THEN
67              IF(DY(JMIN1) /= DY(JMAX1)) THEN
68                 WRITE(ERR_MSG,1100) 'DY(JMIN1)',DY(JMIN1),'DY(JMAX1)',DY(JMAX1)
69                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
70              ENDIF
71           ENDIF
72     
73           IF(CYCLIC_Z .OR. CYCLIC_Z_PD .OR. CYLINDRICAL) THEN
74              IF (DZ(KMIN1) /= DZ(KMAX1)) THEN
75                 WRITE(ERR_MSG,1100) 'DZ(KMIN1)',DZ(KMIN1),'DZ(KMAX1)',DZ(KMAX1)
76                 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
77              ENDIF
78           ENDIF
79     
80      1100 FORMAT('Error 1100: Cells adjacent to cyclic boundaries must ',  &
81              'be of same size:',/2X,A,' = ',G12.5,/2x,A,' = ',G12.5,/      &
82              'Please correct the mfix.dat file.')
83     
84     
85           CALL FINL_ERR_MSG
86     
87           RETURN
88     
89           END SUBROUTINE CHECK_GEOMETRY
90     
91     
92     !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
93     !                                                                      !
94     !  SUBROUTINE: CHECK_GEOMETRY_DES                                      !
95     !  Author: Pradeep Gopalakrishnan                     Date:    Nov-11  !
96     !                                                                      !
97     !  Purpose: Checks the des grid input parameters.                      !
98     !                                                                      !
99     !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
100           SUBROUTINE CHECK_GEOMETRY_DES
101     
102     ! Global Variables:
103     !---------------------------------------------------------------------//
104     ! Domain partition for DEM background mesh.
105           use discretelement, only: DESGRIDSEARCH_IMAX
106           use discretelement, only: DESGRIDSEARCH_JMAX
107           use discretelement, only: DESGRIDSEARCH_KMAX
108     ! Domain size specified by the user.
109           use geometry, only: XLENGTH, YLENGTH, ZLENGTH, NO_K
110     ! Maximum particle size.
111           use discretelement, only: MAX_RADIUS
112     
113     
114     ! Global Parameters:
115     !---------------------------------------------------------------------//
116           use param1, only: UNDEFINED_I
117     
118     ! Use the error manager for posting error messages.
119     !---------------------------------------------------------------------//
120           use error_manager
121     
122     
123           implicit none
124     
125     
126     ! Local Variables:
127     !---------------------------------------------------------------------//
128     ! Maximum particle diameter.
129           DOUBLE PRECISION :: MAX_DIAM
130     ! Calculated cell dimension based on particle size
131           DOUBLE PRECISION :: WIDTH
132     !......................................................................!
133     
134     ! Initialize the error manager.
135           CALL INIT_ERR_MSG("CHECK_GEOMETRY_DES")
136     
137     ! Calculate the max particle diameter and cell width.
138           MAX_DIAM = 2.0d0*MAX_RADIUS
139           WIDTH = 3.0d0*(max_diam)
140     
141     ! Calculate and/or verify the grid in the X-axial direction.
142           IF(DESGRIDSEARCH_IMAX == UNDEFINED_I) THEN
143              DESGRIDSEARCH_IMAX = max(int(XLENGTH/WIDTH), 1)
144           ELSEIF((XLENGTH/dble(DESGRIDSEARCH_IMAX)) < MAX_DIAM) THEN
145              WRITE(ERR_MSG, 1100) 'X', MAX_DIAM,                           &
146                 XLENGTH/dble(DESGRIDSEARCH_IMAX)
147              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
148           ENDIF
149     
150     ! Calculate and/or verify the grid in the Y-axial direction.
151           IF(DESGRIDSEARCH_JMAX == UNDEFINED_I) THEN
152              DESGRIDSEARCH_JMAX = max(int(YLENGTH/WIDTH), 1)
153           ELSEIF((YLENGTH/dble(DESGRIDSEARCH_JMAX)) < MAX_DIAM) THEN
154              WRITE(ERR_MSG, 1100) 'Y', MAX_DIAM,                           &
155                 YLENGTH/dble(DESGRIDSEARCH_JMAX)
156              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
157           ENDIF
158     
159     ! Calculate and/or verify the grid in the Z-axial direction.
160           IF(NO_K) THEN
161              DESGRIDSEARCH_KMAX = 1
162           ELSEIF(DESGRIDSEARCH_KMAX == UNDEFINED_I) THEN
163              DESGRIDSEARCH_KMAX = max(int(ZLENGTH/WIDTH), 1)
164           ELSEIF((ZLENGTH/dble(DESGRIDSEARCH_KMAX)) < MAX_DIAM) THEN
165              WRITE(ERR_MSG, 1100) 'Z', MAX_DIAM,                           &
166                 ZLENGTH/dble(DESGRIDSEARCH_KMAX)
167              CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
168           ENDIF
169     
170           CALL FINL_ERR_MSG
171     
172      1100 FORMAT('Error 1100: The des search grid is too fine in the ',A1, &
173              '-direction. The',/'maximum particle diameter is larger than',&
174              ' the cell width:',/2x,'MAX DIAM:   ',g12.5,/2x,'CELL ',      &
175              'WIDTH: ',g12.5,/'Decrease the values for DESGRIDSEARCH in ', &
176              'the mfix.dat file.')
177     
178           RETURN
179           END SUBROUTINE CHECK_GEOMETRY_DES
180