ingase
C INGASE SOURCE GOUNAND 21/06/02 21:16:41 11022 IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : INGASE 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 Gauss C à une dimension (ordre 1 à 11). C C REFERENCES : Numerical recipes (sous-programme gauleg modifié) C on a recalculé les poids et points de Gauss en REAL*16 C donc avec environ 32 (plutôt 31) chiffres significatifs 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, GCSINO, GCCESY 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, 19/10/99, version initiale C HISTORIQUE : v1, 19/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 * INTEGER IMPR,IRET * INTEGER DIMSRF PARAMETER(DIMSRF=1) REAL*8 XCOR(DIMSRF) REAL*8 POIDS * * Pour les méthodes sur un segment, tous les générateurs sont * à symétrie centrales * * Générateurs pour la méthode de Gauss de degré 1 : GAC1-1-1 : * - l'origine REAL*8 X0D1,P0D1 PARAMETER (X0D1=0.D0) PARAMETER (P0D1=2.D0) * * Générateurs pour la méthode de Gauss de degré 3 : GAC1-3-2 : * - le générateur symétrique (1./\sqrt{3.});(1.) REAL*8 X1D3,P1D3 PARAMETER (X1D3=0.57735026918962576450914878050195D0) PARAMETER (P1D3=1.D0) * * Générateurs pour la méthode de Gauss de degré 5 : GAC1-5-3 : * - l'origine REAL*8 X0D5,P0D5 PARAMETER (X0D5=0.D0) PARAMETER (P0D5=8.D0/9.D0) * - le générateur symétrique (\sqrt{3./5.});(5./9.) REAL*8 X1D5,P1D5 PARAMETER (X1D5=0.77459666924148337703585307995648D0) PARAMETER (P1D5=5.D0/9.D0) * * Générateurs pour la méthode de Gauss de degré 7 : GAC1-7-4 : * - les générateurs symétriques : * (\sqrt{\frac{3.-2\sqrt{6./5.}}{7.}});(1./2.+1./(6\sqrt{6./5.})) * (\sqrt{\frac{3.+2\sqrt{6./5.}}{7.}});(1./2.-1./(6\sqrt{6./5.})) REAL*8 X1D7,P1D7,X2D7,P2D7 PARAMETER (X1D7=0.33998104358485626480266575910324D0) PARAMETER (P1D7=0.65214515486254614262693605077800D0) PARAMETER (X2D7=0.86113631159405257522394648889281D0) PARAMETER (P2D7=0.34785484513745385737306394922200D0) * * Générateurs pour la méthode de Gauss de degré 9 : GAC1-9-5 : * - l'origine REAL*8 X0D9,P0D9 PARAMETER (X0D9=0.D0) PARAMETER (P0D9=128.D0/225.D0) * - les générateurs symétriques * ((1./3.)\sqrt{5.-4.\sqrt{5./14.}});(161./450.+13./(180.\sqrt{5./14.})) * ((1./3.)\sqrt{5.+4.\sqrt{5./14.}});(161./450.-13./(180.\sqrt{5./14.})) REAL*8 X1D9,P1D9,X2D9,P2D9 PARAMETER (X1D9=0.53846931010568309103631442070021D0) PARAMETER (P1D9=0.47862867049936646804129151483564D0) PARAMETER (X2D9=0.90617984593866399279762687829939D0) PARAMETER (P2D9=0.23692688505618908751426404071992D0) * * Générateurs pour la méthode de Gauss de degré 11 : GAC1-11-6 : * - les générateurs symétriques : REAL*8 X1D11,P1D11,X2D11,P2D11,X3D11,P3D11 PARAMETER (X1D11=0.23861918608319690863050172168071D0) PARAMETER (P1D11=0.46791393457269104738987034398956D0) PARAMETER (X2D11=0.66120938646626451366139959501990D0) PARAMETER (P2D11=0.36076157304813860756983351383773D0) PARAMETER (X3D11=0.93246951420315202781230155449399D0) PARAMETER (P3D11=0.17132449237917034504029614217274D0) * INTEGER NOPG * * Executable statements * IF (IMPR.GT.6) WRITE(IOIMP,*) 'Entrée dans ingase' * * Méthode de nom : NCC1-1-2 * Sur un segment : Cubature d'ordre 1 à 2 points * espace de référence de dimension 1 * * In INIPG : SEGINI PGCOUR $ 1,2,1, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=-1.D0 XCOR(1)=1.D0 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : NCC1-3-3 * Sur un segment : Cubature d'ordre 3 à 3 points * espace de référence de dimension 1 * * In INIPG : SEGINI PGCOUR $ 3,3,1, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=0.D0 POIDS=4.D0/3.D0 XCOR(1)=1.D0 POIDS=1.D0/3.D0 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAC1-1-1 * Sur un segment : méthode de Gauss d'ordre 1 à 1 point * espace de référence de dimension 1 * * In INIPG : SEGINI PGCOUR $ 1,1,1, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X0D1 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAC1-3-2 * Sur un segment : méthode de Gauss d'ordre 3 à 2 points * espace de référence de dimension 1 * * In INIPG : SEGINI PGCOUR $ 3,2,1, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D3 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAC1-5-3 * Sur un segment : méthode de Gauss d'ordre 5 à 3 points * espace de référence de dimension 1 * * In INIPG : SEGINI PGCOUR $ 5,3,1, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X0D5 IF (IRET.NE.0) GOTO 9999 XCOR(1)=X1D5 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAC1-7-4 * Sur un segment : méthode de Gauss d'ordre 7 à 4 points * espace de référence de dimension 1 * * In INIPG : SEGINI PGCOUR $ 7,4,1, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D7 IF (IRET.NE.0) GOTO 9999 XCOR(1)=X2D7 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAC1-9-5 * Sur un segment : méthode de Gauss d'ordre 9 à 5 points * espace de référence de dimension 1 * * In INIPG : SEGINI PGCOUR $ 9,5,1, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X0D9 IF (IRET.NE.0) GOTO 9999 XCOR(1)=X1D9 IF (IRET.NE.0) GOTO 9999 XCOR(1)=X2D9 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAC1-11-6 * Sur un segment : méthode de Gauss d'ordre 11 à 6 points * espace de référence de dimension 1 * * In INIPG : SEGINI PGCOUR $ 11,6,1, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D11 IF (IRET.NE.0) GOTO 9999 XCOR(1)=X2D11 IF (IRET.NE.0) GOTO 9999 XCOR(1)=X3D11 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 ingase' RETURN * * End of subroutine INGASE * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales