@@ -118,17 +118,53 @@ void test_task_custom_grid(size_t m, size_t n, std::unique_ptr<numcpp::ISolver>
118
118
auto [duration, solution] = estimate_time (solver);
119
119
}
120
120
121
+ void test_Chebyshev (size_t n, size_t m) {
122
+ // size_t n = 2048;
123
+ // size_t m = 2048;
124
+ std::cout << " n = " << n << " m = " << m << ' \n ' ;
125
+
126
+ std::array<double , 4 > corners = { -1.0 , -1.0 , 1.0 , 1.0 };
127
+ std::vector<FP> init_app ((n - 1 ) * (m - 1 ), 0.0 );
128
+
129
+ FP h = (corners[2 ] - corners[0 ]) / n;
130
+ FP k = (corners[3 ] - corners[1 ]) / m;
131
+
132
+ FP Mmin = 4.0 / pow (h, 2 ) * pow (sin (numcpp::PI / 2.0 / n), 2 ) + 4.0 / pow (k, 2 ) * pow (sin (numcpp::PI / 2.0 / m), 2 );
133
+ FP Mmax = 4.0 / pow (h, 2 ) * pow (sin (numcpp::PI * (n - 1 ) / 2.0 / n), 2 ) + 4.0 / pow (k, 2 ) * pow (sin (numcpp::PI * (m - 1 ) / 2.0 / m), 2 );
134
+ std::cout << " Mmin = " << Mmin << " Mmax = " << Mmax << ' \n ' ;
135
+ auto u = [](double x, double y) { return exp (1 - pow (x, 2 ) - pow (y, 2 )); };
136
+ auto f = [](double x, double y) { return -4 * exp (1 - pow (x, 2 ) - pow (y, 2 )) * (pow (y, 2 ) + pow (x, 2 ) - 1 ); };
137
+
138
+ auto mu1 = [](double y) { return exp (-pow (y, 2 )); };
139
+ auto mu2 = [](double y) { return exp (-pow (y, 2 )); };
140
+ auto mu3 = [](double x) { return exp (-pow (x, 2 )); };
141
+ auto mu4 = [](double x) { return exp (-pow (x, 2 )); };
142
+
143
+ numcpp::DirichletProblemSolver<numcpp::Regular> dirichlet_task;
144
+ dirichlet_task.set_fraction (m, n);
145
+ dirichlet_task.set_corners (corners);
146
+ dirichlet_task.set_u (u);
147
+ dirichlet_task.set_f (f);
148
+ dirichlet_task.set_boundary_conditions ({ mu1, mu2, mu3, mu4 });
149
+
150
+ dirichlet_task.set_solver (std::make_unique<numcpp::ChebyshevIteration>(init_app, 1000000000 , 0.0000000000001 , nullptr , std::vector<FP>(), Mmin, Mmax));
151
+
152
+ auto [duration, solution] = estimate_time (dirichlet_task);
153
+ }
154
+
121
155
int main ()
122
156
{
123
- size_t m1 = 1024 ;
124
- size_t n1 = 1024 ;
157
+ // size_t m1 = 1024;
158
+ // size_t n1 = 1024;
159
+
160
+ // auto LS_solver1 = std::make_unique<numcpp::ConGrad>(std::vector<FP>(), 1000000, 0.000000001, nullptr, std::vector<FP>());
161
+ // test_task_custom_grid(m1, n1, std::move(LS_solver1));
125
162
126
- auto LS_solver1 = std::make_unique<numcpp::ConGrad>(std::vector<FP>(), 1000000 , 0.000000001 , nullptr , std::vector<FP>()) ;
127
- test_task_custom_grid (m1, n1, std::move (LS_solver1)) ;
163
+ // size_t m2 = 200 ;
164
+ // size_t n2 = 200 ;
128
165
129
- size_t m2 = 200 ;
130
- size_t n2 = 200 ;
166
+ // auto LS_solver2 = std::make_unique<numcpp::MinRes>(std::vector<FP>(), 1000000, 0.000001, nullptr, std::vector<FP>()) ;
167
+ // test_task(m2, n2, std::move(LS_solver2)) ;
131
168
132
- auto LS_solver2 = std::make_unique<numcpp::MinRes>(std::vector<FP>(), 1000000 , 0.000001 , nullptr , std::vector<FP>());
133
- test_task (m2, n2, std::move (LS_solver2));
169
+ test_Chebyshev (1024 ,1024 );
134
170
}
0 commit comments