@@ -632,3 +632,94 @@ TEST(OptimizeTests, mesh_ffc_test) {
632
632
bool good = check_constraint_violations (app, 3.0e-1 );
633
633
ASSERT_TRUE (good);
634
634
}
635
+
636
+ // ---------------------------------------------------------------------------
637
+ TEST (OptimizeTests, procrustes_disabled_test) {
638
+ TestUtils::Instance ().prep_temp (std::string (TEST_DATA_DIR) + " /optimize/procrustes" , " procrustes_disabled_test" );
639
+
640
+ ProjectHandle project = std::make_shared<Project>();
641
+ project->load (" procrustes.xlsx" );
642
+ OptimizeParameters params (project);
643
+ params.set_use_procrustes (false );
644
+
645
+ Optimize app;
646
+ params.set_up_optimize (&app);
647
+
648
+ // run optimize
649
+ bool success = app.Run ();
650
+ ASSERT_TRUE (success);
651
+
652
+ // compute stats
653
+ ParticleShapeStatistics stats (project);
654
+ stats.ComputeModes ();
655
+ stats.PrincipalComponentProjections ();
656
+
657
+ // print out eigenvalues (for debugging)
658
+ auto values = stats.Eigenvalues ();
659
+ for (int i = 0 ; i < values.size (); i++) {
660
+ std::cerr << " Eigenvalue " << i << " : " << values[i] << " \n " ;
661
+ }
662
+ ASSERT_GT (values[values.size () - 1 ], 700.0 );
663
+ }
664
+
665
+ // ---------------------------------------------------------------------------
666
+ TEST (OptimizeTests, procrustes_no_scale_test) {
667
+ TestUtils::Instance ().prep_temp (std::string (TEST_DATA_DIR) + " /optimize/procrustes" , " procrustes_no_scale_test" );
668
+
669
+ ProjectHandle project = std::make_shared<Project>();
670
+ project->load (" procrustes.xlsx" );
671
+ OptimizeParameters params (project);
672
+ params.set_use_procrustes (true );
673
+ params.set_use_procrustes_scaling (false );
674
+
675
+ Optimize app;
676
+ params.set_up_optimize (&app);
677
+
678
+ // run optimize
679
+ bool success = app.Run ();
680
+ ASSERT_TRUE (success);
681
+
682
+ // compute stats
683
+ ParticleShapeStatistics stats (project);
684
+ stats.ComputeModes ();
685
+ stats.PrincipalComponentProjections ();
686
+
687
+ // print out eigenvalues (for debugging)
688
+ auto values = stats.Eigenvalues ();
689
+ for (int i = 0 ; i < values.size (); i++) {
690
+ std::cerr << " Eigenvalue " << i << " : " << values[i] << " \n " ;
691
+ }
692
+ ASSERT_GT (values[values.size () - 1 ], 150.0 );
693
+ ASSERT_LT (values[values.size () - 1 ], 200.0 );
694
+ }
695
+
696
+ // ---------------------------------------------------------------------------
697
+ TEST (OptimizeTests, procrustes_enabled_test) {
698
+ TestUtils::Instance ().prep_temp (std::string (TEST_DATA_DIR) + " /optimize/procrustes" , " procrustes_enabled_test" );
699
+
700
+ ProjectHandle project = std::make_shared<Project>();
701
+ project->load (" procrustes.xlsx" );
702
+ OptimizeParameters params (project);
703
+ params.set_use_procrustes (true );
704
+ params.set_use_procrustes_scaling (true );
705
+
706
+ Optimize app;
707
+ params.set_up_optimize (&app);
708
+
709
+ // run optimize
710
+ bool success = app.Run ();
711
+ ASSERT_TRUE (success);
712
+
713
+ // compute stats
714
+ ParticleShapeStatistics stats (project);
715
+ stats.ComputeModes ();
716
+ stats.PrincipalComponentProjections ();
717
+
718
+ // print out eigenvalues (for debugging)
719
+ auto values = stats.Eigenvalues ();
720
+ for (int i = 0 ; i < values.size (); i++) {
721
+ std::cerr << " Eigenvalue " << i << " : " << values[i] << " \n " ;
722
+ }
723
+ // should be tiny with all of procrustes enabled
724
+ ASSERT_LT (values[values.size () - 1 ], 1.0 );
725
+ }
0 commit comments