escript  Revision_
Assemble.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 
00017 
00018 /****************************************************************************
00019 
00020   Assemblage routines: header file
00021 
00022 *****************************************************************************/
00023 
00024 #ifndef __FINLEY_ASSEMBLE_H__
00025 #define __FINLEY_ASSEMBLE_H__
00026 
00027 #include "Finley.h"
00028 #include "ElementFile.h"
00029 #include "NodeFile.h"
00030 #include "paso/SystemMatrix.h"
00031 
00032 namespace finley {
00033 
00034 struct AssembleParameters {
00035     AssembleParameters(const NodeFile* nodes, const ElementFile* ef,
00036                        paso::SystemMatrix_ptr sm, escript::Data& rhs,
00037                        bool reducedOrder);
00038 
00040     const ElementFile* elements;
00042     paso::SystemMatrix_ptr S;
00044     escript::Data& F;
00046     int numQuadTotal;
00048     int numQuadSub;
00050     int numSides;
00052     int numSub;
00054     int numDim;
00056     int NN;
00058     int numElements;
00059 
00060     int numEqu;
00061     const int* row_DOF;
00062     int row_DOF_UpperBound;
00063     ElementFile_Jacobians* row_jac;
00064     const int* row_node;
00065     int row_numShapesTotal;
00066     int row_numShapes;
00067     int numComp;
00068     const int* col_DOF;
00069     int col_DOF_UpperBound;
00070     ElementFile_Jacobians* col_jac;
00071     const int* col_node;
00072     int col_numShapesTotal;
00073     int col_numShapes;
00074 };
00075 
00076 
00080 void Assemble_PDE(const NodeFile* nodes, const ElementFile* elements,
00081                   paso::SystemMatrix_ptr S, escript::Data& F,
00082                   const escript::Data& A, const escript::Data& B,
00083                   const escript::Data& C, const escript::Data& D,
00084                   const escript::Data& X, const escript::Data& Y);
00085 
00086 void Assemble_PDE_Points(const AssembleParameters& p, const escript::Data& d_dirac,
00087                          const escript::Data& y_dirac);
00088 
00089 void Assemble_PDE_Single_1D(const AssembleParameters& p,
00090                             const escript::Data& A, const escript::Data& B,
00091                             const escript::Data& C, const escript::Data& D,
00092                             const escript::Data& X, const escript::Data& Y);
00093 
00094 void Assemble_PDE_Single_2D(const AssembleParameters& p,
00095                             const escript::Data& A, const escript::Data& B,
00096                             const escript::Data& C, const escript::Data& D,
00097                             const escript::Data& X, const escript::Data& Y);
00098 
00099 void Assemble_PDE_Single_3D(const AssembleParameters& p,
00100                             const escript::Data& A, const escript::Data& B,
00101                             const escript::Data& C, const escript::Data& D,
00102                             const escript::Data& X, const escript::Data& Y);
00103 
00104 void Assemble_PDE_Single_C(const AssembleParameters& p, const escript::Data& D,
00105                            const escript::Data& Y);
00106 
00107 void Assemble_PDE_System_1D(const AssembleParameters& p,
00108                             const escript::Data& A, const escript::Data& B,
00109                             const escript::Data& C, const escript::Data& D,
00110                             const escript::Data& X, const escript::Data& Y);
00111 
00112 void Assemble_PDE_System_2D(const AssembleParameters& p,
00113                             const escript::Data& A, const escript::Data& B,
00114                             const escript::Data& C, const escript::Data& D,
00115                             const escript::Data& X, const escript::Data& Y);
00116 
00117 void Assemble_PDE_System_3D(const AssembleParameters& p,
00118                             const escript::Data& A, const escript::Data& B,
00119                             const escript::Data& C, const escript::Data& D,
00120                             const escript::Data& X, const escript::Data& Y);
00121 
00122 void Assemble_PDE_System_C(const AssembleParameters& p, const escript::Data& D,
00123                            const escript::Data& Y);
00124 
00125 void Assemble_addToSystemMatrix(paso::SystemMatrix_ptr S, const int NN_Equa,
00126         const int* Nodes_Equa, const int num_Equa, const int NN_Sol,
00127         const int* Nodes_Sol, const int num_Sol, const double* array);
00128 
00129 void Assemble_LumpedSystem(const NodeFile* nodes, const ElementFile* elements,
00130                            escript::Data& lumpedMat, const escript::Data& D,
00131                            bool useHRZ);
00132 
00133 void Assemble_AverageElementData(const ElementFile* elements,
00134                                  escript::Data& out, const escript::Data& in);
00135 
00136 void Assemble_CopyElementData(const ElementFile* elements, escript::Data& out,
00137                               const escript::Data& in);
00138 
00139 void Assemble_CopyNodalData(const NodeFile* nodes, escript::Data& out,
00140                             const escript::Data& in);
00141 
00142 void Assemble_NodeCoordinates(const NodeFile* nodes, escript::Data& out);
00143 
00144 void Assemble_getNormal(const NodeFile* nodes, const ElementFile* elements,
00145                         escript::Data& normals);
00146 
00147 void Assemble_getSize(const NodeFile* nodes, const ElementFile* elements,
00148                       escript::Data& size);
00149 
00150 void Assemble_gradient(const NodeFile* nodes, const ElementFile* elements,
00151                        escript::Data& gradient, const escript::Data& data);
00152 
00153 void Assemble_integrate(const NodeFile* nodes, const ElementFile* elements,
00154                         const escript::Data& data, double* integrals);
00155 
00156 void Assemble_interpolate(const NodeFile* nodes, const ElementFile* elements,
00157                           const escript::Data& data, escript::Data& output);
00158 
00159 void Assemble_jacobians_1D(const double* coordinates, int numQuad,
00160                            const double* QuadWeights, int numShape,
00161                            int numElements, int numNodes, const int* nodes,
00162                            const double* DSDv, int numTest, const double* DTDv,
00163                            double* dTdX, double* volume, const int* elementId);
00164 void Assemble_jacobians_2D(const double* coordinates, int numQuad,
00165                            const double* QuadWeights, int numShape,
00166                            int numElements, int numNodes, const int* nodes,
00167                            const double* DSDv, int numTest, const double* DTDv,
00168                            double* dTdX, double* volume, const int* elementId);
00169 void Assemble_jacobians_2D_M1D_E1D(const double* coordinates, int numQuad,
00170                            const double* QuadWeights, int numShape,
00171                            int numElements, int numNodes, const int* nodes,
00172                            const double* DSDv, int numTest, const double* DTDv,
00173                            double* dTdX, double* volume, const int* elementId);
00174 void Assemble_jacobians_2D_M1D_E1D_C(const double* coordinates, int numQuad,
00175                            const double* QuadWeights, int numShape,
00176                            int numElements, int numNodes, const int* nodes,
00177                            const double* DSDv, int numTest, const double* DTDv,
00178                            double* dTdX, double* volume, const int* elementId);
00179 void Assemble_jacobians_2D_M1D_E2D(const double* coordinates, int numQuad,
00180                            const double* QuadWeights, int numShape,
00181                            int numElements, int numNodes, const int* nodes,
00182                            const double* DSDv, int numTest, const double* DTDv,
00183                            double* dTdX, double* volume, const int* elementId);
00184 void Assemble_jacobians_2D_M1D_E2D_C(const double* coordinates, int numQuad,
00185                            const double* QuadWeights, int numShape,
00186                            int numElements, int numNodes, const int* nodes,
00187                            const double* DSDv, int numTest, const double* DTDv,
00188                            double* dTdX, double* volume, const int* elementId);
00189 void Assemble_jacobians_3D(const double* coordinates, int numQuad,
00190                            const double* QuadWeights, int numShape,
00191                            int numElements, int numNodes, const int* nodes,
00192                            const double* DSDv, int numTest, const double* DTDv,
00193                            double* dTdX, double* volume, const int* elementId);
00194 void Assemble_jacobians_3D_M2D_E2D(const double* coordinates, int numQuad,
00195                            const double* QuadWeights, int numShape,
00196                            int numElements, int numNodes, const int* nodes,
00197                            const double* DSDv, int numTest, const double* DTDv,
00198                            double* dTdX, double* volume, const int* elementId);
00199 void Assemble_jacobians_3D_M2D_E2D_C(const double* coordinates, int numQuad,
00200                            const double* QuadWeights, int numShape,
00201                            int numElements, int numNodes, const int* nodes,
00202                            const double* DSDv, int numTest, const double* DTDv,
00203                            double* dTdX, double* volume, const int* elementId);
00204 void Assemble_jacobians_3D_M2D_E3D(const double* coordinates, int numQuad,
00205                            const double* QuadWeights, int numShape,
00206                            int numElements, int numNodes, const int* nodes,
00207                            const double* DSDv, int numTest, const double* DTDv,
00208                            double* dTdX, double* volume, const int* elementId);
00209 void Assemble_jacobians_3D_M2D_E3D_C(const double* coordinates, int numQuad,
00210                            const double* QuadWeights, int numShape,
00211                            int numElements, int numNodes, const int* nodes,
00212                            const double* DSDv, int numTest, const double* DTDv,
00213                            double* dTdX, double* volume, const int* elementId);
00214 
00215 } // namespace finley
00216 
00217 #endif // __FINLEY_ASSEMBLE_H__
00218