FEI Version of the Day
Loading...
Searching...
No Matches
fei_LinearSystem.cpp
1/*--------------------------------------------------------------------*/
2/* Copyright 2005 Sandia Corporation. */
3/* Under the terms of Contract DE-AC04-94AL85000, there is a */
4/* non-exclusive license for use of this work by or on behalf */
5/* of the U.S. Government. Export of this program may require */
6/* a license from the United States Government. */
7/*--------------------------------------------------------------------*/
8
9#include <fei_macros.hpp>
10
11#include <fei_MatrixGraph.hpp>
12#include <fei_LinearSystem.hpp>
13#include <snl_fei_LinearSystem_General.hpp>
14#include <snl_fei_Utils.hpp>
15
16//----------------------------------------------------------------------------
18 : matrix_(),
19 soln_(),
20 rhs_(),
21 matrixGraph_(matrixGraph),
22 dbcManager_(NULL)
23{
24}
25
26//----------------------------------------------------------------------------
28{
29 delete dbcManager_;
30
31 for(unsigned i=0; i<attributeNames_.size(); ++i) {
32 delete [] attributeNames_[i];
33 }
34}
35
36//----------------------------------------------------------------------------
39{
41 linsys(new snl_fei::LinearSystem_General(matrixGraph));
42
43 return(linsys);
44}
45
46//----------------------------------------------------------------------------
48{
49 matrix_ = matrix;
50}
51
52//----------------------------------------------------------------------------
54 void* attribute)
55{
56 snl_fei::storeNamedAttribute(name, attribute,
57 attributeNames_, attributes_);
58 return(0);
59}
60
61//----------------------------------------------------------------------------
63 void*& attribute)
64{
65 attribute = snl_fei::retrieveNamedAttribute(name, attributeNames_, attributes_);
66 return(attribute==NULL ? -1 : 0);
67}
68
69//----------------------------------------------------------------------------
71 const int* IDs,
72 int idType,
73 int fieldID,
74 int offsetIntoField,
75 const double* prescribedValues)
76{
77 if (dbcManager_ == NULL) {
78 dbcManager_ = new fei::DirichletBCManager(matrixGraph_->getRowSpace());
79 }
80
81 try {
82 dbcManager_->addBCRecords(numIDs, idType, fieldID, offsetIntoField,
83 IDs, prescribedValues);
84 }
85 catch(std::runtime_error& exc) {
86 fei::console_out() << exc.what()<<FEI_ENDL;
87 return(-1);
88 }
89
90 return(0);
91}
92
93//----------------------------------------------------------------------------
95 const int* IDs,
96 int idType,
97 int fieldID,
98 const int* offsetsIntoField,
99 const double* prescribedValues)
100{
101 if (dbcManager_ == NULL) {
102 dbcManager_ = new fei::DirichletBCManager(matrixGraph_->getRowSpace());
103 }
104
105 try {
106 dbcManager_->addBCRecords(numIDs, idType, fieldID, IDs, offsetsIntoField,
107 prescribedValues);
108 }
109 catch(std::runtime_error& exc) {
110 fei::console_out() << exc.what()<<FEI_ENDL;
111 return(-1);
112 }
113
114 return(0);
115}
116
virtual fei::SharedPtr< fei::LinearSystem > createLinearSystem(fei::SharedPtr< fei::MatrixGraph > &matrixGraph)
virtual int loadEssentialBCs(int numIDs, const int *IDs, int idType, int fieldID, int offsetIntoField, const double *prescribedValues)
LinearSystem(fei::SharedPtr< fei::MatrixGraph > &matrixGraph)
virtual int putAttribute(const char *name, void *attribute)
virtual int getAttribute(const char *name, void *&attribute)
virtual void setMatrix(fei::SharedPtr< fei::Matrix > &matrix)
std::ostream & console_out()