@@ -378,15 +378,15 @@ double simulation()
378
378
379
379
fom_timer.Stop ();
380
380
381
- CAROM::DMD* dmd_u = NULL ;
381
+ std::unique_ptr< CAROM::DMD> dmd_u;
382
382
383
383
// 14. If in offline mode, create DMD object and take initial sample.
384
384
if (offline)
385
385
{
386
386
dmd_training_timer.Start ();
387
387
388
388
u_gf.SetFromTrueDofs (u);
389
- dmd_u = new CAROM::DMD (u.Size (), dt);
389
+ dmd_u. reset ( new CAROM::DMD (u.Size (), dt) );
390
390
dmd_u->takeSample (u.GetData (), t);
391
391
392
392
if (myid == 0 )
@@ -414,7 +414,7 @@ double simulation()
414
414
std::fstream fin (" parameters.txt" , std::ios_base::in);
415
415
double curr_param;
416
416
std::vector<std::string> dmd_paths;
417
- std::vector<CAROM::Vector* > param_vectors;
417
+ std::vector<CAROM::Vector> param_vectors;
418
418
419
419
while (fin >> curr_param)
420
420
{
@@ -429,36 +429,34 @@ double simulation()
429
429
dmd_paths.push_back (to_string (curr_radius) + " _" +
430
430
to_string (curr_alpha) + " _" + to_string (curr_cx) + " _" +
431
431
to_string (curr_cy));
432
- CAROM::Vector* param_vector = new CAROM::Vector (4 , false );
433
- param_vector-> item (0 ) = curr_radius;
434
- param_vector-> item (1 ) = curr_alpha;
435
- param_vector-> item (2 ) = curr_cx;
436
- param_vector-> item (3 ) = curr_cy;
432
+ CAROM::Vector param_vector (4 , false );
433
+ param_vector (0 ) = curr_radius;
434
+ param_vector (1 ) = curr_alpha;
435
+ param_vector (2 ) = curr_cx;
436
+ param_vector (3 ) = curr_cy;
437
437
param_vectors.push_back (param_vector);
438
438
}
439
439
fin.close ();
440
440
441
441
if (dmd_paths.size () > 1 )
442
442
{
443
- CAROM::Vector* desired_param = new CAROM::Vector (4 , false );
444
- desired_param-> item (0 ) = radius;
445
- desired_param-> item (1 ) = alpha;
446
- desired_param-> item (2 ) = cx;
447
- desired_param-> item (3 ) = cy;
443
+ CAROM::Vector desired_param (4 , false );
444
+ desired_param (0 ) = radius;
445
+ desired_param (1 ) = alpha;
446
+ desired_param (2 ) = cx;
447
+ desired_param (3 ) = cy;
448
448
449
449
dmd_training_timer.Start ();
450
450
451
451
CAROM::getParametricDMD (dmd_u, param_vectors, dmd_paths, desired_param,
452
452
" G" , " LS" , closest_rbf_val);
453
-
454
- delete desired_param;
455
453
}
456
454
else
457
455
{
458
- dmd_u = new CAROM::DMD (dmd_paths[0 ]);
456
+ dmd_u. reset ( new CAROM::DMD (dmd_paths[0 ]) );
459
457
}
460
458
461
- dmd_u->projectInitialCondition (init);
459
+ dmd_u->projectInitialCondition (* init);
462
460
463
461
dmd_training_timer.Stop ();
464
462
@@ -467,15 +465,13 @@ double simulation()
467
465
// compare the final FOM solution to the DMD predicted solution.
468
466
t = t_final - 10.0 * dt;
469
467
470
- CAROM::Vector* carom_tf_u_minus_some = dmd_u->predict (t);
468
+ std::shared_ptr< CAROM::Vector> carom_tf_u_minus_some = dmd_u->predict (t);
471
469
472
470
Vector tf_u_minus_some (carom_tf_u_minus_some->getData (),
473
471
carom_tf_u_minus_some->dim ());
474
472
475
473
u = tf_u_minus_some;
476
474
u_gf.SetFromTrueDofs (u);
477
-
478
- delete carom_tf_u_minus_some;
479
475
}
480
476
481
477
ts.push_back (t);
@@ -583,7 +579,7 @@ double simulation()
583
579
std::fstream fin (" parameters.txt" , std::ios_base::in);
584
580
double curr_param;
585
581
std::vector<std::string> dmd_paths;
586
- std::vector<CAROM::Vector* > param_vectors;
582
+ std::vector<CAROM::Vector> param_vectors;
587
583
588
584
while (fin >> curr_param)
589
585
{
@@ -598,30 +594,29 @@ double simulation()
598
594
dmd_paths.push_back (to_string (curr_radius) + " _" +
599
595
to_string (curr_alpha) + " _" + to_string (curr_cx) + " _" +
600
596
to_string (curr_cy));
601
- CAROM::Vector* param_vector = new CAROM::Vector (4 , false );
602
- param_vector-> item (0 ) = curr_radius;
603
- param_vector-> item (1 ) = curr_alpha;
604
- param_vector-> item (2 ) = curr_cx;
605
- param_vector-> item (3 ) = curr_cy;
597
+ CAROM::Vector param_vector (4 , false );
598
+ param_vector (0 ) = curr_radius;
599
+ param_vector (1 ) = curr_alpha;
600
+ param_vector (2 ) = curr_cx;
601
+ param_vector (3 ) = curr_cy;
606
602
param_vectors.push_back (param_vector);
607
603
}
608
604
fin.close ();
609
605
610
- CAROM::Vector* desired_param = new CAROM::Vector (4 , false );
611
- desired_param-> item (0 ) = radius;
612
- desired_param-> item (1 ) = alpha;
613
- desired_param-> item (2 ) = cx;
614
- desired_param-> item (3 ) = cy;
606
+ CAROM::Vector desired_param (4 , false );
607
+ desired_param (0 ) = radius;
608
+ desired_param (1 ) = alpha;
609
+ desired_param (2 ) = cx;
610
+ desired_param (3 ) = cy;
615
611
616
612
dmd_training_timer.Start ();
617
613
618
614
CAROM::getParametricDMD (dmd_u, param_vectors, dmd_paths, desired_param,
619
615
" G" , " LS" , closest_rbf_val);
620
616
621
- dmd_u->projectInitialCondition (init);
617
+ dmd_u->projectInitialCondition (* init);
622
618
623
619
dmd_training_timer.Stop ();
624
- delete desired_param;
625
620
}
626
621
627
622
if (offline || de || calc_err_indicator)
@@ -683,7 +678,8 @@ double simulation()
683
678
*true_solution_u, *true_solution_u));
684
679
}
685
680
}
686
- CAROM::Vector* result_u = dmd_u->predict (t_final);
681
+
682
+ std::shared_ptr<CAROM::Vector> result_u = dmd_u->predict (t_final);
687
683
688
684
Vector dmd_solution_u (result_u->getData (), result_u->dim ());
689
685
Vector diff_u (true_solution_u->Size ());
@@ -699,8 +695,6 @@ double simulation()
699
695
<< rel_diff << std::endl;
700
696
}
701
697
702
- delete result_u;
703
-
704
698
if (!de && myid == 0 )
705
699
{
706
700
printf (" Elapsed time for training DMD: %e second\n " ,
@@ -730,12 +724,11 @@ double simulation()
730
724
std::cout << " Predicting temperature using DMD at: " << ts[0 ] << std::endl;
731
725
}
732
726
733
- CAROM::Vector* result_u = dmd_u->predict (ts[0 ]);
727
+ std::shared_ptr< CAROM::Vector> result_u = dmd_u->predict (ts[0 ]);
734
728
Vector initial_dmd_solution_u (result_u->getData (), result_u->dim ());
735
729
u_gf.SetFromTrueDofs (initial_dmd_solution_u);
736
730
737
- VisItDataCollection dmd_visit_dc (" DMD_DE_Parametric_Heat_Conduction_Greedy_"
738
- +
731
+ VisItDataCollection dmd_visit_dc (" DMD_DE_Parametric_Heat_Conduction_Greedy_" +
739
732
to_string (radius) + " _" + to_string (alpha) + " _" +
740
733
to_string (cx) + " _" + to_string (cy), pmesh);
741
734
dmd_visit_dc.RegisterField (" temperature" , &u_gf);
@@ -746,8 +739,6 @@ double simulation()
746
739
dmd_visit_dc.Save ();
747
740
}
748
741
749
- delete result_u;
750
-
751
742
if (visit)
752
743
{
753
744
for (int i = 1 ; i < ts.size (); i++)
@@ -766,8 +757,6 @@ double simulation()
766
757
dmd_visit_dc.SetCycle (i);
767
758
dmd_visit_dc.SetTime (ts[i]);
768
759
dmd_visit_dc.Save ();
769
-
770
- delete result_u;
771
760
}
772
761
}
773
762
}
@@ -792,8 +781,6 @@ double simulation()
792
781
printf (" Elapsed time for predicting DMD: %e second\n " ,
793
782
dmd_prediction_timer.RealTime ());
794
783
}
795
-
796
- delete result_u;
797
784
}
798
785
799
786
// 19. Calculate the relative error as commanded by the greedy algorithm.
@@ -818,10 +805,6 @@ double simulation()
818
805
// 21. Free the used memory.
819
806
delete ode_solver;
820
807
delete pmesh;
821
- if (dmd_u != NULL )
822
- {
823
- delete dmd_u;
824
- }
825
808
826
809
return rel_diff;
827
810
}
@@ -834,7 +817,7 @@ class RelativeDifferenceCostFunction : public CAROM::IOptimizable
834
817
{
835
818
836
819
}
837
- double EvaluateCost (std::vector<double > inputs) const override
820
+ double EvaluateCost (std::vector<double > & inputs) const override
838
821
{
839
822
radius = inputs[0 ];
840
823
alpha = inputs[1 ];
0 commit comments