SundanceQuadratureIntegralBase.hpp
Go to the documentation of this file.
00001 /* @HEADER@ */
00002 // ************************************************************************
00003 // 
00004 //                             Sundance
00005 //                 Copyright 2011 Sandia Corporation
00006 // 
00007 // Under the terms of Contract DE-AC04-94AL85000 with Sandia Corporation,
00008 // the U.S. Government retains certain rights in this software.
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 Kevin Long (kevin.long@ttu.edu)
00038 // 
00039 
00040 /* @HEADER@ */
00041 
00042 #ifndef SUNDANCE_QUADRATUREINTEGRALBASE_H
00043 #define SUNDANCE_QUADRATUREINTEGRALBASE_H
00044 
00045 #include "SundanceDefs.hpp"
00046 #include "SundanceElementIntegral.hpp"
00047 
00048 namespace Sundance
00049 {
00050 using namespace Teuchos;
00051     
00052 /** 
00053  *  
00054  *
00055  */
00056 class QuadratureIntegralBase
00057   : public ElementIntegral
00058 {
00059 public:
00060 
00061   /** Construct a zero form to be computed by quadrature */
00062   QuadratureIntegralBase(int spatialDim,
00063     const CellType& maxCellType,
00064     int dim, 
00065     const CellType& cellType,
00066     const QuadratureFamily& quad,
00067     bool isInternalBdry,
00068     const ParametrizedCurve& globalCurve,
00069     const Mesh& mesh,
00070     int verb);
00071 
00072   /** Construct a one form to be computed by quadrature */
00073   QuadratureIntegralBase(int spatialDim,
00074     const CellType& maxCellType,
00075     int dim, 
00076     const CellType& cellType,
00077     const BasisFamily& testBasis,
00078     int alpha,
00079     int testDerivOrder,
00080     const QuadratureFamily& quad,
00081     bool isInternalBdry,
00082     const ParametrizedCurve& globalCurve,
00083     const Mesh& mesh,
00084     int verb);
00085       
00086   /** Construct a two-form to be computed by quadrature */
00087   QuadratureIntegralBase(int spatialDim,
00088     const CellType& maxCellType,
00089     int dim,
00090     const CellType& cellType,
00091     const BasisFamily& testBasis,
00092     int alpha,
00093     int testDerivOrder,
00094     const BasisFamily& unkBasis,
00095     int beta,
00096     int unkDerivOrder,
00097     const QuadratureFamily& quad,
00098     bool isInternalBdry,
00099     const ParametrizedCurve& globalCurve,
00100     const Mesh& mesh,
00101     int verb);
00102       
00103   /** virtual dtor */
00104   virtual ~QuadratureIntegralBase(){;}
00105       
00106      /** */
00107   virtual void transform(const CellJacobianBatch& JTrans,
00108     const CellJacobianBatch& JVol,
00109     const Array<int>& isLocalFlag,
00110     const Array<int>& facetNum,
00111     const RCP<Array<int> >& cellLIDs,
00112     const double* const coeff,
00113     RCP<Array<double> >& A) const 
00114     {
00115       if (order()==2) transformTwoForm(JTrans, JVol, facetNum, cellLIDs,coeff, A);
00116       else if (order()==1) transformOneForm(JTrans, JVol, facetNum, cellLIDs,coeff, A);
00117       else transformZeroForm(JTrans, JVol, isLocalFlag, facetNum, cellLIDs,coeff, A);
00118     }
00119       
00120   /** */
00121   virtual void transformZeroForm(const CellJacobianBatch& JTrans,
00122     const CellJacobianBatch& JVol,
00123     const Array<int>& isLocalFlag,
00124     const Array<int>& facetIndex,
00125     const RCP<Array<int> >& cellLIDs,
00126     const double* const coeff,
00127     RCP<Array<double> >& A) const = 0;
00128       
00129   /** */
00130   virtual void transformTwoForm(const CellJacobianBatch& JTrans,
00131     const CellJacobianBatch& JVol,
00132     const Array<int>& facetIndex,
00133     const RCP<Array<int> >& cellLIDs,
00134     const double* const coeff,
00135     RCP<Array<double> >& A) const = 0;
00136       
00137   /** */
00138   virtual void transformOneForm(const CellJacobianBatch& JTrans,
00139     const CellJacobianBatch& JVol,
00140     const Array<int>& facetIndex,
00141     const RCP<Array<int> >& cellLIDs,
00142     const double* const coeff,
00143     RCP<Array<double> >& A) const = 0;
00144       
00145       
00146   /** */
00147   virtual int nQuad() const {return nQuad_;}
00148       
00149   static double& totalFlops() {static double rtn = 0; return rtn;}
00150 
00151 protected:
00152   static void addFlops(const double& flops) {totalFlops() += flops;}
00153       
00154   const QuadratureFamily& quad() const {return quad_;}
00155   /** */
00156   int nQuad_ ;
00157 
00158 private:
00159 
00160   /* */
00161   QuadratureFamily quad_;
00162       
00163 };
00164 
00165 }
00166 
00167 
00168 #endif

Site Contact