Exemplo n.º 1
0
static PetscErrorCode VecMaxPointwiseDivide_Nest(Vec x,Vec y,PetscReal *max)
{
  Vec_Nest       *bx = (Vec_Nest*)x->data;
  Vec_Nest       *by = (Vec_Nest*)y->data;
  PetscInt       i,nr;
  PetscReal      local_max,m;
  PetscErrorCode ierr;

  PetscFunctionBegin;
  VecNestCheckCompatible2(x,1,y,2);
  nr = bx->nb;
  m  = 0.0;
  for (i=0; i<nr; i++) {
    ierr = VecMaxPointwiseDivide(bx->v[i],by->v[i],&local_max);CHKERRQ(ierr);
    if (local_max > m) m = local_max;
  }
  *max = m;
  PetscFunctionReturn(0);
}
Exemplo n.º 2
0
PetscErrorCode VecMaxPointwiseDivide_MultiVec(Vec x, Vec y, PetscScalar* max)
{
#if !defined(NDEBUG)
    TBOX_ASSERT(x);
    TBOX_ASSERT(y);
#endif
    Vec_MultiVec* mx = static_cast<Vec_MultiVec*>(x->data);
    Vec_MultiVec* my = static_cast<Vec_MultiVec*>(y->data);
#if !defined(NDEBUG)
    TBOX_ASSERT(mx);
    TBOX_ASSERT(my);
    TBOX_ASSERT(mx->n == my->n);
#endif
    PetscErrorCode ierr;
    *max = PETSC_MIN_REAL;
    for (PetscInt k = 0; k < mx->n; ++k)
    {
        PetscScalar component_max;
        ierr = VecMaxPointwiseDivide(mx->array[k], my->array[k], &component_max);
        CHKERRQ(ierr);
        *max = std::max(*max, component_max);
    }
    PetscFunctionReturn(0);
} // VecMaxPointwiseDivide_MultiVec