diff --git a/Solver/dofManager.h b/Solver/dofManager.h index be34e9706df35e18da0795d13e4e219bdc57a2e2..9bec62daa61b47686b15321b08f8444887d98c09 100644 --- a/Solver/dofManager.h +++ b/Solver/dofManager.h @@ -317,19 +317,20 @@ class dofManager{ { _current->addToRightHandSide(NR[i], m(i)); } - else - { - typename std::map<Dof,DofAffineConstraint<dataVec> >::iterator itConstraint; - itConstraint = constraints.find(R[i]); - if (itConstraint != constraints.end()) - { - for (unsigned j=0;j<(itConstraint->second).linear.size();j++) - { - std::map<Dof, int>::iterator itC = unknown.find((itConstraint->second).linear[j].first); // lin dep in unknown ?! - _current->addToRightHandSide(itC->second, m(i)*(itConstraint->second).linear[j].second); - } - } - } + else + { + typename std::map<Dof,DofAffineConstraint<dataVec> >::iterator itConstraint; + itConstraint = constraints.find(R[i]); + if (itConstraint != constraints.end()) + { + for (unsigned j=0;j<(itConstraint->second).linear.size();j++) + { + dataMat tmp; + dofTraits<T>::gemm(tmp,(itConstraint->second).linear[j].second,m(i), 1, 0); + assemble((itConstraint->second).linear[j].first,tmp); + } + } + } } } @@ -394,6 +395,20 @@ class dofManager{ if(itR != unknown.end()){ _current->addToRightHandSide(itR->second, value); } + else + { + typename std::map<Dof,DofAffineConstraint<dataVec> >::iterator itConstraint; + itConstraint = constraints.find(R); + if (itConstraint != constraints.end()) + { + for (unsigned j=0;j<(itConstraint->second).linear.size();j++) + { + dataMat tmp; + dofTraits<T>::gemm(tmp,(itConstraint->second).linear[j].second,value, 1, 0); + assemble((itConstraint->second).linear[j].first,tmp); + } + } + } } inline void assemble(int entR, int typeR, const dataMat &value) {