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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1811 - (show annotations)
Thu Sep 25 23:11:13 2008 UTC (10 years, 3 months ago) by ksteube
File size: 4906 byte(s)
Copyright updated in all files

1
2 /*******************************************************
3 *
4 * Copyright (c) 2003-2008 by University of Queensland
5 * Earth Systems Science Computational Center (ESSCC)
6 * http://www.uq.edu.au/esscc
7 *
8 * Primary Business: Queensland, Australia
9 * Licensed under the Open Software License version 3.0
10 * http://www.opensource.org/licenses/osl-3.0.php
11 *
12 *******************************************************/
13
14
15 #include "AbstractTransportProblem.h"
16 #include "TransportProblemException.h"
17 #include "DataTypes.h"
18 #include "Data.h"
19 #include <iostream>
20
21
22 namespace escript {
23
24 AbstractTransportProblem::AbstractTransportProblem() {
25 m_empty=1;
26 }
27
28 AbstractTransportProblem::AbstractTransportProblem(const double theta, const int blocksize,
29 const FunctionSpace& functionspace)
30 {
31 if (blocksize<=0)
32 throw TransportProblemException("Error - negative block size of transport problem.");
33 if ((theta<0.) || (theta>1.))
34 throw TransportProblemException("Error - theta needs to be between 0. and 1..");
35
36 m_empty=0;
37 m_blocksize=blocksize;
38 m_functionspace=functionspace;
39 m_theta=theta;
40 }
41
42 AbstractTransportProblem::~AbstractTransportProblem() {
43 }
44
45 int AbstractTransportProblem::isEmpty() const {
46 return m_empty;
47 }
48
49
50 Data AbstractTransportProblem::solve(Data& source, const double dt, const boost::python::dict& options) const
51 {
52 if (isEmpty())
53 throw TransportProblemException("Error - transport problem is empty.");
54 if (dt<=0.)
55 throw TransportProblemException("Error - dt needs to be positive.");
56 if (source.getFunctionSpace()!=getFunctionSpace())
57 throw TransportProblemException("Error - function space of transport problem and function space of source do not match.");
58 if (source.getDataPointSize()!=getBlockSize())
59 throw TransportProblemException("Error - block size of transport problem and source do not match.");
60 DataTypes::ShapeType shape;
61 if (getBlockSize()>1) shape.push_back(getBlockSize());
62 Data out=Data(0.,shape,getFunctionSpace(),true);
63 setToSolution(out,source,dt,options);
64 return out;
65 }
66
67 void AbstractTransportProblem::setInitialValue(Data& u) const
68 {
69 if (isEmpty())
70 throw TransportProblemException("Error - transport problem is empty.");
71 if (u.isEmpty())
72 throw TransportProblemException("Error - empty initial value.");
73
74 if ((getBlockSize()==1) && (u.getDataPointRank()>0) || (u.getDataPointRank()>1))
75 throw TransportProblemException("Error - illegal rank of initial value.");
76
77 if (u.getDataPointSize()!=getBlockSize())
78 throw TransportProblemException("Error - block size of transport problem and initial value do not match.");
79
80 Data u2=Data(u,getFunctionSpace());
81 copyInitialValue(u2);
82 }
83 void AbstractTransportProblem::insertConstraint(Data& source, Data& q, Data& r) const
84 {
85 source.expand();
86 if (isEmpty())
87 throw TransportProblemException("Error - transport problem is empty.");
88 if (q.isEmpty()) {
89 return;
90 }
91 if ((getBlockSize()==1) && (q.getDataPointRank()>0) || (q.getDataPointRank()>1))
92 throw TransportProblemException("Error - illegal rank of constraint location.");
93 if (q.getDataPointSize()!=getBlockSize())
94 throw TransportProblemException("Error - block size of transport problem and constraint location don't match.");
95 Data q2=Data(q,getFunctionSpace());
96
97 if (r.isEmpty()) {
98 Data r2=Data(0.,q.getDataPointShape(),getFunctionSpace());
99 copyConstraint(source,q2,r2);
100 } else {
101 if ((getBlockSize()==1) && (r.getDataPointRank()>0) || (r.getDataPointRank()>1))
102 throw TransportProblemException("Error - illegal rank of constraint value.");
103 if (r.getDataPointSize()!=getBlockSize())
104 throw TransportProblemException("Error - block size of transport problem and constraint value don't match.");
105 Data r2=Data(r,getFunctionSpace());
106 copyConstraint(source,q2,r2);
107 }
108 }
109
110 void AbstractTransportProblem::copyConstraint(Data& source, Data& q, Data& r) const
111 {
112 throw TransportProblemException("Error - copyConstraint is not available");
113 }
114 void AbstractTransportProblem::copyInitialValue(Data& u) const
115 {
116 throw TransportProblemException("Error - copyInitialValue is not available");
117 }
118 void AbstractTransportProblem::setToSolution(Data& out,Data& source,const double dt, const boost::python::dict& options) const
119 {
120 throw TransportProblemException("Error - setToSolution is not available");
121 }
122 void AbstractTransportProblem::resetTransport() const
123 {
124 throw TransportProblemException("Error - resetProblem is not implemented.");
125 }
126 double AbstractTransportProblem::getSafeTimeStepSize() const
127 {
128 throw TransportProblemException("Error - getSafeTimeStepSize is not implemented.");
129 }
130
131 } // end of namespace

Properties

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

  ViewVC Help
Powered by ViewVC 1.1.26