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