49 USE reader_old_mod ,
ONLY : line, kline
53#include "implicit_f.inc"
64 INTEGER INSEG,FLAG,,ITER ,NSETS
66 TYPE (SURF_) ,
DIMENSION(NSURF+NSETS) :: IGRSURF
67 TYPE(
submodel_data),
DIMENSION(NSUBMOD),
INTENT(IN) :: LSUBMODEL
71 INTEGER I,J,K,L,,IGS,IGRS,JREC,IADV,NSEG,NSEGV,SRFTYP,
72 . SKIPFLAG,UID,IAD_TMP,BUFTMP_1,NSEG_TOT,
73 . IWORK(70000),IERROR, II
74 INTEGER,
DIMENSION(:,:) ,
ALLOCATABLE :: ITRI
75 INTEGER,
DIMENSION(:) ,
ALLOCATABLE :: INDEX,BUFTMP
77 CHARACTER(LEN=NCHARTITLE) ::
78 CHARACTER(LEN=NCHARKEY) :: KEY,KEY2,KEY3
79 INTEGER :: NB_IDS, NB_NEG_IDS
80 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IDS
81 LOGICAL :: IS_AVAILABLE
82 INTEGER :: NN(4),NF,IMIN,NMIN,INOD(4),NPERM(4,4),(4),IORD
95! surf_type = 101 : hyper-ellipsoide
radioss.
132 ALLOCATE(itri(5,inseg),stat=ierror)
133 IF(ierror/=0)
CALL ancmsg(msgid=268,anmode=aninfo,
137 ALLOCATE(index(2*inseg),stat=ierror)
138 IF(ierror/=0)
CALL ancmsg(msgid
142 ALLOCATE(buftmp(inseg),stat=ierror)
143 IF(ierror/=0)
CALL ancmsg(msgid=268,anmode=aninfo,
147 IF (flag == 0) icount
152 CALL HM_OPTION_READ_KEY(LSUBMODEL,
154 . OPTION_TITR = TITR ,
164 IF (KEY(1:4) == 'surf
') THEN
167 CALL HM_GET_INTV('idsmax
', NB_IDS, IS_AVAILABLE, LSUBMODEL)
168 CALL HM_GET_INTV('negativeidsmax
', NB_NEG_IDS, IS_AVAILABLE, LSUBMODEL)
169 IF (NB_IDS + NB_NEG_IDS == 0) CYCLE
170 ALLOCATE(IDS(NB_IDS + NB_NEG_IDS))
172 CALL HM_GET_INT_ARRAY_INDEX('ids
', IDS(II), II, IS_AVAILABLE, LSUBMODEL)
174 DO II = 1, NB_NEG_IDS
175 CALL HM_GET_INT_ARRAY_INDEX('negativeids
', IDS(II + NB_IDS), II, IS_AVAILABLE, LSUBMODEL)
176 IDS(II + NB_IDS) = - IDS(II + NB_IDS)
179.AND.
IF (FLAG == 0 IGRSURF(IGS)%NSEG == -1) THEN
180 DO II = 1, NB_IDS + NB_NEG_IDS
181 ! Get surf internal id
184 IF (IABS(IDS(II)) == IGRSURF(K)%ID) THEN
190 CALL ANCMSG(MSGID=188, MSGTYPE=MSGWARNING, ANMODE=ANINFO,
191 . I1=ID, C1=TITR, I2=IDS(II))
192.OR.
ELSE IF (IGRSURF(IGRS)%TYPE==100 IGRSURF(IGRS)%TYPE==101) THEN
193 CALL ANCMSG(MSGID=187, MSGTYPE=MSGERROR, ANMODE=ANINFO,
194 . I1=ID, C1=TITR, I2=IDS(II))
195 ELSEIF (IGRSURF(IGRS)%LEVEL == 0) THEN
196 IF (ITER > NSURF) THEN
197 CALL ANCMSG(MSGID=189, MSGTYPE=MSGERROR, ANMODE=ANINFO,
198 . C1='surface', c2=
'SURFACE', c3=
'SURFACE', c4=titr, c5=
'SURFACE',
199 . i1=
id, i2=igrsurf(igs)%ID)
200 IF(
ALLOCATED(itri))
DEALLOCATE(itri)
201 IF(
ALLOCATED(index))
DEALLOCATE(index)
202 IF(
ALLOCATED(buftmp))
DEALLOCATE(buftmp)
212 nsegv=igrsurf(igrs)%NSEG
217 IF (skipflag == 0)
THEN
218 inseg=inseg+nisx*nseg
219 igrsurf(igs)%NSEG=nseg
220 CALL my_alloc(igrsurf(igs)%NODES,nseg,4)
221 igrsurf(igs)%NODES(1:nseg,1:4) = 0
222 CALL my_alloc(igrsurf(igs)%ELTYP,nseg)
223 igrsurf(igs)%ELTYP(1:nseg) = 0
224 CALL my_alloc(igrsurf(igs)%ELEM,nseg)
225 igrsurf(igs)%ELEM(1:nseg) = 0
228 ELSEIF (flag == 1 .AND. igrsurf(igs)%LEVEL == 0 .AND.
229 . igrsurf(igs)%NSEG > -1)
THEN
231 DO ii = 1, nb_ids + nb_neg_ids
235 IF (iabs(ids(ii)) == igrsurf(k)%ID)
THEN
241 IF (igrsurf(igrs)%NSEG == -1)
THEN
244 nsegv=igrsurf(igrs)%NSEG
247 nseg_tot = nseg_tot + 1
248 igrsurf(igs)%NODES(nseg_tot,1) = igrsurf(igrs)%NODES(l,1)
249 igrsurf(igs)%NODES(nseg_tot,2) = igrsurf(igrs)%NODES(l,2)
250 igrsurf(igs)%NODES(nseg_tot,3) = igrsurf(igrs)%NODES(l,3)
251 igrsurf(igs)%NODES(nseg_tot,4) = igrsurf(igrs)%NODES
253 igrsurf(igs)%ELEM(nseg_tot) = igrsurf(igrs)%ELEM(l)
258 nseg_tot = nseg_tot + 1
259 igrsurf(igs)%NODES(nseg_tot,1) = igrsurf(igrs)%NODES(l,4)
260 igrsurf(igs)%NODES(nseg_tot,2) = igrsurf(igrs)%NODES(l,3)
261 igrsurf(igs)%NODES(nseg_tot,3) = igrsurf(igrs)%NODES(l,2)
262 igrsurf(igs)%NODES(nseg_tot,4) = igrsurf(igrs)%NODES(l,1)
263 igrsurf(igs)%ELTYP(nseg_tot) = igrsurf(igrs)%ELTYP(l)
264 igrsurf(igs)%ELEM(nseg_tot) = igrsurf(igrs)%ELEM(l)
268 nseg_tot = nseg_tot + 1
269 igrsurf(igs)%NODES(nseg_tot,1) = igrsurf(igrs)%NODES(l,2)
270 igrsurf(igs)%NODES(nseg_tot,2) = igrsurf(igrs)%NODES(l,1)
271 igrsurf(igs)%NODES(nseg_tot,3) = igrsurf(igrs)%NODES(l,3)
272 igrsurf(igs)%NODES(nseg_tot,4) = igrsurf(igrs)%NODES(l,4)
273 igrsurf(igs)%ELTYP(nseg_tot) = igrsurf(igrs)%ELTYP(l)
274 igrsurf(igs)%ELEM(nseg_tot) = igrsurf(igrs)%ELEM(l)
283 ELSEIF (key(1:5) ==
'DSURF')
THEN
286 CALL hm_get_intv(
'idsmax', nb_ids, is_available, lsubmodel)
287 CALL hm_get_intv(
'negativeIdsmax', nb_neg_ids, is_available, lsubmodel)
288 IF (nb_ids + nb_neg_ids == 0) cycle
289 ALLOCATE(ids(nb_ids + nb_neg_ids))
293 DO ii = 1, nb_neg_ids
295 ids(ii + nb_ids) = - ids(ii + nb_ids)
298 IF (flag == 0 .AND. igrsurf(igs)%NSEG == -1)
THEN
299 DO ii = 1, nb_ids + nb_neg_ids
309 CALL ancmsg(msgid=188, msgtype=msgwarning, anmode=aninfo,
310 . i1=
id, c1=titr, i2=ids(ii))
311 ELSE IF (igrsurf(igrs)%TYPE==100 .OR. igrsurf(igrs)%TYPE==101)
THEN
312 CALL ancmsg(msgid=187, msgtype=msgerror, anmode=aninfo,
313 . i1=
id, c1=titr, i2=ids(ii))
314 ELSEIF (igrsurf(igrs)%LEVEL == 0)
THEN
315 IF (iter > nsurf)
THEN
316 CALL ancmsg(msgid=189, msgtype=msgerror, anmode=aninfo,
317 . c1=
'SURFACE', c2=
'SURFACE', c3=
'SURFACE', c4=titr, c5=
'SURFACE',
318 . i1=
id, i2=igrsurf(igs)%ID)
319 IF(
ALLOCATED(itri))
DEALLOCATE(itri)
320 IF(
ALLOCATED(index))
DEALLOCATE(index)
321 IF(
ALLOCATED(buftmp))
DEALLOCATE(buftmp)
331 nsegv=igrsurf(igrs)%NSEG
336 IF (skipflag == 0)
THEN
337 inseg=inseg+nisx*nseg
338 igrsurf(igs)%NSEG=nseg
339 CALL my_alloc(igrsurf(igs)%NODES,nseg,4)
340 igrsurf(igs)%NODES(1:nseg,1:4) = 0
341 CALL my_alloc(igrsurf(igs)%ELTYP,nseg)
342 igrsurf(igs)%ELTYP(1:nseg) = 0
343 CALL my_alloc(igrsurf(igs)%ELEM,nseg)
344 igrsurf(igs)%ELEM(1:nseg) = 0
347 ELSEIF (flag == 1 .AND. igrsurf(igs)%LEVEL == 0 .AND.
348 . igrsurf(igs)%NSEG > -1)
THEN
352 DO ii = 1, nb_ids + nb_neg_ids
356 IF (iabs(ids(ii)) == igrsurf(k)%ID)
THEN
362 IF (igrsurf(igrs)%NSEG == -1)
THEN
365 nsegv=igrsurf(igrs)%NSEG
368 buftmp(iad_tmp)=igrsurf(igrs)%NODES(l,1)
370 buftmp(iad_tmp)=igrsurf(igrs)%NODES(l,2)
372 buftmp(iad_tmp)=igrsurf
374 buftmp(iad_tmp)=igrsurf(igrs)%NODES(l,4)
376 buftmp(iad_tmp)=igrsurf(igrs)%ELTYP(l)
378 buftmp(iad_tmp)=igrsurf(igrs)%ELEM(l
383 buftmp(iad_tmp)= -igrsurf(igrs)%NODES(l,1)
385 buftmp(iad_tmp)= -igrsurf(igrs
389 buftmp(iad_tmp)= -igrsurf(igrs)%NODES(l,4)
391 buftmp(iad_tmp)= -igrsurf(igrs)%ELTYP(l)
393 buftmp(iad_tmp)= -igrsurf(igrs)%ELEM(l)
404 IF (buftmp((l-1)*nisx+1) /= 0)
THEN
406 inod(1) = iabs(buftmp((l-1)*nisx+1))
407 inod(2) = iabs(buftmp((l-1)*nisx+2))
408 inod(3) = iabs(buftmp((l-1)*nisx+3))
409 inod(4) = iabs(buftmp((l-1)*nisx+4))
411 isign_nod(1) = isign(1,buftmp((l-1)*nisx+1))
412 isign_nod(2) = isign(1,buftmp((l-1)*nisx+2))
413 isign_nod(3) = isign(1,buftmp((l-1)*nisx+3))
414 isign_nod(4) = isign(1,buftmp((l-1)*nisx+4))
428 IF (nmin > inod(j)) imin = j
429 nmin =
min(nmin,inod(j))
432 nn(1) = inod(nperm(imin,1))
433 nn(2) = inod(nperm(imin,2))
434 nn(3) = inod(nperm(imin,3))
435 nn(4) = inod(nperm(imin,4))
437 buftmp((l-1)*nisx+1) = nn(1)*isign_nod(1)
438 buftmp((l-1)*nisx+2) = nn(2)*isign_nod(2)
439 buftmp((l-1)*nisx+3) = nn(3)*isign_nod(3)
440 buftmp((l-1)*nisx+4) = nn(4)*isign_nod(4)
448 inod(1) = buftmp((l-1)*nisx+1)
449 inod(2) = buftmp((l-1)*nisx+2)
450 inod(3) = buftmp((l-1)*nisx+3)
451 inod(4) = buftmp((l-1)*nisx+4)
455 IF ( inod(1) /= 0 .OR. inod(2) /= 0 .OR.
456 . inod(3) /= 0 .OR. inod(4) /= 0 )
THEN
458 IF (inod(4) == 0) inod(4)=inod(3)
460 IF (inod(1) == inod(4))
THEN
463 ELSEIF (inod(2) == inod(3))
THEN
466 ELSEIF(inod(1) == inod(2))
THEN
474 buftmp((l-1)*nisx+1) = inod(1)
475 buftmp((l-1)*nisx+2) = inod(2)
476 buftmp((l-1)*nisx+3) = inod(3)
477 buftmp((l-1)*nisx+4) = inod(4)
486 IF(buftmp((l-1)*nisx+1) /= 0)
THEN
487 itri(1,l) = iabs(buftmp((l-1)*nisx+1))
488 itri(2,l) = iabs(buftmp((l-1)*nisx+2))
489 itri(3,l) = iabs(buftmp((l-1)*nisx+3))
490 itri(4,l) = iabs(buftmp((l-1)*nisx+4))
491 itri(5,l) = buftmp((l-1)*nisx+1) / iabs(buftmp((l-1)*nisx+1))
494 CALL my_orders(0,iwork,itri,index,nseg,5)
501 . iabs(buftmp( (index(l)-1) * nisx + 2)) == iabs(buftmp( (index(l+
502 . iabs(buftmp( (index(l)-1) * nisx + 3)) == iabs(buftmp( (index(l+1)-1) * nisx + 3)).AND.
503 . iabs(buftmp( (index(l)-1) * nisx + 4)) == iabs(buftmp( (index(l+1)-1) * nisx + 4)) )
THEN
504 IF( itri(5,index(l)) + itri(5,index(l+1)) == 0)
THEN
506 buftmp((index(l)-1) *nisx+j) = 0
507 buftmp((index(l+1)-1)*nisx+j) = -iabs(buftmp((index(l+1)-1)*nisx+j))
509 ELSEIF( itri(5,index(l)) + itri(5,index(l+1)) /= 0)
THEN
511 buftmp((index(l)-1) *nisx+j) = 0
512 buftmp((index(l+1)-1)*nisx+j) = buftmp((index(l+1)-1)*nisx+j)
521 IF((buftmp( (index(l)-1) *nisx+1) > 0) .OR.
522 . (buftmp( (index(l)-1) *nisx+2) > 0) .OR.
523 . (buftmp( (index(l)-1) *nisx+3) > 0) .OR.
524 . (buftmp( (index(l)-1) *nisx+4) > 0) )
THEN
528 IF (nsegv /= nseg)
THEN
529 DEALLOCATE(igrsurf(igs)%NODES)
530 CALL my_alloc(igrsurf(igs)%NODES,nsegv,4)
531 igrsurf(igs)%NODES(1:nsegv,1:4) = 0
534 IF((buftmp( (index(l)-1) *nisx+1) > 0) .OR.
535 . (buftmp( (index(l)-1) *nisx+2) > 0) .OR.
536 . (buftmp( (index(l)-1) *nisx+3) > 0) .OR.
537 . (buftmp( (index(l)-1) *nisx+4) > 0) )
THEN
539 igrsurf(igs)%NODES(nseg_tot,1) = buftmp((index(l)-1) *nisx+1)
540 igrsurf(igs)%NODES(nseg_tot,2) = buftmp((index(l)-1) *nisx+2)
541 igrsurf(igs)%NODES(nseg_tot,3) = buftmp((index(l)-1) *nisx+3)
542 igrsurf(igs)%NODES(nseg_tot,4) = buftmp((index(l)-1) *nisx+4)
543 igrsurf(igs)%ELTYP(nseg_tot) = buftmp((index(l)-1) *nisx+5)
544 igrsurf(igs)%ELEM(nseg_tot) = buftmp((index(l)-1) *nisx+6)
547 igrsurf(igs)%NSEG=nseg_tot
555 IF(
ALLOCATED(itri))
DEALLOCATE(itri)
556 IF(
ALLOCATED(index))
DEALLOCATE(index)
557 IF(
ALLOCATED(buftmp))
DEALLOCATE(buftmp)
570 . i2=igrsurf(igs)%ID)
571 IF(
ALLOCATED(itri))
DEALLOCATE(itri)
572 IF(
ALLOCATED(index))
DEALLOCATE(index)
573 IF(
ALLOCATED(buftmp))
DEALLOCATE(buftmp)
577 IF(
ALLOCATED(itri))
DEALLOCATE(itri)
578 IF(
ALLOCATED(index))
DEALLOCATE(index)
579 IF(
ALLOCATED(buftmp))
DEALLOCATE(buftmp)
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)