42#ifdef __MPI_PARALLEL_MODE
54NodalAveragingRecoveryModel :: ~NodalAveragingRecoveryModel()
60 int nnodes =
domain->giveNumberOfDofManagers();
70#ifdef __MPI_PARALLEL_MODE
71 bool parallel = this->
domain->giveEngngModel()->isParallel();
80 int regionValSize = 0;
88 regionDofMansConnectivity.
resize(regionDofMans);
89 regionDofMansConnectivity.
zero();
93 for (
int i = 1; i <= elements.
giveSize(); i++ ) {
94 int ielem = elements.
at(i);
111 for (
int elementNode = 1; elementNode <= elemNodes; elementNode++ ) {
117 }
else if ( regionValSize == 0 ) {
119 lhs.
resize(regionDofMans * regionValSize);
121 }
else if ( val.
giveSize() != regionValSize ) {
125 int eq = ( regionNodalNumbers.
at(node) - 1 ) * regionValSize;
126 for (
int j = 1; j <= regionValSize; j++ ) {
127 lhs.
at(eq + j) += val.
at(j);
130 regionDofMansConnectivity.
at( regionNodalNumbers.
at(node) )++;
134#ifdef __MPI_PARALLEL_MODE
141 for (
int inode = 1; inode <= nnodes; inode++ ) {
142 if ( regionNodalNumbers.
at(inode) ) {
143 int eq = ( regionNodalNumbers.
at(inode) - 1 ) * regionValSize;
144 for (
int i = 1; i <= regionValSize; i++ ) {
145 if ( regionDofMansConnectivity.
at( regionNodalNumbers.
at(inode) ) > 0 ) {
146 lhs.
at(eq + i) /= regionDofMansConnectivity.
at( regionNodalNumbers.
at(inode) );
148 OOFEM_WARNING(
"values of dofmanager %d undetermined", inode);
149 lhs.
at(eq + i) = 0.0;
163#ifdef __MPI_PARALLEL_MODE
166NodalAveragingRecoveryModel :: initCommMaps()
174 OOFEM_LOG_INFO(
"NodalAveragingRecoveryModel :: initCommMaps: initialized comm maps\n");
180NodalAveragingRecoveryModel :: exchangeDofManValues(
FloatArray &lhs,
IntArray ®ionDofMansConnectivity,
181 IntArray ®ionNodalNumbers,
int regionValSize)
183 parallelStruct ls( &lhs, ®ionDofMansConnectivity, ®ionNodalNumbers, regionValSize);
186 communicator->packAllData(
this, & ls, & NodalAveragingRecoveryModel :: packSharedDofManData);
188 communicator->unpackAllData(
this, & ls, & NodalAveragingRecoveryModel :: unpackSharedDofManData);
199 for (
int inode : toSendMap ) {
205 result &= pcbuff->
write(1);
209 result &= pcbuff->
write( s->
lhs->
at(eq + j) );
213 result &= pcbuff->
write(0);
228 for (
int inode : toRecvMap ) {
232 result &= pcbuff->
read(flag);
235 result &= pcbuff->
read(intValue);
244 result &= pcbuff->
read(value);
246 s->
lhs->
at(eq + j) += value;
#define REGISTER_NodalRecoveryModel(class, type)
elementParallelMode giveParallelMode() const
virtual int giveNumberOfDofManagers() const
DofManager * giveDofManager(int i) const
int giveNumberOfProcesses() const
Returns the number of collaborating processes.
int giveRank() const
Returns domain rank in a group of collaborating processes (0..groupSize-1).
virtual Interface * giveInterface(InterfaceType t)
Index giveSize() const
Returns the size of receiver.
void zero()
Zeroes all coefficients of receiver.
void zero()
Sets all component to zero.
virtual void NodalAveragingRecoveryMI_computeNodalValue(FloatArray &answer, int node, InternalStateType type, TimeStep *tStep)=0
void exchangeDofManValues(FloatArray &lhs, IntArray &, IntArray &, int)
bool initCommMap
Communication init flag.
int initRegionNodeNumbering(IntArray ®ionNodalNumbers, int ®ionDofMans, Set ®ion)
int updateRegionRecoveredValues(const IntArray ®ionNodalNumbers, int regionValSize, const FloatArray &rhs)
CommunicatorBuff * commBuff
Common Communicator buffer.
NodalRecoveryModel(Domain *d)
Constructor.
StateCounterType stateCounter
Time stamp of recovered values.
InternalStateType valType
Determines the type of recovered values.
ProblemCommunicator * communicator
Communicator.
int read(int *data, std::size_t count) override
Reads count integer values into array pointed by data.
int write(const int *data, std::size_t count) override
Writes count integer values from array pointed by data.
const IntArray & giveToRecvMap()
ProcessCommunicatorBuff * giveProcessCommunicatorBuff()
Returns communication buffer.
const IntArray & giveToSendMap()
const IntArray & giveElementList()
StateCounterType giveSolutionStateCounter()
#define OOFEM_WARNING(...)
#define OOFEM_LOG_INFO(...)
#define OOFEM_LOG_RELEVANT(...)
const char * __InternalStateTypeToString(InternalStateType _value)
@ Element_local
Element is local, there are no contributions from other domains to this element.
@ NodalAveragingRecoveryModelInterfaceType
IntArray * regionNodalNumbers
IntArray * regionDofMansConnectivity