From a94858e424d3d1d96958db29bf2abe473cffa233 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9rard=20Rio?= Date: Mon, 12 Jun 2023 17:30:26 +0200 Subject: [PATCH] =?UTF-8?q?modifications=20d'=C3=A9dition,=20tabulation,?= =?UTF-8?q?=20orthographe=20...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Geometrie/ElemGeom/volume/GeomHexalin1.cc | 1 - .../Geometrie/ElemGeom/volume/GeomHexaqua.cc | 1 - .../Geometrie/ElemGeom/volume/GeomPentaCom.cc | 68 +-- .../ElemGeom/volume/GeomPentaedre.cc | 1 - .../ElemGeom/volume/GeomTetraedre.cc | 1 - Elements/Mecanique/Biellette/Met_pout2D.h | 34 +- Elements/Mecanique/Biellette/PoutSimple1.cc | 354 ++++-------- Elements/Mecanique/Biellette/PoutSimple1.h | 208 ++++--- Elements/Mecanique/Deformation_gene/PiPoCo.h | 166 +++--- Elements/Mecanique/Pentaedre/PentaL.cc | 105 ++-- Elements/Mecanique/Pentaedre/PentaL.h | 98 ++-- Elements/Mecanique/Pentaedre/PentaMemb.cc | 509 ++++++------------ Elements/Mecanique/Pentaedre/PentaMemb.h | 499 +++++++++-------- Maillage/LesMaillages.cc | 6 +- Maillage/LesMaillages2.cc | 6 +- Maillage/Maillage.cc | 6 +- Maillage/Maillage2.cc | 6 +- Maillage/Maillage3.cc | 6 +- Maillage/maillage4.cc | 6 +- Resultats/MAPLE/Visualisation_maple.h | 2 +- TypeBase/List_io.h | 2 +- Util/Courbes/Fonction_nD.cc | 6 +- Util/MathUtil2.cc | 4 +- comportement/Hyper_elastique/Hyper3D.cc | 2 +- comportement/Hyper_elastique/Hyper3DN.cc | 2 +- .../Hyper_elastique/IsoHyper3DFavier3.cc | 2 +- .../Hyper_elastique/IsoHyper3DOrgeas1.cc | 2 +- .../Hyper_elastique/IsoHyper3DOrgeas2.cc | 2 +- comportement/Hyper_elastique/IsoHyperBulk3.cc | 2 +- .../Hyper_elastique/IsoHyperBulk_gene.cc | 2 +- comportement/Hyper_elastique/TreloarN.cc | 2 +- comportement/Loi_comp_abstraite.h | 2 +- comportement/iso_elas_hooke/Loi_iso_elas3D.cc | 2 +- comportement/lois_combinees/LoiCritere.h | 2 +- 34 files changed, 875 insertions(+), 1242 deletions(-) delete mode 100755 Elements/Geometrie/ElemGeom/volume/GeomHexalin1.cc delete mode 100755 Elements/Geometrie/ElemGeom/volume/GeomHexaqua.cc delete mode 100755 Elements/Geometrie/ElemGeom/volume/GeomPentaedre.cc delete mode 100755 Elements/Geometrie/ElemGeom/volume/GeomTetraedre.cc diff --git a/Elements/Geometrie/ElemGeom/volume/GeomHexalin1.cc b/Elements/Geometrie/ElemGeom/volume/GeomHexalin1.cc deleted file mode 100755 index 086d067..0000000 --- a/Elements/Geometrie/ElemGeom/volume/GeomHexalin1.cc +++ /dev/null @@ -1 +0,0 @@ - #include "GeomHexalin.h" #include #include "GeomSeg.h" #include "GeomQuadrangle.h" #include "MathUtil.h" // constructeur // la dimension est 3, on a 8 pt d'integration, 8 noeuds et 6 faces, 12 aretes GeomHexalin::GeomHexalin() : ElemGeom(3,8,8,6,12) { // coordonnees des points d'integration double a = 1./sqrt(3); ptInteg(1) = Coordonnee(a,a,a); ptInteg(2) = Coordonnee(a,a,-a); ptInteg(3) = Coordonnee(a,-a,a); ptInteg(4) = Coordonnee(a,-a,-a); ptInteg(5) = Coordonnee(-a,a,a); ptInteg(6) = Coordonnee(-a,a,-a); ptInteg(7) = Coordonnee(-a,-a,a); ptInteg(8) = Coordonnee(-a,-a,-a); // poids d'integration for (int i =1;i<=Nbi();i++) WI(i)= 1.; //-------------------------------- //def des arretes //-------------------------------- int nbil =1; // nb de pt d'integ par ligne int nbnel =2; // nb de noeud du segment seg(1) = new GeomSeg(nbil,nbnel); for (int il=2;il<= NBSE; il++) // ici NBSE = 12 seg(il) = seg(1); // def des tableaux de connection des noeuds des aretes for (int i =1;i<=NBSE;i++) NONS(i).Change_taille(2); // la description est fait selon le fichier EIMail NONS(1)(1) = 1;NONS(1)(2) = 2;NONS(2)(1) = 2;NONS(2)(2) = 3; NONS(3)(1) = 3;NONS(3)(2) = 4;NONS(4)(1) = 4;NONS(4)(2) = 1; NONS(5)(1) = 1;NONS(5)(2) = 5;NONS(6)(1) = 2;NONS(6)(2) = 6; NONS(7)(1) = 3;NONS(7)(2) = 7;NONS(8)(1) = 4;NONS(8)(2) = 8; NONS(9)(1) = 5;NONS(9)(2) = 6;NONS(10)(1) = 6;NONS(10)(2) = 7; NONS(11)(1) = 7;NONS(11)(2) = 8;NONS(12)(1) = 8;NONS(12)(2) = 5; //-------------------------------- //def des faces //-------------------------------- int nbis =4; // nb de pt d'integ par facee int nbnes =4; // nb de noeud de la face face(1) = new GeomQuadrangle(nbis,nbnes); for (int is=2;is<= NBFE; is++) // ici NBFE = 6 face(is) = face(1); // def des tableaux de connection des noeuds des faces for (int i =1;i<=NBFE;i++) NONF(i).Change_taille(4); // connection entre les noeuds des faces et les noeuds des elements NONF(1)(1)= 1; NONF(1)(2)= 4; NONF(1)(3)= 3; NONF(1)(4)= 2; NONF(2)(1)= 1; NONF(2)(2)= 5; NONF(2)(3)= 8; NONF(2)(4)= 4; NONF(3)(1)= 1; NONF(3)(2)= 2; NONF(3)(3)= 6; NONF(3)(4)= 5; NONF(4)(1)= 5; NONF(4)(2)= 6; NONF(4)(3)= 7; NONF(4)(4)= 8; NONF(5)(1)= 2; NONF(5)(2)= 3; NONF(5)(3)= 7; NONF(5)(4)= 6; NONF(6)(1)= 3; NONF(6)(2)= 4; NONF(6)(3)= 8; NONF(6)(4)= 7; // fonctions d'interpolation globales PHI(6,7) = 0.1314458557658023; PHI(1,5) = 0.3522081090086454E-1; PHI(4,5) = 0.1314458557658023; PHI(4,7) = 0.3522081090086454E-1; PHI(3,2) = 0.4905626121623443; PHI(7,6) = 0.3522081090086454E-1; PHI(2,4) = 0.4905626121623443; PHI(4,3) = 0.9437387837655943E-2; PHI(5,5) = 0.1314458557658023; PHI(3,6) = 0.1314458557658023; PHI(2,8) = 0.1314458557658023; PHI(7,7) = 0.3522081090086454E-1; PHI(1,2) = 0.3522081090086454E-1; PHI(8,4) = 0.9437387837655943E-2; PHI(2,1) = 0.3522081090086454E-1; PHI(4,2) = 0.1314458557658023; PHI(1,6) = 0.1314458557658023; PHI(3,3) = 0.3522081090086454E-1; PHI(3,7) = 0.9437387837655943E-2; PHI(6,5) = 0.3522081090086454E-1; PHI(5,3) = 0.1314458557658023; PHI(8,5) = 0.4905626121623443; PHI(6,8) = 0.3522081090086454E-1; PHI(4,6) = 0.4905626121623443; PHI(8,6) = 0.1314458557658023; PHI(1,1) = 0.9437387837655943E-2; PHI(2,5) = 0.9437387837655943E-2; PHI(6,4) = 0.1314458557658023; PHI(6,6) = 0.9437387837655943E-2; PHI(3,4) = 0.1314458557658023; PHI(7,4) = 0.3522081090086454E-1; PHI(4,8) = 0.1314458557658023; PHI(1,3) = 0.3522081090086454E-1; PHI(1,7) = 0.1314458557658023; PHI(8,8) = 0.3522081090086454E-1; PHI(3,8) = 0.3522081090086454E-1; PHI(5,6) = 0.3522081090086454E-1; PHI(2,2) = 0.1314458557658023; PHI(8,2) = 0.3522081090086454E-1; PHI(8,3) = 0.3522081090086454E-1; PHI(5,8) = 0.1314458557658023; PHI(2,6) = 0.3522081090086454E-1; PHI(8,7) = 0.1314458557658023; PHI(4,1) = 0.3522081090086454E-1; PHI(1,8) = 0.4905626121623443; PHI(5,2) = 0.9437387837655943E-2; PHI(6,2) = 0.3522081090086454E-1; PHI(7,2) = 0.1314458557658023; PHI(3,1) = 0.1314458557658023; PHI(5,7) = 0.4905626121623443; PHI(7,1) = 0.4905626121623443; PHI(5,4) = 0.3522081090086454E-1; PHI(7,5) = 0.1314458557658023; PHI(7,8) = 0.9437387837655943E-2; PHI(7,3) = 0.1314458557658023; PHI(1,4) = 0.1314458557658023; PHI(6,1) = 0.1314458557658023; PHI(4,4) = 0.3522081090086454E-1; PHI(8,1) = 0.1314458557658023; PHI(5,1) = 0.3522081090086454E-1; PHI(6,3) = 0.4905626121623443; PHI(3,5) = 0.3522081090086454E-1; PHI(2,3) = 0.1314458557658023; PHI(2,7) = 0.3522081090086454E-1; // derivees des fonctions d'interpolations DPHI(3,3,5) = -0.8333333333333338E-1; DPHI(2,3,2) = 0.3110042339640733; DPHI(2,7,3) = 0.3110042339640733; DPHI(3,7,4) = 0.8333333333333338E-1; DPHI(1,5,4) = -0.8333333333333338E-1; DPHI(2,8,6) = 0.8333333333333338E-1; DPHI(3,2,3) = -0.3110042339640733; DPHI(2,4,6) = 0.3110042339640733; DPHI(3,6,1) = 0.8333333333333338E-1; DPHI(3,2,7) = -0.8333333333333338E-1; DPHI(1,5,1) = -0.8333333333333338E-1; DPHI(1,8,3) = -0.8333333333333338E-1; DPHI(1,1,7) = -0.8333333333333338E-1; DPHI(3,6,7) = 0.8333333333333338E-1; DPHI(1,6,3) = 0.3110042339640733; DPHI(3,3,1) = -0.3110042339640733; DPHI(3,3,6) = -0.8333333333333338E-1; DPHI(2,1,2) = -0.8333333333333338E-1; DPHI(3,6,6) = 0.2232909936926024E-1; DPHI(3,4,2) = -0.8333333333333338E-1; DPHI(3,8,4) = 0.2232909936926024E-1; DPHI(3,4,8) = -0.8333333333333338E-1; DPHI(2,4,1) = 0.2232909936926024E-1; DPHI(2,5,7) = -0.3110042339640733; DPHI(1,2,2) = 0.8333333333333338E-1; DPHI(3,8,8) = 0.8333333333333338E-1; DPHI(1,1,6) = -0.8333333333333338E-1; DPHI(2,5,6) = -0.8333333333333338E-1; DPHI(3,7,1) = 0.3110042339640733; DPHI(2,7,6) = 0.2232909936926024E-1; DPHI(3,3,7) = -0.2232909936926024E-1; DPHI(1,7,5) = 0.3110042339640733; DPHI(2,6,8) = -0.2232909936926024E-1; DPHI(2,4,3) = 0.2232909936926024E-1; DPHI(2,6,5) = -0.8333333333333338E-1; DPHI(1,7,3) = 0.8333333333333338E-1; DPHI(2,7,4) = 0.8333333333333338E-1; DPHI(1,8,6) = -0.8333333333333338E-1; DPHI(2,2,3) = -0.8333333333333338E-1; DPHI(3,1,1) = -0.2232909936926024E-1; DPHI(2,5,3) = -0.8333333333333338E-1; DPHI(3,2,8) = -0.8333333333333338E-1; DPHI(3,5,2) = 0.2232909936926024E-1; DPHI(1,6,6) = 0.2232909936926024E-1; DPHI(3,1,4) = -0.8333333333333338E-1; DPHI(1,8,4) = -0.2232909936926024E-1; DPHI(2,6,7) = -0.8333333333333338E-1; DPHI(1,3,3) = 0.2232909936926024E-1; DPHI(3,4,5) = -0.3110042339640733; DPHI(2,3,1) = 0.8333333333333338E-1; DPHI(1,7,1) = 0.3110042339640733; DPHI(2,2,5) = -0.2232909936926024E-1; DPHI(1,3,7) = 0.2232909936926024E-1; DPHI(3,7,2) = 0.3110042339640733; DPHI(3,2,4) = -0.3110042339640733; DPHI(2,3,6) = 0.8333333333333338E-1; DPHI(2,2,4) = -0.3110042339640733; DPHI(1,1,2) = -0.8333333333333338E-1; DPHI(2,1,8) = -0.3110042339640733; DPHI(2,4,2) = 0.8333333333333338E-1; DPHI(3,5,4) = 0.8333333333333338E-1; DPHI(2,5,5) = -0.3110042339640733; DPHI(1,4,1) = -0.8333333333333338E-1; DPHI(1,7,2) = 0.8333333333333338E-1; DPHI(2,8,2) = 0.2232909936926024E-1; DPHI(2,3,4) = 0.3110042339640733; DPHI(3,5,8) = 0.3110042339640733; DPHI(2,8,8) = 0.8333333333333338E-1; DPHI(1,1,1) = -0.2232909936926024E-1; DPHI(3,7,7) = 0.2232909936926024E-1; DPHI(1,7,6) = 0.8333333333333338E-1; DPHI(1,5,2) = -0.2232909936926024E-1; DPHI(1,1,5) = -0.2232909936926024E-1; DPHI(1,6,8) = 0.8333333333333338E-1; DPHI(1,1,3) = -0.8333333333333338E-1; DPHI(3,2,2) = -0.8333333333333338E-1; DPHI(1,6,5) = 0.8333333333333338E-1; DPHI(1,8,1) = -0.3110042339640733; DPHI(1,4,7) = -0.2232909936926024E-1; DPHI(1,2,3) = 0.8333333333333338E-1; DPHI(2,2,8) = -0.8333333333333338E-1; DPHI(1,4,4) = -0.8333333333333338E-1; DPHI(2,1,4) = -0.8333333333333338E-1; DPHI(1,8,7) = -0.8333333333333338E-1; DPHI(1,2,1) = 0.2232909936926024E-1; DPHI(3,1,6) = -0.8333333333333338E-1; DPHI(2,4,5) = 0.8333333333333338E-1; DPHI(1,3,1) = 0.8333333333333338E-1; DPHI(1,6,2) = 0.2232909936926024E-1; DPHI(3,7,5) = 0.8333333333333338E-1; DPHI(2,7,2) = 0.8333333333333338E-1; DPHI(1,2,4) = 0.3110042339640733; DPHI(3,3,2) = -0.3110042339640733; DPHI(3,7,3) = 0.8333333333333338E-1; DPHI(1,5,5) = -0.8333333333333338E-1; DPHI(3,8,5) = 0.3110042339640733; DPHI(1,8,2) = -0.8333333333333338E-1; DPHI(1,3,4) = 0.8333333333333338E-1; DPHI(3,6,4) = 0.3110042339640733; DPHI(2,7,7) = 0.8333333333333338E-1; DPHI(3,4,6) = -0.3110042339640733; DPHI(3,3,3) = -0.8333333333333338E-1; DPHI(3,2,5) = -0.2232909936926024E-1; DPHI(2,6,3) = -0.3110042339640733; DPHI(3,4,7) = -0.8333333333333338E-1; DPHI(2,5,8) = -0.8333333333333338E-1; DPHI(3,1,3) = -0.8333333333333338E-1; DPHI(2,3,5) = 0.2232909936926024E-1; DPHI(3,5,1) = 0.2232909936926024E-1; DPHI(1,3,2) = 0.3110042339640733; DPHI(3,1,7) = -0.3110042339640733; DPHI(3,4,1) = -0.8333333333333338E-1; DPHI(3,5,7) = 0.3110042339640733; DPHI(1,4,5) = -0.8333333333333338E-1; DPHI(1,4,6) = -0.3110042339640733; DPHI(3,7,6) = 0.8333333333333338E-1; DPHI(2,6,1) = -0.3110042339640733; DPHI(3,1,5) = -0.8333333333333338E-1; DPHI(2,7,5) = 0.8333333333333338E-1; DPHI(2,2,7) = -0.2232909936926024E-1; DPHI(3,2,6) = -0.2232909936926024E-1; DPHI(3,6,8) = 0.8333333333333338E-1; DPHI(3,4,3) = -0.2232909936926024E-1; DPHI(3,8,7) = 0.8333333333333338E-1; DPHI(3,3,8) = -0.2232909936926024E-1; DPHI(3,8,1) = 0.8333333333333338E-1; DPHI(1,8,5) = -0.3110042339640733; DPHI(3,8,3) = 0.2232909936926024E-1; DPHI(2,6,4) = -0.8333333333333338E-1; DPHI(3,7,8) = 0.2232909936926024E-1; DPHI(2,1,3) = -0.2232909936926024E-1; DPHI(1,7,7) = 0.8333333333333338E-1; DPHI(2,6,6) = -0.2232909936926024E-1; DPHI(2,8,4) = 0.2232909936926024E-1; DPHI(2,4,8) = 0.3110042339640733; DPHI(1,5,7) = -0.3110042339640733; DPHI(2,7,8) = 0.2232909936926024E-1; DPHI(2,3,3) = 0.8333333333333338E-1; DPHI(1,5,6) = -0.2232909936926024E-1; DPHI(2,7,1) = 0.3110042339640733; DPHI(3,6,2) = 0.8333333333333338E-1; DPHI(2,3,7) = 0.2232909936926024E-1; DPHI(1,5,8) = -0.8333333333333338E-1; DPHI(1,4,3) = -0.2232909936926024E-1; DPHI(1,3,5) = 0.8333333333333338E-1; DPHI(3,1,8) = -0.3110042339640733; DPHI(2,5,1) = -0.8333333333333338E-1; DPHI(2,1,7) = -0.8333333333333338E-1; DPHI(1,7,4) = 0.2232909936926024E-1; DPHI(3,8,2) = 0.8333333333333338E-1; DPHI(3,3,4) = -0.8333333333333338E-1; DPHI(3,5,5) = 0.8333333333333338E-1; DPHI(2,1,1) = -0.2232909936926024E-1; DPHI(1,5,3) = -0.3110042339640733; DPHI(1,6,1) = 0.8333333333333338E-1; DPHI(2,5,2) = -0.2232909936926024E-1; DPHI(2,1,5) = -0.8333333333333338E-1; DPHI(1,2,7) = 0.8333333333333338E-1; DPHI(2,2,6) = -0.8333333333333338E-1; DPHI(1,6,7) = 0.3110042339640733; DPHI(2,3,8) = 0.8333333333333338E-1; DPHI(2,8,1) = 0.8333333333333338E-1; DPHI(3,4,4) = -0.2232909936926024E-1; DPHI(2,4,7) = 0.8333333333333338E-1; DPHI(1,2,5) = 0.2232909936926024E-1; DPHI(1,3,6) = 0.3110042339640733; DPHI(2,8,5) = 0.3110042339640733; DPHI(1,6,4) = 0.8333333333333338E-1; DPHI(1,7,8) = 0.2232909936926024E-1; DPHI(3,2,1) = -0.8333333333333338E-1; DPHI(1,1,8) = -0.3110042339640733; DPHI(1,4,2) = -0.3110042339640733; DPHI(2,8,7) = 0.3110042339640733; DPHI(1,4,8) = -0.8333333333333338E-1; DPHI(2,5,4) = -0.2232909936926024E-1; DPHI(3,8,6) = 0.3110042339640733; DPHI(2,2,1) = -0.8333333333333338E-1; DPHI(1,8,8) = -0.2232909936926024E-1; DPHI(3,5,3) = 0.8333333333333338E-1; DPHI(2,6,2) = -0.8333333333333338E-1; DPHI(2,8,3) = 0.8333333333333338E-1; DPHI(1,2,6) = 0.8333333333333338E-1; DPHI(2,2,2) = -0.3110042339640733; DPHI(3,1,2) = -0.2232909936926024E-1; DPHI(1,2,8) = 0.3110042339640733; DPHI(3,6,5) = 0.2232909936926024E-1; DPHI(1,1,4) = -0.3110042339640733; DPHI(3,6,3) = 0.3110042339640733; DPHI(2,1,6) = -0.3110042339640733; DPHI(1,3,8) = 0.8333333333333338E-1; DPHI(3,5,6) = 0.8333333333333338E-1; DPHI(2,4,4) = 0.8333333333333338E-1; }; \ No newline at end of file diff --git a/Elements/Geometrie/ElemGeom/volume/GeomHexaqua.cc b/Elements/Geometrie/ElemGeom/volume/GeomHexaqua.cc deleted file mode 100755 index 816e2ac..0000000 --- a/Elements/Geometrie/ElemGeom/volume/GeomHexaqua.cc +++ /dev/null @@ -1 +0,0 @@ -************************************************************************ * UNIVERSITE DE BRETAGNE OCCIDENTALE --- I.U.T. DE LORIENT * ************************************************************************ * LABORATOIRE DE GENIE MECANIQUE ET PRODUCTIQUE * * Tel 97.05.94.11 * * Centre de Genie Industriel 56520 GUIDEL-PLAGES * ************************************************************************ ************************************************************************ * * * DATE: Thu Feb 4 12:58:37 WET 1993 * * $ * * AUTEUR: J-P HILY * * $ * * PROJET: EF3 * * $ * ************************************************************************ ************************************************************************ * * * VERIFICATION: * * * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * MODIFICATIONS: * * * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * ! ! ! ! * * ! ! ! ! * * * * $ * * * ************************************************************************ ************************************************************************ * * SUBROUTINE HEXAQUA (NBNE,NBI,PHI,DPHI,WI, & NBFE,NBNF,NONF,NBIS,PHIS,DPHIS,WIS) * $ * implicit none * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * BUT: Valeurs des fonctions d'interpolations et de leurs * * derivees aux points d'integration dans le cas * * quadratique. * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * VARIABLES: * * ..................................... en entree * * * integer NBNE ! nombre de noeuds par element integer NBFE ! nombre de faces par element integer NBNF ! nombre de noeuds par face integer NONF(NBNF,NBFE) ! connexion des noeuds des faces par ! rapport a ceux des elements integer NBI ! nombre de point d'integration pour les elements integer NBIS ! nombre de point d'integration pour les faces * * * ..................................... en sortie * * * c pour les elements real*8 PHI(NBNE,NBI) ! fonctions d'interpolation real*8 DPHI(3,NBNE,NBI) ! leurs derivees real*8 WI(NBI) ! poids d'integration c pour les faces real*8 PHIS(NBNF,NBIS) ! fonctions d'interpolation real*8 DPHIS(2,NBNF,NBIS)! leurs derivees real*8 WIS(NBIS) ! poids d'integration * $$ * * ....................................... interne * * * integer NI * * ************************************************************************ ************************************************************************ * * * ELEMENT DE REFERENCE , POINTS D'INTEGRATION: * * * * Nicolas COUTY 04/12/95 * * Source : Pour l'element : Modulef Guide No 2, p 139 * * Source : Pour les fonctions d'interpolation : * * Dhatt et Touzot p 135 * * + donnee suivante des valeurs des fonctions * * d'interpolation aux points d'integration * * (qui a permis la verification) * * * *----------------------------------------------------------------------* * * |zeta * | * 5____________20__|________8 * |\ | |\ * | \ | | \ * | 17 | | 19 * | \ | | \ * 13 \ | 16 \ * | 6\___________18___________\7 * | | | | | * | | | | | * | | -------------|----eta * 1|_____|______12___\______| | * \ 14 \ \4 15 * \ | \ \ | * 9 | \ 11 | * \ | \ \ | * \ | \ \ | * 2\|___________10____\_____\|3 * \ * \xi * * Points d'integration (cf hexalin.f) * a=1/racine(3) * Pt1 (a,a,a) ; Pt2 (a,a,-a) ; Pt3 (a,-a,a) ; Pt4 (a,-a,-a) * Pt5 (-a,a,a) ; Pt6 (-a,a,-a) ; Pt7 (-a,-a,a) ; Pt8 (-a,-a,-a) * ************************************************************************ * * * CORPS DU PROGRAMME: * * * *----------------------------------------------------------------------* CALL DINVEC(PHI,NBNE*NBI) CALL DINVEC(DPHI,3*NBNE*NBI) DO NI= 1,NBI WI(NI)= 1.d0 ENDDO CALL DINVEC(PHIS,NBNF*NBIS) CALL DINVEC(DPHIS,2*NBNF*NBIS) DO NI= 1,NBIS WIS(NI)= 1.d0 ENDDO c ---------- face 1 ---------- NONF(1,1)= 1 NONF(2,1)= 4 NONF(3,1)= 3 NONF(4,1)= 2 NONF(5,1)= 12 NONF(6,1)= 11 NONF(7,1)= 10 NONF(8,1)= 9 c ---------- face 2 ---------- NONF(1,2)= 1 NONF(2,2)= 5 NONF(3,2)= 8 NONF(4,2)= 4 NONF(5,2)= 13 NONF(6,2)= 20 NONF(7,2)= 16 NONF(8,2)= 12 c ---------- face 3 ---------- NONF(1,3)= 1 NONF(2,3)= 2 NONF(3,3)= 6 NONF(4,3)= 5 NONF(5,3)= 9 NONF(6,3)= 14 NONF(7,3)= 17 NONF(8,3)= 13 c ---------- face 4 ---------- NONF(1,4)= 5 NONF(2,4)= 6 NONF(3,4)= 7 NONF(4,4)= 8 NONF(5,4)= 17 NONF(6,4)= 18 NONF(7,4)= 19 NONF(8,4)= 20 c ---------- face 5 ---------- NONF(1,5)= 2 NONF(2,5)= 3 NONF(3,5)= 7 NONF(4,5)= 6 NONF(5,5)= 10 NONF(6,5)= 15 NONF(7,5)= 18 NONF(8,5)= 14 c ---------- face 6 ---------- NONF(1,6)= 3 NONF(2,6)= 4 NONF(3,6)= 8 NONF(4,6)= 7 NONF(5,6)= 11 NONF(6,6)= 16 NONF(7,6)= 19 NONF(8,6)= 15 PHI(7,3) = -0.1870014113213579D0 PHI(3,6) = -0.1870014113213579D0 PHI(20,7) = 0.4146723119520977D0 PHI(19,6) = 0.1111111111111112D0 PHI(15,3) = 0.1111111111111112D0 PHI(19,1) = 0.4146723119520977D0 PHI(10,6) = 0.1111111111111112D0 PHI(3,4) = -0.1870014113213579D0 PHI(7,6) = -0.9077636645642013D-1 PHI(14,3) = 0.4146723119520977D0 PHI(16,5) = 0.4146723119520977D0 PHI(15,4) = 0.1111111111111112D0 PHI(12,4) = 0.1111111111111112D0 PHI(4,8) = -0.1870014113213579D0 PHI(16,1) = 0.1111111111111112D0 PHI(14,6) = 0.2977213249234699D-1 PHI(9,8) = 0.4146723119520977D0 PHI(20,4) = 0.2977213249234699D-1 PHI(18,4) = 0.1111111111111112D0 PHI(9,5) = 0.2977213249234699D-1 PHI(11,5) = 0.1111111111111112D0 PHI(5,5) = -0.1870014113213579D0 PHI(12,3) = 0.2977213249234699D-1 PHI(5,1) = -0.9077636645642013D-1 PHI(12,6) = 0.4146723119520977D0 PHI(17,5) = 0.1111111111111112D0 PHI(5,2) = -0.3522081090086456D-1 PHI(16,6) = 0.4146723119520977D0 PHI(7,8) = -0.3522081090086456D-1 PHI(12,7) = 0.1111111111111112D0 PHI(10,5) = 0.2977213249234699D-1 PHI(17,6) = 0.2977213249234699D-1 PHI(8,8) = -0.9077636645642013D-1 PHI(9,7) = 0.1111111111111112D0 PHI(16,7) = 0.1111111111111112D0 PHI(8,7) = -0.1870014113213579D0 PHI(5,3) = -0.1870014113213579D0 PHI(13,8) = 0.4146723119520977D0 PHI(2,2) = -0.1870014113213579D0 PHI(9,4) = 0.4146723119520977D0 PHI(12,5) = 0.1111111111111112D0 PHI(5,4) = -0.9077636645642013D-1 PHI(2,5) = -0.3522081090086456D-1 PHI(3,7) = -0.3522081090086456D-1 PHI(18,7) = 0.1111111111111112D0 PHI(15,8) = 0.2977213249234699D-1 PHI(3,1) = -0.1870014113213579D0 PHI(5,7) = -0.1314458557658024D0 PHI(18,3) = 0.4146723119520977D0 PHI(12,2) = 0.1111111111111112D0 PHI(2,8) = -0.1870014113213579D0 PHI(6,6) = -0.3522081090086456D-1 PHI(4,7) = -0.9077636645642013D-1 PHI(19,8) = 0.2977213249234699D-1 PHI(3,3) = -0.9077636645642013D-1 PHI(4,4) = -0.9077636645642013D-1 PHI(2,6) = -0.9077636645642013D-1 PHI(17,4) = 0.1111111111111112D0 PHI(13,5) = 0.1111111111111112D0 PHI(9,1) = 0.2977213249234699D-1 PHI(9,6) = 0.1111111111111112D0 PHI(10,4) = 0.4146723119520977D0 PHI(20,3) = 0.1111111111111112D0 PHI(1,7) = -0.1870014113213579D0 PHI(10,7) = 0.2977213249234699D-1 PHI(14,1) = 0.1111111111111112D0 PHI(19,2) = 0.1111111111111112D0 PHI(17,3) = 0.4146723119520977D0 PHI(8,5) = -0.1314458557658024D0 PHI(5,6) = -0.9077636645642013D-1 PHI(4,6) = -0.1314458557658024D0 PHI(13,6) = 0.1111111111111112D0 PHI(18,8) = 0.2977213249234699D-1 PHI(4,1) = -0.9077636645642013D-1 PHI(18,1) = 0.4146723119520977D0 PHI(20,1) = 0.1111111111111112D0 PHI(8,4) = -0.3522081090086456D-1 PHI(1,3) = -0.9077636645642013D-1 PHI(7,4) = -0.9077636645642013D-1 PHI(3,5) = -0.9077636645642013D-1 PHI(19,4) = 0.2977213249234699D-1 PHI(13,7) = 0.4146723119520977D0 PHI(17,2) = 0.2977213249234699D-1 PHI(13,3) = 0.1111111111111112D0 PHI(6,5) = -0.9077636645642013D-1 PHI(8,3) = -0.9077636645642013D-1 PHI(16,4) = 0.2977213249234699D-1 PHI(15,7) = 0.2977213249234699D-1 PHI(10,1) = 0.1111111111111112D0 PHI(7,2) = -0.1870014113213579D0 PHI(6,7) = -0.1870014113213579D0 PHI(15,1) = 0.4146723119520977D0 PHI(2,4) = -0.1314458557658024D0 PHI(18,5) = 0.1111111111111112D0 PHI(20,2) = 0.2977213249234699D-1 PHI(14,4) = 0.4146723119520977D0 PHI(15,2) = 0.4146723119520977D0 PHI(10,2) = 0.4146723119520977D0 PHI(14,5) = 0.2977213249234699D-1 PHI(11,2) = 0.4146723119520977D0 PHI(8,6) = -0.1870014113213579D0 PHI(16,8) = 0.1111111111111112D0 PHI(1,5) = -0.9077636645642013D-1 PHI(2,1) = -0.9077636645642013D-1 PHI(13,1) = 0.2977213249234699D-1 PHI(20,5) = 0.4146723119520977D0 PHI(6,8) = -0.9077636645642013D-1 PHI(12,8) = 0.4146723119520977D0 PHI(4,5) = -0.1870014113213579D0 PHI(20,8) = 0.1111111111111112D0 PHI(13,4) = 0.1111111111111112D0 PHI(1,8) = -0.1314458557658024D0 PHI(6,3) = -0.1314458557658024D0 PHI(19,3) = 0.1111111111111112D0 PHI(11,3) = 0.2977213249234699D-1 PHI(15,6) = 0.1111111111111112D0 PHI(7,7) = -0.9077636645642013D-1 PHI(17,7) = 0.4146723119520977D0 PHI(19,7) = 0.1111111111111112D0 PHI(1,1) = -0.3522081090086456D-1 PHI(5,8) = -0.1870014113213579D0 PHI(3,8) = -0.9077636645642013D-1 PHI(8,2) = -0.9077636645642013D-1 PHI(14,2) = 0.1111111111111112D0 PHI(6,4) = -0.1870014113213579D0 PHI(12,1) = 0.2977213249234699D-1 PHI(16,2) = 0.1111111111111112D0 PHI(6,2) = -0.9077636645642013D-1 PHI(16,3) = 0.2977213249234699D-1 PHI(10,8) = 0.1111111111111112D0 PHI(1,2) = -0.9077636645642013D-1 PHI(11,6) = 0.4146723119520977D0 PHI(9,2) = 0.1111111111111112D0 PHI(10,3) = 0.1111111111111112D0 PHI(11,7) = 0.2977213249234699D-1 PHI(20,6) = 0.1111111111111112D0 PHI(2,7) = -0.9077636645642013D-1 PHI(13,2) = 0.2977213249234699D-1 PHI(9,3) = 0.1111111111111112D0 PHI(6,1) = -0.1870014113213579D0 PHI(18,2) = 0.1111111111111112D0 PHI(3,2) = -0.1314458557658024D0 PHI(14,8) = 0.1111111111111112D0 PHI(14,7) = 0.1111111111111112D0 PHI(15,5) = 0.1111111111111112D0 PHI(17,8) = 0.1111111111111112D0 PHI(11,1) = 0.1111111111111112D0 PHI(11,4) = 0.1111111111111112D0 PHI(19,5) = 0.4146723119520977D0 PHI(4,2) = -0.1870014113213579D0 PHI(2,3) = -0.1870014113213579D0 PHI(1,6) = -0.1870014113213579D0 PHI(7,1) = -0.1314458557658024D0 PHI(17,1) = 0.1111111111111112D0 PHI(7,5) = -0.1870014113213579D0 PHI(8,1) = -0.1870014113213579D0 PHI(4,3) = -0.3522081090086456D-1 PHI(18,6) = 0.2977213249234699D-1 PHI(11,8) = 0.1111111111111112D0 PHI(1,4) = -0.1870014113213579D0 DPHI(1,6,6) = -0.7389594549567744D-1 DPHI(3,10,7) = -0.7044162180172908D-1 DPHI(1,10,4) = 0.2628917115316043D0 DPHI(2,12,5) = -0.1924500897298754D0 DPHI(3,3,6) = -0.128917115316044D-1 DPHI(2,1,1) = 0.7389594549567744D-1 DPHI(2,11,5) = 0.7044162180172908D-1 DPHI(1,16,2) = -0.2628917115316043D0 DPHI(1,13,8) = -0.2628917115316043D0 DPHI(2,17,8) = -0.7044162180172908D-1 DPHI(3,16,8) = 0.1924500897298754D0 DPHI(3,17,2) = 0.7044162180172908D-1 DPHI(1,14,3) = 0.2628917115316043D0 DPHI(1,4,7) = 0.2232909936926024D-1 DPHI(3,16,2) = 0.1924500897298754D0 DPHI(3,2,8) = -0.128917115316044D-1 DPHI(1,14,7) = 0.2628917115316043D0 DPHI(2,13,1) = -0.7044162180172908D-1 DPHI(1,19,5) = 0.7182335127930841D0 DPHI(3,13,8) = 0.7182335127930841D0 DPHI(3,14,3) = -0.7182335127930841D0 DPHI(1,12,6) = -0.2628917115316043D0 DPHI(2,19,7) = 0.2628917115316043D0 DPHI(3,4,1) = 0.1795583781982711D0 DPHI(2,7,1) = 0.4072292788290108D0 DPHI(3,18,1) = 0.2628917115316043D0 DPHI(3,3,4) = -0.128917115316044D-1 DPHI(3,7,7) = -0.2232909936926024D-1 DPHI(3,14,7) = -0.1924500897298754D0 DPHI(2,8,8) = -0.1795583781982711D0 DPHI(1,16,3) = -0.7044162180172908D-1 DPHI(1,20,3) = -0.2628917115316043D0 DPHI(2,5,4) = 0.2232909936926024D-1 DPHI(1,19,3) = -0.1924500897298754D0 DPHI(1,20,4) = -0.7044162180172908D-1 DPHI(1,2,3) = 0.128917115316044D-1 DPHI(3,16,3) = -0.5156684612641721D-1 DPHI(1,7,8) = -0.7389594549567744D-1 DPHI(2,14,2) = -0.2628917115316043D0 DPHI(3,17,5) = 0.7044162180172908D-1 DPHI(1,6,2) = -0.2232909936926024D-1 DPHI(3,11,6) = -0.2628917115316043D0 DPHI(3,9,4) = -0.2628917115316043D0 DPHI(1,2,8) = -0.3110042339640731D0 DPHI(1,5,6) = 0.2232909936926024D-1 DPHI(1,14,4) = 0.2628917115316043D0 DPHI(2,7,5) = 0.128917115316044D-1 DPHI(3,18,6) = 0.7044162180172908D-1 DPHI(3,20,6) = 0.2628917115316043D0 DPHI(1,5,2) = 0.7389594549567744D-1 DPHI(3,19,4) = 0.7044162180172908D-1 DPHI(2,20,5) = -0.7182335127930841D0 DPHI(3,20,1) = 0.7044162180172908D-1 DPHI(2,10,6) = -0.1924500897298754D0 DPHI(1,4,5) = -0.128917115316044D-1 DPHI(1,10,7) = 0.7044162180172908D-1 DPHI(2,8,4) = -0.7389594549567744D-1 DPHI(1,15,6) = 0.2628917115316043D0 DPHI(1,10,1) = 0.7044162180172908D-1 DPHI(2,20,1) = -0.1924500897298754D0 DPHI(1,18,2) = 0.7044162180172908D-1 DPHI(3,14,4) = 0.7182335127930841D0 DPHI(1,17,4) = -0.1924500897298754D0 DPHI(3,12,5) = -0.2628917115316043D0 DPHI(1,8,8) = 0.2232909936926024D-1 DPHI(2,7,4) = -0.1795583781982711D0 DPHI(1,14,1) = 0.7044162180172908D-1 DPHI(1,11,6) = 0.7182335127930841D0 DPHI(3,6,4) = -0.3110042339640731D0 DPHI(2,13,5) = -0.2628917115316043D0 DPHI(1,3,8) = -0.1795583781982711D0 DPHI(1,4,3) = 0.7389594549567744D-1 DPHI(3,6,3) = 0.4072292788290108D0 DPHI(3,12,4) = -0.7044162180172908D-1 DPHI(1,18,4) = 0.7044162180172908D-1 DPHI(3,7,8) = -0.7389594549567744D-1 DPHI(3,9,7) = -0.2628917115316043D0 DPHI(2,17,3) = -0.2628917115316043D0 DPHI(1,18,7) = 0.2628917115316043D0 DPHI(2,2,8) = -0.128917115316044D-1 DPHI(3,4,2) = -0.128917115316044D-1 DPHI(2,11,7) = 0.7044162180172908D-1 DPHI(3,7,4) = -0.1795583781982711D0 DPHI(1,11,1) = -0.1924500897298754D0 DPHI(3,3,2) = -0.4072292788290108D0 DPHI(1,19,2) = -0.1924500897298754D0 DPHI(1,15,1) = 0.2628917115316043D0 DPHI(2,19,5) = 0.2628917115316043D0 DPHI(1,18,6) = 0.7044162180172908D-1 DPHI(2,4,2) = 0.128917115316044D-1 DPHI(1,3,4) = 0.128917115316044D-1 DPHI(3,6,8) = -0.1795583781982711D0 DPHI(1,6,7) = -0.3110042339640731D0 DPHI(1,12,2) = -0.2628917115316043D0 DPHI(3,15,1) = -0.7182335127930841D0 DPHI(1,9,6) = 0.1924500897298754D0 DPHI(3,3,7) = 0.7389594549567744D-1 DPHI(2,15,7) = 0.7044162180172908D-1 DPHI(2,18,1) = -0.7182335127930841D0 DPHI(3,5,3) = 0.128917115316044D-1 DPHI(2,4,5) = 0.128917115316044D-1 DPHI(3,8,5) = 0.4072292788290108D0 DPHI(2,12,8) = 0.7182335127930841D0 DPHI(1,12,1) = -0.7044162180172908D-1 DPHI(2,10,3) = 0.1924500897298754D0 DPHI(2,10,5) = -0.5156684612641721D-1 DPHI(1,10,8) = 0.2628917115316043D0 DPHI(1,5,7) = -0.4072292788290108D0 DPHI(2,12,3) = 0.5156684612641721D-1 DPHI(2,17,1) = -0.2628917115316043D0 DPHI(2,5,3) = -0.128917115316044D-1 DPHI(3,17,6) = 0.7044162180172908D-1 DPHI(2,11,8) = 0.2628917115316043D0 DPHI(3,8,1) = 0.128917115316044D-1 DPHI(1,6,4) = 0.128917115316044D-1 DPHI(1,14,5) = 0.7044162180172908D-1 DPHI(2,11,3) = 0.7044162180172908D-1 DPHI(1,4,6) = -0.4072292788290108D0 DPHI(3,2,7) = 0.1795583781982711D0 DPHI(3,11,1) = -0.2628917115316043D0 DPHI(1,6,5) = -0.1795583781982711D0 DPHI(3,14,5) = -0.5156684612641721D-1 DPHI(3,9,5) = -0.7044162180172908D-1 DPHI(2,12,7) = 0.1924500897298754D0 DPHI(3,19,1) = 0.2628917115316043D0 DPHI(2,19,3) = 0.2628917115316043D0 DPHI(1,9,5) = 0.5156684612641721D-1 DPHI(2,13,6) = -0.2628917115316043D0 DPHI(2,15,4) = 0.2628917115316043D0 DPHI(2,18,7) = 0.1924500897298754D0 DPHI(1,12,5) = -0.7044162180172908D-1 DPHI(2,15,6) = 0.7044162180172908D-1 DPHI(1,11,8) = 0.1924500897298754D0 DPHI(2,6,6) = 0.7389594549567744D-1 DPHI(1,15,8) = 0.7044162180172908D-1 DPHI(3,1,1) = 0.7389594549567744D-1 DPHI(3,7,3) = 0.128917115316044D-1 DPHI(3,11,4) = -0.7044162180172908D-1 DPHI(1,3,3) = -0.2232909936926024D-1 DPHI(1,2,7) = -0.1795583781982711D0 DPHI(3,4,4) = 0.2232909936926024D-1 DPHI(3,10,4) = -0.2628917115316043D0 DPHI(2,3,5) = -0.2232909936926024D-1 DPHI(1,16,7) = -0.7044162180172908D-1 DPHI(3,7,1) = 0.4072292788290108D0 DPHI(3,6,5) = -0.2232909936926024D-1 DPHI(3,8,8) = -0.1795583781982711D0 DPHI(3,15,8) = 0.5156684612641721D-1 DPHI(1,16,8) = -0.7044162180172908D-1 DPHI(1,15,2) = 0.2628917115316043D0 DPHI(1,11,5) = 0.1924500897298754D0 DPHI(2,17,7) = -0.2628917115316043D0 DPHI(1,11,3) = -0.5156684612641721D-1 DPHI(2,5,1) = 0.1795583781982711D0 DPHI(2,8,1) = 0.128917115316044D-1 DPHI(2,4,4) = -0.1795583781982711D0 DPHI(2,17,4) = -0.7044162180172908D-1 DPHI(3,15,6) = 0.1924500897298754D0 DPHI(2,20,6) = -0.1924500897298754D0 DPHI(3,16,7) = -0.1924500897298754D0 DPHI(2,9,1) = -0.7044162180172908D-1 DPHI(1,13,3) = -0.2628917115316043D0 DPHI(3,15,2) = 0.7182335127930841D0 DPHI(3,3,3) = 0.1795583781982711D0 DPHI(1,17,3) = -0.7182335127930841D0 DPHI(2,7,8) = -0.7389594549567744D-1 DPHI(1,11,7) = 0.5156684612641721D-1 DPHI(1,17,5) = 0.1924500897298754D0 DPHI(1,5,1) = 0.1795583781982711D0 DPHI(2,11,2) = 0.2628917115316043D0 DPHI(2,4,3) = -0.7389594549567744D-1 DPHI(3,13,3) = -0.1924500897298754D0 DPHI(1,4,4) = 0.1795583781982711D0 DPHI(3,2,6) = 0.2232909936926024D-1 DPHI(2,9,6) = -0.2628917115316043D0 DPHI(2,16,5) = 0.2628917115316043D0 DPHI(2,3,3) = -0.1795583781982711D0 DPHI(2,3,4) = -0.3110042339640731D0 DPHI(2,20,2) = -0.5156684612641721D-1 DPHI(1,15,3) = 0.7044162180172908D-1 DPHI(2,15,5) = 0.7044162180172908D-1 DPHI(3,9,3) = -0.2628917115316043D0 DPHI(2,2,4) = -0.4072292788290108D0 DPHI(3,5,5) = 0.128917115316044D-1 DPHI(1,13,7) = -0.2628917115316043D0 DPHI(2,16,1) = 0.7044162180172908D-1 DPHI(1,20,7) = -0.2628917115316043D0 DPHI(2,5,2) = 0.7389594549567744D-1 DPHI(1,18,3) = 0.2628917115316043D0 DPHI(1,1,4) = 0.3110042339640731D0 DPHI(3,15,3) = -0.1924500897298754D0 DPHI(2,13,2) = -0.7044162180172908D-1 DPHI(2,19,2) = 0.7044162180172908D-1 DPHI(3,8,4) = -0.7389594549567744D-1 DPHI(3,13,7) = -0.7182335127930841D0 DPHI(2,4,8) = -0.3110042339640731D0 DPHI(1,10,2) = 0.2628917115316043D0 DPHI(3,20,4) = 0.7044162180172908D-1 DPHI(3,19,6) = 0.2628917115316043D0 DPHI(1,6,8) = -0.1795583781982711D0 DPHI(1,9,8) = 0.7182335127930841D0 DPHI(3,18,5) = 0.7044162180172908D-1 DPHI(1,16,5) = -0.2628917115316043D0 DPHI(1,18,8) = 0.7044162180172908D-1 DPHI(1,17,1) = -0.1924500897298754D0 DPHI(1,18,5) = 0.2628917115316043D0 DPHI(2,6,8) = 0.2232909936926024D-1 DPHI(3,11,7) = -0.7044162180172908D-1 DPHI(3,6,2) = -0.1795583781982711D0 DPHI(1,12,4) = -0.2628917115316043D0 DPHI(3,10,3) = -0.2628917115316043D0 DPHI(2,16,6) = 0.2628917115316043D0 DPHI(1,9,7) = 0.1924500897298754D0 DPHI(3,9,2) = -0.7044162180172908D-1 DPHI(1,14,6) = 0.7044162180172908D-1 DPHI(2,9,8) = -0.2628917115316043D0 DPHI(3,13,4) = 0.1924500897298754D0 DPHI(1,16,4) = -0.7044162180172908D-1 DPHI(2,6,2) = 0.1795583781982711D0 DPHI(2,1,8) = -0.4072292788290108D0 DPHI(3,12,7) = -0.2628917115316043D0 DPHI(3,12,3) = -0.7044162180172908D-1 DPHI(3,11,5) = -0.2628917115316043D0 DPHI(3,14,6) = 0.5156684612641721D-1 DPHI(2,13,4) = -0.7044162180172908D-1 DPHI(3,16,4) = 0.5156684612641721D-1 DPHI(2,6,5) = 0.1795583781982711D0 DPHI(3,20,8) = 0.2628917115316043D0 DPHI(1,1,1) = 0.7389594549567744D-1 DPHI(2,2,7) = 0.2232909936926024D-1 DPHI(3,12,8) = -0.2628917115316043D0 DPHI(2,10,4) = 0.7182335127930841D0 DPHI(2,11,6) = 0.2628917115316043D0 DPHI(3,19,7) = 0.7044162180172908D-1 DPHI(1,13,4) = -0.2628917115316043D0 DPHI(3,1,6) = -0.128917115316044D-1 DPHI(3,12,6) = -0.2628917115316043D0 DPHI(3,18,7) = 0.7044162180172908D-1 DPHI(1,17,7) = 0.7182335127930841D0 DPHI(3,2,1) = 0.1795583781982711D0 DPHI(2,17,2) = -0.7044162180172908D-1 DPHI(2,1,5) = 0.1795583781982711D0 DPHI(2,5,7) = -0.4072292788290108D0 DPHI(1,9,1) = -0.5156684612641721D-1 DPHI(2,16,2) = 0.7044162180172908D-1 DPHI(1,13,1) = -0.7044162180172908D-1 DPHI(1,8,5) = -0.4072292788290108D0 DPHI(2,13,8) = -0.2628917115316043D0 DPHI(3,17,8) = 0.2628917115316043D0 DPHI(2,2,1) = 0.1795583781982711D0 DPHI(2,7,2) = 0.128917115316044D-1 DPHI(2,14,3) = -0.2628917115316043D0 DPHI(2,20,8) = 0.1924500897298754D0 DPHI(3,5,6) = -0.1795583781982711D0 DPHI(3,14,1) = -0.1924500897298754D0 DPHI(1,3,7) = -0.7389594549567744D-1 DPHI(2,14,7) = -0.7044162180172908D-1 DPHI(3,5,8) = -0.3110042339640731D0 DPHI(2,19,8) = 0.7044162180172908D-1 DPHI(3,13,1) = -0.5156684612641721D-1 DPHI(3,1,3) = 0.1795583781982711D0 DPHI(2,4,7) = -0.1795583781982711D0 DPHI(1,7,2) = 0.128917115316044D-1 DPHI(3,19,5) = 0.2628917115316043D0 DPHI(2,16,3) = 0.7044162180172908D-1 DPHI(3,12,1) = -0.7044162180172908D-1 DPHI(1,14,2) = 0.7044162180172908D-1 DPHI(2,17,5) = -0.2628917115316043D0 DPHI(3,8,3) = -0.2232909936926024D-1 DPHI(2,20,3) = 0.1924500897298754D0 DPHI(2,9,4) = -0.2628917115316043D0 DPHI(2,19,4) = 0.7044162180172908D-1 DPHI(2,20,4) = 0.5156684612641721D-1 DPHI(2,2,6) = 0.1795583781982711D0 DPHI(3,7,6) = -0.1795583781982711D0 DPHI(3,1,5) = 0.1795583781982711D0 DPHI(3,14,2) = 0.1924500897298754D0 DPHI(1,1,3) = 0.1795583781982711D0 DPHI(2,8,3) = -0.1795583781982711D0 DPHI(1,6,3) = 0.4072292788290108D0 DPHI(1,20,5) = -0.2628917115316043D0 DPHI(1,10,6) = 0.2628917115316043D0 DPHI(1,4,2) = 0.3110042339640731D0 DPHI(3,8,7) = 0.128917115316044D-1 DPHI(1,20,1) = -0.2628917115316043D0 DPHI(2,14,4) = -0.2628917115316043D0 DPHI(3,20,7) = 0.2628917115316043D0 DPHI(1,8,3) = 0.1795583781982711D0 DPHI(1,3,1) = 0.128917115316044D-1 DPHI(3,4,7) = 0.1795583781982711D0 DPHI(2,10,7) = 0.5156684612641721D-1 DPHI(3,2,3) = 0.3110042339640731D0 DPHI(1,2,5) = -0.7389594549567744D-1 DPHI(2,4,6) = 0.4072292788290108D0 DPHI(2,10,1) = -0.1924500897298754D0 DPHI(2,18,2) = -0.1924500897298754D0 DPHI(3,4,3) = 0.7389594549567744D-1 DPHI(1,2,4) = 0.4072292788290108D0 DPHI(1,13,5) = -0.7044162180172908D-1 DPHI(3,4,8) = -0.128917115316044D-1 DPHI(2,14,1) = -0.2628917115316043D0 DPHI(3,14,8) = 0.1924500897298754D0 DPHI(3,2,4) = -0.4072292788290108D0 DPHI(2,9,7) = -0.7044162180172908D-1 DPHI(2,2,3) = -0.128917115316044D-1 DPHI(1,9,3) = -0.1924500897298754D0 DPHI(1,11,4) = -0.1924500897298754D0 DPHI(1,1,5) = 0.2232909936926024D-1 DPHI(3,13,5) = -0.1924500897298754D0 DPHI(3,1,2) = 0.2232909936926024D-1 DPHI(3,5,2) = -0.7389594549567744D-1 DPHI(3,8,2) = -0.1795583781982711D0 DPHI(2,12,6) = -0.7182335127930841D0 DPHI(2,18,4) = 0.1924500897298754D0 DPHI(2,5,5) = 0.3110042339640731D0 DPHI(1,3,2) = 0.4072292788290108D0 DPHI(1,17,2) = -0.5156684612641721D-1 DPHI(1,3,6) = -0.3110042339640731D0 DPHI(2,1,2) = 0.1795583781982711D0 DPHI(3,2,2) = -0.128917115316044D-1 DPHI(3,17,3) = 0.2628917115316043D0 DPHI(2,5,6) = 0.1795583781982711D0 DPHI(1,19,6) = 0.1924500897298754D0 DPHI(1,20,8) = -0.7044162180172908D-1 DPHI(1,14,8) = 0.2628917115316043D0 DPHI(3,6,6) = -0.7389594549567744D-1 DPHI(1,7,1) = 0.4072292788290108D0 DPHI(1,11,2) = -0.7182335127930841D0 DPHI(3,6,1) = 0.128917115316044D-1 DPHI(1,7,3) = 0.128917115316044D-1 DPHI(1,4,1) = 0.1795583781982711D0 DPHI(2,15,1) = 0.2628917115316043D0 DPHI(1,15,7) = 0.7044162180172908D-1 DPHI(1,18,1) = 0.2628917115316043D0 DPHI(1,1,2) = 0.1795583781982711D0 DPHI(2,18,6) = -0.5156684612641721D-1 DPHI(1,19,8) = 0.5156684612641721D-1 DPHI(1,8,2) = 0.1795583781982711D0 DPHI(1,5,3) = 0.3110042339640731D0 DPHI(1,12,8) = -0.2628917115316043D0 DPHI(1,10,3) = 0.7044162180172908D-1 DPHI(1,10,5) = 0.7044162180172908D-1 DPHI(3,1,7) = 0.3110042339640731D0 DPHI(2,12,2) = -0.1924500897298754D0 DPHI(1,9,2) = -0.1924500897298754D0 DPHI(1,1,6) = -0.128917115316044D-1 DPHI(3,15,7) = -0.5156684612641721D-1 DPHI(1,12,3) = -0.7044162180172908D-1 DPHI(3,18,3) = 0.2628917115316043D0 DPHI(3,1,8) = -0.4072292788290108D0 DPHI(2,2,5) = 0.7389594549567744D-1 DPHI(2,17,6) = -0.7044162180172908D-1 DPHI(2,3,8) = -0.1795583781982711D0 DPHI(2,12,1) = -0.5156684612641721D-1 DPHI(2,8,5) = 0.4072292788290108D0 DPHI(3,10,2) = -0.2628917115316043D0 DPHI(3,20,2) = 0.7044162180172908D-1 DPHI(2,1,7) = -0.128917115316044D-1 DPHI(2,10,8) = 0.1924500897298754D0 DPHI(1,8,1) = 0.3110042339640731D0 DPHI(3,19,8) = 0.7044162180172908D-1 DPHI(1,9,4) = -0.7182335127930841D0 DPHI(1,7,5) = -0.3110042339640731D0 DPHI(3,4,6) = -0.4072292788290108D0 DPHI(2,3,7) = -0.7389594549567744D-1 DPHI(3,17,1) = 0.7044162180172908D-1 DPHI(3,18,8) = 0.7044162180172908D-1 DPHI(2,1,3) = 0.2232909936926024D-1 DPHI(3,11,8) = -0.7044162180172908D-1 DPHI(2,11,1) = 0.7044162180172908D-1 DPHI(2,14,5) = -0.7044162180172908D-1 DPHI(2,9,5) = -0.7044162180172908D-1 DPHI(3,16,5) = -0.7182335127930841D0 DPHI(1,8,6) = -0.128917115316044D-1 DPHI(1,1,7) = -0.128917115316044D-1 DPHI(1,12,7) = -0.7044162180172908D-1 DPHI(2,19,1) = 0.2628917115316043D0 DPHI(3,4,5) = 0.3110042339640731D0 DPHI(3,10,6) = -0.7044162180172908D-1 DPHI(1,13,6) = -0.7044162180172908D-1 DPHI(3,3,1) = 0.3110042339640731D0 DPHI(3,11,3) = -0.7044162180172908D-1 DPHI(1,15,4) = 0.7044162180172908D-1 DPHI(3,5,1) = -0.2232909936926024D-1 DPHI(3,7,2) = -0.3110042339640731D0 DPHI(3,20,3) = 0.7044162180172908D-1 DPHI(3,5,7) = 0.4072292788290108D0 DPHI(3,19,3) = 0.7044162180172908D-1 DPHI(3,13,6) = 0.1924500897298754D0 DPHI(3,15,4) = 0.1924500897298754D0 DPHI(2,7,6) = -0.2232909936926024D-1 DPHI(3,8,6) = -0.3110042339640731D0 DPHI(1,2,2) = 0.128917115316044D-1 DPHI(1,6,1) = 0.128917115316044D-1 DPHI(1,19,1) = -0.7182335127930841D0 DPHI(2,15,8) = 0.7044162180172908D-1 DPHI(1,7,4) = -0.2232909936926024D-1 DPHI(1,7,6) = -0.1795583781982711D0 DPHI(2,8,6) = 0.128917115316044D-1 DPHI(3,17,4) = 0.2628917115316043D0 DPHI(1,4,8) = -0.128917115316044D-1 DPHI(2,1,6) = 0.3110042339640731D0 DPHI(1,20,6) = -0.7044162180172908D-1 DPHI(2,16,7) = 0.2628917115316043D0 DPHI(1,19,7) = 0.1924500897298754D0 DPHI(2,16,8) = 0.2628917115316043D0 DPHI(2,15,2) = 0.2628917115316043D0 DPHI(1,19,4) = -0.5156684612641721D-1 DPHI(2,7,7) = -0.1795583781982711D0 DPHI(3,17,7) = 0.2628917115316043D0 DPHI(1,3,5) = -0.1795583781982711D0 DPHI(3,10,1) = -0.2628917115316043D0 DPHI(3,18,2) = 0.2628917115316043D0 DPHI(3,5,4) = -0.1795583781982711D0 DPHI(1,8,4) = 0.7389594549567744D-1 DPHI(3,3,5) = 0.1795583781982711D0 DPHI(3,9,1) = -0.7044162180172908D-1 DPHI(2,13,3) = -0.7044162180172908D-1 DPHI(2,3,1) = 0.128917115316044D-1 DPHI(1,20,2) = -0.7044162180172908D-1 DPHI(1,15,5) = 0.2628917115316043D0 DPHI(3,6,7) = 0.128917115316044D-1 DPHI(2,7,3) = -0.3110042339640731D0 DPHI(2,9,3) = -0.7044162180172908D-1 DPHI(2,11,4) = 0.2628917115316043D0 DPHI(2,3,6) = 0.128917115316044D-1 DPHI(2,4,1) = -0.2232909936926024D-1 DPHI(1,16,1) = -0.2628917115316043D0 DPHI(3,11,2) = -0.2628917115316043D0 DPHI(1,2,6) = -0.1795583781982711D0 DPHI(3,9,6) = -0.7044162180172908D-1 DPHI(2,6,3) = -0.4072292788290108D0 DPHI(2,8,2) = -0.2232909936926024D-1 DPHI(3,18,4) = 0.2628917115316043D0 DPHI(3,2,5) = 0.7389594549567744D-1 DPHI(2,15,3) = 0.2628917115316043D0 DPHI(3,15,5) = -0.1924500897298754D0 DPHI(1,13,2) = -0.7044162180172908D-1 DPHI(2,6,4) = -0.128917115316044D-1 DPHI(2,6,7) = -0.128917115316044D-1 DPHI(2,13,7) = -0.2628917115316043D0 DPHI(3,16,1) = -0.1924500897298754D0 DPHI(2,20,7) = 0.7182335127930841D0 DPHI(3,1,4) = -0.128917115316044D-1 DPHI(1,5,4) = 0.1795583781982711D0 DPHI(3,7,5) = 0.128917115316044D-1 DPHI(2,19,6) = 0.7044162180172908D-1 DPHI(2,2,2) = 0.3110042339640731D0 DPHI(2,18,3) = 0.7182335127930841D0 DPHI(1,17,6) = 0.5156684612641721D-1 DPHI(3,13,2) = 0.5156684612641721D-1 DPHI(3,19,2) = 0.2628917115316043D0 DPHI(2,3,2) = 0.4072292788290108D0 DPHI(2,10,2) = -0.7182335127930841D0 DPHI(2,6,1) = 0.3110042339640731D0 DPHI(1,8,7) = -0.128917115316044D-1 DPHI(2,14,8) = -0.7044162180172908D-1 DPHI(2,1,4) = -0.128917115316044D-1 DPHI(1,7,7) = -0.1795583781982711D0 DPHI(2,18,8) = 0.5156684612641721D-1 DPHI(2,18,5) = -0.1924500897298754D0 DPHI(2,5,8) = -0.128917115316044D-1 DPHI(1,17,8) = 0.1924500897298754D0 DPHI(1,2,1) = -0.2232909936926024D-1 DPHI(3,12,2) = -0.7044162180172908D-1 DPHI(1,16,6) = -0.2628917115316043D0 DPHI(1,1,8) = -0.4072292788290108D0 DPHI(2,9,2) = -0.2628917115316043D0 DPHI(3,10,5) = -0.7044162180172908D-1 DPHI(3,20,5) = 0.2628917115316043D0 DPHI(2,12,4) = 0.1924500897298754D0 DPHI(3,16,6) = 0.7182335127930841D0 DPHI(3,3,8) = 0.2232909936926024D-1 DPHI(1,5,8) = -0.128917115316044D-1 DPHI(3,10,8) = -0.7044162180172908D-1 DPHI(1,5,5) = -0.128917115316044D-1 DPHI(2,14,6) = -0.7044162180172908D-1 DPHI(2,8,7) = -0.3110042339640731D0 DPHI(3,9,8) = -0.2628917115316043D0 DPHI(2,16,4) = 0.7044162180172908D-1 PHIS(7,3) = 0.5257834230632085D0 PHIS(3,4) = -0.9622504486493765D-1 PHIS(5,1) = 0.1408832436034581D0 PHIS(5,2) = 0.5257834230632085D0 PHIS(5,3) = 0.1408832436034581D0 PHIS(2,2) = 0.9622504486493735D-1 PHIS(5,4) = 0.5257834230632085D0 PHIS(3,1) = 0.9622504486493735D-1 PHIS(3,3) = -0.1666666666666668D0 PHIS(4,4) = -0.1666666666666668D0 PHIS(4,1) = -0.1666666666666668D0 PHIS(8,4) = 0.5257834230632085D0 PHIS(1,3) = -0.1666666666666668D0 PHIS(7,4) = 0.1408832436034581D0 PHIS(8,3) = 0.5257834230632085D0 PHIS(7,2) = 0.1408832436034581D0 PHIS(2,4) = -0.1666666666666668D0 PHIS(2,1) = -0.1666666666666668D0 PHIS(6,3) = 0.1408832436034581D0 PHIS(1,1) = -0.9622504486493765D-1 PHIS(8,2) = 0.1408832436034581D0 PHIS(6,4) = 0.1408832436034581D0 PHIS(6,2) = 0.5257834230632085D0 PHIS(1,2) = -0.1666666666666668D0 PHIS(6,1) = 0.5257834230632085D0 PHIS(3,2) = -0.1666666666666668D0 PHIS(4,2) = -0.9622504486493765D-1 PHIS(2,3) = -0.9622504486493765D-1 PHIS(7,1) = 0.5257834230632085D0 PHIS(8,1) = 0.1408832436034581D0 PHIS(4,3) = 0.9622504486493735D-1 PHIS(1,4) = 0.9622504486493735D-1 DPHIS(2,1,1) = 0.1830127018922193D0 DPHIS(2,7,1) = 0.3333333333333333D0 DPHIS(2,5,4) = -0.3333333333333333D0 DPHIS(1,2,3) = -0.1830127018922193D0 DPHIS(1,6,2) = 0.3333333333333333D0 DPHIS(1,5,2) = -0.9106836025229589D0 DPHIS(2,8,4) = 0.9106836025229589D0 DPHIS(2,7,4) = 0.3333333333333333D0 DPHIS(1,4,3) = -0.6830127018922194D0 DPHIS(2,4,2) = -0.1830127018922193D0 DPHIS(1,3,4) = -0.1830127018922193D0 DPHIS(2,5,3) = -0.3333333333333333D0 DPHIS(1,6,4) = 0.3333333333333333D0 DPHIS(1,3,3) = -0.2276709006307396D0 DPHIS(2,5,1) = -0.3333333333333333D0 DPHIS(2,8,1) = -0.2440169358562925D0 DPHIS(2,4,4) = -0.2276709006307396D0 DPHIS(1,5,1) = -0.2440169358562925D0 DPHIS(2,4,3) = 0.6830127018922194D0 DPHIS(1,4,4) = -0.610042339640732D-1 DPHIS(2,3,3) = 0.610042339640732D-1 DPHIS(2,3,4) = -0.1830127018922193D0 DPHIS(2,2,4) = -0.610042339640732D-1 DPHIS(2,5,2) = -0.3333333333333333D0 DPHIS(1,1,4) = -0.6830127018922194D0 DPHIS(2,6,2) = 0.9106836025229589D0 DPHIS(1,1,1) = 0.1830127018922193D0 DPHIS(2,2,1) = 0.2276709006307396D0 DPHIS(2,7,2) = 0.3333333333333333D0 DPHIS(1,7,2) = -0.2440169358562925D0 DPHIS(1,1,3) = -0.610042339640732D-1 DPHIS(2,8,3) = -0.9106836025229589D0 DPHIS(1,6,3) = 0.3333333333333333D0 DPHIS(1,4,2) = 0.1830127018922193D0 DPHIS(1,8,3) = -0.3333333333333333D0 DPHIS(1,3,1) = 0.6830127018922194D0 DPHIS(1,2,4) = -0.2276709006307396D0 DPHIS(2,2,3) = 0.1830127018922193D0 DPHIS(1,3,2) = 0.610042339640732D-1 DPHIS(2,1,2) = -0.610042339640732D-1 DPHIS(1,7,1) = -0.9106836025229589D0 DPHIS(1,7,3) = 0.9106836025229589D0 DPHIS(1,4,1) = 0.2276709006307396D0 DPHIS(1,1,2) = 0.2276709006307396D0 DPHIS(1,8,2) = -0.3333333333333333D0 DPHIS(1,5,3) = 0.2440169358562925D0 DPHIS(1,8,1) = -0.3333333333333333D0 DPHIS(2,1,3) = 0.2276709006307396D0 DPHIS(1,2,2) = 0.6830127018922194D0 DPHIS(1,6,1) = 0.3333333333333333D0 DPHIS(1,7,4) = 0.2440169358562925D0 DPHIS(1,8,4) = -0.3333333333333333D0 DPHIS(2,3,1) = 0.6830127018922194D0 DPHIS(2,7,3) = 0.3333333333333333D0 DPHIS(2,4,1) = 0.610042339640732D-1 DPHIS(2,6,3) = -0.2440169358562925D0 DPHIS(2,8,2) = 0.2440169358562925D0 DPHIS(2,6,4) = 0.2440169358562925D0 DPHIS(1,5,4) = 0.9106836025229589D0 DPHIS(2,2,2) = -0.6830127018922194D0 DPHIS(2,3,2) = -0.2276709006307396D0 DPHIS(2,6,1) = -0.9106836025229589D0 DPHIS(2,1,4) = -0.6830127018922194D0 DPHIS(1,2,1) = 0.610042339640732D-1 END \ No newline at end of file diff --git a/Elements/Geometrie/ElemGeom/volume/GeomPentaCom.cc b/Elements/Geometrie/ElemGeom/volume/GeomPentaCom.cc index 427d4ca..cce6c7d 100644 --- a/Elements/Geometrie/ElemGeom/volume/GeomPentaCom.cc +++ b/Elements/Geometrie/ElemGeom/volume/GeomPentaCom.cc @@ -113,12 +113,12 @@ bool GeomPentaCom::Interieur(const Coordonnee& M) // dont les coordonnées sont sur la droite GM: c-a-d GP = alpha GM, avec apha maxi et P appartenant à la frontière // de l'élément, G étant le centre de gravité, sauf si GM est nul, dans ce cas retour de M Coordonnee GeomPentaCom::Maxi_Coor_dans_directionGM(const Coordonnee& M) - { // on décompose la recherche en segment et facette - double x=M(1); double y=M(2); double z=M(3); - // tout d'abord on calcul le point maxi dans le plan 1 2 et dans z indépendemment - Coordonnee XY(x,y); Coordonnee Z(z); - Coordonnee Pxy= face(1)->Maxi_Coor_dans_directionGM(XY); - Coordonnee Pz = seg(1)->Maxi_Coor_dans_directionGM(Z); +{ // on décompose la recherche en segment et facette + double x=M(1); double y=M(2); double z=M(3); + // tout d'abord on calcul le point maxi dans le plan 1 2 et dans z indépendemment + Coordonnee XY(x,y); Coordonnee Z(z); + Coordonnee Pxy= face(1)->Maxi_Coor_dans_directionGM(XY); + Coordonnee Pz = seg(1)->Maxi_Coor_dans_directionGM(Z); Coordonnee P(0.,0.,0.); // le retour // G le centre de gravité: il a la cote nulle et il est centre de gravité du triangle médian @@ -143,10 +143,10 @@ Coordonnee GeomPentaCom::Maxi_Coor_dans_directionGM(const Coordonnee& M) if (gmxy > ConstMath::trespetit) { double z_P = z * ( (Pxy-Gxy).Norme()) / gmxy; if (Abs(z_P) <= 1.) // là c'est ok on sort par un rectangle - {P(1)=Pxy(1); P(2)=Pxy(2); P(3)=z_P; - fin_traitement = true;// pour indiquer que c'est ok - }; - }; + {P(1)=Pxy(1); P(2)=Pxy(2); P(3)=z_P; + fin_traitement = true;// pour indiquer que c'est ok + }; + }; // 2)---- // dans le cas où fin_traitement est toujours faux, cela signifie que le cas sortie par un quadrangle n'a pas marché // donc cela signifie que le point P est sur la face sup ou inf. En fait cela dépend de z_M si c'est positif alors @@ -155,31 +155,31 @@ Coordonnee GeomPentaCom::Maxi_Coor_dans_directionGM(const Coordonnee& M) // d'où GPxy = z_P * GMxy/z_M = e (en module) d'où \vec{GPxy} = e * \vec{GMxy)/||GMxy|| = z_P / z_M * \vec{GMxy) d'où P if (! fin_traitement) { if (z > ConstMath::trespetit) - { // cas d'une sortie par la facette supérieure, z_P = 1. - Coordonnee GPxy = GMxy / z; - P(1) = untiers + GPxy(1); P(2) = untiers + GPxy(2); P(3) = 1.; - fin_traitement = true;// pour indiquer que c'est ok - } - else if (z < -ConstMath::trespetit) - { // cas d'une sortie par la facette inférieure, z_P = -1. - Coordonnee GPxy = (-1./z) * GMxy ; - P(1) = untiers + GPxy(1); P(2) = untiers + GPxy(2); P(3) = -1.; - fin_traitement = true;// pour indiquer que c'est ok - } - else - // arrivée ici, cela veut dire que z est quasiment nulle, et pourtant due au 1)--- - // - soit Abs(z_P) est > 1 , ce qui n'est pas possible car on vient de trouver z quasiment nulle - // - soit gmxy est également quasiment nulle : dans ce cas on choisit arbitrairement P(0,0,0) - { P.Zero();}; - }; + { // cas d'une sortie par la facette supérieure, z_P = 1. + Coordonnee GPxy = GMxy / z; + P(1) = untiers + GPxy(1); P(2) = untiers + GPxy(2); P(3) = 1.; + fin_traitement = true;// pour indiquer que c'est ok + } + else if (z < -ConstMath::trespetit) + { // cas d'une sortie par la facette inférieure, z_P = -1. + Coordonnee GPxy = (-1./z) * GMxy ; + P(1) = untiers + GPxy(1); P(2) = untiers + GPxy(2); P(3) = -1.; + fin_traitement = true;// pour indiquer que c'est ok + } + else + // arrivée ici, cela veut dire que z est quasiment nulle, et pourtant due au 1)--- + // - soit Abs(z_P) est > 1 , ce qui n'est pas possible car on vient de trouver z quasiment nulle + // - soit gmxy est également quasiment nulle : dans ce cas on choisit arbitrairement P(0,0,0) + { P.Zero();}; + }; - #ifdef MISE_AU_POINT - if ((P(1) + P(2)) > (1. + ConstMath::petit)) - { cout << "\n petit soucis, le point maxi calcule n'est pas correcte "; - P.Affiche(cout); - cout << "\n GeomPentaCom::Maxi_Coor_dans_directionGM(.." << endl; - }; - #endif + #ifdef MISE_AU_POINT + if ((P(1) + P(2)) > (1. + ConstMath::petit)) + { cout << "\n petit soucis, le point maxi calcule n'est pas correcte "; + P.Affiche(cout); + cout << "\n GeomPentaCom::Maxi_Coor_dans_directionGM(.." << endl; + }; + #endif /* // en fait il y a un pb, car la suite à l'air correcte si on cherche l'intersection de OM avec la frontière diff --git a/Elements/Geometrie/ElemGeom/volume/GeomPentaedre.cc b/Elements/Geometrie/ElemGeom/volume/GeomPentaedre.cc deleted file mode 100755 index 218f179..0000000 --- a/Elements/Geometrie/ElemGeom/volume/GeomPentaedre.cc +++ /dev/null @@ -1 +0,0 @@ -************************************************************************ * UNIVERSITE DE BRETAGNE OCCIDENTALE --- I.U.T. DE LORIENT * ************************************************************************ * LABORATOIRE DE GENIE MECANIQUE ET PRODUCTIQUE * * Tel 97.05.94.11 * * Centre de Genie Industriel 56520 GUIDEL-PLAGES * ************************************************************************ ************************************************************************ * * * DATE: Mon Jul 6 14:54:12 WET DST 1992 * * $ * * AUTEUR: J-P HILY * * $ * * PROJET: HEREZH * * $ * ************************************************************************ ************************************************************************ * * * VERIFICATION: * * * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * !16/11/95!HANZARD.C !AJOUT de l'element LIQU ! * * ! ! ! ! * * ! ! ! ! * * ! ! ! ! * * ! ! ! ! * * * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * MODIFICATIONS: * * * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * !19/10/95!H.L & C.H !fct 'dinterpolation pentaedre quadra! * * * * $ * * * ************************************************************************ ************************************************************************ * * SUBROUTINE PENTAEDRE (NBNE,NBIS,NBIH, & KSI,ETA,DZETA,WIS,WIH,WI,PHI,DPHI) * $ * implicit none * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * BUT: Interpolation pour un pentaedre. * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * VARIABLES: * * * * ..................................... en entree * * * integer NBNE ! nombre de noeuds du pentaedre integer NBIS ! nombre de pts d'integration sur la surface integer NBIH ! nombre de pts d'integration dans la hauteur * * * ..................................... en sortie * * * real*8 KSI(NBIS),ETA(NBIS) ! coordonnees des points d'integration sur la surface real*8 DZETA(NBIH) ! coordonnees des points d'integration dans la hauteur real*8 WIS(NBIS) ! poids d'integration sur la surface real*8 WIH(NBIH) ! poids d'integration dans la hauteur real*8 WI(NBIH,NBIS) ! poids d'integration du volume real*8 PHI(NBNE,NBIH,NBIS),DPHI(3,NBNE,NBIH,NBIS) ! fonctions d'interpolation nodale et leur derivees ! PHI(r,ni) valeur de la r ieme fonction au point ni ! DPHI(i,r,ni) valeur de sa derivee suivant i * $ * * ...................................... internes * * * integer NIS, NIH ! numeros de points d'integration real*8 A,B,C,LAMBDA * * ************************************************************************ ************************************************************************ * * * CORPS DU PROGRAMME: * * * *----------------------------------------------------------------------* c ------------------------------------------ c choix des points d'integrations de surface c ------------------------------------------ IF (NBIS.EQ.1) THEN KSI(1)= 1.d0/3.d0 ETA(1)= KSI(1) WIS(1)= 0.5d0 ELSEIF (NBIS.EQ.3) THEN KSI(1)= 0.5d0 ETA(1)= 0.5d0 WIS(1)= 1.d0/6.d0 KSI(2)= 0.d0 ETA(2)= 0.5d0 WIS(2)= 1.d0/6.d0 KSI(3)= 0.5d0 ETA(3)= 0.d0 WIS(3)= 1.d0/6.d0 ELSE WRITE(*,*) 'PENTAEDRE: NBIS=',NBIS,' ***cas non implante' STOP END IF c -------------------------------- c choix des points dans la hauteur c -------------------------------- IF (NBIH.EQ.1) THEN DZETA(1)= 0.d0 WIH(1)= 2.d0 ELSEIF (NBIH.EQ.2) THEN DZETA(1)= -1.d0/sqrt(3.d0) WIH(1)= 1.d0 DZETA(2)= 1.d0/sqrt(3.d0) WIH(2)= 1.d0 ELSEIF (NBIH.EQ.3) THEN DZETA(2)= 0.d0 WIH(2)= 8.d0/9.d0 DZETA(1)= -sqrt(3.d0/5.d0) WIH(1)= 5.d0/9.d0 DZETA(3)= sqrt(3.d0/5.d0) WIH(3)= 5.d0/9.d0 ELSEIF (NBIH.EQ.5) THEN DZETA(3)= 0.d0 WIH(3)= 128.d0/225.d0 A= SQRT(5.d0/14.d0) DZETA(4)= (1.d0/3.d0)*(5.d0-4*A)**0.5 DZETA(2)= -DZETA(4) DZETA(5)= (1.d0/3.d0)*(5.d0+4*A)**0.5 DZETA(1)= -DZETA(5) WIH(4)= 161.d0/450.d0 + 13.d0/(180.d0*A) WIH(2)= WIH(4) WIH(5)= 161.d0/450.d0 - 13.d0/(180.d0*A) WIH(1)= WIH(5) ELSE WRITE(*,*) 'PENTAEDRE: NBIH=',NBIH,' ***cas non implante' STOP END IF c ----------------------------- c poids d'integration de volume c ----------------------------- DO NIS= 1,NBIS DO NIH= 1,NBIH WI(NIH,NIS)= WIS(NIS)*WIH(NIH) END DO END DO c ------------------------------------- c valeurs des fonctions d'interpolation c ------------------------------------- c -------------------------------------------------------- c -------------------- cas lineaire ---------------------- c -------------------------------------------------------- IF (NBNE.EQ.6) THEN DO NIS= 1,NBIS LAMBDA= 1.d0 -KSI(NIS) -ETA(NIS) DO NIH= 1,NBIH A= (1.d0 -DZETA(NIH))/ 2.d0 B= (1.d0 +DZETA(NIH))/ 2.d0 c --------------------- c valeurs des fonctions c --------------------- PHI(1,NIH,NIS)= LAMBDA*A PHI(2,NIH,NIS)= KSI(NIS)*A PHI(3,NIH,NIS)= ETA(NIS)*A PHI(4,NIH,NIS)= LAMBDA*B PHI(5,NIH,NIS)= KSI(NIS)*B PHI(6,NIH,NIS)= ETA(NIS)*B c -------------------------------- c valeurs des derivees suivant KSI c -------------------------------- DPHI(1,1,NIH,NIS)= -A DPHI(1,2,NIH,NIS)= A DPHI(1,3,NIH,NIS)= 0.d0 DPHI(1,4,NIH,NIS)= -B DPHI(1,5,NIH,NIS)= B DPHI(1,6,NIH,NIS)= 0.d0 c -------------------------------- c valeurs des derivees suivant ETA c -------------------------------- DPHI(2,1,NIH,NIS)= -A DPHI(2,2,NIH,NIS)= 0.d0 DPHI(2,3,NIH,NIS)= A DPHI(2,4,NIH,NIS)= -B DPHI(2,5,NIH,NIS)= 0.d0 DPHI(2,6,NIH,NIS)= B c ---------------------------------- c valeurs des derivees suivant DZETA c ---------------------------------- DPHI(3,1,NIH,NIS)= -LAMBDA/2.d0 DPHI(3,2,NIH,NIS)= -KSI(NIS)/2.d0 DPHI(3,3,NIH,NIS)= -ETA(NIS)/2.d0 DPHI(3,4,NIH,NIS)= LAMBDA/2.d0 DPHI(3,5,NIH,NIS)= KSI(NIS)/2.d0 DPHI(3,6,NIH,NIS)= ETA(NIS)/2.d0 END DO END DO c -------------------------------------------------------- c -------------------- cas quadratique ------------------- c ---- (voir p. 178 livre de J.L. BATOZ, G. DHATT) ---- c ---- Modelisation des structures par elements finis ---- c -------------------- volume1 ------------------------ c -------------------------------------------------------- ELSEIF (NBNE.EQ.15) THEN DO NIS= 1,NBIS LAMBDA= 1.d0 -KSI(NIS) -ETA(NIS) DO NIH= 1,NBIH A= (1.d0-DZETA(NIH))/2.d0 B= (1.d0+DZETA(NIH))/2.d0 C= 1.d0 - DZETA(NIH)**2 c --------------------------------------- c valeurs des fonctions c --------------------------------------- PHI(1,NIH,NIS)=A*LAMBDA*(2.d0*LAMBDA-DZETA(NIH)-2.d0) PHI(2,NIH,NIS)=A*KSI(NIS)*(2.d0*KSI(NIS)-DZETA(NIH)-2.d0) PHI(3,NIH,NIS)=A*ETA(NIS)*(2.d0*ETA(NIS)-DZETA(NIH)-2.d0) PHI(4,NIH,NIS)=B*LAMBDA*(2.d0*LAMBDA+DZETA(NIH)-2.d0) PHI(5,NIH,NIS)=B*KSI(NIS)*(2.d0*KSI(NIS)+DZETA(NIH)-2.d0) PHI(6,NIH,NIS)=B*ETA(NIS)*(2.d0*ETA(NIS)+DZETA(NIH)-2.d0) PHI(7,NIH,NIS)=4.d0*A*LAMBDA*KSI(NIS) PHI(8,NIH,NIS)=4.d0*A*KSI(NIS)*ETA(NIS) PHI(9,NIH,NIS)=4.d0*A*ETA(NIS)*LAMBDA PHI(10,NIH,NIS)=LAMBDA*C PHI(11,NIH,NIS)=KSI(NIS)*C PHI(12,NIH,NIS)=ETA(NIS)*C PHI(13,NIH,NIS)=4.d0*B*LAMBDA*KSI(NIS) PHI(14,NIH,NIS)=4.d0*B*KSI(NIS)*ETA(NIS) PHI(15,NIH,NIS)=4.d0*B*ETA(NIS)*LAMBDA c ------------------------------------------ c de leurs derivees par rapport a KSI et ETA c ------------------------------------------ DPHI(1,1,NIH,NIS)=A*(-4.d0*LAMBDA+DZETA(NIH)+2.d0) DPHI(2,1,NIH,NIS)=A*(-4.d0*LAMBDA+DZETA(NIH)+2.d0) DPHI(1,2,NIH,NIS)=A*(4.d0*KSI(NIS)-DZETA(NIH)-2.d0) DPHI(2,2,NIH,NIS)=0.d0 DPHI(1,3,NIH,NIS)=0.d0 DPHI(2,3,NIH,NIS)=A*(4.d0*ETA(NIS)-DZETA(NIH)-2.d0) DPHI(1,4,NIH,NIS)=B*(-4.d0*LAMBDA-DZETA(NIH)+2.d0) DPHI(2,4,NIH,NIS)=B*(-4.d0*LAMBDA-DZETA(NIH)+2.d0) DPHI(1,5,NIH,NIS)=B*(4.d0*KSI(NIS)+DZETA(NIH)-2.d0) DPHI(2,5,NIH,NIS)=0.d0 DPHI(1,6,NIH,NIS)=0.d0 DPHI(2,6,NIH,NIS)=B*(4.d0*ETA(NIS)+DZETA(NIH)-2.d0) DPHI(1,7,NIH,NIS)=4.d0*A*(-KSI(NIS)+LAMBDA) DPHI(2,7,NIH,NIS)=-4.d0*A*KSI(NIS) DPHI(1,8,NIH,NIS)=4.d0*A*ETA(NIS) DPHI(2,8,NIH,NIS)=4.d0*A*KSI(NIS) DPHI(1,9,NIH,NIS)=-4.d0*A*ETA(NIS) DPHI(2,9,NIH,NIS)=4.d0*A*(LAMBDA-ETA(NIS)) DPHI(1,10,NIH,NIS)=-C DPHI(2,10,NIH,NIS)=-C DPHI(1,11,NIH,NIS)=C DPHI(2,11,NIH,NIS)=0.d0 DPHI(1,12,NIH,NIS)=0.d0 DPHI(2,12,NIH,NIS)=C DPHI(1,13,NIH,NIS)=4.d0*B*(LAMBDA-KSI(NIS)) DPHI(2,13,NIH,NIS)=-4.d0*B*KSI(NIS) DPHI(1,14,NIH,NIS)=4.d0*B*ETA(NIS) DPHI(2,14,NIH,NIS)=4.d0*B*KSI(NIS) DPHI(1,15,NIH,NIS)=-4.d0*B*ETA(NIS) DPHI(2,15,NIH,NIS)=4.d0*B*(LAMBDA-ETA(NIS)) c ------------------------------------- c de leurs derivees par rapport a DZETA c ------------------------------------- DPHI(3,1,NIH,NIS)=-0.5d0*LAMBDA* & (2.d0*LAMBDA-DZETA(NIH)-2.d0)-LAMBDA*A DPHI(3,2,NIH,NIS)=-0.5d0*KSI(NIS)* & (2.d0*KSI(NIS)-DZETA(NIH)-2.d0)-KSI(NIS)*A DPHI(3,3,NIH,NIS)=-0.5d0*ETA(NIS)* & (2.d0*ETA(NIS)-DZETA(NIH)-2.d0)-ETA(NIS)*A DPHI(3,4,NIH,NIS)=0.5d0*LAMBDA* & (2.d0*LAMBDA+DZETA(NIH)-2.d0)+LAMBDA*B DPHI(3,5,NIH,NIS)=0.5d0*KSI(NIS)* & (2.d0*KSI(NIS)+DZETA(NIH)-2.d0)+KSI(NIS)*B DPHI(3,6,NIH,NIS)=0.5d0*ETA(NIS)* & (2.d0*ETA(NIS)+DZETA(NIH)-2.d0)+ETA(NIS)*B DPHI(3,7,NIH,NIS)=-2.d0*LAMBDA*KSI(NIS) DPHI(3,8,NIH,NIS)=-2.d0*KSI(NIS)*ETA(NIS) DPHI(3,9,NIH,NIS)=-2.d0*ETA(NIS)*LAMBDA DPHI(3,10,NIH,NIS)=-2.d0*DZETA(NIH)*LAMBDA DPHI(3,11,NIH,NIS)=-2.d0*DZETA(NIH)*KSI(NIS) DPHI(3,12,NIH,NIS)=-2.d0*DZETA(NIH)*ETA(NIS) DPHI(3,13,NIH,NIS)=2.d0*LAMBDA*KSI(NIS) DPHI(3,14,NIH,NIS)=2.d0*KSI(NIS)*ETA(NIS) DPHI(3,15,NIH,NIS)=2.d0*ETA(NIS)*LAMBDA ENDDO ENDDO c -------------------------------------------------------- c -------------------- cas du triangle quadratique et c ------------ du quadrangle lineaire dans la hauteur et c ------quadratique pour le cote adjacent au triangle c -------------------------------------------------------- ELSEIF (NBNE.EQ.12) THEN DO NIS= 1,NBIS LAMBDA= 1.d0 -KSI(NIS) -ETA(NIS) DO NIH= 1,NBIH A= (1.d0-DZETA(NIH))/2.d0 B= (1.d0+DZETA(NIH))/2.d0 C= 1.d0 - DZETA(NIH)**2 c --------------------------------------- c valeurs des fonctions c --------------------------------------- PHI(1,NIH,NIS)=-A*LAMBDA*(1.d0-2.d0*LAMBDA) PHI(2,NIH,NIS)=-A*KSI(NIS)*(1.d0-2.d0*KSI(NIS)) PHI(3,NIH,NIS)=-A*ETA(NIS)*(1.d0-2.d0*ETA(NIS)) PHI(4,NIH,NIS)=-B*LAMBDA*(1.d0-2.d0*LAMBDA) PHI(5,NIH,NIS)=-B*KSI(NIS)*(1.d0-2.d0*KSI(NIS)) PHI(6,NIH,NIS)=-B*ETA(NIS)*(1.d0-2.d0*ETA(NIS)) PHI(7,NIH,NIS)=4.d0*A*LAMBDA*KSI(NIS) PHI(8,NIH,NIS)=4.d0*A*KSI(NIS)*ETA(NIS) PHI(9,NIH,NIS)=4.d0*A*ETA(NIS)*LAMBDA PHI(10,NIH,NIS)=4.d0*B*LAMBDA*KSI(NIS) PHI(11,NIH,NIS)=4.d0*B*KSI(NIS)*ETA(NIS) PHI(12,NIH,NIS)=4.d0*B*ETA(NIS)*LAMBDA c ------------------------------------------ c de leurs derivees par rapport a KSI et ETA c ------------------------------------------ DPHI(1,1,NIH,NIS)=A*(1.d0-4.d0*LAMBDA) DPHI(2,1,NIH,NIS)=A*(1.d0-4.d0*LAMBDA) DPHI(1,2,NIH,NIS)=A*(-1.d0+4.d0*KSI(NIS)) DPHI(2,2,NIH,NIS)=0.d0 DPHI(1,3,NIH,NIS)=0.d0 DPHI(2,3,NIH,NIS)=A*(-1.d0+4.d0*ETA(NIS)) DPHI(1,4,NIH,NIS)=B*(1.d0-4.d0*LAMBDA) DPHI(2,4,NIH,NIS)=B*(1.d0-4.d0*LAMBDA) DPHI(1,5,NIH,NIS)=B*(-1.d0+4.d0*KSI(NIS)) DPHI(2,5,NIH,NIS)=0.d0 DPHI(1,6,NIH,NIS)=0.d0 DPHI(2,6,NIH,NIS)=B*(-1.d0+4.d0*ETA(NIS)) DPHI(1,7,NIH,NIS)=4.d0*A*(-KSI(NIS)+LAMBDA) DPHI(2,7,NIH,NIS)=-4.d0*A*KSI(NIS) DPHI(1,8,NIH,NIS)=4.d0*A*ETA(NIS) DPHI(2,8,NIH,NIS)=4.d0*A*KSI(NIS) DPHI(1,9,NIH,NIS)=-4.d0*A*ETA(NIS) DPHI(2,9,NIH,NIS)=4.d0*A*(LAMBDA-ETA(NIS)) DPHI(1,10,NIH,NIS)=4.d0*B*(LAMBDA-KSI(NIS)) DPHI(2,10,NIH,NIS)=-4.d0*B*KSI(NIS) DPHI(1,11,NIH,NIS)=4.d0*B*ETA(NIS) DPHI(2,11,NIH,NIS)=4.d0*B*KSI(NIS) DPHI(1,12,NIH,NIS)=-4.d0*B*ETA(NIS) DPHI(2,12,NIH,NIS)=4.d0*B*(LAMBDA-ETA(NIS)) c ------------------------------------- c de leurs derivees par rapport a DZETA c ------------------------------------- DPHI(3,1,NIH,NIS)=0.5d0*LAMBDA*(1.d0-2.d0*LAMBDA) DPHI(3,2,NIH,NIS)=0.5d0*KSI(NIS)*(1.d0-2.d0*KSI(NIS)) DPHI(3,3,NIH,NIS)=0.5d0*ETA(NIS)*(1.d0-2.d0*ETA(NIS)) DPHI(3,4,NIH,NIS)=-0.5d0*LAMBDA*(1.d0-2.d0*LAMBDA) DPHI(3,5,NIH,NIS)=-0.5d0*KSI(NIS)*(1.d0-2.d0*KSI(NIS)) DPHI(3,6,NIH,NIS)=-0.5d0*ETA(NIS)*(1.d0-2.d0*ETA(NIS)) DPHI(3,7,NIH,NIS)=-2.d0*LAMBDA*KSI(NIS) DPHI(3,8,NIH,NIS)=-2.d0*KSI(NIS)*ETA(NIS) DPHI(3,9,NIH,NIS)=-2.d0*ETA(NIS)*LAMBDA DPHI(3,10,NIH,NIS)=2.d0*LAMBDA*KSI(NIS) DPHI(3,11,NIH,NIS)=2.d0*KSI(NIS)*ETA(NIS) DPHI(3,12,NIH,NIS)=2.d0*ETA(NIS)*LAMBDA ENDDO ENDDO c -------------------------------------------------------- c -------------------- cas quadratique ------------------- c ---- (voir p. 142 livre de G. TOUZOT , G. DHATT) ---- c -------------------------------------------------------- ccc ELSEIF (NBNE.EQ.15) THEN ccc DO NIS= 1,NBIS ccc LAMBDA= 1.d0 -KSI(NIS) -ETA(NIS) ccc DO NIH= 1,NBIH ccc A= -(1.d0-DZETA(NIH))*DZETA(NIH)/ 2.d0 ccc B= (1.d0+DZETA(NIH))*DZETA(NIH)/ 2.d0 ccc C= 1.d0 - DZETA(NIH)**2 c --------------------------------------- c valeurs des fonctions c --------------------------------------- ccc PHI(1,NIH,NIS)= -LAMBDA*(1.d0-2.d0*LAMBDA)*A ccc PHI(2,NIH,NIS)= -KSI(NIS)*(1.d0-2.d0*KSI(NIS))*A ccc PHI(3,NIH,NIS)= -ETA(NIS)*(1.d0-2.d0*ETA(NIS))*A ccc PHI(4,NIH,NIS)= -LAMBDA*(1.d0-2.d0*LAMBDA)*B ccc PHI(5,NIH,NIS)= -KSI(NIS)*(1.d0-2.d0*KSI(NIS))*B ccc PHI(6,NIH,NIS)= -ETA(NIS)*(1.d0-2.d0*ETA(NIS))*B ccc PHI(7,NIH,NIS)= 4.d0*KSI(NIS)*LAMBDA*A ccc PHI(8,NIH,NIS)= 4.d0*KSI(NIS)*ETA(NIS)*A ccc PHI(9,NIH,NIS)= 4.d0*ETA(NIS)*LAMBDA*A ccc PHI(10,NIH,NIS)= LAMBDA*C ccc PHI(11,NIH,NIS)= KSI(NIS)*C ccc PHI(12,NIH,NIS)= ETA(NIS)*C ccc PHI(13,NIH,NIS)= 4.d0*KSI(NIS)*LAMBDA*B ccc PHI(14,NIH,NIS)= 4.d0*KSI(NIS)*ETA(NIS)*B ccc PHI(15,NIH,NIS)= 4.d0*ETA(NIS)*LAMBDA*B c ------------------------------------------ c de leurs derivees par rapport a KSI et ETA c ------------------------------------------ ccc DPHI(1,1,NIH,NIS)= (1.d0-4.d0*LAMBDA)*A ccc DPHI(2,1,NIH,NIS)= (1.d0-4.d0*LAMBDA)*A ccc DPHI(1,2,NIH,NIS)= (-1.d0+4.d0*KSI(NIS))*A ccc DPHI(2,2,NIH,NIS)= 0.d0 ccc DPHI(1,3,NIH,NIS)= 0.d0 ccc DPHI(2,3,NIH,NIS)= (-1.d0+4.d0*ETA(NIS))*A ccc DPHI(1,4,NIH,NIS)= (1.d0-4.d0*LAMBDA)*B ccc DPHI(2,4,NIH,NIS)= (1.d0-4.d0*LAMBDA)*B ccc DPHI(1,5,NIH,NIS)= (-1.d0+4.d0*KSI(NIS))*B ccc DPHI(2,5,NIH,NIS)= 0.d0 ccc DPHI(1,6,NIH,NIS)= 0.d0 ccc DPHI(2,6,NIH,NIS)= (-1.d0+4.d0*ETA(NIS))*B ccc DPHI(1,7,NIH,NIS)= (4.d0*(LAMBDA-KSI(NIS)))*A ccc DPHI(2,7,NIH,NIS)= -4.d0*KSI(NIS)*A ccc DPHI(1,8,NIH,NIS)= 4.d0*ETA(NIS)*A ccc DPHI(2,8,NIH,NIS)= 4.d0*KSI(NIS)*A ccc DPHI(1,9,NIH,NIS)= -4.d0*ETA(NIS)*A ccc DPHI(2,9,NIH,NIS)= 4.d0*(LAMBDA-ETA(NIS))*A ccc DPHI(1,10,NIH,NIS)= -C ccc DPHI(2,10,NIH,NIS)= -C ccc DPHI(1,11,NIH,NIS)= C ccc DPHI(2,11,NIH,NIS)= 0.d0 ccc DPHI(1,12,NIH,NIS)= 0.d0 ccc DPHI(2,12,NIH,NIS)= C ccc DPHI(1,13,NIH,NIS)= 4.d0*(LAMBDA-KSI(NIS))*B ccc DPHI(2,13,NIH,NIS)= -4.d0*KSI(NIS)*B ccc DPHI(1,14,NIH,NIS)= 4.d0*ETA(NIS)*B ccc DPHI(2,14,NIH,NIS)= 4.d0*KSI(NIS)*B ccc DPHI(1,15,NIH,NIS)= -4.d0*ETA(NIS)*B ccc DPHI(2,15,NIH,NIS)= 4.d0*(LAMBDA-ETA(NIS))*B c ------------------------------------- c de leurs derivees par rapport a DZETA c ------------------------------------- c A= -(1.d0-DZETA(NIH)) c B= 1.d0+DZETA(NIH) c modif du 06/10/95 derivee des A B ccc A=(-1.d0+2.d0*DZETA(NIH))/2.d0 ccc B=(1.d0+2.d0*DZETA(NIH))/2.d0 ccc C= - 2.d0*DZETA(NIH) ccc DPHI(3,1,NIH,NIS)= -LAMBDA*(1.d0-2.d0*LAMBDA)*A ccc DPHI(3,2,NIH,NIS)= -KSI(NIS)*(1.d0-2.d0*KSI(NIS))*A ccc DPHI(3,3,NIH,NIS)= -ETA(NIS)*(1.d0-2.d0*ETA(NIS))*A ccc DPHI(3,4,NIH,NIS)= -LAMBDA*(1.d0-2.d0*LAMBDA)*B ccc DPHI(3,5,NIH,NIS)= -KSI(NIS)*(1.d0-2.d0*KSI(NIS))*B ccc DPHI(3,6,NIH,NIS)= -ETA(NIS)*(1.d0-2.d0*ETA(NIS))*B ccc DPHI(3,7,NIH,NIS)= 4.d0*KSI(NIS)*LAMBDA*A ccc DPHI(3,8,NIH,NIS)= 4.d0*KSI(NIS)*ETA(NIS)*A ccc DPHI(3,9,NIH,NIS)= 4.d0*ETA(NIS)*LAMBDA*A ccc DPHI(3,10,NIH,NIS)= LAMBDA*C ccc DPHI(3,11,NIH,NIS)= KSI(NIS)*C ccc DPHI(3,12,NIH,NIS)= ETA(NIS)*C ccc DPHI(3,13,NIH,NIS)= 4.d0*KSI(NIS)*LAMBDA*B ccc DPHI(3,14,NIH,NIS)= 4.d0*KSI(NIS)*ETA(NIS)*B ccc DPHI(3,15,NIH,NIS)= 4.d0*ETA(NIS)*LAMBDA*B ccc ENDDO ccc ENDDO ELSE WRITE(*,*) 'PENTAEDRE: NBNE=',NBNE,' ***cas non implante' STOP ENDIF END \ No newline at end of file diff --git a/Elements/Geometrie/ElemGeom/volume/GeomTetraedre.cc b/Elements/Geometrie/ElemGeom/volume/GeomTetraedre.cc deleted file mode 100755 index 6811663..0000000 --- a/Elements/Geometrie/ElemGeom/volume/GeomTetraedre.cc +++ /dev/null @@ -1 +0,0 @@ -************************************************************************ * UNIVERSITE DE BRETAGNE OCCIDENTALE --- I.U.T. DE LORIENT * ************************************************************************ * LABORATOIRE DE GENIE MECANIQUE ET PRODUCTIQUE * * Tel 97.05.94.11 * * Centre de Genie Industriel 56520 GUIDEL-PLAGES * ************************************************************************ ************************************************************************ * * * DATE: Mon Jul 6 14:54:12 WET DST 1992 * * $ * * AUTEUR: J-P HILY * * $ * * PROJET: HEREZH * * $ * ************************************************************************ ************************************************************************ * * * VERIFICATION: * * * * ! date ! auteur ! but ! * * ------------------------------------------------------------ * * ! ! ! ! * * * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * MODIFICATIONS: * * * * $ * * * ************************************************************************ ************************************************************************ * * SUBROUTINE TETRAEDRE (NBNE,NBI,KSI,ETA,DZETA,WI,PHI,DPHI) * $ * implicit none * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * BUT: Interpolation pour un tetraedre. * * $ * * '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' * * VARIABLES: * * * * ..................................... en entree * * * integer NBNE ! nombre de noeuds de l'element integer NBI ! nombre de pts d'integration * * * ..................................... en sortie * * * real*8 KSI(NBI),ETA(NBI),DZETA(NBI) ! coordonnees des points d'integration real*8 WI(NBI) ! poids d'integration du volume real*8 PHI(NBNE,NBI),DPHI(3,NBNE,NBI) ! fonctions d'interpolation nodale et leur derivees ! PHI(r,ni) valeur de la r ieme fonction au point ni ! DPHI(i,r,ni) valeur de sa derivee suivant i * $ * * ...................................... internes * * * integer NI ! numero de points d'integration real*8 A,B,C,D,E,R,W real*8 LAMBDA * * ************************************************************************ ************************************************************************ * * * CORPS DU PROGRAMME: * * * *----------------------------------------------------------------------* c ------------------------------- c choix des points d'integrations c ------------------------------- IF (NBI.EQ.1) THEN KSI(1)= 1.d0/4.d0 ETA(1)= KSI(1) DZETA(1)= KSI(1) WI(1)= 1.d0/6.d0 ELSEIF (NBI.EQ.4) THEN A= (5.d0-sqrt(5.d0))/20.d0 B= (5.d0+3*sqrt(5.d0))/20.d0 KSI(1)= A ETA(1)= A DZETA(1)= A KSI(2)= A ETA(2)= A DZETA(2)= B KSI(3)= A ETA(3)= B DZETA(3)= A KSI(4)= B ETA(4)= A DZETA(4)= A DO NI= 1,NBI WI(NI)= 1.d0/24.d0 END DO ELSEIF (NBI.EQ.5) THEN A= 1.d0/4.d0 B= 1.d0/6.d0 C= 1.d0/2.d0 KSI(1)= A ETA(1)= A DZETA(1)= A KSI(2)= B ETA(2)= B DZETA(2)= B KSI(3)= B ETA(3)= B DZETA(3)= C KSI(4)= B ETA(4)= C DZETA(4)= B KSI(5)= C ETA(5)= B DZETA(5)= B WI(1)= -2.d0/15.d0 DO NI= 2,NBI WI(NI)= 3.d0/40.d0 END DO ELSEIF (NBI.EQ.15) THEN A= 1.d0/4.d0 KSI(1)= A ETA(1)= A DZETA(1)= A WI(1)= 8.d0/405.d0 R= sqrt(15.d0) B= (7.d0+R)/34.d0 C= (13.d0-3*R)/34.d0 KSI(2)= B ETA(2)= B DZETA(2)= B KSI(3)= B ETA(3)= B DZETA(3)= C KSI(4)= B ETA(4)= C DZETA(4)= B KSI(5)= C ETA(5)= B DZETA(5)= B W= (2665.d0-14*R)/226800 DO NI= 2,5 WI(NI)= W END DO B= (7.d0-R)/34.d0 C= (13.d0+3*R)/34.d0 KSI(6)= B ETA(6)= B DZETA(6)= B KSI(7)= B ETA(7)= B DZETA(7)= C KSI(8)= B ETA(8)= C DZETA(8)= B KSI(9)= C ETA(9)= B DZETA(9)= B W= (2665.d0+14*R)/226800 DO NI= 6,9 WI(NI)= W END DO D= (5.d0-R)/20.d0 E= (5.d0+R)/20.d0 KSI(10)= D ETA(10)= D DZETA(10)= E KSI(11)= D ETA(11)= E DZETA(11)= D KSI(12)= E ETA(12)= D DZETA(12)= D KSI(13)= D ETA(13)= E DZETA(13)= E KSI(14)= E ETA(14)= D DZETA(14)= E KSI(15)= E ETA(15)= E DZETA(15)= D W= 5.d0/567 DO NI= 10,NBI WI(NI)= W END DO ELSE WRITE(*,*) 'TETRAEDRE: NBI=',NBI,' ***cas non implante' STOP END IF c ------------------------------------ c valeur des fonctions d'interpolation c ------------------------------------ c ----------------------------------------------------- c ----------------- cas lineaire ---------------------- c ----------------------------------------------------- IF (NBNE.EQ.4) THEN DO NI= 1,NBI c --------------------- c valeurs des fonctions c --------------------- PHI(1,NI)= 1.d0 -KSI(NI) -ETA(NI) -DZETA(NI) PHI(2,NI)= KSI(NI) PHI(3,NI)= ETA(NI) PHI(4,NI)= DZETA(NI) c -------------------------------- c valeurs des derivees suivant KSI c -------------------------------- DPHI(1,1,NI)= -1.d0 DPHI(1,2,NI)= 1.d0 DPHI(1,3,NI)= 0.d0 DPHI(1,4,NI)= 0.d0 c -------------------------------- c valeurs des derivees suivant ETA c -------------------------------- DPHI(2,1,NI)= -1.d0 DPHI(2,2,NI)= 0.d0 DPHI(2,3,NI)= 1.d0 DPHI(2,4,NI)= 0.d0 c ---------------------------------- c valeurs des derivees suivant DZETA c ---------------------------------- DPHI(3,1,NI)= -1.d0 DPHI(3,2,NI)= 0.d0 DPHI(3,3,NI)= 0.d0 DPHI(3,4,NI)= 1.d0 END DO c ----------------------------------------------------- c ----------------- cas quadratique ------------------- c ----------------------------------------------------- ELSEIF (NBNE.EQ.10) THEN DO NI= 1,NBI LAMBDA= 1.d0 -KSI(NI) -ETA(NI) -DZETA(NI) c --------------------- c valeurs des fonctions c --------------------- PHI(1,NI)= -LAMBDA*(1.d0-2.d0*LAMBDA) PHI(2,NI)= -KSI(NI)*(1.d0-2.d0*KSI(NI)) PHI(3,NI)= -ETA(NI)*(1.d0-2.d0*ETA(NI)) PHI(4,NI)= -DZETA(NI)*(1.d0-2.d0*DZETA(NI)) PHI(5,NI)= 4.d0*KSI(NI)*LAMBDA PHI(6,NI)= 4.d0*KSI(NI)*ETA(NI) PHI(7,NI)= 4.d0*ETA(NI)*LAMBDA PHI(8,NI)= 4.d0*DZETA(NI)*LAMBDA PHI(9,NI)= 4.d0*KSI(NI)*DZETA(NI) PHI(10,NI)= 4.d0*ETA(NI)*DZETA(NI) c -------------------------------- c valeurs des derivees suivant KSI c -------------------------------- DPHI(1,1,NI)= 1.d0-4.d0*LAMBDA DPHI(1,2,NI)= -1.d0+4.d0*KSI(NI) DPHI(1,3,NI)= 0.d0 DPHI(1,4,NI)= 0.d0 DPHI(1,5,NI)= 4.d0*(LAMBDA-KSI(NI)) DPHI(1,6,NI)= 4.d0*ETA(NI) DPHI(1,7,NI)= -4.d0*ETA(NI) DPHI(1,8,NI)= -4.d0*DZETA(NI) DPHI(1,9,NI)= 4.d0*DZETA(NI) DPHI(1,10,NI)= 0.d0 c -------------------------------- c valeurs des derivees suivant ETA c -------------------------------- DPHI(2,1,NI)= 1.d0-4.d0*LAMBDA DPHI(2,2,NI)= 0.d0 DPHI(2,3,NI)= -1.d0+4.d0*ETA(NI) DPHI(2,4,NI)= 0.d0 DPHI(2,5,NI)= -4.d0*KSI(NI) DPHI(2,6,NI)= 4.d0*KSI(NI) DPHI(2,7,NI)= 4.d0*(LAMBDA-ETA(NI)) DPHI(2,8,NI)= -4.d0*DZETA(NI) DPHI(2,9,NI)= 0.d0 DPHI(2,10,NI)= 4.d0*DZETA(NI) c ---------------------------------- c valeurs des derivees suivant DZETA c ---------------------------------- DPHI(3,1,NI)= 1.d0-4.d0*LAMBDA DPHI(3,2,NI)= 0.d0 DPHI(3,3,NI)= 0.d0 DPHI(3,4,NI)= -1.d0+4.d0*DZETA(NI) DPHI(3,5,NI)= -4.d0*KSI(NI) DPHI(3,6,NI)= 0.d0 DPHI(3,7,NI)= -4.d0*ETA(NI) DPHI(3,8,NI)= 4.d0*(LAMBDA-DZETA(NI)) DPHI(3,9,NI)= 4.d0*KSI(NI) DPHI(3,10,NI)= 4.d0*ETA(NI) END DO ELSE WRITE(*,*) 'TETRAEDRE: NBNE=',NBNE,' ***cas non implante' STOP END IF END \ No newline at end of file diff --git a/Elements/Mecanique/Biellette/Met_pout2D.h b/Elements/Mecanique/Biellette/Met_pout2D.h index 1d96a77..0cf5eee 100644 --- a/Elements/Mecanique/Biellette/Met_pout2D.h +++ b/Elements/Mecanique/Biellette/Met_pout2D.h @@ -69,10 +69,10 @@ class Met_Pout2D : public Met_PiPoCo // Constructeur par defaut Met_Pout2D (); - // constructeur permettant de dimensionner unique ment certaine variables - // dim = dimension de l'espace, tab = liste - // des variables a initialiser - Met_Pout2D (int dim_base,int nbvec,const DdlElement& tabddl, + // constructeur permettant de dimensionner uniquement certaine variables + // dim = dimension de l'espace, tab = liste + // des variables a initialiser + Met_Pout2D (int dim_base,int nbvec,const DdlElement& tabddl, const Tableau& tabb,int nomb_noeud); // constructeur de copie Met_Pout2D (const Met_Pout2D&); @@ -80,24 +80,24 @@ class Met_Pout2D : public Met_PiPoCo ~Met_Pout2D (); // METHODES PUBLIQUES : - // Surcharge de l'operateur = : realise l'affectation - // dérivant de virtuel, a ne pas employer -> message d'erreur - Met_abstraite& operator= (const Met_abstraite& met); - Met_PiPoCo& operator= (const Met_PiPoCo& met); - // normale - virtual Met_Pout2D& operator= (const Met_Pout2D& met); - - // passage de la dérivée seconde - void DeriveeSeconde(Vecteur const & tabD2phi); + // Surcharge de l'operateur = : realise l'affectation + // dérivant de virtuel, a ne pas employer -> message d'erreur + Met_abstraite& operator= (const Met_abstraite& met); + Met_PiPoCo& operator= (const Met_PiPoCo& met); + // normale + virtual Met_Pout2D& operator= (const Met_Pout2D& met); + + // passage de la dérivée seconde + void DeriveeSeconde(Vecteur const & tabD2phi); // ============================ protege =========================== protected : - // calcul des normales a la poutre - void Calcul_N_0 (); - void Calcul_N_t (); - void Calcul_N_tdt (); + // calcul des normales a la poutre + void Calcul_N_0 (); + void Calcul_N_t (); + void Calcul_N_tdt (); //== les fonctions de calcul de base donc redefini // calcul de la base naturel a t0 // pendant le traitement il y a calcul de la base aiB et aiH de l'axe médian diff --git a/Elements/Mecanique/Biellette/PoutSimple1.cc b/Elements/Mecanique/Biellette/PoutSimple1.cc index bb1f05f..1db86c4 100644 --- a/Elements/Mecanique/Biellette/PoutSimple1.cc +++ b/Elements/Mecanique/Biellette/PoutSimple1.cc @@ -72,13 +72,13 @@ PoutSimple1::DonnCommunPS1::DonnCommunPS1(DonnCommunPS1& a) : ,matrice_masse(a.matrice_masse) {}; PoutSimple1::DonnCommunPS1::DonnCommunPS1::~DonnCommunPS1() - { int nbddl = tab_ddl.NbDdl(); + { int nbddl = tab_ddl.NbDdl(); int nbi=d2_epsBB.Taille(); for (int ni=1;ni<=nbi;ni++) - for (int i1=1; i1<= nbddl; i1++) - for (int i2=1; i2<= nbddl; i2++) - delete d2_epsBB(ni)(i1,i2); - }; + for (int i1=1; i1<= nbddl; i1++) + for (int i2=1; i2<= nbddl; i2++) + delete d2_epsBB(ni)(i1,i2); + }; // ---------- fin definition de la classe conteneur de donnees communes ------------ @@ -106,27 +106,25 @@ PoutSimple1::ConstrucElementPoutSimple1 PoutSimple1::construcElementPoutSimple1; // fonction privee // dans cette fonction il ne doit y avoir que les données communes !! void PoutSimple1::Def_DonnCommunPS1() - { GeomSeg segmentL(nbintL,nbNoeud) ; // element geometrique correspondant de l'axe - GeomSeg segmentH(nbintH) ; // element geometrique correspondant à l'épaisseur - // par défaut le nombre de noeuds est 2 - // degre de liberte - int dim = ParaGlob::Dimension(); - DdlElement tab_ddl(nbNoeud,dim); - int posi = Id_nom_ddl("X1") -1; - for (int i =1; i<= ParaGlob::Dimension(); i++) - for (int j =1; j<= nbNoeud; j++) -// tab_ddl (j,i) = Enum_ddl(i+posi); - tab_ddl.Change_Enum(j,i,Enum_ddl(i+posi)); + { GeomSeg segmentL(nbintL,nbNoeud) ; // element geometrique correspondant de l'axe + GeomSeg segmentH(nbintH) ; // element geometrique correspondant à l'épaisseur + // par défaut le nombre de noeuds est 2 + // degre de liberte + int dim = ParaGlob::Dimension(); + DdlElement tab_ddl(nbNoeud,dim); + int posi = Id_nom_ddl("X1") -1; + for (int i =1; i<= ParaGlob::Dimension(); i++) + for (int j =1; j<= nbNoeud; j++) + tab_ddl.Change_Enum(j,i,Enum_ddl(i+posi)); // cas des ddl éléments secondaires pour le calcul d'erreur // les tenseurs de contrainte sont de dimension 1 a priori // donc 1 ddl sig11 DdlElement tab_ddlErr(nbNoeud,1); posi = Id_nom_ddl("SIG11") -1; for (int j=1; j<= nbNoeud; j++) -// tab_ddlErr (j,1) = Enum_ddl(1+posi); - tab_ddlErr.Change_Enum(j,1,Enum_ddl(1+posi)); - // def metrique - // on definit les variables a priori toujours utiles + tab_ddlErr.Change_Enum(j,1,Enum_ddl(1+posi)); + // def metrique + // on definit les variables a priori toujours utiles Tableau tab(24); tab(1) = iM0; tab(2) = iMt; tab(3) = iMtdt ; tab(4) = igiB_0; tab(5) = igiB_t; tab(6) = igiB_tdt; @@ -136,10 +134,10 @@ void PoutSimple1::Def_DonnCommunPS1() tab(16)= id_gijBB_tdt; tab(17)= id_giH_tdt; tab(18)= id_gijHH_tdt; tab(19)= idMtdt ; tab(20)= id_jacobien_tdt;tab(21)= id2_gijBB_tdt; tab(22)= igradVBB_tdt; tab(23) = iVtdt; tab(24)= idVtdt; - // dim du pb , nb de vecteur de la base = 1 ici, - // , tableau de ddl et la def de variables - Met_Pout2D metri(ParaGlob::Dimension(),1,tab_ddl,tab,nbNoeud) ; - // ---- cas du calcul d'erreur sur sigma ou epsilon + // dim du pb , nb de vecteur de la base = 1 ici, + // , tableau de ddl et la def de variables + Met_Pout2D metri(ParaGlob::Dimension(),1,tab_ddl,tab,nbNoeud) ; + // ---- cas du calcul d'erreur sur sigma ou epsilon Tableau resEr(nbNoeud); for (int i=1; i<= nbNoeud; i++) resEr(i)=new Vecteur (1); // tenseur à une dimension @@ -150,13 +148,13 @@ void PoutSimple1::Def_DonnCommunPS1() // definition de la classe static contenant toute les variables communes aux PoutSimple1s doCoPS1 = new DonnCommunPS1(segmentL,segmentH,tab_ddl,metri,resEr,raidEr,matmasse,nbintL*nbintH); //dimensionnement des variations des deformations - int nbddl = tab_ddl.NbDdl(); + int nbddl = tab_ddl.NbDdl(); d_epsBB.Change_taille(nbddl); d_sigHH.Change_taille(nbddl); for (int i=1; i<= nbddl; i++) { d_epsBB(i) = NevezTenseurBB (1); d_sigHH(i) = NevezTenseurHH (1); - } + } }; PoutSimple1::PoutSimple1 () : // Constructeur par defaut @@ -172,7 +170,7 @@ PiPoCo(),lesPtMecaInt(),donnee_specif() return; } id_interpol=CUBIQUE; // donnees de la classe mere - id_geom=PS1; // + id_geom=PS1; // // stockage des donnees particulieres de la loi de comportement mécanique au point d'integ tabSaveDon.Change_taille(nbintL*nbintH); // stockage des donnees particulieres de la loi de comportement thermo mécanique au point d'integ @@ -181,31 +179,31 @@ PiPoCo(),lesPtMecaInt(),donnee_specif() tabSaveDefDon.Change_taille(nbintL*nbintH); tab_energ.Change_taille(nbintL*nbintH); tab_energ_t.Change_taille(nbintL*nbintH); - tab_noeud.Change_taille(nbNoeud); - // le fait de mettre les pointeurs a null permet - // de savoir que l'element n'est pas complet - for (int i=1; i<= nbNoeud; i++) - tab_noeud(i) = NULL; - // definition des donnees communes aux PoutSimple1s - // a la premiere definition d'une PoutSimple1 - if (doCoPS1 == NULL) Def_DonnCommunPS1(); - met = &(doCoPS1->met_pout); // met est defini dans elemeca - // --- cas de la dynamique ----- - mat_masse = &(doCoPS1->matrice_masse); - // pour les dérivées secondes, transformation de tableau en vecteur - tabD2phi.Change_taille((doCoPS1->segmentL).taD2phi().Taille()); - for (int i=1;i<= (doCoPS1->segmentL).taD2phi().Taille(); i++) - tabD2phi(i) = ((doCoPS1->segmentL).taD2phi())(i).Ligne(1); - // def pointe sur la deformation specifique a l'element - def = new DeformationP2D(*met,tab_noeud - ,(doCoPS1->segmentH).TaDphi(),(doCoPS1->segmentH).TaPhi() - ,(doCoPS1->segmentL).TaDphi(),(doCoPS1->segmentL).TaPhi() - ,tabD2phi); - // idem pour la masse ici par simplicité - defMas = new DeformationP2D(*met,tab_noeud - ,(doCoPS1->segmentH).TaDphi(),(doCoPS1->segmentH).TaPhi() - ,(doCoPS1->segmentL).TaDphi(),(doCoPS1->segmentL).TaPhi() - ,tabD2phi); + tab_noeud.Change_taille(nbNoeud); + // le fait de mettre les pointeurs a null permet + // de savoir que l'element n'est pas complet + for (int i=1; i<= nbNoeud; i++) + tab_noeud(i) = NULL; + // definition des donnees communes aux PoutSimple1s + // a la premiere definition d'une PoutSimple1 + if (doCoPS1 == NULL) Def_DonnCommunPS1(); + met = &(doCoPS1->met_pout); // met est defini dans elemeca + // --- cas de la dynamique ----- + mat_masse = &(doCoPS1->matrice_masse); + // pour les dérivées secondes, transformation de tableau en vecteur + tabD2phi.Change_taille((doCoPS1->segmentL).taD2phi().Taille()); + for (int i=1;i<= (doCoPS1->segmentL).taD2phi().Taille(); i++) + tabD2phi(i) = ((doCoPS1->segmentL).taD2phi())(i).Ligne(1); + // def pointe sur la deformation specifique a l'element + def = new DeformationP2D(*met,tab_noeud + ,(doCoPS1->segmentH).TaDphi(),(doCoPS1->segmentH).TaPhi() + ,(doCoPS1->segmentL).TaDphi(),(doCoPS1->segmentL).TaPhi() + ,tabD2phi); + // idem pour la masse ici par simplicité + defMas = new DeformationP2D(*met,tab_noeud + ,(doCoPS1->segmentH).TaDphi(),(doCoPS1->segmentH).TaPhi() + ,(doCoPS1->segmentL).TaDphi(),(doCoPS1->segmentL).TaPhi() + ,tabD2phi); //dimensionnement des deformations et contraintes etc.. int dimtens = 1; @@ -241,26 +239,26 @@ PiPoCo(num_mail,num_id,CUBIQUE,PS1),lesPtMecaInt() tabSaveDefDon.Change_taille(nbintL*nbintH); tab_energ.Change_taille(nbintL*nbintH); tab_energ_t.Change_taille(nbintL*nbintH); - tab_noeud.Change_taille(nbNoeud); - // le fait de mettre les pointeurs a null permet - // de savoir que l'element n'est pas complet - for (int i=1; i<= nbNoeud; i++) - tab_noeud(i) = NULL; - // definition des donnees communes aux PoutSimple1s - // a la premiere definition d'une PoutSimple1 - if (doCoPS1 == NULL) Def_DonnCommunPS1(); - met = &(doCoPS1->met_pout);// met est defini dans elemeca - // --- cas de la dynamique ----- - mat_masse = &(doCoPS1->matrice_masse); - // pour les dérivées secondes, transformation de tableau en vecteur - tabD2phi.Change_taille((doCoPS1->segmentL).taD2phi().Taille()); - for (int i=1;i<= (doCoPS1->segmentL).taD2phi().Taille(); i++) - tabD2phi(i) = ((doCoPS1->segmentL).taD2phi())(i).Ligne(1); - // def pointe sur la deformation specifique a l'element - def = new DeformationP2D(*met,tab_noeud - ,(doCoPS1->segmentH).TaDphi(),(doCoPS1->segmentH).TaPhi() - ,(doCoPS1->segmentL).TaDphi(),(doCoPS1->segmentL).TaPhi() - ,tabD2phi); + tab_noeud.Change_taille(nbNoeud); + // le fait de mettre les pointeurs a null permet + // de savoir que l'element n'est pas complet + for (int i=1; i<= nbNoeud; i++) + tab_noeud(i) = NULL; + // definition des donnees communes aux PoutSimple1s + // a la premiere definition d'une PoutSimple1 + if (doCoPS1 == NULL) Def_DonnCommunPS1(); + met = &(doCoPS1->met_pout);// met est defini dans elemeca + // --- cas de la dynamique ----- + mat_masse = &(doCoPS1->matrice_masse); + // pour les dérivées secondes, transformation de tableau en vecteur + tabD2phi.Change_taille((doCoPS1->segmentL).taD2phi().Taille()); + for (int i=1;i<= (doCoPS1->segmentL).taD2phi().Taille(); i++) + tabD2phi(i) = ((doCoPS1->segmentL).taD2phi())(i).Ligne(1); + // def pointe sur la deformation specifique a l'element + def = new DeformationP2D(*met,tab_noeud + ,(doCoPS1->segmentH).TaDphi(),(doCoPS1->segmentH).TaPhi() + ,(doCoPS1->segmentL).TaDphi(),(doCoPS1->segmentL).TaPhi() + ,tabD2phi); //dimensionnement des deformations et contraintes etc.. int dimtens = 1; @@ -294,26 +292,26 @@ PoutSimple1::PoutSimple1 (int num_mail,int num_id) : tabSaveDefDon.Change_taille(nbintL*nbintH); tab_energ.Change_taille(nbintL*nbintH); tab_energ_t.Change_taille(nbintL*nbintH); - tab_noeud.Change_taille(nbNoeud); - // le fait de mettre les pointeurs a null permet - // de savoir que l'element n'est pas complet - for (int i=1; i<= nbNoeud; i++) - tab_noeud(i) = NULL; - // definition des donnees communes aux PoutSimple1s - // a la premiere definition d'une PoutSimple1 - if (doCoPS1 == NULL) Def_DonnCommunPS1(); - met = &(doCoPS1->met_pout);// met est defini dans elemeca - // --- cas de la dynamique ----- - mat_masse = &(doCoPS1->matrice_masse); - // pour les dérivées secondes, transformation de tableau en vecteur - tabD2phi.Change_taille((doCoPS1->segmentL).taD2phi().Taille()); - for (int i=1;i<= (doCoPS1->segmentL).taD2phi().Taille(); i++) - tabD2phi(i) = ((doCoPS1->segmentL).taD2phi())(i).Ligne(1); - // def pointe sur la deformation specifique a l'element - def = new DeformationP2D(*met,tab_noeud - ,(doCoPS1->segmentH).TaDphi(),(doCoPS1->segmentH).TaPhi() - ,(doCoPS1->segmentL).TaDphi(),(doCoPS1->segmentL).TaPhi() - ,tabD2phi); + tab_noeud.Change_taille(nbNoeud); + // le fait de mettre les pointeurs a null permet + // de savoir que l'element n'est pas complet + for (int i=1; i<= nbNoeud; i++) + tab_noeud(i) = NULL; + // definition des donnees communes aux PoutSimple1s + // a la premiere definition d'une PoutSimple1 + if (doCoPS1 == NULL) Def_DonnCommunPS1(); + met = &(doCoPS1->met_pout);// met est defini dans elemeca + // --- cas de la dynamique ----- + mat_masse = &(doCoPS1->matrice_masse); + // pour les dérivées secondes, transformation de tableau en vecteur + tabD2phi.Change_taille((doCoPS1->segmentL).taD2phi().Taille()); + for (int i=1;i<= (doCoPS1->segmentL).taD2phi().Taille(); i++) + tabD2phi(i) = ((doCoPS1->segmentL).taD2phi())(i).Ligne(1); + // def pointe sur la deformation specifique a l'element + def = new DeformationP2D(*met,tab_noeud + ,(doCoPS1->segmentH).TaDphi(),(doCoPS1->segmentH).TaPhi() + ,(doCoPS1->segmentL).TaDphi(),(doCoPS1->segmentL).TaPhi() + ,tabD2phi); //dimensionnement des deformations et contraintes etc.. int dimtens = 1; @@ -349,25 +347,25 @@ PiPoCo(num_mail,num_id,tab,CUBIQUE,PS1),lesPtMecaInt() tabSaveDefDon.Change_taille(nbintL*nbintH); tab_energ.Change_taille(nbintL*nbintH); tab_energ_t.Change_taille(nbintL*nbintH); - if (tab_noeud.Taille() != nbNoeud) - { cout << "\n erreur de dimensionnement du tableau de noeud \n"; - cout << " PoutSimple1::PoutSimple1 (double sect,int num_id,const Tableau& tab)\n"; - Sortie (1); } - // definition des donnees communes aux PoutSimple1s - // a la premiere definition d'une PoutSimple1 - if (doCoPS1 == NULL) Def_DonnCommunPS1(); - met = &(doCoPS1->met_pout);// met est defini dans elemeca - // --- cas de la dynamique ----- - mat_masse = &(doCoPS1->matrice_masse); - // pour les dérivées secondes, transformation de tableau en vecteur - tabD2phi.Change_taille((doCoPS1->segmentL).taD2phi().Taille()); - for (int i=1;i<= (doCoPS1->segmentL).taD2phi().Taille(); i++) - tabD2phi(i) = ((doCoPS1->segmentL).taD2phi())(i).Ligne(1); - // def pointe sur la deformation specifique a l'element - def = new DeformationP2D(*met,tab_noeud - ,(doCoPS1->segmentH).TaDphi(),(doCoPS1->segmentH).TaPhi() - ,(doCoPS1->segmentL).TaDphi(),(doCoPS1->segmentL).TaPhi() - ,tabD2phi); + if (tab_noeud.Taille() != nbNoeud) + { cout << "\n erreur de dimensionnement du tableau de noeud \n"; + cout << " PoutSimple1::PoutSimple1 (double sect,int num_id,const Tableau& tab)\n"; + Sortie (1); } + // definition des donnees communes aux PoutSimple1s + // a la premiere definition d'une PoutSimple1 + if (doCoPS1 == NULL) Def_DonnCommunPS1(); + met = &(doCoPS1->met_pout);// met est defini dans elemeca + // --- cas de la dynamique ----- + mat_masse = &(doCoPS1->matrice_masse); + // pour les dérivées secondes, transformation de tableau en vecteur + tabD2phi.Change_taille((doCoPS1->segmentL).taD2phi().Taille()); + for (int i=1;i<= (doCoPS1->segmentL).taD2phi().Taille(); i++) + tabD2phi(i) = ((doCoPS1->segmentL).taD2phi())(i).Ligne(1); + // def pointe sur la deformation specifique a l'element + def = new DeformationP2D(*met,tab_noeud + ,(doCoPS1->segmentH).TaDphi(),(doCoPS1->segmentH).TaPhi() + ,(doCoPS1->segmentL).TaDphi(),(doCoPS1->segmentL).TaPhi() + ,tabD2phi); //dimensionnement des deformations et contraintes etc.. int dimtens = 1; @@ -388,12 +386,10 @@ PoutSimple1::PoutSimple1 (const PoutSimple1& pout) : // Constructeur de copie { lesPtIntegMecaInterne = &lesPtMecaInt; // association avec le pointeur d'ElemMeca // stockage des donnees particulieres de la loi de comportement au point d'integ - // tabSaveDon.Change_taille(1); - *(residu) = *(pout.residu); - *(raideur) = *(pout.raideur); -// met = (pout.met); // la métrique est commune -// *def = *(pout.def); -}; + // tabSaveDon.Change_taille(1); + *(residu) = *(pout.residu); + *(raideur) = *(pout.raideur); + }; PoutSimple1::~PoutSimple1 () // Destructeur @@ -401,7 +397,7 @@ PoutSimple1::~PoutSimple1 () // donc pas de delete if (ParaGlob::Dimension() != 2) return; // cas normal - LibereTenseur(); + LibereTenseur(); }; // Lecture des donnees de la classe sur fichier @@ -429,21 +425,12 @@ PoutSimple1::LectureDonneesParticulieres tab_noeud(i) = (*tabMaillageNoeud)(nb); // lecture normale } #else -/* #ifdef SYSTEM_MAC_OS_X_unix - else if ((entreePrinc->entree)->fail()) - // on a atteind la fin de la ligne et on appelle un nouvel enregistrement - { entreePrinc->NouvelleDonnee(); // lecture d'un nouvelle enregistrement - *(entreePrinc->entree) >> nb; - tab_noeud(i) = (*tabMaillageNoeud)(nb); // lecture normale - } - #else*/ else if ((entreePrinc->entree)->eof()) // la lecture est bonne mais on a atteind la fin de la ligne { tab_noeud(i) = (*tabMaillageNoeud)(nb); // lecture // si ce n'est pas la fin de la lecture on appelle un nouvel enregistrement if (i != nbNoeud) entreePrinc->NouvelleDonnee(); // lecture d'un nouvelle enregistrement } - // #endif #endif else // cas d'une erreur de lecture { cout << "\n erreur de lecture inconnue "; @@ -872,118 +859,7 @@ int PoutSimple1::TestComplet() Tableau const & PoutSimple1::Frontiere(bool force) { int cas = 6; // on veut des lignes et des points return Frontiere_elemeca(cas,force); -// { // le calcul et la création ne sont effectués qu'au premier appel -// // ou lorsque l'on veut forcer une recréation -// if (((ind_front_lin == 0) && (ind_front_surf == 0) && (ind_front_point == 0)) -// || force ) -//// if ((ind_front_point == 0) || force || (ind_front_point == 2)) -// { // dimensionnement des tableaux intermediaires -// Tableau tab(1); // les noeuds des points frontieres -// DdlElement ddelem(1); // les ddlelements des points frontieres -// int tail; -// if ((ParaGlob::Dimension() == 1) && (ind_front_lin > 0)) -// tail = 3; // deux points et une ligne -// else if (ParaGlob::Dimension() == 1) // cas sans ligne -// tail = 2; // 2 points -// else // cas d'une dimension 2 et 3 -// { tail = 3; // deux points et une ligne -// ind_front_lin = 1; -// } -// tabb.Change_taille(tail); // le tableau total de frontières -// -// // premier point -// tab(1) = tab_noeud(1); -// ddelem.Change_un_ddlNoeudElement(1,doCoPS1->tab_ddl(1)); -// // ddelem(1) = doCoPS1->tab_ddl(1); -// if (tabb(1+posi_tab_front_point) == NULL) -// tabb(1+posi_tab_front_point) = new FrontPointF (tab,ddelem); -// // second point -// tab(1) = tab_noeud(2); -// ddelem.Change_un_ddlNoeudElement(1,doCoPS1->tab_ddl(2)); -// // ddelem(1) = doCoPS1->tab_ddl(2); -// if (tabb(2+posi_tab_front_point) == NULL) -// tabb(2+posi_tab_front_point) = new FrontPointF (tab,ddelem); -// // 3 ieme cote eventuelle -// if (ind_front_lin > 0) -// // cas où il y a une ligne, c'est forcément le premier élément -// if (tabb(1) == NULL) -// tabb(1) = new FrontSegLine(tab_noeud,doCoPS1->tab_ddl); -// -// // mise à jour des indicateurs -// ind_front_point = 1; -// } -// -// return tabb; - }; + }; -//// ramène la frontière point -// // éventuellement création des frontieres points de l'element et stockage dans l'element -// // si c'est la première fois sinon il y a seulement retour de l'elements -// // a moins que le paramètre force est mis a true -// // dans ce dernier cas la frontière effacéee est recréée -// // num indique le numéro du point à créer (numérotation EF) -// ElFrontiere* const PoutSimple1::Frontiere_points(int,bool ) -// { cout << "\n fonction non implante !! " -// << "\n PoutSimple1::Frontiere_points(.."; -// Sortie(1); -// return NULL; -// } -// -//// ramène la frontière linéique -//// éventuellement création des frontieres linéique de l'element et stockage dans l'element -//// si c'est la première fois et en 3D sinon il y a seulement retour de l'elements -//// a moins que le paramètre force est mis a true -//// dans ce dernier cas la frontière effacéee est recréée -//// num indique le numéro de l'arête à créer (numérotation EF) -//ElFrontiere* const PoutSimple1::Frontiere_lineique(int num,bool ) -// { // le calcul et la création ne sont effectués qu'au premier appel -// // ou lorsque l'on veut forcer une recréation -// #ifdef MISE_AU_POINT -// if (num != 1) -// { cout << "\n *** erreur, pour les poutres simples il n'y a qu'une frontière ligne ! " -// << "\n Frontiere_lineique(int num,bool force)"; -// Sortie(1); -// } -// #endif -// -// // on regarde si les frontières linéiques existent sinon on les crée -// if (ind_front_lin == 1) -// return (ElFrontiere*)tabb(1); -// else if ( ind_front_lin == 2) -// // cas où certaines frontières existent -// if (tabb(1) != NULL) -// return (ElFrontiere*)tabb(1); -// // dans tous les autres cas on construit la frontière ligne -// // on commence par dimensionner le tableau de frontière -// if (ind_front_point > 0) -// // cas où il y a des frontières points (mais pas ligne) -// // on décale le tableau -// { tabb.Change_taille(3); -// tabb(3) = tabb(2); -// tabb(2) = tabb(1); -// posi_tab_front_point = 1; -// } -// // on définit la ligne -// tabb(1) = new FrontSegLine(tab_noeud,doCoPS1->tab_ddl); -// ind_front_lin = 1; // mise à jour de l'indicateur -// // et normalement posi_tab_front_ligne = 0, car jamais changé -// return (ElFrontiere*)tabb(num); -// }; -// -// -//// ramène la frontière surfacique -//// éventuellement création des frontieres surfacique de l'element et stockage dans l'element -//// si c'est la première fois sinon il y a seulement retour de l'elements -//// a moins que le paramètre force est mis a true -//// dans ce dernier cas la frontière effacéee est recréée -//// num indique le numéro de la surface à créer (numérotation EF) -//// ici normalement la fonction ne doit pas être appelée -//ElFrontiere* const PoutSimple1::Frontiere_surfacique(int ,bool ) -// { cout << "\n *** erreur, pour les poutres simples il n'y a pas de frontière surface ! " -// << "\n Frontiere_surfacique(int ,bool force = false)"; -// Sortie(1); -// return NULL; -// }; -// diff --git a/Elements/Mecanique/Biellette/PoutSimple1.h b/Elements/Mecanique/Biellette/PoutSimple1.h index 7d1c1de..5e611ac 100644 --- a/Elements/Mecanique/Biellette/PoutSimple1.h +++ b/Elements/Mecanique/Biellette/PoutSimple1.h @@ -116,20 +116,20 @@ class PoutSimple1 : public PiPoCo // création d'un élément de copie: utilisation de l'opérateur new et du constructeur de copie // méthode virtuelle - Element* Nevez_copie() const { Element * el= new PoutSimple1(*this); return el;}; + Element* Nevez_copie() const { Element * el= new PoutSimple1(*this); return el;}; // Surcharge de l'operateur = : realise l'egalite entre deux instances de PoutSimple1 PoutSimple1& operator= (PoutSimple1& pout); // METHODES : -// 1) derivant des virtuelles pures + // 1) derivant des virtuelles pures // Lecture des donnees de la classe sur fichier void LectureDonneesParticulieres (UtilLecture *,Tableau * ); - // affichage d'info en fonction de ordre - // ordre = "commande" : affichage d'un exemple d'entree pour l'élément - void Info_com_Element(UtilLecture * entreePrinc,string& ordre,Tableau * tabMaillageNoeud) - { return Element::Info_com_El(2,entreePrinc,ordre,tabMaillageNoeud);}; + // affichage d'info en fonction de ordre + // ordre = "commande" : affichage d'un exemple d'entree pour l'élément + void Info_com_Element(UtilLecture * entreePrinc,string& ordre,Tableau * tabMaillageNoeud) + { return Element::Info_com_El(2,entreePrinc,ordre,tabMaillageNoeud);}; // Calcul du residu local et de la raideur locale, // pour le schema implicite @@ -145,24 +145,24 @@ class PoutSimple1 : public PiPoCo Vecteur* CalculResidu_tdt (const ParaAlgoControle & pa) { return PoutSimple1::CalculResidu(true,pa);}; - // Calcul de la matrice masse pour l'élément - Mat_pleine * CalculMatriceMasse (Enum_calcul_masse id_calcul_masse) ; + // Calcul de la matrice masse pour l'élément + Mat_pleine * CalculMatriceMasse (Enum_calcul_masse id_calcul_masse) ; - // --------- calcul dynamique --------- - // calcul de la longueur d'arrête de l'élément minimal - // divisé par la célérité la plus rapide dans le matériau - double Long_arrete_mini_sur_c(Enum_dure temps) - { return ElemMeca::Interne_Long_arrete_mini_sur_c(temps);}; + // --------- calcul dynamique --------- + // calcul de la longueur d'arrête de l'élément minimal + // divisé par la célérité la plus rapide dans le matériau + double Long_arrete_mini_sur_c(Enum_dure temps) + { return ElemMeca::Interne_Long_arrete_mini_sur_c(temps);}; // retourne les tableaux de ddl associés aux noeuds, gere par l'element // ce tableau et specifique a l'element const DdlElement & TableauDdl() const ; - // actualisation des ddl et des grandeurs actives de t+dt vers t - void TdtversT(); - // actualisation des ddl et des grandeurs actives de t vers tdt - void TversTdt(); + // actualisation des ddl et des grandeurs actives de t+dt vers t + void TdtversT(); + // actualisation des ddl et des grandeurs actives de t vers tdt + void TversTdt(); // Libere la place occupee par le residu et eventuellement la raideur // par l'appel de Libere de la classe mere et libere les differents tenseurs @@ -196,75 +196,75 @@ class PoutSimple1 : public PiPoCo // 3) cas où l'on veut les coordonnées aux trois temps void Point_physique(const Coordonnee& c_int,Tableau & t_co); - // affichage dans la sortie transmise, des variables duales "nom" - // dans le cas ou nom est vide, affichage de "toute" les variables - void AfficheVarDual(ofstream& sort, Tableau& nom); + // affichage dans la sortie transmise, des variables duales "nom" + // dans le cas ou nom est vide, affichage de "toute" les variables + void AfficheVarDual(ofstream& sort, Tableau& nom); //============= lecture écriture dans base info ========== - // cas donne le niveau de la récupération - // = 1 : on récupère tout - // = 2 : on récupère uniquement les données variables (supposées comme telles) - void Lecture_base_info - (ifstream& ent,const Tableau * tabMaillageNoeud,const int cas) ; - // cas donne le niveau de sauvegarde - // = 1 : on sauvegarde tout - // = 2 : on sauvegarde uniquement les données variables (supposées comme telles) - void Ecriture_base_info(ofstream& sort,const int cas) ; + // cas donne le niveau de la récupération + // = 1 : on récupère tout + // = 2 : on récupère uniquement les données variables (supposées comme telles) + void Lecture_base_info + (ifstream& ent,const Tableau * tabMaillageNoeud,const int cas) ; + // cas donne le niveau de sauvegarde + // = 1 : on sauvegarde tout + // = 2 : on sauvegarde uniquement les données variables (supposées comme telles) + void Ecriture_base_info(ofstream& sort,const int cas) ; - // définition du nombre maxi de point d'intégration dans l'épaisseur - inline int Nb_pt_int_epai() - { return doCoPS1->segmentL.Nbi();}; - // définition du nombre maxi de point d'intégration sur la surface ou - // dans l'axe de la poutre - inline int Nb_pt_int_surf() - { return doCoPS1->segmentH.Nbi();}; - // récupération de l'épaisseur - inline double H() - { return donnee_specif.epaisseur;}; + // définition du nombre maxi de point d'intégration dans l'épaisseur + inline int Nb_pt_int_epai() + { return doCoPS1->segmentL.Nbi();}; + // définition du nombre maxi de point d'intégration sur la surface ou + // dans l'axe de la poutre + inline int Nb_pt_int_surf() + { return doCoPS1->segmentH.Nbi();}; + // récupération de l'épaisseur + inline double H() + { return donnee_specif.epaisseur;}; // --------- calculs utils dans le cadre de la recherche du flambement linéaire // Calcul de la matrice géométrique et initiale ElemMeca::MatGeomInit MatricesGeometrique_Et_Initiale (const ParaAlgoControle & pa) ; - // inactive les ddl du problème primaire de mécanique - inline void Inactive_ddl_primaire() - {ElemMeca::Inact_ddl_primaire(doCoPS1->tab_ddl);}; - // active les ddl du problème primaire de mécanique - inline void Active_ddl_primaire() - {ElemMeca::Act_ddl_primaire(doCoPS1->tab_ddl);}; - // ajout des ddl de contraintes pour les noeuds de l'élément - inline void Plus_ddl_Sigma() - {ElemMeca::Ad_ddl_Sigma(doCoPS1->tab_ddlErr);}; - // inactive les ddl du problème de recherche d'erreur : les contraintes - inline void Inactive_ddl_Sigma() - {ElemMeca::Inact_ddl_Sigma(doCoPS1->tab_ddlErr);}; - // active les ddl du problème de recherche d'erreur : les contraintes - inline void Active_ddl_Sigma() - {ElemMeca::Act_ddl_Sigma(doCoPS1->tab_ddlErr);}; - // active le premier ddl du problème de recherche d'erreur : SIGMA11 - inline void Active_premier_ddl_Sigma() - {ElemMeca::Act_premier_ddl_Sigma();}; + // inactive les ddl du problème primaire de mécanique + inline void Inactive_ddl_primaire() + {ElemMeca::Inact_ddl_primaire(doCoPS1->tab_ddl);}; + // active les ddl du problème primaire de mécanique + inline void Active_ddl_primaire() + {ElemMeca::Act_ddl_primaire(doCoPS1->tab_ddl);}; + // ajout des ddl de contraintes pour les noeuds de l'élément + inline void Plus_ddl_Sigma() + {ElemMeca::Ad_ddl_Sigma(doCoPS1->tab_ddlErr);}; + // inactive les ddl du problème de recherche d'erreur : les contraintes + inline void Inactive_ddl_Sigma() + {ElemMeca::Inact_ddl_Sigma(doCoPS1->tab_ddlErr);}; + // active les ddl du problème de recherche d'erreur : les contraintes + inline void Active_ddl_Sigma() + {ElemMeca::Act_ddl_Sigma(doCoPS1->tab_ddlErr);}; + // active le premier ddl du problème de recherche d'erreur : SIGMA11 + inline void Active_premier_ddl_Sigma() + {ElemMeca::Act_premier_ddl_Sigma();}; - // lecture de données diverses sur le flot d'entrée - void LectureContraintes(UtilLecture * entreePrinc) - { if (CalculResidu_t_PoutSimple1_met_abstraite == 1) - ElemMeca::LectureDesContraintes (false,entreePrinc,lesPtMecaInt.TabSigHH_t()); - else - { ElemMeca::LectureDesContraintes (true,entreePrinc,lesPtMecaInt.TabSigHH_t()); - CalculResidu_t_PoutSimple1_met_abstraite = 1; - } - }; + // lecture de données diverses sur le flot d'entrée + void LectureContraintes(UtilLecture * entreePrinc) + { if (CalculResidu_t_PoutSimple1_met_abstraite == 1) + ElemMeca::LectureDesContraintes (false,entreePrinc,lesPtMecaInt.TabSigHH_t()); + else + { ElemMeca::LectureDesContraintes (true,entreePrinc,lesPtMecaInt.TabSigHH_t()); + CalculResidu_t_PoutSimple1_met_abstraite = 1; + } + }; - // retour des contraintes en absolu retour true si elle existe sinon false - bool ContraintesAbsolues(Tableau & tabSig) - { if (CalculResidu_t_PoutSimple1_met_abstraite == 1) - ElemMeca::ContraintesEnAbsolues(false,lesPtMecaInt.TabSigHH_t(),tabSig); - else - { ElemMeca::ContraintesEnAbsolues(true,lesPtMecaInt.TabSigHH_t(),tabSig); - CalculResidu_t_PoutSimple1_met_abstraite = 1; - } - return true; } + // retour des contraintes en absolu retour true si elle existe sinon false + bool ContraintesAbsolues(Tableau & tabSig) + { if (CalculResidu_t_PoutSimple1_met_abstraite == 1) + ElemMeca::ContraintesEnAbsolues(false,lesPtMecaInt.TabSigHH_t(),tabSig); + else + { ElemMeca::ContraintesEnAbsolues(true,lesPtMecaInt.TabSigHH_t(),tabSig); + CalculResidu_t_PoutSimple1_met_abstraite = 1; + } + return true; } // ========= définition et/ou construction des frontières =============== @@ -275,30 +275,6 @@ class PoutSimple1 : public PiPoCo // dans ce dernier cas seul les frontière effacées sont recréée Tableau const & Frontiere(bool force = false); - // ramène la frontière point - // éventuellement création des frontieres points de l'element et stockage dans l'element - // si c'est la première fois sinon il y a seulement retour de l'elements - // a moins que le paramètre force est mis a true - // dans ce dernier cas la frontière effacéee est recréée - // num indique le numéro du point à créer (numérotation EF) -// ElFrontiere* const Frontiere_points(int num,bool force = false); - - // ramène la frontière linéique - // éventuellement création des frontieres linéique de l'element et stockage dans l'element - // si c'est la première fois et en 3D sinon il y a seulement retour de l'elements - // a moins que le paramètre force est mis a true - // dans ce dernier cas la frontière effacéee est recréée - // num indique le numéro de l'arête à créer (numérotation EF) -// ElFrontiere* const Frontiere_lineique(int num,bool force = false); - - // ramène la frontière surfacique - // éventuellement création des frontieres surfacique de l'element et stockage dans l'element - // si c'est la première fois sinon il y a seulement retour de l'elements - // a moins que le paramètre force est mis a true - // dans ce dernier cas la frontière effacéee est recréée - // num indique le numéro de la surface à créer (numérotation EF) - // ici normalement la fonction ne doit pas être appelée -// ElFrontiere* const Frontiere_surfacique(int ,bool force = false); // Retourne la section de l'element double Section (Enum_dure , const Coordonnee& ) @@ -315,30 +291,30 @@ class PoutSimple1 : public PiPoCo // Retourne la hauteur de l'element inline double Hauteur () { return donnee_specif.epaisseur; }; - // les coordonnees des points d'integration dans l'epaisseur - inline double KSIepais(int i) { return doCoPS1->segmentH.KSI(i);}; - + // les coordonnees des points d'integration dans l'epaisseur + inline double KSIepais(int i) { return doCoPS1->segmentH.KSI(i);}; - // ajout du tableau specific de ddl des noeuds de la poutre - // la procedure met a jour les ddl(relatif a l'element, c-a-d Xi) - // des noeuds constituants l'element - void ConstTabDdl(); + + // ajout du tableau specific de ddl des noeuds de la poutre + // la procedure met a jour les ddl(relatif a l'element, c-a-d Xi) + // des noeuds constituants l'element + void ConstTabDdl(); - protected: +protected: // ==== >>>> methodes virtuelles dérivant d'ElemMeca ============ - // ramene la dimension des tenseurs contraintes et déformations de l'élément - int Dim_sig_eps() const {return 1;}; + // ramene la dimension des tenseurs contraintes et déformations de l'élément + int Dim_sig_eps() const {return 1;}; // -------------------- calcul de frontières en protected ------------------- - // --- fonction nécessaire pour la construction des Frontières linéiques ou surfaciques particulière à l'élément - // adressage des frontières linéiques et surfacique - // définit dans les classes dérivées, et utilisées pour la construction des frontières - virtual ElFrontiere* new_frontiere_lin(int ,Tableau & tab, DdlElement& ddelem) - { return ((ElFrontiere*) (new FrontSegLine(tab,ddelem)));}; - virtual ElFrontiere* new_frontiere_surf(int ,Tableau & tab, DdlElement& ddelem) - {return NULL;} // il n'y a pas de surface possible + // --- fonction nécessaire pour la construction des Frontières linéiques ou surfaciques particulière à l'élément + // adressage des frontières linéiques et surfacique + // définit dans les classes dérivées, et utilisées pour la construction des frontières + virtual ElFrontiere* new_frontiere_lin(int ,Tableau & tab, DdlElement& ddelem) + { return ((ElFrontiere*) (new FrontSegLine(tab,ddelem)));}; + virtual ElFrontiere* new_frontiere_surf(int ,Tableau & tab, DdlElement& ddelem) + {return NULL;} // il n'y a pas de surface possible private : diff --git a/Elements/Mecanique/Deformation_gene/PiPoCo.h b/Elements/Mecanique/Deformation_gene/PiPoCo.h index a3108cd..a5d5975 100644 --- a/Elements/Mecanique/Deformation_gene/PiPoCo.h +++ b/Elements/Mecanique/Deformation_gene/PiPoCo.h @@ -68,20 +68,20 @@ class PiPoCo : public ElemMeca PiPoCo (int num_mail=0,int num_id=-3) : ElemMeca (num_mail,num_id) {}; // Constructeur : un numero de maillage et d'identification et le tableau de connexite des noeuds PiPoCo (int num_mail,int num_id,const Tableau& tab) : ElemMeca (num_mail, num_id, tab) {}; - // Constructeur : un numero de maillage, d'identification ,la geometrie ,le type d'interpolation - PiPoCo (int num_mail,int num_id,Enum_interpol id_interp_elt,Enum_geom id_geom_elt) : - ElemMeca (num_mail,num_id,id_interp_elt,id_geom_elt) {}; - // Constructeur idem si-dessus mais des chaines de caractères - PiPoCo (int num_mail,int num_id,char* nom_interpol,char* nom_geom) : - ElemMeca (num_mail,num_id,nom_interpol,nom_geom) {}; - // Constructeur utile quand toutes les donnees de la classe Element sont connues - // 1) avec des identificateurs d'énumétation - PiPoCo (int num_mail,int num_id,const Tableau& tab,Enum_interpol id_interp_elt, - Enum_geom id_geom_elt) : - ElemMeca (num_mail,num_id,tab,id_interp_elt,id_geom_elt) {}; - // 2) avec des identificateurs = chaines de caractères - PiPoCo (int num_mail,int num_id,const Tableau& tab,char* nom_interpol,char* nom_geom) : - ElemMeca (num_mail,num_id,tab,nom_interpol,nom_geom) {} ; + // Constructeur : un numero de maillage, d'identification ,la geometrie ,le type d'interpolation + PiPoCo (int num_mail,int num_id,Enum_interpol id_interp_elt,Enum_geom id_geom_elt) : + ElemMeca (num_mail,num_id,id_interp_elt,id_geom_elt) {}; + // Constructeur idem si-dessus mais des chaines de caractères + PiPoCo (int num_mail,int num_id,char* nom_interpol,char* nom_geom) : + ElemMeca (num_mail,num_id,nom_interpol,nom_geom) {}; + // Constructeur utile quand toutes les donnees de la classe Element sont connues + // 1) avec des identificateurs d'énumétation + PiPoCo (int num_mail,int num_id,const Tableau& tab,Enum_interpol id_interp_elt, + Enum_geom id_geom_elt) : + ElemMeca (num_mail,num_id,tab,id_interp_elt,id_geom_elt) {}; + // 2) avec des identificateurs = chaines de caractères + PiPoCo (int num_mail,int num_id,const Tableau& tab,char* nom_interpol,char* nom_geom) : + ElemMeca (num_mail,num_id,tab,nom_interpol,nom_geom) {} ; // Constructeur de copie PiPoCo (const PiPoCo& ps) : ElemMeca (ps) {}; @@ -90,32 +90,32 @@ class PiPoCo : public ElemMeca // =========================== methodes publiques =============================== - // ramene vrai si la surface numéro ns existe pour l'élément - // dans le cas des poutres il n'y a pas de surface - bool SurfExiste(int ) const + // ramene vrai si la surface numéro ns existe pour l'élément + // dans le cas des poutres il n'y a pas de surface + bool SurfExiste(int ) const { return false;}; - // ramene vrai si l'arête numéro na existe pour l'élément - bool AreteExiste(int na) const {if (na==1) return true; else return false;}; + // ramene vrai si l'arête numéro na existe pour l'élément + bool AreteExiste(int na) const {if (na==1) return true; else return false;}; - // calcul si un point est a l'interieur de l'element ou non - // il faut que M est la dimension globale - // les trois fonctions sont pour l'etude a t=0, t et tdt - // retour : =0 le point est externe, =1 le point est interne , - // = 2 le point est sur la frontière à la précision près - // coor_locales : s'il est différent de NULL, est affecté des coordonnées locales calculées, - // uniquement précises si le point est interne - int Interne_0(const Coordonnee& M,Coordonnee* coor_locales=NULL); - int Interne_t(const Coordonnee& M,Coordonnee* coor_locales=NULL); - int Interne_tdt(const Coordonnee& M,Coordonnee* coor_locales=NULL); - //1) methodes virtuelles - // définition du nombre maxi de point d'intégration dans l'épaisseur - virtual int Nb_pt_int_epai() = 0; - // définition du nombre maxi de point d'intégration sur la surface ou - // dans l'axe de la poutre - virtual int Nb_pt_int_surf() = 0; - // récupération de l'épaisseur - virtual double H() = 0; + // calcul si un point est a l'interieur de l'element ou non + // il faut que M est la dimension globale + // les trois fonctions sont pour l'etude a t=0, t et tdt + // retour : =0 le point est externe, =1 le point est interne , + // = 2 le point est sur la frontière à la précision près + // coor_locales : s'il est différent de NULL, est affecté des coordonnées locales calculées, + // uniquement précises si le point est interne + int Interne_0(const Coordonnee& M,Coordonnee* coor_locales=NULL); + int Interne_t(const Coordonnee& M,Coordonnee* coor_locales=NULL); + int Interne_tdt(const Coordonnee& M,Coordonnee* coor_locales=NULL); + //1) methodes virtuelles + // définition du nombre maxi de point d'intégration dans l'épaisseur + virtual int Nb_pt_int_epai() = 0; + // définition du nombre maxi de point d'intégration sur la surface ou + // dans l'axe de la poutre + virtual int Nb_pt_int_surf() = 0; + // récupération de l'épaisseur + virtual double H() = 0; // ------- affichage ou récupération d'informations -------------- // retourne un numero d'ordre d'un point le plus près ou est exprimé la grandeur enum @@ -127,74 +127,76 @@ class PiPoCo : public ElemMeca {// méthode ici à faire, car ici spécifique au fait d'avoir des pt d'integ dans l'épaisseur cout << "\n non implanté , PiPoCo::PointLePlusPres(Enum_dure..."; Sortie(1); - return PtLePlusPres(temps,enu,M);}; + return PtLePlusPres(temps,enu,M); + }; - // recuperation des coordonnées du point de numéro d'ordre iteg pour - // la grandeur enu + // recuperation des coordonnées du point de numéro d'ordre iteg pour + // la grandeur enu // temps: dit si c'est à 0 ou t ou tdt - // si erreur retourne erreur à true - Coordonnee CoordPtInteg(Enum_dure temps,Enum_ddl enu,int iteg,bool& erreur) + // si erreur retourne erreur à true + Coordonnee CoordPtInteg(Enum_dure temps,Enum_ddl enu,int iteg,bool& erreur) {// méthode ici à faire, car ici spécifique au fait d'avoir des pt d'integ dans l'épaisseur cout << "\n non implanté , PiPoCo::CoordPtInteg(Enum_dure..."; Sortie(1); - return CoordPtInt(temps,enu,iteg,erreur);}; + return CoordPtInt(temps,enu,iteg,erreur); + }; -// récupération des valeurs au numéro d'ordre = iteg pour -// les grandeur enu -// absolue: indique si oui ou non on sort les tenseurs dans la base absolue ou une base particulière -Tableau Valeur_a_diff_temps(bool absolue,Enum_dure enu_t,const List_io& enu,int iteg) { // méthode ici à faire, car ici spécifique au fait d'avoir des pt d'integ dans l'épaisseur - cout << "\n non implanté , PiPoCo::Valeur_a_diff_temps(Enum_dure..."; - Sortie(1); - return ElemMeca::Valeur_multi(absolue,enu_t,enu,iteg,1); // " - }; -// récupération des valeurs au numéro d'ordre = iteg pour les grandeurs enu -// ici il s'agit de grandeurs tensorielles, le retour s'effectue dans la liste -// de conteneurs quelconque associée -void ValTensorielle_a_diff_temps(bool absolue,Enum_dure ,List_io& ,int ) - { // méthode ici à faire, car ici spécifique au fait d'avoir des pt d'integ dans l'épaisseur - cout << "\n non implanté , PiPoCo::ValTensorielle_a_diff_temps(Enum_dure..."; - Sortie(1); - }; + // récupération des valeurs au numéro d'ordre = iteg pour + // les grandeur enu + // absolue: indique si oui ou non on sort les tenseurs dans la base absolue ou une base particulière + Tableau Valeur_a_diff_temps(bool absolue,Enum_dure enu_t,const List_io& enu,int iteg) { // méthode ici à faire, car ici spécifique au fait d'avoir des pt d'integ dans l'épaisseur + cout << "\n non implanté , PiPoCo::Valeur_a_diff_temps(Enum_dure..."; + Sortie(1); + return ElemMeca::Valeur_multi(absolue,enu_t,enu,iteg,1); // " + }; + // récupération des valeurs au numéro d'ordre = iteg pour les grandeurs enu + // ici il s'agit de grandeurs tensorielles, le retour s'effectue dans la liste + // de conteneurs quelconque associée + void ValTensorielle_a_diff_temps(bool absolue,Enum_dure ,List_io& ,int ) + { // méthode ici à faire, car ici spécifique au fait d'avoir des pt d'integ dans l'épaisseur + cout << "\n non implanté , PiPoCo::ValTensorielle_a_diff_temps(Enum_dure..."; + Sortie(1); + }; - // 2) methodes découlant de virtuelles - // --------- calculs utils dans le cadre de la recherche du flambement linéaire - // Calcul de la matrice géométrique et initiale - ElemMeca::MatGeomInit MatricesGeometrique_Et_Initiale (const ParaAlgoControle & pa); + // 2) methodes découlant de virtuelles + // --------- calculs utils dans le cadre de la recherche du flambement linéaire + // Calcul de la matrice géométrique et initiale + ElemMeca::MatGeomInit MatricesGeometrique_Et_Initiale (const ParaAlgoControle & pa); - // 3) methodes propres a l'element - // les coordonnees des points d'integration dans l'epaisseur + // 3) methodes propres a l'element + // les coordonnees des points d'integration dans l'epaisseur virtual double KSIepais(int i) =0; // ========= methodes protégées utilisables par les classes derivees :====================== protected : - // 4) non virtuelles - // Calcul du residu local et de la raideur locale, pour le schema implicite -// cald_Dvirtuelle = indique si l'on doit calculer la dérivée de la vitesse de déformation virtuelle - void Cal_implicitPiPoCo (DdlElement & tab_ddl,Tableau & d_epsBB + // 4) non virtuelles + // Calcul du residu local et de la raideur locale, pour le schema implicite + // cald_Dvirtuelle = indique si l'on doit calculer la dérivée de la vitesse de déformation virtuelle + void Cal_implicitPiPoCo (DdlElement & tab_ddl,Tableau & d_epsBB ,Tableau < Tableau2 > d2_epsBB,Tableau & d_sigHH ,int nbintS,Vecteur& poidsS,int nbintH,Vecteur& poidsH ,const ParaAlgoControle & pa,bool cald_Dvirtuelle); - // Calcul du residu local a l'instant t ou tdt - // atdt = true : calcul à tdt, valeur par défaut - // = false: calcul à t - void Cal_explicitPiPoCo (DdlElement & tab_ddl,Tableau & d_epsBB,int nbintS + // Calcul du residu local a l'instant t ou tdt + // atdt = true : calcul à tdt, valeur par défaut + // = false: calcul à t + void Cal_explicitPiPoCo (DdlElement & tab_ddl,Tableau & d_epsBB,int nbintS ,Vecteur& poidsS,int nbintH,Vecteur& poidsH,const ParaAlgoControle & pa,bool atdt); - // Calcul de la matrice géométrique et de la matrice initiale - // cette fonction est éventuellement appelée par les classes dérivées - // ddl represente les degres de liberte specifiques a l'element - // epsBB = deformation, sigHH = contrainte, d_epsbb = variation des def - // nbint = nb maxi de pt d'integration , poids = poids d'integration - // S pour surface et H pour épaisseur -> nbint et poids - // cald_Dvirtuelle = indique si l'on doit calculer la dérivée de la vitesse de déformation virtuelle - void Cal_matGeom_InitPiPoCo (Mat_pleine & matGeom, Mat_pleine & matInit,DdlElement & tab_ddl + // Calcul de la matrice géométrique et de la matrice initiale + // cette fonction est éventuellement appelée par les classes dérivées + // ddl represente les degres de liberte specifiques a l'element + // epsBB = deformation, sigHH = contrainte, d_epsbb = variation des def + // nbint = nb maxi de pt d'integration , poids = poids d'integration + // S pour surface et H pour épaisseur -> nbint et poids + // cald_Dvirtuelle = indique si l'on doit calculer la dérivée de la vitesse de déformation virtuelle + void Cal_matGeom_InitPiPoCo (Mat_pleine & matGeom, Mat_pleine & matInit,DdlElement & tab_ddl ,Tableau & d_epsBB, Tableau < Tableau2 > d2_epsBB ,Tableau & d_sigHH,int nbintS,Vecteur& poidsS,int nbintH,Vecteur& poidsH ,const ParaAlgoControle & pa,bool cald_Dvirtuelle); - private: // pour éviter les modifications par les classes dérivées + private: // pour éviter les modifications par les classes dérivées static TenseurHH * sig_bulk_pourPiPoCo_HH; // variable de travail pour le bulk }; diff --git a/Elements/Mecanique/Pentaedre/PentaL.cc b/Elements/Mecanique/Pentaedre/PentaL.cc index be56b4a..e925eeb 100644 --- a/Elements/Mecanique/Pentaedre/PentaL.cc +++ b/Elements/Mecanique/Pentaedre/PentaL.cc @@ -99,18 +99,18 @@ PentaL::PentaL () : }; int dim = ParaGlob::Dimension(); if (dim != 3) // cas d'une dimension autre que trois - { if (ParaGlob::NiveauImpression() >= 7) - cout << "\nATTENTION -> dimension " << dim - <<", pas de definition d\'elements pentaedriques lineaires "<< endl; - delete penta;delete pentaEr;delete pentaMas;delete pentaeHourg; - unefois = NULL; - } - else - // après penta on défini les données relatives aux surfaces externes (frontières) - { unefois = & uneFois; // affectation du pointeur de la classe générique triangle - doCoPentaL = PentaMemb::Init (penta,pentaEr,pentaMas,pentaeHourg); - unefois->nbelem_in_Prog++; - } + { if (ParaGlob::NiveauImpression() >= 7) + cout << "\nATTENTION -> dimension " << dim + <<", pas de definition d\'elements pentaedriques lineaires "<< endl; + delete penta;delete pentaEr;delete pentaMas;delete pentaeHourg; + unefois = NULL; + } + else + // après penta on défini les données relatives aux surfaces externes (frontières) + { unefois = & uneFois; // affectation du pointeur de la classe générique triangle + doCoPentaL = PentaMemb::Init (penta,pentaEr,pentaMas,pentaeHourg); + unefois->nbelem_in_Prog++; + } }; }; @@ -127,28 +127,28 @@ PentaL::PentaL (int num_maill,int num_id) : tab_noeud.Change_taille(nombre->nbne); // calcul de doCoPentaL si c'est le premier passage ElemGeomC0* penta=NULL;ElemGeomC0* pentaEr=NULL; ElemGeomC0* pentaMas=NULL; - ElemGeomC0* pentaeHourg=NULL; // pour le blocage d'hourglass + ElemGeomC0* pentaeHourg=NULL; // pour le blocage d'hourglass if ( doCoPentaL == NULL) {penta = new GeomPentaL(nombre->nbI); - // pour le calcul d'erreur il faut au moins autant de points d'intégration que de noeuds - pentaEr = new GeomPentaL(nombre->nbiEr); - // idem pour le calcul de la matrice masse consistante - pentaMas = new GeomPentaL(nombre->nbiMas); - pentaeHourg = new GeomPentaL(nombre->nbiHour); - } + // pour le calcul d'erreur il faut au moins autant de points d'intégration que de noeuds + pentaEr = new GeomPentaL(nombre->nbiEr); + // idem pour le calcul de la matrice masse consistante + pentaMas = new GeomPentaL(nombre->nbiMas); + pentaeHourg = new GeomPentaL(nombre->nbiHour); + }; #ifdef MISE_AU_POINT - if (ParaGlob::Dimension() != 3) // cas d'une dimension autre que trois - { if (ParaGlob::NiveauImpression() >= 2) - cout << "\n erreur de dimension dans PentaL, dim = " << ParaGlob::Dimension() - << "\n alors que l'on doit avoir 3 !! " << endl; + if (ParaGlob::Dimension() != 3) // cas d'une dimension autre que trois + { if (ParaGlob::NiveauImpression() >= 2) + cout << "\n erreur de dimension dans PentaL, dim = " << ParaGlob::Dimension() + << "\n alors que l'on doit avoir 3 !! " << endl; Sortie (1); - } + } #endif // après penta on défini les données relatives aux surfaces externes (frontières) - { unefois = & uneFois; // affectation du pointeur de la classe générique triangle - doCoPentaL = PentaMemb::Init (penta,pentaEr,pentaMas,pentaeHourg); - unefois->nbelem_in_Prog++; - } + { unefois = & uneFois; // affectation du pointeur de la classe générique triangle + doCoPentaL = PentaMemb::Init (penta,pentaEr,pentaMas,pentaeHourg); + unefois->nbelem_in_Prog++; + } }; }; @@ -159,34 +159,35 @@ PentaL::PentaL (int num_maill,int num_id,const Tableau& tab): {// on intervient seulement à partir du deuxième élément, if (uneFois.nbelem_in_Prog == 0) { uneFois.nbelem_in_Prog++; // au premier passage on se contente d'incrémenter - } + } else // sinon on construit {nombre = & nombre_V; if (tab_noeud.Taille() != nombre->nbne) - { cout << "\n erreur de dimensionnement du tableau de noeud \n"; - cout << " PentaL::PentaL (double epaiss,int num_maill, int num_id,const Tableau& tab)\n"; - Sortie (1); } + { cout << "\n erreur de dimensionnement du tableau de noeud \n"; + cout << " PentaL::PentaL (double epaiss,int num_maill, int num_id,const Tableau& tab)\n"; + Sortie (1); + } // calcul de doCoPentaL si c'est le premier passage ElemGeomC0* penta=NULL;ElemGeomC0* pentaEr=NULL; ElemGeomC0* pentaMas=NULL; - ElemGeomC0* pentaeHourg=NULL; // pour le blocage d'hourglass + ElemGeomC0* pentaeHourg=NULL; // pour le blocage d'hourglass if ( doCoPentaL == NULL) {penta = new GeomPentaL(nombre->nbI); - // pour le calcul d'erreur il faut au moins autant de points d'intégration que de noeuds - pentaEr = new GeomPentaL(nombre->nbiEr); - // idem pour le calcul de la matrice masse consistante - pentaMas = new GeomPentaL(nombre->nbiMas); - pentaeHourg = new GeomPentaL(nombre->nbiHour); - } + // pour le calcul d'erreur il faut au moins autant de points d'intégration que de noeuds + pentaEr = new GeomPentaL(nombre->nbiEr); + // idem pour le calcul de la matrice masse consistante + pentaMas = new GeomPentaL(nombre->nbiMas); + pentaeHourg = new GeomPentaL(nombre->nbiHour); + }; #ifdef MISE_AU_POINT - if (ParaGlob::Dimension() != 3) // cas d'une dimension autre que trois + if (ParaGlob::Dimension() != 3) // cas d'une dimension autre que trois { if (ParaGlob::NiveauImpression() >= 2) - cout << "\n erreur de dimension dans PentaL, dim = " << ParaGlob::Dimension() - << "\n alors que l'on doit avoir 3 !! " << endl; - Sortie (1); + cout << "\n erreur de dimension dans PentaL, dim = " << ParaGlob::Dimension() + << "\n alors que l'on doit avoir 3 !! " << endl; + Sortie (1); } #endif // après penta on défini les données relatives aux surfaces externes (frontières) - { unefois = & uneFois; // affectation du pointeur de la classe générique triangle + { unefois = & uneFois; // affectation du pointeur de la classe générique triangle bool sans_init_noeud = true; doCoPentaL = PentaMemb::Init (penta,pentaEr,pentaMas,pentaeHourg,sans_init_noeud); // construction du tableau de ddl spécifique à l'élément pour ses @@ -203,15 +204,15 @@ PentaL::PentaL (const PentaL& PentaLraM) : // a priori si on utilise le constructeur de copie, donc il y a déjà un élément // par contre a priori on ne doit pas faire une copie du premier élément { if (uneFois.nbelem_in_Prog == 1) - { cout << "\n **** erreur pour l'element PentaL, le constructeur de copie ne doit pas etre utilise" - << " pour le premier element !! " << endl; - Sortie (1); + { cout << "\n **** erreur pour l'element PentaL, le constructeur de copie ne doit pas etre utilise" + << " pour le premier element !! " << endl; + Sortie (1); } - else - { unefois = & uneFois; // affectation du pointeur de la classe générique penta + else + { unefois = & uneFois; // affectation du pointeur de la classe générique penta // ce qui est relatif à l'initialisation est déjà effectué dans elem_meca et PentaMemb - unefois->nbelem_in_Prog++; - }; + unefois->nbelem_in_Prog++; + }; }; PentaL::~PentaL () @@ -219,7 +220,7 @@ PentaL::~PentaL () { if (unefois != NULL) {unefois->nbelem_in_Prog--; Destruction(); - } + } }; // affichage dans la sortie transmise, des variables duales "nom" diff --git a/Elements/Mecanique/Pentaedre/PentaL.h b/Elements/Mecanique/Pentaedre/PentaL.h index 4bcb036..0fb0b19 100644 --- a/Elements/Mecanique/Pentaedre/PentaL.h +++ b/Elements/Mecanique/Pentaedre/PentaL.h @@ -113,69 +113,69 @@ class PentaL : public PentaMemb // création d'un élément de copie: utilisation de l'opérateur new et du constructeur de copie // méthode virtuelle - Element* Nevez_copie() const { Element * el= new PentaL(*this); return el;}; + Element* Nevez_copie() const { Element * el= new PentaL(*this); return el;}; // Surcharge de l'operateur = : realise l'egalite entre deux instances de PentaL PentaL& operator= (PentaL& Penta); // METHODES : -// 1) derivant des virtuelles pures + // 1) derivant des virtuelles pures - // affichage dans la sortie transmise, des variables duales "nom" - // aux differents points d'integration - // dans le cas ou nom est vide, affichage de "toute" les variables - void AfficheVarDual(ofstream& sort, Tableau& nom); + // affichage dans la sortie transmise, des variables duales "nom" + // aux differents points d'integration + // dans le cas ou nom est vide, affichage de "toute" les variables + void AfficheVarDual(ofstream& sort, Tableau& nom); -// 2) derivant des virtuelles -// 3) methodes propres a l'element + // 2) derivant des virtuelles + // 3) methodes propres a l'element protected : - // adressage des frontières linéiques et surfacique - // définit dans les classes dérivées, et utilisées pour la construction des frontières - // frontière linéique verticale (rectangle) - ElFrontiere* new_frontiere_lin_rec(Tableau & tab, DdlElement& ddelem) - { return ((ElFrontiere*) (new FrontSegLine(tab,ddelem)));}; - // frontière linéique horizontale (triangle) - ElFrontiere* new_frontiere_lin_tri(Tableau & tab, DdlElement& ddelem) - { return ((ElFrontiere*) (new FrontSegLine(tab,ddelem)));}; - // frontière surfacique verticale (rectangle) - ElFrontiere* new_frontiere_surf_rec(Tableau & tab, DdlElement& ddelem) - { return ((ElFrontiere*) (new FrontQuadLine(tab,ddelem)));}; - // frontière surfacique horizontale (triangle) - ElFrontiere* new_frontiere_surf_tri(Tableau & tab, DdlElement& ddelem) - { return ((ElFrontiere*) (new FrontTriaLine(tab,ddelem)));}; - - // VARIABLES PRIVEES : - // place memoire commune a tous les elements PentaL - static PentaMemb::DonnComPenta * doCoPentaL; - // idem mais pour les indicateurs qui servent pour l'initialisation - static PentaMemb::UneFois uneFois; + // adressage des frontières linéiques et surfacique + // définit dans les classes dérivées, et utilisées pour la construction des frontières + // frontière linéique verticale (rectangle) + ElFrontiere* new_frontiere_lin_rec(Tableau & tab, DdlElement& ddelem) + { return ((ElFrontiere*) (new FrontSegLine(tab,ddelem)));}; + // frontière linéique horizontale (triangle) + ElFrontiere* new_frontiere_lin_tri(Tableau & tab, DdlElement& ddelem) + { return ((ElFrontiere*) (new FrontSegLine(tab,ddelem)));}; + // frontière surfacique verticale (rectangle) + ElFrontiere* new_frontiere_surf_rec(Tableau & tab, DdlElement& ddelem) + { return ((ElFrontiere*) (new FrontQuadLine(tab,ddelem)));}; + // frontière surfacique horizontale (triangle) + ElFrontiere* new_frontiere_surf_tri(Tableau & tab, DdlElement& ddelem) + { return ((ElFrontiere*) (new FrontTriaLine(tab,ddelem)));}; + + // VARIABLES PRIVEES : + // place memoire commune a tous les elements PentaL + static PentaMemb::DonnComPenta * doCoPentaL; + // idem mais pour les indicateurs qui servent pour l'initialisation + static PentaMemb::UneFois uneFois; - class NombresConstruirePentaL : public NombresConstruire + class NombresConstruirePentaL : public NombresConstruire { public: NombresConstruirePentaL(); }; - static NombresConstruirePentaL nombre_V; // les nombres propres à l'élément + static NombresConstruirePentaL nombre_V; // les nombres propres à l'élément - // GESTION AUTOMATIQUE D'AJOUT D'ELEMENT DANS LE PROGRAMME - //ajout de l'element dans la liste : listTypeElemen, geree par la class Element - class ConsPentaL : public ConstrucElement - { public : ConsPentaL () - { NouvelleTypeElement nouv(PENTAEDRE,LINEAIRE,MECA_SOLIDE_DEFORMABLE,this); - if (ParaGlob::NiveauImpression() >= 4) - cout << "\n initialisation PentaL" << endl; - Element::listTypeElement.push_back(nouv); - }; - Element * NouvelElement(int num_maill,int num) // un nouvel élément sans rien - {Element * pt; - pt = new PentaL (num_maill,num) ; - return pt;}; - // ramene true si la construction de l'element est possible en fonction - // des variables globales actuelles: ex en fonction de la dimension - bool Element_possible() { if (ParaGlob::Dimension() == 3) return true; else return false;}; - }; - static ConsPentaL consPentaL; - static int bidon; // a virer lorsque l'on n'aura plus a declarer une instance dans herezh + // GESTION AUTOMATIQUE D'AJOUT D'ELEMENT DANS LE PROGRAMME + //ajout de l'element dans la liste : listTypeElemen, geree par la class Element + class ConsPentaL : public ConstrucElement + { public : ConsPentaL () + { NouvelleTypeElement nouv(PENTAEDRE,LINEAIRE,MECA_SOLIDE_DEFORMABLE,this); + if (ParaGlob::NiveauImpression() >= 4) + cout << "\n initialisation PentaL" << endl; + Element::listTypeElement.push_back(nouv); + }; + Element * NouvelElement(int num_maill,int num) // un nouvel élément sans rien + {Element * pt; + pt = new PentaL (num_maill,num) ; + return pt;}; + // ramene true si la construction de l'element est possible en fonction + // des variables globales actuelles: ex en fonction de la dimension + bool Element_possible() { if (ParaGlob::Dimension() == 3) return true; else return false;}; + }; + static ConsPentaL consPentaL; + static int bidon; // a virer lorsque l'on n'aura plus a declarer une instance dans herezh }; /// @} // end of group #endif diff --git a/Elements/Mecanique/Pentaedre/PentaMemb.cc b/Elements/Mecanique/Pentaedre/PentaMemb.cc index 33da217..ed63a7a 100644 --- a/Elements/Mecanique/Pentaedre/PentaMemb.cc +++ b/Elements/Mecanique/Pentaedre/PentaMemb.cc @@ -583,8 +583,8 @@ void PentaMemb::ErreurElement(int type,double& errElemRelative ,double& numerateur, double& denominateur) { PentaMemb::DonnComPenta* doCoPenta = unefois->doCoMemb; // pour simplifier l'écriture - Tableau & d_epsBB = unefois->doCoMemb->d_epsBB; - Tableau & d_sigHH = unefois->doCoMemb->d_sigHH; +// Tableau & d_epsBB = unefois->doCoMemb->d_epsBB; +// Tableau & d_sigHH = unefois->doCoMemb->d_sigHH; // dimensionnement de la metrique if(!( unefois->CalResPrem_t )) { unefois->CalResPrem_t += 1; @@ -802,47 +802,49 @@ Element::ResRaid PentaMemb::SMR_charge_surfacique_I // explicite à t et à tdt en fonction de la variable booléeenne atdt Vecteur PentaMemb::SM_charge_pression_E (double pression,Fonction_nD* pt_fonct,int numface,bool atdt,const ParaAlgoControle & pa) - { // initialisation du vecteur résidu + { // initialisation du vecteur résidu ((*res_extS)(numface))->Zero(); // on récupère ou on crée la frontière surfacique, si elle n'existe pas il faut la creer d'ou le true Frontiere_surfacique(numface,true); // on utilise la métrique des éléments de frontière // avec l'instance déformation dédiée pour // récupération de la métrique associée à l'élément - Met_abstraite * meta= tabb(numface)->Metrique(); + Met_abstraite * meta= tabb(numface)->Metrique(); PentaMemb::DonnComPenta* CoPenta = unefois->doCoMemb; // pour simplifier l'écriture // définition des constantes de la métrique si nécessaire if (!atdt) - {if ( !(unefois->CalSMsurf_t(numface) )) - { unefois->CalSMsurf_t(numface) += 1; - Tableau tab(11); - tab(1) = igiB_0; tab(2) = igiB_t; tab(3) = igijBB_0;tab(4) = igijBB_t; - tab(5) = igijHH_t; tab(6) = id_giB_t; tab(7) = id_gijBB_t ; - tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; - tab(10) = igradVBB_t; tab(11) = iVt; - meta->PlusInitVariables(tab) ; - };} - else - {if ( !(unefois->CalSMsurf_tdt(numface) )) - { unefois->CalSMsurf_tdt(numface) += 1; - Tableau tab(11); - tab(1) = igiB_0; tab(2) = igiB_tdt; tab(3) = igijBB_0;tab(4) = igijBB_tdt; - tab(5) = igijHH_tdt; tab(6) = id_giB_tdt; tab(7) = id_gijBB_tdt ; - tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; - tab(10) = igradVBB_tdt;tab(11) = iVtdt; - meta->PlusInitVariables(tab) ; - };}; + {if ( !(unefois->CalSMsurf_t(numface) )) + { unefois->CalSMsurf_t(numface) += 1; + Tableau tab(11); + tab(1) = igiB_0; tab(2) = igiB_t; tab(3) = igijBB_0;tab(4) = igijBB_t; + tab(5) = igijHH_t; tab(6) = id_giB_t; tab(7) = id_gijBB_t ; + tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; + tab(10) = igradVBB_t; tab(11) = iVt; + meta->PlusInitVariables(tab) ; + }; + } + else + {if ( !(unefois->CalSMsurf_tdt(numface) )) + { unefois->CalSMsurf_tdt(numface) += 1; + Tableau tab(11); + tab(1) = igiB_0; tab(2) = igiB_tdt; tab(3) = igijBB_0;tab(4) = igijBB_tdt; + tab(5) = igijHH_tdt; tab(6) = id_giB_tdt; tab(7) = id_gijBB_tdt ; + tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; + tab(10) = igradVBB_tdt;tab(11) = iVtdt; + meta->PlusInitVariables(tab) ; + }; + }; // définition d'une déformation a doc if (defSurf(numface) == NULL) - {if ((numface == 1) || (numface == 4)) - // les faces 1 et 4 sont triangulaire - defSurf(numface) = new Deformation(*meta,tabb(numface)->TabNoeud(), - (CoPenta->triaS).TaDphi(),(CoPenta->triaS).TaPhi()); - else // les autres surfaces sont quadrangulaires - defSurf(numface) = new Deformation(*meta,tabb(numface)->TabNoeud(), - (CoPenta->quadraS).TaDphi(),(CoPenta->quadraS).TaPhi()); - }; + {if ((numface == 1) || (numface == 4)) + // les faces 1 et 4 sont triangulaire + defSurf(numface) = new Deformation(*meta,tabb(numface)->TabNoeud(), + (CoPenta->triaS).TaDphi(),(CoPenta->triaS).TaPhi()); + else // les autres surfaces sont quadrangulaires + defSurf(numface) = new Deformation(*meta,tabb(numface)->TabNoeud(), + (CoPenta->quadraS).TaDphi(),(CoPenta->quadraS).TaPhi()); + }; // appel du programme général d'elemmeca et retour du vecteur second membre if ((numface == 1) || (numface == 4)) return ElemMeca::SM_charge_pres_E (tabb(numface)->DdlElem(),numface @@ -865,9 +867,9 @@ Vecteur PentaMemb::SM_charge_pression_E // retourne le second membre et la matrice de raideur correspondant Element::ResRaid PentaMemb::SMR_charge_pression_I (double pression,Fonction_nD* pt_fonct,int numface,const ParaAlgoControle & pa) - { // initialisation du vecteur résidu et de la raideur - ((*res_extS)(numface))->Zero(); - ((*raid_extS)(numface))->Zero(); + { // initialisation du vecteur résidu et de la raideur + ((*res_extS)(numface))->Zero(); + ((*raid_extS)(numface))->Zero(); // on récupère ou on crée la frontière surfacique, si elle n'existe pas il faut la creer d'ou le true Frontiere_surfacique(numface,true); // on utilise la métrique des éléments de frontière @@ -878,7 +880,7 @@ Element::ResRaid PentaMemb::SMR_charge_pression_I PentaMemb::DonnComPenta* CoPenta = unefois->doCoMemb; // pour simplifier l'écriture // dimensionnement de la metrique // définition des constantes de la métrique si nécessaire - if ( !(unefois->CalSMRsurf(numface) )) + if ( !(unefois->CalSMRsurf(numface) )) { unefois->CalSMRsurf(numface) += 1; Tableau tab(20); tab(1) = igiB_0; tab(2) = igiB_t; tab(3) = igiB_tdt; tab(4) = igijBB_0; @@ -888,17 +890,17 @@ Element::ResRaid PentaMemb::SMR_charge_pression_I tab(15) = id_gijBB_t ;tab(16) = id_gijBB_tdt ;tab(17) = idMtdt ; tab(18) = igradVBB_tdt; tab(19) = iVtdt; tab(20) = idVtdt; meta->PlusInitVariables(tab) ; - }; + }; // définition d'une déformation a doc if (defSurf(numface) == NULL) - {if ((numface == 1) || (numface == 4)) - // les faces 1 et 4 sont triangulaire - defSurf(numface) = new Deformation(*meta,tabb(numface)->TabNoeud(), - (CoPenta->triaS).TaDphi(),(CoPenta->triaS).TaPhi()); - else // les autres surfaces sont quadrangulaires - defSurf(numface) = new Deformation(*meta,tabb(numface)->TabNoeud(), - (CoPenta->quadraS).TaDphi(),(CoPenta->quadraS).TaPhi()); - }; + {if ((numface == 1) || (numface == 4)) + // les faces 1 et 4 sont triangulaire + defSurf(numface) = new Deformation(*meta,tabb(numface)->TabNoeud(), + (CoPenta->triaS).TaDphi(),(CoPenta->triaS).TaPhi()); + else // les autres surfaces sont quadrangulaires + defSurf(numface) = new Deformation(*meta,tabb(numface)->TabNoeud(), + (CoPenta->quadraS).TaDphi(),(CoPenta->quadraS).TaPhi()); + }; // appel du programme général d'elemmeca et retour du vecteur second membre if ((numface == 1) || (numface == 4)) return ElemMeca::SMR_charge_pres_I (tabb(numface)->DdlElem(),numface @@ -918,8 +920,8 @@ Element::ResRaid PentaMemb::SMR_charge_pression_I Vecteur PentaMemb::SM_charge_presUniDir_E (const Coordonnee& presUniDir,Fonction_nD* pt_fonct ,int numface,bool atdt,const ParaAlgoControle & pa) - { // initialisation du vecteur résidu - ((*res_extS)(numface))->Zero(); + { // initialisation du vecteur résidu + ((*res_extS)(numface))->Zero(); // on récupère ou on crée la frontière surfacique Frontiere_surfacique(numface,true); // on utilise la métrique des éléments de frontière @@ -930,25 +932,27 @@ Vecteur PentaMemb::SM_charge_presUniDir_E PentaMemb::DonnComPenta* CoPenta = unefois->doCoMemb; // pour simplifier l'écriture // définition des constantes de la métrique si nécessaire if (!atdt) - {if ( !(unefois->CalSMsurf_t(numface) )) - { unefois->CalSMsurf_t(numface) += 1; - Tableau tab(11); - tab(1) = igiB_0; tab(2) = igiB_t; tab(3) = igijBB_0;tab(4) = igijBB_t; - tab(5) = igijHH_t; tab(6) = id_giB_t; tab(7) = id_gijBB_t ; - tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; - tab(10) = igradVBB_t; tab(11) = iVt; - meta->PlusInitVariables(tab) ; - };} + {if ( !(unefois->CalSMsurf_t(numface) )) + { unefois->CalSMsurf_t(numface) += 1; + Tableau tab(11); + tab(1) = igiB_0; tab(2) = igiB_t; tab(3) = igijBB_0;tab(4) = igijBB_t; + tab(5) = igijHH_t; tab(6) = id_giB_t; tab(7) = id_gijBB_t ; + tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; + tab(10) = igradVBB_t; tab(11) = iVt; + meta->PlusInitVariables(tab) ; + }; + } else - {if ( !(unefois->CalSMsurf_tdt(numface) )) - { unefois->CalSMsurf_tdt(numface) += 1; - Tableau tab(11); - tab(1) = igiB_0; tab(2) = igiB_tdt; tab(3) = igijBB_0;tab(4) = igijBB_tdt; - tab(5) = igijHH_tdt; tab(6) = id_giB_tdt; tab(7) = id_gijBB_tdt ; - tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; - tab(10) = igradVBB_tdt;tab(11) = iVtdt; - meta->PlusInitVariables(tab) ; - };}; + {if ( !(unefois->CalSMsurf_tdt(numface) )) + { unefois->CalSMsurf_tdt(numface) += 1; + Tableau tab(11); + tab(1) = igiB_0; tab(2) = igiB_tdt; tab(3) = igijBB_0;tab(4) = igijBB_tdt; + tab(5) = igijHH_tdt; tab(6) = id_giB_tdt; tab(7) = id_gijBB_tdt ; + tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; + tab(10) = igradVBB_tdt;tab(11) = iVtdt; + meta->PlusInitVariables(tab) ; + }; + }; // définition d'une déformation a doc if (defSurf(numface) == NULL) {if ((numface == 1) || (numface == 4)) @@ -975,9 +979,9 @@ Vecteur PentaMemb::SM_charge_presUniDir_E // retourne le second membre et la matrice de raideur correspondant Element::ResRaid PentaMemb::SMR_charge_presUniDir_I (const Coordonnee& presUniDir,Fonction_nD* pt_fonct,int numface,const ParaAlgoControle & pa) - { // initialisation du vecteur résidu et de la raideur - ((*res_extS)(numface))->Zero(); - ((*raid_extS)(numface))->Zero(); + { // initialisation du vecteur résidu et de la raideur + ((*res_extS)(numface))->Zero(); + ((*raid_extS)(numface))->Zero(); // on récupère ou on crée la frontière surfacique Frontiere_surfacique(numface,true); // on utilise la métrique des éléments de frontière @@ -1165,29 +1169,31 @@ Vecteur PentaMemb::SM_charge_hydrostatique_E(const Coordonnee& dir_normal_liquid // on utilise la métrique des éléments de frontière // avec l'instance déformation dédiée pour // récupération de la métrique associée à l'élément - Met_abstraite * meta= tabb(numface)->Metrique(); + Met_abstraite * meta= tabb(numface)->Metrique(); PentaMemb::DonnComPenta* CoPenta = unefois->doCoMemb; // pour simplifier l'écriture // définition des constantes de la métrique si nécessaire if (!atdt) - {if ( !(unefois->CalSMsurf_t(numface) )) - { unefois->CalSMsurf_t(numface) += 1; - Tableau tab(11); - tab(1) = igiB_0; tab(2) = igiB_t; tab(3) = igijBB_0;tab(4) = igijBB_t; - tab(5) = igijHH_t; tab(6) = id_giB_t; tab(7) = id_gijBB_t ; - tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; - tab(10) = igradVBB_t; tab(11) = iVt; - meta->PlusInitVariables(tab) ; - };} + {if ( !(unefois->CalSMsurf_t(numface) )) + { unefois->CalSMsurf_t(numface) += 1; + Tableau tab(11); + tab(1) = igiB_0; tab(2) = igiB_t; tab(3) = igijBB_0;tab(4) = igijBB_t; + tab(5) = igijHH_t; tab(6) = id_giB_t; tab(7) = id_gijBB_t ; + tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; + tab(10) = igradVBB_t; tab(11) = iVt; + meta->PlusInitVariables(tab) ; + }; + } else - {if ( !(unefois->CalSMsurf_tdt(numface) )) - { unefois->CalSMsurf_tdt(numface) += 1; - Tableau tab(11); - tab(1) = igiB_0; tab(2) = igiB_tdt; tab(3) = igijBB_0;tab(4) = igijBB_tdt; - tab(5) = igijHH_tdt; tab(6) = id_giB_tdt; tab(7) = id_gijBB_tdt ; - tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; - tab(10) = igradVBB_tdt;tab(11) = iVtdt; - meta->PlusInitVariables(tab) ; - };}; + {if ( !(unefois->CalSMsurf_tdt(numface) )) + { unefois->CalSMsurf_tdt(numface) += 1; + Tableau tab(11); + tab(1) = igiB_0; tab(2) = igiB_tdt; tab(3) = igijBB_0;tab(4) = igijBB_tdt; + tab(5) = igijHH_tdt; tab(6) = id_giB_tdt; tab(7) = id_gijBB_tdt ; + tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; + tab(10) = igradVBB_tdt;tab(11) = iVtdt; + meta->PlusInitVariables(tab) ; + }; + }; // définition d'une déformation a doc if (defSurf(numface) == NULL) {if ((numface == 1) || (numface == 4)) @@ -1228,9 +1234,9 @@ Element::ResRaid PentaMemb::SMR_charge_hydrostatique_I (const Coordonnee& dir_no ,int numface,const Coordonnee& M_liquide ,const ParaAlgoControle & pa ,bool sans_limitation) - { // initialisation du vecteur résidu et de la raideur - ((*res_extS)(numface))->Zero(); - ((*raid_extS)(numface))->Zero(); + { // initialisation du vecteur résidu et de la raideur + ((*res_extS)(numface))->Zero(); + ((*raid_extS)(numface))->Zero(); // on récupère ou on crée la frontière surfacique Frontiere_surfacique(numface,true); // on utilise la métrique des éléments de frontière @@ -1287,8 +1293,8 @@ Vecteur PentaMemb::SM_charge_hydrodynamique_E( Courbe1D* frot_fluid,const doubl , Courbe1D* coef_aero_n,int numface,const double& coef_mul , Courbe1D* coef_aero_t,bool atdt ,const ParaAlgoControle & pa) - { // initialisation du vecteur résidu - ((*res_extS)(numface))->Zero(); + { // initialisation du vecteur résidu + ((*res_extS)(numface))->Zero(); // on récupère ou on crée la frontière surfacique Frontiere_surfacique(numface,true); // on utilise la métrique des éléments de frontière @@ -1298,25 +1304,27 @@ Vecteur PentaMemb::SM_charge_hydrodynamique_E( Courbe1D* frot_fluid,const doubl PentaMemb::DonnComPenta* CoPenta = unefois->doCoMemb; // pour simplifier l'écriture // définition des constantes de la métrique si nécessaire if (!atdt) - {if ( !(unefois->CalSMsurf_t(numface) )) - { unefois->CalSMsurf_t(numface) += 1; - Tableau tab(11); - tab(1) = igiB_0; tab(2) = igiB_t; tab(3) = igijBB_0;tab(4) = igijBB_t; - tab(5) = igijHH_t; tab(6) = id_giB_t; tab(7) = id_gijBB_t ; - tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; - tab(10) = igradVBB_t; tab(11) = iVt; - meta->PlusInitVariables(tab) ; - };} + {if ( !(unefois->CalSMsurf_t(numface) )) + { unefois->CalSMsurf_t(numface) += 1; + Tableau tab(11); + tab(1) = igiB_0; tab(2) = igiB_t; tab(3) = igijBB_0;tab(4) = igijBB_t; + tab(5) = igijHH_t; tab(6) = id_giB_t; tab(7) = id_gijBB_t ; + tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; + tab(10) = igradVBB_t; tab(11) = iVt; + meta->PlusInitVariables(tab) ; + }; + } else - {if ( !(unefois->CalSMsurf_tdt(numface) )) - { unefois->CalSMsurf_tdt(numface) += 1; - Tableau tab(11); - tab(1) = igiB_0; tab(2) = igiB_tdt; tab(3) = igijBB_0;tab(4) = igijBB_tdt; - tab(5) = igijHH_tdt; tab(6) = id_giB_tdt; tab(7) = id_gijBB_tdt ; - tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; - tab(10) = igradVBB_tdt;tab(11) = iVtdt; - meta->PlusInitVariables(tab) ; - };}; + {if ( !(unefois->CalSMsurf_tdt(numface) )) + { unefois->CalSMsurf_tdt(numface) += 1; + Tableau tab(11); + tab(1) = igiB_0; tab(2) = igiB_tdt; tab(3) = igijBB_0;tab(4) = igijBB_tdt; + tab(5) = igijHH_tdt; tab(6) = id_giB_tdt; tab(7) = id_gijBB_tdt ; + tab(8) = id_gijBB_t ;tab(9) = id_gijBB_tdt ; + tab(10) = igradVBB_tdt;tab(11) = iVtdt; + meta->PlusInitVariables(tab) ; + }; + }; // définition d'une déformation a doc ElemGeomC0* elemGeom; if (defSurf(numface) == NULL) @@ -1326,23 +1334,23 @@ Vecteur PentaMemb::SM_charge_hydrodynamique_E( Courbe1D* frot_fluid,const doubl { elemGeom = & (CoPenta->triaS);}; defSurf(numface) = new Deformation(*meta,tabb(numface)->TabNoeud(), elemGeom->TaDphi(),elemGeom->TaPhi()); - }; + }; // appel du programme général d'ElemMeca et retour du vecteur second membre return ElemMeca::SM_charge_hydrodyn_E (poidvol,elemGeom->TaPhi(),(tabb(numface)->TabNoeud()).Taille() ,frot_fluid,elemGeom->TaWi() ,coef_aero_n,numface,coef_mul,coef_aero_t,pa,atdt); }; - // -> implicite, - // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur - // retourne le second membre et la matrice de raideur correspondant +// -> implicite, +// pa: permet de déterminer si oui ou non on calcul la contribution à la raideur +// retourne le second membre et la matrice de raideur correspondant Element::ResRaid PentaMemb::SMR_charge_hydrodynamique_I( Courbe1D* frot_fluid,const double& poidvol , Courbe1D* coef_aero_n,int numface,const double& coef_mul , Courbe1D* coef_aero_t ,const ParaAlgoControle & pa) - { // initialisation du vecteur résidu et de la raideur - ((*res_extS)(numface))->Zero(); - ((*raid_extS)(numface))->Zero(); + { // initialisation du vecteur résidu et de la raideur + ((*res_extS)(numface))->Zero(); + ((*raid_extS)(numface))->Zero(); // on récupère ou on crée la frontière surfacique Frontiere_surfacique(numface,true); // on utilise la métrique des éléments de frontière @@ -1401,199 +1409,12 @@ Tableau const & PentaMemb::Frontiere(bool force) // on s'occupe également des indicateurs unefois->CalSMsurf_t.Change_taille(tail_fa);unefois->CalSMsurf_tdt.Change_taille(tail_fa); unefois->CalSMRsurf.Change_taille(tail_fa); - }; + }; -// {// le calcul et la création ne sont effectués qu'au premier appel -// // ou lorsque l'on veut forcer une recréation -// if (((ind_front_lin == 0) && (ind_front_surf == 0) && (ind_front_point == 0)) -// || force ) -//// if ( (ind_front_surf==0)|| force ||(ind_front_surf==2) ) -// {PentaMemb::DonnComPenta* CoPenta = unefois->doCoMemb; // pour simplifier l'écriture -// ElemGeomC0 & el = *(CoPenta->pentaed); -// DdlElement & tdd = CoPenta->tab_ddl; -// int tail_s = el.Nonf().Taille(); // nombre de faces -// // def de la taille -// if (((ind_front_point > 0) || (ind_front_lin > 0)) && (ind_front_surf == 0)) -// // cas où les frontières points ou linéiques existent mais pas les frontières faces -// // on redimentionne et on transfert -// { int tail_af = nombre->nbne+el.NonS().Taille(); // nombre d'arête + noeud -// int taille_f = tail_af + tail_s; -// tabb.Change_taille(taille_f); -// // on s'occupe également des indicateurs -// unefois->CalSMsurf_t.Change_taille(taille_f);unefois->CalSMsurf_tdt.Change_taille(taille_f); -// unefois->CalSMRsurf.Change_taille(taille_f); -// for (int i=1;i<= tail_af;i++) -// { tabb(i+tail_s) = tabb(i);tabb(i) = NULL; -// unefois->CalSMsurf_t(i+tail_s)=unefois->CalSMsurf_t(i); -// unefois->CalSMsurf_tdt(i+tail_s)=unefois->CalSMsurf_tdt(i); -// unefois->CalSMRsurf(i+tail_s)=unefois->CalSMRsurf(i); -// unefois->CalSMsurf_t(i)=0;unefois->CalSMsurf_tdt(i)=0;unefois->CalSMRsurf(i)=0; -// } -// posi_tab_front_lin += tail_s; -// posi_tab_front_point += tail_s; -// } -// else if (ind_front_surf == 0) -// // cas où rien n'existe -// {tabb.Change_taille(tail_s); -// // on s'occupe également des indicateurs -// unefois->CalSMsurf_t.Change_taille(tail_s);unefois->CalSMsurf_tdt.Change_taille(tail_s); -// unefois->CalSMRsurf.Change_taille(tail_s); -// } -// // création éventuelle des faces -// for (int nface=1;nface<=tail_s;nface++) -// { int nbnoe = el.Nonf()(nface).Taille(); // nb noeud de la face -// Tableau tab(nbnoe); // les noeuds des faces frontieres -// DdlElement ddelem(nbnoe); // les ddlelements des noeuds frontieres -// for (int i=1;i<= nbnoe;i++) -// { int nib=el.Nonf()(nface)(i); // numéro dans l'élément du numéro i de la face -// tab(i) = tab_noeud(nib); -// DdlNoeudElement einter = tdd(nib); -// ddelem.Change_un_ddlNoeudElement(i,einter); -// // ddelem(i) = tdd(el.Nonf()(nface)(i)); -// } -// if ((nface == 1) || (nface == 4)) -// // les faces 1 et 4 sont triangulaire -// {if (tabb(nface) == NULL) tabb(nface) = new_frontiere_surf_tri(tab,ddelem);} -// else -// // les faces 2,3 et 5 sont quadrangulaire -// {if (tabb(nface) == NULL) tabb(nface) = new_frontiere_surf_rec(tab,ddelem); } -// } -// // mise à jour de l'indicateur de création de faces -// ind_front_surf = 1; -// } return (Tableau &)tabb; }; -//// ramène la frontière point -//// éventuellement création des frontieres points de l'element et stockage dans l'element -//// si c'est la première fois sinon il y a seulement retour de l'elements -//// a moins que le paramètre force est mis a true -//// dans ce dernier cas la frontière effacéee est recréée -//// num indique le numéro du point à créer (numérotation EF) -//ElFrontiere* const PentaMemb::Frontiere_points(int num,bool force) -// { // le calcul et la création ne sont effectués qu'au premier appel -// // ou lorsque l'on veut forcer une recréation -// #ifdef MISE_AU_POINT -// if ((num > nombre->nbne)||(num <=0)) -// { cout << "\n *** erreur, le noeud demande pour frontiere: " << num << " esten dehors de la numeration de l'element ! " -// << "\n Frontiere_points(int num,bool force)"; -// Sortie(1); -// } -// #endif -// -// if ((ind_front_point == 0) || force || (ind_front_point == 2)) -// {Tableau tab(1); // les noeuds des points frontieres -// DdlElement ddelem(1); // les ddlelements des points frontieres -// // on regarde si les frontières points existent sinon on les crée -// if (ind_front_point == 1) -// return (ElFrontiere*)tabb(posi_tab_front_point+num); -// else if ( ind_front_point == 2) -// // cas où certaines frontières existent -// if (tabb(posi_tab_front_point+num) != NULL) -// return (ElFrontiere*)tabb(posi_tab_front_point+num); -// // dans tous les autres cas on construit la frontière point -// // on commence par dimensionner le tableau de frontière, comme les frontières points sont -// // les dernières, il suffit de les ajouter, d'où on redimentionne le tableau mais on ne créra -// // que la frontière adoc -// // def de la taille -// int taille_actuelle = tabb.Taille(); -// if ((ind_front_point == 0) && ((ind_front_lin > 0) || (ind_front_surf > 0))) -// // cas où les frontières lignes ou surfaces existent, mais pas les points -// { int tail_p = nombre->nbne; // le nombre de noeuds -// int taille_f = taille_actuelle + tail_p; -// tabb.Change_taille(taille_f); -// for (int i=1;i<= tail_p;i++) -// { tabb(i+taille_actuelle) = tabb(i);tabb(i) = NULL;}; -// posi_tab_front_point +=taille_actuelle; -// if (ind_front_lin > 0) posi_tab_front_lin += taille_actuelle; -// } -// else if (ind_front_point == 0) -// // cas où aucune frontière n'existe -// {tabb.Change_taille(nombre->nbne);}; -// // dans les autres cas, les frontières points exitent donc pas à dimensionner -// // on définit tous les points par simplicité -// for (int i=1;i<=nombre->nbne;i++) -// {tab(1) = tab_noeud(i);ddelem.Change_un_ddlNoeudElement(1,unefois->doCoMemb->tab_ddl(i)); -// if (tabb(i+posi_tab_front_point) == NULL) -// tabb(i+posi_tab_front_point) = new FrontPointF (tab,ddelem); -// }; -// }; -// return (ElFrontiere*)tabb(num+posi_tab_front_point); -// }; -//// ramène la frontière linéique -//// éventuellement création des frontieres linéique de l'element et stockage dans l'element -//// si c'est la première fois et en 3D sinon il y a seulement retour de l'elements -//// a moins que le paramètre force est mis a true -//// dans ce dernier cas la frontière effacéee est recréée -//// num indique le numéro de l'arête à créer (numérotation EF) -//ElFrontiere* const PentaMemb::Frontiere_lineique(int num,bool force) -// { // dimensionnement des tableaux d'indicateurs -// PentaMemb::DonnComPenta* CoPenta = unefois->doCoMemb; // pour simplifier l'écriture -// ElemGeomC0 & el = *(CoPenta->pentaed); -// int tail_ar = el.NonS().Taille(); // nombre d'arête -// unefois->CalSMRlin.Change_taille(11); -// unefois->CalSMRlin_t.Change_taille(tail_ar); -// unefois->CalSMRlin_tdt.Change_taille(tail_ar); -// // appel de la fonction d'ElemMeca -// return ElemMeca::Frontiere_lineique(num,force); -// -// -// // le calcul et la création ne sont effectués qu'au premier appel -// // ou lorsque l'on veut forcer une recréation -// if ((ind_front_lin == 0) || force || (ind_front_lin == 2)) -// {PentaMemb::DonnComPenta* CoPenta = unefois->doCoMemb; // pour simplifier l'écriture -// ElemGeomC0 & el = *(CoPenta->pentaed); -// DdlElement & tdd = CoPenta->tab_ddl; -// int taille = tabb.Taille(); // la taille initiales des frontières -// int tail_s = el.Nonf().Taille(); // nombre de faces -// int tail_a = el.NonS().Taille(); // nombre d'arête -// posi_tab_front_lin = 0; // init indice de début d'arrête dans tabb -// // dimensionnement du tableau de frontières ligne si nécessaire -// if (ind_front_lin == 0) -// {if (ind_front_surf > 0) -// // cas où il y a déjà des surfaces et pas de lignes -// { tabb.Change_taille(tail_a + tail_s); -// posi_tab_front_lin = tail_s; -// // on s'occupe également des indicateurs -// unefois->CalSMsurf_t.Change_taille(tail_a + tail_s); -// unefois->CalSMsurf_tdt.Change_taille(tail_a + tail_s); -// unefois->CalSMRsurf.Change_taille(tail_a + tail_s); -// } -// else // cas pas de lignes et de surfaces -// { tabb.Change_taille(tail_a); -// // et c'est ok pour posi_tab_front_lin -// // on s'occupe également des indicateurs -// unefois->CalSMsurf_t.Change_taille(tail_a); -// unefois->CalSMsurf_tdt.Change_taille(tail_a); -// unefois->CalSMRsurf.Change_taille(tail_a); -// } -// } -// // création éventuelle des lignes -// for (int nlign=1;nlign<=tail_a;nlign++) -// if (tabb(posi_tab_front_lin+nlign) == NULL) -// { int nbnoe = el.NonS()(nlign).Taille(); // nb noeud de l'arête -// Tableau tab(nbnoe); // les noeuds de l'arête frontiere -// DdlElement ddelem(nbnoe); // les ddlelements des noeuds frontieres -// for (int i=1;i<= nbnoe;i++) -// { tab(i) = tab_noeud(el.NonS()(nlign)(i)); -// ddelem.Change_un_ddlNoeudElement(i,tdd(el.NonS()(nlign)(i))); -// // ddelem(i) = tdd(el.NonS()(nlign)(i)); -// } -// if ((nlign == 4) || (nlign == 5) || (nlign == 6) ) -// // cas des lignes verticales -// {tabb(posi_tab_front_lin+nlign) = new_frontiere_lin_rec(tab,ddelem);} -// else -// // cas des lignes horizontales -// {tabb(posi_tab_front_lin+nlign) = new_frontiere_lin_tri(tab,ddelem);} -// } -// // mise à jour de l'indicateur -// ind_front_lin = 1; -// } -// -// return (ElFrontiere*)tabb(num + posi_tab_front_lin); -// }; -// // ramène la frontière surfacique // éventuellement création d'une frontieres surfacique de l'element et stockage dans l'element // si c'est la première fois sinon il y a seulement retour de l'elements @@ -1614,35 +1435,13 @@ ElFrontiere* const PentaMemb::Frontiere_surfacique(int num,bool force) // on s'occupe également des indicateurs unefois->CalSMsurf_t.Change_taille(tail_fa);unefois->CalSMsurf_tdt.Change_taille(tail_fa); unefois->CalSMRsurf.Change_taille(tail_fa); - }; + }; // normalement la frontière est créé on la ramène return (ElFrontiere*)tabb(num); }; -// { // dimensionnement des tableaux d'indicateurs -// PentaMemb::DonnComPenta* CoPenta = unefois->doCoMemb; // pour simplifier l'écriture -// ElemGeomC0 & el = *(CoPenta->pentaed); -// int tail_ar = el.NonS().Taille(); // nombre d'arête -// unefois->CalSMRsurf.Change_taille(tail_ar); -// unefois->CalSMRsurf.Change_taille(tail_ar); -// unefois->CalSMRsurf.Change_taille(tail_ar); -// // appel de la fonction d'ElemMeca -// return ElemMeca::Frontiere_surfacique(num,force); -// -//// // le calcul et la création ne sont effectués qu'au premier appel -//// // ou lorsque l'on veut forcer une recréation -//// // on regarde si les frontières surfaciques existent sinon on les crée -//// if (ind_front_surf == 1) -//// return (ElFrontiere*)tabb(num); -//// else if ( ind_front_surf == 2) -//// // cas où certaines frontières existent -//// {if (tabb(num) != NULL) -//// return (ElFrontiere*)tabb(num);} -//// // dans tous les autres cas on reconstruit les frontières -//// Frontiere(force); -//// return (ElFrontiere*)tabb(num); -// }; + // -------------------- calcul de frontières en protected ------------------- @@ -1650,25 +1449,25 @@ ElFrontiere* const PentaMemb::Frontiere_surfacique(int num,bool force) // adressage des frontières linéiques et surfacique // définit dans les classes dérivées, et utilisées pour la construction des frontières ElFrontiere* PentaMemb::new_frontiere_lin(int nlign,Tableau & tab, DdlElement& ddelem) -{ElFrontiere* fro_retour=NULL; - if ((nlign == 4) || (nlign == 5) || (nlign == 6) ) - // cas des lignes verticales - {fro_retour = new_frontiere_lin_rec(tab,ddelem);} - else - // cas des lignes horizontales - {fro_retour = new_frontiere_lin_tri(tab,ddelem);} - return fro_retour; -}; + {ElFrontiere* fro_retour=NULL; + if ((nlign == 4) || (nlign == 5) || (nlign == 6) ) + // cas des lignes verticales + {fro_retour = new_frontiere_lin_rec(tab,ddelem);} + else + // cas des lignes horizontales + {fro_retour = new_frontiere_lin_tri(tab,ddelem);} + return fro_retour; + }; ElFrontiere* PentaMemb::new_frontiere_surf(int nface,Tableau & tab, DdlElement& ddelem) -{ElFrontiere* fro_retour=NULL; - if ((nface == 1) || (nface == 4)) - // les faces 1 et 4 sont triangulaire - {fro_retour = new_frontiere_surf_tri(tab,ddelem);} - else - // les faces 2,3 et 5 sont quadrangulaire - {fro_retour = new_frontiere_surf_rec(tab,ddelem); } - return fro_retour; -}; + {ElFrontiere* fro_retour=NULL; + if ((nface == 1) || (nface == 4)) + // les faces 1 et 4 sont triangulaire + {fro_retour = new_frontiere_surf_tri(tab,ddelem);} + else + // les faces 2,3 et 5 sont quadrangulaire + {fro_retour = new_frontiere_surf_rec(tab,ddelem); } + return fro_retour; + }; // liberation de la place pointee void PentaMemb::Libere () @@ -1697,7 +1496,7 @@ void PentaMemb::DefLoi (LoiAbstraiteGeneral * NouvelleLoi) loiComp->Def_type_deformation(*def); // on active les données particulières nécessaires au fonctionnement de la loi de comp loiComp->Activation_donnees(tab_noeud,dilatation,lesPtMecaInt); - }; + }; // cas d'une loi thermo physique if (GroupeThermique(NouvelleLoi->Id_categorie())) {loiTP = (CompThermoPhysiqueAbstraite *) NouvelleLoi; @@ -1706,7 +1505,7 @@ void PentaMemb::DefLoi (LoiAbstraiteGeneral * NouvelleLoi) for (int i=1;i<= imax;i++) tabSaveTP(i) = loiTP->New_et_Initialise(); // on active les données particulières nécessaires au fonctionnement de la loi de comp loiTP->Activation_donnees(tab_noeud); - }; + }; // cas d'une loi de frottement if (GroupeFrottement(NouvelleLoi->Id_categorie())) loiFrot = (CompFrotAbstraite *) NouvelleLoi; @@ -1739,9 +1538,9 @@ int PentaMemb::TestComplet() // sa creation avec les donnees du bloc transmis // ici la masse volumique Element* PentaMemb::Complete(BlocGen & bloc,LesFonctions_nD* lesFonctionsnD) - { // complétion avec bloc - return ElemMeca::Complete_ElemMeca(bloc,lesFonctionsnD); - }; + { // complétion avec bloc + return ElemMeca::Complete_ElemMeca(bloc,lesFonctionsnD); + }; // Compléter pour la mise en place de la gestion de l'hourglass Element* PentaMemb::Complet_Hourglass(LoiAbstraiteGeneral * loiHourglass, const BlocGen & bloc) @@ -1762,7 +1561,7 @@ Element* PentaMemb::Complet_Hourglass(LoiAbstraiteGeneral * loiHourglass, const // ajout du tableau de ddl des noeuds void PentaMemb::ConstTabDdl() - { + { Tableau ta(ParaGlob::Dimension()); int posi = Id_nom_ddl("X1") -1; int dim = ParaGlob::Dimension(); @@ -1773,7 +1572,7 @@ Element* PentaMemb::Complet_Hourglass(LoiAbstraiteGeneral * loiHourglass, const // attribution des ddls aux noeuds for (int ne=1; ne<= nombre->nbne; ne++) tab_noeud(ne)->PlusTabDdl(ta); - }; + }; //------- calcul d'erreur, remontée des contraintes ------------------- @@ -1825,7 +1624,7 @@ PentaMemb::DonnComPenta* PentaMemb::Init lesPtMecaInt(ni).Change_Nb_pti(ni); }; - int nbddl = CoPenta->tab_ddl.NbDdl(); +// int nbddl = CoPenta->tab_ddl.NbDdl(); // stockage des donnees particulieres de la loi de comportement mécanique au point d'integ tabSaveDon.Change_taille(nombre->nbI); // stockage des donnees particulieres de la loi de comportement thermo physique au point d'integ @@ -1984,7 +1783,7 @@ void PentaMemb::Destruction() delete CoPenta->residus_externeS(i); for (int i=1;i<= 2;i++) delete CoPenta->raideurs_externeS(i); - if (CoPenta->pentaedHourg != NULL) delete CoPenta->pentaedHourg; + if (CoPenta->pentaedHourg != NULL) delete CoPenta->pentaedHourg; } }; diff --git a/Elements/Mecanique/Pentaedre/PentaMemb.h b/Elements/Mecanique/Pentaedre/PentaMemb.h index 8af09ff..3cf9f9b 100644 --- a/Elements/Mecanique/Pentaedre/PentaMemb.h +++ b/Elements/Mecanique/Pentaedre/PentaMemb.h @@ -107,14 +107,14 @@ class PentaMemb : public ElemMeca // Constructeur par defaut PentaMemb (); - // Constructeur fonction d'un numero - // d'identification , d'identificateur d'interpolation et de geometrie et éventuellement un string d'information annexe - PentaMemb (int num_mail,int num_id,Enum_interpol id_interp_elt,Enum_geom id_geom_elt,string info=""); + // Constructeur fonction d'un numero + // d'identification , d'identificateur d'interpolation et de geometrie et éventuellement un string d'information annexe + PentaMemb (int num_mail,int num_id,Enum_interpol id_interp_elt,Enum_geom id_geom_elt,string info=""); - // Constructeur fonction d'un numero de maillage et d'identification, - // du tableau de connexite des noeuds, d'identificateur d'interpolation et de geometrie - // et éventuellement un string d'information annexe - PentaMemb (int num_mail,int num_id,Enum_interpol id_interp_elt,Enum_geom id_geom_elt, + // Constructeur fonction d'un numero de maillage et d'identification, + // du tableau de connexite des noeuds, d'identificateur d'interpolation et de geometrie + // et éventuellement un string d'information annexe + PentaMemb (int num_mail,int num_id,Enum_interpol id_interp_elt,Enum_geom id_geom_elt, const Tableau& tab,string info="") ; // Constructeur de copie @@ -134,9 +134,9 @@ class PentaMemb : public ElemMeca // Lecture des donnees de la classe sur fichier void LectureDonneesParticulieres (UtilLecture *,Tableau * ); - // affichage d'info en fonction de ordre - // ordre = "commande" : affichage d'un exemple d'entree pour l'élément - void Info_com_Element(UtilLecture * entreePrinc,string& ordre,Tableau * tabMaillageNoeud) + // affichage d'info en fonction de ordre + // ordre = "commande" : affichage d'un exemple d'entree pour l'élément + void Info_com_Element(UtilLecture * entreePrinc,string& ordre,Tableau * tabMaillageNoeud) { return Element::Info_com_El(nombre->nbne,entreePrinc,ordre,tabMaillageNoeud);}; // ramene l'element geometrique @@ -180,15 +180,16 @@ class PentaMemb : public ElemMeca } }; - // retour des contraintes en absolu retour true si elle existe sinon false - bool ContraintesAbsolues(Tableau & tabSig) - { if (unefois->CalResPrem_t == 1) - ElemMeca::ContraintesEnAbsolues(false,lesPtMecaInt.TabSigHH_t(),tabSig); - else - { ElemMeca::ContraintesEnAbsolues(true,lesPtMecaInt.TabSigHH_t(),tabSig); - unefois->CalResPrem_t = 1; - } - return true; } + // retour des contraintes en absolu retour true si elle existe sinon false + bool ContraintesAbsolues(Tableau & tabSig) + { if (unefois->CalResPrem_t == 1) + ElemMeca::ContraintesEnAbsolues(false,lesPtMecaInt.TabSigHH_t(),tabSig); + else + { ElemMeca::ContraintesEnAbsolues(true,lesPtMecaInt.TabSigHH_t(),tabSig); + unefois->CalResPrem_t = 1; + } + return true; + } // Libere la place occupee par le residu et eventuellement la raideur // par l'appel de Libere de la classe mere et libere les differents tenseurs @@ -199,8 +200,8 @@ class PentaMemb : public ElemMeca // acquisition d'une loi de comportement void DefLoi (LoiAbstraiteGeneral * NouvelleLoi); - // test si l'element est complet - // = 1 tout est ok, =0 element incomplet + // test si l'element est complet + // = 1 tout est ok, =0 element incomplet int TestComplet(); // procesure permettant de completer l'element apres @@ -238,20 +239,20 @@ class PentaMemb : public ElemMeca Vecteur* CalculResidu_tdt (const ParaAlgoControle & pa) { return PentaMemb::CalculResidu(true,pa);}; - // Calcul de la matrice masse pour l'élément - Mat_pleine * CalculMatriceMasse (Enum_calcul_masse id_calcul_masse) ; + // Calcul de la matrice masse pour l'élément + Mat_pleine * CalculMatriceMasse (Enum_calcul_masse id_calcul_masse) ; - // --------- calcul dynamique --------- - // calcul de la longueur d'arrête de l'élément minimal - // divisé par la célérité la plus rapide dans le matériau - double Long_arrete_mini_sur_c(Enum_dure temps) - { return ElemMeca::Interne_Long_arrete_mini_sur_c(temps);}; + // --------- calcul dynamique --------- + // calcul de la longueur d'arrête de l'élément minimal + // divisé par la célérité la plus rapide dans le matériau + double Long_arrete_mini_sur_c(Enum_dure temps) + { return ElemMeca::Interne_Long_arrete_mini_sur_c(temps);}; - //------- calcul d'erreur, remontée des contraintes ------------------- - // 1) calcul du résidu et de la matrice de raideur pour le calcul d'erreur - Element::Er_ResRaid ContrainteAuNoeud_ResRaid(); - // 2) remontée aux erreurs aux noeuds - Element::Er_ResRaid ErreurAuNoeud_ResRaid(); + //------- calcul d'erreur, remontée des contraintes ------------------- + // 1) calcul du résidu et de la matrice de raideur pour le calcul d'erreur + Element::Er_ResRaid ContrainteAuNoeud_ResRaid(); + // 2) remontée aux erreurs aux noeuds + Element::Er_ResRaid ErreurAuNoeud_ResRaid(); // ------- affichage ou récupération d'informations -------------- // retourne un numero d'ordre d'un point le plus près ou est exprimé la grandeur enum @@ -262,218 +263,200 @@ class PentaMemb : public ElemMeca int PointLePlusPres(Enum_dure temps,Enum_ddl enu, const Coordonnee& M) { return PtLePlusPres(temps,enu,M);}; - // recuperation des coordonnées du point de numéro d'ordre iteg pour - // la grandeur enu + // recuperation des coordonnées du point de numéro d'ordre iteg pour + // la grandeur enu // temps: dit si c'est à 0 ou t ou tdt - // si erreur retourne erreur à true - Coordonnee CoordPtInteg(Enum_dure temps,Enum_ddl enu,int iteg,bool& erreur) + // si erreur retourne erreur à true + Coordonnee CoordPtInteg(Enum_dure temps,Enum_ddl enu,int iteg,bool& erreur) { return CoordPtInt(temps,enu,iteg,erreur);}; - // récupération des valeurs au numéro d'ordre = iteg pour - // les grandeur enu - Tableau Valeur_a_diff_temps(bool absolue,Enum_dure enu_t,const List_io& enu,int iteg); - // récupération des valeurs au numéro d'ordre = iteg pour les grandeurs enu - // ici il s'agit de grandeurs tensorielles, le retour s'effectue dans la liste - // de conteneurs quelconque associée - void ValTensorielle_a_diff_temps(bool absolue,Enum_dure enu_t,List_io& enu,int iteg); + // récupération des valeurs au numéro d'ordre = iteg pour + // les grandeur enu + Tableau Valeur_a_diff_temps(bool absolue,Enum_dure enu_t,const List_io& enu,int iteg); + // récupération des valeurs au numéro d'ordre = iteg pour les grandeurs enu + // ici il s'agit de grandeurs tensorielles, le retour s'effectue dans la liste + // de conteneurs quelconque associée + void ValTensorielle_a_diff_temps(bool absolue,Enum_dure enu_t,List_io& enu,int iteg); //============= lecture écriture dans base info ========== - // cas donne le niveau de la récupération + // cas donne le niveau de la récupération // = 1 : on récupère tout // = 2 : on récupère uniquement les données variables (supposées comme telles) - void Lecture_base_info + void Lecture_base_info (ifstream& ent,const Tableau * tabMaillageNoeud,const int cas) ; // cas donne le niveau de sauvegarde // = 1 : on sauvegarde tout // = 2 : on sauvegarde uniquement les données variables (supposées comme telles) - void Ecriture_base_info(ofstream& sort,const int cas) ; + void Ecriture_base_info(ofstream& sort,const int cas) ; // 2) derivant des virtuelles - // retourne un tableau de ddl element, correspondant à la - // composante de sigma -> SIG11, pour chaque noeud qui contiend - // des ddl de contrainte - // -> utilisé pour l'assemblage de la raideur d'erreur - DdlElement& Tableau_de_Sig1() const + // retourne un tableau de ddl element, correspondant à la + // composante de sigma -> SIG11, pour chaque noeud qui contiend + // des ddl de contrainte + // -> utilisé pour l'assemblage de la raideur d'erreur + DdlElement& Tableau_de_Sig1() const {return unefois->doCoMemb->tab_Err1Sig11;} ; - // actualisation des ddl et des grandeurs actives de t+dt vers t - void TdtversT(); - // actualisation des ddl et des grandeurs actives de t vers tdt - void TversTdt(); + // actualisation des ddl et des grandeurs actives de t+dt vers t + void TdtversT(); + // actualisation des ddl et des grandeurs actives de t vers tdt + void TversTdt(); - // calcul de l'erreur sur l'élément. Ce calcul n'est disponible - // qu'une fois la remontée aux contraintes effectuées sinon aucune - // action. En retour la valeur de l'erreur sur l'élément - // type indique le type de calcul d'erreur : - void ErreurElement(int type,double& errElemRelative - ,double& numerateur, double& denominateur); + // calcul de l'erreur sur l'élément. Ce calcul n'est disponible + // qu'une fois la remontée aux contraintes effectuées sinon aucune + // action. En retour la valeur de l'erreur sur l'élément + // type indique le type de calcul d'erreur : + void ErreurElement(int type,double& errElemRelative + ,double& numerateur, double& denominateur); - // calcul des seconds membres suivant les chargements - // cas d'un chargement en pression volumique, - // force indique la force volumique appliquée - // retourne le second membre résultant - // ici on l'épaisseur de l'élément pour constituer le volume - // -> explicite à t - Vecteur SM_charge_volumique_E_t - (const Coordonnee& force,Fonction_nD* pt_fonct,const ParaAlgoControle & pa,bool sur_volume_finale_) - { return PentaMemb::SM_charge_volumique_E(force,pt_fonct,false,pa,sur_volume_finale_);} ; - // -> explicite à tdt - Vecteur SM_charge_volumique_E_tdt - (const Coordonnee& force,Fonction_nD* pt_fonct,const ParaAlgoControle & pa,bool sur_volume_finale_) - { return PentaMemb::SM_charge_volumique_E(force,pt_fonct,true,pa,sur_volume_finale_);} ; - // -> implicite, - // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur - // retourne le second membre et la matrice de raideur correspondant - ResRaid SMR_charge_volumique_I - (const Coordonnee& force,Fonction_nD* pt_fonct,const ParaAlgoControle & pa,bool sur_volume_finale_) ; + // calcul des seconds membres suivant les chargements + // cas d'un chargement en pression volumique, + // force indique la force volumique appliquée + // retourne le second membre résultant + // ici on l'épaisseur de l'élément pour constituer le volume + // -> explicite à t + Vecteur SM_charge_volumique_E_t + (const Coordonnee& force,Fonction_nD* pt_fonct,const ParaAlgoControle & pa,bool sur_volume_finale_) + { return PentaMemb::SM_charge_volumique_E(force,pt_fonct,false,pa,sur_volume_finale_);} ; + // -> explicite à tdt + Vecteur SM_charge_volumique_E_tdt + (const Coordonnee& force,Fonction_nD* pt_fonct,const ParaAlgoControle & pa,bool sur_volume_finale_) + { return PentaMemb::SM_charge_volumique_E(force,pt_fonct,true,pa,sur_volume_finale_);} ; + // -> implicite, + // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur + // retourne le second membre et la matrice de raideur correspondant + ResRaid SMR_charge_volumique_I + (const Coordonnee& force,Fonction_nD* pt_fonct,const ParaAlgoControle & pa,bool sur_volume_finale_) ; - // cas d'un chargement surfacique, sur les frontières des éléments - // force indique la force surfacique appliquée - // numface indique le numéro de la face chargée - // retourne le second membre résultant - // -> version explicite à t - Vecteur SM_charge_surfacique_E_t(const Coordonnee& force,Fonction_nD* pt_fonct - ,int numFace,const ParaAlgoControle & pa) - { return PentaMemb::SM_charge_surfacique_E(force,pt_fonct,numFace,false,pa);} ; - // -> version explicite à tdt - Vecteur SM_charge_surfacique_E_tdt(const Coordonnee& force,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) - { return PentaMemb::SM_charge_surfacique_E(force,pt_fonct,numFace,true,pa);} ; - // -> implicite, - // pa : permet de déterminer si oui ou non on calcul la contribution à la raideur - // retourne le second membre et la matrice de raideur correspondant - ResRaid SMR_charge_surfacique_I - (const Coordonnee& force,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) ; + // cas d'un chargement surfacique, sur les frontières des éléments + // force indique la force surfacique appliquée + // numface indique le numéro de la face chargée + // retourne le second membre résultant + // -> version explicite à t + Vecteur SM_charge_surfacique_E_t(const Coordonnee& force,Fonction_nD* pt_fonct + ,int numFace,const ParaAlgoControle & pa) + { return PentaMemb::SM_charge_surfacique_E(force,pt_fonct,numFace,false,pa);} ; + // -> version explicite à tdt + Vecteur SM_charge_surfacique_E_tdt(const Coordonnee& force,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) + { return PentaMemb::SM_charge_surfacique_E(force,pt_fonct,numFace,true,pa);} ; + // -> implicite, + // pa : permet de déterminer si oui ou non on calcul la contribution à la raideur + // retourne le second membre et la matrice de raideur correspondant + ResRaid SMR_charge_surfacique_I + (const Coordonnee& force,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) ; - // cas d'un chargement de type pression unidirectionnelle, sur les frontières des éléments - // presUniDir indique le vecteur appliquée - // numface indique le numéro de la face chargée - // retourne le second membre résultant - // -> explicite à t - Vecteur SM_charge_presUniDir_E_t(const Coordonnee& presUniDir,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) - { return PentaMemb::SM_charge_presUniDir_E(presUniDir,pt_fonct,numFace,false,pa);} ; - // -> explicite à tdt - Vecteur SM_charge_presUniDir_E_tdt(const Coordonnee& presUniDir,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) - { return PentaMemb::SM_charge_presUniDir_E(presUniDir,pt_fonct,numFace,true,pa);} ; - // -> implicite, - // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur - // retourne le second membre et la matrice de raideur correspondant - ResRaid SMR_charge_presUniDir_I(const Coordonnee& presUniDir,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa); + // cas d'un chargement de type pression unidirectionnelle, sur les frontières des éléments + // presUniDir indique le vecteur appliquée + // numface indique le numéro de la face chargée + // retourne le second membre résultant + // -> explicite à t + Vecteur SM_charge_presUniDir_E_t(const Coordonnee& presUniDir,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) + { return PentaMemb::SM_charge_presUniDir_E(presUniDir,pt_fonct,numFace,false,pa);} ; + // -> explicite à tdt + Vecteur SM_charge_presUniDir_E_tdt(const Coordonnee& presUniDir,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) + { return PentaMemb::SM_charge_presUniDir_E(presUniDir,pt_fonct,numFace,true,pa);} ; + // -> implicite, + // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur + // retourne le second membre et la matrice de raideur correspondant + ResRaid SMR_charge_presUniDir_I(const Coordonnee& presUniDir,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa); - // cas d'un chargement lineique, sur les aretes frontières des éléments - // force indique la force lineique appliquée - // numarete indique le numéro de l'arete chargée - // retourne le second membre résultant - // NB: il y a une définition par défaut pour les éléments qui n'ont pas - // d'arete externe -> message d'erreur d'où le virtuel et non virtuel pur - // -> explicite à t - Vecteur SM_charge_lineique_E_t(const Coordonnee& force,Fonction_nD* pt_fonct,int numArete,const ParaAlgoControle & pa) - { return PentaMemb::SM_charge_lineique_E(force,pt_fonct,numArete,false,pa);} ; - // -> explicite à tdt - Vecteur SM_charge_lineique_E_tdt(const Coordonnee& force,Fonction_nD* pt_fonct,int numArete,const ParaAlgoControle & pa) - { return PentaMemb::SM_charge_lineique_E(force,pt_fonct,numArete,true,pa);} ; - // -> implicite, - // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur - // retourne le second membre et la matrice de raideur correspondant - ResRaid SMR_charge_lineique_I(const Coordonnee& force,Fonction_nD* pt_fonct,int numArete,const ParaAlgoControle & pa) ; + // cas d'un chargement lineique, sur les aretes frontières des éléments + // force indique la force lineique appliquée + // numarete indique le numéro de l'arete chargée + // retourne le second membre résultant + // NB: il y a une définition par défaut pour les éléments qui n'ont pas + // d'arete externe -> message d'erreur d'où le virtuel et non virtuel pur + // -> explicite à t + Vecteur SM_charge_lineique_E_t(const Coordonnee& force,Fonction_nD* pt_fonct,int numArete,const ParaAlgoControle & pa) + { return PentaMemb::SM_charge_lineique_E(force,pt_fonct,numArete,false,pa);} ; + // -> explicite à tdt + Vecteur SM_charge_lineique_E_tdt(const Coordonnee& force,Fonction_nD* pt_fonct,int numArete,const ParaAlgoControle & pa) + { return PentaMemb::SM_charge_lineique_E(force,pt_fonct,numArete,true,pa);} ; + // -> implicite, + // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur + // retourne le second membre et la matrice de raideur correspondant + ResRaid SMR_charge_lineique_I(const Coordonnee& force,Fonction_nD* pt_fonct,int numArete,const ParaAlgoControle & pa) ; - // cas d'un chargement de type pression, sur les frontières des éléments - // pression indique la pression appliquée - // numface indique le numéro de la face chargée - // retourne le second membre résultant - // NB: il y a une définition par défaut pour les éléments qui n'ont pas de - // surface externe -> message d'erreur d'où le virtuel et non virtuel pur - // -> explicite à t - Vecteur SM_charge_pression_E_t(double pression,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) - { return PentaMemb::SM_charge_pression_E(pression,pt_fonct,numFace,false,pa);}; - // -> explicite à tdt - Vecteur SM_charge_pression_E_tdt(double pression,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) - { return PentaMemb::SM_charge_pression_E(pression,pt_fonct,numFace,true,pa);}; - // -> implicite, - // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur - // retourne le second membre et la matrice de raideur correspondant - ResRaid SMR_charge_pression_I(double pression,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) ; + // cas d'un chargement de type pression, sur les frontières des éléments + // pression indique la pression appliquée + // numface indique le numéro de la face chargée + // retourne le second membre résultant + // NB: il y a une définition par défaut pour les éléments qui n'ont pas de + // surface externe -> message d'erreur d'où le virtuel et non virtuel pur + // -> explicite à t + Vecteur SM_charge_pression_E_t(double pression,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) + { return PentaMemb::SM_charge_pression_E(pression,pt_fonct,numFace,false,pa);}; + // -> explicite à tdt + Vecteur SM_charge_pression_E_tdt(double pression,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) + { return PentaMemb::SM_charge_pression_E(pression,pt_fonct,numFace,true,pa);}; + // -> implicite, + // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur + // retourne le second membre et la matrice de raideur correspondant + ResRaid SMR_charge_pression_I(double pression,Fonction_nD* pt_fonct,int numFace,const ParaAlgoControle & pa) ; - // cas d'un chargement surfacique hydrostatique, - // poidvol: indique le poids volumique du liquide - // M_liquide : un point de la surface libre - // dir_normal_liquide : direction normale à la surface libre - // retourne le second membre résultant - // -> explicite à t - Vecteur SM_charge_hydrostatique_E_t(const Coordonnee& dir_normal_liquide,const double& poidvol + // cas d'un chargement surfacique hydrostatique, + // poidvol: indique le poids volumique du liquide + // M_liquide : un point de la surface libre + // dir_normal_liquide : direction normale à la surface libre + // retourne le second membre résultant + // -> explicite à t + Vecteur SM_charge_hydrostatique_E_t(const Coordonnee& dir_normal_liquide,const double& poidvol + ,int numFace,const Coordonnee& M_liquide + ,const ParaAlgoControle & pa + ,bool sans_limitation) + { return PentaMemb::SM_charge_hydrostatique_E(dir_normal_liquide,poidvol,numFace,M_liquide,false,pa,sans_limitation);}; + // -> explicite à tdt + Vecteur SM_charge_hydrostatique_E_tdt(const Coordonnee& dir_normal_liquide,const double& poidvol ,int numFace,const Coordonnee& M_liquide ,const ParaAlgoControle & pa ,bool sans_limitation) - { return PentaMemb::SM_charge_hydrostatique_E(dir_normal_liquide,poidvol,numFace,M_liquide,false,pa,sans_limitation);}; - // -> explicite à tdt - Vecteur SM_charge_hydrostatique_E_tdt(const Coordonnee& dir_normal_liquide,const double& poidvol - ,int numFace,const Coordonnee& M_liquide - ,const ParaAlgoControle & pa - ,bool sans_limitation) - { return PentaMemb::SM_charge_hydrostatique_E(dir_normal_liquide,poidvol,numFace,M_liquide,true,pa,sans_limitation);}; - // -> implicite, - // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur - // retourne le second membre et la matrice de raideur correspondant - ResRaid SMR_charge_hydrostatique_I(const Coordonnee& dir_normal_liquide,const double& poidvol + { return PentaMemb::SM_charge_hydrostatique_E(dir_normal_liquide,poidvol,numFace,M_liquide,true,pa,sans_limitation);}; + // -> implicite, + // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur + // retourne le second membre et la matrice de raideur correspondant + ResRaid SMR_charge_hydrostatique_I(const Coordonnee& dir_normal_liquide,const double& poidvol ,int numFace,const Coordonnee& M_liquide ,const ParaAlgoControle & pa ,bool sans_limitation) ; - // cas d'un chargement surfacique hydro-dynamique, - // Il y a trois forces: une suivant la direction de la vitesse: de type traînée aerodynamique - // Fn = poids_volu * fn(V) * S * (normale*u) * u, u étant le vecteur directeur de V (donc unitaire) - // une suivant la direction normale à la vitesse de type portance - // Ft = poids_volu * ft(V) * S * (normale*u) * w, w unitaire, normal à V, et dans le plan n et V - // une suivant la vitesse tangente de type frottement visqueux - // T = to(Vt) * S * ut, Vt étant la vitesse tangentielle et ut étant le vecteur directeur de Vt - // coef_mul: est un coefficient multiplicateur global (de tout) - // retourne le second membre résultant - // -> explicite à t - Vecteur SM_charge_hydrodynamique_E_t( Courbe1D* frot_fluid,const double& poidvol - , Courbe1D* coef_aero_n,int numFace,const double& coef_mul - , Courbe1D* coef_aero_t - ,const ParaAlgoControle & pa) - {return SM_charge_hydrodynamique_E(frot_fluid,poidvol,coef_aero_n,numFace,coef_mul,coef_aero_t,false,pa);}; - // -> explicite à tdt - Vecteur SM_charge_hydrodynamique_E_tdt( Courbe1D* frot_fluid,const double& poidvol - , Courbe1D* coef_aero_n,int numFace,const double& coef_mul - , Courbe1D* coef_aero_t,const ParaAlgoControle & pa) - {return SM_charge_hydrodynamique_E(frot_fluid,poidvol,coef_aero_n,numFace,coef_mul,coef_aero_t,true,pa);}; - // -> implicite, - // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur - // retourne le second membre et la matrice de raideur correspondant - ResRaid SMR_charge_hydrodynamique_I( Courbe1D* frot_fluid,const double& poidvol + // cas d'un chargement surfacique hydro-dynamique, + // Il y a trois forces: une suivant la direction de la vitesse: de type traînée aerodynamique + // Fn = poids_volu * fn(V) * S * (normale*u) * u, u étant le vecteur directeur de V (donc unitaire) + // une suivant la direction normale à la vitesse de type portance + // Ft = poids_volu * ft(V) * S * (normale*u) * w, w unitaire, normal à V, et dans le plan n et V + // une suivant la vitesse tangente de type frottement visqueux + // T = to(Vt) * S * ut, Vt étant la vitesse tangentielle et ut étant le vecteur directeur de Vt + // coef_mul: est un coefficient multiplicateur global (de tout) + // retourne le second membre résultant + // -> explicite à t + Vecteur SM_charge_hydrodynamique_E_t( Courbe1D* frot_fluid,const double& poidvol + , Courbe1D* coef_aero_n,int numFace,const double& coef_mul + , Courbe1D* coef_aero_t + ,const ParaAlgoControle & pa) + {return SM_charge_hydrodynamique_E(frot_fluid,poidvol,coef_aero_n,numFace,coef_mul,coef_aero_t,false,pa);}; + // -> explicite à tdt + Vecteur SM_charge_hydrodynamique_E_tdt( Courbe1D* frot_fluid,const double& poidvol , Courbe1D* coef_aero_n,int numFace,const double& coef_mul - , Courbe1D* coef_aero_t,const ParaAlgoControle & pa) ; + , Courbe1D* coef_aero_t,const ParaAlgoControle & pa) + {return SM_charge_hydrodynamique_E(frot_fluid,poidvol,coef_aero_n,numFace,coef_mul,coef_aero_t,true,pa);}; + // -> implicite, + // pa: permet de déterminer si oui ou non on calcul la contribution à la raideur + // retourne le second membre et la matrice de raideur correspondant + ResRaid SMR_charge_hydrodynamique_I( Courbe1D* frot_fluid,const double& poidvol + , Courbe1D* coef_aero_n,int numFace,const double& coef_mul + , Courbe1D* coef_aero_t,const ParaAlgoControle & pa) ; - // ========= définition et/ou construction des frontières =============== - + // ========= définition et/ou construction des frontières =============== + // Calcul des frontieres de l'element // creation des elements frontieres et retour du tableau de ces elements // la création n'a lieu qu'au premier appel // ou lorsque l'on force le paramètre force a true // dans ce dernier cas seul les frontière effacées sont recréée Tableau const & Frontiere(bool force = false); - - // ramène la frontière point - // éventuellement création des frontieres points de l'element et stockage dans l'element - // si c'est la première fois sinon il y a seulement retour de l'elements - // a moins que le paramètre force est mis a true - // dans ce dernier cas la frontière effacéee est recréée - // num indique le numéro du point à créer (numérotation EF) -// ElFrontiere* const Frontiere_points(int num,bool force = false); - - // ramène la frontière linéique - // éventuellement création des frontieres linéique de l'element et stockage dans l'element - // si c'est la première fois et en 3D sinon il y a seulement retour de l'elements - // a moins que le paramètre force est mis a true - // dans ce dernier cas la frontière effacéee est recréée - // num indique le numéro de l'arête à créer (numérotation EF) - // on maintient la fonction ici, car elle fait des choses qui ne sont pas fait - // dans la fonction d'ElemMeca -// ElFrontiere* const Frontiere_lineique(int num,bool force = false); - + // ramène la frontière surfacique // éventuellement création des frontieres surfacique de l'element et stockage dans l'element // si c'est la première fois sinon il y a seulement retour de l'elements @@ -484,22 +467,22 @@ class PentaMemb : public ElemMeca // -------------------- calcul de frontières en protected ------------------- - // --- fonction nécessaire pour la construction des Frontières linéiques ou surfaciques particulière à l'élément - // adressage des frontières linéiques et surfacique - // définit dans les classes dérivées, et utilisées pour la construction des frontières - virtual ElFrontiere* new_frontiere_lin(int num,Tableau & tab, DdlElement& ddelem); - virtual ElFrontiere* new_frontiere_surf(int num,Tableau & tab, DdlElement& ddelem); + // --- fonction nécessaire pour la construction des Frontières linéiques ou surfaciques particulière à l'élément + // adressage des frontières linéiques et surfacique + // définit dans les classes dérivées, et utilisées pour la construction des frontières + virtual ElFrontiere* new_frontiere_lin(int num,Tableau & tab, DdlElement& ddelem); + virtual ElFrontiere* new_frontiere_surf(int num,Tableau & tab, DdlElement& ddelem); // 3) methodes propres a l'element - // ajout du tableau specific de ddl des noeuds - // la procedure met a jour les ddl(relatif a l'element, c-a-d Xi) - // des noeuds constituants l'element - void ConstTabDdl(); + // ajout du tableau specific de ddl des noeuds + // la procedure met a jour les ddl(relatif a l'element, c-a-d Xi) + // des noeuds constituants l'element + void ConstTabDdl(); - public : - // -------------- definition de la classe conteneur de donnees communes ------------ - class DonnComPenta +public : + // -------------- definition de la classe conteneur de donnees communes ------------ + class DonnComPenta { public : // penta1 doit pointer sur un element deja existant via un new DonnComPenta (ElemGeomC0* penta1,DdlElement& tab,DdlElement& tabErr,DdlElement& tab_Err1Sig, @@ -559,10 +542,10 @@ class PentaMemb : public ElemMeca Mat_pleine matrice_masse; ElemGeomC0* pentaedMas; // contiend les fonctions d'interpolation et ... // pour les calculs relatifs à la masse - // ------ blocage éventuel d'hourglass - // utiliser dans ElemMeca::Cal_mat_hourglass_comp, Cal_implicit_hourglass, Cal_explici_hourglass + // ------ blocage éventuel d'hourglass + // utiliser dans ElemMeca::Cal_mat_hourglass_comp, Cal_implicit_hourglass, Cal_explici_hourglass ElemGeomC0* pentaedHourg; // contiend les fonctions d'interpolation - }; + }; // classe contenant tous les indicateurs statique qui sont modifiés une seule fois // et un pointeur sur les données statiques communes @@ -573,8 +556,8 @@ class PentaMemb : public ElemMeca UneFois () ; // constructeur par défaut ~UneFois () ; // destructeur - // VARIABLES : - public : + // VARIABLES : + public : PentaMemb::DonnComPenta * doCoMemb; // incicateurs permettant de dimensionner seulement au premier passage @@ -593,7 +576,7 @@ class PentaMemb : public ElemMeca int CalSMvol; // pour les seconds membres concernant les volumes int CalDynamique; // pour le calcul de la matrice de masse int CalPt_0_t_tdt; // pour le calcul de point à 0 t et tdt - // ---------- sauvegarde du nombre d'élément en cours -------- + // ---------- sauvegarde du nombre d'élément en cours -------- int nbelem_in_Prog; }; @@ -601,19 +584,19 @@ class PentaMemb : public ElemMeca protected : - // VARIABLES PRIVEES : - UneFois * unefois; // pointeur défini dans la classe dérivée + // VARIABLES PRIVEES : + UneFois * unefois; // pointeur défini dans la classe dérivée - // grandeurs aux points d'intégration: contraintes, déformations, vitesses de def etc. - LesPtIntegMecaInterne lesPtMecaInt; + // grandeurs aux points d'intégration: contraintes, déformations, vitesses de def etc. + LesPtIntegMecaInterne lesPtMecaInt; - // type structuré et pointeur pour construire les éléments - // le pointeur est défini dans le type dérivé - class NombresConstruire + // type structuré et pointeur pour construire les éléments + // le pointeur est défini dans le type dérivé + class NombresConstruire { public: - NombresConstruire():nbne(0),nbneSQ(0),nbneST(0),nbneAQ(0),nbneAT(0),nbI(0) - ,nbiQ(0),nbiT(0),nbiEr(0),nbiV(0),nbiSQ(0),nbiST(0),nbiAQ(0) - ,nbiAT(0),nbiMas(0),nbiHour(0) {}; + NombresConstruire():nbne(0),nbneSQ(0),nbneST(0),nbneAQ(0),nbneAT(0),nbI(0) + ,nbiQ(0),nbiT(0),nbiEr(0),nbiV(0),nbiSQ(0),nbiST(0),nbiAQ(0) + ,nbiAT(0),nbiMas(0),nbiHour(0) {}; int nbne; // le nombre de noeud de l'élément int nbneSQ ; // le nombre de noeud des facettes quadrangulaires int nbneST ; // le nombre de noeud des facettes triangulaires @@ -630,34 +613,34 @@ class PentaMemb : public ElemMeca int nbiAT; // nB pt integ pour calcul second membre linéique des arête des triangles int nbiMas; // le nombre de point d'intégration pour le calcul de la matrice masse int nbiHour; // éventuellement, le nombre de point d'intégration un blocage d'hourglass - }; - NombresConstruire * nombre; // le pointeur défini dans la classe dérivée d'hexamemb + }; + NombresConstruire * nombre; // le pointeur défini dans la classe dérivée d'hexamemb // =====>>>> methodes appelees par les classes dérivees <<<<===== - // fonction d'initialisation servant dans les classes derivant - // au niveau du constructeur - // les pointeurs d'éléments géométriques sont non nul uniquement lorsque doCoMemb est null - // c'est-à-dire pour l'initialisation - PentaMemb::DonnComPenta* Init (ElemGeomC0* penta,ElemGeomC0* pentaEr,ElemGeomC0* pentaMas - ,ElemGeomC0* pentaeHourg,bool sans_init_noeud = false); - // destructions de certaines grandeurs pointées, créées au niveau de l'initialisation - void Destruction(); - - // adressage des frontières linéiques et surfacique - // définit dans les classes dérivées, et utilisées pour la construction des frontières - // frontière linéique verticale (rectangle) - virtual ElFrontiere* new_frontiere_lin_rec(Tableau & tab, DdlElement& ddelem) = 0; - // frontière linéique horizontale (triangle) - virtual ElFrontiere* new_frontiere_lin_tri(Tableau & tab, DdlElement& ddelem) = 0; - // frontière surfacique verticale (rectangle) - virtual ElFrontiere* new_frontiere_surf_rec(Tableau & tab, DdlElement& ddelem) = 0; - // frontière surfacique horizontale (triangle) - virtual ElFrontiere* new_frontiere_surf_tri(Tableau & tab, DdlElement& ddelem) = 0; + // fonction d'initialisation servant dans les classes derivant + // au niveau du constructeur + // les pointeurs d'éléments géométriques sont non nul uniquement lorsque doCoMemb est null + // c'est-à-dire pour l'initialisation + PentaMemb::DonnComPenta* Init (ElemGeomC0* penta,ElemGeomC0* pentaEr,ElemGeomC0* pentaMas + ,ElemGeomC0* pentaeHourg,bool sans_init_noeud = false); + // destructions de certaines grandeurs pointées, créées au niveau de l'initialisation + void Destruction(); + + // adressage des frontières linéiques et surfacique + // définit dans les classes dérivées, et utilisées pour la construction des frontières + // frontière linéique verticale (rectangle) + virtual ElFrontiere* new_frontiere_lin_rec(Tableau & tab, DdlElement& ddelem) = 0; + // frontière linéique horizontale (triangle) + virtual ElFrontiere* new_frontiere_lin_tri(Tableau & tab, DdlElement& ddelem) = 0; + // frontière surfacique verticale (rectangle) + virtual ElFrontiere* new_frontiere_surf_rec(Tableau & tab, DdlElement& ddelem) = 0; + // frontière surfacique horizontale (triangle) + virtual ElFrontiere* new_frontiere_surf_tri(Tableau & tab, DdlElement& ddelem) = 0; // ==== >>>> methodes virtuelles dérivant d'ElemMeca ============ - // ramene la dimension des tenseurs contraintes et déformations de l'élément - int Dim_sig_eps() const {return 3;}; + // ramene la dimension des tenseurs contraintes et déformations de l'élément + int Dim_sig_eps() const {return 3;}; //------------ fonctions uniquement a usage interne ---------- private : @@ -667,7 +650,7 @@ class PentaMemb : public ElemMeca PentaMemb::DonnComPenta* Def_DonneeCommune(ElemGeomC0* penta,ElemGeomC0* pentaEr ,ElemGeomC0* pentaMas,ElemGeomC0* pentaeHourg); // Calcul du residu local a t ou tdt en fonction du booleen - Vecteur* CalculResidu (bool atdt,const ParaAlgoControle & pa); + Vecteur* CalculResidu (bool atdt,const ParaAlgoControle & pa); // cas d'un chargement de type pression, sur les frontières des éléments // pression indique la pression appliquée // numface indique le numéro de la face chargée diff --git a/Maillage/LesMaillages.cc b/Maillage/LesMaillages.cc index 6c1fc90..94e0baa 100644 --- a/Maillage/LesMaillages.cc +++ b/Maillage/LesMaillages.cc @@ -37,9 +37,9 @@ #include "CharUtil.h" #include "TypeQuelconqueParticulier.h" -#ifndef SYSTEM_MAC_OS_X_unix - #include "Frontier.h" -#endif +//#ifndef SYSTEM_MAC_OS_X_unix +// #include "Frontier.h" +//#endif // Constructeur diff --git a/Maillage/LesMaillages2.cc b/Maillage/LesMaillages2.cc index 7c02de4..b5a63be 100644 --- a/Maillage/LesMaillages2.cc +++ b/Maillage/LesMaillages2.cc @@ -36,9 +36,9 @@ #include "CharUtil.h" #include "TypeQuelconqueParticulier.h" -#ifndef SYSTEM_MAC_OS_X_unix - #include "Frontier.h" -#endif +//#ifndef SYSTEM_MAC_OS_X_unix +// #include "Frontier.h" +//#endif // --------- calcul dynamique --------- // ajout des ddl de vitesse pour tous les maillages diff --git a/Maillage/Maillage.cc b/Maillage/Maillage.cc index 66a8599..752e604 100755 --- a/Maillage/Maillage.cc +++ b/Maillage/Maillage.cc @@ -39,9 +39,9 @@ using namespace std; //introduces namespace std #include #include "List_io.h" #include "CharUtil.h" -#ifndef SYSTEM_MAC_OS_X_unix - #include "Frontier.h" -#endif +//#ifndef SYSTEM_MAC_OS_X_unix +// #include "Frontier.h" +//#endif #include "ConstMath.h" #include "ReferenceNE.h" #include "ReferenceAF.h" diff --git a/Maillage/Maillage2.cc b/Maillage/Maillage2.cc index 74442e2..8b55db6 100644 --- a/Maillage/Maillage2.cc +++ b/Maillage/Maillage2.cc @@ -39,9 +39,9 @@ using namespace std; //introduces namespace std #include #include "List_io.h" #include "CharUtil.h" -#ifndef SYSTEM_MAC_OS_X_unix - #include "Frontier.h" -#endif +//#ifndef SYSTEM_MAC_OS_X_unix +// #include "Frontier.h" +//#endif #include "ConstMath.h" #include "ReferenceNE.h" #include "ReferenceAF.h" diff --git a/Maillage/Maillage3.cc b/Maillage/Maillage3.cc index 05eb30d..6e2be4c 100644 --- a/Maillage/Maillage3.cc +++ b/Maillage/Maillage3.cc @@ -39,9 +39,9 @@ using namespace std; //introduces namespace std #include #include "List_io.h" #include "CharUtil.h" -#ifndef SYSTEM_MAC_OS_X_unix - #include "Frontier.h" -#endif +//#ifndef SYSTEM_MAC_OS_X_unix +// #include "Frontier.h" +//#endif #include "ConstMath.h" #include "ReferenceNE.h" #include "ReferenceAF.h" diff --git a/Maillage/maillage4.cc b/Maillage/maillage4.cc index c690577..9f1963f 100644 --- a/Maillage/maillage4.cc +++ b/Maillage/maillage4.cc @@ -39,9 +39,9 @@ using namespace std; //introduces namespace std #include #include "List_io.h" #include "CharUtil.h" -#ifndef SYSTEM_MAC_OS_X_unix - #include "Frontier.h" -#endif +//#ifndef SYSTEM_MAC_OS_X_unix +// #include "Frontier.h" +//#endif #include "ConstMath.h" #include "ReferenceNE.h" #include "ReferenceAF.h" diff --git a/Resultats/MAPLE/Visualisation_maple.h b/Resultats/MAPLE/Visualisation_maple.h index a963abd..8a8560a 100755 --- a/Resultats/MAPLE/Visualisation_maple.h +++ b/Resultats/MAPLE/Visualisation_maple.h @@ -140,7 +140,7 @@ class Visualisation_maple void Lecture_parametres_OrdreVisu(UtilLecture & entreePrinc); // écriture des paramètres de l'ordre dans un flux void Ecriture_parametres_OrdreVisu(UtilLecture & entreePrinc); - // demande si la visualisation vrml est validé ou pas + // demande si la visualisation maple est validée ou pas bool Visu_maple_valide() {return activ_sort_maple;}; // inactive la visualisation maple void Inactiv_Visu_maple() {activ_sort_maple=false;}; diff --git a/TypeBase/List_io.h b/TypeBase/List_io.h index 287a031..7779858 100644 --- a/TypeBase/List_io.h +++ b/TypeBase/List_io.h @@ -52,7 +52,7 @@ #include #include #include -#include "LaList.h" +#include "LaLIST.h" #include "Sortie.h" #include "ParaGlob.h" using namespace std; //introduces namespace std diff --git a/Util/Courbes/Fonction_nD.cc b/Util/Courbes/Fonction_nD.cc index e37ad08..f33adc5 100755 --- a/Util/Courbes/Fonction_nD.cc +++ b/Util/Courbes/Fonction_nD.cc @@ -211,11 +211,11 @@ Fonction_nD::Fonction_nD(const Fonction_nD& Co) : // soit identique à celle du tableau Nom_variables() : en fait t_enu et tqi doivent représenter les variables Tableau & Fonction_nD::Valeur_FnD(Tableau * t_enu,Tableau * t_qi ,Tableau * t_num_ordre) - {// on se sert des tableaux d'adressage indirect pour remplir le tableau de passage - // tab_enu_etendu(i) correspond à nom_variables(index_enu_etendu(i)) + { // on se sert des tableaux d'adressage indirect pour remplir le tableau de passage + // tab_enu_etendu(i) correspond à nom_variables(index_enu_etendu(i)) // tab_enu_quelconque(i) correspond à nom_variables(index_enu_quelconque(i)) // un tableau intermédiaire qui sert pour Valeur(Tableau ... -// Tableau x_x_i; + // Tableau x_x_i; #ifdef MISE_AU_POINT // on vérifie qu'il y a bien équivalence entre les variables if (!equivalence_nom_enu_etendu_et_enu_quelconque) diff --git a/Util/MathUtil2.cc b/Util/MathUtil2.cc index 6061dc5..2fa28c0 100644 --- a/Util/MathUtil2.cc +++ b/Util/MathUtil2.cc @@ -28,8 +28,8 @@ #include "MathUtil2.h" -#include "nrutil.h" -#include "jacobi.h" +//#include "nrutil.h" +//#include "jacobi.h" #include "Util.h" #include "ConstMath.h" #include "MathUtil.h" diff --git a/comportement/Hyper_elastique/Hyper3D.cc b/comportement/Hyper_elastique/Hyper3D.cc index e024d88..3eeac58 100644 --- a/comportement/Hyper_elastique/Hyper3D.cc +++ b/comportement/Hyper_elastique/Hyper3D.cc @@ -29,7 +29,7 @@ // For more information, please consult: . #include "Hyper3D.h" -#include "ComLoi_comp_abstraite.h" +//#include "ComLoi_comp_abstraite.h" # include using namespace std; //introduces namespace std diff --git a/comportement/Hyper_elastique/Hyper3DN.cc b/comportement/Hyper_elastique/Hyper3DN.cc index 9ead385..963f69a 100644 --- a/comportement/Hyper_elastique/Hyper3DN.cc +++ b/comportement/Hyper_elastique/Hyper3DN.cc @@ -29,7 +29,7 @@ // For more information, please consult: . #include "Hyper3DN.h" -#include "ComLoi_comp_abstraite.h" +//#include "ComLoi_comp_abstraite.h" # include using namespace std; //introduces namespace std diff --git a/comportement/Hyper_elastique/IsoHyper3DFavier3.cc b/comportement/Hyper_elastique/IsoHyper3DFavier3.cc index 0c886c7..f716591 100644 --- a/comportement/Hyper_elastique/IsoHyper3DFavier3.cc +++ b/comportement/Hyper_elastique/IsoHyper3DFavier3.cc @@ -29,7 +29,7 @@ // For more information, please consult: . #include "IsoHyper3DFavier3.h" -#include "ComLoi_comp_abstraite.h" +//#include "ComLoi_comp_abstraite.h" # include using namespace std; //introduces namespace std diff --git a/comportement/Hyper_elastique/IsoHyper3DOrgeas1.cc b/comportement/Hyper_elastique/IsoHyper3DOrgeas1.cc index 35f6dc4..33b03f0 100644 --- a/comportement/Hyper_elastique/IsoHyper3DOrgeas1.cc +++ b/comportement/Hyper_elastique/IsoHyper3DOrgeas1.cc @@ -29,7 +29,7 @@ // For more information, please consult: . #include "IsoHyper3DOrgeas1.h" -#include "ComLoi_comp_abstraite.h" +//#include "ComLoi_comp_abstraite.h" # include using namespace std; //introduces namespace std diff --git a/comportement/Hyper_elastique/IsoHyper3DOrgeas2.cc b/comportement/Hyper_elastique/IsoHyper3DOrgeas2.cc index 0378a40..5a43851 100644 --- a/comportement/Hyper_elastique/IsoHyper3DOrgeas2.cc +++ b/comportement/Hyper_elastique/IsoHyper3DOrgeas2.cc @@ -29,7 +29,7 @@ // For more information, please consult: . #include "IsoHyper3DOrgeas2.h" -#include "ComLoi_comp_abstraite.h" +//#include "ComLoi_comp_abstraite.h" # include using namespace std; //introduces namespace std diff --git a/comportement/Hyper_elastique/IsoHyperBulk3.cc b/comportement/Hyper_elastique/IsoHyperBulk3.cc index e11aae2..f371f36 100644 --- a/comportement/Hyper_elastique/IsoHyperBulk3.cc +++ b/comportement/Hyper_elastique/IsoHyperBulk3.cc @@ -29,7 +29,7 @@ // For more information, please consult: . #include "IsoHyperBulk3.h" -#include "ComLoi_comp_abstraite.h" +//#include "ComLoi_comp_abstraite.h" # include using namespace std; //introduces namespace std diff --git a/comportement/Hyper_elastique/IsoHyperBulk_gene.cc b/comportement/Hyper_elastique/IsoHyperBulk_gene.cc index 2ef56d8..fe81ca2 100755 --- a/comportement/Hyper_elastique/IsoHyperBulk_gene.cc +++ b/comportement/Hyper_elastique/IsoHyperBulk_gene.cc @@ -29,7 +29,7 @@ // For more information, please consult: . #include "IsoHyperBulk_gene.h" -#include "ComLoi_comp_abstraite.h" +//#include "ComLoi_comp_abstraite.h" # include using namespace std; //introduces namespace std diff --git a/comportement/Hyper_elastique/TreloarN.cc b/comportement/Hyper_elastique/TreloarN.cc index 7ebb3eb..b7869f1 100644 --- a/comportement/Hyper_elastique/TreloarN.cc +++ b/comportement/Hyper_elastique/TreloarN.cc @@ -30,7 +30,7 @@ #include "TreloarN.h" #include "MathUtil.h" -#include "ComLoi_comp_abstraite.h" +//#include "ComLoi_comp_abstraite.h" # include using namespace std; //introduces namespace std diff --git a/comportement/Loi_comp_abstraite.h b/comportement/Loi_comp_abstraite.h index 5e2d3c6..9c4546c 100644 --- a/comportement/Loi_comp_abstraite.h +++ b/comportement/Loi_comp_abstraite.h @@ -70,7 +70,7 @@ #include "EnergieMeca.h" #include "LesPtIntegMecaInterne.h" #include "Temps_CPU_HZpp.h" -#include "bloc.h" +#include "Bloc.h" class Loi_comp_abstraite : public LoiAbstraiteGeneral { diff --git a/comportement/iso_elas_hooke/Loi_iso_elas3D.cc b/comportement/iso_elas_hooke/Loi_iso_elas3D.cc index ad55d66..b952ac5 100644 --- a/comportement/iso_elas_hooke/Loi_iso_elas3D.cc +++ b/comportement/iso_elas_hooke/Loi_iso_elas3D.cc @@ -1243,7 +1243,7 @@ void Loi_iso_elas3D::Calcul_DsigmaHH_tdt (TenseurHH& ,TenseurBB& ,DdlElement & t // calcul des coefficients double coef1 = (E*nu)/((1.-2.*nu)*(1+nu)); double coef2 = E/(1.+ nu); - // calcul du deviateur des deformations + // calcul de la trace des deformations double Ieps = epsBH.Trace(); Tenseur3BH sigBH; double untiers=1./3.; diff --git a/comportement/lois_combinees/LoiCritere.h b/comportement/lois_combinees/LoiCritere.h index 97e2155..c2b03b8 100755 --- a/comportement/lois_combinees/LoiCritere.h +++ b/comportement/lois_combinees/LoiCritere.h @@ -62,7 +62,7 @@ #define LOICRITERE_H #include "Loi_comp_abstraite.h" -#include "Enum_Critere_Loi.h" +#include "Enum_Critere_loi.h" #include "LoiContraintesPlanes.h" #include "LoiContraintesPlanesDouble.h" #include "Coordonnee2.h"