File: N:\mfix\model\check_data\check_axis.f
1
2
3
4
5
6
7
8
9 SUBROUTINE CHECK_AXIS(NA, DIMEN, ALENGTH, DA, AXIS, &
10 AXIS_INDEX, NO_IJK, SHIFT)
11
12
13
14
15 USE param
16 USE param1
17
18
19 use error_manager
20
21
22 IMPLICIT NONE
23
24
25
26
27 INTEGER, INTENT(INOUT) :: NA
28
29 INTEGER, INTENT(IN) :: DIMEN
30
31 DOUBLE PRECISION, INTENT(INOUT) :: ALENGTH
32
33
34 LOGICAL, INTENT(IN) :: NO_IJK
35
36 LOGICAL, INTENT(IN) :: SHIFT
37
38 CHARACTER, INTENT(IN) :: AXIS
39
40 CHARACTER, INTENT(IN) :: AXIS_INDEX
41
42
43
44
45
46
47
48 DOUBLE PRECISION, INTENT(INOUT), DIMENSION(DIMEN) :: DA
49
50
51
52
53 DOUBLE PRECISION, PARAMETER :: PERCENT_ERROR = 1.0
54
55
56
57
58 INTEGER :: N_SPECIFIED
59
60 INTEGER :: LC
61
62 DOUBLE PRECISION :: TEMP_STOR, lSUM, lERR
63
64
65
66 CALL INIT_ERR_MSG("CHECK_AXIS")
67
68
69 IF(.NOT.NO_IJK)THEN
70 IF( DA(2) /= UNDEFINED .AND. DA(1) == UNDEFINED) THEN
71 WRITE(ERR_MSG, 1001) AXIS
72 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
73 ENDIF
74 ENDIF
75
76 1100 FORMAT('Error 1100: The grid specification must start with D', &
77 A1,'(0)',/'Please correct the mfix.dat file.')
78
79
80 = 0
81 IF (NA /= UNDEFINED_I) N_SPECIFIED = N_SPECIFIED + 1
82 IF (ALENGTH /= UNDEFINED) N_SPECIFIED = N_SPECIFIED + 1
83 IF (DA(1) /= UNDEFINED) N_SPECIFIED = N_SPECIFIED + 1
84 IF (N_SPECIFIED < 2) THEN
85 WRITE(ERR_MSG, 1101) AXIS, AXIS, AXIS, AXIS_INDEX
86 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
87 ENDIF
88
89 1101 FORMAT('Error 1101: Insufficient grid information for ',A1,'-', &
90 'axis. You must',/'specify at least two of the following: ', &
91 A1,'LENGTH, D',A1,', and ',A1,'MAX','Please correct the ', &
92 'mfix.dat file.')
93
94
95
96
97 IF(NA == UNDEFINED_I) THEN
98 IF(no_ijk) THEN
99 na = 1
100 ELSE
101 IF(DA(2) == UNDEFINED) THEN
102 TEMP_STOR = ALENGTH/DA(1)
103 NA = NINT(TEMP_STOR)
104 IF(NA - 1 > 0) DA(2:NA) = DA(1)
105 ELSE
106 NA = DIMEN
107 DO LC = 2, DIMEN
108 IF (DA(LC) == UNDEFINED) THEN
109 NA = LC - 1
110 EXIT
111 ENDIF
112 ENDDO
113 ENDIF
114 ENDIF
115 GO TO 700
116 ENDIF
117
118
119 IF(NA>=0 .AND. NA<=DIMEN) THEN
120
121
122
123 IF (ALENGTH == UNDEFINED) THEN
124 IF(no_ijk) THEN
125 ALENGTH = DA(1)
126 ELSE
127 IF(DA(2) == UNDEFINED) THEN
128 IF(NA - 1 > 0) DA(2:NA) = DA(1)
129 ENDIF
130 ALENGTH = 0.0
131 IF (NA > 0) ALENGTH = SUM(DA(:NA))
132 ENDIF
133 ENDIF
134
135
136
137 IF(DA(1) == UNDEFINED) THEN
138 TEMP_STOR = ALENGTH/DBLE(NA)
139 IF(NA > 0) DA(:NA) = TEMP_STOR
140 ENDIF
141
142
143 IF(.NOT.NO_IJK) THEN
144 IF(DA(2) == UNDEFINED) THEN
145 IF (NA - 1 > 0) DA(2:NA) = DA(1)
146 ENDIF
147 ENDIF
148
149 ENDIF
150
151
152 CONTINUE
153
154
155
156 IF (NA<0 .OR. .NOT.NO_IJK .AND. NA>DIMEN-2) THEN
157 WRITE(ERR_MSG, 1001) AXIS_INDEX//'MAX', trim(iVal(NA))
158 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
159 ENDIF
160
161 IF(ALENGTH <= 0.0) THEN
162 WRITE(ERR_MSG, 1001) AXIS//'LENGTH'
163 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
164 ENDIF
165
166 lSUM = 0.0
167 DO LC = 1, NA
168 IF (DA(LC)<=0.0 .OR. DA(LC)==UNDEFINED) THEN
169 WRITE(ERR_MSG, 1201) trim(iVar(AXIS,LC))
170 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
171 ENDIF
172 lSUM = lSUM + DA(LC)
173 ENDDO
174
175 1201 FORMAT('Error 1201: D',A,' is not specified or negative. ', &
176 'Please correct',/'the mfix.dat file.')
177
178
179 lERR = 100.0*ABS(lSUM - ALENGTH)/ALENGTH
180 IF(lERR > PERCENT_ERROR) THEN
181 WRITE(ERR_MSG,1202) AXIS, AXIS, AXIS, ALENGTH, AXIS, lSUM, &
182 lERR, PERCENT_ERROR
183 CALL FLUSH_ERR_MSG(FOOTER=.FALSE.)
184
185 DO LC = 1, NA
186 WRITE(ERR_MSG,"(4x,A,' = ',A)") trim(iVar('D'//AXIS,LC)), &
187 trim(iVal(DA(LC)))
188 CALL FLUSH_ERR_MSG(HEADER=.FALSE., FOOTER=.FALSE.)
189 ENDDO
190 WRITE(ERR_MSG,"('Please correct the mfix.dat file')")
191 CALL FLUSH_ERR_MSG(HEADER=.FALSE., ABORT=.TRUE.)
192 ENDIF
193
194 1202 FORMAT('Error 1202: ',A1,'LENGTH and sum(D',A1,') are not ', &
195 'consistent.',/3x,A1,'LENGTH = ',g12.5,3x,'sum(D',A1,') = ', &
196 g12.5,/3x,'ERROR = ',g12.5,3x,'ERR TOL = ',g12.5,/' ')
197
198 DO LC = NA + 1, DIMEN
199 IF(SHIFT .AND. DA(LC)/=UNDEFINED) THEN
200 WRITE(ERR_MSG, 1205) AXIS, AXIS_INDEX
201 CALL FLUSH_ERR_MSG(ABORT=.TRUE.)
202 ENDIF
203 ENDDO
204
205 1205 FORMAT('Error 1205: Too many D',A1,' values specified. Only ',A1,&
206 'MAX permitted.',/'Please correct the mfix.dat file.')
207
208
209 CALL FINL_ERR_MSG
210
211 RETURN
212
213
214 1001 FORMAT('Error 1001: Illegal or unknown input: ',A,' = ',A,/ &
215 'Please correct the mfix.dat file.')
216
217 END SUBROUTINE CHECK_AXIS
218