@@ -118,17 +118,53 @@ void test_task_custom_grid(size_t m, size_t n, std::unique_ptr<numcpp::ISolver>
118118 auto [duration, solution] = estimate_time (solver);
119119}
120120
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+
121155int main ()
122156{
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));
125162
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 ;
128165
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)) ;
131168
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 );
134170}
0 commit comments