Actual source code: bvec3.c


  2: /*
  3:    Implements the sequential vectors.
  4: */

  6: #include <../src/vec/vec/impls/dvecimpl.h>
  7: /*MC
  8:    VECSEQ - VECSEQ = "seq" - The basic sequential vector

 10:    Options Database Keys:
 11: . -vec_type seq - sets the vector type to VECSEQ during a call to VecSetFromOptions()

 13:   Level: beginner

 15: .seealso: `VecCreate()`, `VecSetType()`, `VecSetFromOptions()`, `VecCreateSeqWithArray()`, `VECMPI`, `VecType`, `VecCreateMPI()`, `VecCreateSeq()`
 16: M*/

 18: #if defined(PETSC_USE_MIXED_PRECISION)
 19: extern PetscErrorCode VecCreate_Seq_Private(Vec, const float *);
 20: extern PetscErrorCode VecCreate_Seq_Private(Vec, const double *);
 21: #endif

 23: PETSC_EXTERN PetscErrorCode VecCreate_Seq(Vec V)
 24: {
 25:   Vec_Seq     *s;
 26:   PetscScalar *array;
 27:   PetscInt     n = PetscMax(V->map->n, V->map->N);
 28:   PetscMPIInt  size;

 30:   MPI_Comm_size(PetscObjectComm((PetscObject)V), &size);
 32: #if !defined(PETSC_USE_MIXED_PRECISION)
 33:   PetscCalloc1(n, &array);
 34:   VecCreate_Seq_Private(V, array);

 36:   s                  = (Vec_Seq *)V->data;
 37:   s->array_allocated = array;
 38: #else
 39:   switch (((PetscObject)V)->precision) {
 40:   case PETSC_PRECISION_SINGLE: {
 41:     float *aarray;

 43:     PetscCalloc1(n, &aarray);
 44:     VecCreate_Seq_Private(V, aarray);

 46:     s                  = (Vec_Seq *)V->data;
 47:     s->array_allocated = (PetscScalar *)aarray;
 48:   } break;
 49:   case PETSC_PRECISION_DOUBLE: {
 50:     double *aarray;

 52:     PetscCalloc1(n, &aarray);
 53:     VecCreate_Seq_Private(V, aarray);

 55:     s                  = (Vec_Seq *)V->data;
 56:     s->array_allocated = (PetscScalar *)aarray;
 57:   } break;
 58:   default:
 59:     SETERRQ(PetscObjectComm((PetscObject)V), PETSC_ERR_SUP, "No support for mixed precision %d", (int)(((PetscObject)V)->precision));
 60:   }
 61: #endif
 62:   return 0;
 63: }