FEI Package Browser (Single Doxygen Collection)  Version of the Day
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
FEI.hpp
Go to the documentation of this file.
1 #ifndef _FEI_hpp_
2 #define _FEI_hpp_
3 /*--------------------------------------------------------------------*/
4 /* Copyright 2005 Sandia Corporation. */
5 /* Under the terms of Contract DE-AC04-94AL85000, there is a */
6 /* non-exclusive license for use of this work by or on behalf */
7 /* of the U.S. Government. Export of this program may require */
8 /* a license from the United States Government. */
9 /*--------------------------------------------------------------------*/
10 
11 //
12 //=========================================================================
13 // public C++ interface definition for FEI, version 2.1, Jan. 25, 2001
14 //
15 // This interface header is the C++ expression of the Finite Element
16 // Interface to Linear Solvers.
17 //
18 //=========================================================================
19 //
20 // Below is a list of the functions in FEI 2.x, grouped roughly by
21 // usage categories, with the initialization and load groups (1 and 2)
22 // also reflecting common calling order.
23 //
24 //===================================================================
25 //
26 // (0) Construction
27 // ----------------
28 //
29 // <Implementation-dependent>
30 //
31 //
32 // (1) initialization
33 // ------------------
34 //
35 // parameters
36 // setIDLists
37 // initSolveStep
38 //
39 // initFields
40 // initElemBlock
41 //
42 // initElem
43 //
44 // initSharedNodes
45 //
46 // initCRMult
47 // initCRPen
48 // initSlaveVariable
49 //
50 // initComplete
51 //
52 //
53 // (2) load data
54 // -------------
55 //
56 // setLHSID
57 // setRHSID
58 //
59 // loadNodeBCs
60 // loadElemBCs
61 //
62 // sumInElem
63 // sumInElemMatrix
64 // sumInElemRHS
65 //
66 // loadCRMult
67 // loadCRPen
68 //
69 // setMatScalars
70 // setRHSScalars
71 //
72 // loadComplete
73 //
74 // (3) equation solution
75 // ---------------------
76 //
77 // residualNorm
78 // solve
79 //
80 //
81 // (4) return of solution data
82 // ---------------------------
83 //
84 // getBlockNodeSolution
85 // getBlockFieldNodeSolution
86 // getBlockElemSolution
87 // getCRMultipliers
88 //
89 // (5) initial guess 'put'ing
90 // --------------------------
91 //
92 // putBlockNodeSolution
93 // putBlockFieldNodeSolution
94 // putBlockElemSolution
95 // putCRMultParam
96 // putNodalFieldData
97 //
98 // (6) resetting functions
99 // -------------------------
100 //
101 // resetSystem
102 // resetMatrix
103 // resetRHSVector
104 // resetInitialGuess
105 // deleteMultCRs
106 //
107 // (7) query functions
108 // -------------------
109 //
110 // version
111 // cumulative_cpu_times
112 //
113 // iterations
114 // getNumSolnParams
115 // getNumElemBlocks
116 // getNumBlockActNodes
117 // getNumBlockActEqns
118 // getNumNodesPerElement
119 // getNumEqnsPerElement
120 // getNumBlockElements
121 // getNumBlockElemDOF
122 // getNumCRMultipliers
123 // getCRMultIDList
124 // getBlockNodeIDList
125 // getBlockElemIDList
126 // getFieldSize
127 // getEqnNumbers
128 // getNodalFieldSolution
129 // getNumLocalNodes
130 // getLocalNodeIDList
131 //
132 
133 #include <fei_macros.hpp>
134 #include <fei_defs.h>
135 
144 class FEI {
145 
146  public:
147 
150  virtual ~FEI() {}
151 
160  virtual int parameters(int numParams,
161  const char *const* paramStrings) = 0;
162 
179  virtual int setIDLists( int numMatrices,
180  const int* matrixIDs,
181  int numRHSs,
182  const int* rhsIDs ) = 0;
183 
184 
193  virtual int setSolveType( int solveType ) = 0;
194 
209  virtual int initFields( int numFields,
210  const int *fieldSizes,
211  const int *fieldIDs,
212  const int *fieldTypes = NULL ) = 0;
213 
235  virtual int initElemBlock( GlobalID elemBlockID,
236  int numElements,
237  int numNodesPerElement,
238  const int *numFieldsPerNode,
239  const int *const *nodalFieldIDs,
240  int numElemDofFieldsPerElement,
241  const int* elemDOFFieldIDs,
242  int interleaveStrategy ) = 0;
243 
252  virtual int initElem( GlobalID elemBlockID,
253  GlobalID elemID,
254  const GlobalID *elemConn ) = 0;
255 
271  virtual int initSharedNodes( int numSharedNodes,
272  const GlobalID *sharedNodeIDs,
273  const int *numProcsPerNode,
274  const int *const *sharingProcIDs ) = 0;
275 
284  virtual int initCRMult( int numCRNodes,
285  const GlobalID* CRNodeIDs,
286  const int *CRFieldIDs,
287  int& CRID ) = 0;
288 
297  virtual int initCRPen( int numCRNodes,
298  const GlobalID* CRNodeIDs,
299  const int *CRFieldIDs,
300  int& CRID ) = 0;
301 
349  virtual int initSlaveVariable(GlobalID slaveNodeID,
350  int slaveFieldID,
351  int offsetIntoSlaveField,
352  int numMasterNodes,
353  const GlobalID* masterNodeIDs,
354  const int* masterFieldIDs,
355  const double* weights,
356  double rhsValue) = 0;
357 
364  virtual int initComplete() = 0;
365 
366 
367 // Load Phase..........................................
368 
375  virtual int setCurrentMatrix(int matrixID) = 0;
376 
383  virtual int setCurrentRHS(int rhsID) = 0;
384 
388  virtual int resetSystem(double s=0.0) = 0;
389 
394  virtual int resetMatrix(double s=0.0) = 0;
395 
399  virtual int resetRHSVector(double s=0.0) = 0;
400 
406  virtual int resetInitialGuess(double s) = 0;
407 
412  virtual int deleteMultCRs() = 0;
413 
432  virtual int loadNodeBCs(int numNodes,
433  const GlobalID *nodeIDs,
434  int fieldID,
435  const int* offsetsIntoField,
436  const double* prescribedValues) = 0;
437 
460  virtual int loadElemBCs( int numElems,
461  const GlobalID *elemIDs,
462  int fieldID,
463  const double *const *alpha,
464  const double *const *beta,
465  const double *const *gamma ) = 0;
466 
482  virtual int sumInElem(GlobalID elemBlockID,
483  GlobalID elemID,
484  const GlobalID* elemConn,
485  const double* const* elemStiffness,
486  const double* elemLoad,
487  int elemFormat) = 0;
488 
503  virtual int sumInElemMatrix(GlobalID elemBlockID,
504  GlobalID elemID,
505  const GlobalID* elemConn,
506  const double* const* elemStiffness,
507  int elemFormat) = 0;
508 
517  virtual int sumInElemRHS(GlobalID elemBlockID,
518  GlobalID elemID,
519  const GlobalID* elemConn,
520  const double* elemLoad) = 0;
521 
531  virtual int loadCRMult(int CRMultID, int numCRNodes,
532  const GlobalID* CRNodeIDs,
533  const int* CRFieldIDs,
534  const double* CRWeights,
535  double CRValue) = 0;
536 
547  virtual int loadCRPen(int CRPenID, int numCRNodes,
548  const GlobalID* CRNodeIDs,
549  const int* CRFieldIDs,
550  const double* CRWeights,
551  double CRValue,
552  double penValue) = 0;
553 
555  virtual int putIntoRHS(int IDType,
556  int fieldID,
557  int numIDs,
558  const GlobalID* IDs,
559  const double* coefficients) = 0;
560 
562  virtual int sumIntoRHS(int IDType,
563  int fieldID,
564  int numIDs,
565  const GlobalID* IDs,
566  const double* coefficients) = 0;
567 
568  virtual int sumIntoMatrixDiagonal(int /*IDType*/,
569  int /*fieldID*/,
570  int /*numIDs*/,
571  const GlobalID* /*IDs*/,
572  const double* /*coefficients*/)
573  { return -1; }
574 
582  virtual int setMatScalars( int numScalars,
583  const int* IDs,
584  const double* scalars ) = 0;
585 
593  virtual int setRHSScalars( int numScalars,
594  const int* IDs,
595  const double* scalars) = 0;
596 
601  virtual int loadComplete(bool applyBCs=true,
602  bool globalAssemble=true) = 0;
603 
604 // Equation solution services.....................................
605 
618  virtual int residualNorm(int whichNorm, int numFields,
619  int* fieldIDs, double* norms) = 0;
620 
631  virtual int solve(int& status) = 0;
632 
633 
634 // Solution return services.......................................
635 
639  virtual int iterations(int& itersTaken) const = 0;
640 
645  virtual int getFieldSize(int fieldID, int& numScalars) = 0;
646 
659  virtual int getEqnNumbers(GlobalID ID,
660  int idType,
661  int fieldID,
662  int& numEqns,
663  int* eqnNumbers) = 0;
664 
677  virtual int getNodalFieldSolution(int fieldID,
678  int numNodes,
679  const GlobalID* nodeIDs,
680  double* results) = 0;
681 
687  virtual int getNumLocalNodes(int& numNodes) = 0;
688 
700  virtual int getLocalNodeIDList(int& numNodes,
701  GlobalID* nodeIDs,
702  int lenNodeIDs) = 0;
703 
707  virtual int putNodalFieldData(int fieldID,
708  int numNodes,
709  const GlobalID* nodeIDs,
710  const double* data) = 0;
711 
729  virtual int getBlockNodeSolution( GlobalID elemBlockID,
730  int numNodes,
731  const GlobalID *nodeIDs,
732  int *offsets,
733  double *results ) = 0;
734 
749  virtual int getNodalSolution(int numNodes,
750  const GlobalID* nodeIDs,
751  int* offsets,
752  double* results) = 0;
753 
764  virtual int getBlockFieldNodeSolution(GlobalID elemBlockID,
765  int fieldID,
766  int numNodes,
767  const GlobalID *nodeIDs,
768  double *results) = 0;
769 
779  virtual int getBlockElemSolution( GlobalID elemBlockID,
780  int numElems,
781  const GlobalID *elemIDs,
782  int& numElemDOFPerElement,
783  double *results ) = 0;
784 
789  virtual int getNumCRMultipliers(int& numMultCRs) = 0;
790 
797  virtual int getCRMultIDList(int numMultCRs, int* multIDs) = 0;
798 
806  virtual int getCRMultipliers(int numCRs,
807  const int *CRIDs,
808  double *results) = 0;
809 
810 
811 // Some 'put' methods paralleling the solution 'get' functions.
812 // the int sizing parameters are passed for error-checking purposes, so
813 // that the interface implementation can tell if the passed estimate
814 // vectors make sense -before- an attempt is made to utilize them as
815 // initial guesses by unpacking them into the solver's native solution
816 // vector format.
817 
828  virtual int putBlockNodeSolution(GlobalID elemBlockID,
829  int numNodes,
830  const GlobalID *nodeIDs,
831  const int *offsets,
832  const double *estimates) = 0;
833 
842  virtual int putBlockFieldNodeSolution(GlobalID elemBlockID,
843  int fieldID,
844  int numNodes,
845  const GlobalID *nodeIDs,
846  const double *estimates) = 0;
847 
857  virtual int putBlockElemSolution( GlobalID elemBlockID,
858  int numElems,
859  const GlobalID *elemIDs,
860  int dofPerElem,
861  const double *estimates) = 0;
862 
868  virtual int putCRMultipliers( int numMultCRs,
869  const int* CRMultIDs,
870  const double *multEstimates ) = 0;
871 
872 
873 // utility query functions..............
874 
883  virtual int getBlockNodeIDList( GlobalID elemBlockID,
884  int numNodes,
885  GlobalID *nodeIDs ) = 0;
886 
892  virtual int getBlockElemIDList(GlobalID elemBlockID,
893  int numElems,
894  GlobalID *elemIDs ) = 0;
895 
896 // miscellaneous self-explanatory query functions............
897 
906  virtual int version(const char*& versionString) = 0;
907 
915  virtual int cumulative_cpu_times(double& initPhase,
916  double& loadPhase,
917  double& solve,
918  double& solnReturn) = 0;
919 
926  virtual int getNumSolnParams( GlobalID globalNodeID,
927  int& numSolnParams) const = 0;
928 
932  virtual int getNumElemBlocks(int& numElemBlocks) const = 0;
933 
938  virtual int getNumBlockActNodes( GlobalID elemBlockID,
939  int& numNodes) const = 0;
940 
946  virtual int getNumBlockActEqns( GlobalID elemBlockID,
947  int& numEqns) const = 0;
948 
954  virtual int getNumNodesPerElement( GlobalID elemBlockID,
955  int& nodesPerElem) const = 0;
956 
962  virtual int getNumEqnsPerElement( GlobalID elemBlockID,
963  int& eqnsPerElem) const = 0;
964 
969  virtual int getNumBlockElements( GlobalID blockID,
970  int& numElems) const = 0;
971 
976  virtual int getNumBlockElemDOF( GlobalID blockID,
977  int& DOFPerElem) const = 0;
978 
979 };
980 
981 #endif
virtual int getCRMultipliers(int numCRs, const int *CRIDs, double *results)=0
virtual int initSlaveVariable(GlobalID slaveNodeID, int slaveFieldID, int offsetIntoSlaveField, int numMasterNodes, const GlobalID *masterNodeIDs, const int *masterFieldIDs, const double *weights, double rhsValue)=0
virtual int sumInElemMatrix(GlobalID elemBlockID, GlobalID elemID, const GlobalID *elemConn, const double *const *elemStiffness, int elemFormat)=0
virtual int getBlockElemIDList(GlobalID elemBlockID, int numElems, GlobalID *elemIDs)=0
virtual int loadCRPen(int CRPenID, int numCRNodes, const GlobalID *CRNodeIDs, const int *CRFieldIDs, const double *CRWeights, double CRValue, double penValue)=0
virtual int getNumElemBlocks(int &numElemBlocks) const =0
virtual int parameters(int numParams, const char *const *paramStrings)=0
virtual int initComplete()=0
int GlobalID
Definition: fei_defs.h:60
virtual int putBlockNodeSolution(GlobalID elemBlockID, int numNodes, const GlobalID *nodeIDs, const int *offsets, const double *estimates)=0
virtual int setMatScalars(int numScalars, const int *IDs, const double *scalars)=0
virtual int getNumCRMultipliers(int &numMultCRs)=0
virtual int loadNodeBCs(int numNodes, const GlobalID *nodeIDs, int fieldID, const int *offsetsIntoField, const double *prescribedValues)=0
virtual int solve(int &status)=0
virtual int getNumBlockActEqns(GlobalID elemBlockID, int &numEqns) const =0
virtual int getNodalFieldSolution(int fieldID, int numNodes, const GlobalID *nodeIDs, double *results)=0
virtual int getNumBlockElemDOF(GlobalID blockID, int &DOFPerElem) const =0
virtual int putNodalFieldData(int fieldID, int numNodes, const GlobalID *nodeIDs, const double *data)=0
virtual int loadCRMult(int CRMultID, int numCRNodes, const GlobalID *CRNodeIDs, const int *CRFieldIDs, const double *CRWeights, double CRValue)=0
virtual int setRHSScalars(int numScalars, const int *IDs, const double *scalars)=0
virtual int getNumBlockActNodes(GlobalID elemBlockID, int &numNodes) const =0
virtual int putIntoRHS(int IDType, int fieldID, int numIDs, const GlobalID *IDs, const double *coefficients)=0
virtual int initCRMult(int numCRNodes, const GlobalID *CRNodeIDs, const int *CRFieldIDs, int &CRID)=0
virtual int getNumLocalNodes(int &numNodes)=0
virtual int version(const char *&versionString)=0
virtual int loadElemBCs(int numElems, const GlobalID *elemIDs, int fieldID, const double *const *alpha, const double *const *beta, const double *const *gamma)=0
virtual int getNumEqnsPerElement(GlobalID elemBlockID, int &eqnsPerElem) const =0
Definition: FEI.hpp:144
virtual int deleteMultCRs()=0
virtual int getEqnNumbers(GlobalID ID, int idType, int fieldID, int &numEqns, int *eqnNumbers)=0
virtual int initSharedNodes(int numSharedNodes, const GlobalID *sharedNodeIDs, const int *numProcsPerNode, const int *const *sharingProcIDs)=0
virtual int setCurrentRHS(int rhsID)=0
virtual int resetInitialGuess(double s)=0
virtual int initFields(int numFields, const int *fieldSizes, const int *fieldIDs, const int *fieldTypes=NULL)=0
virtual int initElemBlock(GlobalID elemBlockID, int numElements, int numNodesPerElement, const int *numFieldsPerNode, const int *const *nodalFieldIDs, int numElemDofFieldsPerElement, const int *elemDOFFieldIDs, int interleaveStrategy)=0
virtual int getFieldSize(int fieldID, int &numScalars)=0
virtual int getNumNodesPerElement(GlobalID elemBlockID, int &nodesPerElem) const =0
virtual ~FEI()
Definition: FEI.hpp:150
virtual int setSolveType(int solveType)=0
virtual int getNumSolnParams(GlobalID globalNodeID, int &numSolnParams) const =0
virtual int resetMatrix(double s=0.0)=0
virtual int getNodalSolution(int numNodes, const GlobalID *nodeIDs, int *offsets, double *results)=0
virtual int loadComplete(bool applyBCs=true, bool globalAssemble=true)=0
virtual int getBlockElemSolution(GlobalID elemBlockID, int numElems, const GlobalID *elemIDs, int &numElemDOFPerElement, double *results)=0
virtual int resetSystem(double s=0.0)=0
virtual int sumInElemRHS(GlobalID elemBlockID, GlobalID elemID, const GlobalID *elemConn, const double *elemLoad)=0
virtual int putCRMultipliers(int numMultCRs, const int *CRMultIDs, const double *multEstimates)=0
virtual int resetRHSVector(double s=0.0)=0
virtual int getBlockFieldNodeSolution(GlobalID elemBlockID, int fieldID, int numNodes, const GlobalID *nodeIDs, double *results)=0
virtual int getBlockNodeSolution(GlobalID elemBlockID, int numNodes, const GlobalID *nodeIDs, int *offsets, double *results)=0
virtual int getBlockNodeIDList(GlobalID elemBlockID, int numNodes, GlobalID *nodeIDs)=0
virtual int residualNorm(int whichNorm, int numFields, int *fieldIDs, double *norms)=0
virtual int setIDLists(int numMatrices, const int *matrixIDs, int numRHSs, const int *rhsIDs)=0
virtual int iterations(int &itersTaken) const =0
virtual int sumIntoMatrixDiagonal(int, int, int, const GlobalID *, const double *)
Definition: FEI.hpp:568
virtual int setCurrentMatrix(int matrixID)=0
virtual int sumInElem(GlobalID elemBlockID, GlobalID elemID, const GlobalID *elemConn, const double *const *elemStiffness, const double *elemLoad, int elemFormat)=0
virtual int getLocalNodeIDList(int &numNodes, GlobalID *nodeIDs, int lenNodeIDs)=0
virtual int putBlockFieldNodeSolution(GlobalID elemBlockID, int fieldID, int numNodes, const GlobalID *nodeIDs, const double *estimates)=0
virtual int sumIntoRHS(int IDType, int fieldID, int numIDs, const GlobalID *IDs, const double *coefficients)=0
virtual int initElem(GlobalID elemBlockID, GlobalID elemID, const GlobalID *elemConn)=0
virtual int getCRMultIDList(int numMultCRs, int *multIDs)=0
virtual int initCRPen(int numCRNodes, const GlobalID *CRNodeIDs, const int *CRFieldIDs, int &CRID)=0
virtual int putBlockElemSolution(GlobalID elemBlockID, int numElems, const GlobalID *elemIDs, int dofPerElem, const double *estimates)=0
virtual int getNumBlockElements(GlobalID blockID, int &numElems) const =0
virtual int cumulative_cpu_times(double &initPhase, double &loadPhase, double &solve, double &solnReturn)=0