ineltr
C INELTR SOURCE GOUNAND 21/06/02 21:16:33 11022 IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : INELTR 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 2, C de forme triangulaire. 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 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 : 26/07/02, ajout du triangle cubique 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 : L2D0TR1 REAL*8 UNS3 PARAMETER (UNS3=1.D0/3.D0) * Elément de nom : L2D1TR3 REAL*8 UNS6,DEUXS3 PARAMETER (UNS6=1.D0/6.D0,DEUXS3=2.D0/3.D0) * Elément de nom : H1D1TR3 * Elément de nom : H1D2TR6 REAL*8 UNS2 PARAMETER (UNS2=1.D0/2.D0) * INTEGER INDDL * * Executable statements * IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans ineltr' * * Elément de nom : L2D0TR1 * Sur un triangle : élément de Lagrange, fonction L2, approximation * nodale, espace de référence de dimension 2, 1 noeud, 1 degré de * liberté, degré de l'approximation : 0 * * In INILRF : SEGINI ELCOUR $ 2,1,1,0, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,1)=UNS3 ELCOUR.XCONOD(2,1)=UNS3 ELCOUR.NPQUAF(1)=7 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 2, degré 0) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : L2D1TR3 * Sur un triangle : élément de Lagrange, fonction L2, approximation * nodale, espace de référence de dimension 2, 3 noeuds, 3 degrés de * liberté, degré de l'approximation : 1 * * In INILRF : SEGINI ELCOUR $ 2,3,3,1, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,1)=UNS6 ELCOUR.XCONOD(2,1)=UNS6 ELCOUR.XCONOD(1,2)=DEUXS3 ELCOUR.XCONOD(2,2)=UNS6 ELCOUR.XCONOD(1,3)=UNS6 ELCOUR.XCONOD(2,3)=DEUXS3 ELCOUR.NPQUAF(1)=7 ELCOUR.NUMCMP(1)=1 ELCOUR.NPQUAF(2)=7 ELCOUR.NUMCMP(2)=2 ELCOUR.NPQUAF(3)=7 ELCOUR.NUMCMP(3)=3 * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 2, degré 1) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : H1D1TR3 * Sur un triangle : élément de Lagrange, fonction H1, approximation * nodale, espace de référence de dimension 2, 3 noeuds, 3 degrés de * liberté, degré de l'approximation : 1 * * In INILRF : SEGINI ELCOUR $ 2,3,3,1, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,2)=UN ELCOUR.XCONOD(2,3)=UN * Les d.d.l. sont aux noeuds 1,3,5 DO 209 INDDL=1,3 ELCOUR.NPQUAF(INDDL)=(2*INDDL)-1 ELCOUR.NUMCMP(INDDL)=1 209 CONTINUE * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 2, degré 1) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : CRD1TR3 * Sur un triangle : élément de Lagrange, fonction continue au centre * des faces, * approximation nodale, espace de référence de dimension 2, 3 noeuds, 3 * degrés de liberté, degré de l'approximation : 1 * * In INILRF : SEGINI ELCOUR $ 2,3,3,1, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,1)=UNS2 ELCOUR.XCONOD(1,2)=UNS2 ELCOUR.XCONOD(2,2)=UNS2 ELCOUR.XCONOD(2,3)=UNS2 * Les d.d.l. sont aux noeuds 2,4,6 DO 201 INDDL=1,3 ELCOUR.NPQUAF(INDDL)=2*INDDL ELCOUR.NUMCMP(INDDL)=1 201 CONTINUE * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 2, degré 1) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : H1D1TR4 * Sur un triangle : élément de Lagrange, fonction H1, approximation * nodale, espace de référence de dimension 2, 4 noeuds, 4 degrés de * liberté, degré de l'approximation : 1 * * In INILRF : SEGINI ELCOUR $ 2,4,4,1, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,2)=UN ELCOUR.XCONOD(2,3)=UN ELCOUR.XCONOD(1,4)=UNS3 ELCOUR.XCONOD(2,4)=UNS3 * Les d.d.l. sont aux noeuds 1,3,5 et 7 DO 202 INDDL=1,4 ELCOUR.NPQUAF(INDDL)=(2*INDDL)-1 ELCOUR.NUMCMP(INDDL)=1 202 CONTINUE * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 2, degré 1) IF (IRET.NE.0) GOTO 9999 * On rajoute la bulle (\ksi \eta \lambda avec \lambda=1-\ksi-\eta) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : H1D2TR6 * Sur un triangle : élément de Lagrange, fonction H1, approximation * nodale, espace de référence de dimension 2, 6 noeuds, 6 degrés de * liberté, degré de l'approximation : 2 * * In INILRF : SEGINI ELCOUR $ 2,6,6,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 * Les d.d.l. sont aux noeuds 1,2,3,4,5,6 DO 207 INDDL=1,6 ELCOUR.NPQUAF(INDDL)=INDDL ELCOUR.NUMCMP(INDDL)=1 207 CONTINUE * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 2, degré 2) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : H1D2TR7 * Sur un triangle : élément de Lagrange, fonction H1, approximation * nodale, espace de référence de dimension 2, 7 noeuds, 7 degrés de * liberté, degré de l'approximation : 2 * * In INILRF : SEGINI ELCOUR $ 2,7,7,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(1,7)=UNS3 ELCOUR.XCONOD(2,7)=UNS3 * Les d.d.l. sont aux noeuds 1,2,3,4,5,6,7 DO 208 INDDL=1,7 ELCOUR.NPQUAF(INDDL)=INDDL ELCOUR.NUMCMP(INDDL)=1 208 CONTINUE * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 2, degré 2) IF (IRET.NE.0) GOTO 9999 * On rajoute la bulle (\ksi \eta \lambda avec \lambda=1-\ksi-\eta) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : H1D3TR10 * Sur un triangle : élément de Lagrange, fonction H1, approximation * nodale, espace de référence de dimension 2, 10 noeuds, 10 degrés de * liberté, degré de l'approximation : 3 * * In INILRF : SEGINI ELCOUR $ 2,10,10,3, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,2)=UNS3 ELCOUR.XCONOD(1,3)=DEUXS3 ELCOUR.XCONOD(1,4)=UN ELCOUR.XCONOD(1,5)=DEUXS3 ELCOUR.XCONOD(2,5)=UNS3 ELCOUR.XCONOD(1,6)=UNS3 ELCOUR.XCONOD(2,6)=DEUXS3 ELCOUR.XCONOD(2,7)=UN ELCOUR.XCONOD(2,8)=DEUXS3 ELCOUR.XCONOD(2,9)=UNS3 ELCOUR.XCONOD(1,10)=UNS3 ELCOUR.XCONOD(2,10)=UNS3 * Attention ! Il y a deux degrés de liberté par face ELCOUR.NPQUAF(1)=1 ELCOUR.NUMCMP(1)=1 ELCOUR.NPQUAF(2)=2 ELCOUR.NUMCMP(2)=1 ELCOUR.NPQUAF(3)=2 ELCOUR.NUMCMP(3)=2 ELCOUR.NPQUAF(4)=3 ELCOUR.NUMCMP(4)=1 ELCOUR.NPQUAF(5)=4 ELCOUR.NUMCMP(5)=1 ELCOUR.NPQUAF(6)=4 ELCOUR.NUMCMP(6)=2 ELCOUR.NPQUAF(7)=5 ELCOUR.NUMCMP(7)=1 ELCOUR.NPQUAF(8)=6 ELCOUR.NUMCMP(8)=1 ELCOUR.NPQUAF(9)=6 ELCOUR.NUMCMP(9)=2 ELCOUR.NPQUAF(10)=7 ELCOUR.NUMCMP(10)=1 * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 * Génère une base polynômiale complète (dimension 2, degré 3) IF (IRET.NE.0) GOTO 9999 ELCOUR.MBPOLY=MYBPOL SEGDES ELCOUR MYLRFS.LISEL(**)=ELCOUR * * Elément de nom : H10D0TR1 * Sur un triangle : élément de Lagrange, fonction H1 "bulle" (nulle sur * les bords, approximation nodale, espace de référence de dimension 2, * 1 noeud, 1 degré de liberté, degré de l'approximation : 0 ? * * In INILRF : SEGINI ELCOUR $ 2,1,1,0, $ ELCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 ELCOUR.XCONOD(1,1)=UNS3 ELCOUR.XCONOD(2,1)=UNS3 * Le d.d.l. est au noeud 7 ELCOUR.NPQUAF(1)=7 ELCOUR.NUMCMP(1)=1 * Initialise la correspondance ddl-noeud+ord.der IF (IRET.NE.0) GOTO 9999 NBPOLY=0 SEGINI MYBPOL SEGDES MYBPOL * Génère la bulle (\ksi \eta \lambda avec \lambda=1-\ksi-\eta) 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 ineltr' RETURN * * End of subroutine INELTR * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales