37
38
39
42
43
44
45#include "implicit_f.inc"
46#include "comlock.inc"
47
48
49
50#include "task_c.inc"
51
52
53
54 INTEGER, INTENT(IN) :: NRTM
55 INTEGER, INTENT(IN) :: NLEDGE
56 INTEGER, INTENT(IN) :: NEDGE
57 INTEGER, INTENT(IN) :: IEDGE
58 INTEGER, INTENT(IN) :: LEDGE(NLEDGE,NEDGE)
59 INTEGER IRECT(4,NRTM)
61 . x(3,*), bminmal(*),
62 . stf(*), gap_m(*), bgapsmx,pmax_gap,vmaxdt,
63 . marge,gap,curv_max(nrtm),
64 . bgapemx,drad
66 my_real ,
INTENT(IN) :: dgapload
67
68
69
70 INTEGER LOC_PROC,
71 . NBX,NBY,NBZ,NE,M1,M2,M3,M4,
72 . IX1,IY1,IZ1,IX2,IY2,IZ2,IX,IY,IZ
74 . aaa,
75 . xmaxb,ymaxb,zmaxb,xminb,yminb,zminb,
76 . xmine,ymine,zmine,xmaxe,ymaxe,zmaxe,
77 . xx1,xx2,xx3,xx4,yy1,yy2,yy3,yy4,zz1,zz2,zz3,zz4
78
79 INTEGER :: SOL_EDGE,SH_EDGE
81 INTEGER :: TMP
82
83
84
85
86
87
88
89
90
91 sol_edge =iedge/10
92 sh_edge =iedge-10*sol_edge
93
94 loc_proc = ispmd + 1
95
99
100 xmaxb = bminmal(1)
101 ymaxb = bminmal(2)
102 zmaxb = bminmal(3)
103 xminb = bminmal(4)
104 yminb = bminmal(5)
105 zminb = bminmal(6)
106
107 DO ne=1,nrtm
108
109 IF(stf(ne) <= zero)cycle
110 aaa = marge+curv_max(ne)+vmaxdt
111 + +
max(
max(pmax_gap,bgapsmx+gap_m(ne))+dgapload,drad)
112
113
114
115 IF(sol_edge > 0) aaa =
max(aaa,marge+bgapemx+dgapload)
116
117
118
119
120 m1 = irect(1,ne)
121 m2 = irect(2,ne)
122 m3 = irect(3,ne)
123 m4 = irect(4,ne)
124
125 xx1=x(1,m1)
126 xx2=x(1,m2)
127 xx3=x(1,m3)
128 xx4=x(1,m4)
129 xmaxe=
max(xx1,xx2,xx3,xx4)
130 xmine=
min(xx1,xx2,xx3,xx4)
131
132 yy1=x(2,m1)
133 yy2=x(2,m2)
134 yy3=x(2,m3)
135 yy4=x(2,m4)
136 ymaxe=
max(yy1,yy2,yy3,yy4)
137 ymine=
min(yy1,yy2,yy3,yy4)
138
139 zz1=x(3,m1)
140 zz2=x(3,m2)
141 zz3=x(3,m3)
142 zz4=x(3,m4)
143 zmaxe=
max(zz1,zz2,zz3,zz4)
144 zmine=
min(zz1,zz2,zz3,zz4)
145
146 IF(sol_edge > 0 ) THEN
147 dx=em02*(xmaxe-xmine)
148 dy=em02*(ymaxe-ymine)
149 dz=em02*(zmaxe-zmine)
150 xmaxe=xmaxe+dx
151 xmine=xmine-dx
152 ymaxe=ymaxe+dy
153 ymine=ymine-dy
154 zmaxe=zmaxe+dz
155 zmine=zmine-dz
156 ENDIF
157
158
159
160 ix1=int(nbx*(xmine-aaa-xminb)/(xmaxb-xminb))
161 iy1=int(nby*(ymine-aaa-yminb)/(ymaxb-yminb))
162 iz1=int(nbz*(zmine-aaa-zminb)/(zmaxb-zminb))
163
167
168 ix2=int(nbx*(xmaxe+aaa-xminb)/(xmaxb-xminb))
169 iy2=int(nby*(ymaxe+aaa-yminb)/(ymaxb-yminb))
170 iz2=int(nbz*(zmaxe+aaa-zminb)/(zmaxb-zminb))
171
175
176 DO iz = iz1, iz2
177 DO iy = iy1, iy2
178 tmp = 0
179 DO ix = ix1, ix2
180 tmp=ibset(tmp,ix)
181 END DO
182
184 END DO
185 END DO
186 ENDDO
187
188
189 RETURN
integer, dimension(:,:,:,:), allocatable crvoxel25
integer, parameter lrvoxel25