diff --git a/opm/autodiff/AutoDiffBlock.hpp b/opm/autodiff/AutoDiffBlock.hpp index c512a0507..061316314 100644 --- a/opm/autodiff/AutoDiffBlock.hpp +++ b/opm/autodiff/AutoDiffBlock.hpp @@ -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 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 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::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]); } diff --git a/opm/autodiff/BlackoilModelBase_impl.hpp b/opm/autodiff/BlackoilModelBase_impl.hpp index 41a5e7424..6aaa3fae1 100644 --- a/opm/autodiff/BlackoilModelBase_impl.hpp +++ b/opm/autodiff/BlackoilModelBase_impl.hpp @@ -880,6 +880,7 @@ namespace detail { trans_all << transi, trans_nnc; const std::vector kr = asImpl().computeRelPerm(state); +#pragma omp parallel for schedule(static) for (int phaseIdx = 0; phaseIdx < fluid_.numPhases(); ++phaseIdx) { asImpl().computeMassFlux(phaseIdx, trans_all, kr[canph_[phaseIdx]], state.canonical_phase_pressures[canph_[phaseIdx]], state); @@ -1259,6 +1260,7 @@ namespace detail { const int nw = wells.number_of_wells; ADB::V retval = ADB::V::Zero(nw); +#pragma omp parallel for schedule(static) for (int i=0; iisActive()) { V pm(n); V dpm(n); +#pragma omp parallel for schedule(static) for (int i = 0; i < n; ++i) { pm[i] = rock_comp_props_->poroMult(p.value()[i]); dpm[i] = rock_comp_props_->poroMultDeriv(p.value()[i]); @@ -2685,6 +2690,7 @@ namespace detail { ADB::M dpm_diag(dpm.matrix().asDiagonal()); const int num_blocks = p.numBlocks(); std::vector jacs(num_blocks); +#pragma omp parallel for schedule(dynamic) for (int block = 0; block < num_blocks; ++block) { fastSparseProduct(dpm_diag, p.derivative()[block], jacs[block]); } @@ -2706,6 +2712,7 @@ namespace detail { if (rock_comp_props_ && rock_comp_props_->isActive()) { V tm(n); V dtm(n); +#pragma omp parallel for schedule(static) for (int i = 0; i < n; ++i) { tm[i] = rock_comp_props_->transMult(p.value()[i]); dtm[i] = rock_comp_props_->transMultDeriv(p.value()[i]); @@ -2713,6 +2720,7 @@ namespace detail { ADB::M dtm_diag(dtm.matrix().asDiagonal()); const int num_blocks = p.numBlocks(); std::vector jacs(num_blocks); +#pragma omp parallel for schedule(dynamic) for (int block = 0; block < num_blocks; ++block) { fastSparseProduct(dtm_diag, p.derivative()[block], jacs[block]); }