PetscErrorCode VecNorm_local_SAMRAI(Vec x, NormType type, PetscScalar* val) { IBTK_TIMER_START(t_vec_norm_local); #if !defined(NDEBUG) TBOX_ASSERT(x); #endif static const bool local_only = true; if (type == NORM_1) { *val = NormOps::L1Norm(PSVR_CAST2(x), local_only); } else if (type == NORM_2) { *val = NormOps::L2Norm(PSVR_CAST2(x), local_only); } else if (type == NORM_INFINITY) { *val = NormOps::maxNorm(PSVR_CAST2(x), local_only); } else if (type == NORM_1_AND_2) { val[0] = NormOps::L1Norm(PSVR_CAST2(x), local_only); val[1] = NormOps::L2Norm(PSVR_CAST2(x), local_only); } else { TBOX_ERROR("PETScSAMRAIVectorReal::norm()\n" << " vector norm type " << static_cast<int>(type) << " unsupported" << std::endl); } IBTK_TIMER_STOP(t_vec_norm_local); PetscFunctionReturn(0); } // VecNorm_local
PetscErrorCode VecAYPX_SAMRAI(Vec y, const PetscScalar alpha, Vec x) { IBTK_TIMER_START(t_vec_aypx); #if !defined(NDEBUG) TBOX_ASSERT(x); TBOX_ASSERT(y); #endif static const bool interior_only = false; if (MathUtilities<double>::equalEps(alpha, 1.0)) { PSVR_CAST2(y)->add(PSVR_CAST2(x), PSVR_CAST2(y), interior_only); } else if (MathUtilities<double>::equalEps(alpha, -1.0)) { PSVR_CAST2(y)->subtract(PSVR_CAST2(x), PSVR_CAST2(y), interior_only); } else { PSVR_CAST2(y)->axpy(alpha, PSVR_CAST2(y), PSVR_CAST2(x), interior_only); } int ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(y)); IBTK_CHKERRQ(ierr); IBTK_TIMER_STOP(t_vec_aypx); PetscFunctionReturn(0); } // VecAYPX
PetscErrorCode VecMAXPY_SAMRAI( Vec y, PetscInt nv, const PetscScalar* alpha, Vec* x) { IBTK_TIMER_START(t_vec_maxpy); #ifdef DEBUG_CHECK_ASSERTIONS TBOX_ASSERT(y != PETSC_NULL); for (PetscInt i = 0; i < nv; ++i) { TBOX_ASSERT(x[i] != PETSC_NULL); } #endif static const bool interior_only = false; for (PetscInt i = 0; i < nv; ++i) { if (MathUtilities<double>::equalEps(alpha[i],1.0)) { PSVR_CAST2(y)->add(PSVR_CAST2(x[i]), PSVR_CAST2(y), interior_only); } else if (MathUtilities<double>::equalEps(alpha[i],-1.0)) { PSVR_CAST2(y)->subtract(PSVR_CAST2(y), PSVR_CAST2(x[i]), interior_only); } else { PSVR_CAST2(y)->axpy(alpha[i], PSVR_CAST2(x[i]), PSVR_CAST2(y), interior_only); } } int ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(y)); IBTK_CHKERRQ(ierr); IBTK_TIMER_STOP(t_vec_maxpy); PetscFunctionReturn(0); }// VecMAXPY
PetscErrorCode VecWAXPY_SAMRAI( Vec w, PetscScalar alpha, Vec x, Vec y) { IBTK_TIMER_START(t_vec_waxpy); #ifdef DEBUG_CHECK_ASSERTIONS TBOX_ASSERT(x != PETSC_NULL); TBOX_ASSERT(y != PETSC_NULL); TBOX_ASSERT(w != PETSC_NULL); #endif static const bool interior_only = false; if (MathUtilities<double>::equalEps(alpha,1.0)) { PSVR_CAST2(w)->add(PSVR_CAST2(x), PSVR_CAST2(y), interior_only); } else if (MathUtilities<double>::equalEps(alpha,-1.0)) { PSVR_CAST2(w)->subtract(PSVR_CAST2(y), PSVR_CAST2(x), interior_only); } else { PSVR_CAST2(w)->axpy(alpha, PSVR_CAST2(x), PSVR_CAST2(y), interior_only); } int ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(w)); IBTK_CHKERRQ(ierr); IBTK_TIMER_STOP(t_vec_waxpy); PetscFunctionReturn(0); }// VecWAXPY
PetscErrorCode VecMaxPointwiseDivide_SAMRAI(Vec x, Vec y, PetscScalar* max) { IBTK_TIMER_START(t_vec_max_pointwise_divide); #if !defined(NDEBUG) TBOX_ASSERT(x); TBOX_ASSERT(y); #endif *max = PSVR_CAST2(x)->maxPointwiseDivide(PSVR_CAST2(y)); IBTK_TIMER_STOP(t_vec_max_pointwise_divide); PetscFunctionReturn(0); } // VecMaxPointwiseDivide
PetscErrorCode VecTDot_SAMRAI(Vec x, Vec y, PetscScalar* val) { IBTK_TIMER_START(t_vec_t_dot); #if !defined(NDEBUG) TBOX_ASSERT(x); TBOX_ASSERT(y); #endif *val = PSVR_CAST2(x)->dot(PSVR_CAST2(y)); IBTK_TIMER_STOP(t_vec_t_dot); PetscFunctionReturn(0); } // VecTDot
PetscErrorCode VecDotNorm2_SAMRAI(Vec s, Vec t, PetscScalar* dp, PetscScalar* nm) { IBTK_TIMER_START(t_vec_dot_norm2); #if !defined(NDEBUG) TBOX_ASSERT(s); TBOX_ASSERT(t); #endif *dp = PSVR_CAST2(s)->dot(PSVR_CAST2(t)); *nm = PSVR_CAST2(t)->dot(PSVR_CAST2(t)); IBTK_TIMER_STOP(t_vec_dot_norm2); PetscFunctionReturn(0); } // VecDotNorm2_SAMRAI
PetscErrorCode VecTDot_local_SAMRAI(Vec x, Vec y, PetscScalar* val) { IBTK_TIMER_START(t_vec_t_dot_local); #if !defined(NDEBUG) TBOX_ASSERT(x); TBOX_ASSERT(y); #endif static const bool local_only = true; *val = PSVR_CAST2(x)->dot(PSVR_CAST2(y), local_only); IBTK_TIMER_STOP(t_vec_t_dot_local); PetscFunctionReturn(0); } // VecTDot_local
PetscErrorCode VecScale_SAMRAI(Vec x, PetscScalar alpha) { IBTK_TIMER_START(t_vec_scale); #if !defined(NDEBUG) TBOX_ASSERT(x); #endif static const bool interior_only = false; PSVR_CAST2(x)->scale(alpha, PSVR_CAST2(x), interior_only); int ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(x)); IBTK_CHKERRQ(ierr); IBTK_TIMER_STOP(t_vec_scale); PetscFunctionReturn(0); } // VecScale
PetscErrorCode VecCopy_SAMRAI(Vec x, Vec y) { IBTK_TIMER_START(t_vec_copy); #if !defined(NDEBUG) TBOX_ASSERT(x); TBOX_ASSERT(y); #endif static const bool interior_only = false; PSVR_CAST2(y)->copyVector(PSVR_CAST2(x), interior_only); int ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(y)); IBTK_CHKERRQ(ierr); IBTK_TIMER_STOP(t_vec_copy); PetscFunctionReturn(0); } // VecCopy
PetscErrorCode VecTDot_SAMRAI( Vec x, Vec y, PetscScalar* val) { IBTK_TIMER_START(t_vec_t_dot); #ifdef DEBUG_CHECK_ASSERTIONS TBOX_ASSERT(x != PETSC_NULL); TBOX_ASSERT(y != PETSC_NULL); #endif *val = PSVR_CAST2(x)->dot(PSVR_CAST2(y)); IBTK_TIMER_STOP(t_vec_t_dot); PetscFunctionReturn(0); }// VecTDot
PetscErrorCode VecPointwiseDivide_SAMRAI(Vec w, Vec x, Vec y) { IBTK_TIMER_START(t_vec_pointwise_divide); #if !defined(NDEBUG) TBOX_ASSERT(x); TBOX_ASSERT(y); TBOX_ASSERT(w); #endif static const bool interior_only = false; PSVR_CAST2(w)->divide(PSVR_CAST2(x), PSVR_CAST2(y), interior_only); int ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(w)); IBTK_CHKERRQ(ierr); IBTK_TIMER_STOP(t_vec_pointwise_divide); PetscFunctionReturn(0); } // VecPointwiseDivide
PetscErrorCode VecMaxPointwiseDivide_SAMRAI( Vec x, Vec y, PetscScalar* max) { IBTK_TIMER_START(t_vec_max_pointwise_divide); #ifdef DEBUG_CHECK_ASSERTIONS TBOX_ASSERT(x != PETSC_NULL); TBOX_ASSERT(y != PETSC_NULL); #endif *max = PSVR_CAST2(x)->maxPointwiseDivide(PSVR_CAST2(y)); IBTK_TIMER_STOP(t_vec_max_pointwise_divide); PetscFunctionReturn(0); }// VecMaxPointwiseDivide
PetscErrorCode VecDot_local_SAMRAI( Vec x, Vec y, PetscScalar* val) { IBTK_TIMER_START(t_vec_dot_local); #ifdef DEBUG_CHECK_ASSERTIONS TBOX_ASSERT(x != PETSC_NULL); TBOX_ASSERT(y != PETSC_NULL); #endif static const bool local_only = true; *val = PSVR_CAST2(x)->dot(PSVR_CAST2(y), local_only); IBTK_TIMER_STOP(t_vec_dot_local); PetscFunctionReturn(0); }// VecDot_local
PetscErrorCode VecSwap_SAMRAI(Vec x, Vec y) { IBTK_TIMER_START(t_vec_swap); #if !defined(NDEBUG) TBOX_ASSERT(x); TBOX_ASSERT(y); #endif PSVR_CAST2(x)->swapVectors(PSVR_CAST2(y)); int ierr; ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(x)); IBTK_CHKERRQ(ierr); ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(y)); IBTK_CHKERRQ(ierr); IBTK_TIMER_STOP(t_vec_swap); PetscFunctionReturn(0); } // VecSwap
PetscErrorCode VecDotNorm2_SAMRAI( Vec s, Vec t, PetscScalar* dp, PetscScalar* nm) { IBTK_TIMER_START(t_vec_dot_norm2); #ifdef DEBUG_CHECK_ASSERTIONS TBOX_ASSERT(s != PETSC_NULL); TBOX_ASSERT(t != PETSC_NULL); #endif *dp = PSVR_CAST2(s)->dot(PSVR_CAST2(t)); *nm = PSVR_CAST2(t)->dot(PSVR_CAST2(t)); IBTK_TIMER_STOP(t_vec_dot_norm2); PetscFunctionReturn(0); }// VecDotNorm2_SAMRAI
PetscErrorCode VecPointwiseMult_SAMRAI( Vec w, Vec x, Vec y) { IBTK_TIMER_START(t_vec_pointwise_mult); #ifdef DEBUG_CHECK_ASSERTIONS TBOX_ASSERT(x != PETSC_NULL); TBOX_ASSERT(y != PETSC_NULL); TBOX_ASSERT(w != PETSC_NULL); #endif static const bool interior_only = false; PSVR_CAST2(w)->multiply(PSVR_CAST2(x), PSVR_CAST2(y), interior_only); int ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(w)); IBTK_CHKERRQ(ierr); IBTK_TIMER_STOP(t_vec_pointwise_mult); PetscFunctionReturn(0); }// VecPointwiseMult
PetscErrorCode VecMTDot_local_SAMRAI(Vec x, PetscInt nv, const Vec* y, PetscScalar* val) { IBTK_TIMER_START(t_vec_m_t_dot_local); #if !defined(NDEBUG) TBOX_ASSERT(x); for (PetscInt i = 0; i < nv; ++i) { TBOX_ASSERT(y[i]); } #endif static const bool local_only = true; for (PetscInt i = 0; i < nv; ++i) { val[i] = PSVR_CAST2(x)->dot(PSVR_CAST2(y[i]), local_only); } IBTK_TIMER_STOP(t_vec_m_t_dot_local); PetscFunctionReturn(0); } // VecMTDot_local
PetscErrorCode VecMin_SAMRAI(Vec x, PetscInt* p, PetscScalar* val) { IBTK_TIMER_START(t_vec_min); #if !defined(NDEBUG) TBOX_ASSERT(x); #endif *p = -1; *val = PSVR_CAST2(x)->min(); IBTK_TIMER_STOP(t_vec_min); PetscFunctionReturn(0); } // VecMin
PetscErrorCode VecNorm_SAMRAI( Vec x, NormType type, PetscScalar* val) { IBTK_TIMER_START(t_vec_norm); #ifdef DEBUG_CHECK_ASSERTIONS TBOX_ASSERT(x != PETSC_NULL); #endif if (type == NORM_1) { *val = NormOps::L1Norm(PSVR_CAST2(x)); } else if (type == NORM_2) { *val = NormOps::L2Norm(PSVR_CAST2(x)); } else if (type == NORM_INFINITY) { *val = NormOps::maxNorm(PSVR_CAST2(x)); } else if (type == NORM_1_AND_2) { static const bool local_only = true; val[0] = NormOps::L1Norm(PSVR_CAST2(x), local_only); val[1] = NormOps::L2Norm(PSVR_CAST2(x), local_only); val[1] = val[1]*val[1]; SAMRAI_MPI::sumReduction(val, 2); val[1] = std::sqrt(val[1]); } else { TBOX_ERROR("PETScSAMRAIVectorReal::norm()\n" << " vector norm type " << static_cast<int>(type) << " unsupported" << std::endl); } IBTK_TIMER_STOP(t_vec_norm); PetscFunctionReturn(0); }// VecNorm
PetscErrorCode VecMDot_local_SAMRAI( Vec x, PetscInt nv, const Vec* y, PetscScalar* val) { IBTK_TIMER_START(t_vec_m_dot_local); #ifdef DEBUG_CHECK_ASSERTIONS TBOX_ASSERT(x != PETSC_NULL); for (PetscInt i = 0; i < nv; ++i) { TBOX_ASSERT(y[i] != PETSC_NULL); } #endif static const bool local_only = true; for (PetscInt i = 0; i < nv; ++i) { val[i] = PSVR_CAST2(x)->dot(PSVR_CAST2(y[i]), local_only); } IBTK_TIMER_STOP(t_vec_m_dot_local); PetscFunctionReturn(0); }// VecMDot_local
PetscErrorCode VecMin_SAMRAI( Vec x, PetscInt* p, PetscScalar* val) { IBTK_TIMER_START(t_vec_min); #ifdef DEBUG_CHECK_ASSERTIONS TBOX_ASSERT(x != PETSC_NULL); #endif *p = -1; *val = PSVR_CAST2(x)->min(); IBTK_TIMER_STOP(t_vec_min); PetscFunctionReturn(0); }// VecMin
PetscErrorCode VecSet_SAMRAI( Vec x, PetscScalar alpha) { IBTK_TIMER_START(t_vec_set); #ifdef DEBUG_CHECK_ASSERTIONS TBOX_ASSERT(x != PETSC_NULL); #endif static const bool interior_only = false; PSVR_CAST2(x)->setToScalar(alpha, interior_only); int ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(x)); IBTK_CHKERRQ(ierr); IBTK_TIMER_STOP(t_vec_set); PetscFunctionReturn(0); }// VecSet
PetscErrorCode VecSetRandom_SAMRAI(Vec x, PetscRandom rctx) { IBTK_TIMER_START(t_vec_set_random); #if !defined(NDEBUG) TBOX_ASSERT(x); #endif PetscScalar lo, hi; int ierr; ierr = PetscRandomGetInterval(rctx, &lo, &hi); IBTK_CHKERRQ(ierr); PSVR_CAST2(x)->setRandomValues(hi - lo, lo); ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(x)); IBTK_CHKERRQ(ierr); IBTK_TIMER_STOP(t_vec_set_random); PetscFunctionReturn(0); } // VecSetRandom
PetscErrorCode VecAXPBYPCZ_SAMRAI(Vec z, PetscScalar alpha, PetscScalar beta, PetscScalar gamma, Vec x, Vec y) { IBTK_TIMER_START(t_vec_axpbypcz); #if !defined(NDEBUG) TBOX_ASSERT(x); TBOX_ASSERT(y); TBOX_ASSERT(z); #endif static const bool interior_only = false; PSVR_CAST2(z)->linearSum(alpha, PSVR_CAST2(x), gamma, PSVR_CAST2(z), interior_only); PSVR_CAST2(z)->axpy(beta, PSVR_CAST2(y), PSVR_CAST2(z), interior_only); int ierr = PetscObjectStateIncrease(reinterpret_cast<PetscObject>(z)); IBTK_CHKERRQ(ierr); IBTK_TIMER_STOP(t_vec_axpbypcz); PetscFunctionReturn(0); } // VecAXPBYPCZ