[cpp-qt] dd
Viewer
*** This page was generated with the meta tag "noindex, nofollow". This happened because you selected this option before saving or the system detected it as spam. This means that this page will never get into the search engines and the search bot will not crawl it. There is nothing to worry about, you can still share it with anyone.
- #include <cmath>
- #include <fstream>
- #include <iostream>
- #include <vector>
- #include <set>
- #include <algorithm>
- #include <functional>
- #include "iomanip"
- using namespace std;
- //узел
- struct Node
- {
- double r, z; // координаты узла
- int globalNumber; // глобальный номер узла
- };
- // расчетная область
- struct Range
- {
- public:
- double diffusionCoefficient; //коэф. диффизии
- double gamma; // гамма коэф.
- int rangeNumber;
- double GetValueF(Node node, double t)
- {
- switch (rangeNumber)
- {
- case 0:
- return 20;
- case 1:
- return 24 * node.z + 16;
- case 2:
- return 24 * node.r + 16 - ((18 * t) / node.r);
- case 3:
- return (-36) * t + 24 * node.z * node.z + 16;
- case 4:
- return (-72) * t + 24 * node.r * node.r + 16;
- case 5:
- return 40 * t;
- case 6:
- return t * (48 * node.z + 32);
- case 7:
- return t * (48 * node.r + 32) - ((18 * t * t) / node.r);
- case 8:
- return t * (48 * node.z * node.z + 32) - 12 * t * t;
- case 9:
- return t * (48 * node.r * node.r + 32) - 24 * t * t;
- default:
- break;
- }
- }
- };
- struct Triangle
- {
- Node node[3]; // локальные узлы
- Range range; // расченая области
- vector<vector<double>> matrixMass; //матрица масс
- vector<vector<double>> matrixStiffness; // матрица жесткости
- vector<vector<double>> localMatrix; // локальная матрица
- vector<double> localVector; // локальный вектор
- Triangle()
- {
- vector<vector<double>> matrixMass(3, vector<double>(3)); //матрица масс
- vector<vector<double>> matrixStiffness(3, vector<double>(3)); // матрица жесткости
- vector<vector<double>> localMatrix(3, vector<double>(3)); // локальная матрица
- vector<double> localVector(3); // локальный вектор
- this->matrixMass = matrixMass;
- this->matrixStiffness = matrixStiffness;
- this->localMatrix = localMatrix;
- this->localVector = localVector;
- }
- };
- // краевые уловия 1 рода
- struct BoundaryCondition1
- {
- public:
- Node node; // номер узла
- int formulaNumber; // номер формулы краевого уловия
- double GetValue(double t)
- {
- switch (formulaNumber)
- {
- case 0:
- return 5 * t;
- case 1:
- return 6 * t * node.z + 4 * t;
- case 2:
- return 6 * t * node.r + 4 * t;
- case 3:
- return 6 * t * node.z * node.z + 4 * t;
- case 4:
- return 6 * t * node.r * node.r + 4 * t;
- case 5:
- return 5 * t * t;
- case 6:
- return 6 * t * t * node.z + 4 * t * t;
- case 7:
- return 6 * t * t * node.r + 4 * t * t;
- case 8:
- return 6 * t * t * node.z * node.z + 4 * t * t;
- case 9:
- return 6 * t * t * node.r * node.r + 4 * t * t;
- default:
- break;
- }
- }
- };
- // краевые уловия 2 рода
- struct BoundaryCondition2
- {
- public:
- Node node[2]; // номера узлов грани
- int formulaNumber; // номер формулы краевого уловия
- double GetValue(double t)
- {
- return b[formulaNumber](node, t);
- }
- private:
- vector<function<double(Node node[2], double t)>> b = { [](Node node[2], double t) { return 21; } };
- };
- struct Matrix
- {
- vector<int> ig;
- vector<int> jg;
- vector<double> di;
- vector<double> gg;
- };
- void GenerationMatrixMasStifVec(Triangle& tr, double t)
- {
- double detD = (tr.node[1].r - tr.node[0].r) * (tr.node[2].z - tr.node[0].z) - (tr.node[2].r - tr.node[0].r) * (tr.node[1].z - tr.node[0].z);
- double alphaMatrix[3][2] =
- {
- {(tr.node[1].z - tr.node[2].z) / detD, (tr.node[2].r - tr.node[1].r) / detD},
- {(tr.node[2].z - tr.node[0].z) / detD, (tr.node[0].r - tr.node[2].r) / detD},
- {(tr.node[0].z - tr.node[1].z) / detD, (tr.node[1].r - tr.node[0].r) / detD}
- };
- detD = abs(detD);
- double r1[3] =
- {
- 2 * tr.node[0].r + 2 * tr.node[1].r + tr.node[2].r,
- 2 * tr.node[2].r + 2 * tr.node[0].r + tr.node[1].r,
- 2 * tr.node[2].r + 2 * tr.node[1].r + tr.node[0].r
- };
- double r2[3] =
- {
- 3 * tr.node[0].r + tr.node[1].r + tr.node[2].r,
- 3 * tr.node[1].r + tr.node[0].r + tr.node[2].r,
- 3 * tr.node[2].r + tr.node[1].r + tr.node[0].r
- };
- double temp = (tr.range.diffusionCoefficient * detD * (tr.node[0].r + tr.node[1].r + tr.node[2].r)) / 6.0;
- double temp1 = (tr.range.gamma * detD) / 120.0;
- double temp2 = (tr.range.gamma * detD) / 60.0;
- double temp3 = detD / 120.0;
- double f[3]
- {
- tr.range.GetValueF(tr.node[0], t),
- tr.range.GetValueF(tr.node[1], t),
- tr.range.GetValueF(tr.node[2], t)
- };
- tr.localVector[0] = (2 * r2[0] * f[0] + r1[0] * f[1] + r1[1] * f[2]) * temp3;
- tr.localVector[1] = (2 * r2[1] * f[1] + r1[0] * f[0] + r1[2] * f[2]) * temp3;
- tr.localVector[2] = (2 * r2[2] * f[2] + r1[1] * f[0] + r1[2] * f[1]) * temp3;
- for (int i = 0; i < 3; i++)
- {
- tr.matrixStiffness[i][i] = temp * (alphaMatrix[i][0] * alphaMatrix[i][0] + alphaMatrix[i][1] * alphaMatrix[i][1]);
- tr.matrixMass[i][i] = temp2 * r2[i];
- for (int j = 0; j < i; j++)
- {
- tr.matrixStiffness[i][j] = temp * (alphaMatrix[i][0] * alphaMatrix[j][0] + alphaMatrix[i][1] * alphaMatrix[j][1]);
- tr.matrixStiffness[j][i] = tr.matrixStiffness[i][j];
- tr.matrixMass[i][j] = temp1 * r1[i + j - 1];
- tr.matrixMass[j][i] = tr.matrixMass[i][j];
- }
- }
- }
- Matrix FormingPortraitMatrix()
- {
- Matrix m;
- ifstream fin;
- fin.open("Portrait.txt");
- int n;
- fin >> n;
- m.ig.resize(n + 1), m.ig.shrink_to_fit();
- for (int i = 0; i < n + 1; i++)
- fin >> m.ig[i];
- m.jg.resize(m.ig[n]), m.jg.shrink_to_fit();
- for (int i = 0; i < m.ig[n]; i++)
- fin >> m.jg[i];
- m.di.resize(n), m.di.shrink_to_fit();
- m.gg.resize(m.ig[n]), m.gg.shrink_to_fit();
- fin.close();
- return m;
- }
- Matrix Portrait(vector<Triangle>& triangles, int n)
- {
- vector<set<int>> connection(n);
- for (auto& t : triangles)
- {
- for (int i = 1; i < 3; i++)
- for (int j = 0; j < i; j++)
- {
- auto a = t.node[i];
- auto b = t.node[j];
- if (a.globalNumber < b.globalNumber) swap(a, b);
- connection[a.globalNumber].insert(b.globalNumber);
- }
- }
- Matrix globalMatrix;
- globalMatrix.ig.resize(n + 1);
- int* IA = &globalMatrix.ig[0];
- IA[0] = IA[1] = 0;
- for (int i = 2; i <= n; i++)
- {
- int col = IA[i - 1];
- IA[i] = col + connection[i - 1].size();
- }
- globalMatrix.jg.resize(IA[n]);
- int* JA = &globalMatrix.jg[0];
- for (int i = 1, k = 0; i < n; i++)
- for (int j : connection[i])
- {
- JA[k] = j;
- k++;
- }
- globalMatrix.di.resize(n);
- globalMatrix.gg.resize(IA[n]);
- return globalMatrix;
- }
- void EntryBoundaryCondition1(vector<BoundaryCondition1>& boundaryCondition1, Matrix& m, vector<double>& b, double t)
- {
- double maxElement1 = *max_element(m.di.begin(), m.di.end());
- double maxElement2 = *max_element(m.gg.begin(), m.gg.end());
- double max;
- (maxElement1 < maxElement2) ? max = maxElement2 * 1.0E+30 : max = maxElement1 * 1.0E+30;
- for (int i = 0; i < boundaryCondition1.size(); i++)
- {
- m.di[boundaryCondition1[i].node.globalNumber] = max;
- b[boundaryCondition1[i].node.globalNumber] = max * boundaryCondition1[i].GetValue(t);
- }
- }
- void EntryBoundaryCondition2(vector<BoundaryCondition2>& boundaryCondition2, vector<double>& b, double t)
- {
- double h;
- for (int i = 0; i < boundaryCondition2.size(); i++)
- {
- h = sqrt((boundaryCondition2[i].node[0].r - boundaryCondition2[i].node[1].r) * (boundaryCondition2[i].node[0].r - boundaryCondition2[i].node[1].r)
- + (boundaryCondition2[i].node[0].z - boundaryCondition2[i].node[1].z) * (boundaryCondition2[i].node[0].z - boundaryCondition2[i].node[1].z));
- b[boundaryCondition2[i].node[0].globalNumber] += (boundaryCondition2[i].GetValue(t) * h * (2 * boundaryCondition2[i].node[0].r + boundaryCondition2[i].node[1].r)) / 6.0;
- b[boundaryCondition2[i].node[1].globalNumber] += (boundaryCondition2[i].GetValue(t) * h * (2 * boundaryCondition2[i].node[1].r + boundaryCondition2[i].node[0].r)) / 6.0;
- }
- }
- void GenerationGlobalMatrixVector(Matrix& M, vector<double>& B, vector<Triangle>& triangle)
- {
- vector<int> L(3);
- int a, b;
- for (int l = 0; l < triangle.size(); l++)
- {
- L = { triangle[l].node[0].globalNumber, triangle[l].node[1].globalNumber, triangle[l].node[2].globalNumber };
- //заносим диагональные элементы
- //начинаем цикл по строкам нижнего(и одновременно по столбцам верхнег) треугольника локальной матрицы
- for (int i = 0; i < 3; i++)
- {
- M.di[L[i]] += triangle[l].localMatrix[i][i];
- B[L[i]] += triangle[l].localVector[i];
- // начинаем поиск по строке нижнего (и по столбцу верхнего) треугольника
- for (int j = 0; j < i; j++)
- {
- a = L[i];
- b = L[j];
- if (a < b) swap(a, b);
- auto beg = M.jg.begin();
- beg += M.ig[a];
- if (M.ig[a + 1] > M.ig[a])
- {
- auto end = M.jg.begin();
- end += M.ig[a + 1] - 1;
- auto iter = lower_bound(beg, end, b);
- auto index = iter - M.jg.begin();
- M.gg[index] += triangle[l].localMatrix[i][j];
- }
- }
- }
- }
- }
- vector<vector<double>> MultMatrixNumber(vector<vector<double>>& M, double t)
- {
- vector<vector<double>> result(M.size(), vector<double>(M.size()));
- for (int i = 0; i < M.size(); i++)
- {
- result[i][i] = M[i][i] * t;
- for (int j = 0; j < i; j++)
- {
- result[i][j] = M[i][j] * t;
- result[j][i] = result[i][j];
- }
- }
- return result;
- }
- vector<vector<double>> MatrixAddition(vector<vector<double>>& A1, vector<vector<double>>& A2)
- {
- vector<vector<double>> result(A1.size(), vector<double>(A1.size()));
- for (int i = 0; i < A1.size(); i++)
- {
- result[i][i] = A1[i][i] + A2[i][i];
- for (int j = 0; j < i; j++)
- {
- result[i][j] = A1[i][j] + A2[i][j];
- result[j][i] = result[i][j];
- }
- }
- return result;
- }
- vector<double> MultMatrixVector(vector<vector<double>>& M, vector<double>& vec)
- {
- vector<double> result(vec.size());
- for (int i = 0; i < M.size(); i++)
- for (int j = 0; j < vec.size(); j++)
- {
- result[i] += M[i][j] * vec[j];
- }
- return result;
- }
- vector<double> AdditionVectors(vector<double>& vec1, vector<double>& vec2)
- {
- vector<double> result(vec1.size());
- for (int i = 0; i < vec1.size(); i++)
- result[i] = vec1[i] + vec2[i];
- return result;
- }
- //вычисление нормы
- double NormVector(vector<double>& x)
- {
- double norma = 0;
- for (int i = 0; i < x.size(); i++)
- norma += x[i] * x[i];
- norma = sqrt(norma);
- return norma;
- }
- //скалярное произведение векторов
- double ScalarProduct(vector<double>& x, vector<double>& y)
- {
- double scalarProduct = 0;
- for (int i = 0; i < x.size(); i++)
- scalarProduct += x[i] * y[i];
- return scalarProduct;
- }
- vector<double> MatrixVectorProduct(Matrix& A, vector<double>& x)
- {
- vector<double> resultVector(x.size());
- for (int i = 0; i < A.di.size(); i++)
- {
- resultVector[i] = A.di[i] * x[i];
- for (int j = A.ig[i]; j < A.ig[i + 1]; j++)
- {
- resultVector[i] += A.gg[j] * x[A.jg[j]];
- resultVector[A.jg[j]] += A.gg[j] * x[i];
- }
- }
- return resultVector;
- }
- vector<double> MCG(Matrix& A, vector<double>& B)
- {
- int n = A.di.size();
- vector<double> composition_Az(n);
- vector<double> z = B;
- vector<double> r = B;
- vector<double> approximation(n);
- double scalarProduct_rr, normVectorF = NormVector(B);
- double relativeDiscrepancy;
- double a, b, eps = 1.0E-35;
- int iteration = 0, maxIteration = 100;
- scalarProduct_rr = ScalarProduct(r, r);
- do
- {
- composition_Az = MatrixVectorProduct(A, z);
- a = scalarProduct_rr / ScalarProduct(composition_Az, z);
- for (int i = 0; i < n; i++)
- approximation[i] += a * z[i];
- for (int i = 0; i < n; i++)
- r[i] -= a * composition_Az[i];
- b = scalarProduct_rr;
- scalarProduct_rr = ScalarProduct(r, r);
- if (abs(b) < 1.0e-60)
- break;
- b = scalarProduct_rr / b;
- for (int i = 0; i < n; i++)
- z[i] = z[i] * b + r[i];
- relativeDiscrepancy = NormVector(r) / normVectorF;
- iteration++;
- } while (iteration < maxIteration);
- return approximation;
- }
- vector<double> TwoLayerScheme(Matrix& portret, vector<Triangle>& triangle, vector<BoundaryCondition1>& boundaryCondition1, vector<BoundaryCondition2>& boundaryCondition2, vector<double> qLast, vector<double>& t)
- {
- vector<double>tmpV(3);
- vector<vector<double>> tmp;
- for (int i = 0; i < triangle.size(); i++)
- {
- tmpV[0] = qLast[triangle[i].node[0].globalNumber], tmpV[1] = qLast[triangle[i].node[1].globalNumber], tmpV[2] = qLast[triangle[i].node[2].globalNumber];
- tmp = MultMatrixNumber(triangle[i].matrixMass, 1.0 / (t[1] - t[0]));
- triangle[i].localMatrix = MatrixAddition(tmp, triangle[i].matrixStiffness);
- tmpV = MultMatrixVector(tmp, tmpV);
- triangle[i].localVector = AdditionVectors(triangle[i].localVector, tmpV);
- }
- Matrix M = portret;
- vector<double> B(M.di.size());
- GenerationGlobalMatrixVector(M, B, triangle);
- EntryBoundaryCondition1(boundaryCondition1, M, B, t[1]);
- EntryBoundaryCondition2(boundaryCondition2, B, t[1]);
- return MCG(M, B);
- }
- vector<double> ThreeLayerScheme(Matrix& portret, vector<Triangle>& triangle, vector<BoundaryCondition1>& boundaryCondition1, vector<BoundaryCondition2>& boundaryCondition2, vector<double> qLast, vector<double> qPreLast, vector<double>& t)
- {
- vector<double>tmpV1(3), tmpV2(3);
- vector<vector<double>> tmp;
- for (int i = 0; i < triangle.size(); i++)
- {
- tmpV1[0] = qLast[triangle[i].node[0].globalNumber], tmpV1[1] = qLast[triangle[i].node[1].globalNumber], tmpV1[2] = qLast[triangle[i].node[2].globalNumber];
- tmpV2[0] = qPreLast[triangle[i].node[0].globalNumber], tmpV2[1] = qPreLast[triangle[i].node[1].globalNumber], tmpV2[2] = qPreLast[triangle[i].node[2].globalNumber];
- tmp = MultMatrixNumber(triangle[i].matrixMass, ((t[2] - t[0]) + (t[2] - t[1])) / ((t[2] - t[0]) * (t[2] - t[1])));
- triangle[i].localMatrix = MatrixAddition(tmp, triangle[i].matrixStiffness);
- tmp = MultMatrixNumber(triangle[i].matrixMass, ((-1) * (t[2] - t[1])) / ((t[2] - t[0]) * (t[1] - t[0])));
- tmpV2 = MultMatrixVector(tmp, tmpV2);
- tmp = MultMatrixNumber(triangle[i].matrixMass, (t[2] - t[0]) / ((t[1] - t[0]) * (t[2] - t[1])));
- tmpV1 = MultMatrixVector(tmp, tmpV1);
- triangle[i].localVector = AdditionVectors(triangle[i].localVector, tmpV1);
- triangle[i].localVector = AdditionVectors(triangle[i].localVector, tmpV2);
- }
- Matrix M = portret;
- vector<double> B(M.di.size());
- GenerationGlobalMatrixVector(M, B, triangle);
- EntryBoundaryCondition1(boundaryCondition1, M, B, t[2]);
- EntryBoundaryCondition2(boundaryCondition2, B, t[2]);
- return MCG(M, B);
- }
- vector<Node> InputNodes()
- {
- vector<Node> nodes;
- int n;
- ifstream fin;
- fin.open("points.txt");
- fin >> n;
- nodes.resize(n), nodes.shrink_to_fit();
- for (int i = 0; i < n; i++)
- {
- fin >> nodes[i].r >> nodes[i].z;
- nodes[i].globalNumber = i;
- }
- fin.close();
- return nodes;
- }
- vector<Range> InputRange(int number)
- {
- vector<Range> ranges;
- ifstream fin;
- fin.open("ranges.txt");
- int n;
- fin >> n;
- ranges.resize(n), ranges.shrink_to_fit();
- for (int i = 0; i < n; i++)
- {
- fin >> ranges[i].diffusionCoefficient >> ranges[i].gamma;
- ranges[i].rangeNumber = number;
- }
- fin.close();
- return ranges;
- }
- vector<BoundaryCondition1> InputBoundaryCondition1(vector<Node>& nodes, int number)
- {
- vector<BoundaryCondition1> boundaryCondition1;
- ifstream fin;
- fin.open("BoundaryCondition1.txt");
- int n, temp1, temp2;
- fin >> n;
- boundaryCondition1.resize(n), boundaryCondition1.shrink_to_fit();
- for (int i = 0; i < n; i++)
- {
- fin >> temp1;
- boundaryCondition1[i].formulaNumber = number;
- boundaryCondition1[i].node = nodes[temp1];
- }
- fin.close();
- return boundaryCondition1;
- }
- vector<BoundaryCondition2> InputBoundaryCondition2(vector<Node>& nodes)
- {
- vector<BoundaryCondition2> boundaryCondition2;
- ifstream fin;
- int n, temp1, temp2;
- fin.open("BoundaryCondition2.txt");
- fin >> n;
- boundaryCondition2.resize(n), boundaryCondition2.shrink_to_fit();
- for (int i = 0; i < n; i++)
- {
- fin >> temp1 >> temp2 >> boundaryCondition2[i].formulaNumber;
- boundaryCondition2[i].node[0] = nodes[temp1];
- boundaryCondition2[i].node[1] = nodes[temp2];
- }
- fin.close();
- return boundaryCondition2;
- }
- double GetValueFor_q(int number, Node node, double t)
- {
- switch (number)
- {
- case 0:
- return 5 * t;
- case 1:
- return 6 * t * node.z + 4 * t;
- case 2:
- return 6 * t * node.r + 4 * t;
- case 3:
- return 6 * t * node.z * node.z + 4 *t;
- case 4:
- return 6 * t * node.r * node.r + 4 * t;
- case 5:
- return 5 * t * t;
- case 6:
- return 6 * t * t * node.z + 4 * t * t;
- case 7:
- return 6 * t * t * node.r + 4 * t * t;
- case 8:
- return 6 * t * t * node.z * node.z + 4 * t * t;
- case 9:
- return 6 * t * t * node.r * node.r + 4 * t * t;
- default:
- break;
- }
- }
- vector<double> Generationq0(double number, vector<Node>& nodes, double t)
- {
- vector<double> q;
- q.resize(nodes.size()), q.shrink_to_fit();
- for (int i = 0; i < q.size(); i++)
- q[i] = GetValueFor_q(number, nodes[i], t);
- return q;
- }
- vector<vector<double>> GenerationDecision(double number, vector<Node>& nodes, vector<double> t)
- {
- vector<vector<double>> q;
- q.resize(3), q.shrink_to_fit();
- q[0].resize(nodes.size()), q.shrink_to_fit();
- q[1].resize(nodes.size()), q.shrink_to_fit();
- q[2].resize(nodes.size()), q.shrink_to_fit();
- for (int i = 0; i < q[0].size(); i++)
- {
- q[0][i] = GetValueFor_q(number, nodes[i], t[0]);
- q[1][i] = GetValueFor_q(number, nodes[i], t[1]);
- q[2][i] = GetValueFor_q(number, nodes[i], t[2]);
- }
- return q;
- }
- vector<double> InputTime()
- {
- vector<double> t;
- int n;
- ifstream fin;
- fin.open("time.txt");
- fin >> n;
- t.resize(n), t.shrink_to_fit();
- for (int i = 0; i < n; i++)
- fin >> t[i];
- fin.close();
- return t;
- }
- void Output(vector<vector<double>>& q, vector<vector<double>>& decision, ofstream& out, int number)
- {
- vector<string> func =
- {
- "5 * t",
- "6 * t * z + 4 * t",
- "6 * t * r + 4 * t",
- "6 * t * z * z + 4 *t",
- "6 * t * r * r + 4 * t",
- "5 * t * t",
- "6 * t * t * z + 4 * t * t",
- "6 * t * t * r + 4 * t * t",
- "6 * t * t * z * z + 4 * t * t",
- "return 6 * t * t * r * r + 4 * t * t"
- };
- out << "Тест " << func[number] << endl;
- out.setf(ios::scientific);
- out.precision(7);
- for (int j = 0; j < q[0].size(); j++)
- out << q[0][j] << "\t" << q[1][j] << "\t" << q[2][j] << "\t" << decision[0][j] << "\t" << decision[1][j] << "\t" << decision[2][j] << endl;
- out << endl;
- }
- vector<Triangle> FormingArrayTriangles(vector<Range>& ranges, vector<Node>& nodes, double t)
- {
- vector<Triangle> triangles;
- ifstream fin;
- fin.open("triangles.txt");
- int n, numberNodes[3], numberRanges;
- fin >> n;
- triangles.resize(n), triangles.shrink_to_fit();
- for (int i = 0; i < n; i++)
- {
- fin >> numberNodes[0] >> numberNodes[1] >> numberNodes[2] >> numberRanges;
- Triangle tr;
- tr.node[0] = nodes[numberNodes[0]], tr.node[1] = nodes[numberNodes[1]], tr.node[2] = nodes[numberNodes[2]], tr.range = ranges[numberRanges];
- GenerationMatrixMasStifVec(tr, t);
- triangles[i] = tr;
- }
- fin.close();
- return triangles;
- }
- int main()
- {
- vector<Node> nodes;
- vector<Range> ranges;
- vector<Triangle> triangles;
- vector<BoundaryCondition1> boundaryCondition1;
- vector<BoundaryCondition2> boundaryCondition2;
- vector<vector<double>> q, decision;
- vector<double> t, time;
- time = InputTime();
- ofstream out("q.txt");
- for (size_t i = 0; i < 10; i++)
- {
- nodes = InputNodes();
- ranges = InputRange(i);
- boundaryCondition1 = InputBoundaryCondition1(nodes, i);
- boundaryCondition2 = InputBoundaryCondition2(nodes);
- t.resize(2);
- t[0] = time[0], t[1] = time[1];
- triangles = FormingArrayTriangles(ranges, nodes, t[1]);
- Matrix port = Portrait(triangles, nodes.size());
- q.push_back(Generationq0(i, nodes, t[0]));
- q.push_back(TwoLayerScheme(port, triangles, boundaryCondition1, boundaryCondition2, q[0], t));
- t.resize(3);
- t[0] = time[0], t[1] = time[1], t[2] = time[2];
- triangles = FormingArrayTriangles(ranges, nodes, t[2]);
- q.push_back(ThreeLayerScheme(port, triangles, boundaryCondition1, boundaryCondition2, q[1], q[0], t));
- decision = GenerationDecision(i, nodes, t);
- Output(q, decision, out, i);
- q.clear();
- }
- out.close();
- }
Editor
You can edit this paste and save as new: