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