Actual source code: pvec2.c

      1: /*
      2:      Code for some of the parallel vector primitives.
      3: */
      4: #include <../src/vec/vec/impls/mpi/pvecimpl.h>
      5: #include <petscblaslapack.h>

      7: PetscErrorCode VecDot_MPI(Vec xin, Vec yin, PetscScalar *z)
      8: {
      9:   PetscFunctionBegin;
     10:   PetscCall(VecXDot_MPI_Default(xin, yin, z, VecDot_Seq));
     11:   PetscFunctionReturn(PETSC_SUCCESS);
     12: }

     14: PetscErrorCode VecTDot_MPI(Vec xin, Vec yin, PetscScalar *z)
     15: {
     16:   PetscFunctionBegin;
     17:   PetscCall(VecXDot_MPI_Default(xin, yin, z, VecTDot_Seq));
     18:   PetscFunctionReturn(PETSC_SUCCESS);
     19: }

     21: PetscErrorCode VecMDot_MPI(Vec xin, PetscInt nv, const Vec y[], PetscScalar *z)
     22: {
     23:   PetscFunctionBegin;
     24:   PetscCall(VecMXDot_MPI_Default(xin, nv, y, z, VecMDot_Seq));
     25:   PetscFunctionReturn(PETSC_SUCCESS);
     26: }

     28: PetscErrorCode VecMDot_MPI_GEMV(Vec xin, PetscInt nv, const Vec y[], PetscScalar *z)
     29: {
     30:   PetscFunctionBegin;
     31:   PetscCall(VecMXDot_MPI_Default(xin, nv, y, z, VecMDot_Seq_GEMV));
     32:   PetscFunctionReturn(PETSC_SUCCESS);
     33: }

     35: PetscErrorCode VecMTDot_MPI(Vec xin, PetscInt nv, const Vec y[], PetscScalar *z)
     36: {
     37:   PetscFunctionBegin;
     38:   PetscCall(VecMXDot_MPI_Default(xin, nv, y, z, VecMTDot_Seq));
     39:   PetscFunctionReturn(PETSC_SUCCESS);
     40: }

     42: PetscErrorCode VecMTDot_MPI_GEMV(Vec xin, PetscInt nv, const Vec y[], PetscScalar *z)
     43: {
     44:   PetscFunctionBegin;
     45:   PetscCall(VecMXDot_MPI_Default(xin, nv, y, z, VecMTDot_Seq_GEMV));
     46:   PetscFunctionReturn(PETSC_SUCCESS);
     47: }

     49: PetscErrorCode VecNorm_MPI(Vec xin, NormType type, PetscReal *z)
     50: {
     51:   PetscFunctionBegin;
     52:   PetscCall(VecNorm_MPI_Default(xin, type, z, VecNorm_Seq));
     53:   PetscFunctionReturn(PETSC_SUCCESS);
     54: }

     56: PetscErrorCode VecMax_MPI(Vec xin, PetscInt *idx, PetscReal *z)
     57: {
     58:   const MPI_Op ops[] = {MPIU_MAXLOC, MPIU_MAX};

     60:   PetscFunctionBegin;
     61:   PetscCall(VecMinMax_MPI_Default(xin, idx, z, VecMax_Seq, ops));
     62:   PetscFunctionReturn(PETSC_SUCCESS);
     63: }

     65: PetscErrorCode VecMin_MPI(Vec xin, PetscInt *idx, PetscReal *z)
     66: {
     67:   const MPI_Op ops[] = {MPIU_MINLOC, MPIU_MIN};

     69:   PetscFunctionBegin;
     70:   PetscCall(VecMinMax_MPI_Default(xin, idx, z, VecMin_Seq, ops));
     71:   PetscFunctionReturn(PETSC_SUCCESS);
     72: }

     74: PetscErrorCode VecMaxPointwiseDivide_MPI(Vec xin, Vec yin, PetscReal *z)
     75: {
     76:   PetscFunctionBegin;
     77:   PetscCall(VecMaxPointwiseDivide_Seq(xin, yin, z));
     78:   PetscCallMPI(MPIU_Allreduce(MPI_IN_PLACE, z, 1, MPIU_REAL, MPIU_MAX, PetscObjectComm((PetscObject)xin)));
     79:   PetscFunctionReturn(PETSC_SUCCESS);
     80: }