37
38
39
40
41
42
43
44
45
46
47
48
49
50
52 use element_mod , only :nixs
53
54
55
56#include "implicit_f.inc"
57#include "comlock.inc"
58
59
60
61#include "task_c.inc"
62
63
64
65 INTEGER, intent(in) :: NBRIC, IXS(NIXS,*), ITAB(*)
67 . x(3,*),
68 . bminma_flu_l(6), bminma_lag_r(6)
70 . bminma_and(6)
72 . xmaxs(nbric), ymaxs(nbric), zmaxs(nbric),
73 . xmins(nbric), ymins(nbric), zmins(nbric)
74
75
76
77 INTEGER LOC_PROC,IB,
78 . NBX,NBY,NBZ,
79 . IX1,IY1,IZ1,IX2,IY2,IZ2,IX,IY,IZ,
80 . BUFBRIC(NBRIC),NBF,NBL,ITASK
82 . xmaxb,ymaxb,zmaxb,xminb,yminb,zminb,
83 .
84 .
85 .
86 .
87 . dx,dy,dz
88 LOGICAL :: IS_CONTACT
89
90
91
92
93
94
95
96
97
98 loc_proc = ispmd + 1
99
103
104
105
106
107 xmaxb =
min( bminma_flu_l(1), bminma_lag_r(1) )
108 ymaxb =
min( bminma_flu_l(2), bminma_lag_r(2) )
109 zmaxb =
min( bminma_flu_l(3), bminma_lag_r(3) )
110 xminb =
max( bminma_flu_l(4), bminma_lag_r(4) )
111 yminb =
max( bminma_flu_l(5), bminma_lag_r(5) )
112 zminb =
max( bminma_flu_l(6), bminma_lag_r(6) )
113
114 dx = xmaxb-xminb
115 dy = ymaxb-yminb
116 dz = zmaxb-zminb
117
118
119 IF ( (dx<=zero).OR.(dy<=zero).OR.(dz<=zero) ) THEN
120 is_contact = .false.
121 RETURN
122 ELSE
123 is_contact = .true.
124 END IF
125
126 bminma_and(1)=xmaxb
127 bminma_and(2)=ymaxb
128 bminma_and(3)=zmaxb
129 bminma_and(4)=xminb
130 bminma_and(5)=yminb
131 bminma_and(6)=zminb
132
133 nbf = 1+itask*nbric/nthread
134 nbl = (itask+1)*nbric/nthread
135
136 DO ib=nbf,nbl
137
138
139
140
141 ix1=int(nbx*(xmins(ib)-xminb)/dx)
142 iy1=int(nby*(ymins(ib)-yminb)/dy)
143 iz1=int(nbz*(zmins(ib)-zminb)/dz)
147
148 ix2=int(nbx*(xmaxs(ib)-xminb)/dx)
149 iy2=int(nby*(ymaxs(ib)-yminb)/dy)
150 iz2=int(nbz*(zmaxs(ib)-zminb)/dz)
154
155
156
157#include "lockon.inc"
158 DO iz = iz1, iz2
159 DO iy = iy1, iy2
160 DO ix = ix1, ix2
162 END DO
163 END DO
164 END DO
165#include "lockoff.inc"
166 ENDDO
167
168
169 RETURN
integer, dimension(0:lrvoxel, 0:lrvoxel) crvoxel