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