/[escript]/trunk/escript/src/AbstractSystemMatrix.cpp
ViewVC logotype

Contents of /trunk/escript/src/AbstractSystemMatrix.cpp

Parent Directory Parent Directory | Revision Log Revision Log


Revision 969 - (show annotations)
Tue Feb 13 23:02:23 2007 UTC (12 years, 9 months ago) by ksteube
File size: 3936 byte(s)
Parallelization using MPI for solution of implicit problems.

Parallelization for explicit problems has already been accomplished in
the main SVN branch.

This is incomplete and is not ready for use.


1 // $Id$
2 /*
3 ************************************************************
4 * Copyright 2006 by ACcESS MNRF *
5 * *
6 * http://www.access.edu.au *
7 * Primary Business: Queensland, Australia *
8 * Licensed under the Open Software License version 3.0 *
9 * http://www.opensource.org/licenses/osl-3.0.php *
10 * *
11 ************************************************************
12 */
13
14 #include "AbstractSystemMatrix.h"
15 #include "DataException.h"
16 #include "DataArrayView.h"
17 #include "Data.h"
18
19 namespace escript {
20
21 AbstractSystemMatrix::AbstractSystemMatrix() {
22 //std::cout << "Called default AbstractSystemMatrix constructor" << std::endl;
23 m_empty=1;
24 }
25
26 AbstractSystemMatrix::AbstractSystemMatrix(const int row_blocksize,
27 const FunctionSpace& row_functionspace,
28 const int column_blocksize,
29 const FunctionSpace& column_functionspace)
30 {
31 if (row_blocksize<=0)
32 throw DataException("Error - negative row block size of system matrix.");
33 if (column_blocksize<=0)
34 throw DataException("Error - negative column block size of system matrix.");
35
36 m_empty=0;
37 m_row_blocksize=row_blocksize;
38 m_column_blocksize=column_blocksize;
39 m_row_functionspace=row_functionspace;
40 m_column_functionspace=column_functionspace;
41 }
42
43 AbstractSystemMatrix::~AbstractSystemMatrix() {
44 }
45
46 int AbstractSystemMatrix::isEmpty() const {
47 return m_empty;
48 }
49
50 Data operator*(const AbstractSystemMatrix& left,const Data& right)
51 {
52 Data tmp=(Data) right;
53 return left.vectorMultiply(tmp);
54 }
55
56 Data AbstractSystemMatrix::vectorMultiply(Data& right) const
57 {
58 if (isEmpty())
59 throw SystemMatrixException("Error - Matrix is empty.");
60 if (right.getDataPointSize()!=getColumnBlockSize())
61 throw SystemMatrixException("Error - column block size and input data size do not match.");
62 DataArrayView::ShapeType shape;
63 if (getRowBlockSize()>1) shape.push_back(getRowBlockSize());
64
65 Data out=Data(0.,shape,getRowFunctionSpace(),true);
66 Data in=Data(right,getColumnFunctionSpace());
67 ypAx(out,in);
68 return out;
69 }
70
71 void AbstractSystemMatrix::ypAx(Data& y,Data& x) const
72 {
73 throw SystemMatrixException("Error - ypAx not available");
74 }
75
76 Data AbstractSystemMatrix::solve(Data& in,const boost::python::dict& options) const
77 {
78 printf("ksteube in escript/src/AbstractSystemMatrix.cpp : solve()\n");
79 if (isEmpty())
80 throw SystemMatrixException("Error - Matrix is empty.");
81 if (in.getFunctionSpace()!=getRowFunctionSpace())
82 throw SystemMatrixException("Error - row function space and function space of right hand side do not match.");
83 if (in.getDataPointSize()!=getRowBlockSize())
84 throw SystemMatrixException("Error - row block size and right hand side size do not match.");
85 DataArrayView::ShapeType shape;
86 if (getRowBlockSize()>1) shape.push_back(getColumnBlockSize());
87 Data out=Data(0.,shape,getColumnFunctionSpace(),true);
88 setToSolution(out,in,options);
89 return out;
90 }
91 void AbstractSystemMatrix::setToSolution(Data& out,Data& in,const boost::python::dict& options) const
92 {
93 throw SystemMatrixException("Error - setToSolution not available");
94 }
95 void AbstractSystemMatrix::saveMM(const std::string& fileName) const
96 {
97 throw SystemMatrixException("Error - Matrix Market interface not available.");
98 }
99 void AbstractSystemMatrix::saveHB(const std::string& fileName) const
100 {
101 throw SystemMatrixException("Error - Harwell-Boeing interface not available.");
102 }
103 void AbstractSystemMatrix::resetValues() const
104 {
105 throw SystemMatrixException("Error - setValue is not implemented.");
106 }
107
108 } // end of namespace

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26