ingatr
C INGATR SOURCE GOUNAND 21/06/02 21:16:44 11022 IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : INGATR C PROJET : Noyau linéaire NLIN C DESCRIPTION : Remplit le segment des méthodes d'intégration C avec des méthodes d'intégration numérique de cubature C type Gauss pour le triangle (ordre 1 à 7). C C REFERENCES : Le site de Cools (avec 32 chiffres sign.) C (essentiellement Stroud et al.) dont on reprend la C nomenclature... C LANGAGE : ESOPE C AUTEUR : Stéphane GOUNAND (CEA/DRN/DMT/SEMT/LTMF) C mél : gounand@semt2.smts.cea.fr C*********************************************************************** C APPELES : INIPG, GTSINO, GTRO3I, FIPG, CPROPG C APPELE PAR : INPGS C*********************************************************************** C ENTREES : - C ENTREES/SORTIES : MYPGS (actif en *MOD) C SORTIES : - C CODE RETOUR (IRET) : = 0 si tout s'est bien passé C*********************************************************************** C VERSION : v1, 20/10/99, version initiale C HISTORIQUE : v1, 20/10/99, création 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 SPOGAU POINTEUR MYPGS.POGAUS POINTEUR PGCOUR.POGAU POINTEUR PGPRO1.POGAU POINTEUR PGPRO2.POGAU * INTEGER IMPR,IRET * On travaille en coordonnées barycentriques. * D'après le Dhatt et Touzot * L1 = 1 - \ksi - \eta * L2 = \ksi * L3 = \eta INTEGER DIMSRF PARAMETER(DIMSRF=2) REAL*8 XCOR(DIMSRF+1) REAL*8 POIDS * * Générateurs pour la cubature de degré 1 à 1 point : GAT2-1-1 : * - [ Fully symmetric ] REAL*8 X1D1,Y1D1,P1D1 PARAMETER (X1D1=1.D0/3.D0) PARAMETER (Y1D1=1.D0/3.D0) PARAMETER (P1D1=0.5D0) * * Générateurs pour la cubature de degré 2 à 3 points : GAT2-2-3A : * - [ Fully symmetric ] REAL*8 X1D2,Y1D2,P1D2 PARAMETER (X1D2=0.5D0) PARAMETER (Y1D2=0.5D0) PARAMETER (P1D2=1.D0/6.D0) * * Pour le degré 3, méthode produit conique à 4 points : GPT2-3-4 * * Générateurs pour la cubature de degré 4 à 6 points : GAT2-4-6A : * - [ Fully symmetric ] REAL*8 X1D4,Y1D4,P1D4 PARAMETER (X1D4=0.0915762135097707434595714634022015D0) PARAMETER (Y1D4=0.0915762135097707434595714634022015D0) PARAMETER (P1D4=0.0549758718276609338191631624501052D0) * - [ Fully symmetric ] REAL*8 X2D4,Y2D4,P2D4 PARAMETER (X2D4=0.445948490915964886318329253883051D0) PARAMETER (Y2D4=0.445948490915964886318329253883051D0) PARAMETER (P2D4=0.111690794839005732847503504216561D0) * * Générateurs pour la cubature de degré 5 à 7 points : GAT2-5-7 : * - [ Fully symmetric ] REAL*8 X1D5,Y1D5,P1D5 PARAMETER (X1D5=1.D0/3.D0) PARAMETER (Y1D5=1.D0/3.D0) PARAMETER (P1D5=0.1125D0) * - [ Fully symmetric ] REAL*8 X2D5,Y2D5,P2D5 PARAMETER (X2D5=0.101286507323456338800987361915123D0) PARAMETER (Y2D5=0.101286507323456338800987361915123D0) PARAMETER (P2D5=0.0629695902724135762978419727500906D0) * - [ Fully symmetric ] REAL*8 X3D5,Y3D5,P3D5 PARAMETER (X3D5=0.470142064105115089770441209513447D0) PARAMETER (Y3D5=0.470142064105115089770441209513447D0) PARAMETER (P3D5=0.0661970763942530903688246939165759D0) * * Pas de degré 6, même nb. de points que degré 7 avec la * qualité PI (coeffs positifs, points à l'intérieur). * * Générateurs pour la cubature de degré 7 à 12 points : GAT2-7-12 : * - [ Ro3 invariant ] REAL*8 X1D7,Y1D7,P1D7 PARAMETER (X1D7=0.0623822650944021181736830009963499D0) PARAMETER (Y1D7=0.0675178670739160854425571310508685D0) PARAMETER (P1D7=0.0265170281574362514287541804607391D0) * - [ Ro3 invariant ] REAL*8 X2D7,Y2D7,P2D7 PARAMETER (X2D7=0.0552254566569266117374791902756449D0) PARAMETER (Y2D7=0.321502493851981822666307849199202D0) PARAMETER (P2D7=0.0438814087144460550367699031392875D0) * - [ Ro3 invariant ] REAL*8 X3D7,Y3D7,P3D7 PARAMETER (X3D7=0.0343243029450971464696306424839376D0) PARAMETER (Y3D7=0.660949196186735657611980310197799D0) PARAMETER (P3D7=0.0287750427849815857384454969002185D0) * - [ Ro3 invariant ] REAL*8 X4D7,Y4D7,P4D7 PARAMETER (X4D7=0.515842334353591779257463386826430D0) PARAMETER (Y4D7=0.277716166976391782569581871393723D0) PARAMETER (P4D7=0.0674931870098027744626970861664214D0) * INTEGER NOPG,IPG * * Executable statements * IF (IMPR.GT.6) WRITE(IOIMP,*) 'Entrée dans ingatr' * * Méthode de nom : NCT2-1-3 * Sur un triangle : cubature d'ordre 1 à 3 points * espace de référence de dimension 2 * * In INIPG : SEGINI PGCOUR $ 1,3,2, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=1.D0 XCOR(2)=0.D0 XCOR(3)=0.D0 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : NCT2-3-7 * Sur un triangle : cubature d'ordre 3 à 7 points * espace de référence de dimension 2 * * In INIPG : SEGINI PGCOUR $ 3,7,2, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=1.D0 XCOR(2)=0.D0 XCOR(3)=0.D0 POIDS=0.025D0 IF (IRET.NE.0) GOTO 9999 XCOR(1)=0.5D0 XCOR(2)=0.5D0 XCOR(3)=0.D0 POIDS=0.2D0/3.D0 IF (IRET.NE.0) GOTO 9999 XCOR(1)=1.D0/3.D0 XCOR(2)=1.D0/3.D0 XCOR(3)=1-XCOR(1)-XCOR(2) POIDS=0.225D0 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAT2-1-1 * Sur un triangle : cubature d'ordre 1 à 1 point * espace de référence de dimension 2 * * In INIPG : SEGINI PGCOUR $ 1,1,2, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D1 XCOR(2)=Y1D1 XCOR(3)=1-XCOR(1)-XCOR(2) IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAT2-2-3A * Sur un triangle : cubature d'ordre 2 à 3 points * espace de référence de dimension 2 * * In INIPG : SEGINI PGCOUR $ 2,3,2, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D2 XCOR(2)=Y1D2 XCOR(3)=1-XCOR(1)-XCOR(2) IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GPT2-3-4 * Sur un triangle : méthode gauss-produit conique d'ordre 3 à 4 points * espace de référence de dimension 2 * * In INIPG : SEGINI PGCOUR $ 3,4,2, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 * * Il faut remettre les points de Gauss-Legendre sur [0,1] * à la place de [-1,1] * SEGINI,PGPRO2=PGPRO1 DO 1 IPG=1,PGPRO2.XCOPG(/2) PGPRO2.XCOPG(1,IPG)=(1.D0+PGPRO2.XCOPG(1,IPG))*0.5D0 PGPRO2.XPOPG(IPG)=PGPRO2.XPOPG(IPG)*0.5D0 1 CONTINUE SEGDES PGPRO2 PGPRO1=PGPRO2 IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAT2-4-6A * Sur un triangle : cubature d'ordre 4 à 6 points * espace de référence de dimension 2 * * In INIPG : SEGINI PGCOUR $ 4,6,2, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D4 XCOR(2)=Y1D4 XCOR(3)=1-XCOR(1)-XCOR(2) IF (IRET.NE.0) GOTO 9999 XCOR(1)=X2D4 XCOR(2)=Y2D4 XCOR(3)=1-XCOR(1)-XCOR(2) IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAT2-5-7 * Sur un triangle : cubature d'ordre 5 à 7 points * espace de référence de dimension 2 * * In INIPG : SEGINI PGCOUR $ 5,7,2, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D5 XCOR(2)=Y1D5 XCOR(3)=1-XCOR(1)-XCOR(2) IF (IRET.NE.0) GOTO 9999 XCOR(1)=X2D5 XCOR(2)=Y2D5 XCOR(3)=1-XCOR(1)-XCOR(2) IF (IRET.NE.0) GOTO 9999 XCOR(1)=X3D5 XCOR(2)=Y3D5 XCOR(3)=1-XCOR(1)-XCOR(2) IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GPT2-5-9 * Sur un triangle : méthode gauss-produit conique d'ordre 5 à 9 points * espace de référence de dimension 2 * * In INIPG : SEGINI PGCOUR $ 5,9,2, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 * * Il faut remettre les points de Gauss-Legendre sur [0,1] * à la place de [-1,1] * SEGINI,PGPRO2=PGPRO1 DO 3 IPG=1,PGPRO2.XCOPG(/2) PGPRO2.XCOPG(1,IPG)=(1.D0+PGPRO2.XCOPG(1,IPG))*0.5D0 PGPRO2.XPOPG(IPG)=PGPRO2.XPOPG(IPG)*0.5D0 3 CONTINUE SEGDES PGPRO2 PGPRO1=PGPRO2 IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAT2-7-12 * Sur un triangle : cubature d'ordre 7 à 12 points * espace de référence de dimension 2 * * In INIPG : SEGINI PGCOUR $ 7,12,2, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D7 XCOR(2)=Y1D7 XCOR(3)=1-XCOR(1)-XCOR(2) IF (IRET.NE.0) GOTO 9999 XCOR(1)=X2D7 XCOR(2)=Y2D7 XCOR(3)=1-XCOR(1)-XCOR(2) IF (IRET.NE.0) GOTO 9999 XCOR(1)=X3D7 XCOR(2)=Y3D7 XCOR(3)=1-XCOR(1)-XCOR(2) IF (IRET.NE.0) GOTO 9999 XCOR(1)=X4D7 XCOR(2)=Y4D7 XCOR(3)=1-XCOR(1)-XCOR(2) IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GPT2-7-16 * Sur un triangle : méthode gauss-produit conique d'ordre 7 à 16 points * espace de référence de dimension 2 * * In INIPG : SEGINI PGCOUR $ 7,16,2, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 * * Il faut remettre les points de Gauss-Legendre sur [0,1] * à la place de [-1,1] * SEGINI,PGPRO2=PGPRO1 DO 5 IPG=1,PGPRO2.XCOPG(/2) PGPRO2.XCOPG(1,IPG)=(1.D0+PGPRO2.XCOPG(1,IPG))*0.5D0 PGPRO2.XPOPG(IPG)=PGPRO2.XPOPG(IPG)*0.5D0 5 CONTINUE SEGDES PGPRO2 PGPRO1=PGPRO2 IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Normal termination * IRET=0 RETURN * * Format handling * * * Error handling * 9999 CONTINUE IRET=1 WRITE(IOIMP,*) 'An error was detected in subroutine ingatr' RETURN * * End of subroutine INGATR * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales