skewns
C SKEWNS SOURCE FD218221 20/06/17 21:15:09 10630 C----------------------------------------------------------------------- C Calcul de la "pointicite" (skewness) des elements d'un maillage elementaire C Fonctionne pour les elements TET4 C C Le skewness est definit ainsi : C (volume optimal - volume) / volume optimal C le volume optimal est celui du triangle/tetraedre equilateral place C dans la meme sphere circonscrite C C Ainsi, pour un triangle/tetraedre equilateral = 0 C pour un triangle/tetraedre degenere = 1 C bornes : 0 < SKEW < 1 C C Entrees : C NUM(NN,NE) : tableau des numeros des elements du maillage C NN : nombre de noeuds par element C NE : nombre d'elements C ITYP : numero indiquant le type d'element C Sorties : C VAL(1,NE) : tableau des valeurs d'aspect ration pour les elements C du maillage (il s'agit du VELCHE d'un champ par elements) C----------------------------------------------------------------------- C IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO -INC SMCOORD -INC CCREEL C DIMENSION VAL(1,*),NUM(NN,NE) C Quelques nombres constants PARAMETER (UNDEMI=0.5D0,UN=1D0,DEUX=2D0,TROIS=3D0,QUATRE=4D0, & SIX=6D0,HUIT=8D0,SEIZE=16D0) R8S3=SQRT(HUIT/TROIS) SIXR2=SIX*SQRT(DEUX) R3=SQRT(TROIS) C La dimension de l'espace + 1 IDIMP1=IDIM+1 C Erreur si type d'element non prevu (normalement impossible de passer ici !) IF ((ITYP.NE.4).AND.(ITYP.NE.23)) THEN RETURN ENDIF C Boucle sur les elements du maillage DO I=1,NE C Cas des elements TRI3 IF (ITYP.EQ.4) THEN C Numeros des 3 sommets IA=NUM(1,I) IB=NUM(2,I) IC=NUM(3,I) C Coordonnees des 3 sommets XA=XCOOR((IA-1)*IDIMP1+1) YA=XCOOR((IA-1)*IDIMP1+2) XB=XCOOR((IB-1)*IDIMP1+1) YB=XCOOR((IB-1)*IDIMP1+2) XC=XCOOR((IC-1)*IDIMP1+1) YC=XCOOR((IC-1)*IDIMP1+2) IF (IDIM.EQ.3) THEN ZA=XCOOR((IA-1)*IDIMP1+3) ZB=XCOOR((IB-1)*IDIMP1+3) ZC=XCOOR((IC-1)*IDIMP1+3) ENDIF C Tailles des 3 aretes XBA=XB-XA YBA=YB-YA IF (IDIM.EQ.2) THEN AB=SQRT(XBA*XBA+YBA*YBA) ELSEIF (IDIM.EQ.3) THEN ZBA=ZB-ZA AB=SQRT(XBA*XBA+YBA*YBA+ZBA*ZBA) ENDIF XCA=XC-XA YCA=YC-YA IF (IDIM.EQ.2) THEN AC=SQRT(XCA*XCA+YCA*YCA) ELSEIF (IDIM.EQ.3) THEN ZCA=ZC-ZA AC=SQRT(XCA*XCA+YCA*YCA+ZCA*ZCA) ENDIF XCB=XC-XB YCB=YC-YB IF (IDIM.EQ.2) THEN BC=SQRT(XCB*XCB+YCB*YCB) ELSEIF (IDIM.EQ.3) THEN ZCB=ZC-ZB BC=SQRT(XCB*XCB+YCB*YCB+ZCB*ZCB) ENDIF C Aire du triangle (formule de Heron) P=UNDEMI*(AB+AC+BC) H2=P*(P-AB)*(P-AC)*(P-BC) H=SQRT(H2) C Aire du triangle optimal (c'est-a-dire celui regulier avec C le meme cercle circonscrit) RC2=AB*AB*AC*AC*BC*BC/(SEIZE*H2) AOPT=TROIS*R3*RC2/QUATRE C Indicateur SKEW, skewness SKEW=ABS((AOPT-H)/AOPT) C Cas des elements TET4 ELSEIF (ITYP.EQ.23) THEN C Numeros des 4 sommets IA=NUM(1,I) IB=NUM(2,I) IC=NUM(3,I) ID=NUM(4,I) C Coordonnees des 4 sommets XA=XCOOR((IA-1)*IDIMP1+1) YA=XCOOR((IA-1)*IDIMP1+2) ZA=XCOOR((IA-1)*IDIMP1+3) XB=XCOOR((IB-1)*IDIMP1+1) YB=XCOOR((IB-1)*IDIMP1+2) ZB=XCOOR((IB-1)*IDIMP1+3) XC=XCOOR((IC-1)*IDIMP1+1) YC=XCOOR((IC-1)*IDIMP1+2) ZC=XCOOR((IC-1)*IDIMP1+3) XD=XCOOR((ID-1)*IDIMP1+1) YD=XCOOR((ID-1)*IDIMP1+2) ZD=XCOOR((ID-1)*IDIMP1+3) C Tailles des aretes AB, AC et AD XBA=XB-XA YBA=YB-YA ZBA=ZB-ZA AB=SQRT(XBA*XBA+YBA*YBA+ZBA*ZBA) XCA=XC-XA YCA=YC-YA ZCA=ZC-ZA AC=SQRT(XCA*XCA+YCA*YCA+ZCA*ZCA) XDA=XD-XA YDA=YD-YA ZDA=ZD-ZA AD=SQRT(XDA*XDA+YDA*YDA+ZDA*ZDA) C Quelques produits vectoriels C --> AB^AC XABAC=YBA*ZCA-ZBA*YCA YABAC=ZBA*XCA-XBA*ZCA ZABAC=XBA*YCA-YBA*XCA C --> AC^AD XACAD=YCA*ZDA-ZCA*YDA YACAD=ZCA*XDA-XCA*ZDA ZACAD=XCA*YDA-YCA*XDA C Normalisation XBAN=XBA/AB YBAN=YBA/AB ZBAN=ZBA/AB XABM=UNDEMI*(XA+XB) YABM=UNDEMI*(YA+YB) ZABM=UNDEMI*(ZA+ZB) XCAN=XCA/AC YCAN=YCA/AC ZCAN=ZCA/AC XACM=UNDEMI*(XA+XC) YACM=UNDEMI*(YA+YC) ZACM=UNDEMI*(ZA+ZC) XDAN=XDA/AD YDAN=YDA/AD ZDAN=ZDA/AD XADM=UNDEMI*(XA+XD) YADM=UNDEMI*(YA+YD) ZADM=UNDEMI*(ZA+ZD) C Point milieu de [AB] XS=XABM YS=YABM ZS=ZABM C Direction perpendiculaire a AB pointant C C Distance au plan mediateur de AC SCALD=XN*XCAN+YN*YCAN+ZN*ZCAN+XPETIT C Plan mediateur 1 XS=XS+COEF*XN YS=YS+COEF*YN ZS=ZS+COEF*ZN C Direction normale a ABC XN=XABAC YN=YABAC ZN=ZABAC C Distance au plan mediateur de AD SCALD=XN*XDAN+YN*YDAN+ZN*ZDAN+XPETIT C Mediateur 2 XS=XS+COEF*XN YS=YS+COEF*YN ZS=ZS+COEF*ZN C Rayon de la sphere circonscrite RC=SQRT((XS-XA)*(XS-XA)+(YS-YA)*(YS-YA)+(ZS-ZA)*(ZS-ZA)) C Volume du tetraedre optimal (c'est-a-dire celui regulier avec C la meme sphere circonscrite) AOPT=RC*R8S3 VOPT=AOPT*AOPT*AOPT/SIXR2 C Volume du tetraedre = AB.(AC^AD) / 6 PMIX=ABS(XBA*XACAD+YBA*YACAD+ZBA*ZACAD) V=PMIX/SIX C Indicateur SKEW, skewness SKEW=ABS((VOPT-V)/VOPT) ENDIF C Ecriture dans le tableau VAL(1,I)=SKEW ENDDO C RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales