/[escript]/trunk/finley/src/CPPAdapter/SystemMatrixAdapter.h
ViewVC logotype

Contents of /trunk/finley/src/CPPAdapter/SystemMatrixAdapter.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1339 - (show annotations)
Wed Nov 7 01:53:12 2007 UTC (11 years, 10 months ago) by ksteube
File MIME type: text/plain
File size: 3909 byte(s)
Modified scons target release_src to include lib/ and include/ since
their presence is required for a build.  Modified
mydomain.print_mesh_info(True) to include more useful info about a
distributed domain.  Added mypde.getOperator().print_matrix_info(True)
to tell about a distributed matrix.


1
2 /* $Id$ */
3
4 /*******************************************************
5 *
6 * Copyright 2003-2007 by ACceSS MNRF
7 * Copyright 2007 by University of Queensland
8 *
9 * http://esscc.uq.edu.au
10 * Primary Business: Queensland, Australia
11 * Licensed under the Open Software License version 3.0
12 * http://www.opensource.org/licenses/osl-3.0.php
13 *
14 *******************************************************/
15
16 #if !defined finley_SystemMatrixAdapter_20040610_H
17 #define finley_SystemMatrixAdapter_20040610_H
18 #include "system_dep.h"
19
20 extern "C" {
21 #include "paso/SystemMatrix.h"
22 #include "paso/Options.h"
23 }
24
25 #include "FinleyAdapterException.h"
26 #include "FinleyError.h"
27
28 #include "escript/AbstractSystemMatrix.h"
29 #include "escript/Data.h"
30 #include "escript/UtilC.h"
31
32 #include <boost/python/dict.hpp>
33 #include <boost/shared_ptr.hpp>
34 #include <boost/python/extract.hpp>
35
36 namespace finley {
37
38 class SystemMatrixAdapter:public escript::AbstractSystemMatrix {
39
40 /**
41 \brief
42 Wrapper for Paso_SystemMatrix.
43
44 Description:
45 Wrapper for Paso_SystemMatrix.
46 */
47
48 public:
49
50 /**
51 /brief
52 Default Constructor for SystemMatrixAdapter.
53 NB: Only throws an exception.
54 */
55 FINLEY_DLL_API
56 SystemMatrixAdapter();
57
58 /**
59 /brief
60 Constructor for SystemMatrixAdapter.
61 */
62 FINLEY_DLL_API
63 SystemMatrixAdapter(Paso_SystemMatrix* system_matrix,
64 const int row_blocksize,
65 const escript::FunctionSpace& row_functionspace,
66 const int column_blocksize,
67 const escript::FunctionSpace& colum_functionspace);
68
69
70 /**
71 \brief
72 Destructor for SystemMatrixAdapter. As specified in the constructor
73 this deallocates the pointer given to the constructor.
74 */
75 FINLEY_DLL_API
76 ~SystemMatrixAdapter();
77
78 /**
79 \brief
80 Returns the pointer to the system matrix.
81 */
82 FINLEY_DLL_API
83 Paso_SystemMatrix* getPaso_SystemMatrix() const;
84
85 /**
86 \brief
87 Returns the system matrix as a const AbstractSystemMatrix&.
88 */
89 inline const escript::AbstractSystemMatrix& asAbstractSystemMatrix() const
90 {
91 return dynamic_cast<const escript::AbstractSystemMatrix&>(*this);
92 }
93
94 /**
95 \brief
96 Returns a system matrix as a const SystemMatrixAdapter&.
97 */
98 inline static const SystemMatrixAdapter& asSystemMatrixAdapter(const AbstractSystemMatrix& systemmatrix)
99 {
100 return dynamic_cast<const SystemMatrixAdapter&>(systemmatrix);
101 }
102
103 /**
104 \brief
105 nullifyRowsAndCols - calls Paso_SystemMatrix_nullifyRowsAndCols.
106 */
107 FINLEY_DLL_API
108 void nullifyRowsAndCols(escript::Data& row_q, escript::Data& col_q, const double mdv) const;
109
110 /**
111 \brief writes the matrix to a file using the Matrix Market file format
112 */
113 FINLEY_DLL_API
114 virtual void saveMM(const std::string& fileName) const;
115
116 /**
117 \brief writes the matrix to a file using the Harwell-Boeing file format
118 */
119 FINLEY_DLL_API
120 virtual void saveHB(const std::string& fileName) const;
121
122 /**
123 \brief sets the matrix entries to zero
124 */
125 FINLEY_DLL_API
126 virtual void resetValues() const;
127
128 /**
129 \brief maps escript options onto Paso options:
130 */
131 FINLEY_DLL_API
132 static int mapOptionToPaso(const int option);
133
134 /**
135 \brief prints information about a system matrix
136 */
137 FINLEY_DLL_API
138 void Print_Matrix_Info(const bool) const;
139
140 protected:
141
142 private:
143
144 /**
145 \brief
146 solves the linear system this*out=in
147 */
148 FINLEY_DLL_API
149 virtual void setToSolution(escript::Data& out, escript::Data& in, const boost::python::dict& options) const;
150
151 /**
152 \brief
153 performs y+=this*x
154 */
155 FINLEY_DLL_API
156 virtual void ypAx(escript::Data& y, escript::Data& x) const;
157
158 //
159 // pointer to the externally created finley mesh - system_matrix.
160 //
161 boost::shared_ptr<Paso_SystemMatrix> m_system_matrix;
162
163 };
164
165 } // end of namespace
166 #endif

Properties

Name Value
svn:eol-style native
svn:keywords Author Date Id Revision

  ViewVC Help
Powered by ViewVC 1.1.26