ingate
C INGATE SOURCE GOUNAND 21/06/02 21:16:43 11022 IMPLICIT REAL*8 (A-H,O-Z) IMPLICIT INTEGER (I-N) C*********************************************************************** C NOM : INGATE 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 tétraèdre (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, GT3FS9, GT3F10, C 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, 22/10/99, version initiale C HISTORIQUE : v1, 22/10/99, création C HISTORIQUE : 29/5/00 rajout ordre 6 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 -\zeta * L2 = \ksi * L3 = \eta * L4 = \zeta INTEGER DIMSRF PARAMETER(DIMSRF=3) REAL*8 XCOR(DIMSRF+1) * * Générateurs pour la cubature de degré 1 à 1 point : GAT3-1-1 : * - [ Fully symmetric ] REAL*8 X1D1,Y1D1,Z1D1,P1D1 PARAMETER (X1D1=1.D0/4.D0) PARAMETER (Y1D1=1.D0/4.D0) PARAMETER (Z1D1=1.D0/4.D0) PARAMETER (P1D1=1.D0/6.D0) * * Générateurs pour la cubature de degré 2 à 4 points : GAT3-2-4B : * - [ Fully symmetric ] REAL*8 X1D2,Y1D2,Z1D2,P1D2 PARAMETER (X1D2=0.138196601125010515179541316563436D0) PARAMETER (Y1D2=0.138196601125010515179541316563436D0) PARAMETER (Z1D2=0.138196601125010515179541316563436D0) PARAMETER (P1D2=1.D0/24.D0) * * Générateurs pour la cubature de degré 3 à 8 points : GAT3-3-8B : * - [ Fully symmetric ] REAL*8 X1D3,Y1D3,Z1D3,P1D3 PARAMETER (X1D3=1.D0) PARAMETER (Y1D3=0.D0) PARAMETER (Z1D3=0.D0) PARAMETER (P1D3=4.16666666666666666666666666666666D-3) * - [ Fully symmetric ] REAL*8 X2D3,Y2D3,Z2D3,P2D3 PARAMETER (X2D3=1.D0/3.D0) PARAMETER (Y2D3=1.D0/3.D0) PARAMETER (Z2D3=1.D0/3.D0) PARAMETER (P2D3=0.0375D0) * * Générateurs pour la cubature de degré 5 à 14 points : GAT3-5-14A : * - [ Fully symmetric ] REAL*8 X1D5,Y1D5,Z1D5,P1D5 PARAMETER (X1D5=0.0927352503108912264023239137370306D0) PARAMETER (Y1D5=0.0927352503108912264023239137370306D0) PARAMETER (Z1D5=0.0927352503108912264023239137370306D0) PARAMETER (P1D5=0.0122488405193936582572850342477212D0) * - [ Fully symmetric ] REAL*8 X2D5,Y2D5,Z2D5,P2D5 PARAMETER (X2D5=0.310885919263300609797345733763457D0) PARAMETER (Y2D5=0.310885919263300609797345733763457D0) PARAMETER (Z2D5=0.310885919263300609797345733763457D0) PARAMETER (P2D5=0.0187813209530026417998642753888810D0) * - [ Fully symmetric ] REAL*8 X3D5,Y3D5,Z3D5,P3D5 PARAMETER (X3D5=0.454496295874350350508119473720660D0) PARAMETER (Y3D5=0.454496295874350350508119473720660D0) PARAMETER (Z3D5=0.0455037041256496494918805262793394D0) PARAMETER (P3D5=7.09100346284691107301157135337624D-3) * * Générateurs pour la cubature de degré 6 à 24 points : GAT3-6-24 : * - [ Fully symmetric ] REAL*8 X1D6,Y1D6,Z1D6,P1D6 PARAMETER (X1D6=0.214602871259152029288839219386284D0) PARAMETER (Y1D6=0.214602871259152029288839219386284D0) PARAMETER (Z1D6=0.214602871259152029288839219386284D0) PARAMETER (P1D6=6.65379170969458201661510459291332D-3) * - [ Fully symmetric ] REAL*8 X2D6,Y2D6,Z2D6,P2D6 PARAMETER (X2D6=0.0406739585346113531155794489564100D0) PARAMETER (Y2D6=0.0406739585346113531155794489564100D0) PARAMETER (Z2D6=0.0406739585346113531155794489564100D0) PARAMETER (P2D6=1.67953517588677382466887290765614D-3) * - [ Fully symmetric ] REAL*8 X3D6,Y3D6,Z3D6,P3D6 PARAMETER (X3D6=0.322337890142275510343994470762492D0) PARAMETER (Y3D6=0.322337890142275510343994470762492D0) PARAMETER (Z3D6=0.322337890142275510343994470762492D0) PARAMETER (P3D6=9.22619692394245368252554630895433D-3) * - [ Fully symmetric ] REAL*8 X4D6,Y4D6,Z4D6,P4D6 PARAMETER (X4D6=0.0636610018750175252992355276057269D0) PARAMETER (Y4D6=0.0636610018750175252992355276057269D0) PARAMETER (Z4D6=0.269672331458315808034097805727606D0) PARAMETER (P4D6=8.03571428571428571428571428571428D-3) * INTEGER NOPG * * Executable statements * IF (IMPR.GT.6) WRITE(IOIMP,*) 'Entrée dans ingate' * * Méthode de nom : NCT3-1-4 * Sur un tétraèdre : cubature d'ordre 1 à 4 points * espace de référence de dimension 3 * * In INIPG : SEGINI PGCOUR $ 1,4,3, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=1.D0 XCOR(2)=0.D0 XCOR(3)=0.D0 XCOR(4)=1-XCOR(1)-XCOR(2)-XCOR(3) IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAT3-1-1 * Sur un tétraèdre : cubature d'ordre 1 à 1 point * espace de référence de dimension 3 * * In INIPG : SEGINI PGCOUR $ 1,1,3, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D1 XCOR(2)=Y1D1 XCOR(3)=Z1D1 XCOR(4)=1-XCOR(1)-XCOR(2)-XCOR(3) IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAT3-2-4B * Sur un tétraèdre : cubature d'ordre 2 à 4 points * espace de référence de dimension 3 * * In INIPG : SEGINI PGCOUR $ 2,4,3, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D2 XCOR(2)=Y1D2 XCOR(3)=Z1D2 XCOR(4)=1-XCOR(1)-XCOR(2)-XCOR(3) IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAT3-3-8B * Sur un tétraèdre : cubature d'ordre 3 à 8 points * espace de référence de dimension 3 * * In INIPG : SEGINI PGCOUR $ 3,8,3, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D3 XCOR(2)=Y1D3 XCOR(3)=Z1D3 XCOR(4)=1-XCOR(1)-XCOR(2)-XCOR(3) IF (IRET.NE.0) GOTO 9999 XCOR(1)=X2D3 XCOR(2)=Y2D3 XCOR(3)=Z2D3 XCOR(4)=1-XCOR(1)-XCOR(2)-XCOR(3) IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAT3-5-14 * Sur un tétraèdre : cubature d'ordre 5 à 14 points * espace de référence de dimension 3 * * In INIPG : SEGINI PGCOUR $ 5,14,3, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D5 XCOR(2)=Y1D5 XCOR(3)=Z1D5 XCOR(4)=1-XCOR(1)-XCOR(2)-XCOR(3) IF (IRET.NE.0) GOTO 9999 XCOR(1)=X2D5 XCOR(2)=Y2D5 XCOR(3)=Z2D5 XCOR(4)=1-XCOR(1)-XCOR(2)-XCOR(3) IF (IRET.NE.0) GOTO 9999 XCOR(1)=X3D5 XCOR(2)=Y3D5 XCOR(3)=Z3D5 XCOR(4)=1-XCOR(1)-XCOR(2)-XCOR(3) IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GPT3-5-21 * Sur un tétraèdre : méthode gauss-produit conique d'ordre 5 à 21 points * espace de référence de dimension 3 * * In INIPG : SEGINI PGCOUR $ 5,21,3, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GPT3-5-27 * Sur un tétraèdre : méthode gauss-produit conique d'ordre 5 à 27 points * espace de référence de dimension 3 * * In INIPG : SEGINI PGCOUR $ 5,27,3, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GAT3-6-24 * Sur un tétraèdre : cubature d'ordre 6 à 24 points * espace de référence de dimension 3 * * In INIPG : SEGINI PGCOUR $ 6,24,3, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 NOPG=0 XCOR(1)=X1D6 XCOR(2)=Y1D6 XCOR(3)=Z1D6 XCOR(4)=1-XCOR(1)-XCOR(2)-XCOR(3) IF (IRET.NE.0) GOTO 9999 XCOR(1)=X2D6 XCOR(2)=Y2D6 XCOR(3)=Z2D6 XCOR(4)=1-XCOR(1)-XCOR(2)-XCOR(3) IF (IRET.NE.0) GOTO 9999 XCOR(1)=X3D6 XCOR(2)=Y3D6 XCOR(3)=Z3D6 XCOR(4)=1-XCOR(1)-XCOR(2)-XCOR(3) IF (IRET.NE.0) GOTO 9999 XCOR(1)=X4D6 XCOR(2)=Y4D6 XCOR(3)=Z4D6 XCOR(4)=1-XCOR(1)-XCOR(2)-XCOR(3) IF (IRET.NE.0) GOTO 9999 SEGDES PGCOUR MYPGS.LISPG(**)=PGCOUR * * Méthode de nom : GPT3-7-64 * Sur un tétraèdre : méthode gauss-produit conique d'ordre 7 à 64 points * espace de référence de dimension 3 * * In INIPG : SEGINI PGCOUR $ 7,64,3, $ PGCOUR, $ IMPR,IRET) IF (IRET.NE.0) GOTO 9999 IF (IRET.NE.0) GOTO 9999 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 ingate' RETURN * * End of subroutine INGATE * END
© Cast3M 2003 - Tous droits réservés.
Mentions légales