Actual source code: petsccharacteristic.h

petsc-3.3-p7 2013-05-11
  1: /*
  2:    Defines the interface functions for the method of characteristics solvers
  3: */
  4: #ifndef __PETSCCHARACTERISTICS_H

 7:  #include petscvec.h
 8:  #include petscdmda.h

 10: PETSC_EXTERN PetscErrorCode CharacteristicInitializePackage(const char[]);

 12: /*S
 13:      Characteristic - Abstract PETSc object that manages method of characteristics solves

 15:    Level: beginner

 17:   Concepts: Method of characteristics

 19: .seealso:  CharacteristicCreate(), CharacteristicSetType(), CharacteristicType, SNES, TS, PC, KSP
 20: S*/
 21: typedef struct _p_Characteristic *Characteristic;

 23: /*J
 24:     CharacteristicType - String with the name of a characteristics method or the creation function
 25:        with an optional dynamic library name, for example
 26:        http://www.mcs.anl.gov/petsc/lib.a:mymoccreate()

 28:    Level: beginner

 30: .seealso: CharacteristicSetType(), Characteristic
 31: J*/
 32: #define CHARACTERISTICDA "da"
 33: #define CharacteristicType char*

 35: PETSC_EXTERN PetscErrorCode CharacteristicCreate(MPI_Comm, Characteristic *);
 36: PETSC_EXTERN PetscErrorCode CharacteristicSetType(Characteristic, const CharacteristicType);
 37: PETSC_EXTERN PetscErrorCode CharacteristicSetUp(Characteristic);
 38: PETSC_EXTERN PetscErrorCode CharacteristicSetVelocityInterpolation(Characteristic, DM, Vec, Vec, PetscInt, PetscInt[], PetscErrorCode (*)(Vec, PetscReal[], PetscInt, PetscInt[], PetscScalar[], void *), void *);
 39: PETSC_EXTERN PetscErrorCode CharacteristicSetVelocityInterpolationLocal(Characteristic, DM, Vec, Vec, PetscInt, PetscInt[], PetscErrorCode (*)(void *, PetscReal[], PetscInt, PetscInt[], PetscScalar[], void *), void *);
 40: PETSC_EXTERN PetscErrorCode CharacteristicSetFieldInterpolation(Characteristic, DM, Vec, PetscInt, PetscInt[], PetscErrorCode (*)(Vec, PetscReal[], PetscInt, PetscInt[], PetscScalar[], void *), void *);
 41: PETSC_EXTERN PetscErrorCode CharacteristicSetFieldInterpolationLocal(Characteristic, DM, Vec, PetscInt, PetscInt[], PetscErrorCode (*)(void *, PetscReal[], PetscInt, PetscInt[], PetscScalar[], void *), void *);
 42: PETSC_EXTERN PetscErrorCode CharacteristicSolve(Characteristic, PetscReal, Vec);
 43: PETSC_EXTERN PetscErrorCode CharacteristicDestroy(Characteristic*);

 45: PETSC_EXTERN PetscFList CharacteristicList;
 46: PETSC_EXTERN PetscErrorCode CharacteristicRegisterAll(const char[]);
 47: PETSC_EXTERN PetscErrorCode CharacteristicRegisterDestroy(void);

 49: PETSC_EXTERN PetscErrorCode CharacteristicRegister(const char[],const char[],const char[],PetscErrorCode (*)(Characteristic));

 51: /*MC
 52:    CharacteristicRegisterDynamic - Adds a solver to the method of characteristics package.

 54:    Synopsis:
 55:    PetscErrorCode CharacteristicRegisterDynamic(const char *name_solver,const char *path,const char *name_create,PetscErrorCode (*routine_create)(Characteristic))

 57:    Not Collective

 59:    Input Parameters:
 60: +  name_solver - name of a new user-defined solver
 61: .  path - path (either absolute or relative) the library containing this solver
 62: .  name_create - name of routine to create method context
 63: -  routine_create - routine to create method context

 65:    Notes:
 66:    CharacteristicRegisterDynamic() may be called multiple times to add several user-defined solvers.

 68:    If dynamic libraries are used, then the fourth input argument (routine_create)
 69:    is ignored.

 71:    Sample usage:
 72: .vb
 73:    CharacteristicRegisterDynamic("my_solver",/home/username/my_lib/lib/libO/solaris/mylib.a,
 74:                "MySolverCreate",MySolverCreate);
 75: .ve

 77:    Then, your solver can be chosen with the procedural interface via
 78: $     CharacteristicSetType(ksp,"my_solver")
 79:    or at runtime via the option
 80: $     -characteristic_type my_solver

 82:    Level: advanced

 84:    Notes: Environmental variables such as ${PETSC_ARCH}, ${PETSC_DIR}, ${PETSC_LIB_DIR},
 85:           and others of the form ${any_environmental_variable} occuring in pathname will be 
 86:           replaced with appropriate values.
 87:          If your function is not being put into a shared library then use CharacteristicRegister() instead

 89: .keywords: Characteristic, register

 91: .seealso: CharacteristicRegisterAll(), CharacteristicRegisterDestroy()

 93: M*/
 94: #if defined(PETSC_USE_DYNAMIC_LIBRARIES)
 95: #define CharacteristicRegisterDynamic(a,b,c,d) CharacteristicRegister(a,b,c,0)
 96: #else
 97: #define CharacteristicRegisterDynamic(a,b,c,d) CharacteristicRegister(a,b,c,d)
 98: #endif

100: #endif /*__PETSCCHARACTERISTICS_H*/