00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef INC_DUDLEY_ASSEMBLE
00021 #define INC_DUDLEY_ASSEMBLE
00022
00023
00024
00025 #include "Dudley.h"
00026 #include "ElementFile.h"
00027 #include "NodeFile.h"
00028 #include "escript/DataC.h"
00029 #include "paso/SystemMatrix.h"
00030
00031 struct Dudley_Assemble_Parameters {
00032 dim_t numQuad;
00033 dim_t numDim;
00034 dim_t NN;
00035 dim_t numElements;
00036
00037 dim_t numEqu;
00038 index_t *row_DOF;
00039 dim_t row_DOF_UpperBound;
00040 Dudley_ElementFile_Jacobeans *row_jac;
00041 dim_t numShapes;
00042
00043 dim_t numComp;
00044 index_t *col_DOF;
00045 dim_t col_DOF_UpperBound;
00046
00047 const double *shapeFns;
00048 };
00049
00050 typedef struct Dudley_Assemble_Parameters Dudley_Assemble_Parameters;
00051
00052 #define Dudley_Assemble_reducedIntegrationOrder(__in__) ( (getFunctionSpaceType(__in__) == DUDLEY_REDUCED_ELEMENTS) || (getFunctionSpaceType(__in__) == DUDLEY_REDUCED_FACE_ELEMENTS) )
00053
00054 void Dudley_Assemble_PDE(Dudley_NodeFile *, Dudley_ElementFile *, Paso_SystemMatrix *, escriptDataC *,
00055 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *,
00056 escriptDataC *);
00057
00058
00059 void Dudley_Assemble_getAssembleParameters(Dudley_NodeFile *, Dudley_ElementFile *, Paso_SystemMatrix *, escriptDataC *,
00060 bool_t, Dudley_Assemble_Parameters *);
00061 void Dudley_Assemble_PDE_System2_3D(Dudley_Assemble_Parameters, Dudley_ElementFile *, Paso_SystemMatrix *, escriptDataC *,
00062 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *,
00063 escriptDataC *);
00064 void Dudley_Assemble_PDE_System2_2D(Dudley_Assemble_Parameters, Dudley_ElementFile *, Paso_SystemMatrix *, escriptDataC *,
00065 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *,
00066 escriptDataC *);
00067 void Dudley_Assemble_PDE_System2_1D(Dudley_Assemble_Parameters, Dudley_ElementFile *, Paso_SystemMatrix *, escriptDataC *,
00068 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *,
00069 escriptDataC *);
00070
00071 void Dudley_Assemble_PDE_Single2_3D(Dudley_Assemble_Parameters, Dudley_ElementFile *, Paso_SystemMatrix *, escriptDataC *,
00072 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *,
00073 escriptDataC *);
00074 void Dudley_Assemble_PDE_Single2_2D(Dudley_Assemble_Parameters, Dudley_ElementFile *, Paso_SystemMatrix *, escriptDataC *,
00075 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *,
00076 escriptDataC *);
00077 void Dudley_Assemble_PDE_Single2_1D(Dudley_Assemble_Parameters, Dudley_ElementFile *, Paso_SystemMatrix *, escriptDataC *,
00078 escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *, escriptDataC *,
00079 escriptDataC *);
00080 void Dudley_Assemble_PDE_Points(Dudley_Assemble_Parameters, Dudley_ElementFile *, Paso_SystemMatrix *, escriptDataC *, escriptDataC *, escriptDataC *);
00081
00082 void Dudley_Assemble_NodeCoordinates(Dudley_NodeFile *, escriptDataC *);
00083 void Dudley_Assemble_setNormal(Dudley_NodeFile *, Dudley_ElementFile *, escriptDataC *);
00084 void Dudley_Assemble_interpolate(Dudley_NodeFile *, Dudley_ElementFile *, escriptDataC *, escriptDataC *);
00085 void Dudley_Assemble_gradient(Dudley_NodeFile *, Dudley_ElementFile *, escriptDataC *, escriptDataC *);
00086 void Dudley_Assemble_integrate(Dudley_NodeFile *, Dudley_ElementFile *, escriptDataC *, double *);
00087 void Dudley_Assemble_getSize(Dudley_NodeFile *, Dudley_ElementFile *, escriptDataC *);
00088 void Dudley_Assemble_CopyNodalData(Dudley_NodeFile * nodes, escriptDataC * out, escriptDataC * in);
00089 void Dudley_Assemble_CopyElementData(Dudley_ElementFile * elements, escriptDataC * out, escriptDataC * in);
00090 void Dudley_Assemble_AverageElementData(Dudley_ElementFile * elements, escriptDataC * out, escriptDataC * in);
00091 void Dudley_Assemble_addToSystemMatrix(Paso_SystemMatrix * in, const dim_t NN_Equa, const index_t * Nodes_Equa, const dim_t num_Equa,
00092 const dim_t NN_Sol, const index_t * Nodes_Sol, const dim_t num_Sol, const double *array);
00093
00094 void Dudley_Assemble_jacobeans_2D(double *, dim_t, dim_t, dim_t, index_t *, double *, double *abs_D, double *quadweight,
00095 index_t *);
00096 void Dudley_Assemble_jacobeans_2D_M1D_E1D(double *, dim_t, dim_t, dim_t, index_t *, double *, double *abs_D,
00097 double *quadweight, index_t *);
00098 void Dudley_Assemble_jacobeans_3D(double *, dim_t, dim_t, dim_t, index_t *, double *, double *abs_D, double *quadweight,
00099 index_t *);
00100 void Dudley_Assemble_jacobeans_3D_M2D_E2D(double *, dim_t, dim_t, dim_t, index_t *, double *, double *abs_D,
00101 double *quadweight, index_t *);
00102
00103 void Dudley_Assemble_LumpedSystem(Dudley_NodeFile * nodes, Dudley_ElementFile * elements, escriptDataC * lumpedMat,
00104 escriptDataC * D, const bool_t useHRZ);
00105 #endif