escript  Revision_
DefaultAssembler2D.h
Go to the documentation of this file.
00001 
00002 /*****************************************************************************
00003 *
00004 * Copyright (c) 2003-2014 by University of Queensland
00005 * http://www.uq.edu.au
00006 *
00007 * Primary Business: Queensland, Australia
00008 * Licensed under the Open Software License version 3.0
00009 * http://www.opensource.org/licenses/osl-3.0.php
00010 *
00011 * Development until 2012 by Earth Systems Science Computational Center (ESSCC)
00012 * Development 2012-2013 by School of Earth Sciences
00013 * Development from 2014 by Centre for Geoscience Computing (GeoComp)
00014 *
00015 *****************************************************************************/
00016 #ifndef __RIPLEY_DEFAULTASSEMBLER2D_H__
00017 #define __RIPLEY_DEFAULTASSEMBLER2D_H__
00018 
00019 #include <map>
00020 #include <escript/Data.h>
00021 #include <ripley/Ripley.h>
00022 #include <ripley/RipleyException.h>
00023 #include <ripley/AbstractAssembler.h>
00024 #include <ripley/Rectangle.h>
00025 
00026 namespace ripley {
00027 
00028 
00029 class DefaultAssembler2D : public AbstractAssembler {
00030 public:
00031     DefaultAssembler2D(Rectangle *dom, double *m_dx, dim_t *m_NX, dim_t *m_NE,
00032             dim_t *m_NN) : AbstractAssembler() {
00033         domain = dom;
00034         this->m_dx = m_dx;
00035         this->m_NX = m_NX;
00036         this->m_NE = m_NE;
00037         this->m_NN = m_NN;
00038     }
00039     ~DefaultAssembler2D(){};
00040     /* The default RipleyDomain assemblers, with original signatures */
00041     
00044     virtual void assemblePDESingle(paso::SystemMatrix_ptr mat, escript::Data& rhs,
00045             const escript::Data& A, const escript::Data& B,
00046             const escript::Data& C, const escript::Data& D,
00047             const escript::Data& X, const escript::Data& Y) const;
00048 
00051     virtual void assemblePDEBoundarySingle(paso::SystemMatrix_ptr mat,
00052             escript::Data& rhs, const escript::Data& d,
00053             const escript::Data& y) const;
00054 
00057     virtual void assemblePDESingleReduced(paso::SystemMatrix_ptr mat,
00058             escript::Data& rhs, const escript::Data& A, const escript::Data& B,
00059             const escript::Data& C, const escript::Data& D,
00060             const escript::Data& X, const escript::Data& Y) const;
00061 
00064     virtual void assemblePDEBoundarySingleReduced(paso::SystemMatrix_ptr mat,
00065             escript::Data& rhs, const escript::Data& d,
00066             const escript::Data& y) const;
00067 
00070     virtual void assemblePDESystem(paso::SystemMatrix_ptr mat, escript::Data& rhs,
00071             const escript::Data& A, const escript::Data& B,
00072             const escript::Data& C, const escript::Data& D,
00073             const escript::Data& X, const escript::Data& Y) const;
00074 
00077     virtual void assemblePDEBoundarySystem(paso::SystemMatrix_ptr mat,
00078             escript::Data& rhs, const escript::Data& d,
00079             const escript::Data& y) const;
00080 
00083     virtual void assemblePDESystemReduced(paso::SystemMatrix_ptr mat,
00084             escript::Data& rhs, const escript::Data& A, const escript::Data& B,
00085             const escript::Data& C, const escript::Data& D,
00086             const escript::Data& X, const escript::Data& Y) const;
00087 
00090     virtual void assemblePDEBoundarySystemReduced(paso::SystemMatrix_ptr mat,
00091             escript::Data& rhs, const escript::Data& d,
00092             const escript::Data& y) const;
00093     
00094     /* The new interface for assemblers */
00095     virtual void assemblePDESingle(paso::SystemMatrix_ptr mat, escript::Data& rhs,
00096         std::map<std::string, escript::Data> coefs) const;
00097     virtual void assemblePDEBoundarySingle(paso::SystemMatrix_ptr mat,
00098             escript::Data& rhs,
00099             std::map<std::string, escript::Data> coefs) const;
00100     virtual void assemblePDESingleReduced(paso::SystemMatrix_ptr mat,
00101             escript::Data& rhs,
00102             std::map<std::string, escript::Data> coefs) const;
00103     virtual void assemblePDEBoundarySingleReduced(paso::SystemMatrix_ptr mat,
00104             escript::Data& rhs,
00105             std::map<std::string, escript::Data> coefs) const;
00106     virtual void assemblePDESystem(paso::SystemMatrix_ptr mat, escript::Data& rhs,
00107             std::map<std::string, escript::Data> coefs) const;
00108     virtual void assemblePDEBoundarySystem(paso::SystemMatrix_ptr mat,
00109             escript::Data& rhs,
00110             std::map<std::string, escript::Data> coefs) const;
00111     virtual void assemblePDESystemReduced(paso::SystemMatrix_ptr mat,
00112             escript::Data& rhs,
00113             std::map<std::string, escript::Data> coefs) const;
00114     virtual void assemblePDEBoundarySystemReduced(paso::SystemMatrix_ptr mat,
00115             escript::Data& rhs,
00116             std::map<std::string, escript::Data> coefs) const;
00117             
00118     void collateFunctionSpaceTypes(std::vector<int>& fsTypes, 
00119             std::map<std::string, escript::Data> coefs) const;
00120 protected:
00121     Rectangle *domain;
00122     double *m_dx;
00123     dim_t *m_NX;
00124     dim_t *m_NE;
00125     dim_t *m_NN;
00126 };
00127 
00128 } // namespace ripley
00129 
00130 #endif // __RIPLEY_DEFAULTASSEMBLER2D_H__
00131