inelte
C INELTE SOURCE GOUNAND 21/06/02 21:16:31 11022 IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : INELTE C PROJET : Noyau linéaire NLIN C DESCRIPTION : Remplit le segment des éléments de référence C avec les éléments de référence de dimension 3, C de forme tétraèdrique. C REFERENCES : C LANGAGE : ESOPE C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : INILRF, INILAG, GBAPCO, GPOBUL, GPOFBU C APPELE PAR : INLRFS C*********************************************************************** C ENTREES : - C ENTREES/SORTIES : MYLRFS C SORTIES : - C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 23/03/00, version initiale C HISTORIQUE : v1, 23/03/00, création C HISTORIQUE : v2, 10/05/00, modif. du segment ELREF C HISTORIQUE : C HISTORIQUE : C*********************************************************************** C Prière de PRENDRE LE TEMPS de compléter les commentaires C en cas de modification de ce sous-programme afin de faciliter C la maintenance ! C*********************************************************************** -INC PPARAM -INC CCOPTIO -INC TNLIN *-INC SELREF POINTEUR MYLRFS.ELREFS POINTEUR ELCOUR.ELREF *-INC SPOLYNO POINTEUR MYBPOL.POLYNS * INTEGER IMPR,IRET * Elément de nom : L2D0TE1 REAL*8 UNS4 PARAMETER (UNS4=0.25D0) * Elément de nom : L2D1TE4 REAL*8 RAC3,TROS4 PARAMETER (RAC3=1.7320508075688772935274463415059D0) PARAMETER (TROS4=0.75D0) * Elément de nom : H1D1TE4 * Elément de nom : H1D2TE15 REAL*8 UNS2,UNS3 PARAMETER (UNS2=1.D0/2.D0,UNS3=1.D0/3.D0) * INTEGER INDDL * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans inelte' * * Elément de nom : L2D0TE1 * Sur un triangle : élément de Lagrange, fonction L2, approximation * nodale, espace de référence de dimension 3, 1 noeud, 1 degré de * liberté, degré de l'approximation : 0 * * In INILRF : SEGINI ELCOUR $ 3,1,1,0, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,1)=UNS4 ELCOUR.XCONOD(2,1)=UNS4 ELCOUR.XCONOD(3,1)=UNS4 ELCOUR.NPQUAF(1)=15 ELCOUR.NUMCMP(1)=1 * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 3, degré 0) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : L2D1TE4 * Sur un tétraèdre : élément de Lagrange, fonction L2, approximation * nodale, espace de référence de dimension 3, 4 noeuds, 4 degrés de * liberté, degré de l'approximation : 1 * * In INILRF : SEGINI ELCOUR $ 3,4,4,1, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,1)=RAC3*UNS4 ELCOUR.XCONOD(2,1)=RAC3*UNS4 ELCOUR.XCONOD(3,1)=UNS4 ELCOUR.XCONOD(1,2)=RAC3*TROS4 ELCOUR.XCONOD(2,2)=RAC3*UNS4 ELCOUR.XCONOD(3,2)=UNS4 ELCOUR.XCONOD(1,3)=RAC3*TROS4 ELCOUR.XCONOD(2,3)=RAC3*TROS4 ELCOUR.XCONOD(3,3)=UNS4 ELCOUR.XCONOD(1,4)=RAC3*UNS4 ELCOUR.XCONOD(2,4)=RAC3*UNS4 ELCOUR.XCONOD(3,4)=TROS4 ELCOUR.NPQUAF(1)=15 ELCOUR.NUMCMP(1)=1 ELCOUR.NPQUAF(2)=15 ELCOUR.NUMCMP(2)=2 ELCOUR.NPQUAF(3)=15 ELCOUR.NUMCMP(3)=3 ELCOUR.NPQUAF(4)=15 ELCOUR.NUMCMP(4)=4 * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 3, degré 1) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : H1D1TE4 * Sur un tétraèdre : élément de Lagrange, fonction H1, approximation * nodale, espace de référence de dimension 3, 4 noeuds, 4 degrés de * liberté, degré de l'approximation : 1, degré du polynôme * d'interpolation 1 * * In INILRF : SEGINI ELCOUR $ 3,4,4,1, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,2)=UN ELCOUR.XCONOD(2,3)=UN ELCOUR.XCONOD(3,4)=UN * Les d.d.l. sont aux noeuds 1,3,5,10 ELCOUR.NPQUAF(1)=1 ELCOUR.NPQUAF(2)=3 ELCOUR.NPQUAF(3)=5 ELCOUR.NPQUAF(4)=10 DO 213 INDDL=1,4 ELCOUR.NUMCMP(INDDL)=1 213 CONTINUE * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 3, degré 1) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : CRD1TE4 * Sur un tétraèdre : élément de Lagrange, fonction continue au centre * des faces, approximation * nodale, espace de référence de dimension 3, 4 noeuds, 4 degrés de * liberté, degré de l'approximation : 1, degré du polynôme * d'interpolation 1 * * In INILRF : SEGINI ELCOUR $ 3,4,4,1, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,1)=UNS3 ELCOUR.XCONOD(2,1)=UNS3 ELCOUR.XCONOD(1,2)=UNS3 ELCOUR.XCONOD(3,2)=UNS3 ELCOUR.XCONOD(1,3)=UNS3 ELCOUR.XCONOD(2,3)=UNS3 ELCOUR.XCONOD(3,3)=UNS3 ELCOUR.XCONOD(2,4)=UNS3 ELCOUR.XCONOD(3,4)=UNS3 * Les d.d.l. sont aux noeuds 11,12,13,14 DO INDDL=1,4 ELCOUR.NPQUAF(INDDL)=INDDL+10 ELCOUR.NUMCMP(INDDL)=1 ENDDO * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 3, degré 1) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : H1D1TE5 * Sur un tétraèdre : élément de Lagrange, fonction H1, approximation * nodale, espace de référence de dimension 3, 5 noeuds, 5 degrés de * liberté, degré de l'approximation : 1, degré du polynôme * d'interpolation 3 * * In INILRF : SEGINI ELCOUR $ 3,5,5,1, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,2)=UN ELCOUR.XCONOD(2,3)=UN ELCOUR.XCONOD(3,4)=UN ELCOUR.XCONOD(1,5)=UNS4 ELCOUR.XCONOD(2,5)=UNS4 ELCOUR.XCONOD(3,5)=UNS4 * Les d.d.l. sont aux noeuds 1,3,5,10,15 ELCOUR.NPQUAF(1)=1 ELCOUR.NPQUAF(2)=3 ELCOUR.NPQUAF(3)=5 ELCOUR.NPQUAF(4)=10 ELCOUR.NPQUAF(5)=15 DO 215 INDDL=1,5 ELCOUR.NUMCMP(INDDL)=1 215 CONTINUE * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 3, degré 1) IF (IRET.NE.0) GOTO 9999 * On rajoute la bulle (\ksi \eta \zeta \lambda avec * \lambda=1-\ksi-\eta-\zeta) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : H1D2TE10 * Sur un tétraèdre : élément de Lagrange, fonction H1, approximation * nodale, espace de référence de dimension 3, 10 noeuds, 10 degrés de * liberté, degré de l'approximation : 2, degré du polynôme * d'interpolation 2 * * In INILRF : SEGINI ELCOUR $ 3,10,10,2, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,2)=UNS2 ELCOUR.XCONOD(1,3)=UN ELCOUR.XCONOD(1,4)=UNS2 ELCOUR.XCONOD(2,4)=UNS2 ELCOUR.XCONOD(2,5)=UN ELCOUR.XCONOD(2,6)=UNS2 ELCOUR.XCONOD(3,7)=UNS2 ELCOUR.XCONOD(1,8)=UNS2 ELCOUR.XCONOD(3,8)=UNS2 ELCOUR.XCONOD(2,9)=UNS2 ELCOUR.XCONOD(3,9)=UNS2 ELCOUR.XCONOD(3,10)=UN * Les d.d.l. sont aux noeuds 1,...,10 DO 217 INDDL=1,10 ELCOUR.NPQUAF(INDDL)=INDDL ELCOUR.NUMCMP(INDDL)=1 217 CONTINUE * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 3, degré 2) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : H1D2TE15 * Sur un tétraèdre : élément de Lagrange, fonction H1, approximation * nodale, espace de référence de dimension 3, 15 noeuds, 15 degrés de * liberté, degré de l'approximation : 2, degré du polynôme * d'interpolation 4 * * In INILRF : SEGINI ELCOUR $ 3,15,15,2, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,2)=UNS2 ELCOUR.XCONOD(1,3)=UN ELCOUR.XCONOD(1,4)=UNS2 ELCOUR.XCONOD(2,4)=UNS2 ELCOUR.XCONOD(2,5)=UN ELCOUR.XCONOD(2,6)=UNS2 ELCOUR.XCONOD(3,7)=UNS2 ELCOUR.XCONOD(1,8)=UNS2 ELCOUR.XCONOD(3,8)=UNS2 ELCOUR.XCONOD(2,9)=UNS2 ELCOUR.XCONOD(3,9)=UNS2 ELCOUR.XCONOD(3,10)=UN ELCOUR.XCONOD(1,11)=UNS3 ELCOUR.XCONOD(2,11)=UNS3 ELCOUR.XCONOD(1,12)=UNS3 ELCOUR.XCONOD(3,12)=UNS3 ELCOUR.XCONOD(1,13)=UNS3 ELCOUR.XCONOD(2,13)=UNS3 ELCOUR.XCONOD(3,13)=UNS3 ELCOUR.XCONOD(2,14)=UNS3 ELCOUR.XCONOD(3,14)=UNS3 ELCOUR.XCONOD(1,15)=UNS4 ELCOUR.XCONOD(2,15)=UNS4 ELCOUR.XCONOD(3,15)=UNS4 * Les d.d.l. sont aux noeuds 1,...,15 DO 219 INDDL=1,15 ELCOUR.NPQUAF(INDDL)=INDDL ELCOUR.NUMCMP(INDDL)=1 219 CONTINUE * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 3, degré 2) IF (IRET.NE.0) GOTO 9999 * On rajoute la bulle (\ksi \eta \zeta \lambda avec * \lambda=1-\ksi-\eta-\zeta) IF (IRET.NE.0) GOTO 9999 * On rajoute les 4 bulles aux faces (\ksi \eta \zeta \lambda avec * \lambda=1-\ksi-\eta-\zeta) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine inelte' RETURN * * End of subroutine INELTE * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales