Skip to content

Commit 077db15

Browse files
authored
Merge pull request #1923 from bgoderbauer/wrap-serialdensevector
Implement a composition-based wrapper for SerialDenseVector
2 parents 9af28d5 + 5b855ba commit 077db15

23 files changed

+575
-119
lines changed

src/art_net/4C_art_net_art_junction.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,7 +474,7 @@ int Arteries::Utils::ArtJunctionBc::solve(Teuchos::ParameterList& params)
474474
// Solve for dx
475475
//--------------------------------------------------------------------
476476
solver_.setMatrix(Teuchos::rcpFromRef(Jacobian.base()));
477-
solver_.setVectors(Teuchos::rcpFromRef(dx), Teuchos::rcpFromRef(f));
477+
solver_.setVectors(Teuchos::rcpFromRef(dx.base()), Teuchos::rcpFromRef(f.base()));
478478
solver_.factorWithEquilibration(true);
479479
int err2 = solver_.factor();
480480
int err = solver_.solve();

src/beaminteraction/src/crosslinking/4C_beaminteraction_crosslinking_submodel_evaluator.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3377,7 +3377,7 @@ void BeamInteraction::SubmodelEvaluator::Crosslinking::
33773377
for (unsigned int i = 0; i < 2; ++i)
33783378
{
33793379
// currently, only forces (not moments) considered
3380-
bspotforce[i].reshape(3, 1);
3380+
bspotforce[i].resize(3);
33813381
clbspotforcenorm[i] = Core::LinAlg::norm2(bspotforce[i]);
33823382

33833383
// adjusted off-rate according to Bell's equation (Howard, eq 5.10, p.89)

src/core/fem/src/discretization/4C_fem_discretization_hdg.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -494,7 +494,7 @@ void Core::FE::DbcHDG::do_dirichlet_condition(const Teuchos::ParameterList& para
494494

495495
initParams.set<unsigned int>(
496496
"faceconsider", static_cast<unsigned int>(faceele->face_master_number()));
497-
if (static_cast<unsigned int>(elevec1.numRows()) != dofperface) elevec1.shape(dofperface, 1);
497+
if (static_cast<unsigned int>(elevec1.numRows()) != dofperface) elevec1.resize(dofperface);
498498
std::vector<int> dofs = discret.dof(0, discret.l_row_face(i));
499499

500500
bool do_evaluate = false;

src/core/fem/src/general/utils/4C_fem_general_utils_polynomial.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,8 @@ namespace Core::FE
533533
const Core::LinAlg::Matrix<nsd, 1>& point, Core::LinAlg::SerialDenseVector& values) const
534534
{
535535
legendre_.evaluate(point, values);
536-
vandermonde_factor_.setVectors(Teuchos::rcpFromRef(values), Teuchos::rcpFromRef(values));
536+
vandermonde_factor_.setVectors(
537+
Teuchos::rcpFromRef(values.base()), Teuchos::rcpFromRef(values.base()));
537538
vandermonde_factor_.solve();
538539
}
539540

@@ -548,7 +549,7 @@ namespace Core::FE
548549
{
549550
for (unsigned int i = 0; i < size(); ++i) evaluate_vec_(i) = derivatives(d, i);
550551
vandermonde_factor_.setVectors(
551-
Teuchos::rcpFromRef(evaluate_vec_), Teuchos::rcpFromRef(evaluate_vec_));
552+
Teuchos::rcpFromRef(evaluate_vec_.base()), Teuchos::rcpFromRef(evaluate_vec_.base()));
552553
vandermonde_factor_.solve();
553554
for (unsigned int i = 0; i < size(); ++i) derivatives(d, i) = evaluate_vec_(i);
554555
}
@@ -565,7 +566,7 @@ namespace Core::FE
565566
{
566567
for (unsigned int i = 0; i < size(); ++i) evaluate_vec_(i) = derivatives(d, i);
567568
vandermonde_factor_.setVectors(
568-
Teuchos::rcpFromRef(evaluate_vec_), Teuchos::rcpFromRef(evaluate_vec_));
569+
Teuchos::rcpFromRef(evaluate_vec_.base()), Teuchos::rcpFromRef(evaluate_vec_.base()));
569570
vandermonde_factor_.solve();
570571
for (unsigned int i = 0; i < size(); ++i) derivatives(d, i) = evaluate_vec_(i);
571572
}
@@ -670,7 +671,7 @@ namespace Core::FE
670671

671672
vandermonde_factor_.setMatrix(Teuchos::rcpFromRef(vandermonde_.base()));
672673
vandermonde_factor_.factor();
673-
evaluate_vec_.shape(size(), 1);
674+
evaluate_vec_.resize(size());
674675

675676

676677
// Sanity check: Polynomials should be nodal in the Fekete points

src/core/fem/tests/geometry/4C_fem_geometry_element_volume_test.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ namespace
6868
xyz(2, 1) = 2.0; // node 2
6969

