Merge pull request #291 from blattms/fixes-issue-290

Fixes raisal of assertion in Eigen because of empty vector and matrices. Fixes #290
This commit is contained in:
Atgeirr Flø Rasmussen 2015-01-30 15:12:48 +01:00
commit e6a053a392

View File

@ -148,9 +148,21 @@ namespace Opm
}
// ... then set the one corrresponding to this variable to identity.
assert(blocksizes[index] == num_elem);
jac[index].reserve(Eigen::VectorXi::Constant(val.size(), 1));
for (typename M::Index row = 0; row < val.size(); ++row) {
jac[index].insert(row, row) = Scalar(1.0);
if(val.size()>0)
{
// if val is empty the following will run into an assertion
// with Eigen
jac[index].reserve(Eigen::VectorXi::Constant(val.size(), 1));
for (typename M::Index row = 0; row < val.size(); ++row) {
jac[index].insert(row, row) = Scalar(1.0);
}
}
else
{
// Do some check. Empty jacobian only make sense for empty val.
for (int i = 0; i < num_blocks; ++i) {
assert(jac[i].size()==0);
}
}
return AutoDiffBlock(val, jac);
}