OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i22get_prev_data.F File Reference
#include "implicit_f.inc"
#include "comlock.inc"
#include "com08_c.inc"
#include "task_c.inc"
#include "inter22.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine i22get_prev_data (x, ii_stok, cand_b, cand_e, itask, nbric, itab, bufbric, ncand, ixs, nin)

Function/Subroutine Documentation

◆ i22get_prev_data()

subroutine i22get_prev_data ( x,
integer ii_stok,
integer, dimension(ncand) cand_b,
integer, dimension(ncand) cand_e,
integer itask,
integer nbric,
integer, dimension(*) itab,
integer, dimension(nbric) bufbric,
integer ncand,
integer, dimension(nixs,*) ixs,
integer nin )

Definition at line 33 of file i22get_prev_data.F.

37C============================================================================
38C-----------------------------------------------
39C D e s c r i p t i o n
40C-----------------------------------------------
41C Interface Type22 (/INTER/TYPE22) is an FSI coupling method based on cut cell method.
42C This experimental cut cell method is not completed, abandoned, and is not an official option.
43C
44C This subroutine get data from cut cell buffer
45C in previous cycle and update new buffer with
46C consistent data if brick is sill there
47C Example :
48C * nodes which were main
49C * old volume
50C * list of previous secnds (for merge/demerge)
51C * IIAD22 is also reset for all brick in
52C previous buffer
53C-----------------------------------------------
54C M o d u l e s
55C-----------------------------------------------
57 USE i22tri_mod
58 USE i22edge_mod
59 USE realloc_mod
60C-----------------------------------------------
61C I m p l i c i t T y p e s
62C-----------------------------------------------
63#include "implicit_f.inc"
64#include "comlock.inc"
65C-----------------------------------------------
66C C o m m o n B l o c k s
67C-----------------------------------------------
68#include "com08_c.inc"
69#include "task_c.inc"
70#include "inter22.inc"
71C-----------------------------------------------
72C D u m m y A r g u m e n t s
73C-----------------------------------------------
74 INTEGER CAND_B(NCAND),CAND_E(NCAND), NCAND, NIN,
75 . ITASK, NBRIC, ITAB(*),
76 . BUFBRIC(NBRIC), IXS(NIXS,*), II_STOK
78 . :: x(3,*)
79C-----------------------------------------------
80C L o c a l V a r i a b l e s
81C-----------------------------------------------
82
83 INTEGER :: POS, IAD, IADE, IB ,IBG , NBF, NBL
84
85 INTEGER :: IE, N_CUT_EDGE
86
87 INTEGER :: TAG_INDEX(NBRIC), TAG_INDEX_OLD(NBRIC), I8(9,NBRIC)
88 my_real :: r9(9,nbric), r49(4,9,nbric), r84(9,4,nbric)
89
90 INTEGER :: I,J,IDX,IBold,NUM
91
92 LOGICAL :: bFOUND
93C-----------------------------------------------
94C P r e - C o n d i t i o n s
95C-----------------------------------------------
96C INT22 > 0 already true if this subroutine is called
97C-----------------------------------------------
98C S o u r c e L i n e
99C-----------------------------------------------
100
101 nb = ncandb
102 IF(nb>i22len)THEN
103 print *, "**error inter22 : memory size allocation", nb,i22len
104 stop
105 !handle this with reallocate later
106 ENDIF
107
108 nbf = 1+itask*nb/nthread
109 nbl = (itask+1)*nb/nthread
110 nin = 1
111
112 IF(itask==0.AND.dt1/=zero)THEN
113
114 DO ib=1,nbold(nin)
115 ie = brick_list(nin,ib)%ID
116 iiad22(nin, ie) = 0
117 ENDDO
118
119 tag_index(1:nbric) = 0
120 DO i=1,nb
121 tag_index(list_b(i)) = i
122 ENDDO
123
124 tag_index_old(1:nbric) = 0
125 DO i=1,nbold(nin)
126 tag_index_old(list_b_old(nin,i)) = i
127 ENDDO
128
129 !---NewInBuffer--------!
130 DO ib=1,nb
131 idx = list_b(ib)
132 IF(tag_index(idx)/=0 .AND. tag_index_old(idx)==0)THEN
133 brick_list(nin,ib)%NewInBuffer = 1
134ccc print *, "new in buffer, IB=", ib, ixs(11,idx)
135 ELSE
136 brick_list(nin,ib)%NewInBuffer = 0
137 ENDIF
138 enddo!next IB
139
140 !---NodWasMain-------!
141 DO ib=1,nbold(nin)
142 i8(1:8,ib) = brick_list(nin,ib)%NODE(1:8)%NodWasMain !backup
143 ENDDO
144 DO ib=1,nbold(nin)
145 idx = list_b_old(nin,ib) !allocated in resol with brick_list
146 IF(tag_index(idx)>0)THEN !cell BUFBBRIC(IDX) is always in buffer
147 idx = tag_index(idx) !position in new buffer
148 brick_list(nin,idx)%NODE(1:8)%NodWasMain = i8(1:8,ib)
149 ENDIF
150 enddo!next IB
151 !---WhereWasMain-----!
152 DO ib=1,nbold(nin)
153 i8(1:8,ib) = brick_list(nin,ib)%NODE(1:8)%WhereWasMain !backup
154 ENDDO
155 DO ib=1,nbold(nin)
156 idx = list_b_old(nin,ib)
157 IF(tag_index(idx)>0)THEN
158 idx = tag_index(idx)
159 brick_list(nin,idx)%NODE(1:8)%WhereWasMain = i8(1:8,ib)
160 ENDIF
161 enddo!next IB
162
163 !--Old main volume---!
164 DO ib=1,nbold(nin)
165 r9(1,ib) = brick_list(nin,ib)%Vold_SCell !backup
166 ENDDO
167 brick_list(nin,1:nbold(nin))%Vold_SCell = zero
168 DO ib=1,nbold(nin)
169 idx = list_b_old(nin,ib)
170 IF(tag_index(idx)>0)THEN
171 idx = tag_index(idx)
172 brick_list(nin,idx)%Vold_SCell = r9(1,ib)
173 ENDIF
174 enddo!next IB
175 !should be removed since it is finally updated in sinit22 due to topology change.
176
177 !--Old whichcellnode-!
178 DO ib=1,nbold(nin)
179 i8(1:8,ib) = brick_list(nin,ib)%NODE(1:8)%WhichCell !backup
180 ENDDO
181 DO ib=1,nbold(nin)
182 idx = list_b_old(nin,ib)
183 IF(tag_index(idx)>0)THEN
184 idx = tag_index(idx)
185 brick_list(nin,idx)%NODE(1:8)%OLD_WhichCell = i8(1:8,ib)
186 ENDIF
187 enddo!next IB
188 !--Old current volume---!
189 DO ib=1,nbold(nin)
190 r9(1:9,ib) = brick_list(nin,ib)%POLY(1:9)%Vnew !backup
191 ENDDO
192 DO j=1,9;brick_list(nin,1:nbold(nin))%POLY(j)%Vnew = -ep30;ENDDO
193 DO ib=1,nbold(nin)
194 idx = list_b_old(nin,ib) !doit etre alloue dans resol en meme temps que brick_list
195 IF(tag_index(idx)>0)THEN !la brick BUFBBRIC(IDX) est toujours dans le buffer
196 idx = tag_index(idx) !position dans le nouveau buffer
197 brick_list(nin,idx)%POLY(1:9)%OLD_Vnew = r9(1:9,ib)
198 ENDIF
199 enddo!next IB
200
201 !------SecndList-------!
202 DO ib=1,nbold(nin)
203 idx = list_b_old(nin,ib)
204 IF(tag_index(idx)>0)THEN
205 idx = tag_index(idx)
206 IF(brick_list(nin,ib)%SecndList%Num==0)cycle
207 old_secndlist(nin,idx)%VOL_unmerged = brick_list(nin,ib)%SecndList%VOL_unmerged
208 old_secndlist(nin,idx)%Num = brick_list(nin,ib)%SecndList%Num
209 old_secndlist(nin,idx)%NumSecndNodes = brick_list(nin,ib)%SecndList%NumSecndNodes
210 num = brick_list(nin,ib)%SecndList%Num
211 DO j=1,num
212 old_secndlist(nin,idx)%FM(j) = brick_list(nin,ib)%SecndList%FM(j)
213 old_secndlist(nin,idx)%FV(j) = brick_list(nin,ib)%SecndList%FV(j)
214 old_secndlist(nin,idx)%IV(j) = brick_list(nin,ib)%SecndList%IV(j)
215 ibold = brick_list(nin,ib)%SecndList%IBV(j)
216 old_secndlist(nin,idx)%IBV(j) = tag_index(list_b_old(nin,ibold))
217 old_secndlist(nin,idx)%ICELLv(j) = brick_list(nin,ib)%SecndList%ICELLv(j)
218 old_secndlist(nin,idx)%VOL(j) = brick_list(nin,ib)%SecndList%VOL(j)
219 old_secndlist(nin,idx)%NumNOD_Cell(j) = brick_list(nin,ib)%SecndList%NumNOD_Cell(j)
220 old_secndlist(nin,idx)%ListNodID(j,1:8) = brick_list(nin,ib)%SecndList%ListNodID(j,1:8)
221 old_secndlist(nin,idx)%SURF_V(j) = brick_list(nin,ib)%SecndList%SURF_v(j)
222 ENDDO
223 DO j=num+1,24
224 old_secndlist(nin,idx)%FM(j) = 0
225 old_secndlist(nin,idx)%FV(j) = 0
226 old_secndlist(nin,idx)%IV(j) = 0
227 old_secndlist(nin,idx)%IBV(j) = 0
228 old_secndlist(nin,idx)%ICELLv(j) = 0
229 old_secndlist(nin,idx)%VOL(j) = zero
230 old_secndlist(nin,idx)%NumNOD_Cell(j) = 0
231 old_secndlist(nin,idx)%ListNodID(j,1:8) = 0
232 ENDDO
233 ENDIF
234 enddo!next IB
235 !---oldmainstrongnode----!
236 DO ib=1,nbold(nin)
237 i8(1,ib) = brick_list(nin,ib)%OldMainStrongNode !sauvegarder avant de faire la modification ci-dessous
238 ENDDO
239 DO ib=1,nbold(nin)
240 idx = list_b_old(nin,ib)
241 IF(tag_index(idx)>0)THEN
242 idx = tag_index(idx)
243 brick_list(nin,idx)%OldMainStrongNode = i8(1,ib)
244 ENDIF
245 enddo!next IB
246 !---OldMainStrongNode----!
247 DO ib=1,nbold(nin)
248 i8(1,ib) = brick_list(nin,ib)%NBCUT
249 ENDDO
250 DO ib=1,nbold(nin)
251 idx = list_b_old(nin,ib)
252 IF(tag_index(idx)>0)THEN
253 idx = tag_index(idx)
254 brick_list(nin,idx)%WasCut = 0
255 IF(i8(1,ib)>0)brick_list(nin,idx)%WasCut = 1
256 ENDIF
257 enddo!next IB
258
259 !---old_ICODE----!
260 DO ib=1,nbold(nin)
261 i8(1,ib) = brick_list(nin,ib)%ICODE !backup
262 ENDDO
263 brick_list(nin,1:nb)%OLD_ICODE = 0
264 DO ib=1,nbold(nin)
265 idx = list_b_old(nin,ib)
266 IF(tag_index(idx)>0)THEN
267 idx = tag_index(idx)
268 brick_list(nin,idx)%OLD_ICODE = i8(1,ib)
269 ENDIF
270 enddo!next IB
271
272
273 endif!IF(ITASK==0)THEN
274
275
276 if(itask==0.AND.ibug22_tri==1)then
277 print *, "I22LEN =", i22len
278 print *, "II_STOK =", ii_stok
279 print *, " NB =", nb
280 endif
281
282 IF(itask==0) THEN
283 nbold(nin) = nb
284 list_b_old(nin,1:nb) = list_b(1:nb)
285 ENDIF
286
287
#define my_real
Definition cppsort.cpp:32
type(brick_entity), dimension(:,:), allocatable, target brick_list
type(list_secnd), dimension(:,:), allocatable old_secndlist
integer, dimension(:,:), allocatable list_b_old
integer, dimension(:,:), allocatable iiad22
integer, dimension(:), allocatable nbold
integer, dimension(:), allocatable list_b