44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
70 USE format_mod , ONLY : fmt_i_3f
71 USE user_id_mod , ONLY : id_limit
72 USE sph_mod,
ONLY : xi_res, yi_res, zi_res
73
74
75
76#include "implicit_f.inc"
77
78
79
80
81 INTEGER, INTENT(IN) :: IS_DYNA
82 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
83 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
84
85 INTEGER,INTENT(OUT)::ITAB(*)
86 INTEGER,INTENT(OUT)::ITABM1(*)
90
91
92
93#include "hash_id.inc"
94#include "com01_c.inc"
95#include "com04_c.inc"
96#include "units_c.inc"
97#include "scr03_c.inc"
98#include "scr16_c.inc"
99#include "scr17_c.inc"
100#include "titr_c.inc"
101#include "sphcom.inc"
102#include "remesh_c.inc"
103
104
105
106 INTEGER :: N,I,J,STAT
107 INTEGER :: NUMNUSR,NUMNUSR1,NUMNAUX,KSPHRES,NUMNUSR2
108 INTEGER :: UID, IFLAGUNIT, ID
109 my_real :: x1,x2,x3,xmin,ymin,zmin,xmax,
ymax,zmax,fac_l,w
110 CHARACTER(LEN=NCHARLINE) :: LLINE
111 INTEGER, DIMENSION(:), ALLOCATABLE :: SUB_NOD,UID_NOD,ITAB_TMP,ITABM1_TMP
112 real*8, DIMENSION(:,:), ALLOCATABLE :: hm_x
113 my_real,
DIMENSION(:,:),
ALLOCATABLE :: x_tmp
114 LOGICAL :: IS_AVAILABLE
115 real*8, DIMENSION(:), ALLOCATABLE :: dmerge
116
117
118
119 INTEGER USRTOS
120
121 fac_l = one
122
123 xmin = ep20
124 ymin = ep20
125 zmin = ep20
126 xmax =-ep20
128 zmax =-ep20
129
130
131
132 CALL cpp_nodes_count(numnusr1,numnusr2)
133 ALLOCATE (sub_nod(numnusr1),stat=stat)
134 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'SUB_NOD')
135 ALLOCATE (uid_nod(numnusr1),stat=stat)
136 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'UID_NOD')
137 ALLOCATE (hm_x(3,numnusr1),stat=stat)
138 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'HM_X')
139 ALLOCATE (dmerge(numnusr2),stat=stat)
140 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'DMERGE')
141 sub_nod(1:numnusr1) = 0
142 uid_nod(1:numnusr1) = 0
143 hm_x(1:3,1:numnusr1) = 0
144 dmerge(1:numnusr2) = zero
145
146 IF(is_dyna==0)THEN
147
148
149
150 w = zero
151 CALL cpp_node_read(itab,hm_x,w,sub_nod,uid_nod)
152
153
154
155 uid = -1
156 n = 0
157 DO i=1,numnusr1
158 n=n+1
159 x(1,n) = hm_x(1,n)
160 x(2,n) = hm_x(2,n)
161 x(3,n) = hm_x(3,n)
162
163
164
165 IF(sub_nod(n) /= 0)THEN
166 IF(uid_nod(n) == 0 .AND. lsubmodel(sub_nod(n))%UID /= 0) uid_nod(n) = lsubmodel(sub_nod(n))%UID
167 ENDIF
168
169
170
171 IF(uid_nod(n) /= uid )THEN
172 uid = uid_nod(n)
173 iflagunit = 0
174 DO j=1,unitab%NUNITS
175 IF (unitab%UNIT_ID(j) == uid) THEN
176 fac_l = unitab%FAC_L(j)
177 iflagunit = 1
178 EXIT
179 ENDIF
180 ENDDO
181 IF (uid/=0 .AND. iflagunit==0)THEN
182 CALL ancmsg(msgid=643,anmode=aninfo,msgtype=msgerror,i1=uid,c1=
'/NODE')
183 ENDIF
184 ENDIF
185 x(1,n) = x(1,n)*fac_l
186 x(2,n) = x(2,n)*fac_l
187 x(3,n) = x(3,n)*fac_l
188
189 IF(numelig3d > 0) wige(n) = w
190 xmin=
min(xmin,x(1,n))
191 ymin=
min(ymin,x(2,n))
192 zmin=
min(zmin,x(3,n))
193 xmax=
max(xmax,x(1,n))
195 zmax=
max(zmax,x(3,n))
196 ENDDO
197 ELSE
198
199
200 ALLOCATE (itab_tmp(numnusr1),stat=stat)
201 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'ITAB_TMP')
202 ALLOCATE (itabm1_tmp(2*numnusr1),stat=stat)
203 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'ITABM1_TMP')
204 ALLOCATE (x_tmp(3,numnusr1),stat=stat)
205 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'X_TMP')
206
207
208
209 w = zero
210 CALL cpp_node_read(itab_tmp,hm_x,w,sub_nod,uid_nod)
211
212
213
214 uid = -1
215 n = 0
216 DO i=1,numnusr1
217 n=n+1
218 x_tmp(1,n) = hm_x(1,n)
219 x_tmp(2,n) = hm_x(2,n)
220 x_tmp(3,n) = hm_x(3,n)
221
222
223
224 IF(sub_nod(n) /= 0)THEN
225 IF(uid_nod(n) == 0 .AND. lsubmodel(sub_nod(n))%UID /= 0)
226 . uid_nod(n) = lsubmodel(sub_nod(n))%UID
227 ENDIF
228
229
230
231 IF(uid_nod(n) /= uid )THEN
232 uid = uid_nod(n)
233 iflagunit = 0
234 DO j=1,unitab%NUNITS
235 IF (unitab%UNIT_ID(j) == uid) THEN
236 fac_l = unitab%FAC_L(j)
237 iflagunit = 1
238 EXIT
239 ENDIF
240 ENDDO
241 IF (uid/=0 .AND. iflagunit==0)THEN
242 CALL ancmsg(msgid=643,anmode=aninfo,msgtype=msgerror,i1=uid,c1=
'/NODE')
243 ENDIF
244 ENDIF
245 x_tmp(1,n) = x_tmp(1,n)*fac_l
246 x_tmp(2,n) = x_tmp(2,n)*fac_l
247 x_tmp(3,n) = x_tmp(3,n)*fac_l
248
249 IF(numelig3d > 0) wige(n) = w
250 xmin=
min(xmin,x_tmp(1,n))
251 ymin=
min(ymin,x_tmp(2,n))
252 zmin=
min(zmin,x_tmp(3,n))
253 xmax=
max(xmax,x_tmp(1,n))
255 zmax=
max(zmax,x_tmp(3,n))
256 ENDDO
257
258
259
260 CALL constit(itab_tmp,itabm1_tmp,numnusr1)
261
262
263 numnaux = 1
264 itab(1) = itabm1_tmp(1)
265 x(1:3,1) = x_tmp(1:3,itabm1_tmp(numnusr1+1))
266 DO i=2,numnusr1
267 IF(itabm1_tmp(numnusr1+i) == itabm1_tmp(numnusr1+i-1)) cycle
268 numnaux = numnaux + 1
269 itab(numnaux) = itabm1_tmp(i)
270 x(1:3,numnaux) = x_tmp(1:3,itabm1_tmp(numnusr1+i))
271 ENDDO
272 numnusr1 = numnaux
273
274 IF(ALLOCATED(itab_tmp)) DEALLOCATE(itab_tmp)
275 IF(ALLOCATED(itabm1_tmp)) DEALLOCATE(itabm1_tmp)
276 IF(ALLOCATED(x_tmp)) DEALLOCATE(x_tmp)
277 END IF
278
279 IF(ALLOCATED(sub_nod)) DEALLOCATE(sub_nod)
280 IF(ALLOCATED(uid_nod)) DEALLOCATE(uid_nod)
281 IF(ALLOCATED(hm_x)) DEALLOCATE(hm_x)
282
283
284
285
286 IF(numnusr2 /= 0) THEN
287 ALLOCATE (itab_tmp(numnusr2),stat=stat)
288 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'ITAB_TMP')
289 ALLOCATE (sub_nod(numnusr2),stat=stat)
290 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'SUB_NOD')
291 ALLOCATE (uid_nod(numnusr2),stat=stat)
292 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'UID_NOD')
293 ALLOCATE (hm_x(3,numnusr2),stat=stat)
294 IF (stat /= 0)
CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1=
'HM_X')
295
296 itab_tmp(1:numnusr2) = 0
297 sub_nod(1:numnusr2) = 0
298 uid_nod(1:numnusr2) = 0
299 hm_x(1:3,1:numnusr2) = zero
300
301 CALL cpp_cnode_read(itab_tmp,hm_x,dmerge,sub_nod,uid_nod)
302 n = numnusr1
303 DO i=1,numnusr2
304 n = n + 1
305
306
307
308 IF(sub_nod(i) /= 0)THEN
309 IF(uid_nod(i) == 0 .AND. lsubmodel(sub_nod(i))%UID /= 0)
310 . uid_nod(i) = lsubmodel(sub_nod(i))%UID
311 ENDIF
312 itab(n) = itab_tmp(i)
313
314
315
316 IF(uid_nod(i) /= uid )THEN
317 uid = uid_nod(i)
318 iflagunit = 0
319 DO j=1,unitab%NUNITS
320 IF (unitab%UNIT_ID(j) == uid) THEN
321 fac_l = unitab%FAC_L(j)
322 iflagunit = 1
323 EXIT
324 ENDIF
325 ENDDO
326 IF (uid/=0 .AND. iflagunit==0)THEN
327 CALL ancmsg(msgid=643,anmode=aninfo,msgtype=msgerror,i1=uid,c1=
'/CNODE')
328 ENDIF
329 ENDIF
330 x(1,n) = hm_x(1,i)*fac_l
331 x(2,n) = hm_x(2,i)*fac_l
332 x(3,n) = hm_x(3,i)*fac_l
333 cmerge(i) = dmerge(i) * fac_l
334 xmin=
min(xmin,x(1,n))
335 ymin=
min(ymin,x(2,n))
336 zmin=
min(zmin,x(3,n))
337 xmax=
max(xmax,x(1,n))
339 zmax=
max(zmax,x(3,n))
340 ENDDO
341 IF(ALLOCATED(itab_tmp)) DEALLOCATE(itab_tmp)
342 IF(ALLOCATED(sub_nod)) DEALLOCATE(sub_nod)
343 IF(ALLOCATED(uid_nod)) DEALLOCATE(uid_nod)
344 IF(ALLOCATED(hm_x)) DEALLOCATE(hm_x
345 END IF
346 numnusr = n
347
348
349
350
351 x1=xmin-fourth*(xmax-xmin)
352 x2=ymin-fourth*(
ymax-ymin)
353 x3=zmin-fourth*(zmax-zmin)
354
355 xi_res = x1
356 yi_res = x2
357 zi_res = x3
358
360 i =numnusr
361 isphres=i
362 DO n=1,nbpartinlet
364 CALL hm_get_intv('np
',KSPHRES,IS_AVAILABLE,LSUBMODEL)
365
366 DO J=1,KSPHRES*NSPMD
367 I =I+1
368 ITAB(I)=ID_LIMIT%ADMESH_LT_NODE_AUTO
369 ID_LIMIT%ADMESH_LT_NODE_AUTO=ID_LIMIT%ADMESH_LT_NODE_AUTO+1
370 X(1,I)=X1
371 X(2,I)=X2
372 X(3,I)=X3
373 ENDDO
374 ENDDO
375
376
377 FIRSTNOD_SPHSOL=I+1
378 DO N=1,NSPHSOL
379 I=I+1
380 ITAB(I)=ID_LIMIT%ADMESH_LT_NODE_AUTO
381 ID_LIMIT%ADMESH_LT_NODE_AUTO=ID_LIMIT%ADMESH_LT_NODE_AUTO+1
382 X(1,I) =ZERO
383 X(2,I) =ZERO
384 X(3,I) =ZERO
385 END DO
386
387
388 IF(NADMESH/=0)THEN
389 IF(NUMNOD-NUMNOD0>100000000)THEN
390 CALL ANCMSG(MSGID=645,
391 . MSGTYPE=MSGERROR,
392 . ANMODE=ANINFO)
393 ENDIF
394 DO N=NUMNOD0+1,NUMNOD
395 ITAB(N)=ID_LIMIT%ADMESH+N-NUMNOD0-NUMCNOD
396 END DO
397 END IF
398
399
400
401
402 IF(NADIGEMESH/=0)THEN
403 IF(NUMNOD-NUMNODIGE0>100000000)THEN
404 CALL ANCMSG(MSGID=645,
405 . MSGTYPE=MSGERROR,
406 . ANMODE=ANINFO)
407 ENDIF
408 DO N=NUMNODIGE0+1,NUMNOD
409 ITAB(N)=ID_LIMIT%ADMESH+N-NUMNODIGE0
410 END DO
411 END IF
412
413 DO N=1,64*NUMELIG3D
414 ID_LIMIT%ADMESH_LT_NODE_AUTO=ID_LIMIT%ADMESH_LT_NODE_AUTO+1
415 END DO
416
417 CALL CONSTIT(ITAB,ITABM1,NUMNOD)
418
419 CALL C_NEW_HASH(H_NODE,NUMNOD)
420 DO I=1,NUMNOD
421 CALL C_HASH_INSERT(H_NODE,ITAB(I),I)
422 ENDDO
423
424
425
426
427.OR..OR. IF (ISIGI==3ISIGI==4ISIGI==5) THEN
428
429 120 READ(IIN4,FMT='(a)',END=199,ERR=199)LLINE
430 IF(LLINE(1:33)/='/nodal /vector /coordinate')GOTO 120
431 READ(IIN4,FMT='(a)',END=199,ERR=199)LLINE
432
433 IF (IOUTP_FMT==2) THEN
434 125 READ(IIN4,FMT='(a)',END=130,ERR=199)LLINE
435 IF(LLINE(1:1)=='#')GOTO 125
436 IF(lline(1:1)=='/')GOTO 130
437 READ(lline,'(I8,3F16.0)')n,x1,x2,x3
439 IF(i/=0)THEN
440 x(1,i) = x1
441 x(2,i) = x2
442 x(3,i) = x3
443 ENDIF
444 GOTO 125
445 ELSE
446 126 READ(iin4,fmt='(A)',END=130,ERR=199)lline
447 IF(lline(1:1)=='#')GOTO 126
448 IF(lline(1:1)=='/')GOTO 130
449 READ(lline,fmt=fmt_i_3f) n,x1,x2,x3
451 IF(i/=0)THEN
452 x(1,i) = x1
453 x(2,i) = x2
454 x(3,i) = x3
455 ENDIF
456 GOTO 126
457 ENDIF
458 130 CONTINUE
459 199 CONTINUE
460 rewind(iin4)
461
462 ENDIF
463
464 j=0
465 IF (ipri > 3)THEN
466 DO n=1,numnusr1,50
467
468 j=j+50
470 WRITE(iout,'(//A/A//A/)')titre(70),titre(71),titre(72)
471 DO i=n,j
472 WRITE(iout,'(5X,I10,8X,1P3G20.13)')itab(i),x(1,i),x(2,i),x(3,i)
473 ENDDO
474 ENDDO
475
476 DO n=numnusr1+1,numnusr,50
477 j=j+50
479 WRITE(iout,'(A)')titre(117)
480 DO i=n,j
481 WRITE(iout,'(5X,I10,8X,1P3G20.13)')itab(i),x(1,i),x(2,i),x(3,i)
482 ENDDO
483 ENDDO
484 ENDIF
485
486 IF (ipri > 6)THEN
487 IF(numnod > numnusr)THEN
488 DO n=numnusr+1,numnod,50
489 j=j+50
491 WRITE(iout,'(//A)')' COORDINATES OF NODES FOR SPH RESERVES'
492 WRITE(iout,'(A)') ' -------------------------------------'
493 WRITE(iout,'(A/)')titre(72)
494 DO i=n,j
495 WRITE(iout,'(5X,I10,8X,1P3G20.13)') itab(i),x(1,i),x(2,i),x(3,i)
496 ENDDO
497 ENDDO
498 ENDIF
499 ENDIF
500
501 RETURN
subroutine constit(itab, itabm1, numnod)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
integer, parameter nchartitle
integer, parameter ncharfield
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)
integer function usrtos(iu, itabm1)