Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
7
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Praetorius, Simon
dune-amdis
Commits
9e2dadcb
Commit
9e2dadcb
authored
Sep 15, 2018
by
Praetorius, Simon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cleanup of DOFMatrix and removed name member
parent
c4620783
Changes
11
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
98 additions
and
152 deletions
+98
-152
examples/stokes0.cc
examples/stokes0.cc
+2
-2
examples/stokes1.cc
examples/stokes1.cc
+2
-2
examples/vecellipt.cc
examples/vecellipt.cc
+2
-2
src/amdis/Assembler.inc.hpp
src/amdis/Assembler.inc.hpp
+1
-1
src/amdis/ProblemInstat.inc.hpp
src/amdis/ProblemInstat.inc.hpp
+1
-1
src/amdis/ProblemStat.hpp
src/amdis/ProblemStat.hpp
+3
-5
src/amdis/ProblemStat.inc.hpp
src/amdis/ProblemStat.inc.hpp
+1
-1
src/amdis/linear_algebra/DOFVectorBase.hpp
src/amdis/linear_algebra/DOFVectorBase.hpp
+4
-19
src/amdis/linear_algebra/istl/DOFMatrix.hpp
src/amdis/linear_algebra/istl/DOFMatrix.hpp
+1
-1
src/amdis/linear_algebra/mtl/DOFMatrix.hpp
src/amdis/linear_algebra/mtl/DOFMatrix.hpp
+58
-74
src/amdis/linear_algebra/mtl/DOFVector.hpp
src/amdis/linear_algebra/mtl/DOFVector.hpp
+23
-44
No files found.
examples/stokes0.cc
View file @
9e2dadcb
...
...
@@ -78,8 +78,8 @@ int main(int argc, char** argv)
// write matrix to file
mtl
::
io
::
matrix_market_ostream
out
(
"matrix_stokes0.mtx"
);
out
<<
prob
.
getSystemMatrix
().
getM
atrix
();
std
::
cout
<<
prob
.
getSystemMatrix
().
getM
atrix
()
<<
'\n'
;
out
<<
prob
.
getSystemMatrix
().
m
atrix
();
std
::
cout
<<
prob
.
getSystemMatrix
().
m
atrix
()
<<
'\n'
;
prob
.
solve
(
adaptInfo
);
...
...
examples/stokes1.cc
View file @
9e2dadcb
...
...
@@ -79,8 +79,8 @@ int main(int argc, char** argv)
// write matrix to file
mtl
::
io
::
matrix_market_ostream
out
(
"matrix_stokes1.mtx"
);
out
<<
prob
.
getSystemMatrix
().
getM
atrix
();
std
::
cout
<<
prob
.
getSystemMatrix
().
getM
atrix
()
<<
'\n'
;
out
<<
prob
.
getSystemMatrix
().
m
atrix
();
std
::
cout
<<
prob
.
getSystemMatrix
().
m
atrix
()
<<
'\n'
;
prob
.
solve
(
adaptInfo
);
...
...
examples/vecellipt.cc
View file @
9e2dadcb
...
...
@@ -41,9 +41,9 @@ int main(int argc, char** argv)
// write matrix to file
if
(
Parameters
::
get
<
int
>
(
"elliptMesh->global refinements"
).
value_or
(
0
)
<
4
)
{
mtl
::
io
::
matrix_market_ostream
out
(
"matrix.mtx"
);
out
<<
prob
.
getSystemMatrix
().
getM
atrix
();
out
<<
prob
.
getSystemMatrix
().
m
atrix
();
std
::
cout
<<
prob
.
getSystemMatrix
().
getM
atrix
()
<<
'\n'
;
std
::
cout
<<
prob
.
getSystemMatrix
().
m
atrix
()
<<
'\n'
;
}
prob
.
solve
(
adaptInfo
);
...
...
src/amdis/Assembler.inc.hpp
View file @
9e2dadcb
...
...
@@ -203,7 +203,7 @@ std::size_t Assembler<Traits>::finishMatrixVector(
});
});
return
matrix
.
getN
nz
();
return
matrix
.
n
nz
();
}
}
// end namespace AMDiS
src/amdis/ProblemInstat.inc.hpp
View file @
9e2dadcb
...
...
@@ -45,7 +45,7 @@ void ProblemInstat<Traits>::createUhOld()
if
(
oldSolution
)
warning
(
"oldSolution already created
\n
"
);
else
// create oldSolution
oldSolution
.
reset
(
new
SystemVector
(
problemStat
.
globalBasis
()
,
name
+
"_uOld"
));
oldSolution
.
reset
(
new
SystemVector
(
problemStat
.
globalBasis
()));
}
...
...
src/amdis/ProblemStat.hpp
View file @
9e2dadcb
...
...
@@ -275,9 +275,9 @@ namespace AMDiS
void
createMatricesAndVectors
()
{
systemMatrix_
=
std
::
make_shared
<
SystemMatrix
>
(
*
globalBasis_
,
*
globalBasis_
,
"mat"
);
solution_
=
std
::
make_shared
<
SystemVector
>
(
*
globalBasis_
,
"solution"
);
rhs_
=
std
::
make_shared
<
SystemVector
>
(
*
globalBasis_
,
"rhs"
);
systemMatrix_
=
std
::
make_shared
<
SystemMatrix
>
(
*
globalBasis_
,
*
globalBasis_
);
solution_
=
std
::
make_shared
<
SystemVector
>
(
*
globalBasis_
);
rhs_
=
std
::
make_shared
<
SystemVector
>
(
*
globalBasis_
);
AMDiS
::
forEachNode_
(
localView_
->
tree
(),
[
&
,
this
](
auto
const
&
node
,
auto
treePath
)
{
...
...
@@ -286,8 +286,6 @@ namespace AMDiS
for
(
std
::
size_t
j
=
0
;
j
<
estimates_
[
i
].
size
();
j
++
)
estimates_
[
i
][
j
]
=
0.0
;
// TODO: Remove when estimate() is implemented
});
rhs_
=
std
::
make_shared
<
SystemVector
>
(
*
globalBasis_
,
"rhs"
);
}
void
createSolver
()
...
...
src/amdis/ProblemStat.inc.hpp
View file @
9e2dadcb
...
...
@@ -281,7 +281,7 @@ solve(AdaptInfo& adaptInfo, bool createMatrixData, bool storeMatrixData)
solution_
->
compress
();
linearSolver_
->
solve
(
systemMatrix_
->
getM
atrix
(),
solution_
->
vector
(),
rhs_
->
vector
(),
linearSolver_
->
solve
(
systemMatrix_
->
m
atrix
(),
solution_
->
vector
(),
rhs_
->
vector
(),
solverInfo
);
if
(
solverInfo
.
getInfo
()
>
0
)
{
...
...
src/amdis/linear_algebra/DOFVectorBase.hpp
View file @
9e2dadcb
...
...
@@ -2,29 +2,14 @@
namespace
AMDiS
{
template
<
class
GlobalBasisType
>
class
DOFVectorBase
{
public:
using
GlobalBasis
=
GlobalBasisType
;
using
SizeType
=
std
::
size_
t
;
/// Virtual destructor
~
DOFVectorBase
()
=
defaul
t
;
DOFVectorBase
(
GlobalBasisType
const
&
basis
)
:
basis_
(
basis
)
{}
SizeType
size
()
const
{
return
basis_
.
dimension
();
}
GlobalBasis
const
&
basis
()
const
{
return
GlobalBasis
;
}
private:
GlobalBasis
const
&
basis_
;
/// Change dimension of DOFVector to dimension of basis
virtual
void
compress
()
=
0
;
};
}
// end namespace AMDiS
src/amdis/linear_algebra/istl/DOFMatrix.hpp
View file @
9e2dadcb
...
...
@@ -136,7 +136,7 @@ namespace AMDiS
initialized
=
false
;
}
std
::
size_t
getN
nz
()
std
::
size_t
n
nz
()
{
return
matrix
->
nonzeroes
();
}
...
...
src/amdis/linear_algebra/mtl/DOFMatrix.hpp
View file @
9e2dadcb
...
...
@@ -22,17 +22,17 @@ namespace AMDiS
{
/// \brief The basic container that stores a base matrix and a corresponding
/// row/column feSpace.
template
<
class
Row
FeSpace
Type
,
class
Col
FeSpace
Type
,
template
<
class
Row
Basis
Type
,
class
Col
Basis
Type
,
class
ValueType
=
double
>
class
DOFMatrix
{
public:
/// The type of the finite element space / basis of the row
using
Row
FeSpace
=
RowFeSpace
Type
;
using
Row
Basis
=
RowBasis
Type
;
/// The type of the finite element space / basis of the column
using
Col
FeSpace
=
ColFeSpace
Type
;
using
Col
Basis
=
ColBasis
Type
;
/// The matrix type of the underlying base matrix
using
BaseMatrix
=
mtl
::
compressed2D
<
ValueType
>
;
...
...
@@ -51,68 +51,58 @@ namespace AMDiS
public:
/// Constructor. Constructs new BaseMatrix.
DOFMatrix
(
RowFeSpace
const
&
rowFeSpace
,
ColFeSpace
const
&
colFeSpace
,
std
::
string
name
)
:
rowFeSpace
(
rowFeSpace
)
,
colFeSpace
(
colFeSpace
)
,
name
(
name
)
,
matrix
(
ClonablePtr
<
BaseMatrix
>::
make
())
DOFMatrix
(
RowBasis
const
&
rowBasis
,
ColBasis
const
&
colBasis
)
:
rowBasis_
(
&
rowBasis
)
,
colBasis_
(
&
colBasis
)
,
matrix_
(
ClonablePtr
<
BaseMatrix
>::
make
())
{}
/// Constructor. Takes pointer of data-matrix.
DOFMatrix
(
RowFeSpace
const
&
rowFeSpace
,
ColFeSpace
const
&
colFeSpace
,
std
::
string
name
,
DOFMatrix
(
RowBasis
const
&
rowBasis
,
ColBasis
const
&
colBasis
,
BaseMatrix
&
matrix_ref
)
:
rowFeSpace
(
rowFeSpace
)
,
colFeSpace
(
colFeSpace
)
,
name
(
name
)
,
matrix
(
matrix_ref
)
:
rowBasis_
(
&
rowBasis
)
,
colBasis_
(
&
colBasis
)
,
matrix_
(
matrix_ref
)
{}
/// Return the row-basis \ref row
FeSpace
of the matrix
Row
FeSpace
const
&
getRowFeSpace
()
const
/// Return the row-basis \ref row
Basis_
of the matrix
Row
Basis
const
&
rowBasis
()
const
{
return
row
FeSpace
;
return
*
row
Basis_
;
}
/// Return the col-basis \ref col
FeSpace
of the matrix
Col
FeSpace
const
&
getColFeSpace
()
const
/// Return the col-basis \ref col
Basis_
of the matrix
Col
Basis
const
&
colBasis
()
const
{
return
col
FeSpace
;
return
*
col
Basis_
;
}
/// Return a reference to the data-matrix \ref matrix
BaseMatrix
&
getM
atrix
()
BaseMatrix
&
m
atrix
()
{
assert
(
!
insertionMode
);
return
*
matrix
;
assert
(
!
insertionMode
_
);
return
*
matrix
_
;
}
/// Return a reference to the data-matrix \ref matrix
BaseMatrix
const
&
getM
atrix
()
const
BaseMatrix
const
&
m
atrix
()
const
{
assert
(
!
insertionMode
);
return
*
matrix
;
assert
(
!
insertionMode
_
);
return
*
matrix
_
;
}
/// Return the size of the row \ref feSpace
size_type
N
()
const
{
return
row
FeSpace
.
size
();
return
row
Basis_
->
size
();
}
/// Return the size of the column \ref feSpace
size_type
M
()
const
{
return
colFeSpace
.
size
();
}
/// Return the \ref name of this matrix
std
::
string
getName
()
const
{
return
name
;
return
colBasis_
->
size
();
}
...
...
@@ -125,34 +115,34 @@ namespace AMDiS
auto
operator
()(
FlatIndex
row
,
FlatIndex
col
)
{
size_type
r
=
row
[
0
],
c
=
col
[
0
];
test_exit_dbg
(
insertionMode
,
"Inserter not initilized!"
);
test_exit_dbg
(
insertionMode
_
,
"Inserter not initilized!"
);
test_exit_dbg
(
r
<
N
()
&&
c
<
M
()
,
"Indices out of range [0,"
,
N
(),
")x[0,"
,
M
(),
")"
);
return
(
*
inserter
)[
r
][
c
];
return
(
*
inserter
_
)[
r
][
c
];
}
auto
operator
()(
BlockIndex
row
,
BlockIndex
col
)
{
size_type
r
=
row
[
0
],
c
=
col
[
0
];
test_exit_dbg
(
insertionMode
,
"Inserter not initilized!"
);
test_exit_dbg
(
insertionMode
_
,
"Inserter not initilized!"
);
test_exit_dbg
(
r
<
N
()
&&
c
<
M
()
,
"Indices out of range [0,"
,
N
(),
")x[0,"
,
M
(),
")"
);
return
(
*
inserter
)[
r
][
c
];
return
(
*
inserter
_
)[
r
][
c
];
}
/// Create inserter. Assumes that no inserter is currently active on this matrix.
void
init
(
bool
prepareForInsertion
)
{
test_exit
(
!
insertionMode
&&
!
inserter
,
"Matrix already in insertion mode!"
);
test_exit
(
!
insertionMode
_
&&
!
inserter
_
,
"Matrix already in insertion mode!"
);
calculateSlotSize
();
matrix
->
change_dim
(
row
FeSpace
.
dimension
(),
col
FeSpace
.
dimension
());
test_exit
(
num_rows
(
*
matrix
)
==
row
FeSpace
.
dimension
()
&&
num_cols
(
*
matrix
)
==
col
FeSpace
.
dimension
(),
matrix
_
->
change_dim
(
row
Basis_
->
dimension
(),
col
Basis_
->
dimension
());
test_exit
(
num_rows
(
*
matrix
_
)
==
row
Basis_
->
dimension
()
&&
num_cols
(
*
matrix
_
)
==
col
Basis_
->
dimension
(),
"Wrong dimensions in matrix"
);
if
(
prepareForInsertion
)
{
set_to_zero
(
*
matrix
);
inserter
=
new
Inserter
(
*
matrix
,
slot
_s
ize
);
insertionMode
=
true
;
set_to_zero
(
*
matrix
_
);
inserter
_
=
new
Inserter
(
*
matrix
_
,
slot
S
ize
_
);
insertionMode
_
=
true
;
}
}
...
...
@@ -160,15 +150,15 @@ namespace AMDiS
/// final construction of the matrix.
void
finish
()
{
delete
inserter
;
inserter
=
NULL
;
insertionMode
=
false
;
delete
inserter
_
;
inserter
_
=
NULL
;
insertionMode
_
=
false
;
}
/// Return the number of nonzeros in the matrix
std
::
size_t
getN
nz
()
const
std
::
size_t
n
nz
()
const
{
return
matrix
->
nnz
();
return
matrix
_
->
nnz
();
}
/// \brief Deletes all rows with \p dirichletNodes != 0 and if \p apply is true, adds
...
...
@@ -178,9 +168,9 @@ namespace AMDiS
std
::
list
<
Triplet
<
value_type
>>
columns
;
// Define the property maps
auto
row
=
mtl
::
mat
::
row_map
(
*
matrix
);
auto
col
=
mtl
::
mat
::
col_map
(
*
matrix
);
auto
value
=
mtl
::
mat
::
value_map
(
*
matrix
);
auto
row
=
mtl
::
mat
::
row_map
(
*
matrix
_
);
auto
col
=
mtl
::
mat
::
col_map
(
*
matrix
_
);
auto
value
=
mtl
::
mat
::
value_map
(
*
matrix
_
);
// iterate over the matrix
#if 0
...
...
@@ -198,7 +188,7 @@ namespace AMDiS
}
#endif
for
(
auto
r
:
mtl
::
rows_of
(
*
matrix
))
{
// rows or columns
for
(
auto
r
:
mtl
::
rows_of
(
*
matrix
_
))
{
// rows or columns
if
(
dirichletNodes
[
r
.
value
()])
{
for
(
auto
i
:
mtl
::
nz_of
(
r
))
{
// non-zeros within
// set identity row
...
...
@@ -273,12 +263,12 @@ namespace AMDiS
// Estimates the slot-size used in the inserter to reserve enough space per row.
void
calculateSlotSize
()
{
slot
_s
ize
=
0
;
slot
S
ize
_
=
0
;
if
(
num_rows
(
*
matrix
)
!=
0
)
slot
_s
ize
=
int
(
double
(
matrix
->
nnz
())
/
num_rows
(
*
matrix
)
*
1.2
);
if
(
slot
_s
ize
<
MIN_NNZ_PER_ROW
)
slot
_s
ize
=
MIN_NNZ_PER_ROW
;
if
(
num_rows
(
*
matrix
_
)
!=
0
)
slot
S
ize
_
=
int
(
double
(
matrix
_
->
nnz
())
/
num_rows
(
*
matrix
_
)
*
1.2
);
if
(
slot
S
ize
_
<
MIN_NNZ_PER_ROW
)
slot
S
ize
_
=
MIN_NNZ_PER_ROW
;
}
private:
...
...
@@ -286,28 +276,22 @@ namespace AMDiS
static
constexpr
int
MIN_NNZ_PER_ROW
=
50
;
/// The finite element space / basis of the row
Row
FeSpace
const
&
row
FeSpace
;
Row
Basis
const
*
row
Basis_
;
/// The finite element space / basis of the column
ColFeSpace
const
&
colFeSpace
;
/// The name of the DOFMatrix
std
::
string
name
;
ColBasis
const
*
colBasis_
;
/// The data-matrix (can hold a new BaseMatrix or a pointer to external data
ClonablePtr
<
BaseMatrix
>
matrix
;
ClonablePtr
<
BaseMatrix
>
matrix
_
;
/// A pointer to the inserter. Created in \ref init and destroyed in \ref finish
Inserter
*
inserter
=
NULL
;
Inserter
*
inserter
_
=
nullptr
;
/// A flag that indicates whether the matrix is in insertion mode
bool
insertionMode
=
false
;
bool
insertionMode
_
=
false
;
/// The size of the slots used to insert values per row
int
slot_size
=
MIN_NNZ_PER_ROW
;
// friend class declarations
template
<
class
,
class
>
friend
class
SystemMatrix
;
int
slotSize_
=
MIN_NNZ_PER_ROW
;
};
}
// end namespace AMDiS
src/amdis/linear_algebra/mtl/DOFVector.hpp
View file @
9e2dadcb
...
...
@@ -11,14 +11,16 @@
#include <amdis/Output.hpp>
#include <amdis/common/ClonablePtr.hpp>
#include <amdis/common/ScalarTypes.hpp>
#include <amdis/linear_algebra/DOFVectorBase.hpp>
#include <amdis/linear_algebra/mtl/MTLDenseVector.hpp>
#include <amdis/utility/MultiIndex.hpp>
namespace
AMDiS
{
/// The basic container that stores a base vector and a corresponding basis
template
<
class
GlobalBasis
,
class
Rang
eType
=
double
>
template
<
class
GlobalBasis
,
class
Valu
eType
=
double
>
class
DOFVector
:
public
DOFVectorBase
{
using
Self
=
DOFVector
;
...
...
@@ -27,28 +29,25 @@ namespace AMDiS
using
Basis
=
GlobalBasis
;
/// The type of the base vector
using
BaseVector
=
MTLDenseVector
<
Rang
eType
>
;
using
BaseVector
=
MTLDenseVector
<
Valu
eType
>
;
/// The index/size - type
using
size_type
=
typename
GlobalBasis
::
size_type
;
/// The type of the elements of the DOFVector
using
rang
e_type
=
Rang
eType
;
using
valu
e_type
=
Valu
eType
;
/// Constructor. Constructs new BaseVector.
DOFVector
(
GlobalBasis
const
&
basis
,
std
::
string
name
)
DOFVector
(
GlobalBasis
const
&
basis
)
:
basis_
(
&
basis
)
,
name_
(
name
)
,
vector_
(
ClonablePtr
<
BaseVector
>::
make
())
{
compress
();
}
/// Constructor. Takes reference to existing BaseVector
DOFVector
(
GlobalBasis
const
&
basis
,
std
::
string
name
,
BaseVector
&
vector_ref
)
DOFVector
(
GlobalBasis
const
&
basis
,
BaseVector
&
vector_ref
)
:
basis_
(
&
basis
)
,
name_
(
name
)
,
vector_
(
vector_ref
)
{}
...
...
@@ -76,18 +75,12 @@ namespace AMDiS
return
basis_
->
dimension
();
}
/// Return the \ref name of this vector
std
::
string
name
()
const
{
return
name_
;
}
/// Resize the \ref vector to the size of the \ref basis.
void
compress
()
virtual
void
compress
()
override
{
if
(
num_rows
(
*
vector_
)
!=
size
())
{
resize
(
size
());
*
vector_
=
rang
e_type
(
0
);
*
vector_
=
valu
e_type
(
0
);
}
}
...
...
@@ -100,7 +93,7 @@ namespace AMDiS
/// Access the entry \p i of the \ref vector with read-access.
template
<
class
Index
>
rang
e_type
const
&
operator
[](
Index
idx
)
const
valu
e_type
const
&
operator
[](
Index
idx
)
const
{
auto
const
i
=
flatMultiIndex
(
idx
);
test_exit_dbg
(
i
<
num_rows
(
*
vector_
)
,
...
...
@@ -110,7 +103,7 @@ namespace AMDiS
/// Access the entry \p i of the \ref vector with write-access.
template
<
class
Index
>
rang
e_type
&
operator
[](
Index
idx
)
valu
e_type
&
operator
[](
Index
idx
)
{
auto
const
i
=
flatMultiIndex
(
idx
);
test_exit_dbg
(
i
<
num_rows
(
*
vector_
)
,
...
...
@@ -118,14 +111,6 @@ namespace AMDiS
return
(
*
vector_
)[
i
];
}
/// \brief interpolate a function \p f to the basis \ref basis and store the
/// coefficients in \ref vector.
template
<
class
F
>
void
interpol
(
F
&&
f
)
{
Dune
::
Functions
::
interpolate
(
*
basis_
,
*
this
,
std
::
forward
<
F
>
(
f
));
}
/// Scale each DOFVector by the factor \p s.
template
<
class
Scalar
>
std
::
enable_if_t
<
Concepts
::
Arithmetic
<
Scalar
>
,
Self
&>
...
...
@@ -154,41 +139,35 @@ namespace AMDiS
/// The finite element space / basis associated with the data vector
Basis
const
*
basis_
;
/// The name of the DOFVector (used in file-writing)
std
::
string
name_
;
/// The data-vector (can hold a new BaseVector or a pointer to external data
ClonablePtr
<
BaseVector
>
vector_
;
// friend class declarations
template
<
class
,
class
>
friend
class
SystemVector
;
};
#if DUNE_HAVE_CXX_CLASS_TEMPLATE_ARGUMENT_DEDUCTION
// Deduction rules
template
<
class
GlobalBasis
>
DOFVector
(
GlobalBasis
const
&
basis
,
std
::
string
name
)
DOFVector
(
GlobalBasis
const
&
basis
)
->
DOFVector
<
GlobalBasis
,
double
>
;
template
<
class
GlobalBasis
,
class
Rang
eType
>
DOFVector
(
GlobalBasis
const
&
basis
,
std
::
string
name
,
MTLDenseVector
<
Rang
eType
>&
coefficients
)
->
DOFVector
<
GlobalBasis
,
Rang
eType
>
;
template
<
class
GlobalBasis
,
class
Valu
eType
>
DOFVector
(
GlobalBasis
const
&
basis
,
MTLDenseVector
<
Valu
eType
>&
coefficients
)
->
DOFVector
<
GlobalBasis
,
Valu
eType
>
;
#endif
/// Constructor a dofvector from given basis and name
template
<
class
GlobalBasis
,
class
Rang
eType
=
double
>
DOFVector
<
GlobalBasis
,
Rang
eType
>
makeDOFVector
(
GlobalBasis
const
&
basis
,
std
::
string
name
)
template
<
class
GlobalBasis
,
class
Valu
eType
=
double
>
DOFVector
<
GlobalBasis
,
Valu
eType
>
makeDOFVector
(
GlobalBasis
const
&
basis
)
{
return
{
basis
,
name
};
return
{
basis
};
}
/// Constructor a dofvector from given basis, name, and coefficient vector
template
<
class
GlobalBasis
,
class
Rang
eType
>
DOFVector
<
GlobalBasis
,
Rang
eType
>
makeDOFVector
(
GlobalBasis
const
&
basis
,
std
::
string
name
,
MTLDenseVector
<
Rang
eType
>&
coefficients
)
template
<
class
GlobalBasis
,
class
Valu
eType
>
DOFVector
<
GlobalBasis
,
Valu
eType
>
makeDOFVector
(
GlobalBasis
const
&
basis
,
MTLDenseVector
<
Valu
eType
>&
coefficients
)
{
return
{
basis
,
name
,
coefficients
};
return
{
basis
,
coefficients
};
}
}
// end namespace AMDiS
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment