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