ESYS13  Revision_
Assemble.h
Go to the documentation of this file.
00001 
00002 /*******************************************************
00003 *
00004 * Copyright (c) 2003-2012 by University of Queensland
00005 * Earth Systems Science Computational Center (ESSCC)
00006 * http://www.uq.edu.au/esscc
00007 *
00008 * Primary Business: Queensland, Australia
00009 * Licensed under the Open Software License version 3.0
00010 * http://www.opensource.org/licenses/osl-3.0.php
00011 *
00012 *******************************************************/
00013 
00014 /**************************************************************/
00015 
00016 /*    assemblage routines: header file */
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;      /* number of quadrature nodes */
00033     dim_t numDim;       /* spatial dimension */
00034     dim_t NN;           /* leading dimension of element node table */
00035     dim_t numElements;      /* number of elements */
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              /* #ifndef INC_DUDLEY_ASSEMBLE */