Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
I
INMOST
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Kirill Terekhov
INMOST
Commits
e2c01644
Commit
e2c01644
authored
Oct 01, 2016
by
Dmitry Bagaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Some improvements to SolverInterface, SolverParameters added
parent
7f1cedd4
Changes
25
Hide whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
238 additions
and
448 deletions
+238
-448
Examples/MatSolve/main.cpp
Examples/MatSolve/main.cpp
+7
-8
Source/Headers/inmost_common.h
Source/Headers/inmost_common.h
+1
-0
Source/Headers/inmost_solver.h
Source/Headers/inmost_solver.h
+4
-4
Source/Headers/inmost_solver_factory.h
Source/Headers/inmost_solver_factory.h
+4
-1
Source/Headers/inmost_solver_interface.h
Source/Headers/inmost_solver_interface.h
+27
-4
Source/Solver/CMakeLists.txt
Source/Solver/CMakeLists.txt
+2
-1
Source/Solver/SolverMaster.cpp
Source/Solver/SolverMaster.cpp
+40
-0
Source/Solver/SolverParameters.cpp
Source/Solver/SolverParameters.cpp
+58
-0
Source/Solver/solver.cpp
Source/Solver/solver.cpp
+19
-19
Source/Solver/solver_inner/solver_ddpqiluc2/SolverDDPQILUC2.cpp
.../Solver/solver_inner/solver_ddpqiluc2/SolverDDPQILUC2.cpp
+13
-69
Source/Solver/solver_inner/solver_ddpqiluc2/SolverDDPQILUC2.h
...ce/Solver/solver_inner/solver_ddpqiluc2/SolverDDPQILUC2.h
+0
-25
Source/Solver/solver_inner/solver_ilu2/SolverILU2.cpp
Source/Solver/solver_inner/solver_ilu2/SolverILU2.cpp
+10
-64
Source/Solver/solver_inner/solver_ilu2/SolverILU2.h
Source/Solver/solver_inner/solver_ilu2/SolverILU2.h
+0
-21
Source/Solver/solver_inner/solver_mptilu2/SolverMPTILU2.cpp
Source/Solver/solver_inner/solver_mptilu2/SolverMPTILU2.cpp
+9
-53
Source/Solver/solver_inner/solver_mptilu2/SolverMPTILU2.h
Source/Solver/solver_inner/solver_mptilu2/SolverMPTILU2.h
+0
-21
Source/Solver/solver_inner/solver_mptiluc/SolverMPTILUC.cpp
Source/Solver/solver_inner/solver_mptiluc/SolverMPTILUC.cpp
+10
-57
Source/Solver/solver_inner/solver_mptiluc/SolverMPTILUC.h
Source/Solver/solver_inner/solver_mptiluc/SolverMPTILUC.h
+0
-21
Source/Solver/solver_petsc/SolverPETSc.cpp
Source/Solver/solver_petsc/SolverPETSc.cpp
+4
-4
Source/Solver/solver_petsc/SolverPETSc.h
Source/Solver/solver_petsc/SolverPETSc.h
+4
-4
Source/Solver/solver_trilinos/SolverTrilinos.cpp
Source/Solver/solver_trilinos/SolverTrilinos.cpp
+1
-34
Source/Solver/solver_trilinos/SolverTrilinos.h
Source/Solver/solver_trilinos/SolverTrilinos.h
+1
-15
Source/Solver/solver_trilinos/solver_aztec/SolverTrilinosAztec.cpp
...lver/solver_trilinos/solver_aztec/SolverTrilinosAztec.cpp
+7
-7
Source/Solver/solver_trilinos/solver_belos/SolverTrilinosBelos.cpp
...lver/solver_trilinos/solver_belos/SolverTrilinosBelos.cpp
+2
-2
Source/Solver/solver_trilinos/solver_ifpack/SolverTrilinosIfpack.cpp
...er/solver_trilinos/solver_ifpack/SolverTrilinosIfpack.cpp
+10
-9
Source/Solver/solver_trilinos/solver_ml/SolverTrilinosML.cpp
Source/Solver/solver_trilinos/solver_ml/SolverTrilinosML.cpp
+5
-5
No files found.
Examples/MatSolve/main.cpp
View file @
e2c01644
...
@@ -33,7 +33,7 @@ int main(int argc, char **argv) {
...
@@ -33,7 +33,7 @@ int main(int argc, char **argv) {
std
::
string
vectorBFileName
=
""
;
std
::
string
vectorBFileName
=
""
;
std
::
string
vectorXFileName
=
""
;
std
::
string
vectorXFileName
=
""
;
std
::
string
parametersFileName
=
""
;
std
::
string
parametersFileName
=
""
;
std
::
string
solverName
=
""
;
std
::
string
solverName
=
"
inner_ilu2
"
;
bool
matrixFound
=
false
;
bool
matrixFound
=
false
;
bool
vectorBFound
=
false
;
bool
vectorBFound
=
false
;
...
@@ -60,8 +60,8 @@ int main(int argc, char **argv) {
...
@@ -60,8 +60,8 @@ int main(int argc, char **argv) {
std
::
cout
<<
"-t, --type <Solver type name>"
<<
std
::
endl
;
std
::
cout
<<
"-t, --type <Solver type name>"
<<
std
::
endl
;
std
::
cout
<<
" Available solvers:"
<<
std
::
endl
;
std
::
cout
<<
" Available solvers:"
<<
std
::
endl
;
Solver
::
Initialize
(
NULL
,
NULL
,
NULL
);
Solver
::
Initialize
(
NULL
,
NULL
,
NULL
);
std
::
vector
<
std
::
string
>
availableSolvers
=
Solver
Factory
::
getAvailableSolvers
();
std
::
vector
<
std
::
string
>
availableSolvers
=
Solver
Master
::
getAvailableSolvers
();
for
(
auto
it
=
availableSolvers
.
begin
();
it
!=
availableSolvers
.
end
();
it
++
)
{
for
(
solvers_names_iterator_t
it
=
availableSolvers
.
begin
();
it
!=
availableSolvers
.
end
();
it
++
)
{
std
::
cout
<<
" "
<<
*
it
<<
std
::
endl
;
std
::
cout
<<
" "
<<
*
it
<<
std
::
endl
;
}
}
Solver
::
Finalize
();
Solver
::
Finalize
();
...
@@ -158,7 +158,7 @@ int main(int argc, char **argv) {
...
@@ -158,7 +158,7 @@ int main(int argc, char **argv) {
// Initialize the linear solver in accordance with args
// Initialize the linear solver in accordance with args
Solver
::
Initialize
(
&
argc
,
&
argv
,
parametersFound
?
parametersFileName
.
c_str
()
:
NULL
);
Solver
::
Initialize
(
&
argc
,
&
argv
,
parametersFound
?
parametersFileName
.
c_str
()
:
NULL
);
if
(
!
Solver
Factory
::
isSolverAvailable
(
solverName
))
{
if
(
!
Solver
Master
::
isSolverAvailable
(
solverName
))
{
if
(
processRank
==
0
)
{
if
(
processRank
==
0
)
{
std
::
cout
<<
"Solver "
<<
solverName
<<
" is not available"
<<
std
::
endl
;
std
::
cout
<<
"Solver "
<<
solverName
<<
" is not available"
<<
std
::
endl
;
}
}
...
@@ -166,7 +166,7 @@ int main(int argc, char **argv) {
...
@@ -166,7 +166,7 @@ int main(int argc, char **argv) {
exit
(
1
);
exit
(
1
);
}
}
Solver
solver
=
Solver
(
solverName
);
Solver
solver
=
Solver
(
solverName
,
"test"
);
if
(
processRank
==
0
)
{
if
(
processRank
==
0
)
{
std
::
cout
<<
"Solving with "
<<
solverName
<<
std
::
endl
;
std
::
cout
<<
"Solving with "
<<
solverName
<<
std
::
endl
;
...
@@ -200,7 +200,6 @@ int main(int argc, char **argv) {
...
@@ -200,7 +200,6 @@ int main(int argc, char **argv) {
bool
success
;
bool
success
;
double
resid
,
realresid
=
0
;
double
resid
,
realresid
=
0
;
std
::
string
reason
;
std
::
string
reason
;
//Solver s(type); // Declare the linear solver by specified type
if
(
parametersFound
)
{
if
(
parametersFound
)
{
char
*
fileName
=
findInnerOptions
(
parametersFileName
.
c_str
());
char
*
fileName
=
findInnerOptions
(
parametersFileName
.
c_str
());
...
@@ -210,9 +209,9 @@ int main(int argc, char **argv) {
...
@@ -210,9 +209,9 @@ int main(int argc, char **argv) {
for
(
unsigned
ii
=
0
;
ii
<
options
->
options
.
size
();
ii
++
)
{
for
(
unsigned
ii
=
0
;
ii
<
options
->
options
.
size
();
ii
++
)
{
InnerOption
*
option
=
options
->
options
[
ii
];
InnerOption
*
option
=
options
->
options
[
ii
];
if
(
option
->
type
==
ENUM
)
{
if
(
option
->
type
==
ENUM
)
{
solver
.
SetP
roperty
Enum
(
option
->
name
,
(
unsigned
int
)
atoi
(
option
->
value
.
c_str
()));
solver
.
SetP
arameter
Enum
(
option
->
name
,
(
unsigned
int
)
atoi
(
option
->
value
.
c_str
()));
}
else
{
}
else
{
solver
.
SetP
roperty
Real
(
option
->
name
,
atof
(
option
->
value
.
c_str
()));
solver
.
SetP
arameter
Real
(
option
->
name
,
atof
(
option
->
value
.
c_str
()));
};
};
}
}
delete
options
;
delete
options
;
...
...
Source/Headers/inmost_common.h
View file @
e2c01644
...
@@ -223,6 +223,7 @@ namespace INMOST
...
@@ -223,6 +223,7 @@ namespace INMOST
CannotReusePreconditionerOfDifferentSize
,
CannotReusePreconditionerOfDifferentSize
,
SolverNotFound
,
SolverNotFound
,
SolverUnsupportedOperation
,
SolverUnsupportedOperation
,
SolverUnknownParameter
,
/// The list of errors may occur in the Partitioner.
/// The list of errors may occur in the Partitioner.
ErrorInPartitioner
=
500
,
ErrorInPartitioner
=
500
,
...
...
Source/Headers/inmost_solver.h
View file @
e2c01644
...
@@ -245,13 +245,13 @@ namespace INMOST {
...
@@ -245,13 +245,13 @@ namespace INMOST {
/// Clear all internal data of the current solver including matrix, preconditioner etc.
/// Clear all internal data of the current solver including matrix, preconditioner etc.
bool
Clear
();
bool
Clear
();
INMOST_DATA_REAL_TYPE
GetP
roperty
Real
(
std
::
string
property
)
const
;
INMOST_DATA_REAL_TYPE
GetP
arameter
Real
(
std
::
string
property
)
const
;
INMOST_DATA_ENUM_TYPE
GetP
roperty
Enum
(
std
::
string
property
)
const
;
INMOST_DATA_ENUM_TYPE
GetP
arameter
Enum
(
std
::
string
property
)
const
;
void
SetP
roperty
Real
(
std
::
string
property
,
INMOST_DATA_REAL_TYPE
value
);
void
SetP
arameter
Real
(
std
::
string
property
,
INMOST_DATA_REAL_TYPE
value
);
void
SetP
roperty
Enum
(
std
::
string
property
,
INMOST_DATA_ENUM_TYPE
value
);
void
SetP
arameter
Enum
(
std
::
string
property
,
INMOST_DATA_ENUM_TYPE
value
);
/// Return the number of iterations performed by the last solution.
/// Return the number of iterations performed by the last solution.
/// @see Sparse::Solve
/// @see Sparse::Solve
...
...
Source/Headers/inmost_solver_factory.h
View file @
e2c01644
...
@@ -22,7 +22,7 @@ namespace INMOST {
...
@@ -22,7 +22,7 @@ namespace INMOST {
};
};
};
};
class
Solver
Factory
{
class
Solver
Master
{
private:
private:
static
std
::
map
<
std
::
string
,
SolverBaseFactory
*>
solvers
;
static
std
::
map
<
std
::
string
,
SolverBaseFactory
*>
solvers
;
public:
public:
...
@@ -40,6 +40,9 @@ namespace INMOST {
...
@@ -40,6 +40,9 @@ namespace INMOST {
static
bool
isSolverAvailable
(
std
::
string
name
);
static
bool
isSolverAvailable
(
std
::
string
name
);
};
};
typedef
std
::
map
<
std
::
string
,
SolverBaseFactory
*>::
iterator
solvers_map_iterator_t
;
typedef
std
::
vector
<
std
::
string
>::
iterator
solvers_names_iterator_t
;
}
}
#endif //INMOST_SOLVER_FACTORY
#endif //INMOST_SOLVER_FACTORY
Source/Headers/inmost_solver_interface.h
View file @
e2c01644
...
@@ -8,9 +8,24 @@ namespace INMOST {
...
@@ -8,9 +8,24 @@ namespace INMOST {
#if defined(USE_SOLVER)
#if defined(USE_SOLVER)
class
SolverParameters
{
private:
std
::
map
<
std
::
string
,
INMOST_DATA_ENUM_TYPE
>
enums
;
std
::
map
<
std
::
string
,
INMOST_DATA_REAL_TYPE
>
reals
;
public:
SolverParameters
();
void
SetDefaults
();
void
SetParameterReal
(
std
::
string
name
,
INMOST_DATA_REAL_TYPE
value
);
void
SetParameterEnum
(
std
::
string
name
,
INMOST_DATA_ENUM_TYPE
value
);
const
INMOST_DATA_REAL_TYPE
GetParameterReal
(
std
::
string
name
)
const
;
const
INMOST_DATA_ENUM_TYPE
GetParameterEnum
(
std
::
string
name
)
const
;
};
class
SolverInterface
{
class
SolverInterface
{
protected:
protected:
INMOST_MPI_Comm
communicator
;
INMOST_MPI_Comm
communicator
;
SolverParameters
parameters
;
public:
public:
SolverInterface
()
{};
SolverInterface
()
{};
...
@@ -28,13 +43,21 @@ namespace INMOST {
...
@@ -28,13 +43,21 @@ namespace INMOST {
virtual
bool
isMatrixSet
()
=
0
;
virtual
bool
isMatrixSet
()
=
0
;
virtual
INMOST_DATA_REAL_TYPE
GetPropertyReal
(
std
::
string
property
)
const
=
0
;
virtual
INMOST_DATA_REAL_TYPE
GetParameterReal
(
std
::
string
name
)
const
{
return
parameters
.
GetParameterReal
(
name
);
};
virtual
INMOST_DATA_ENUM_TYPE
GetPropertyEnum
(
std
::
string
property
)
const
=
0
;
virtual
INMOST_DATA_ENUM_TYPE
GetParameterEnum
(
std
::
string
name
)
const
{
return
parameters
.
GetParameterEnum
(
name
);
};
virtual
void
SetPropertyReal
(
std
::
string
property
,
INMOST_DATA_REAL_TYPE
value
)
=
0
;
virtual
void
SetParameterReal
(
std
::
string
name
,
INMOST_DATA_REAL_TYPE
value
)
{
parameters
.
SetParameterReal
(
name
,
value
);
};
virtual
void
SetPropertyEnum
(
std
::
string
property
,
INMOST_DATA_ENUM_TYPE
value
)
=
0
;
virtual
void
SetParameterEnum
(
std
::
string
name
,
INMOST_DATA_ENUM_TYPE
value
)
{
parameters
.
SetParameterEnum
(
name
,
value
);
};
virtual
const
INMOST_DATA_ENUM_TYPE
Iterations
()
const
=
0
;
virtual
const
INMOST_DATA_ENUM_TYPE
Iterations
()
const
=
0
;
...
...
Source/Solver/CMakeLists.txt
View file @
e2c01644
...
@@ -2,7 +2,8 @@ set(SOURCE
...
@@ -2,7 +2,8 @@ set(SOURCE
${
SOURCE
}
${
SOURCE
}
${
CMAKE_CURRENT_SOURCE_DIR
}
/Solver.cpp
${
CMAKE_CURRENT_SOURCE_DIR
}
/Solver.cpp
${
CMAKE_CURRENT_SOURCE_DIR
}
/OrderInfo.cpp
${
CMAKE_CURRENT_SOURCE_DIR
}
/OrderInfo.cpp
${
CMAKE_CURRENT_SOURCE_DIR
}
/SolverFactory.cpp
${
CMAKE_CURRENT_SOURCE_DIR
}
/SolverMaster.cpp
${
CMAKE_CURRENT_SOURCE_DIR
}
/SolverParameters.cpp
${
CMAKE_CURRENT_SOURCE_DIR
}
/sparse.cpp
${
CMAKE_CURRENT_SOURCE_DIR
}
/sparse.cpp
)
)
...
...
Source/Solver/Solver
Factory
.cpp
→
Source/Solver/Solver
Master
.cpp
View file @
e2c01644
//
// Created by Dmitri Bagaev on 28.09.16.
//
#include "inmost.h"
#include "inmost.h"
namespace
INMOST
{
namespace
INMOST
{
std
::
map
<
std
::
string
,
SolverBaseFactory
*>
Solver
Factory
::
solvers
=
std
::
map
<
std
::
string
,
SolverBaseFactory
*>
();
std
::
map
<
std
::
string
,
SolverBaseFactory
*>
Solver
Master
::
solvers
=
std
::
map
<
std
::
string
,
SolverBaseFactory
*>
();
SolverInterface
*
Solver
Factory
::
getSolver
(
std
::
string
name
)
{
SolverInterface
*
Solver
Master
::
getSolver
(
std
::
string
name
)
{
auto
iterator
=
SolverFactory
::
solvers
.
find
(
name
);
solvers_map_iterator_t
iterator
=
SolverMaster
::
solvers
.
find
(
name
);
if
(
iterator
!=
Solver
Factory
::
solvers
.
end
())
{
if
(
iterator
!=
Solver
Master
::
solvers
.
end
())
{
return
iterator
->
second
->
create
();
return
iterator
->
second
->
create
();
}
else
{
}
else
{
throw
INMOST
::
SolverNotFound
;
throw
INMOST
::
SolverNotFound
;
}
}
}
}
SolverInterface
*
Solver
Factory
::
copySolver
(
const
SolverInterface
*
other
)
{
SolverInterface
*
Solver
Master
::
copySolver
(
const
SolverInterface
*
other
)
{
auto
iterator
=
SolverFactory
::
solvers
.
find
(
other
->
SolverName
());
solvers_map_iterator_t
iterator
=
SolverMaster
::
solvers
.
find
(
other
->
SolverName
());
if
(
iterator
!=
Solver
Factory
::
solvers
.
end
())
{
if
(
iterator
!=
Solver
Master
::
solvers
.
end
())
{
return
iterator
->
second
->
copy
(
other
);
return
iterator
->
second
->
copy
(
other
);
}
else
{
}
else
{
throw
INMOST
::
SolverNotFound
;
throw
INMOST
::
SolverNotFound
;
}
}
}
}
std
::
vector
<
std
::
string
>
Solver
Factory
::
getAvailableSolvers
()
{
std
::
vector
<
std
::
string
>
Solver
Master
::
getAvailableSolvers
()
{
std
::
vector
<
std
::
string
>
s
;
std
::
vector
<
std
::
string
>
s
;
for
(
auto
bi
=
SolverFactory
::
solvers
.
begin
();
bi
!=
SolverFactory
::
solvers
.
end
();
bi
++
)
{
for
(
solvers_map_iterator_t
bi
=
SolverMaster
::
solvers
.
begin
();
bi
!=
SolverMaster
::
solvers
.
end
();
bi
++
)
{
s
.
push_back
(
bi
->
first
);
s
.
push_back
(
bi
->
first
);
}
}
return
s
;
return
s
;
}
}
bool
Solver
Factory
::
isSolverAvailable
(
std
::
string
name
)
{
bool
Solver
Master
::
isSolverAvailable
(
std
::
string
name
)
{
return
Solver
Factory
::
solvers
.
find
(
name
)
!=
SolverFactory
::
solvers
.
end
();
return
Solver
Master
::
solvers
.
find
(
name
)
!=
SolverMaster
::
solvers
.
end
();
}
}
...
...
Source/Solver/SolverParameters.cpp
0 → 100644
View file @
e2c01644
#include "inmost_solver.h"
#include "inmost_solver_interface.h"
namespace
INMOST
{
typedef
std
::
map
<
std
::
string
,
INMOST_DATA_REAL_TYPE
>::
const_iterator
parameters_map_real_iterator_t
;
typedef
std
::
map
<
std
::
string
,
INMOST_DATA_ENUM_TYPE
>::
const_iterator
parameters_map_enum_iterator_t
;
SolverParameters
::
SolverParameters
()
{
this
->
SetDefaults
();
}
void
SolverParameters
::
SetDefaults
()
{
this
->
SetParameterEnum
(
"additive_schwartz_overlap"
,
DEFAULT_ADDITIVE_SCHWARTZ_OVERLAP
);
this
->
SetParameterEnum
(
"maximum_iterations"
,
DEFAULT_MAXIMUM_ITERATIONS
);
this
->
SetParameterEnum
(
"reorder_nonzero"
,
DEFAULT_PRECONDITIONER_REORDER_NONZEROS
);
this
->
SetParameterEnum
(
"rescale_iterations"
,
DEFAULT_PRECONDITIONER_RESCALE_ITERS
);
this
->
SetParameterEnum
(
"condition_estimation"
,
DEFAULT_PRECONDITIONER_CONDITION_ESTIMATION
);
this
->
SetParameterEnum
(
"adapt_ddpq_tolerance"
,
DEFAULT_PRECONDITIONER_ADAPT_DDPQ_TOLERANCE
);
this
->
SetParameterEnum
(
"gmres_substeps"
,
DEFAULT_SOLVER_GMRES_SUBSTEPS
);
this
->
SetParameterReal
(
"absolute_tolerance"
,
DEFAULT_ABSOLUTE_TOLERANCE
);
this
->
SetParameterReal
(
"relative_tolerance"
,
DEFAULT_RELATIVE_TOLERANCE
);
this
->
SetParameterReal
(
"divergence_tolerance"
,
DEFAULT_DIVERGENCE_TOLERANCE
);
this
->
SetParameterReal
(
"drop_tolerance"
,
DEFAULT_PRECONDITIONER_DROP_TOLERANCE
);
this
->
SetParameterReal
(
"reuse_tolerance"
,
DEFAULT_PRECONDITIONER_REUSE_TOLERANCE
);
this
->
SetParameterReal
(
"ddpq_tolerance"
,
DEFAULT_PRECONDITIONER_DDPQ_TOLERANCE
);
this
->
SetParameterReal
(
"fill_level"
,
DEFAULT_PRECONDITIONER_FILL_LEVEL
);
}
void
SolverParameters
::
SetParameterReal
(
std
::
string
name
,
INMOST_DATA_REAL_TYPE
value
)
{
reals
[
name
]
=
value
;
}
void
SolverParameters
::
SetParameterEnum
(
std
::
string
name
,
INMOST_DATA_ENUM_TYPE
value
)
{
enums
[
name
]
=
value
;
}
const
INMOST_DATA_REAL_TYPE
SolverParameters
::
GetParameterReal
(
std
::
string
name
)
const
{
parameters_map_real_iterator_t
value
=
reals
.
find
(
name
);
if
(
value
!=
reals
.
cend
())
{
return
value
->
second
;
}
else
{
throw
INMOST
::
SolverUnknownParameter
;
}
}
const
INMOST_DATA_ENUM_TYPE
SolverParameters
::
GetParameterEnum
(
std
::
string
name
)
const
{
parameters_map_enum_iterator_t
value
=
enums
.
find
(
name
);
if
(
value
!=
enums
.
cend
())
{
return
value
->
second
;
}
else
{
throw
INMOST
::
SolverUnknownParameter
;
}
}
}
Source/Solver/solver.cpp
View file @
e2c01644
...
@@ -26,7 +26,7 @@ namespace INMOST {
...
@@ -26,7 +26,7 @@ namespace INMOST {
bool
Solver
::
is_finalized
=
false
;
bool
Solver
::
is_finalized
=
false
;
Solver
::
Solver
(
std
::
string
solverName
,
std
::
string
prefix
,
INMOST_MPI_Comm
_comm
)
{
Solver
::
Solver
(
std
::
string
solverName
,
std
::
string
prefix
,
INMOST_MPI_Comm
_comm
)
{
this
->
solver
=
Solver
Factory
::
getSolver
(
solverName
);
this
->
solver
=
Solver
Master
::
getSolver
(
solverName
);
this
->
prefix
=
prefix
;
this
->
prefix
=
prefix
;
solver
->
SetCommunicator
(
_comm
);
solver
->
SetCommunicator
(
_comm
);
...
@@ -35,7 +35,7 @@ namespace INMOST {
...
@@ -35,7 +35,7 @@ namespace INMOST {
}
}
Solver
::
Solver
(
const
Solver
&
other
)
{
Solver
::
Solver
(
const
Solver
&
other
)
{
this
->
solver
=
Solver
Factory
::
copySolver
(
other
.
solver
);
this
->
solver
=
Solver
Master
::
copySolver
(
other
.
solver
);
this
->
prefix
=
other
.
prefix
;
this
->
prefix
=
other
.
prefix
;
solver
->
SetCommunicator
(
other
.
solver
->
GetCommunicator
());
solver
->
SetCommunicator
(
other
.
solver
->
GetCommunicator
());
...
@@ -80,18 +80,18 @@ namespace INMOST {
...
@@ -80,18 +80,18 @@ namespace INMOST {
}
}
#endif
#endif
//Register all available solvers
//Register all available solvers
Solver
Factory
::
registerSolver
<
SolverILU2
>
(
"inner_ilu2"
);
Solver
Master
::
registerSolver
<
SolverILU2
>
(
"inner_ilu2"
);
Solver
Factory
::
registerSolver
<
SolverDDPQILUC2
>
(
"inner_ddpqiluc2"
);
Solver
Master
::
registerSolver
<
SolverDDPQILUC2
>
(
"inner_ddpqiluc2"
);
Solver
Factory
::
registerSolver
<
SolverMPTILUC
>
(
"inner_mptiluc"
);
Solver
Master
::
registerSolver
<
SolverMPTILUC
>
(
"inner_mptiluc"
);
Solver
Factory
::
registerSolver
<
SolverMPTILU2
>
(
"inner_mptilu2"
);
Solver
Master
::
registerSolver
<
SolverMPTILU2
>
(
"inner_mptilu2"
);
#if defined(USE_SOLVER_PETSC)
#if defined(USE_SOLVER_PETSC)
Solver
Factory
::
registerSolver
<
SolverPETSc
>
(
"petsc"
);
Solver
Master
::
registerSolver
<
SolverPETSc
>
(
"petsc"
);
#endif
#endif
#if defined(USE_SOLVER_TRILINOS)
#if defined(USE_SOLVER_TRILINOS)
Solver
Factory
::
registerSolver
<
SolverTrilinosAztec
>
(
"trilinos_aztec"
);
Solver
Master
::
registerSolver
<
SolverTrilinosAztec
>
(
"trilinos_aztec"
);
Solver
Factory
::
registerSolver
<
SolverTrilinosBelos
>
(
"trilinos_belos"
);
Solver
Master
::
registerSolver
<
SolverTrilinosBelos
>
(
"trilinos_belos"
);
Solver
Factory
::
registerSolver
<
SolverTrilinosML
>
(
"trilinos_ml"
);
Solver
Master
::
registerSolver
<
SolverTrilinosML
>
(
"trilinos_ml"
);
Solver
Factory
::
registerSolver
<
SolverTrilinosIfpack
>
(
"trilinos_ifpack"
);
Solver
Master
::
registerSolver
<
SolverTrilinosIfpack
>
(
"trilinos_ifpack"
);
#endif
#endif
Sparse
::
CreateRowEntryType
();
Sparse
::
CreateRowEntryType
();
}
}
...
@@ -143,20 +143,20 @@ namespace INMOST {
...
@@ -143,20 +143,20 @@ namespace INMOST {
return
solver
->
Clear
();
return
solver
->
Clear
();
}
}
INMOST_DATA_REAL_TYPE
Solver
::
GetP
roperty
Real
(
std
::
string
property
)
const
{
INMOST_DATA_REAL_TYPE
Solver
::
GetP
arameter
Real
(
std
::
string
property
)
const
{
return
solver
->
GetP
roperty
Real
(
property
);
return
solver
->
GetP
arameter
Real
(
property
);
}
}
INMOST_DATA_ENUM_TYPE
Solver
::
GetP
roperty
Enum
(
std
::
string
property
)
const
{
INMOST_DATA_ENUM_TYPE
Solver
::
GetP
arameter
Enum
(
std
::
string
property
)
const
{
return
solver
->
GetP
roperty
Enum
(
property
);
return
solver
->
GetP
arameter
Enum
(
property
);
}
}
void
Solver
::
SetP
roperty
Real
(
std
::
string
property
,
INMOST_DATA_REAL_TYPE
value
)
{
void
Solver
::
SetP
arameter
Real
(
std
::
string
property
,
INMOST_DATA_REAL_TYPE
value
)
{
solver
->
SetP
roperty
Real
(
property
,
value
);
solver
->
SetP
arameter
Real
(
property
,
value
);
}
}
void
Solver
::
SetP
roperty
Enum
(
std
::
string
property
,
INMOST_DATA_ENUM_TYPE
value
)
{
void
Solver
::
SetP
arameter
Enum
(
std
::
string
property
,
INMOST_DATA_ENUM_TYPE
value
)
{
solver
->
SetP
roperty
Enum
(
property
,
value
);
solver
->
SetP
arameter
Enum
(
property
,
value
);
}
}
const
INMOST_DATA_ENUM_TYPE
Solver
::
Iterations
()
const
{
const
INMOST_DATA_ENUM_TYPE
Solver
::
Iterations
()
const
{
...
...
Source/Solver/solver_inner/solver_ddpqiluc2/SolverDDPQILUC2.cpp
View file @
e2c01644
...
@@ -6,20 +6,6 @@ namespace INMOST {
...
@@ -6,20 +6,6 @@ namespace INMOST {
Method
*
preconditioner
=
new
ILUC_preconditioner
(
info
);
Method
*
preconditioner
=
new
ILUC_preconditioner
(
info
);
solver
=
new
KSOLVER
(
preconditioner
,
info
);
solver
=
new
KSOLVER
(
preconditioner
,
info
);
matrix
=
NULL
;
matrix
=
NULL
;
additive_schwartz_overlap
=
DEFAULT_ADDITIVE_SCHWARTZ_OVERLAP
;
maximum_iterations
=
DEFAULT_MAXIMUM_ITERATIONS
;
absolute_tolerance
=
DEFAULT_ABSOLUTE_TOLERANCE
;
relative_tolerance
=
DEFAULT_RELATIVE_TOLERANCE
;
divergence_tolerance
=
DEFAULT_DIVERGENCE_TOLERANCE
;
preconditioner_drop_tolerance
=
DEFAULT_PRECONDITIONER_DROP_TOLERANCE
;
preconditioner_reuse_tolerance
=
DEFAULT_PRECONDITIONER_REUSE_TOLERANCE
;
preconditioner_rescale_iterations
=
DEFAULT_PRECONDITIONER_RESCALE_ITERS
;
preconditioner_ddpq_tolerance
=
DEFAULT_PRECONDITIONER_DDPQ_TOLERANCE
;
preconditioner_reorder_nonzero
=
DEFAULT_PRECONDITIONER_REORDER_NONZEROS
;
preconditioner_condition_estimation
=
DEFAULT_PRECONDITIONER_CONDITION_ESTIMATION
;
preconditioner_adapt_ddpq_tolerance
=
DEFAULT_PRECONDITIONER_ADAPT_DDPQ_TOLERANCE
;
solver_gmres_substeps
=
DEFAULT_SOLVER_GMRES_SUBSTEPS
;
}
}
SolverDDPQILUC2
::
SolverDDPQILUC2
(
const
SolverInterface
*
other
)
{
SolverDDPQILUC2
::
SolverDDPQILUC2
(
const
SolverInterface
*
other
)
{
...
@@ -41,19 +27,19 @@ namespace INMOST {
...
@@ -41,19 +27,19 @@ namespace INMOST {
delete
matrix
;
delete
matrix
;
}
}
matrix
=
new
Sparse
::
Matrix
(
A
);
matrix
=
new
Sparse
::
Matrix
(
A
);
info
.
PrepareMatrix
(
*
matrix
,
additive_schwartz_overlap
);
info
.
PrepareMatrix
(
*
matrix
,
parameters
.
GetParameterEnum
(
"additive_schwartz_overlap"
)
);
solver
->
ReplaceMAT
(
*
matrix
);
solver
->
ReplaceMAT
(
*
matrix
);
solver
->
RealParameter
(
":tau"
)
=
p
reconditioner_drop_tolerance
;
solver
->
RealParameter
(
":tau"
)
=
p
arameters
.
GetParameterReal
(
"drop_tolerance"
)
;
solver
->
RealParameter
(
":tau2"
)
=
p
reconditioner_reuse_tolerance
;
solver
->
RealParameter
(
":tau2"
)
=
p
arameters
.
GetParameterReal
(
"reuse_tolerance"
)
;
solver
->
EnumParameter
(
":scale_iters"
)
=
p
reconditioner_rescale_iterations
;
solver
->
EnumParameter
(
":scale_iters"
)
=
p
arameters
.
GetParameterEnum
(
"rescale_iterations"
)
;
solver
->
RealParameter
(
":ddpq_tau"
)
=
p
reconditioner_ddpq_tolerance
;
solver
->
RealParameter
(
":ddpq_tau"
)
=
p
arameters
.
GetParameterReal
(
"ddpq_tolerance"
)
;
solver
->
EnumParameter
(
":reorder_nnz"
)
=
p
reconditioner_reorder_nonzero
;
solver
->
EnumParameter
(
":reorder_nnz"
)
=
p
arameters
.
GetParameterEnum
(
"reorder_nonzero"
)
;
solver
->
EnumParameter
(
":estimator"
)
=
p
reconditioner_condition_estimation
;
solver
->
EnumParameter
(
":estimator"
)
=
p
arameters
.
GetParameterEnum
(
"condition_estimation"
)
;
solver
->
EnumParameter
(
":ddpq_tau_adapt"
)
=
p
reconditioner_adapt_ddpq_tolerance
;
solver
->
EnumParameter
(
":ddpq_tau_adapt"
)
=
p
arameters
.
GetParameterEnum
(
"adapt_ddpq_tolerance"
)
;
if
(
sizeof
(
KSOLVER
)
==
sizeof
(
BCGSL_solver
))
{
if
(
sizeof
(
KSOLVER
)
==
sizeof
(
BCGSL_solver
))
{
solver
->
EnumParameter
(
"levels"
)
=
solver_gmres_substeps
;
solver
->
EnumParameter
(
"levels"
)
=
parameters
.
GetParameterEnum
(
"gmres_substeps"
)
;
}
}
if
(
!
solver
->
isInitialized
())
{
if
(
!
solver
->
isInitialized
())
{
...
@@ -62,10 +48,10 @@ namespace INMOST {
...
@@ -62,10 +48,10 @@ namespace INMOST {
}
}
bool
SolverDDPQILUC2
::
Solve
(
Sparse
::
Vector
&
RHS
,
Sparse
::
Vector
&
SOL
)
{
bool
SolverDDPQILUC2
::
Solve
(
Sparse
::
Vector
&
RHS
,
Sparse
::
Vector
&
SOL
)
{
solver
->
EnumParameter
(
"maxits"
)
=
maximum_iterations
;
solver
->
EnumParameter
(
"maxits"
)
=
parameters
.
GetParameterEnum
(
"maximum_iterations"
)
;
solver
->
RealParameter
(
"rtol"
)
=
relative_tolerance
;
solver
->
RealParameter
(
"rtol"
)
=
parameters
.
GetParameterReal
(
"relative_tolerance"
)
;
solver
->
RealParameter
(
"atol"
)
=
absolute_tolerance
;
solver
->
RealParameter
(
"atol"
)
=
parameters
.
GetParameterReal
(
"absolute_tolerance"
)
;
solver
->
RealParameter
(
"divtol"
)
=
divergence_tolerance
;
solver
->
RealParameter
(
"divtol"
)
=
parameters
.
GetParameterReal
(
"divergence_tolerance"
)
;
return
solver
->
Solve
(
RHS
,
SOL
);
return
solver
->
Solve
(
RHS
,
SOL
);
}
}
...
@@ -87,48 +73,6 @@ namespace INMOST {
...
@@ -87,48 +73,6 @@ namespace INMOST {
return
matrix
!=
NULL
;
return
matrix
!=
NULL
;
}
}
INMOST_DATA_REAL_TYPE
SolverDDPQILUC2
::
GetPropertyReal
(
std
::
string
property
)
const
{
return
solver
->
RealParameter
(
property
);
}
INMOST_DATA_ENUM_TYPE
SolverDDPQILUC2
::
GetPropertyEnum
(
std
::
string
property
)
const
{
return
solver
->
EnumParameter
(
property
);
}
void
SolverDDPQILUC2
::
SetPropertyReal
(
std
::
string
property
,
INMOST_DATA_REAL_TYPE
value
)
{
if
(
property
==
"absolute_tolerance"
)
absolute_tolerance
=
value
;
else
if
(
property
==
"relative_tolerance"
)
relative_tolerance
=
value
;
else
if
(
property
==
"divergence_tolerance"
)
divergence_tolerance
=
value
;
else
if
(
property
==
"drop_tolerance"
)
preconditioner_drop_tolerance
=
value
;
else
if
(
property
==
"reuse_tolerance"
)
preconditioner_reuse_tolerance
=
value
;
else
if
(
property
==
"ddpq_tolerance"
)
preconditioner_ddpq_tolerance
=
value
;
else
std
::
cout
<<
"Parameter "
<<
property
<<
" of real type is unknown"
<<
std
::
endl
;
}
void
SolverDDPQILUC2
::
SetPropertyEnum
(
std
::
string
property
,
INMOST_DATA_ENUM_TYPE
value
)
{
if
(
property
==
"maximum_iterations"
)
maximum_iterations
=
value
;
else
if
(
property
==
"rescale_iterations"
)
preconditioner_rescale_iterations
=
value
;
else
if
(
property
==
"condition_estimation"
)
preconditioner_condition_estimation
=
value
;
else
if
(
property
==
"adapt_ddpq_tolerance"
)
preconditioner_adapt_ddpq_tolerance
=
value
;
else
if
(
property
==
"schwartz_overlap"
)
additive_schwartz_overlap
=
value
;
else
if
(
property
==
"gmres_substeps"
)
solver_gmres_substeps
=
value
;
else
if
(
property
==
"reorder_nonzeros"
)
preconditioner_reorder_nonzero
=
value
;
else
std
::
cout
<<
"Parameter "
<<
property
<<
" of integral type is unknown"
<<
std
::
endl
;
}
const
INMOST_DATA_ENUM_TYPE
SolverDDPQILUC2
::
Iterations
()
const
{
const
INMOST_DATA_ENUM_TYPE
SolverDDPQILUC2
::
Iterations
()
const
{
return
solver
->
GetIterations
();
return
solver
->
GetIterations
();
}
}
...
...
Source/Solver/solver_inner/solver_ddpqiluc2/SolverDDPQILUC2.h
View file @
e2c01644
...
@@ -13,23 +13,6 @@ namespace INMOST {
...
@@ -13,23 +13,6 @@ namespace INMOST {
Sparse
::
Matrix
*
matrix
;
Sparse
::
Matrix
*
matrix
;
KSOLVER
*
solver
;
KSOLVER
*
solver
;
Solver
::
OrderInfo
info
;
Solver
::
OrderInfo
info
;
INMOST_DATA_ENUM_TYPE
additive_schwartz_overlap
;
INMOST_DATA_ENUM_TYPE
maximum_iterations
;
INMOST_DATA_REAL_TYPE
absolute_tolerance
;
INMOST_DATA_REAL_TYPE
relative_tolerance
;
INMOST_DATA_REAL_TYPE
divergence_tolerance
;
INMOST_DATA_REAL_TYPE
preconditioner_drop_tolerance
;
INMOST_DATA_REAL_TYPE
preconditioner_reuse_tolerance
;
INMOST_DATA_ENUM_TYPE
preconditioner_rescale_iterations
;
INMOST_DATA_REAL_TYPE
preconditioner_ddpq_tolerance
;
INMOST_DATA_ENUM_TYPE
preconditioner_reorder_nonzero
;
INMOST_DATA_ENUM_TYPE
preconditioner_condition_estimation
;
INMOST_DATA_ENUM_TYPE
preconditioner_adapt_ddpq_tolerance
;
INMOST_DATA_ENUM_TYPE
solver_gmres_substeps
;
public:
public:
SolverDDPQILUC2
();
SolverDDPQILUC2
();
...
@@ -47,14 +30,6 @@ namespace INMOST {
...
@@ -47,14 +30,6 @@ namespace INMOST {
virtual
bool
isMatrixSet
();
virtual
bool
isMatrixSet
();
virtual
INMOST_DATA_REAL_TYPE
GetPropertyReal
(
std
::
string
property
)
const
;
virtual
INMOST_DATA_ENUM_TYPE
GetPropertyEnum
(
std
::
string
property
)
const
;
virtual
void
SetPropertyReal
(
std
::
string
property
,
INMOST_DATA_REAL_TYPE
value
);
virtual
void
SetPropertyEnum
(
std
::
string
property
,
INMOST_DATA_ENUM_TYPE
value
);
virtual
const
INMOST_DATA_ENUM_TYPE
Iterations
()
const
;
virtual
const
INMOST_DATA_ENUM_TYPE
Iterations
()
const
;
virtual
const
INMOST_DATA_REAL_TYPE
Residual
()
const
;
virtual
const
INMOST_DATA_REAL_TYPE
Residual
()
const
;
...
...
Source/Solver/solver_inner/solver_ilu2/SolverILU2.cpp
View file @
e2c01644
...
@@ -3,18 +3,6 @@
...
@@ -3,18 +3,6 @@
namespace
INMOST
{
namespace
INMOST
{
SolverILU2
::
SolverILU2
()
{
SolverILU2
::
SolverILU2
()
{
additive_schwartz_overlap
=
DEFAULT_ADDITIVE_SCHWARTZ_OVERLAP
;
maximum_iterations
=
DEFAULT_MAXIMUM_ITERATIONS
;
absolute_tolerance
=
DEFAULT_ABSOLUTE_TOLERANCE
;
relative_tolerance
=
DEFAULT_RELATIVE_TOLERANCE
;
divergence_tolerance
=
DEFAULT_DIVERGENCE_TOLERANCE
;
preconditioner_drop_tolerance
=
DEFAULT_PRECONDITIONER_DROP_TOLERANCE
;
preconditioner_reuse_tolerance
=
DEFAULT_PRECONDITIONER_REUSE_TOLERANCE
;
preconditioner_rescale_iterations
=
DEFAULT_PRECONDITIONER_RESCALE_ITERS
;
preconditioner_fill_level
=
DEFAULT_PRECONDITIONER_FILL_LEVEL
;
solver_gmres_substeps
=
DEFAULT_SOLVER_GMRES_SUBSTEPS
;
Method
*
preconditioner
=
new
ILU2_preconditioner
(
info
);
Method
*
preconditioner
=
new
ILU2_preconditioner
(
info
);
solver
=
new
KSOLVER
(
preconditioner
,
info
);
solver
=
new
KSOLVER
(
preconditioner
,
info
);
matrix
=
NULL
;
matrix
=
NULL
;
...
@@ -39,16 +27,16 @@ namespace INMOST {
...
@@ -39,16 +27,16 @@ namespace INMOST {
delete
matrix
;
delete
matrix
;
}
}
matrix
=
new
Sparse
::
Matrix
(
A
);
matrix
=
new
Sparse
::
Matrix
(
A
);
info
.
PrepareMatrix
(
*
matrix
,
additive_schwartz_overlap
);
info
.
PrepareMatrix
(
*
matrix
,
parameters
.
GetParameterEnum
(
"additive_schwartz_overlap"
)
);
solver
->
ReplaceMAT
(
*
matrix
);
solver
->
ReplaceMAT
(
*
matrix
);
solver
->
RealParameter
(
":tau"
)
=
p
reconditioner_drop_tolerance
;
solver
->
RealParameter
(
":tau"
)
=
p
arameters
.
GetParameterReal
(
"drop_tolerance"
)
;