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 /* assemblage routines: header file */ 00020 00021 /************************************************************************************/ 00022 00023 #ifndef INC_DUDLEY_ASSEMBLE 00024 #define INC_DUDLEY_ASSEMBLE 00025 00026 /************************************************************************************/ 00027 00028 #include "Dudley.h" 00029 #include "ElementFile.h" 00030 #include "NodeFile.h" 00031 #include "escript/DataC.h" 00032 #include "paso/SystemMatrix.h" 00033 00034 struct Dudley_Assemble_Parameters { 00035 dim_t numQuad; /* number of quadrature nodes */ 00036 dim_t numDim; /* spatial dimension */ 00037 dim_t NN; /* leading dimension of element node table */ 00038 dim_t numElements; /* number of elements */ 00039 00040 dim_t numEqu; 00041 index_t *row_DOF; 00042 dim_t row_DOF_UpperBound; 00043 Dudley_ElementFile_Jacobeans *row_jac; 00044 dim_t numShapes; 00045 00046 dim_t numComp; 00047 index_t *col_DOF; 00048 dim_t col_DOF_UpperBound; 00049 00050 const double *shapeFns; 00051 }; 00052 00053 typedef struct Dudley_Assemble_Parameters Dudley_Assemble_Parameters; 00054 00055 #define Dudley_Assemble_reducedIntegrationOrder(__in__) ( (getFunctionSpaceType(__in__) == DUDLEY_REDUCED_ELEMENTS) || (getFunctionSpaceType(__in__) == DUDLEY_REDUCED_FACE_ELEMENTS) ) 00056 00057 void Dudley_Assemble_PDE(Dudley_NodeFile *, Dudley_ElementFile *, paso::SystemMatrix_ptr, escriptDataC *, 00058 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, 00059 escriptDataC *); 00060 00061 00062 void Dudley_Assemble_getAssembleParameters(Dudley_NodeFile *, Dudley_ElementFile *, paso::SystemMatrix_ptr, escriptDataC *, 00063 bool, Dudley_Assemble_Parameters *); 00064 void Dudley_Assemble_PDE_System2_3D(Dudley_Assemble_Parameters, Dudley_ElementFile *, paso::SystemMatrix_ptr, escriptDataC *, 00065 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, 00066 escriptDataC *); 00067 void Dudley_Assemble_PDE_System2_2D(Dudley_Assemble_Parameters, Dudley_ElementFile *, paso::SystemMatrix_ptr, escriptDataC *, 00068 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, 00069 escriptDataC *); 00070 void Dudley_Assemble_PDE_System2_1D(Dudley_Assemble_Parameters, Dudley_ElementFile *, paso::SystemMatrix, escriptDataC *, 00071 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, 00072 escriptDataC *); 00073 00074 void Dudley_Assemble_PDE_Single2_3D(Dudley_Assemble_Parameters, Dudley_ElementFile *, paso::SystemMatrix_ptr, escriptDataC *, 00075 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, 00076 escriptDataC *); 00077 void Dudley_Assemble_PDE_Single2_2D(Dudley_Assemble_Parameters, Dudley_ElementFile *, paso::SystemMatrix_ptr, escriptDataC *, 00078 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, 00079 escriptDataC *); 00080 void Dudley_Assemble_PDE_Single2_1D(Dudley_Assemble_Parameters, Dudley_ElementFile *, paso::SystemMatrix_ptr, escriptDataC *, 00081 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, 00082 escriptDataC *); 00083 void Dudley_Assemble_PDE_Points(Dudley_Assemble_Parameters, Dudley_ElementFile *, paso::SystemMatrix_ptr, escriptDataC *, escriptDataC *, escriptDataC *); 00084 00085 void Dudley_Assemble_NodeCoordinates(Dudley_NodeFile *, escriptDataC *); 00086 void Dudley_Assemble_setNormal(Dudley_NodeFile *, Dudley_ElementFile *, escriptDataC *); 00087 void Dudley_Assemble_interpolate(Dudley_NodeFile *, Dudley_ElementFile *, escriptDataC *, escriptDataC *); 00088 void Dudley_Assemble_gradient(Dudley_NodeFile *, Dudley_ElementFile *, escriptDataC *, escriptDataC *); 00089 void Dudley_Assemble_integrate(Dudley_NodeFile *, Dudley_ElementFile *, escriptDataC *, double *); 00090 void Dudley_Assemble_getSize(Dudley_NodeFile *, Dudley_ElementFile *, escriptDataC *); 00091 void Dudley_Assemble_CopyNodalData(Dudley_NodeFile * nodes, escriptDataC * out, escriptDataC * in); 00092 void Dudley_Assemble_CopyElementData(Dudley_ElementFile * elements, escriptDataC * out, escriptDataC * in); 00093 void Dudley_Assemble_AverageElementData(Dudley_ElementFile * elements, escriptDataC * out, escriptDataC * in); 00094 void Dudley_Assemble_addToSystemMatrix(paso::SystemMatrix_ptr in, const dim_t NN_Equa, const index_t * Nodes_Equa, const dim_t num_Equa, 00095 const dim_t NN_Sol, const index_t * Nodes_Sol, const dim_t num_Sol, const double *array); 00096 00097 void Dudley_Assemble_jacobeans_2D(double *, dim_t, dim_t, dim_t, index_t *, double *, double *abs_D, double *quadweight, 00098 index_t *); 00099 void Dudley_Assemble_jacobeans_2D_M1D_E1D(double *, dim_t, dim_t, dim_t, index_t *, double *, double *abs_D, 00100 double *quadweight, index_t *); 00101 void Dudley_Assemble_jacobeans_3D(double *, dim_t, dim_t, dim_t, index_t *, double *, double *abs_D, double *quadweight, 00102 index_t *); 00103 void Dudley_Assemble_jacobeans_3D_M2D_E2D(double *, dim_t, dim_t, dim_t, index_t *, double *, double *abs_D, 00104 double *quadweight, index_t *); 00105 00106 void Dudley_Assemble_LumpedSystem(Dudley_NodeFile * nodes, Dudley_ElementFile * elements, escriptDataC * lumpedMat, 00107 escriptDataC * D, const bool useHRZ); 00108 #endif /* #ifndef INC_DUDLEY_ASSEMBLE */