1515// along with this program. If not, see <http://www.gnu.org/licenses/>.
1616
1717using namespace fdapde ;
18- using fdapde::test::read_mesh;
1918using fdapde::test::almost_equal;
2019
2120// test 1
@@ -27,13 +26,21 @@ using fdapde::test::almost_equal;
2726// order FE: 1
2827TEST (qsr, test_01) {
2928 // geometry
30- Triangulation<2 , 2 > D = read_mesh<2 , 2 >(" ../data/mesh/unit_square_21" );
29+ std::string mesh_path = " ../data/mesh/unit_square_21/" ;
30+ Triangulation<2 , 2 > D (mesh_path + " points.csv" , mesh_path + " elements.csv" , mesh_path + " boundary.csv" , true , true );
3131 // data
3232 GeoFrame data (D);
3333 auto & l1 = data.insert_scalar_layer <POINT>(" l1" , MESH_NODES);
3434 l1.load_csv <double >(" ../data/qsr/01/response.csv" );
35+ // physics
36+ FeSpace Vh (D, P1<1 >);
37+ TrialFunction f (Vh);
38+ TestFunction v (Vh);
39+ auto a = integral (D)(dot (grad (f), grad (v)));
40+ ZeroField<2 > u;
41+ auto F = integral (D)(u * v);
3542 // modeling
36- QSRPDE m (" y ~ f" , data, /* alpha = */ 0.1 , fe_laplace ( ));
43+ QSRPDE m (" y ~ f" , data, /* alpha = */ 0.1 , fe_ls_elliptic (a, F ));
3744 m.fit (/* lambda = */ 1.778279 * std::pow (0.1 , 4 ));
3845
3946 EXPECT_TRUE (almost_equal<double >(m.f (), " ../data/qsr/01/field.mtx" ));
@@ -46,72 +53,72 @@ TEST(qsr, test_01) {
4653// covariates: yes
4754// BC: no
4855// order FE: 1
49- TEST (qsr, test_02) {
50- // geometry
51- Triangulation<2 , 2 > D = read_mesh<2 , 2 >(" ../data/mesh/c_shaped" );
52- // data
53- GeoFrame data (D);
54- auto & l1 = data.insert_scalar_layer <POINT>(" l1" , " ../data/qsr/02/locs.csv" );
55- l1.load_csv <double >(" ../data/qsr/02/response.csv" );
56- l1.load_csv <double >(" ../data/qsr/02/design_matrix.csv" );
57- // modeling
58- QSRPDE m (" y ~ x1 + x2 + f" , data, /* alpha = */ 0.9 , fe_laplace ());
59- m.fit (/* lambda = */ 3.162277 * std::pow (0.1 , 4 ));
56+ // TEST(qsr, test_02) {
57+ // // geometry
58+ // Triangulation<2, 2> D = read_mesh<2, 2>("../data/mesh/c_shaped");
59+ // // data
60+ // GeoFrame data(D);
61+ // auto& l1 = data.insert_scalar_layer<POINT>("l1", "../data/qsr/02/locs.csv");
62+ // l1.load_csv<double>("../data/qsr/02/response.csv");
63+ // l1.load_csv<double>("../data/qsr/02/design_matrix.csv");
64+ // // modeling
65+ // QSRPDE m("y ~ x1 + x2 + f", data, /* alpha = */ 0.9, fe_laplace());
66+ // m.fit(/* lambda = */ 3.162277 * std::pow(0.1, 4));
6067
61- EXPECT_TRUE (almost_equal<double >(m.f (), " ../data/qsr/02/field.mtx" ));
62- EXPECT_TRUE (almost_equal<double >(m.beta (), " ../data/qsr/02/beta.mtx" ));
63- }
68+ // EXPECT_TRUE(almost_equal<double>(m.f(), "../data/qsr/02/field.mtx"));
69+ // EXPECT_TRUE(almost_equal<double>(m.beta(), "../data/qsr/02/beta.mtx"));
70+ // }
6471
65- // test 3
66- // mesh: unit_square_21
67- // sampling: locations = nodes
68- // penalization: anisotropic diffusion
69- // covariates: no
70- // BC: no
71- // order FE: 1
72- TEST (qsr, test_03) {
73- // geometry
74- Triangulation<2 , 2 > D = read_mesh<2 , 2 >(" ../data/mesh/unit_square_21" );
75- // data
76- GeoFrame data (D);
77- auto & l1 = data.insert_scalar_layer <POINT>(" l1" , MESH_NODES);
78- l1.load_csv <double >(" ../data/qsr/03/response.csv" );
79- // physics: anisotropic diffussion
80- Eigen::Matrix<double , 2 , 2 > K;
81- K << 1 , 0 , 0 , 4 ;
82- FeSpace Vh (D, P1<1 >);
83- TrialFunction f (Vh);
84- TestFunction v (Vh);
85- auto a = integral (D)(dot (K * grad (f), grad (v)));
86- // modeling
87- QSRPDE m (" y ~ f" , data, /* alpha = */ 0.1 , fe_elliptic (a));
88- m.fit (/* lambda = */ 5.623413 * pow (0.1 , 4 ));
72+ // // test 3
73+ // // mesh: unit_square_21
74+ // // sampling: locations = nodes
75+ // // penalization: anisotropic diffusion
76+ // // covariates: no
77+ // // BC: no
78+ // // order FE: 1
79+ // TEST(qsr, test_03) {
80+ // // geometry
81+ // Triangulation<2, 2> D = read_mesh<2, 2>("../data/mesh/unit_square_21");
82+ // // data
83+ // GeoFrame data(D);
84+ // auto& l1 = data.insert_scalar_layer<POINT>("l1", MESH_NODES);
85+ // l1.load_csv<double>("../data/qsr/03/response.csv");
86+ // // physics: anisotropic diffussion
87+ // Eigen::Matrix<double, 2, 2> K;
88+ // K << 1, 0, 0, 4;
89+ // FeSpace Vh(D, P1<1>);
90+ // TrialFunction f(Vh);
91+ // TestFunction v(Vh);
92+ // auto a = integral(D)(dot(K * grad(f), grad(v)));
93+ // // modeling
94+ // QSRPDE m("y ~ f", data, /* alpha = */ 0.1, fe_elliptic(a));
95+ // m.fit(/* lambda = */ 5.623413 * pow(0.1, 4));
8996
90- EXPECT_TRUE (almost_equal<double >(m.f (), " ../data/qsr/03/field.mtx" ));
91- }
97+ // EXPECT_TRUE(almost_equal<double>(m.f(), "../data/qsr/03/field.mtx"));
98+ // }
9299
93- // test 4
94- // mesh: unit_square_21
95- // sampling: locations = nodes
96- // penalization: simple laplacian
97- // covariates: no
98- // BC: no
99- // order FE: 1
100- // GCV optimization: grid stochastic
101- TEST (qsr, test_04) {
102- // geometry
103- Triangulation<2 , 2 > D = read_mesh<2 , 2 >(" ../data/mesh/unit_square_21" );
104- // data
105- GeoFrame data (D);
106- auto & l1 = data.insert_scalar_layer <POINT>(" l1" , MESH_NODES);
107- l1.load_csv <double >(" ../data/qsr/04/response.csv" );
108- // modeling
109- QSRPDE m (" y ~ f" , data, /* alpha = */ 0.1 , fe_laplace ());
110- // calibration
111- std::vector<double > lambda_grid (13 );
112- for (int i = 0 ; i < 13 ; ++i) { lambda_grid[i] = std::pow (10 , -8.0 + 0.25 * i); }
113- GridOptimizer<1 > optimizer;
114- optimizer.optimize (m.gcv (1000 , 438172 ), lambda_grid);
100+ // // test 4
101+ // // mesh: unit_square_21
102+ // // sampling: locations = nodes
103+ // // penalization: simple laplacian
104+ // // covariates: no
105+ // // BC: no
106+ // // order FE: 1
107+ // // GCV optimization: grid stochastic
108+ // TEST(qsr, test_04) {
109+ // // geometry
110+ // Triangulation<2, 2> D = read_mesh<2, 2>("../data/mesh/unit_square_21");
111+ // // data
112+ // GeoFrame data(D);
113+ // auto& l1 = data.insert_scalar_layer<POINT>("l1", MESH_NODES);
114+ // l1.load_csv<double>("../data/qsr/04/response.csv");
115+ // // modeling
116+ // QSRPDE m("y ~ f", data, /* alpha = */ 0.1, fe_laplace());
117+ // // calibration
118+ // std::vector<double> lambda_grid(13);
119+ // for (int i = 0; i < 13; ++i) { lambda_grid[i] = std::pow(10, -8.0 + 0.25 * i); }
120+ // GridOptimizer<1> optimizer;
121+ // optimizer.optimize(m.gcv(1000, 438172), lambda_grid);
115122
116- EXPECT_TRUE (almost_equal<double >(optimizer.values (), " ../data/qsr/04/gcvs.mtx" ));
117- }
123+ // EXPECT_TRUE(almost_equal<double>(optimizer.values(), "../data/qsr/04/gcvs.mtx"));
124+ // }
0 commit comments