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