VM2D 1.14
Vortex methods for 2D flows simulation
Loading...
Searching...
No Matches
gammaCirc.h File Reference

Go to the source code of this file.

Macros

#define radiuses   { 0.5, 1.0, 1.5, 2.0, 2.5 }
 
#define scales   { 1.0 }
 

Functions

 if (currentStep % 1==0)
 

Macro Definition Documentation

◆ radiuses

#define radiuses   { 0.5, 1.0, 1.5, 2.0, 2.5 }

Definition at line 15 of file gammaCirc.h.

◆ scales

#define scales   { 1.0 }

Definition at line 19 of file gammaCirc.h.

Function Documentation

◆ if()

if ( currentStep %  1 = = 0)

Definition at line 22 of file gammaCirc.h.

23{
24
25 std::vector<double> rad = radiuses;
26 std::vector<double> scale = scales;
27
28
29 std::string circFileName = getPassport().dir + "circ";
30
31
32 if (currentStep == 0)
33 {
34 std::ofstream circFile(circFileName.c_str());
35
36 VMlib::PrintLogoToTextFile(circFile, circFileName, "Circulations along the circles of fixed radius");
37
38 std::stringstream ssCirc;
39 ssCirc << "step time scale";
40 for (auto r : rad)
41 ssCirc << " R=" << r;
42
43 VMlib::PrintHeaderToTextFile(circFile, ssCirc.str());
44
45 circFile << std::endl;
46 circFile.close();
47 circFile.clear();
48 }
49
50 for (int c = 0; c < scale.size(); ++c)
51 {
52 std::vector<double> circRad(rad.size(), 0.0);
53
54 int nPts = 50; //50
55
56 double delta = 6.0; //6.0
57
58 double R = 0.0;
59 double L = 0.0;
60 double epsAst = 0.0;
61 double gam = 0.0;
62 double curCirc = 0.0;
63
64 for (size_t i = 0; i < rad.size(); ++i)
65 {
66 R = rad[i];
67 curCirc = 0.0;
68
69#pragma omp parallel for default(none) private(L,gam,epsAst) shared(R,nPts,delta,c,scale) reduction(+:curCirc) schedule(dynamic,100)
70 for (int j = 0; j < (int)wake->vtx.size(); ++j)
71 {
72 L = wake->vtx[j].r().length();
73 gam = wake->vtx[j].g();
74 epsAst = scale[c] * velocity->wakeVortexesParams.epsastWake[j];
75
76 if (R - L > delta * epsAst)
77 curCirc += gam;
78 else if (R - L > -delta * epsAst)
79 {
80 double h = fabs(R - L);
81 if (h / R > 1e-3)
82 {
83 double phi = atan(h / sqrt(delta * delta * epsAst * epsAst - h * h));
84 double deltaPhi = (PI - 2.0 * phi) / nPts;
85
86 double addCirc = 0.0;
87
88 auto func = [h, epsAst, delta](double phi) -> double
89 {
90 return (IDPI / epsAst) * (exp(h / (epsAst * sin(phi))) * (epsAst - h / sin(phi)) - exp(-delta) * (1 + delta));
91 };
92
93 for (int s = 0; s < nPts; ++s)
94 {
95 double valAngle = -phi - deltaPhi * (s + 0.5);
96
97 addCirc += func(valAngle) * deltaPhi;
98 }
99 addCirc *= gam;
100
101 if (L > R)
102 curCirc += addCirc;
103 else
104 curCirc += (gam - addCirc);
105 }
106 else
107 curCirc += 0.5 * gam;
108 }//else
109 }//for j
110
111 circRad[i] = curCirc;
112 }//for i
113
114
115 std::ofstream circFile(circFileName.c_str(), std::ios::app);
116
117 circFile << currentStep << " " << getCurrentTime() << " " << scale[c];
118
119 for (auto gamma : circRad)
120 circFile << " " << gamma;
121 circFile << std::endl;
122
123
124 circFile.close();
125 circFile.clear();
126
127 }// for c
128
129}
const double PI
Число .
Definition defs.h:82
const double IDPI
Число .
Definition defs.h:85
#define radiuses
Definition gammaCirc.h:15
#define scales
Definition gammaCirc.h:19
void PrintHeaderToTextFile(std::ofstream &str, const std::string &header)
Формирование подзаголовка в текстовом файле вывода программы VM2D/VM3D.
Definition defs.cpp:175
void PrintLogoToTextFile(std::ofstream &str, const std::string &fileName, const std::string &descr)
Формирование заголовка файла программы VM2D/VM3D.
Definition defs.cpp:139
Here is the call graph for this function: