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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3681 - (hide 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 jfenwick 3661
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 caltinay 3681 /**
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 jfenwick 3661 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