Skip to content
Snippets Groups Projects
Commit 2b7551db authored by Oliver Sander's avatar Oliver Sander Committed by sander@FU-BERLIN.DE
Browse files

Make the internal data of TensorSSD private.

Add an operator() with three arguments to grant access
to the individual entries.

[[Imported from SVN: r7934]]
parent 1582f7dc
No related branches found
No related tags found
No related merge requests found
......@@ -433,7 +433,7 @@ evaluateDerivativeOfGradientWRTCoefficient(const Dune::FieldVector<ctype, dim>&
dvDwF = 0;
for (int i=0; i<embeddedDim; i++)
for (int j=0; j<embeddedDim; j++)
dvDwF.data_[i][j][coefficient] = mixedDerivative[i][j];
dvDwF(i, j, coefficient) = mixedDerivative[i][j];
// dFDq is not invertible, if the target space is embedded into a higher-dimensional
......@@ -462,16 +462,16 @@ evaluateDerivativeOfGradientWRTCoefficient(const Dune::FieldVector<ctype, dim>&
Dune::FieldMatrix<ctype,embeddedDim,embeddedDim> hesse = TargetSpace::secondDerivativeOfDistanceSquaredWRTSecondArgument(coefficients_[k], q);
for (int i=0; i<embeddedDim; i++)
for (int j=0; j<embeddedDim; j++)
dqdwF.data_[i][j][k] = hesse[i][j];
dqdwF(i, j, k) = hesse[i][j];
}
TensorSSD<double, embeddedDim,embeddedDim> dqdwF_times_dvq(coefficients_.size());
for (int i=0; i<embeddedDim; i++)
for (int j=0; j<embeddedDim; j++)
for (size_t k=0; k<coefficients_.size(); k++) {
dqdwF_times_dvq.data_[i][j][k] = 0;
dqdwF_times_dvq(i, j, k) = 0;
for (int l=0; l<embeddedDim; l++)
dqdwF_times_dvq.data_[i][j][k] += dqdwF.data_[l][j][k] * dvq[l][i];
dqdwF_times_dvq(i, j, k) += dqdwF(l, j, k) * dvq[l][i];
}
Tensor3<double, embeddedDim,embeddedDim,dim> foo;
......@@ -482,7 +482,7 @@ evaluateDerivativeOfGradientWRTCoefficient(const Dune::FieldVector<ctype, dim>&
for (int i=0; i<embeddedDim; i++)
for (int j=0; j<embeddedDim; j++)
for (int k=0; k<dim; k++)
foo[i][j][k] -= bar.data_[i][j][k];
foo[i][j][k] -= bar(i, j, k);
result = 0;
for (int i=0; i<embeddedDim; i++)
......
......@@ -41,6 +41,18 @@ public:
assert(false);
}
}
/** \brief Direct access to individual entries */
T& operator()(size_t i, size_t j, size_t k)
{
return data_[i][j][k];
}
/** \brief Direct const access to individual entries */
const T& operator()(size_t i, size_t j, size_t k) const
{
return data_[i][j][k];
}
/** \brief Assignment from scalar */
TensorSSD<T,N1,N2>& operator=(const T& scalar)
......@@ -84,6 +96,8 @@ public:
return result;
}
private:
// having the dynamic data type on the inside is kind of a stupid data layout
Dune::array<Dune::array<std::vector<T>, N2>, N1> data_;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment