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: }