36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
57
58
59
60#include "implicit_f.inc"
61
62
63
64#include "com04_c.inc"
65#include "param_c.inc"
66
67
68
69 INTEGER ND_ARRAY(*),IB,ND_SIZE
71 . x(3,*),skew(lskew,*)
72
73 TYPE (BOX_) , DIMENSION(NBBOX) :: IBOX
74 INTEGER, INTENT(IN), DIMENSION(2,NRBODY) :: RBY_MSN
75
76
77
78 INTEGER I,J,INSIDE,ISK,BOX_TYPE,NBOXBOX,IBX
80 . xp1,yp1,zp1,xp2,yp2,zp2,diam,nodinb(3)
81
82 nd_size = 0
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99 ibx = abs(ib)
100 isk = ibox(ibx)%ISKBOX
101 box_type = ibox(ibx)%TYPE
102 xp1 = ibox(ibx)%X1
103 yp1 = ibox(ibx)%Y1
104 zp1 = ibox(ibx)%Z1
105 xp2 = ibox(ibx)%X2
106 yp2 = ibox(ibx)%Y2
107 zp2 = ibox(ibx)%Z2
108 diam = ibox(ibx)%DIAM
109
110
111 IF (box_type == 1) THEN
112
113 DO i=1,nrbody
114 j = rby_msn(2,i)
115 inside = 0
116 nodinb(1) = x(1,j)
117 nodinb(2) = x(2,j)
118 nodinb(3) = x(3,j)
120 . isk,nodinb,skew,inside)
121
122 IF (inside == 1) THEN
123 nd_size = nd_size + 1
124 nd_array(nd_size) = j
125 ENDIF
126
127 ENDDO
128
129
130 ELSEIF (box_type == 2) THEN
131
132 DO i=1,nrbody
133 j = rby_msn(2,i)
134 inside = 0
135 nodinb(1) = x(1,j)
136 nodinb(2) = x(2,j)
137 nodinb(3) = x(3,j)
138 CALL checkcyl(xp1, yp1, zp1 , xp2, yp2, zp2,
139 . nodinb , diam, inside )
140
141 IF (inside == 1) THEN
142 nd_size = nd_size + 1
143 nd_array(nd_size) = j
144 ENDIF
145
146 ENDDO
147
148
149 ELSEIF (box_type == 3) THEN
150
151 DO i=1,nrbody
152 j = rby_msn(2,i)
153 inside = 0
154 nodinb(1) = x(1,j)
155 nodinb(2) = x(2,j)
156 nodinb(3) = x(3,j)
157 CALL checksphere(xp1, yp1, zp1, nodinb, diam, inside)
158
159 IF (inside == 1) THEN
160 nd_size = nd_size + 1
161 nd_array(nd_size) = j
162 ENDIF
163
164 ENDDO
165 ENDIF
166
167
168 RETURN
subroutine checkcyl(xp1, yp1, zp1, xp2, yp2, zp2, nodin, d, ok)
subroutine checkpara(xp1, yp1, zp1, xp2, yp2, zp2, isk, nodin, skew, ok)
subroutine checksphere(xp, yp, zp, nodin, d, ok)