MAGiC  V5.0
Mailleurs Automatiques de Géometries intégrés à la Cao
mstruct_analyse_energie_hill.cpp
Aller à la documentation de ce fichier.
1 //####//------------------------------------------------------------
2 //####//------------------------------------------------------------
3 //####// MAGiC
4 //####// Jean Christophe Cuilliere et Vincent FRANCOIS
5 //####// Departement de Genie Mecanique - UQTR
6 //####//------------------------------------------------------------
7 //####// MAGIC est un projet de recherche de l equipe ERICCA
8 //####// du departement de genie mecanique de l Universite du Quebec a Trois Rivieres
9 //####// http://www.uqtr.ca/ericca
10 //####// http://www.uqtr.ca/
11 //####//------------------------------------------------------------
12 //####//------------------------------------------------------------
13 //####//
14 //####// mstruct_analyse_energie_hill.cpp
15 //####//
16 //####//------------------------------------------------------------
17 //####//------------------------------------------------------------
18 //####// COPYRIGHT 2000-2024
19 //####// jeu 13 jun 2024 11:58:57 EDT
20 //####//------------------------------------------------------------
21 //####//------------------------------------------------------------
23 #include "mstruct_definition.h"
24 #include "ot_boite_3d.h"
25 #include "fem_solution.h"
26 #include "mstruct_ves.h"
27 #include "mg_gestionnaire.h"
28 #include "mg_element_topologique.h"
29 #include <math.h>
30 #include <vector>
31 
33 {
35  m_id_fem_sigma=-1;
36 }
37 
38 MSTRUCT_ANALYSE_ENERGIE_HILL::MSTRUCT_ANALYSE_ENERGIE_HILL(MSTRUCT_VES* ves, std::string identifiant, long id_fem_epsilon, long id_fem_sigma,BOITE_3D* boite_3d):MSTRUCT_ANALYSE(ves,identifiant)
39 {
40  if(boite_3d==NULL) change_boite_analyse(ves->get_boite3d_ves());
41  m_id_fem_epsilon=id_fem_epsilon;
42  m_id_fem_sigma=id_fem_sigma;
43 }
44 
45 
47 {
50 }
51 
53 {
54 }
55 
57 {
58  return m_energie;
59 }
60 
61 void MSTRUCT_ANALYSE_ENERGIE_HILL::exporter(std::ofstream& ofstrm, long i, bool avec_entete, bool avec_graph, char* prefix_graph)
62 {
63  if(avec_entete) ofstrm << "#(1) Energie(2)" << std::endl;
64  ofstrm << i << " "
65  << m_energie << " " << std::endl;
66 }
67 
69 {
71 }
72 
74 {
75 
76  double volume_total=0.0;
77  m_energie=0.0;
80 
81  LISTE_FEM_ELEMENT3::iterator it;
82  long k=0;
83  FEM_MAILLAGE* fem_mail = fem_sol_epsilon->get_maillage();
84  int nb_champ = fem_sol_epsilon->get_nb_champ();
85  for(FEM_ELEMENT3*ele=fem_mail->get_premier_element3(it);ele!=NULL;ele=fem_mail->get_suivant_element3(it))
86  {
87  BOITE_3D boite_ele=ele->get_boite_3D();
88  if(m_boite_analyse!=NULL)
89  if(!m_boite_analyse->contient(boite_ele.get_xcentre(),boite_ele.get_ycentre(),boite_ele.get_zcentre()))
90  {
91  k++;
92  continue;
93  }
94  double epsilon[6];
95  double sigma[6];
96  double volume=0;
97  for(int i=0;i<nb_champ;i++)
98  {
99  double unite=fem_mail->get_mg_geometrie()->get_valeur_unite();
100  double val_eps=0.;
101  double val_sigma=0.;
102  volume=0;
103  int nbgauss=fem_sol_epsilon->get_nb_gauss(k);
104  for (int r=0;r<nbgauss;r++)
105  {
106  int degre=ele->get_degre_gauss(nbgauss);
107  double w;
108  double uvw[3];
109  ele->get_pt_gauss(degre,r,w,uvw);
110  double jac[9];
111  double det=ele->get_jacobien(jac,uvw,unite);
112  double valeur_eps=fem_sol_epsilon->lire(k,i,0,r)*fabs(det);
113  double valeur_sigma=fem_sol_sigma->lire(k,i,0,r)*fabs(det);
114  val_eps=val_eps+w*valeur_eps;
115  val_sigma=val_sigma+w*valeur_sigma;
116  volume=volume+w*fabs(det);
117  }
118  epsilon[i]=val_eps;
119  sigma[i]=val_sigma;
120  }
121  k++;
122 
123 
124  double energie=0.0;
125  energie+=epsilon[0]*sigma[0];
126  energie+=epsilon[1]*sigma[1];
127  energie+=epsilon[2]*sigma[2];
128  energie+=2*epsilon[3]*sigma[3];
129  energie+=2*epsilon[4]*sigma[4];
130  energie+=2*epsilon[5]*sigma[5];
131  energie/=volume;
132 
133  m_energie+=energie;
134  volume_total+=volume;
135  }
136  m_energie=m_energie/volume_total;
137 }
138 
139 void MSTRUCT_ANALYSE_ENERGIE_HILL::enregistrer(std::ofstream& ofstrm)
140 {
141  long type_analyse=get_type();
142  ofstrm.write((char*)&type_analyse,sizeof(long));
144  ofstrm.write((char*)&m_energie,sizeof(double));
145 }
146 
147 void MSTRUCT_ANALYSE_ENERGIE_HILL::ouvrir(std::ifstream& ifstrm)
148 {
149  MSTRUCT_ANALYSE::ouvrir(ifstrm);
150  ifstrm.read((char*)&m_energie,sizeof(double));
151 }
152 
FEM_SOLUTION::get_nb_champ
int get_nb_champ(void)
Definition: fem_solution.cpp:467
FEM_SOLUTION
Definition: fem_solution.h:40
MSTRUCT_ANALYSE_ENERGIE_HILL::m_id_fem_epsilon
long m_id_fem_epsilon
Definition: mstruct_analyse_energie_hill.h:42
FEM_MAILLAGE::get_suivant_element3
FEM_ELEMENT3 * get_suivant_element3(LISTE_FEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:680
MSTRUCT_ANALYSE_ENERGIE_HILL::get_type
virtual long get_type(void)
Definition: mstruct_analyse_energie_hill.cpp:68
MSTRUCT_ANALYSE_ENERGIE_HILL::ouvrir
virtual void ouvrir(std::ifstream &ifstrm)
Definition: mstruct_analyse_energie_hill.cpp:147
mstruct_ves.h
fem_solution.h
mg_gestionnaire.h
MSTRUCT_ANALYSE::enregistrer
virtual void enregistrer(std::ofstream &ofstrm)
Definition: mstruct_analyse.cpp:100
MSTRUCT_ANALYSE::m_boite_analyse
BOITE_3D * m_boite_analyse
Definition: mstruct_analyse.h:53
robustPredicates::epsilon
static REAL epsilon
Definition: robustpredicates.cc:371
BOITE_3D::get_xcentre
double get_xcentre(void)
Definition: ot_boite_3d.cpp:156
MSTRUCT_ANALYSE_ENERGIE_HILL::m_energie
double m_energie
Definition: mstruct_analyse_energie_hill.h:41
MSTRUCT_ANALYSE_ENERGIE_HILL::get_energie
double get_energie(void)
Definition: mstruct_analyse_energie_hill.cpp:56
FEM_ELEMENT3
Definition: fem_element3.h:34
FEM_MAILLAGE::get_mg_geometrie
MG_GEOMETRIE * get_mg_geometrie(void)
Definition: fem_maillage.cpp:88
MSTRUCT::ENERGIE_HILL
@ ENERGIE_HILL
Definition: mstruct_definition.h:67
FEM_SOLUTION::get_maillage
FEM_MAILLAGE * get_maillage(void)
Definition: fem_solution.cpp:472
MSTRUCT_ANALYSE_ENERGIE_HILL::executer
virtual void executer(void)
Definition: mstruct_analyse_energie_hill.cpp:73
MSTRUCT_ANALYSE_ENERGIE_HILL::MSTRUCT_ANALYSE_ENERGIE_HILL
MSTRUCT_ANALYSE_ENERGIE_HILL(void)
Definition: mstruct_analyse_energie_hill.cpp:32
MG_GESTIONNAIRE::get_fem_solutionid
FEM_SOLUTION * get_fem_solutionid(unsigned long num)
Definition: mg_gestionnaire.cpp:918
BOITE_3D::get_zcentre
double get_zcentre(void)
Definition: ot_boite_3d.cpp:166
MSTRUCT_ANALYSE::m_ves
MSTRUCT_VES * m_ves
Definition: mstruct_analyse.h:55
MSTRUCT_VES::get_boite3d_ves
virtual BOITE_3D get_boite3d_ves(void)
Definition: mstruct_ves.cpp:197
mstruct_analyse_energie_hill.h
MSTRUCT_VES::get_mg_gestionnaire
virtual MG_GESTIONNAIRE * get_mg_gestionnaire(void)
Definition: mstruct_ves.cpp:130
MSTRUCT_ANALYSE_ENERGIE_HILL
Definition: mstruct_analyse_energie_hill.h:27
FEM_MAILLAGE
Definition: fem_maillage.h:66
MSTRUCT_ANALYSE
Definition: mstruct_analyse.h:30
BOITE_3D::get_ycentre
double get_ycentre(void)
Definition: ot_boite_3d.cpp:161
MSTRUCT_ANALYSE_ENERGIE_HILL::~MSTRUCT_ANALYSE_ENERGIE_HILL
~MSTRUCT_ANALYSE_ENERGIE_HILL(void)
Definition: mstruct_analyse_energie_hill.cpp:52
FEM_SOLUTION::lire
double lire(int i, int j, int coord=0, int num_no=0)
Definition: fem_solution.cpp:398
MSTRUCT_ANALYSE_ENERGIE_HILL::exporter
void exporter(std::ofstream &ofstrm, long i, bool avec_entete=false, bool avec_graph=false, char *prefix_graph=(char *)"")
Definition: mstruct_analyse_energie_hill.cpp:61
mstruct_definition.h
MSTRUCT_VES
Definition: mstruct_ves.h:45
MSTRUCT_ANALYSE_ENERGIE_HILL::m_id_fem_sigma
long m_id_fem_sigma
Definition: mstruct_analyse_energie_hill.h:43
BOITE_3D
Definition: ot_boite_3d.h:27
ot_boite_3d.h
mg_element_topologique.h
MSTRUCT_ANALYSE::change_boite_analyse
virtual void change_boite_analyse(BOITE_3D boite_3d)
Definition: mstruct_analyse.cpp:79
MG_GEOMETRIE::get_valeur_unite
double get_valeur_unite(void)
Definition: mg_geometrie.cpp:2652
FEM_SOLUTION::get_nb_gauss
int get_nb_gauss(int i)
Definition: fem_solution.cpp:443
BOITE_3D::contient
int contient(double x, double y, double z)
Definition: ot_boite_3d.cpp:270
MSTRUCT_ANALYSE::ouvrir
virtual void ouvrir(std::ifstream &ifstrm)
Definition: mstruct_analyse.cpp:131
MSTRUCT_ANALYSE_ENERGIE_HILL::enregistrer
virtual void enregistrer(std::ofstream &ofstrm)
Definition: mstruct_analyse_energie_hill.cpp:139
FEM_MAILLAGE::get_premier_element3
FEM_ELEMENT3 * get_premier_element3(LISTE_FEM_ELEMENT3::iterator &it)
Definition: fem_maillage.cpp:672