ajouel
C AJOUEL SOURCE CB215821 17/07/25 21:15:03 9519 C C-------------------------------------------------------------- C C FONCTION : C Verifie l'existence d'un element (defini par ses noeuds) C en tenant compte de l'eventuelle permutation des noeuds C et Ajoute cet element au maillage si non existence C C NODE : ENTREE : Tableau des noeudsde dimension NBNODE C ityp1 : ENTREE : ITYPEL (type d'element) C IMELE : E/S : Pointeur vers MELEME (actif et modifiable en E/S) C IEL : ENTREE : Numero de l element qu'on propose de créer C IEL : SORTIE : Numero de l element effectivement créé ou retrouvé C C APPELE PAR : INTGEO C C CREATION : BP 2012/09/11 C C-------------------------------------------------------------- IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) INTEGER NODE(NBNODE) SEGMENT IVU(NBNODE) C -INC PPARAM -INC CCOPTIO -INC SMELEME c write(ioimp,fmt="('ajouel(',I5,I5,I3,I3,I7,I3)") c &NODE(1),NODE(2),NBNODE,ityp1,IMELE,IEL C-------------------------------------------------------------- C PRELIMINAIRES et initialisation SEGINI,IVU c on commence par le 1er noeud a cherche inode=1 nono = NODE(inode) C-------------------------------------------------------------- C ON RECHERCHE LE POINT (idem ELIM) c maillage a verifier (actif et modifiable en entrée) IPT1 = IMELE c segact,IPT1 NBSOUS = IPT1.LISOUS(/1) c dans le cas d un meleme complexe, c==== il faut boucler sur les differents type d elements ==== DO 100 ISOUS=1,max(1,NBSOUS) if (NBSOUS.ne.0) then MELEME=IPT1.LISOUS(isous) c segact,meleme else MELEME=IPT1 endif if(ITYPEL.ne.ityp1) goto 100 NBNN = NUM(/1) C ici MELEME est un maillage simple (NSOUS = 0) NBSOUS = LISOUS(/1) NBREF = LISREF(/1) c write(ioimp,*) 'ajouel: on a trouvé le bon itypel=',ityp1 c & ,' associe au maillage de dim=',NBNN,NBEL if(NBNN.ne.NBNODE) then c goto 100 c write(ioimp,*)'ajouel: ITYPEL et nombre de noeuds incompatibles' endif c on a le bon nombre de noeuds : c on cherche si l element fourni existe deja c write(ioimp,*)'ajouel: on cherche le ',inode,'ieme noeud=',nono c boucle sur les element du maillage c on remet a zero si IVU a bougé if(inode.gt.1) then do iii=1,(inode-1) IVU(iii)=0 enddo c on commence par le 1er noeud inode=1 nono = NODE(inode) endif c boucle sur les noeuds 72 I=0 73 I=I+1 ii=NUM(I,J) c write(ioimp,*) 'on teste ',ii,' =element NUM(',I,J,')' IF(ii.eq.0) GOTO 71 c on a trouvé nono ! IF(ii.eq.nono) THEN c write(ioimp,*) 'on a trouvé ',ii,' element NUM(',I,J,')' IVU(inode)=I if(inode.eq.NBNODE) goto 700 c si on n a pas fini on continue dans cet element inode = inode +1 nono = NODE(inode) goto 72 ENDIF c si on a fini de boucler sur les noeuds => element suivant if(I.eq.NBNN) goto 71 goto 73 71 CONTINUE C-------------------------------------------------------------- c si élément non trouvé on le crée à la IEL ieme place NBELEM=IEL C ici MELEME est un maillage simple (NSOUS = 0) NBSOUS = LISOUS(/1) NBREF = LISREF(/1) segadj,MELEME endif if(NUM(1,IEL).ne.0) then write(ioimp,*) 'ajouel : on écrase un élément existant !' endif do inode=1,NBNODE NUM(inode,IEL)=NODE(inode) enddo SEGSUP,IVU RETURN C-------------------------------------------------------------- c on a trouvé l element deja existant 700 CONTINUE IEL = J c write(ioimp,*) 'on a trouvé l element deja existant ',IEL 100 CONTINUE c==== fin de boucle sur les differents type d elements ==== SEGSUP,IVU RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales