inelqu
C INELQU SOURCE GOUNAND 21/06/02 21:16:29 11022
IMPLICIT REAL*8 (A-H,O-Z)
IMPLICIT INTEGER (I-N)
C***********************************************************************
C NOM : INELQU
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 géométrique carrée.
C
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, PROBAP
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
POINTEUR MBPTMP.POLYNS
INTEGER NBMON,NDIML
POINTEUR MYPOL.POLYNO
*
INTEGER IMPR,IRET
* Elément de nom : L2D0QU1
* Elément de nom : L2D1QU3
REAL*8 UNS2
PARAMETER (UNS2=0.5D0)
* Elément de nom : H1D1QU4
REAL*8 UN
PARAMETER (UN=1.D0)
*
INTEGER INDDL
*
* Executable statements
*
IF (IMPR.GT.1) WRITE(IOIMP,*) 'Entrée dans inelqu'
*
* Elément de nom : L2D0QU1
* Sur un carré : é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.NPQUAF(1)=9
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 : L2D1QU3
* Sur un carré : é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)=UNS2
ELCOUR.XCONOD(2,1)=UNS2
ELCOUR.XCONOD(1,2)=-UNS2
ELCOUR.XCONOD(2,3)=-UNS2
ELCOUR.NPQUAF(1)=9
ELCOUR.NUMCMP(1)=1
ELCOUR.NPQUAF(2)=9
ELCOUR.NUMCMP(2)=2
ELCOUR.NPQUAF(3)=9
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 : H1D1QU4
* Sur un carré : é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,1)=-UN
ELCOUR.XCONOD(2,1)=-UN
ELCOUR.XCONOD(1,2)=UN
ELCOUR.XCONOD(2,2)=-UN
ELCOUR.XCONOD(1,3)=UN
ELCOUR.XCONOD(2,3)=UN
ELCOUR.XCONOD(1,4)=-UN
ELCOUR.XCONOD(2,4)=UN
* Les d.d.l. sont aux noeuds 1,3,5,7
DO 203 INDDL=1,4
ELCOUR.NPQUAF(INDDL)=(2*INDDL)-1
ELCOUR.NUMCMP(INDDL)=1
203 CONTINUE
* Initialise la correspondance ddl-noeud+ord.der
IF (IRET.NE.0) GOTO 9999
* Génère une base polynômiale complète (dimension 1, degré 1)
* In GBAPCO : SEGINI MBPTMP.LIPOLY(*)
IF (IRET.NE.0) GOTO 9999
* Puis la base produit
IF (IRET.NE.0) GOTO 9999
SEGACT MBPTMP*MOD
SEGSUP MBPTMP.LIPOLY(*)
SEGSUP MBPTMP
ELCOUR.MBPOLY=MYBPOL
SEGDES ELCOUR
MYLRFS.LISEL(**)=ELCOUR
*
* Elément de nom : CRD1QU4
* Sur un carré : élément de Lagrange, fonction continue au centre
* des faces, 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(2,1)=-UN
ELCOUR.XCONOD(1,2)=UN
ELCOUR.XCONOD(2,3)=UN
ELCOUR.XCONOD(1,4)=-UN
* Les d.d.l. sont aux noeuds 2,4,6,8
DO INDDL=1,4
ELCOUR.NPQUAF(INDDL)=2*INDDL
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 2, degré 1)
IF (IRET.NE.0) GOTO 9999
* On rajoute les polynômes spécifiques à crouzeix-raviart quadrilatère
IF (IRET.NE.0) GOTO 9999
ELCOUR.MBPOLY=MYBPOL
SEGDES ELCOUR
MYLRFS.LISEL(**)=ELCOUR
*
* Elément de nom : H1D2QU9
* Sur un carré : élément de Lagrange, fonction H1, approximation
* nodale, espace de référence de dimension 2, 9 noeuds, 9 degrés de
* liberté, degré de l'approximation : 2
*
* In INILRF : SEGINI ELCOUR
$ 2,9,9,2,
$ ELCOUR,
$ IMPR,IRET)
IF (IRET.NE.0) GOTO 9999
ELCOUR.XCONOD(1,1)=-UN
ELCOUR.XCONOD(2,1)=-UN
ELCOUR.XCONOD(2,2)=-UN
ELCOUR.XCONOD(1,3)=UN
ELCOUR.XCONOD(2,3)=-UN
ELCOUR.XCONOD(1,4)=UN
ELCOUR.XCONOD(1,5)=UN
ELCOUR.XCONOD(2,5)=UN
ELCOUR.XCONOD(2,6)=UN
ELCOUR.XCONOD(1,7)=-UN
ELCOUR.XCONOD(2,7)=UN
ELCOUR.XCONOD(1,8)=-UN
* Les d.d.l. sont aux noeuds 1,2,3,4,5,6,7,8,9
DO 209 INDDL=1,9
ELCOUR.NPQUAF(INDDL)=INDDL
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 1, degré 2)
* In GBAPCO : SEGINI MBPTMP.LIPOLY(*)
IF (IRET.NE.0) GOTO 9999
* Puis la base produit
IF (IRET.NE.0) GOTO 9999
SEGACT MBPTMP*MOD
SEGSUP MBPTMP.LIPOLY(*)
SEGSUP MBPTMP
ELCOUR.MBPOLY=MYBPOL
SEGDES ELCOUR
MYLRFS.LISEL(**)=ELCOUR
*
* Elément de nom : H1D2QU8
* Sur un carré : élément de Lagrange incomplet (Serendip),
* fonction H1, approximation nodale, espace de référence de dimension 2,
* 8 noeuds, 8 degrés de liberté, degré de l'approximation : 2
*
* In INILRF : SEGINI ELCOUR
$ 2,8,8,2,
$ ELCOUR,
$ IMPR,IRET)
IF (IRET.NE.0) GOTO 9999
ELCOUR.XCONOD(1,1)=-UN
ELCOUR.XCONOD(2,1)=-UN
ELCOUR.XCONOD(2,2)=-UN
ELCOUR.XCONOD(1,3)=UN
ELCOUR.XCONOD(2,3)=-UN
ELCOUR.XCONOD(1,4)=UN
ELCOUR.XCONOD(1,5)=UN
ELCOUR.XCONOD(2,5)=UN
ELCOUR.XCONOD(2,6)=UN
ELCOUR.XCONOD(1,7)=-UN
ELCOUR.XCONOD(2,7)=UN
ELCOUR.XCONOD(1,8)=-UN
* Les d.d.l. sont aux noeuds 1,2,3,4,5,6,7,8
DO 211 INDDL=1,8
ELCOUR.NPQUAF(INDDL)=INDDL
ELCOUR.NUMCMP(INDDL)=1
211 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 (\ksi^2 \eta et \ksi \eta^2)
SEGACT MYBPOL*MOD
NDIML=2
NBMON=1
SEGINI MYPOL
MYPOL.COEMON(1)=UN
MYPOL.EXPMON(1,1)=2
MYPOL.EXPMON(2,1)=1
SEGDES MYPOL
MYBPOL.LIPOLY(**)=MYPOL
NDIML=2
NBMON=1
SEGINI MYPOL
MYPOL.COEMON(1)=UN
MYPOL.EXPMON(1,1)=1
MYPOL.EXPMON(2,1)=2
SEGDES MYPOL
MYBPOL.LIPOLY(**)=MYPOL
* Voilà c'est fait
SEGDES MYBPOL
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 inelqu'
RETURN
*
* End of subroutine INELQU
*
END
					© Cast3M 2003 - Tous droits réservés.
					Mentions légales