00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef SUNDANCE_QUADRATUREINTEGRAL_H
00032 #define SUNDANCE_QUADRATUREINTEGRAL_H
00033
00034 #include "SundanceDefs.hpp"
00035 #include "SundanceQuadratureIntegralBase.hpp"
00036
00037 namespace Sundance
00038 {
00039
00040 using namespace Teuchos;
00041
00042
00043
00044
00045
00046 class QuadratureIntegral
00047 : public QuadratureIntegralBase
00048 {
00049 public:
00050
00051 QuadratureIntegral(int spatialDim,
00052 const CellType& maxCellType,
00053 int dim,
00054 const CellType& cellType,
00055 const QuadratureFamily& quad,
00056 bool isInternalBdry,
00057 const ParametrizedCurve& globalCurve,
00058 const Mesh& mesh,
00059 int verb);
00060
00061
00062 QuadratureIntegral(int spatialDim,
00063 const CellType& maxCellType,
00064 int dim,
00065 const CellType& cellType,
00066 const BasisFamily& testBasis,
00067 int alpha,
00068 int testDerivOrder,
00069 const QuadratureFamily& quad,
00070 bool isInternalBdry,
00071 const ParametrizedCurve& globalCurve,
00072 const Mesh& mesh,
00073 int verb);
00074
00075
00076 QuadratureIntegral(int spatialDim,
00077 const CellType& maxCellType,
00078 int dim,
00079 const CellType& cellType,
00080 const BasisFamily& testBasis,
00081 int alpha,
00082 int testDerivOrder,
00083 const BasisFamily& unkBasis,
00084 int beta,
00085 int unkDerivOrder,
00086 const QuadratureFamily& quad,
00087 bool isInternalBdry,
00088 const ParametrizedCurve& globalCurve,
00089 const Mesh& mesh,
00090 int verb);
00091
00092
00093 virtual ~QuadratureIntegral(){;}
00094
00095
00096 virtual void transformZeroForm(const CellJacobianBatch& JTrans,
00097 const CellJacobianBatch& JVol,
00098 const Array<int>& isLocalFlag,
00099 const Array<int>& facetIndex,
00100 const RCP<Array<int> >& cellLIDs,
00101 const double* const coeff,
00102 RCP<Array<double> >& A) const ;
00103
00104
00105 virtual void transformTwoForm(const CellJacobianBatch& JTrans,
00106 const CellJacobianBatch& JVol,
00107 const Array<int>& facetIndex,
00108 const RCP<Array<int> >& cellLIDs,
00109 const double* const coeff,
00110 RCP<Array<double> >& A) const ;
00111
00112
00113 void transformOneForm(const CellJacobianBatch& JTrans,
00114 const CellJacobianBatch& JVol,
00115 const Array<int>& facetIndex,
00116 const RCP<Array<int> >& cellLIDs,
00117 const double* const coeff,
00118 RCP<Array<double> >& A) const ;
00119
00120 private:
00121
00122
00123
00124 void transformSummingFirst(int nCells,
00125 const Array<int>& facetIndex,
00126 const RCP<Array<int> >& cellLIDs,
00127 const double* const GPtr,
00128 const double* const coeff,
00129 RCP<Array<double> >& A) const ;
00130
00131
00132
00133 void transformSummingLast(int nCells,
00134 const Array<int>& facetIndex,
00135 const RCP<Array<int> >& cellLIDs,
00136 const double* const GPtr,
00137 const double* const coeff,
00138 RCP<Array<double> >& A) const ;
00139
00140
00141
00142 bool useSumFirstMethod() const {return useSumFirstMethod_;}
00143
00144
00145 inline double& wValue(int facetCase,
00146 int q, int testDerivDir, int testNode,
00147 int unkDerivDir, int unkNode)
00148 {return W_[facetCase][unkNode
00149 + nNodesUnk()
00150 *(testNode + nNodesTest()
00151 *(unkDerivDir + nRefDerivUnk()
00152 *(testDerivDir + nRefDerivTest()*q)))];}
00153
00154
00155
00156
00157 inline const double& wValue(int facetCase,
00158 int q,
00159 int testDerivDir, int testNode,
00160 int unkDerivDir, int unkNode) const
00161 {
00162 return W_[facetCase][unkNode
00163 + nNodesUnk()
00164 *(testNode + nNodesTest()
00165 *(unkDerivDir + nRefDerivUnk()
00166 *(testDerivDir + nRefDerivTest()*q)))];
00167 }
00168
00169
00170 inline double& wValue(int facetCase,
00171 int q, int testDerivDir, int testNode)
00172 {return W_[facetCase][testNode + nNodesTest()*(testDerivDir + nRefDerivTest()*q)];}
00173
00174
00175
00176 inline const double& wValue(int facetCase,
00177 int q, int testDerivDir, int testNode) const
00178 {return W_[facetCase][testNode + nNodesTest()*(testDerivDir + nRefDerivTest()*q)];}
00179
00180
00181 Array<Array<double> > W_;
00182
00183
00184 bool useSumFirstMethod_;
00185
00186
00187
00188 Array<Array<Array<Array<double> > > > W_ACI_F1_;
00189
00190
00191
00192 Array<Array<Array<Array<Array<Array<double> > > > > > W_ACI_F2_;
00193
00194
00195 QuadratureFamily quad_;
00196
00197
00198 Array < Array<Point> > quadPts_;
00199
00200
00201 Array < Array<double> > quadWeights_;
00202 };
00203 }
00204
00205
00206 #endif