Actual source code: vnake.c

  1: /*$Id: vnake.c,v 1.24 2001/03/23 23:21:22 balay Exp $*/

 3:  #include src/vec/vecimpl.h

  5: extern PetscFList VecList;

  7: /*@C
  8:    VecCreate - Creates an empty vector object. The type can then
  9:    be set with VecSetType().

 11:    Collective on MPI_Comm

 13:    Input Parameter:
 14: +  comm - the communicator
 15: .  n - the local vector length (or PETSC_DECIDE)
 16: -  N - total vector length (or PETSC_DETERMINE)

 18:    Output Parameter:
 19: .  V - the vector

 21:    Notes:
 22:    You MUST call either VecSetFromOptions() or VecSetType() after this call before the
 23:    vector may be used.

 25:    Use VecDuplicate() or VecDuplicateVecs() to form additional vectors of the
 26:    same type as an existing vector.

 28:    Level: beginner

 30:    Concepts: vectors^creating

 32: .seealso: VecCreateMPIWithArray(), VecCreateMPI(), VecDuplicate(), VecDuplicateVecs(), 
 33:           VecCreateGhost(), VecCreateSeq(), VecPlaceArray(), VecSetType()
 34: @*/
 35: int VecCreate(MPI_Comm comm,int n,int N,Vec *V)
 36: {
 37:   Vec     v;
 38:   int     ierr;

 41:   *V             = 0;

 43:   PetscHeaderCreate(v,_p_Vec,struct _VecOps,VEC_COOKIE,0,"Vec",comm,VecDestroy,VecView);
 44:   PetscLogObjectCreate(v);
 45:   PetscLogObjectMemory(v,sizeof(struct _p_Vec));

 47:   PetscMemzero(v->ops,sizeof(struct _VecOps));
 48:   v->n               = n;
 49:   v->N               = N;
 50:   v->map             = 0;
 51:   v->mapping         = 0;
 52:   v->bmapping        = 0;
 53:   v->bs              = 0;
 54:   v->type_name       = 0;

 56:   *V = v;
 57:   return(0);
 58: }

 60: /*@C
 61:    VecSetFromOptions - Sets the vector type from the options database.
 62:    Defaults to a PETSc sequential vector on one processor and a
 63:    PETSc MPI vector on more than one processor.

 65:    Collective on Vec

 67:    Input Parameter:
 68: .  vec - the vector

 70:    Notes: 
 71:    Must be called after VecCreate() but before the vector is used.

 73:    Level: developer

 75:    Concepts: vectors^setting options
 76:    Concepts: vectors^setting type

 78: .seealso: VecCreate()
 79: @*/
 80: int VecSetFromOptions(Vec vec)
 81: {
 82:   int        ierr,size;
 83:   PetscTruth flg;
 84:   char       vtype[256];


 89:   PetscOptionsBegin(vec->comm,vec->prefix,"Vector options","Vec");
 90:     if (!VecRegisterAllCalled) {VecRegisterAll(PETSC_NULL);}
 91:     PetscOptionsList("-vec_type","Type of vector","VecSetType",VecList,(char*)(vec->type_name?vec->type_name:VEC_MPI),vtype,256,&flg);
 92:     if (flg) {
 93:       VecSetType(vec,vtype);
 94:     }

 96:     /* type has not been set? */
 97:     if (!vec->type_name) {
 98:       MPI_Comm_size(vec->comm,&size);
 99:       if (size > 1) {
100:         VecSetType(vec,VEC_MPI);
101:       } else {
102:         VecSetType(vec,VEC_SEQ);
103:       }
104:     }

106:   PetscOptionsEnd();

108:   return(0);
109: }