dycan1
C DYCAN1 SOURCE BP208322 20/09/18 21:16:16 10718 C DYCAND SOURCE LAVARENN 96/11/05 21:22:27 2357 & XXXN,XNET,XTE,XPOID,ICAND,IESC,IROLE) IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) *-----------------------------------------------------------------------* * * * Opérateur DYNE : algorithme de Fu - de Vogelaere * * ________________________________________________ * * * * Pour la liaison Ligne_cercle , * * Donne le segment du maillage le plus proche du point butée , * * calcule la normale de contact, le déplacement suivant * * cette normale et la position du point de contact sur le segment * * * * * * Paramètres * * * * e IPALB Renseigne sur la liaison. * * e IPLIB Tableau contenant les numéros "DYNE" de la liaison. * * e XPALB Tableau contenant les paramètres de la liaison. * * * e XPTB Tableau des d{placements des points * * e NLIAB Nombre de liaisons sur la base B. * * e NPLB Nombre total de points intervenant dans les liaisons. * * e IND Indice du pas. * * e I numéro de la liaison. * * es ICAND Numéros 'dyne' des noeuds du segment candidat. * * es XPOID Position relative du point de contact sur le segment. * * es XXXN Normale au contact * * es XNET distance du centre du cercle(E) au point du * * segment candidat dans le plan du cercle (T) * * s XTE vecteur TE (T POINT DE CONTACT, E CENTRE DU CERCLE ) * * * * Auteur, date de création: * * * * IBRAHIM PINTO, 05/97 * * * *-----------------------------------------------------------------------* INTEGER IPALB(NLIAB,*),IPLIB(NLIAB,*) INTEGER ICAND(2) REAL*8 XPTB(NPLB,2,*),XPALB(NLIAB,*) REAL*8 XXMA(3),PSC(2),AE(3),AB(3), PCONT(3),XTE(3) REAL*8 XXXN(3),XXXC(2,3),U(3) * ITYP = IPALB(I,1) IDIM = IPALB(I,3) XRAIT = XPALB(I,5) IF (ITYP.EQ.37 .OR. ITYP.EQ.39) THEN ID1 = 6 ELSE ID1 = 7 ENDIF IF (IROLE.EQ.0) THEN KMAI = 0 IMAI = ID1 +4*IDIM IBUT = IMAI + (IPALB(I,21))*IDIM NNOEMA= IPALB(I,21) IFERMA= IPALB(I,24) KBUT = IPALB(I,21) JVOI=26 ELSE KMAI = IPALB(I,21) IBUT = ID1 + 4*IDIM IMAI = IBUT + (IPALB(I,21))*IDIM NNOEMA= IPALB(I,22) IFERMA= IPALB(I,25) KBUT = 0 JVOI=26+IPALB(I,22) ENDIF IM = IPALB(I,JVOI+IESC) * ***************************************** * Recherche du segment candidat * ***************************************** IM2 = IM +1 IM1 = IM -1 IDM = IMAI +(IM-1)*IDIM PXXC1 = 0.D0 PXXC2 = 0.D0 XLONG = 0.D0 PSC(1) = 0.D0 PSC(2) = 0.D0 XNET = 0.D0 * Prise en compte des extrémitées pour contour fermé IF (IM1.EQ.0.AND.IFERMA.EQ.1) THEN IM1 = NNOEMA ENDIF IF (IM2.EQ.(NNOEMA+1).AND.IFERMA.EQ.1) THEN IM2 = 1 ENDIF IDM2 = IMAI +(IM2-1)*IDIM IDM1 = IMAI +(IM1-1)*IDIM * Tangentes au contour DO 500 ID=1,IDIM IF (IM2.NE.(NNOEMA+1)) THEN XXXC(2,ID) =XPALB(I,IDM2+ID) &+XPTB(IPLIB(I,KMAI+IM2),1,ID) &-XPALB(I,IDM+ID)-XPTB(IPLIB(I,KMAI+IM),1,ID) ELSE XXXC(2,ID) = -XPALB(I,IDM+ID) &-XPTB(IPLIB(I,KMAI+IM),1,ID) &+XPALB(I,IDM1+ID)+XPTB(IPLIB(I,KMAI+IM1),1,ID) ENDIF IF (IM1.NE.0) THEN XXXC(1,ID) = -XPALB(I,IDM+ID) &-XPTB(IPLIB(I,KMAI+IM),1,ID) &+XPALB(I,IDM1+ID)+XPTB(IPLIB(I,KMAI+IM1),1,ID) ELSE XXXC(1,ID) = XPALB(I,IDM2+ID) &+XPTB(IPLIB(I,KMAI+IM2),1,ID) &-XPALB(I,IDM+ID)-XPTB(IPLIB(I,KMAI+IM),1,ID) ENDIF PXXC1 = PXXC1 + XXXC(1,ID)*XXXC(1,ID) PXXC2 = PXXC2 + XXXC(2,ID)*XXXC(2,ID) 500 CONTINUE * Normalisation des tangentes PXXC1 = SQRT(PXXC1) PXXC2 = SQRT(PXXC2) DO 504 ID=1,IDIM XXXC(1,ID) = XXXC(1,ID)/PXXC1 XXXC(2,ID) = XXXC(2,ID)/PXXC2 504 CONTINUE * Projections sur les deux segments IDESC=IBUT+(IESC-1)*IDIM DO 508 ID=1,IDIM XXMA(ID) = XPALB(I,IDESC+ID) + XPTB(IPLIB(I,KBUT+IESC),1,ID) & - XPALB(I,IDM+ID) - XPTB(IPLIB(I,KMAI+IM),1,ID) PSC(1) = PSC(1) + XXMA(ID)*XXXC(1,ID) PSC(2) = PSC(2) + XXMA(ID)*XXXC(2,ID) 508 CONTINUE * Choix du segment ICAND(1) = IM IF (PSC(2).GT.PSC(1)) THEN IPT = 2 ICAND(2) = IM2 ELSE IPT = 1 ICAND(2) = IM1 ENDIF * Pour un contour ouvert arrivee en limite * mise a zero de xnet pour indiquer qu'il n'a pas * contact IF (ICAND(2).EQ.0) THEN ICAND(2) = 2 XNET = 0 ENDIF IF (ICAND(1).EQ.(NNOEMA+1)) THEN ICAND(2)= NNOEMA-1 XNET=0 ENDIF *---position relative du point de contact sur le segment candidat IDCAN1 = IMAI +(ICAND(1) -1)*IDIM IDCAN2 = IMAI +(ICAND(2) -1)*IDIM PSNAE = 0.D0 PSNAB = 0.D0 *------calcul des produits scalaires necessaires *--------calcul des coordonnees des vecteurs icand1iesc(AE) et icand1icand2(AB) DO 510 ID=1,IDIM AE(ID) = XPALB(I,IDESC+ID)+XPTB(IPLIB(I,KBUT+IESC),1, &ID)-XPALB(I,IDCAN1+ID)-XPTB(IPLIB(I,KMAI+ICAND(1)),1,ID) AB(ID)= XPALB(I,IDCAN2+ID)+XPTB(IPLIB(I,KMAI+ICAND(2)),1, &ID)-XPALB(I,IDCAN1+ID)-XPTB(IPLIB(I,KMAI+ICAND(1)),1,ID) 510 CONTINUE *------calcul des produits scalaires *------AVEC LA NORMALE AU PLAN DU CERCLE DO 512 ID=1,IDIM PSNAE=PSNAE+XPALB(I,ID1+ID)*AE(ID) PSNAB=PSNAB+XPALB(I,ID1+ID)*AB(ID) 512 CONTINUE *------CALCUL DE LA POSITION RELATIVE DU POINT DU *------SEGMENT DANS LE PLAN DU CERCLE(ORIGINE:LE+PROCHE VOISIN MAITRE) XNHU=0.D0 XNHU=PSNAE/PSNAB IF (XNHU.GE.0) THEN *------CALCUL DES COORDONNES CARTESIENNES *------DU "POINT DE CONTACT POTENTIEL"(POINT T) DO 514 ID=1,IDIM PCONT(ID)=0.D0 PCONT(ID)=(1-XNHU)*(XPALB(I,IDCAN1+ID) &+XPTB(IPLIB(I,KMAI+ICAND(1)),1,ID))+ &XNHU*(XPALB(I,IDCAN2+ID) &+XPTB(IPLIB(I,KMAI+ICAND(2)),1,ID)) 514 CONTINUE *-----CALCUL DE LA DISTANCE ENTRE LE NOEUD ESCLAVE(CENTRE DU CERCLE) *-----ET LE POINT DU SEGMENT DANS LE PLAN DU CERCLE( DISTANCE ET) XNET=0.D0 PSET2=0.D0 DO 516 ID=1,IDIM XA=-PCONT(ID) XB=XPALB(I,IDESC+ID) XC=XPTB(IPLIB(I,KBUT+IESC),1,ID) XTE(ID)=XA+XB+XC * XTE(ID)=-PCONT(ID)+XPALB(I,IDESC+ID)+XPTB(IPLIB(I,KBUT+IESC),1,ID) PSET2=PSET2+XTE(ID)*XTE(ID) 516 CONTINUE XNET=SQRT(PSET2) *-----CALCUL DU POIDS EN CAS DE CONTACT XPOID=0.D0 XRAY=XPALB(I,2) IF (XNET.GE.XRAY) THEN XPOID=1-XNHU ENDIF ELSE *--------SINON TOUT SE PASSE COMME S'IL N'Y AVAIT *--------PAS CONTACT;ON MET XNET A ZERO XNET=0.D0 ENDIF *----ENDIF DU XNHU.GE.0 *-----CALCUL DE LA NORMALE AU PLAN DE CONTACT IF (ITYP.EQ.37 .OR. ITYP.EQ.38) THEN *-----SI ON SUPPOSE LA NORMALE DANS LE PLAN DU CERCLE *-----NORMALE=TE, ON NE DIFFERENCIE PAS CAS 2D ET 3D(SANREAC) DO 517 ID=1,IDIM XXXN(ID)=XTE(ID)/XNET 517 CONTINUE ELSE *-----DANS LE CAS GENERAL (REACNOR) *-----ON A BESOIN DE LA NORMALE AU PLAN ABE PSN=0.D0 PSN2=0.D0 *-------CALCUL DE LA NORMALE AU PLAN ABE(U) IF (IDIM.EQ.3) THEN U(1)=AB(2)*AE(3)-AB(3)*AE(2) U(2)=AB(3)*AE(1)-AB(1)*AE(3) U(3)=AB(1)*AE(2)-AB(2)*AE(1) *-------CALCUL DE LA NORMALE AU PLAN DE CONTACT EN 3D XXXN(1)=U(2)*AB(3)-U(3)*AB(2) XXXN(2)=U(3)*AB(1)-U(1)*AB(3) XXXN(3)=U(1)*AB(2)-U(2)*AB(1) ELSE *-------calcul de la normale en 2d XXXN(1)=-(AB(1)*AE(2)-AB(2)*AE(1))*AB(2) XXXN(2)=(AB(1)*AE(2)-AB(2)*AE(1))*AB(1) ENDIF *-------NORMALISATION,INDEPENDANTE DE LA DIMENSION DO 522 ID=1,IDIM PSN2=PSN2 + XXXN(ID)*XXXN(ID) 522 CONTINUE PSN=SQRT(PSN2) DO 524 ID=1,IDIM XXXN(ID)=XXXN(ID)/PSN 524 CONTINUE ENDIF C END
© Cast3M 2003 - Tous droits réservés.
Mentions légales