MFIX  2016-1
get_is.f
Go to the documentation of this file.
1 !vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv!
2 ! !
3 ! SUBROUTINE: GET_IS !
4 ! Author: M. Syamlal Date: 21-OCT-92 !
5 ! !
6 ! Purpose: Find and validate i, j, k locations for IS's !
7 ! !
8 !^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^!
9  SUBROUTINE get_is(ISV)
10 
11  USE param
12  USE param1
13  USE geometry
14  USE is
15  USE indices
16  USE funits
17  USE compar
18 
19 ! Use the error manager for posting error messages.
20 !---------------------------------------------------------------------//
21  use error_manager
22 
23  IMPLICIT NONE
24 
25 ! Dummy Arguments:
26 !---------------------------------------------------------------------//
27 ! Loop/variable indices
28  INTEGER, INTENT(in) :: ISV
29 
30 ! Local Variables:
31 !---------------------------------------------------------------------//
32 ! Error flag.
33  INTEGER :: IER
34 ! Calculated indices of the wall boundary
35  INTEGER :: I_w , I_e , J_s , J_n , K_b , K_t
36 ! Surface indictors
37  LOGICAL :: X_CONSTANT, Y_CONSTANT, Z_CONSTANT
38 !......................................................................!
39 
40  CALL init_err_msg('GET_IS')
41 
42  x_constant = .true.
43  y_constant = .true.
44  z_constant = .true.
45 
46  IF(is_x_w(isv)/=undefined .AND. is_x_e(isv)/=undefined) THEN
47  CALL calc_cell(xmin, is_x_w(isv), dx, imax, i_w)
48  CALL calc_cell(xmin, is_x_e(isv), dx, imax, i_e)
49  IF (is_x_w(isv) /= is_x_e(isv)) THEN
50  x_constant = .false.
51  i_w = i_w + 1
52  IF(is_i_w(isv)/=undefined_i .OR. &
53  is_i_e(isv)/=undefined_i) THEN
54  CALL location_check(is_i_w(isv), i_w, isv, 'IS - west')
55  CALL location_check(is_i_e(isv), i_e, isv, 'IS - east')
56  ENDIF
57  ENDIF
58  is_i_w(isv) = i_w
59  is_i_e(isv) = i_e
60  ELSE
61  IF(is_i_w(isv) /= undefined_i) &
62  CALL calc_loc(xmin, dx, is_i_w(isv), is_x_w(isv))
63  IF(is_i_e(isv) /= undefined_i) &
64  CALL calc_loc(xmin, dx, is_i_e(isv), is_x_e(isv))
65  IF (is_x_w(isv) /= is_x_e(isv)) x_constant = .false.
66  ENDIF
67 
68 ! If there is no variation in the I direction set indices to 1
69  IF (no_i) THEN
70  is_i_w(isv) = 1
71  is_i_e(isv) = 1
72  ENDIF
73 !
74  IF (is_y_s(isv)/=undefined .AND. is_y_n(isv)/=undefined) THEN
75  CALL calc_cell(zero, is_y_s(isv), dy, jmax, j_s)
76  CALL calc_cell(zero, is_y_n(isv), dy, jmax, j_n)
77  IF (is_y_s(isv) /= is_y_n(isv)) THEN
78  y_constant = .false.
79  j_s = j_s + 1
80  IF(is_j_s(isv)/=undefined_i .OR. &
81  is_j_n(isv)/=undefined_i) THEN
82  CALL location_check(is_j_s(isv), j_s, isv, 'IS - south')
83  CALL location_check(is_j_n(isv), j_n, isv, 'IS - north')
84  ENDIF
85  ENDIF
86  is_j_s(isv) = j_s
87  is_j_n(isv) = j_n
88  ELSE
89  IF(is_j_s(isv) /= undefined_i) &
90  CALL calc_loc(zero, dy, is_j_s(isv), is_y_s(isv))
91  IF(is_j_n(isv) /= undefined_i) &
92  CALL calc_loc(zero, dy, is_j_n(isv), is_y_n(isv))
93  IF (is_y_s(isv) /= is_y_n(isv)) y_constant = .false.
94  ENDIF
95 
96 ! If there is no variation in the J direction set indices to 1
97  IF (no_j) THEN
98  is_j_s(isv) = 1
99  is_j_n(isv) = 1
100  ENDIF
101 
102  IF (is_z_b(isv)/=undefined .AND. is_z_t(isv)/=undefined) THEN
103  CALL calc_cell(zero, is_z_b(isv), dz, kmax, k_b)
104  CALL calc_cell(zero, is_z_t(isv), dz, kmax, k_t)
105  IF (is_z_b(isv) /= is_z_t(isv)) THEN
106  z_constant = .false.
107  k_b = k_b + 1
108  IF (is_k_b(isv)/=undefined_i .OR. &
109  is_k_t(isv)/=undefined_i) THEN
110  CALL location_check(is_k_b(isv), k_b, isv, 'IS - bottom')
111  CALL location_check(is_k_t(isv), k_t, isv, 'IS - top')
112  ENDIF
113  ENDIF
114  is_k_b(isv) = k_b
115  is_k_t(isv) = k_t
116  ELSE
117  IF(is_k_b(isv) /= undefined_i) &
118  CALL calc_loc(zero, dz, is_k_b(isv), is_z_b(isv))
119  IF(is_k_t(isv) /= undefined_i) &
120  CALL calc_loc(zero, dz, is_k_t(isv), is_z_t(isv))
121  IF (is_z_b(isv) /= is_z_t(isv)) z_constant = .false.
122  ENDIF
123 
124 ! If there is no variation in the K direction set indices to 1
125  IF (no_k) THEN
126  is_k_b(isv) = 1
127  is_k_t(isv) = 1
128  ENDIF
129 
130 ! Check whether the boundary is a plane parallel to one of the three
131 ! coordinate planes, else check whether a direction is specified by IS_TYPE
132  IF(x_constant .OR. y_constant .OR. z_constant) THEN
133  IF(is_x_w(isv)/=undefined .AND. is_y_s(isv)/=undefined .AND. &
134  is_z_b(isv)/=undefined) CALL check_plane(x_constant, &
135  y_constant, z_constant,isv, 'IS')
136  ELSE
137  SELECT CASE(is_type(isv)(1:1))
138  CASE('X','Y','Z') ! Do Nothing
139  CASE DEFAULT
140  WRITE(err_msg, 1100) trim(ivar('IS_TYPE',isv)), &
141  trim(is_type(isv))
142  CALL flush_err_msg(abort=.true.)
143  END SELECT
144  ENDIF
145 
146  1100 FORMAT('Error 1100: ',a,' = ',a,' is specified as a volume',/ &
147  'and therefore should have should have a directional prefix;',&
148  /'Valid prefix values: X_, Y_, Z_',/'Please correct the ',/ &
149  'mfix.dat file.')
150 
151 ! CHECK FOR VALID VALUES
152  ier = 0
153  IF(is_i_w(isv)<1 .OR. is_i_w(isv)>imax2) ier = 1
154  IF(is_i_e(isv)<1 .OR. is_i_e(isv)>imax2) ier = 1
155  IF(is_j_s(isv)<1 .OR. is_j_s(isv)>jmax2) ier = 1
156  IF(is_j_n(isv)<1 .OR. is_j_n(isv)>jmax2) ier = 1
157  IF(is_k_b(isv)<1 .OR. is_k_b(isv)>kmax2) ier = 1
158  IF(is_k_t(isv)<1 .OR. is_k_t(isv)>kmax2) ier = 1
159  IF(is_k_b(isv) > is_k_t(isv)) ier = 1
160  IF(is_j_s(isv) > is_j_n(isv)) ier = 1
161  IF(is_i_w(isv) > is_i_e(isv)) ier = 1
162 
163  IF(ier /= 0)THEN
164  WRITE(err_msg,1101) isv, &
165  'X', is_x_w(isv), is_x_e(isv),'I',is_i_w(isv),is_i_e(isv), &
166  'Y', is_y_s(isv), is_y_n(isv),'J',is_j_s(isv),is_j_n(isv), &
167  'Z', is_z_b(isv), is_z_t(isv),'K',is_k_b(isv),is_k_t(isv)
168  CALL flush_err_msg(abort=.true.)
169  ENDIF
170 
171  1101 FORMAT('Error 1101: Invalid location specified for IS ',i3,'.', &
172  3(/3x,a1,': ',g12.5,',',g12.5,8x,a1,': ',i8,',',i8),/ &
173  'Please correct the mfix.dat file.')
174 
175  CALL finl_err_msg
176 
177  RETURN
178  END SUBROUTINE get_is
subroutine calc_cell(RMIN, REACTOR_LOC, D_DIR, N_DIR, CELL_LOC)
Definition: calc_cell.f:14
integer imax2
Definition: geometry_mod.f:61
character(len=16), dimension(dimension_is) is_type
Definition: is_mod.f:70
character(len=32) function ivar(VAR, i1, i2, i3)
subroutine finl_err_msg
logical no_i
Definition: geometry_mod.f:20
double precision, dimension(dimension_is) is_x_e
Definition: is_mod.f:25
subroutine check_plane(X_CONSTANT, Y_CONSTANT, Z_CONSTANT, BC, NAM
Definition: check_plane.f:21
integer, dimension(dimension_is) is_i_w
Definition: is_mod.f:45
double precision, dimension(0:dim_j) dy
Definition: geometry_mod.f:70
double precision, parameter undefined
Definition: param1_mod.f:18
double precision, dimension(0:dim_k) dz
Definition: geometry_mod.f:72
Definition: is_mod.f:11
integer imax
Definition: geometry_mod.f:47
subroutine init_err_msg(CALLER)
double precision, dimension(dimension_is) is_x_w
Definition: is_mod.f:21
integer jmax2
Definition: geometry_mod.f:63
integer, dimension(dimension_is) is_k_b
Definition: is_mod.f:61
subroutine get_is(ISV)
Definition: get_is.f:10
double precision, dimension(dimension_is) is_z_b
Definition: is_mod.f:37
double precision, dimension(0:dim_i) dx
Definition: geometry_mod.f:68
integer kmax2
Definition: geometry_mod.f:65
Definition: param_mod.f:2
integer kmax
Definition: geometry_mod.f:51
subroutine location_check(CELL_SPECIFIED, CELL_CALCULATED, COUNTER, MESSAGE)
logical no_k
Definition: geometry_mod.f:28
integer, dimension(dimension_is) is_j_s
Definition: is_mod.f:53
logical no_j
Definition: geometry_mod.f:24
double precision, dimension(dimension_is) is_z_t
Definition: is_mod.f:41
integer, parameter undefined_i
Definition: param1_mod.f:19
character(len=line_length), dimension(line_count) err_msg
double precision xmin
Definition: geometry_mod.f:75
integer jmax
Definition: geometry_mod.f:49
double precision, dimension(dimension_is) is_y_s
Definition: is_mod.f:29
double precision, dimension(dimension_is) is_y_n
Definition: is_mod.f:33
integer, dimension(dimension_is) is_j_n
Definition: is_mod.f:57
integer, dimension(dimension_is) is_i_e
Definition: is_mod.f:49
double precision, dimension(:), allocatable x
Definition: geometry_mod.f:129
double precision, parameter zero
Definition: param1_mod.f:27
subroutine calc_loc(RMIN, D_DIR, CELL_LOC, REACTOR_LOC)
Definition: calc_cell.f:76
subroutine flush_err_msg(DEBUG, HEADER, FOOTER, ABORT, LOG, CALL_TREE)
integer, dimension(dimension_is) is_k_t
Definition: is_mod.f:65