dune-composites (2.5.1)

definePG.hh
1#ifndef DEFINE_PG__HH
2#define DEFINE_PG__HH
3
4namespace Dune{
5 namespace Composites
6
8 template<typename GV, typename MODEL>
9 std::vector<int> setPG(const GV& gv, const MODEL& model, int Nelem){
10 std::vector<int> elemIndx2PG(Nelem);
11 for (const auto& eit : elements(gv)){
12 int id = gv.indexSet().index(eit);
13 auto point = eit.geometry().center();
14 double layer_cnt=0, inc=0;
15 int layer_switch=0;
16 for(int i = 0; i < model.num_layers; i++){
17 layer_switch = (i+1)/2 - i/2;
18 inc = model.lay_res_h*layer_switch+(1-layer_switch)*model.lay_com_h;
19 if(point[2] > layer_cnt + 1e-06 && point[2] < layer_cnt + inc + 1.e-06){
20 //Define physical groups for square
21 //if(model.radius == 0){
22 elemIndx2PG[id] = 1000+i;
23 }
24 //}
25 /*else if(config.get<std::string>("grid_name").compare("wingbox")==0){
26 //first limb
27 double leftpoint = 0;
28 double rightpoint = model.limb_a;
29 if(point[0] >= leftpoint && point[0] < rightpoint) { elemIndx2PG[id] = 1000+i; }
30 //first radial section
31 leftpoint = rightpoint; rightpoint += model.radius;
32 if(point[0] >= leftpoint && point[0] < rightpoint) { elemIndx2PG[id] = 2000+i; }
33 //second limb
34 leftpoint = rightpoint; rightpoint += model.limb_b;
35 if(point[0] >= leftpoint && point[0] < rightpoint) { elemIndx2PG[id] = 3000+i; }
36 //second radial section
37 leftpoint = rightpoint; rightpoint += model.radius;
38 if(point[0] >= leftpoint && point[0] < rightpoint) { elemIndx2PG[id] = 4000+i; }
39 //third limb
40 leftpoint = rightpoint; rightpoint += model.limb_a;
41 if(point[0] >= leftpoint && point[0] < rightpoint) { elemIndx2PG[id] = 5000+i; }
42 //third radial section
43 leftpoint = rightpoint; rightpoint += model.radius;
44 if(point[0] >= leftpoint && point[0] < rightpoint) { elemIndx2PG[id] = 6000+i; }
45 //fourth limb
46 leftpoint = rightpoint; rightpoint += model.limb_b;
47 if(point[0] >= leftpoint && point[0] < rightpoint) { elemIndx2PG[id] = 7000+i; }
48 //fourth radial section
49 leftpoint = rightpoint; rightpoint += model.radius;
50 if(point[0] >= leftpoint && point[0] < rightpoint) { elemIndx2PG[id] = 8000+i; }
51 if(config.get<int>("mpc",0) ){
52 for(int c = 0; c < eit.geometry().corners(); c++){
53 auto corner = eit.geometry().corner(c);
54 if(corner[1] > model.Y - 10){
55 elemIndx2PG[id] = 9000+i;
56 }
57 }
58 }
59
60 }
61 //Define physical groups for lshape
62 else{
63 if(model.num_limbs == 2){
64 if(point[0] < model.limb+ 1e-06) { elemIndx2PG[id] = 1000+i; }
65 if(point[0] > model.limb+ 1e-06 && point[0] < model.limb+model.radius+ 1e-06) { elemIndx2PG[id] = 2000+i; }
66 if(point[0] >= model.limb+model.radius) { elemIndx2PG[id] = 3000+i; }
67 if(config.get<int>("mpc",0)){
68 for(int c = 0; c < eit.geometry().corners(); c++){
69 auto corner = eit.geometry().corner(c);
70 if(corner[0] > model.radius+model.num_limbs*model.limb - 1e-6){
71 elemIndx2PG[id] = 4000+i;
72 }
73 }
74 }
75 if(config.get<int>("edge_treatment",0)){
76 if(point[1] < config.get<double>("edge_width",0) || point[1] > model.Y-config.get<double>("edge_width")){
77 elemIndx2PG[id] = 5000; //resin at edges
78 }
79 }
80 }
81 else{
82 if(point[0] < model.radius+ 1e-06) { elemIndx2PG[id] = 1000+i; }
83 if(point[0] >= model.radius+ 1e-06) { elemIndx2PG[id] = 2000+i; }
84 if(config.get<int>("mpc",0)){
85 for(int c = 0; c < eit.geometry().corners(); c++){
86 auto corner = eit.geometry().corner(c);
87 if(corner[0] > model.radius+model.limb - 1e-6){
88 elemIndx2PG[id] = 3000+i;
89 }
90 }
91 }
92 }
93 }
94 }*/
95 layer_cnt += inc;
96 }
97 }
98 return elemIndx2PG;
99}
100
101}
102}
103
104#endif
Creative Commons License   |  Legal Statements / Impressum  |  Hosted by TU Dresden & Uni Heidelberg  |  generated with Hugo v0.111.3 (Sep 5, 22:35, 2025)