escript
Revision_
|
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