C PRELIM SOURCE OF166741 24/06/06 21:15:03 11930 C===================================================================== C CE SOUS PROGRAMME PREPARE LES DONNEES POUR ELIM C IL FORME LA TABLE DES POINTS A TESTER C C ICPR EST LA MOUVELLE NUMEROTATION C ICPR(ANCIEN N°)= NOUVEAU N° C ICPR(ANCIEN N°)= 0 SI LE NOEUD N'APPARTIENT PAS AU(X) C MAILLAGE(S) ARGUMENT(S) C IAPOB1 EST UN TABLEAU SUR LA NOUVELLE NUMEROTATION C =1 SI LE NOEUD EST DANS LE 1ER MAILLAGE =0 SINON C IAPOB2 EST UN TABLEAU SUR LA NOUVELLE NUMEROTATION C =1 SI LE NOEUD EST DANS LE 2E MAILLAGE =0 SINON C ICLE=0 PRELIM APPELE PAR L'OPERATEUR ELIM C ICLE=1 PRELIM APPELE PAR L'OPERATEUR VISAVIS C====================================================================== SUBROUTINE PRELIM(ICLE) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC CCASSIS -INC CCGEOME -INC SMCOORD -INC SMELEME POINTEUR MELEM2.MELEME -INC TMLCHA8 -INC TMCOLAC SEGMENT ICPR(nbpts) SEGMENT IAPOB1(nbpts) SEGMENT IAPOB2(nbpts) CHARACTER*8 TYPI REAL*8 XXX,CRIT C- TRAITEMENT DES ARGUMENTS : IF (ICLE.LE.0) THEN CALL QUETYP(TYPI,0,IRET) IF (IRET.EQ.0) THEN CALL ERREUR(533) RETURN ENDIF IF (TYPI.NE.'MAILLAGE' .AND. & TYPI.NE.'POINT ' .AND. & TYPI.NE.'ENTIER ' .AND. & TYPI.NE.'FLOTTANT') THEN MOTERR(1:8)=TYPI CALL ERREUR(39) RETURN ENDIF ENDIF MELEME=0 MELEM2=0 IPOIN1=0 IPOIN2=0 CRIT =0.D0 C- --------------------- C- ARGUMENTS Syntaxe 1 : ELIM Mail1 (Mail2) xxx ; C- --------------------- ICOND=0 IF (ICLE.EQ.1) ICOND=1 TYPI = 'MAILLAGE' CALL LIROBJ(TYPI,MELEME,ICOND,IRETOU) IF (IERR.NE.0) RETURN IF (MELEME.NE.0) THEN CALL LIROBJ(TYPI,MELEM2,0,IRETOU) IF (IERR.NE.0) RETURN IF (MELEM2.EQ.0) MELEM2=MELEME C On remet dans la pile le dernier maillage lu (DALLER QUEL / DOMA / ...) IF (ICLE.LE.0) CALL REFUS C Critere de proximite : CALL LIRREE(XXX,0,IRETOU) IF (IERR.NE.0) RETURN IF (IRETOU.NE.0) THEN CRIT=XXX ELSE CRIT=DBLE(DENSIT)/10.D0 ENDIF CRIT=ABS(CRIT) IF (CRIT.EQ.0.D0) CALL ERREUR(21) IF (IERR.NE.0) RETURN c-dbg write(ioimp,*) 'PRELIM(E1)',MELEME,MELEM2,nbpts,CRIT C- --------------------- C- ARGUMENTS Syntaxe 2 : ELIM Poin1 Poin2 ; C- --------------------- ELSE TYPI = 'POINT ' CALL LIROBJ(TYPI,IPOIN1,1,IRETOU) CALL LIROBJ(TYPI,IPOIN2,1,IRETOU) IF (IERR.NE.0) RETURN C* Cas particulier : les points sont identiques IF (IPOIN1 .EQ. IPOIN2) RETURN c-dbg write(ioimp,*) 'PRELIM(E2)',IPOIN1,IPOIN2,nbpts ENDIF if (nbesc.ne.0) then mestra=imestr SEGACT MESTRA*MOD call ooofrc(1) call setass(1) endif SEGACT MCOORD*MOD SEGINI ICPR C- ---------------------- C- TRAITEMENT Syntaxe 1 : ELIM Meleme (Melem2) CRIT ; C- ---------------------- IF (MELEME.NE.0) THEN CALL ACTOBJ(TYPI,MELEME,1) IF (MELEM2.NE.MELEME) CALL ACTOBJ(TYPI,MELEM2,1) SEGINI IAPOB1,IAPOB2 ITE=0 C PREMIER MAILLAGE REMPLISSAGE ICPR ET IAPOB1 IPT1=MELEME ilm=meleme.LISOUS(/1) DO I=1,MAX(1,ilm) IF (ilm.NE.0) IPT1=meleme.LISOUS(I) DO K=1,IPT1.NUM(/1) DO L=1,IPT1.NUM(/2) M=IPT1.NUM(K,L) IF (ICPR(M).EQ.0) THEN ITE=ITE+1 ICPR(M)=ITE ENDIF IAPOB1(ICPR(M))=1 ENDDO ENDDO ENDDO C DEUXIEME MAILLAGE REMPLISSAGE IPCR ET IAPOB2 IPT2=MELEM2 ilm=melem2.LISOUS(/1) DO I=1,MAX(1,ILM) IF (ilm.NE.0) IPT2=melem2.LISOUS(I) DO K=1,IPT2.NUM(/1) DO L=1,IPT2.NUM(/2) M=IPT2.NUM(K,L) IF (ICPR(M).EQ.0) THEN ITE=ITE+1 ICPR(M)=ITE ENDIF IAPOB2(ICPR(M))=1 ENDDO ENDDO ENDDO C C ON DETERMINE LES POINTS SUPPORTS DES MULTIPLICATEURS DE LAGRANGE TYPI=' ' K=-1 CALL TYPFIL(TYPI,K) CALL CREPIL(ICOLAC,-K) M=1 SEGINI MLCHA8 MLCHAR(1)='MAILLAGE' CALL FILLPO(ICOLAC,MLCHA8) SEGSUP MLCHA8 CALL FILLPI(ICOLAC) SEGACT ICOLAC C BOUCLE SUR LES MAILLAGES ON CHERCHE LES ELEMENTS DE TYPE 22 C ("MULT") C ON INDIQUE LEUR EXISTENCE DANS IAPOB1 AVEC LA VALEUR 2 ITLACC=KCOLA(1) SEGACT ITLACC DO L=1,ITLAC(/1) ipt3=ITLAC(L) IF (ipt3.NE.0) THEN SEGACT,ipt3 IPT1=ipt3 ilm = ipt3.LISOUS(/1) DO LL=1,MAX(1,ilm) IF (ilm.NE.0) THEN IPT1=ipt3.LISOUS(LL) SEGACT IPT1 ENDIF IF (IPT1.ITYPEL .EQ. 22) THEN DO LLL=1,IPT1.NUM(/2) C LE PREMIER NOEUD SUPPORTE LES MULTIPLICATEURS lnoe=ICPR(IPT1.NUM(1,LLL)) IF (lnoe .NE. 0) IAPOB1(lnoe)=2 ENDDO ENDIF ENDDO ENDIF ENDDO c-dbg write(ioimp,*) 'PRELIM',ICLE,meleme,melem2,crit,ite,nbpts c-dbg write(ioimp,*) ' ',icpr,iapob1,iapob2 CALL ELIMIN(ICPR,CRIT,ITE,IAPOB1,IAPOB2,MELEME,MELEM2,ICLE) SEGSUP,IAPOB2,IAPOB1 C- ---------------------- C- TRAITEMENT SYNTAXE 2 : ELIM Poin1 Poin2 ; C- ---------------------- ELSE C- ON MET TOUTES LES COORDONNEES DU SECOND POINT A CELLES DU PREMIER C- independamment de leur distance (pas de critere de proximite) idimp1 = IDIM + 1 IREF1 = (IPOIN1-1)*idimp1 IREF2 = (IPOIN2-1)*idimp1 DO I=1,idimp1 XCOOR(IREF2+I)=XCOOR(IREF1+I) ENDDO C- Mise a jour de la NUMEROTATION ICPR(IPOIN1)=1 ICPR(IPOIN2)=1 NUMNP=1 itlacc=0 CALL TASSP2(itlacc,ICPR,NUMNP,icolac,0,0) ENDIF C- ----------------------- C- FIN TRAITEMENT - MENAGE C- ----------------------- C Supprime icolac et tous ses sous-objets (ITLACC...) CALL SUPPIL(icolac,-1) SEGSUP,ICPR SEGACT,MCOORD if (nbesc.ne.0) then mestra=imestr call ooofrc(0) call setass(0) SEGDES MESTRA endif c RETURN END