/[escript]/trunk/pasowrap/src/TransportProblemAdapter.h
ViewVC logotype

Contents of /trunk/pasowrap/src/TransportProblemAdapter.h

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3681 - (show annotations)
Fri Nov 18 04:54:15 2011 UTC (9 years, 8 months ago) by caltinay
File MIME type: text/plain
File size: 4115 byte(s)
Moved implementation of getTransportTypeId() and getSystemMatrixTypeId() into
pasowrap.

1
2 /*******************************************************
3 *
4 * Copyright (c) 2003-2010 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 /* This file was extracted from finley's CPPAdapter then modified */
15
16 #if !defined TransportProblemAdapter_H
17 #define TransportProblemAdapter_H
18 #include "system_dep.h"
19
20 extern "C" {
21 #include "paso/Transport.h"
22 #include "paso/Options.h"
23 }
24
25 #include "PasoException.h"
26
27 #include "escript/AbstractTransportProblem.h"
28 #include "escript/Data.h"
29 #include "escript/UtilC.h"
30
31 #include <boost/python/object.hpp>
32 #include <boost/shared_ptr.hpp>
33 #include <boost/python/extract.hpp>
34
35 namespace paso {
36
37 class TransportProblemAdapter:public escript::AbstractTransportProblem {
38
39 /**
40 \brief
41 Wrapper for Paso_TransportProblem.
42
43 Description:
44 Wrapper for Paso_TransportProblem.
45 */
46
47 public:
48
49 /**
50 /brief
51 Default Constructor for TransportProblemAdapter.
52 NB: Only throws an exception.
53 */
54 PASOWRAP_DLL_API
55 TransportProblemAdapter();
56
57 /**
58 /brief
59 Constructor for TransportProblemAdapter.
60 */
61 PASOWRAP_DLL_API
62 TransportProblemAdapter(Paso_TransportProblem* transport_problem,
63 const bool useBackwardEuler,
64 const int block_size,
65 const escript::FunctionSpace& functionspace);
66
67 /**
68 \brief
69 Destructor for TransportProblemAdapter. As specified in the constructor
70 this deallocates the pointer given to the constructor.
71 */
72 PASOWRAP_DLL_API
73 ~TransportProblemAdapter();
74
75 /**
76 \brief
77 Returns the pointer to the transport problem.
78 */
79 PASOWRAP_DLL_API
80 Paso_TransportProblem* getPaso_TransportProblem() const;
81
82 /**
83 \brief
84 Returns the transport problem as a const AbstractTransportProblem&.
85 */
86 inline const escript::AbstractTransportProblem& asAbstractTransportProblem() const
87 {
88 return dynamic_cast<const escript::AbstractTransportProblem&>(*this);
89 }
90
91 /**
92 \brief
93 Returns a transport problem as a const TransportProblemAdapter&.
94 */
95 inline static const TransportProblemAdapter& asTransportProblemAdapter(const AbstractTransportProblem& transportproblem)
96 {
97 return dynamic_cast<const TransportProblemAdapter&>(transportproblem);
98 }
99
100 /**
101 * \brief resets the transport operator typically as they have been updated.
102 * */
103 PASOWRAP_DLL_API
104 virtual void resetTransport() const;
105
106 /**
107 * \brief returns a save time step size.
108 */
109 PASOWRAP_DLL_API
110 virtual double getSafeTimeStepSize() const;
111
112 /**
113 * \brief \brief returns the value for unlimited time step size.
114 */
115 PASOWRAP_DLL_API
116 virtual double getUnlimitedTimeStepSize() const;
117
118 /**
119 \brief
120 returns the identifier of the transport problem type to be used
121 when a particular solver, preconditioner and package is used
122 */
123 PASOWRAP_DLL_API
124 static int getTransportTypeId(const int solver, const int preconditioner,
125 const int package, const bool symmetry, Esys_MPIInfo* mpiInfo);
126
127 protected:
128
129 private:
130
131 /**
132 * \brief
133 * sets solution out by time step dt.
134 * */
135 PASOWRAP_DLL_API
136 virtual void setToSolution(escript::Data& out,escript::Data& u0, escript::Data& source,const double dt, boost::python::object& options) const;
137
138
139 /**
140 * \brief
141 * copy constraint u_{,t}=r where q>0 into the problem
142 * it is assumed that q and r are not empty and has appropriate shape and function space.
143 * */
144 PASOWRAP_DLL_API
145 virtual void copyConstraint(escript::Data& source, escript::Data& q, escript::Data& r, const double factor) const;
146
147
148 //
149 // pointer to the externally created transport_problem.
150 //
151 boost::shared_ptr<Paso_TransportProblem> m_transport_problem;
152
153 };
154
155 } // end of namespace
156 #endif

  ViewVC Help
Powered by ViewVC 1.1.26