42
43
44
45
46
47
48! *
if nsv > 0 --> local node(phantom node
id = nsv - numnod)
49
50
51
52
53
54
55
56
57
60 USE multi_fvm_mod
61
62
63
64#include "implicit_f.inc"
65#include "comlock.inc"
66
67
68
69#include "mvsiz_p.inc"
70
71
72
73#include "parit_c.inc"
74#include "com04_c.inc"
75
76
77
78 INTEGER JLT,NISKYFI,NIN,NOINT,INTTH,
79 . (*),JTASK,
80 . IX1(MVSIZ),IX2(MVSIZ),IX3(MVSIZ),IX4(MVSIZ),NSVG(MVSIZ)
82 . h1(mvsiz),h2(mvsiz),h3(mvsiz),h4(mvsiz),stif(mvsiz),
83 . fx1(mvsiz),fy1(mvsiz),fz1(mvsiz),
84 . fx2(mvsiz),fy2(mvsiz),fz2(mvsiz),
85 . fx3(mvsiz),fy3(mvsiz),fz3(mvsiz),
86 . fx4(mvsiz),fy4(mvsiz),fz4(mvsiz),
87 . fxi(mvsiz),fyi(mvsiz),fzi(mvsiz),
88 . fskyi(lskyi,nfskyi),dt
89 TYPE(MULTI_FVM_STRUCT), INTENT(INOUT) :: MULTI_FVM
90
91
92
93 INTEGER I, J1, IG, NISKYL1, NISKYL,IGP,IGM,IDR,NISKYFIL
94 INTEGER :: NODFI
95 REAL(kind=8), dimension(6,3*mvsiz) :: local_dp,remote_dp
96 my_real,
DIMENSION(3*MVSIZ) :: f_local, f_remote
97 INTEGER :: NINDEX_LOCAL,NINDEX_REMOTE
98 INTEGER, DIMENSION(MVSIZ) :: INDEX_LOCAL,INDEX_REMOTE
99 INTEGER :: SHIFT_FORCE_INT
100
101 niskyl1 = 0
102 DO i = 1, jlt
103 IF (h1(i)/=zero) niskyl1 = niskyl1 + 1
104 ENDDO
105 DO i = 1, jlt
106 IF (h2(i)/=zero) niskyl1 = niskyl1 + 1
107 ENDDO
108 DO i = 1, jlt
109 IF (h3(i)/=zero) niskyl1 = niskyl1 + 1
110 ENDDO
111 DO i = 1, jlt
112 IF (h4(i)/=zero) niskyl1 = niskyl1 + 1
113 ENDDO
114
115
116
117 igp = 0
118 igm = 0
119
120#include "lockon.inc"
121 niskyl = nisky
122 nisky = nisky + niskyl1 + igp
123 niskyfil = niskyfi
124 niskyfi = niskyfi + igm
125#include "lockoff.inc"
126
127 IF (niskyl+niskyl1+igp > lskyi) THEN
128 CALL ancmsg(msgid=26,anmode=aninfo)
130 ENDIF
131 IF (niskyfil+igm >
nlskyfi(nin))
THEN
132 CALL ancmsg(msgid=26,anmode=aninfo)
134 ENDIF
135 DO i=1,jlt
136 IF (h1(i)/=0.) THEN
137 niskyl = niskyl + 1
138 fskyi(niskyl,1)=fx1(i)
139 fskyi(niskyl,2)=fy1(i)
140 fskyi(niskyl,3)=fz1(i)
141 fskyi(niskyl,4)=stif(i)*abs(h1(i))
142 isky(niskyl) = ix1(i)
143 ENDIF
144 ENDDO
145 DO i=1,jlt
146 IF (h2(i)/=zero) THEN
147 niskyl = niskyl + 1
148 fskyi(niskyl,1)=fx2(i)
149 fskyi(niskyl,2)=fy2(i)
150 fskyi(niskyl,3)=fz2(i)
151 fskyi(niskyl,4)=stif(i)*abs(h2(i))
152 isky(niskyl) = ix2(i)
153 ENDIF
154 ENDDO
155 DO i=1,jlt
156 IF (h3(i)/=zero) THEN
157 niskyl = niskyl + 1
158 fskyi(niskyl,1)=fx3(i)
159 fskyi(niskyl,2)=fy3(i)
160 fskyi(niskyl,3)=fz3(i)
161 fskyi(niskyl,4)=stif(i)*abs(h3(i))
162 isky(niskyl) = ix3(i)
163 ENDIF
164 ENDDO
165 DO i=1,jlt
166 IF (h4(i)/=zero) THEN
167 niskyl = niskyl + 1
168 fskyi(niskyl,1)=fx4(i)
169 fskyi(niskyl,2)=fy4(i)
170 fskyi(niskyl,3)=fz4(i)
171 fskyi(niskyl,4)=stif(i)*abs(h4(i))
172 isky(niskyl) = ix4(i)
173 ENDIF
174 ENDDO
175
176 nindex_local = 0
177 nindex_remote = 0
178 DO i=1,jlt
179 ig = nsvg(i)
180
181
182 IF(ig>0) THEN
183 ig = ig - numnod
184 nindex_local = nindex_local + 1
185 index_local(nindex_local) = ig
186 f_local( 3*(nindex_local-1)+ 1 ) = -dt * fxi(i)
187 f_local( 3*(nindex_local-1)+ 2 ) = -dt * fyi(i)
188 f_local( 3*(nindex_local-1)+ 3 ) = -dt * fzi(i)
189
190
191 ELSE
192 ig = -ig
193 nindex_remote = nindex_remote + 1
194 index_remote(nindex_remote) = ig
195 f_remote( 3*(nindex_remote-1)+ 1 ) = -dt * fxi(i)
196 f_remote( 3*(nindex_remote-1)+ 2 ) = -dt * fyi(i)
197 f_remote( 3*(nindex_remote-1)+ 3 ) = -dt * fzi(i)
198 ENDIF
199
200 ENDDO
201
202
203
205 shift_force_int = (jtask-1)*numels
206 DO i=1,nindex_local
207 ig=index_local(i)
208 multi_fvm%FORCE_INT_PON(1,1:6,ig+shift_force_int) =
209 . multi_fvm%FORCE_INT_PON(1,1:6,ig+shift_force_int) + local_dp(1:6,3*(i-1)+1)
210 multi_fvm%FORCE_INT_PON(2,1:6,ig+shift_force_int) =
211 . multi_fvm%FORCE_INT_PON(2,1:6,ig+shift_force_int) + local_dp(1:6,3*(i-1)+2)
212 multi_fvm%FORCE_INT_PON(3,1:6,ig+shift_force_int) =
213 . multi_fvm%FORCE_INT_PON(3,1:6,ig+shift_force_int) + local_dp(1:6,3*(i-1)+3)
214 ENDDO
215
216
218
219 nodfi = multi_fvm%R_AFI(nin)%NODFI
220 shift_force_int = (jtask-1)*nodfi
221 DO i=1,nindex_remote
222 ig=index_remote(i)
223 multi_fvm%R_AFI(nin)%R_FORCE_INT(1,1:6,ig+shift_force_int) =
224 . multi_fvm%R_AFI(nin)%R_FORCE_INT(1,1:6,ig+shift_force_int) +
225 . remote_dp(1:6,3*(i-1)+1)
226 multi_fvm%R_AFI(nin)%R_FORCE_INT(2,1:6,ig+shift_force_int) =
227 . multi_fvm%R_AFI(nin)%R_FORCE_INT(2,1:6,ig+shift_force_int) +
228 . remote_dp(1:6,3*(i-1)+2)
229 multi_fvm%R_AFI(nin)%R_FORCE_INT(3,1:6,ig+shift_force_int) =
230 . multi_fvm%R_AFI(nin)%R_FORCE_INT(3,1:6,ig+shift_force_int) +
231 . remote_dp(1:6,3*(i-1)+3)
232 ENDDO
233
234 RETURN
integer, dimension(:), allocatable nlskyfi
subroutine foat_to_6_float(jft, jlt, f, f6)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)