C LONGCA SOURCE BP208322 16/11/18 21:19:00 9177 SUBROUTINE LONGCA(IPMAIL,IB,LCAR) C C Declaration de variables C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8 (A-H,O-Z) C REAL*8 LCAR C C Insertion des includes C Remarque : le segment MCOORD est toujours actif C -INC PPARAM -INC CCOPTIO -INC CCGEOME -INC SMCOORD -INC SMELEME C IDIMP1 = IDIM+1 C--------------------------------------------------------------------- C ************************************************************ C * CALCUL DE LA LONGUEUR CARACTERISTIQUE D'un ELEMENT * C ************************************************************ C--------------------------------------------------------------------- C MELEME = IPMAIL ****** SEGACT MELEME C C Adresse de la description des faces dans LDEL C IAD=LTEL(2,ITYPEL) C C Type de la face de l'élément courant C ITYP=LDEL(1,IAD) C C Nombre de point de la face C NPFAC=KDFAC(1,ITYP) C C Adresse de la face dans LFAC C JAD=LDEL(2,IAD)-1 C C Adresse de description des triangles dans KFAC C IDEP=KDFAC(2,ITYP) C C Initialisation C ABC = 0. C C Boucle sur les triangles C IFEP=IDEP+3*(KDFAC(3,ITYP)-1) C DO 242 ITRIAN=IDEP,IFEP,3 C C Extraction des trois noeuds du triangle courant C IAFA=LFAC(JAD+KFAC(ITRIAN)) IBFA=LFAC(JAD+KFAC(ITRIAN+1)) ICFA=LFAC(JAD+KFAC(ITRIAN+2)) C C Numéro des trois noeuds dans le meleme / Position dans le MCOORD C NA = IDIMP1 * (NUM(IAFA,IB)-1) NB = IDIMP1 * (NUM(IBFA,IB)-1) NC = IDIMP1 * (NUM(ICFA,IB)-1) C C Recherche des coordonées du point B et des vecteurs BA et BC C XB=XCOOR(NB+1) YB=XCOOR(NB+2) ZB=XCOOR(NB+3) IF (IDIM.EQ.2) ZB=0. XBA=XCOOR(NA+1)-XB YBA=XCOOR(NA+2)-YB ZBA=XCOOR(NA+3)-ZB IF (IDIM.EQ.2) ZBA=0. XBC=XCOOR(NC+1)-XB YBC=XCOOR(NC+2)-YB ZBC=XCOOR(NC+3)-ZB IF (IDIM.EQ.2) ZBC=0. C C Calcul du produit vectoriel des vecteurs BA et BC C XV=YBA*ZBC-ZBA*YBC YV=ZBA*XBC-XBA*ZBC ZV=XBA*YBC-YBA*XBC C C Calcul de l'aire du triangle (norme du produit vectoriel divisée par 2) C Nota : La division par 2 est effectuee une seule fois en sortie de boucle C* XS=XV/2 C* YS=YV/2 C* ZS=ZV/2 C* ABC=ABC+SQRT(XS*XS+YS*YS+ZS*ZS) ABC = ABC+SQRT(XV*XV+YV*YV+ZV*ZV) 242 CONTINUE C C Mise en facteur du 1/2 de l'aire de chaque triangle ABC = 0.5D0 * ABC C C Calcul de la longueur caractéristique (d'après FEENSTRA, 1994) C IF (KDEGRE(ITYPEL).EQ.2) THEN C* ALPHA=1. LCAR = SQRT(ABC) ELSE C* ALPHA=SQRT(2.) LCAR=SQRT(2.D0*ABC) ENDIF C* LCAR=ALPHA*SQRT(ABC) C C Desactivation du segment MELEME C ****** SEGDES MELEME RETURN END