7070
std::vector<Core::LinAlg::SerialDenseVector> knots(1);
71-
knots[0].reshape(4, 1);
71+
knots[0].resize(4);
7272
knots[0][0] = 0;
7373
knots[0][1] = 0;
7474
knots[0][2] = 1;
@@ -100,7 +100,7 @@ namespace
100100
xyz(2, 2) = 2.0; // node 3
101101

102102
std::vector<Core::LinAlg::SerialDenseVector> knots(1);
103-
knots[0].reshape(6, 1);
103+
knots[0].resize(6);
104104
knots[0][0] = 0;
105105
knots[0][1] = 0;
106106
knots[0][2] = 0;
@@ -133,7 +133,7 @@ namespace
133133
xyz(2, 2) = 1.0; // node 3
134134

135135
std::vector<Core::LinAlg::SerialDenseVector> knots(1);
136-
knots[0].reshape(6, 1);
136+
knots[0].resize(6);
137137
knots[0][0] = 0;
138138
knots[0][1] = 0;
139139
knots[0][2] = 0;
@@ -312,12 +312,12 @@ namespace
312312
xyz(2, 3) = 0.0; // node 4
313313

314314
std::vector<Core::LinAlg::SerialDenseVector> knots(2);
315-
knots[0].reshape(4, 1);
315+
knots[0].resize(4);
316316
knots[0][0] = 0;
317317
knots[0][1] = 0;
318318
knots[0][2] = 1;
319319
knots[0][3] = 1;
320-
knots[1].reshape(4, 1);
320+
knots[1].resize(4);
321321
knots[1][0] = 0;
322322
knots[1][1] = 0;
323323
knots[1][2] = 1;
@@ -369,14 +369,14 @@ namespace
369369
xyz(2, 8) = 0.0; // node 9
370370

371371
std::vector<Core::LinAlg::SerialDenseVector> knots(2);
372-
knots[0].reshape(6, 1);
372+
knots[0].resize(6);
373373
knots[0][0] = 0;
374374
knots[0][1] = 0;
375375
knots[0][2] = 0;
376376
knots[0][3] = 1;
377377
knots[0][4] = 1;
378378
knots[0][5] = 1;
379-
knots[1].reshape(6, 1);
379+
knots[1].resize(6);
380380
knots[1][0] = 0;
381381
knots[1][1] = 0;
382382
knots[1][2] = 0;
@@ -433,14 +433,14 @@ namespace
433433
xyz(2, 8) = 1.0; // node 9
434434

435435
std::vector<Core::LinAlg::SerialDenseVector> knots(2);
436-
knots[0].reshape(6, 1);
436+
knots[0].resize(6);
437437
knots[0][0] = 0;
438438
knots[0][1] = 0;
439439
knots[0][2] = 0;
440440
knots[0][3] = 1;
441441
knots[0][4] = 1;
442442
knots[0][5] = 1;
443-
knots[1].reshape(6, 1);
443+
knots[1].resize(6);
444444
knots[1][0] = 0;
445445
knots[1][1] = 0;
446446
knots[1][2] = 0;
@@ -766,17 +766,17 @@ namespace
766766
xyz(2, 7) = 1.0; // node 8
767767

