ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/REPOS_ERICCA/poly_occ/src/polycristal.cpp
Revision: 979
Committed: Thu Oct 18 23:40:32 2018 UTC (6 years, 6 months ago) by francois
File size: 2770 byte(s)
Log Message:
creation de polycristaux avec OCC

File Contents

# Content
1 #include "polycristal.h"
2 #include "poly_voro.h"
3 #include "poly_build_occ.h"
4 #include "poly_point.h"
5
6 #include <stdio.h>
7 #include <iostream>
8 #include <random>
9 #include <vector>
10
11 Polycristal::Polycristal(char* fichier)
12 {
13 FILE *input = fopen(fichier, "rt");
14 char chaine[500];
15 fgets(chaine, 500, input);
16 int nb_point, nTetra;
17 sscanf(chaine,"%d %d", &nb_point, &nTetra);
18
19 std::vector<Poly_Point*> list_points;
20
21 for (int i=0; i<nb_point; i++)
22 {
23 int num;
24 double x, y, z;
25 fgets(chaine,500,input);
26 sscanf(chaine, "%d %lf %lf %lf", &num, &x, &y, &z);
27 Poly_Point* pnt_xyz = new Poly_Point(x, y, z);
28 list_points.push_back(pnt_xyz);
29 }
30 fclose(input);
31
32 Poly_Voro* voro = new Poly_Voro(list_points);
33 voro->fusion_noeuds();
34 Poly_Build_OCC build_occ(voro);
35 }
36
37
38 Polycristal::Polycristal(int nbParticules)
39 {
40 std::vector<Poly_Point*> list_points = random_particules(nbParticules);
41 Poly_Voro* voro = new Poly_Voro(list_points);
42 voro->fusion_noeuds();
43 Poly_Build_OCC build_occ(voro);
44 }
45
46 Polycristal::~Polycristal()
47 {
48 }
49
50 std::vector<Poly_Point*> Polycristal::random_particules(int nbParticules)
51 {
52 std::vector<Poly_Point*> list_points;
53
54 // Géométrie du conteneur rectangulaire
55 double x_min= 0.0, x_max= 1.0;
56 double y_min= 0.0, y_max= 1.0;
57 double z_min= 0.0, z_max= 1.0;
58
59 Poly_Point* pnt_1 = new Poly_Point(x_min, y_min, z_min);
60 Poly_Point* pnt_2 = new Poly_Point(x_min, y_max, z_min);
61 Poly_Point* pnt_3 = new Poly_Point(x_max, y_max, z_min);
62 Poly_Point* pnt_4 = new Poly_Point(x_max, y_min, z_min);
63 Poly_Point* pnt_5 = new Poly_Point(x_min, y_min, z_max);
64 Poly_Point* pnt_6 = new Poly_Point(x_min, y_max, z_max);
65 Poly_Point* pnt_7 = new Poly_Point(x_max, y_max, z_max);
66 Poly_Point* pnt_8 = new Poly_Point(x_max, y_min, z_max);
67
68 list_points.push_back(pnt_1);
69 list_points.push_back(pnt_2);
70 list_points.push_back(pnt_3);
71 list_points.push_back(pnt_4);
72 list_points.push_back(pnt_5);
73 list_points.push_back(pnt_6);
74 list_points.push_back(pnt_7);
75 list_points.push_back(pnt_8);
76
77 // Ajoute des particules le container avec une distribution aléatoire uniforme
78 std::random_device rd; // random number engine
79 std::mt19937 gen(rd());
80 std::uniform_real_distribution<> dis_x(x_min, x_max);
81 std::uniform_real_distribution<> dis_y(y_min, y_max);
82 std::uniform_real_distribution<> dis_z(z_min, z_max);
83
84 for(int i=0; i < nbParticules; i++) {
85 double x = dis_x(gen) ;
86 double y = dis_y(gen) ;
87 double z = dis_z(gen) ;
88 Poly_Point* pnt_xyz = new Poly_Point(x, y, z);
89 list_points.push_back(pnt_xyz);
90 }
91 return list_points;
92 }
93
94

Properties

Name Value
svn:executable