OOFEM  2.4
OOFEM.org - Object Oriented Finite Element Solver
sprnodalrecoverymodel.h
Go to the documentation of this file.
1 /*
2  *
3  * ##### ##### ###### ###### ### ###
4  * ## ## ## ## ## ## ## ### ##
5  * ## ## ## ## #### #### ## # ##
6  * ## ## ## ## ## ## ## ##
7  * ## ## ## ## ## ## ## ##
8  * ##### ##### ## ###### ## ##
9  *
10  *
11  * OOFEM : Object Oriented Finite Element Code
12  *
13  * Copyright (C) 1993 - 2013 Borek Patzak
14  *
15  *
16  *
17  * Czech Technical University, Faculty of Civil Engineering,
18  * Department of Structural Mechanics, 166 29 Prague, Czech Republic
19  *
20  * This library is free software; you can redistribute it and/or
21  * modify it under the terms of the GNU Lesser General Public
22  * License as published by the Free Software Foundation; either
23  * version 2.1 of the License, or (at your option) any later version.
24  *
25  * This program is distributed in the hope that it will be useful,
26  * but WITHOUT ANY WARRANTY; without even the implied warranty of
27  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
28  * Lesser General Public License for more details.
29  *
30  * You should have received a copy of the GNU Lesser General Public
31  * License along with this library; if not, write to the Free Software
32  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
33  */
34 
35 #ifndef sprnodalrecoverymodel_h
36 #define sprnodalrecoverymodel_h
37 
38 #include "nodalrecoverymodel.h"
39 #include "interface.h"
40 
41 #define _IFT_SPRNodalRecoveryModel_Name "spr"
42 
43 namespace oofem {
44 class GaussPoint;
45 class SPRNodalRecoveryModelInterface;
46 class ProcessCommunicator;
47 
54 };
55 
63 class OOFEM_EXPORT SPRNodalRecoveryModel : public NodalRecoveryModel
64 {
65 protected:
70  struct parallelStruct {
76  dofManValues(a), dofManPatchCount(b), regionNodalNumbers(c), regionValSize(d) { }
77  };
78 
79 public:
83  virtual ~SPRNodalRecoveryModel();
84 
85  virtual int recoverValues(Set elementSet, InternalStateType type, TimeStep *tStep);
86 
87  virtual const char *giveClassName() const { return "SPRNodalRecoveryModel"; }
88 
89 private:
97  void initRegionMap(IntArray &regionMap, IntArray &regionTypes, InternalStateType type);
98 
99  void determinePatchAssemblyPoints(IntArray &pap, SPRPatchType regType, Set &elemset);
100  void initPatch(IntArray &patchElems, IntArray &dofManToDetermine, IntArray &pap, int papNumber, Set &elementList);
101  void computePatch(FloatMatrix &a, IntArray &patchElems, int &regionValSize,
102  SPRPatchType regType, InternalStateType type, TimeStep *tStep);
103  void determineValuesFromPatch(FloatArray &dofManValues, IntArray &dofManCount,
104  IntArray &regionNodalNumbers, IntArray &dofManToDetermine,
105  FloatMatrix &a, SPRPatchType type);
106  void computePolynomialTerms(FloatArray &P, FloatArray &coords, SPRPatchType type);
107  int giveNumberOfUnknownPolynomialCoefficients(SPRPatchType regType);
108  SPRPatchType determinePatchType(Set &elementList);
109 
110 #ifdef __PARALLEL_MODE
111  void initCommMaps();
112  void exchangeDofManValues(FloatArray &dofManValues,
113  IntArray &dofManPatchCount, IntArray &regionNodalNumbers,
114  int regionValSize);
115  int packSharedDofManData(parallelStruct *s, ProcessCommunicator &processComm);
116  int unpackSharedDofManData(parallelStruct *s, ProcessCommunicator &processComm);
117 #endif
118 };
119 
123 class OOFEM_EXPORT SPRNodalRecoveryModelInterface : public Interface
124 {
125 public:
128 
130 
131  virtual void SPRNodalRecoveryMI_giveSPRAssemblyPoints(IntArray &pap) = 0;
132  virtual void SPRNodalRecoveryMI_giveDofMansDeterminedByPatch(IntArray &answer, int pap) = 0;
133  virtual int SPRNodalRecoveryMI_giveNumberOfIP() = 0;
134  virtual SPRPatchType SPRNodalRecoveryMI_givePatchType() = 0;
136 };
137 } // end namespace oofem
138 #endif // sprnodalrecoverymodel_h
InternalStateType
Type representing the physical meaning of element or constitutive model internal variable.
The element interface required by ZZNodalRecoveryModel.
Class and object Domain.
Definition: domain.h:115
Helper structure to pass required arguments to packing/unpacking functions needed in parallel mode...
parallelStruct(FloatArray *a, IntArray *b, IntArray *c, int d)
Class implementing an array of integers.
Definition: intarray.h:61
Set of elements, boundaries, edges and/or nodes.
Definition: set.h:66
Class representing process communicator for engineering model.
Definition: processcomm.h:176
virtual const char * giveClassName() const
Class representing vector of real numbers.
Definition: floatarray.h:82
Implementation of matrix containing floating point numbers.
Definition: floatmatrix.h:94
The Superconvergent Patch Recovery (SPR) nodal recovery model is based on paper of Zienkiewicz and Zh...
Class Interface.
Definition: interface.h:82
the oofem namespace is to define a context or scope in which all oofem names are defined.
The base class for all recovery models, which perform nodal averaging or projection processes for int...
Class representing solution step.
Definition: timestep.h:80

This page is part of the OOFEM documentation. Copyright (c) 2011 Borek Patzak
Project e-mail: info@oofem.org
Generated at Tue Jan 2 2018 20:07:31 for OOFEM by doxygen 1.8.11 written by Dimitri van Heesch, © 1997-2011