idmat3
C IDMAT3 SOURCE BP208322 16/12/14 21:15:14 9258
1 NPG2,ICALC,MFR,IPVAL)
*
************************************************************************
*
* I D M A T 3
* -----------
*
* FONCTION:
* ---------
*
* DEFINITION DES DIRECTIONS D'ORTHOTROPIE D'UNE COQUE EN 3D ET D'UN
* JOINT EN 3D JOT3 ET JOI4.
* (MODIF. DE DIMENSION A FAIRE POUR PLUS DE 8 NOEUDS)
*
* REMARQUE : ROUTINE ANALOGUE A MATEO2 ET COBIOR
*
* MODULES UTILISES:
* -----------------
*
IMPLICIT INTEGER(I-N)
-INC PPARAM
-INC CCOPTIO
-INC CCREEL
-INC SMELEME
-INC SMINTE
-INC SMCOORD
*
* PARAMETRES: (E)=ENTREE (S)=SORTIE (+ = CONTENU DANS UN COMMUN)
* -----------
*
* NUDIR1 (E) NUMERO DE DIRECTIVE UTILISEE DANS LA LISTE:
* "DIRECTION", "RADIAL",
* POUR LA DEFINITION DES DIRECTIONS D'ORTHOTROPIE.
* NUMP1 (E) NUMERO DU POINT P ASSOCIE A NUDIR1
* NUDIR2 (E) NUMERO DE DIRECTIVE UTILISEE DANS LA LISTE:
* "PARALLELE", "PERPENDIC.", "INCLINE",
* POUR LA DEFINITION DES DIRECTIONS D'ORTHOTROPIE.
* NUMP3 (E) NUMERO DU POINT P ASSOCIE A NUDIR2
* ANG (E) ANGLE UTILISE DANS LA DEFINITION DES DIRECTIONS
* D ORTHOTROPIE (INCLINE)
* MELEME (E) POINTEUR DE "MAILLAGE" A 1 SEUL TYPE D'ELEMENT.
* MINTE (E) SEGMENT CONTENANT LES FONCTIONS DE FORME, NECESSAIRE
* AVEC L'OPTION "RADIAL".
* XVAL (S) DIRECTIONS D'ORTHOTROPIE, PAR ELEMENT ET, SI OPTION
* "RADIAL", PAR POINT DE GAUSS.
* ON FOURNIT LE COSINUS ET LE SINUS DE L'ANGLE QUE FAIT
* LA DIRECTION 1 D'ORTHOTROPIE AVEC LA DIRECTION 1 DE
* L'ELEMENT.
* MFR NUMERO DE FORMULATION D'ELEMENT.
* =3 SI COQUE @ 3 NOEUDS.
* =9 SI COQUE @ 4 NOEUDS.
* =35 SI JOINT @ 6 OU @ 8 NOEUDS.
* ICALC FLAG POUR ORIENTER LE CALCUL (POUR COQ EN BIDI)
* +IDIM (E) VOIR LE COMMUN "COPTIO".
* +MCOORD (E) VOIR LE COMMUN "COPTIO". Segment suppos{ actif.
*
INTEGER NUDIR1,NUMP1,NUDIR2,NUMP3,ICALC
INTEGER NPG2,IPVAL
REAL*8 ANG
*
* VARIABLES:
* ----------
*
* COSA = COSINUS DE L'ANGLE DE LA DIRECTION 1 D'ORTHOTROPIE AVEC
* LA DIRECTION 1 DE L'ELEMENT.
* SINA = SINUS DE L'ANGLE DE LA DIRECTION 1 D'ORTHOTROPIE AVEC
* LA DIRECTION 1 DE L'ELEMENT.
* XI,YI,ZI = COORDONNEES DE LA DIRECTION 1 DANS LE REPERE LOCAL.
* XN,YN,ZN = COORDONNEES DE LA NORMALE A L'ELEMENT.
* XDIR1,.. = COORDONNEES DE LA DIRECTION FOURNIE POUR DETERMINER LES
* DIRECTIONS D'ORTHOTROPIE.
* XE = COORDONNEES DES NOEUDS DE L'ELEMENT.
*
REAL*8 XN,YN,ZN,XI,YI,ZI,XJ,YJ,ZJ,XNORM,P1N,COSA,SINA
& ,XDIR1,YDIR1,ZDIR1,XDIR2,YDIR2,ZDIR2,COSB,SINB
& ,REEL1,XDIR3,YDIR3,ZDIR3
REAL*8 XE(3,8),XEL(3,8),BPSS(3,3)
*
* CONSTANTES:
* -----------
*
* COS1D = VALEUR APPROCHEE DE COSINUS(1 DEGRE).
*
REAL*8 COS1D
PARAMETER (COS1D = 0.999 85 D0)
*
* REMARQUES:
* ----------
*
* 1. LE PLAN MOYEN EST DEFINI PAR LES SOUS-PROGRAMMES USUELS DE
* CALCUL DE REPERE POUR LES ELEMENTS CONSIDERES.
*
* 2. HYP.: LA PLACE DES NOMS DE COMPOSANTES DANS "NOMYO" (COMMUN
* "CHAMP") EST FIGEE. C'EST UNE HYPOTHESE COURAMMENT UTILISEE POUR
* D'AUTRES TABLEAUX DE "CHAMP".
*
* AUTEUR, DATE DE CREATION:
* -------------------------
*
* PASCAL MANIGOT 30 AVRIL 1987
* P.M. 09/07/91: PRISE EN COMPTE DES DIFFERENCES DE REPERAGE ENTRE
* TRIANGLE(COQ3 ET DKT) ET QUADRANGLE (COQ4).
*
* LANGAGE:
* --------
*
* ESOPE77 FORTRAN77 + EXTENSION: DECLARATION "REAL*8".
*
* MISE A NIVEAU DE MATR AVEC MATE
* -------------------------------
*
* JM CAMPENON LE 30 08 90
*
************************************************************************
*
C
SEGMENT XVAL
REAL*8 CVAL(NPG2,NBELEM),SVAL(NPG2,NBELEM)
ENDSEGMENT
C
IF (ICALC.EQ.0) THEN
SEGACT MELEME
IF ((NUDIR1 .EQ. 2).OR.((NUDIR1.EQ.1).AND.(MFR.EQ.35)) )
. SEGACT MINTE
NBELEM=NUM(/2)
NBNN =NUM(/1)
*
* DIRECTION FOURNIE, AVANT PROJECTION SUR LA COQUE.
C
C ON CHERCHE LE POINT NUMP1 RATACHER A LA DIRECTIVE DIRECTION
C
IF (NUDIR1 .EQ. 1) THEN
XNORM = SQRT(XDIR1**2 + YDIR1**2 + ZDIR1**2)
XDIR1 = XDIR1 / XNORM
YDIR1 = YDIR1 / XNORM
ZDIR1 = ZDIR1 / XNORM
END IF
XDIR2 = XDIR1
YDIR2 = YDIR1
ZDIR2 = ZDIR1
C
SEGINI XVAL
IPVAL=XVAL
C
C
C
DO 100 IEL=1,NBELEM
C
IF (MFR.EQ.35.AND.NBNN.EQ.8) THEN
ELSE IF (MFR.EQ.35.AND.NBNN.EQ.6) THEN
ELSE IF (MFR.EQ. 9.AND.NBNN.EQ.4) THEN
ELSE
* "MFR" EST SUPPOS{ VALOIR 3 (COQ3, DKT,DST)
END IF
XI = BPSS(1,1)
YI = BPSS(1,2)
ZI = BPSS(1,3)
XN = BPSS(3,1)
YN = BPSS(3,2)
ZN = BPSS(3,3)
*
DO 120 INOG=1,NPG2
*
IF (NUDIR1 .EQ. 1) THEN
XDIR1 = XDIR2
YDIR1 = YDIR2
ZDIR1 = ZDIR2
ELSE
* OPTION "RADIAL": L'ORIENTATION DE L'ORTHOTROPIE EST
* DETERMINEE A PARTIR DU VECTEUR DE VALEUR (PTGAUSS - P1
XDIR1 = - XDIR2
YDIR1 = - YDIR2
ZDIR1 = - ZDIR2
DO 130 INOE=1,NBNN
XDIR1 = XDIR1 + SHPTOT(1,INOE,INOG)*XE(1,INOE)
YDIR1 = YDIR1 + SHPTOT(1,INOE,INOG)*XE(2,INOE)
ZDIR1 = ZDIR1 + SHPTOT(1,INOE,INOG)*XE(3,INOE)
130 CONTINUE
XNORM = SQRT(XDIR1**2 + YDIR1**2 + ZDIR1**2)
XDIR1 = XDIR1 / XNORM
YDIR1 = YDIR1 / XNORM
ZDIR1 = ZDIR1 / XNORM
END IF
*
* PROJECTION SUR LA COQUE DU VECTEUR D'ORIENTATION DE
* L'ORTROTHOPIE.
*
P1N = XDIR1*XN + YDIR1*YN + ZDIR1*ZN
IF (ABS(P1N) .GT. COS1D) THEN
* DIRECTION FOURNIE ORTHOGONALE A LA COQUE.
GOTO 9990
END IF
XDIR1 = XDIR1 - P1N*XN
YDIR1 = YDIR1 - P1N*YN
ZDIR1 = ZDIR1 - P1N*ZN
XNORM = SQRT(XDIR1**2 + YDIR1**2 + ZDIR1**2)
XDIR1 = XDIR1 / XNORM
YDIR1 = YDIR1 / XNORM
ZDIR1 = ZDIR1 / XNORM
*
* ANGLE DU VECTEUR PROJETE AVEC LA DIRECTION 1 DE LA COQUE:
COSA = XI * XDIR1 + YI * YDIR1 + ZI * ZDIR1
SINA = XN * (YI*ZDIR1 - ZI*YDIR1)
& + YN * (ZI*XDIR1 - XI*ZDIR1)
& + ZN * (XI*YDIR1 - YI*XDIR1)
*
*
IF (NUDIR2 .EQ. 2) THEN
* 'PERPENDICULAIRE' -> ON AJOUTE PI/2 A L'ANGLE:
REEL1 = COSA
COSA = - SINA
SINA = REEL1
ELSE IF (NUDIR2 .EQ. 3) THEN
* 'INCLINE' -> ON TOURNE de +/-ANG
COSB = COS(ANG)
SINB = SIN(ANG)
c si pas de point P3, on oriente selon la normale a la coque
if (NUMP3.eq.0) then
REEL1=1.D0
else
XNORM = SQRT(XDIR3**2 + YDIR3**2 + ZDIR3**2)
IF(XNORM .LT. XPETIT) THEN
C POINT P3 est trop proche de l'origine
GOTO 9990
ENDIF
XDIR3 = XDIR3 / XNORM
YDIR3 = YDIR3 / XNORM
ZDIR3 = ZDIR3 / XNORM
REEL1 = XN * XDIR3 + YN * YDIR3 + ZN * ZDIR3
endif
IF (REEL1 .GT. XPETIT) THEN
* prod scal >0 -> ON AJOUTE "ANGLE":
REEL1 = SINA*COSB + COSA*SINB
COSA = COSA*COSB - SINA*SINB
SINA = REEL1
ELSE IF (REEL1 .LT. (-XPETIT) ) THEN
* prod scal >0 -> ON RETRANCHE "ANGLE":
REEL1 = SINA*COSB - COSA*SINB
COSA = COSA*COSB + SINA*SINB
SINA = REEL1
ELSE
C POINT P3 DONNE POUR ORIENTATION INAPROPRIE.
GOTO 9990
END IF
END IF
C
CVAL(INOG,IEL) = COSA
SVAL(INOG,IEL) = SINA
C
120 CONTINUE
C
100 CONTINUE
C
C
C
SEGDES XVAL
SEGDES,MELEME
IF ((NUDIR1.EQ.2).OR.( (NUDIR1.EQ.1).AND.(MFR.EQ.35) ) )
. SEGDES,MINTE
C
RETURN
C
9990 CONTINUE
SEGSUP XVAL
SEGDES MELEME
IF ((NUDIR1.EQ.2).OR.( (NUDIR1.EQ.1).AND.(MFR.EQ.35) ) )
. SEGDES,MINTE
RETURN
C
ELSE
C
C COQUES EN BIDIMENSIONNEL
C
SEGACT MELEME
NBELEM=NUM(/2)
C
SEGINI XVAL
IPVAL=XVAL
C
COSA=1.D0
SINA=0.D0
IF (NUDIR2.EQ.2) THEN
COSA=0.D0
SINA=1.D0
ELSE IF (NUDIR2.EQ.3) THEN
c bp : on ajoute cette option, mais resultats non garantis :
COSA=COS(ANG)
SINA=SIN(ANG)
END IF
C
DO 1100 IB=1,NBELEM
DO 1100 INOG=1,NPG2
CVAL(INOG,IB)=COSA
SVAL(INOG,IB)=SINA
1100 CONTINUE
C
SEGDES,XVAL
SEGDES,MELEME
C
RETURN
ENDIF
C
END
					© Cast3M 2003 - Tous droits réservés.
					Mentions légales