Intrepid
http://trilinos.sandia.gov/packages/docs/r11.2/packages/intrepid/src/Discretization/Basis/Intrepid_Basis.hpp
Go to the documentation of this file.
00001 // @HEADER
00002 // ************************************************************************
00003 //
00004 //                           Intrepid Package
00005 //                 Copyright (2007) Sandia Corporation
00006 //
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 //
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Pavel Bochev  (pbboche@sandia.gov)
00038 //                    Denis Ridzal  (dridzal@sandia.gov), or
00039 //                    Kara Peterson (kjpeter@sandia.gov)
00040 //
00041 // ************************************************************************
00042 // @HEADER
00043 
00049 #ifndef INTREPID_BASIS_HPP
00050 #define INTREPID_BASIS_HPP
00051 #include "Intrepid_ConfigDefs.hpp"
00052 #include "Intrepid_Types.hpp"
00053 #include "Intrepid_Utils.hpp"
00054 #include "Shards_CellTopology.hpp"
00055 
00056 namespace Intrepid {
00057     
00088 template<class Scalar, class ArrayScalar>
00089 class Basis {
00090 private:
00091 
00094   virtual void initializeTags() = 0;
00095   
00096 protected: 
00097   
00100   int basisCardinality_;
00101 
00104   int basisDegree_;
00105   
00109   shards::CellTopology basisCellTopology_;
00110   
00113   EBasis basisType_;
00114   
00117   ECoordinates basisCoordinates_;
00118   
00121   bool basisTagsAreSet_;
00122   
00134   std::vector<std::vector<int> > ordinalToTag_;
00135   
00147   std::vector<std::vector<std::vector<int> > > tagToOrdinal_;  
00148   
00149 public:
00150     
00153   virtual ~Basis() {}
00154   
00155         
00174   virtual void getValues(ArrayScalar &          outputValues,
00175                          const ArrayScalar &    inputPoints,
00176                          const EOperator        operatorType) const = 0;
00177   
00178     
00198   virtual void getValues(ArrayScalar &          outputValues,
00199                          const ArrayScalar &    inputPoints,
00200                          const ArrayScalar &    cellVertices,
00201                          const EOperator        operatorType = OPERATOR_VALUE) const = 0;
00202   
00207   virtual int getCardinality() const;
00208   
00209   
00214   virtual int getDegree() const;
00215   
00216   
00222   virtual const shards::CellTopology getBaseCellTopology() const;
00223 
00224   
00229   virtual EBasis getBasisType() const;
00230   
00231   
00236   virtual ECoordinates getCoordinateSystem() const;
00237   
00238   
00247   virtual int getDofOrdinal(const int subcDim,
00248                             const int subcOrd,
00249                             const int subcDofOrd);  
00250 
00252   virtual const std::vector<std::vector<std::vector<int> > > &getDofOrdinalData( );
00253 
00254   
00265   virtual const std::vector<int>&  getDofTag(const int dofOrd);
00266   
00267   
00276   virtual const std::vector<std::vector<int> >& getAllDofTags();
00277   
00278   
00279 
00280 
00281 }; // class Basis
00282 
00283 
00284 //--------------------------------------------------------------------------------------------//
00285 //                                                                                            //
00286 //                            Helper functions of the Basis class                             //
00287 //                                                                                            //
00288 //--------------------------------------------------------------------------------------------//
00289 
00290 //--------------------------------------------------------------------------------------------//
00291 //                                                                                            //            
00292 //                                        Argument checks                                     //
00293 //                                                                                            //            
00294 //--------------------------------------------------------------------------------------------//
00295 
00306 template<class Scalar, class ArrayScalar>
00307 void getValues_HGRAD_Args(ArrayScalar &                outputValues,
00308                           const ArrayScalar &          inputPoints,
00309                           const EOperator              operatorType,
00310                           const shards::CellTopology&  cellTopo,
00311                           const int                    basisCard);
00312 
00323 template<class Scalar, class ArrayScalar>
00324 void getValues_HCURL_Args(ArrayScalar &                outputValues,
00325                           const ArrayScalar &          inputPoints,
00326                           const EOperator              operatorType,
00327                           const shards::CellTopology&  cellTopo,
00328                           const int                    basisCard);
00329 
00340 template<class Scalar, class ArrayScalar>
00341 void getValues_HDIV_Args(ArrayScalar &                outputValues,
00342                           const ArrayScalar &          inputPoints,
00343                           const EOperator              operatorType,
00344                           const shards::CellTopology&  cellTopo,
00345                           const int                    basisCard);
00346 
00347 
00352 template<class ArrayScalar>
00353 class DofCoordsInterface {
00354 public:
00359    virtual ~DofCoordsInterface() = 0;
00360 
00367    virtual void getDofCoords(ArrayScalar & DofCoords) const = 0;
00368 };
00369 
00370 
00371 // include templated definitions
00372 #include <Intrepid_BasisDef.hpp>
00373   
00374 
00375 }// namespace Intrepid
00376 
00377 
00378 //--------------------------------------------------------------------------------------------//
00379 //                                                                                            //
00380 //                            D O C U M E N T A T I O N   P A G E S                           //   
00381 //                                                                                            //
00382 //--------------------------------------------------------------------------------------------//
00483 #endif