Merge pull request #454 from babrodtk/openpm_experiment

Parallel assembly (partial)
This commit is contained in:
Atgeirr Flø Rasmussen
2015-10-19 15:32:50 +02:00
4 changed files with 35 additions and 0 deletions

View File

@@ -223,6 +223,7 @@ namespace Opm
assert (value().size() == rhs.value().size());
const int num_blocks = numBlocks();
#pragma omp parallel for schedule(static)
for (int block = 0; block < num_blocks; ++block) {
assert(jac_[block].rows() == rhs.jac_[block].rows());
assert(jac_[block].cols() == rhs.jac_[block].cols());
@@ -241,6 +242,7 @@ namespace Opm
if (jac_.empty()) {
const int num_blocks = rhs.numBlocks();
jac_.resize(num_blocks);
#pragma omp parallel for schedule(static)
for (int block = 0; block < num_blocks; ++block) {
jac_[block] = rhs.jac_[block] * (-1.0);
}
@@ -249,6 +251,7 @@ namespace Opm
assert (value().size() == rhs.value().size());
const int num_blocks = numBlocks();
#pragma omp parallel for schedule(static)
for (int block = 0; block < num_blocks; ++block) {
assert(jac_[block].rows() == rhs.jac_[block].rows());
assert(jac_[block].cols() == rhs.jac_[block].cols());
@@ -276,6 +279,7 @@ namespace Opm
std::vector<M> jac = jac_;
assert(numBlocks() == rhs.numBlocks());
int num_blocks = numBlocks();
#pragma omp parallel for schedule(static)
for (int block = 0; block < num_blocks; ++block) {
assert(jac[block].rows() == rhs.jac_[block].rows());
assert(jac[block].cols() == rhs.jac_[block].cols());
@@ -299,6 +303,7 @@ namespace Opm
std::vector<M> jac = jac_;
assert(numBlocks() == rhs.numBlocks());
int num_blocks = numBlocks();
#pragma omp parallel for schedule(static)
for (int block = 0; block < num_blocks; ++block) {
assert(jac[block].rows() == rhs.jac_[block].rows());
assert(jac[block].cols() == rhs.jac_[block].cols());
@@ -324,6 +329,7 @@ namespace Opm
assert(numBlocks() == rhs.numBlocks());
M D1(val_.matrix().asDiagonal());
M D2(rhs.val_.matrix().asDiagonal());
#pragma omp parallel for schedule(dynamic)
for (int block = 0; block < num_blocks; ++block) {
assert(jac_[block].rows() == rhs.jac_[block].rows());
assert(jac_[block].cols() == rhs.jac_[block].cols());
@@ -360,6 +366,7 @@ namespace Opm
M D1(val_.matrix().asDiagonal());
M D2(rhs.val_.matrix().asDiagonal());
M D3((1.0/(rhs.val_*rhs.val_)).matrix().asDiagonal());
#pragma omp parallel for schedule(dynamic)
for (int block = 0; block < num_blocks; ++block) {
assert(jac_[block].rows() == rhs.jac_[block].rows());
assert(jac_[block].cols() == rhs.jac_[block].cols());
@@ -484,6 +491,7 @@ namespace Opm
int num_blocks = rhs.numBlocks();
std::vector<typename AutoDiffBlock<Scalar>::M> jac(num_blocks);
assert(lhs.cols() == rhs.value().rows());
#pragma omp parallel for schedule(dynamic)
for (int block = 0; block < num_blocks; ++block) {
fastSparseProduct(lhs, rhs.derivative()[block], jac[block]);
}