768768
std::vector<Core::LinAlg::SerialDenseVector> knots(3);
769-
knots[0].reshape(4, 1);
769+
knots[0].resize(4);
770770
knots[0][0] = 0;
771771
knots[0][1] = 0;
772772
knots[0][2] = 1;
773773
knots[0][3] = 1;
774-
knots[1].reshape(4, 1);
774+
knots[1].resize(4);
775775
knots[1][0] = 0;
776776
knots[1][1] = 0;
777777
knots[1][2] = 1;
778778
knots[1][3] = 1;
779-
knots[2].reshape(4, 1);
779+
knots[2].resize(4);
780780
knots[2][0] = 0;
781781
knots[2][1] = 0;
782782
knots[2][2] = 1;
@@ -888,7 +888,7 @@ namespace
888888
std::vector<Core::LinAlg::SerialDenseVector> knots(3);
889889
for (int idir = 0; idir < 3; ++idir)
890890
{
891-
knots[idir].reshape(6, 1);
891+
knots[idir].resize(6);
892892
knots[idir][0] = 0.0;
893893
knots[idir][1] = 0.0;
894894
knots[idir][2] = 0.0;
@@ -994,7 +994,7 @@ namespace
994994
std::vector<Core::LinAlg::SerialDenseVector> knots(3);
995995
for (int idir = 0; idir < 3; ++idir)
996996
{
997-
knots[idir].reshape(6, 1);
997+
knots[idir].resize(6);
998998
knots[idir][0] = 0.0;
999999
knots[idir][1] = 0.0;
10001000
knots[idir][2] = 0.0;

src/core/linalg/src/dense/4C_linalg_fixedsizematrix.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1992,7 +1992,7 @@ namespace Core::LinAlg
19921992
different, though. See the appropriate functions for details.
19931993
19941994
There is no operator[]. It behaves differently in
1995-
Core::LinAlg::SerialDenseMatrix and Core::LinAlg::SerialDenseVector::Base, and is not
1995+
Core::LinAlg::SerialDenseMatrix and Core::LinAlg::SerialDenseVector, and is not
19961996
needed in either of them.
19971997
*/
19981998
template <unsigned int rows, unsigned int cols, class ValueType = double>

src/core/linalg/src/dense/4C_linalg_serialdensevector.cpp

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,95 @@
77

88
#include "4C_linalg_serialdensevector.hpp"
99

10+
#include "4C_utils_exceptions.hpp"
11+
1012
FOUR_C_NAMESPACE_OPEN
1113

14+
namespace Core::LinAlg
15+
{
16+
SerialDenseVector::SerialDenseVector(int length) : vec_(length) {}
17+
18+
SerialDenseVector::SerialDenseVector(int length, bool zeroOut) : vec_(length, zeroOut) {}
19+
20+
SerialDenseVector::SerialDenseVector(Teuchos::DataAccess cv, double* values, int length)
21+
: vec_(cv, values, length)
22+
{
23+
}
24+
25+
SerialDenseVector::SerialDenseVector(const Base& source, Teuchos::ETransp trans) : vec_(source)
26+
{
27+
switch (trans)
28+
{
29+
case Teuchos::NO_TRANS:
30+
case Teuchos::TRANS:
31+
case Teuchos::CONJ_TRANS:
32+
break;
33+
default:
34+
FOUR_C_THROW("Unsupported transposition flag for vector copy constructor");
35+
}
36+
}
37+
38+
int SerialDenseVector::length() const { return vec_.length(); }
39+
int SerialDenseVector::num_rows() const { return vec_.numRows(); }
40+
int SerialDenseVector::numRows() const { return vec_.numRows(); }
41+
double SerialDenseVector::normInf() const { return vec_.normInf(); }
42+
double SerialDenseVector::normOne() const { return vec_.normOne(); }
43+
double SerialDenseVector::norm2() const { return vec_.normFrobenius(); }
44+
double SerialDenseVector::normFrobenius() const { return vec_.normFrobenius(); }
45+
bool SerialDenseVector::empty() const { return vec_.length() == 0; }
46+
47+
double* SerialDenseVector::values() const { return vec_.values(); }
48+
double* SerialDenseVector::data() const { return values(); }
49+
50+
int SerialDenseVector::size(int length) { return vec_.size(length); }
51+
52+
int SerialDenseVector::Size(int length) { return size(length); }
53+
54+
int SerialDenseVector::resize(int length) { return vec_.resize(length); }
55+
56+
int SerialDenseVector::scale(double alpha) { return vec_.scale(alpha); }
57+
58+
int SerialDenseVector::put_scalar(double val) { return vec_.putScalar(val); }
59+
60+
int SerialDenseVector::putScalar(double val) { return vec_.putScalar(val); }
61+
62+
void SerialDenseVector::assign(const SerialDenseVector& source) { vec_.assign(source.base()); }
63+
64+
SerialDenseVector& SerialDenseVector::operator+=(const SerialDenseVector& other)
65+
{
66+
vec_ += other.vec_;
67+
return *this;
68+
}
69+
70+
double SerialDenseVector::dot(const SerialDenseVector& other) const
71+
{
72+
return vec_.dot(other.base());
73+
}
74+
75+
int SerialDenseVector::multiply(Teuchos::ETransp transa, Teuchos::ETransp transb, double alpha,
76+
const Teuchos::SerialDenseMatrix<ordinalType, scalarType>& A,
77+
const Teuchos::SerialDenseMatrix<ordinalType, scalarType>& B, double beta)
78+
{
79+
return vec_.multiply(transa, transb, alpha, A, B, beta);
80+
}
81+
82+
int SerialDenseVector::multiply(Teuchos::ETransp transa, Teuchos::ETransp transb, double alpha,
83+
const Teuchos::SerialDenseMatrix<ordinalType, scalarType>& A, const SerialDenseVector& B,
84+
double beta)
85+
{
86+
return vec_.multiply(transa, transb, alpha, A, B.base(), beta);
87+
}
88+
89+
void SerialDenseVector::print(std::ostream& out) const { vec_.print(out); }
90+
91+
SerialDenseVector::Base& SerialDenseVector::base() { return vec_; }
92+
const SerialDenseVector::Base& SerialDenseVector::base() const { return vec_; }
93+
} // namespace Core::LinAlg
94+
1295
/*----------------------------------------------------------------------*
1396
| Compute vector 2-norm |
1497
*----------------------------------------------------------------------*/
15-
double Core::LinAlg::norm2(const Core::LinAlg::SerialDenseVector& v) { return v.normFrobenius(); }
98+
double Core::LinAlg::norm2(const Core::LinAlg::SerialDenseVector& v) { return v.norm2(); }
1699

17100
/*----------------------------------------------------------------------*
18101
| b = alpha*a + beta*b |

0 commit comments

Comments
 (0)