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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 97 - (show annotations)
Tue Dec 14 05:39:33 2004 UTC (14 years, 8 months ago) by jgs
Original Path: trunk/esys2/escript/src/Data/AbstractSystemMatrix.cpp
File size: 4160 byte(s)
*** empty log message ***

1 // $Id$
2 /*
3 ******************************************************************************
4 * *
5 * COPYRIGHT ACcESS 2004 - All Rights Reserved *
6 * *
7 * This software is the property of ACcESS. No part of this code *
8 * may be copied in any form or by any means without the expressed written *
9 * consent of ACcESS. Copying, use or modification of this software *
10 * by any unauthorised person is illegal unless that person has a software *
11 * license agreement with ACcESS. *
12 * *
13 ******************************************************************************
14 */
15
16 #include "escript/Data/AbstractSystemMatrix.h"
17 #include "escript/Data/FunctionSpace.h"
18 #include "escript/Data/DataException.h"
19 #include "escript/Data/DataArrayView.h"
20
21 namespace escript {
22
23 AbstractSystemMatrix::AbstractSystemMatrix() {
24 //std::cout << "Called default AbstractSystemMatrix constructor" << std::endl;
25 m_empty=1;
26 }
27
28 AbstractSystemMatrix::AbstractSystemMatrix(const int row_blocksize,
29 const FunctionSpace& row_functionspace,
30 const int column_blocksize,
31 const FunctionSpace& column_functionspace)
32 {
33 if (row_blocksize<=0)
34 throw DataException("Error - negative row block size of system matrix.");
35 if (column_blocksize<=0)
36 throw DataException("Error - negative column block size of system matrix.");
37
38 m_empty=0;
39 m_row_blocksize=row_blocksize;
40 m_column_blocksize=column_blocksize;
41 m_row_functionspace=row_functionspace;
42 m_column_functionspace=column_functionspace;
43 }
44
45 AbstractSystemMatrix::~AbstractSystemMatrix() {
46 }
47
48 int AbstractSystemMatrix::isEmpty() const {
49 return m_empty;
50 }
51
52 Data operator*(const AbstractSystemMatrix& left, const Data& right)
53 {
54 return left.vectorMultiply(right);
55 }
56
57 Data AbstractSystemMatrix::vectorMultiply(const Data& right) const
58 {
59 if (isEmpty())
60 throw SystemMatrixException("Error - Matrix is empty.");
61 if (right.getFunctionSpace()!=getColumnFunctionSpace())
62 throw SystemMatrixException("Error - column function space and function space of input data do not match.");
63 if (right.getDataPointSize()!=getColumnBlockSize())
64 throw SystemMatrixException("Error - column block size and input data size do not match.");
65 DataArrayView::ShapeType shape;
66 if (getRowBlockSize()>1) shape.push_back(getRowBlockSize());
67
68 Data out=Data(0.,shape,getRowFunctionSpace(),true);
69 ypAx(out,right);
70 return out;
71 }
72
73 void AbstractSystemMatrix::ypAx(Data& y,const Data& x) const
74 {
75 throw SystemMatrixException("Error - ypAx not available");
76 }
77
78 Data AbstractSystemMatrix::solve(const Data& in,const boost::python::dict& options) const
79 {
80 if (isEmpty())
81 throw SystemMatrixException("Error - Matrix is empty.");
82 if (in.getFunctionSpace()!=getRowFunctionSpace())
83 throw SystemMatrixException("Error - row function space and function space of right hand side do not match.");
84 if (in.getDataPointSize()!=getRowBlockSize())
85 throw SystemMatrixException("Error - row block size and right hand side size do not match.");
86 DataArrayView::ShapeType shape;
87 if (getRowBlockSize()>1) shape.push_back(getColumnBlockSize());
88 Data out=Data(0.,shape,getColumnFunctionSpace(),true);
89 setToSolution(out,in,options);
90 return out;
91 }
92 void AbstractSystemMatrix::setToSolution(Data& out,const Data& in,const boost::python::dict& options) const
93 {
94 throw SystemMatrixException("Error - setToSolution not available");
95 }
96 void AbstractSystemMatrix::saveMM(const std::string& fileName) const
97 {
98 throw SystemMatrixException("Error - Matrix Market interface not available.");
99 }
100 void AbstractSystemMatrix:: setValue(const double value) const
101 {
102 }
103
104 } // end of namespace

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26