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 /*    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 */