FEI
Version of the Day
Toggle main menu visibility
Loading...
Searching...
No Matches
base
fei_Solver.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_Solver.hpp>
12
13
#include <fei_Matrix_Impl.hpp>
14
#include <fei_MatrixReducer.hpp>
15
#include <snl_fei_LinearSystem_FEData.hpp>
16
#include <fei_ParameterSet.hpp>
17
#include <fei_utils.hpp>
18
19
#undef fei_file
20
#define fei_file "fei_Solver.cpp"
21
#include <fei_ErrMacros.hpp>
22
23
//----------------------------------------------------------------------------
24
int
fei_Solver_solve(
fei::LinearSystem
* linearSystem,
25
fei::Matrix
* preconditioningMatrix,
26
int
numParams,
27
const
char
*
const
* solverParams,
28
int
& iterationsTaken,
29
int
& status)
30
{
31
fei::SharedPtr<fei::Matrix>
matrix = linearSystem->
getMatrix
();
32
fei::Matrix_Impl<LinearSystemCore>
* lscmatrix =
33
dynamic_cast<
fei::Matrix_Impl<LinearSystemCore>
*
>
(matrix.
get
());
34
35
fei::MatrixReducer* matred =
dynamic_cast<
fei::MatrixReducer*
>
(matrix.
get
());
36
if
(matred != NULL) {
37
lscmatrix =
dynamic_cast<
fei::Matrix_Impl<LinearSystemCore>
*
>
(matred->getTargetMatrix().get());
38
}
39
40
if
(lscmatrix != NULL) {
41
fei::SharedPtr<LinearSystemCore>
linSysCore = lscmatrix->
getMatrix
();
42
43
char
** params =
const_cast<
char
**
>
(solverParams);
44
CHK_ERR( linSysCore->parameters(numParams, params) );
45
46
CHK_ERR( linSysCore->launchSolver(status, iterationsTaken) );
47
48
return
(0);
49
}
50
51
snl_fei::LinearSystem_FEData
* fedlinsys =
52
dynamic_cast<
snl_fei::LinearSystem_FEData
*
>
(linearSystem);
53
if
(fedlinsys != NULL) {
54
fei::SharedPtr<FiniteElementData>
fedata = fedlinsys->
getFiniteElementData
();
55
56
CHK_ERR( fedata->launchSolver(status, iterationsTaken) );
57
58
return
(0);
59
}
60
61
ERReturn(-1);
62
}
63
64
//----------------------------------------------------------------------------
65
int
fei::Solver::solve
(
fei::LinearSystem
* linearSystem,
66
fei::Matrix
* preconditioningMatrix,
67
const
fei::ParameterSet
& parameterSet,
68
int
& iterationsTaken,
69
int
& status)
70
{
71
int
numParams = 0;
72
const
char
** paramStrings = NULL;
73
std::vector<std::string> stdstrings;
74
fei::utils::convert_ParameterSet_to_strings
(¶meterSet, stdstrings);
75
fei::utils::strings_to_char_ptrs
(stdstrings, numParams, paramStrings);
76
77
int
err = fei_Solver_solve(linearSystem, preconditioningMatrix,
78
numParams, paramStrings,
79
iterationsTaken, status);
80
81
delete
[] paramStrings;
82
83
return
(err);
84
}
85
fei::LinearSystem
Definition
fei_LinearSystem.hpp:26
fei::LinearSystem::getMatrix
virtual fei::SharedPtr< fei::Matrix > getMatrix()
Definition
fei_LinearSystem.hpp:62
fei::Matrix_Impl
Definition
fei_Matrix_Impl.hpp:53
fei::Matrix_Impl::getMatrix
fei::SharedPtr< T > getMatrix()
Definition
fei_Matrix_Impl.hpp:87
fei::Matrix
Definition
fei_Matrix.hpp:30
fei::ParameterSet
Definition
fei_ParameterSet.hpp:46
fei::SharedPtr
Definition
fei_SharedPtr.hpp:65
fei::SharedPtr::get
T * get() const
Definition
fei_SharedPtr.hpp:242
fei::Solver::solve
virtual int solve(fei::LinearSystem *linearSystem, fei::Matrix *preconditioningMatrix, const fei::ParameterSet ¶meterSet, int &iterationsTaken, int &status)
Definition
fei_Solver.cpp:65
snl_fei::LinearSystem_FEData
Definition
snl_fei_LinearSystem_FEData.hpp:27
snl_fei::LinearSystem_FEData::getFiniteElementData
fei::SharedPtr< FiniteElementData > getFiniteElementData()
Definition
snl_fei_LinearSystem_FEData.hpp:54
fei::utils::convert_ParameterSet_to_strings
void convert_ParameterSet_to_strings(const fei::ParameterSet *paramset, std::vector< std::string > ¶mStrings)
Definition
fei_utils.cpp:270
fei::utils::strings_to_char_ptrs
void strings_to_char_ptrs(std::vector< std::string > &stdstrings, int &numStrings, const char **&charPtrs)
Definition
fei_utils.cpp:178
Generated by
1.17.0