1 |
chebbi |
463 |
#include <stdio.h> |
2 |
|
|
#include <math.h> |
3 |
|
|
#include "mg_gestionnaire.h" |
4 |
|
|
#include "mailleur3d_structure.h" |
5 |
|
|
#include "mg_maillage.h" |
6 |
|
|
#include "fem_maillage.h" |
7 |
|
|
#include "fem_hexa20.h" |
8 |
|
|
#include "mg_geometrie.h" |
9 |
|
|
#include <vector> |
10 |
|
|
|
11 |
|
|
|
12 |
|
|
MAILLEUR3D_STRUCTURE::MAILLEUR3D_STRUCTURE(double xmintmp, double xmaxtmp, double ymintmp, double ymaxtmp, double zmintmp, double zmaxtmp |
13 |
francois |
494 |
, int ntmp, int mtmp, int ktmp,MG_GESTIONNAIRE*gesttmp):MAILLEUR(false), |
14 |
chebbi |
463 |
xmin(xmintmp),xmax(xmaxtmp),ymin(ymintmp),ymax(ymaxtmp),zmin(zmintmp),zmax(zmaxtmp),n(ntmp),m(mtmp),k(ktmp),gest(gesttmp) |
15 |
|
|
{ |
16 |
|
|
} |
17 |
|
|
|
18 |
|
|
MAILLEUR3D_STRUCTURE::MAILLEUR3D_STRUCTURE( MAILLEUR3D_STRUCTURE& mdd):MAILLEUR(mdd), |
19 |
|
|
xmin(mdd.xmin),xmax(mdd.xmax),ymin(mdd.ymin),ymax(mdd.ymax),zmin(mdd.zmin),zmax(mdd.zmax),n(mdd.n),m(mdd.m),k(mdd.k),gest(mdd.gest) |
20 |
|
|
{ |
21 |
|
|
} |
22 |
|
|
|
23 |
|
|
MAILLEUR3D_STRUCTURE::~MAILLEUR3D_STRUCTURE() |
24 |
|
|
{ |
25 |
|
|
} |
26 |
|
|
|
27 |
francois |
551 |
void MAILLEUR3D_STRUCTURE::maille(MG_GROUPE_TOPOLOGIQUE* mggt) |
28 |
chebbi |
463 |
{ |
29 |
|
|
affiche((char*)"Création d'un maillage MG structuré"); |
30 |
|
|
double intx, inty, intz; |
31 |
|
|
intx=fabs(xmax-xmin)/n; |
32 |
|
|
inty=fabs(ymax-ymin)/m; |
33 |
|
|
intz=fabs(zmax-zmin)/k; |
34 |
|
|
MG_GEOMETRIE* geo= NULL; |
35 |
|
|
MG_MAILLAGE* mai=new MG_MAILLAGE(NULL); |
36 |
|
|
gest->ajouter_mg_maillage(mai); |
37 |
|
|
std::vector<MG_NOEUD*> vecnod; |
38 |
|
|
for (int l=0; l<=k ;l++) |
39 |
|
|
{ |
40 |
|
|
for (int j=0; j<=m;j++) |
41 |
|
|
{ |
42 |
|
|
for (int i=0; i<=n;i++) |
43 |
|
|
{ |
44 |
|
|
double z=zmin+(l*intz); |
45 |
|
|
double y=ymin+(j*inty); |
46 |
|
|
double x=xmin+(i*intx); |
47 |
|
|
MG_NOEUD* nou=mai->ajouter_mg_noeud(NULL,x,y,z,MAILLEUR_AUTO); |
48 |
|
|
vecnod.push_back(nou); |
49 |
|
|
} |
50 |
|
|
} |
51 |
|
|
} |
52 |
|
|
for(int l=0; l<k;l++) |
53 |
|
|
{ |
54 |
|
|
for(int j=0; j<m;j++) |
55 |
|
|
{ |
56 |
|
|
for(int i=0; i<n;i++) |
57 |
|
|
{ |
58 |
|
|
MG_NOEUD* nod1=vecnod[i+((n+1)*j)+(l*(m+1)*(n+1))]; |
59 |
|
|
MG_NOEUD* nod2=vecnod[(i+1)+((n+1)*j)+(l*(m+1)*(n+1))]; |
60 |
|
|
MG_NOEUD* nod3=vecnod[(i+1)+(n+1)*(j+1)+(l*(m+1)*(n+1))]; |
61 |
|
|
MG_NOEUD* nod4=vecnod[i+(n+1)*(j+1)+(l*(m+1)*(n+1))]; |
62 |
|
|
MG_NOEUD* nod5=vecnod[i+((n+1)*j)+((l+1)*(m+1)*(n+1))]; |
63 |
|
|
MG_NOEUD* nod6=vecnod[(i+1)+((n+1)*j)+((l+1)*(m+1)*(n+1))]; |
64 |
|
|
MG_NOEUD* nod7=vecnod[(i+1)+(n+1)*(j+1)+((l+1)*(m+1)*(n+1))]; |
65 |
|
|
MG_NOEUD* nod8=vecnod[i+(n+1)*(j+1)+((l+1)*(m+1)*(n+1))]; |
66 |
|
|
MG_HEXA *hexa=mai->ajouter_mg_hexa(NULL,nod1,nod2,nod3,nod4,nod5,nod6,nod7,nod8,MAILLEUR_AUTO); |
67 |
|
|
} |
68 |
|
|
} |
69 |
|
|
} |
70 |
francois |
465 |
BOITE_3D b(xmin,ymin,zmin,xmax,ymax,zmax); |
71 |
|
|
mai->change_param_structure(b,n,m,k); |
72 |
chebbi |
463 |
affiche((char*)"Création d'un maillage FEM structuré"); |
73 |
|
|
FEM_MAILLAGE* fem = new FEM_MAILLAGE(geo, mai,1); |
74 |
|
|
gest->ajouter_fem_maillage(fem); |
75 |
|
|
fem->construire(); |
76 |
|
|
} |