From fac5576df19d99bdeeba731821b102297c50062f Mon Sep 17 00:00:00 2001 From: HRN Date: Mon, 3 Feb 2025 19:16:14 +0330 Subject: [PATCH] periodict boundary condition ->DEBUG and some minor changes boundaries --- .../contactSearch/contactSearch.cpp | 2 +- .../boundarySphereInteractionList.cpp | 4 +- .../sphereInteraction/sphereInteraction.cpp | 53 ++++++--- .../boundaryField/boundaryFieldList.hpp | 8 +- src/phasicFlow/eventManagement/subscriber.cpp | 5 + src/phasicFlow/eventManagement/subscriber.hpp | 6 +- .../boundaries/boundaryList.cpp | 12 +- .../boundaries/boundaryListPtr.hpp | 64 ++++++----- .../boundaryPeriodic/boundaryPeriodic.cpp | 105 +++++++++--------- .../domain/simulationDomain.cpp | 2 +- 10 files changed, 146 insertions(+), 115 deletions(-) diff --git a/src/Interaction/contactSearch/contactSearch/contactSearch.cpp b/src/Interaction/contactSearch/contactSearch/contactSearch.cpp index c76d9ee1..cd764146 100644 --- a/src/Interaction/contactSearch/contactSearch/contactSearch.cpp +++ b/src/Interaction/contactSearch/contactSearch/contactSearch.cpp @@ -93,7 +93,7 @@ bool pFlow::contactSearch::boundaryBroadSearch bTimer_.start(); for(uint32 i=0u; i<6u; i++) { - output<<" boundarySearch "<< i <<" for iter "<< ti.iter()<::boundarySphereInteractio boundaryListPtr>(), boundaries_(sphPrtcls.pStruct().boundaries()) { - - ForAllActiveBoundariesPtr(i, this) + output<set( i, diff --git a/src/Interaction/sphereInteraction/sphereInteraction/sphereInteraction.cpp b/src/Interaction/sphereInteraction/sphereInteraction/sphereInteraction.cpp index df381c9e..ef673948 100644 --- a/src/Interaction/sphereInteraction/sphereInteraction/sphereInteraction.cpp +++ b/src/Interaction/sphereInteraction/sphereInteraction/sphereInteraction.cpp @@ -145,6 +145,11 @@ pFlow::sphereInteraction::sphereInteraction { fatalExit; } + + for(uint32 i=0; i<6; i++) + { + activeBoundaries_[i] = boundaryInteraction_[i].ppPairsAllocated(); + } } template class cLT> @@ -190,10 +195,14 @@ bool pFlow::sphereInteraction::iterate() ComputationTimer().start(); ForAllActiveBoundaries(i, boundaryInteraction_) + //for(size_t i=0; i<6; i++) { - auto& BI = boundaryInteraction_[i]; - BI.ppPairs().beforeBroadSearch(); - BI.pwPairs().beforeBroadSearch(); + if(activeBoundaries_[i]) + { + auto& BI = boundaryInteraction_[i]; + BI.ppPairs().beforeBroadSearch(); + BI.pwPairs().beforeBroadSearch(); + } } ComputationTimer().end(); @@ -214,18 +223,22 @@ bool pFlow::sphereInteraction::iterate() } ForAllActiveBoundaries(i, boundaryInteraction_) + //for(size_t i=0; i<6; i++) { - auto& BI = boundaryInteraction_[i]; - if(!contactSearchRef.boundaryBroadSearch( - i, - ti, - BI.ppPairs(), - BI.pwPairs()) - ) + if(activeBoundaries_[i]) { - fatalErrorInFunction<< - "failed to perform broadSearch for boundary index "<::iterate() contactListMangementBoundaryTimer_.resume(); ComputationTimer().start(); - ForAllActiveBoundaries(i, boundaryInteraction_ ) + ForAllActiveBoundaries(i, boundaryInteraction_) + //for(size_t i=0; i<6; i++) { - auto& BI = boundaryInteraction_[i]; - BI.ppPairs().afterBroadSearch(); - BI.pwPairs().afterBroadSearch(); + if(activeBoundaries_[i]) + { + auto& BI = boundaryInteraction_[i]; + BI.ppPairs().afterBroadSearch(); + BI.pwPairs().afterBroadSearch(); + } } ComputationTimer().end(); @@ -265,6 +282,7 @@ bool pFlow::sphereInteraction::iterate() while(requireStep.anyElement(true) && step <= 10) { ForAllBoundaries(i, boundaryInteraction_) + //for(size_t i=0; i<6; i++) { if(requireStep[i] ) { @@ -304,6 +322,7 @@ bool pFlow::sphereInteraction::iterate() while( requireStep.anyElement(true) && step < 20 ) { ForAllBoundaries(i, boundaryInteraction_) + //for(size_t i=0; i<6; i++) { if(requireStep[i]) { diff --git a/src/phasicFlow/containers/pointField/boundaryField/boundaryFieldList.hpp b/src/phasicFlow/containers/pointField/boundaryField/boundaryFieldList.hpp index 92e862c2..e8e1025b 100644 --- a/src/phasicFlow/containers/pointField/boundaryField/boundaryFieldList.hpp +++ b/src/phasicFlow/containers/pointField/boundaryField/boundaryFieldList.hpp @@ -53,7 +53,7 @@ public: boundaryListPtr(), boundaries_(boundaries) { - ForAllBoundaries(i, *this) + ForAllBoundariesPtr(i, this) { this->set ( @@ -69,13 +69,13 @@ public: && slaveToMasterUpdateIter_ == iter) return; // first step - ForAllBoundaries(i,*this) + ForAllBoundariesPtr(i,this) { this->boundaryPtr(i)->updateBoundary(1, direction); } // second step - ForAllBoundaries(i,*this) + ForAllBoundariesPtr(i,this) { this->boundaryPtr(i)->updateBoundary(1, direction); } @@ -88,7 +88,7 @@ public: void fill(const T& val) { - ForAllBoundaries(i, *this) + ForAllBoundariesPtr(i, this) { this->boundaryPtr(i)->fill(val); } diff --git a/src/phasicFlow/eventManagement/subscriber.cpp b/src/phasicFlow/eventManagement/subscriber.cpp index 29d2ac11..650aaf8a 100644 --- a/src/phasicFlow/eventManagement/subscriber.cpp +++ b/src/phasicFlow/eventManagement/subscriber.cpp @@ -24,6 +24,11 @@ Licence: #include "observer.hpp" #include "message.hpp" +pFlow::subscriber::subscriber(const word& name) +: + observerList_(message::numEvents()) +{} + pFlow::subscriber::subscriber(const subscriber & src) { } diff --git a/src/phasicFlow/eventManagement/subscriber.hpp b/src/phasicFlow/eventManagement/subscriber.hpp index 6281995d..8e7283f9 100644 --- a/src/phasicFlow/eventManagement/subscriber.hpp +++ b/src/phasicFlow/eventManagement/subscriber.hpp @@ -39,14 +39,14 @@ class subscriber private: // - list of subsribed objectd that recieve updage messages - mutable std::vector> observerList_{message::numEvents()}; + mutable std::vector> observerList_; //word subName_; public: - subscriber(const word& name) - {} + subscriber(const word& name); + /// Copy constructor, only copies the name, not the list subscriber(const subscriber&); diff --git a/src/phasicFlow/structuredData/boundaries/boundaryList.cpp b/src/phasicFlow/structuredData/boundaries/boundaryList.cpp index 0eb5e41f..26314167 100644 --- a/src/phasicFlow/structuredData/boundaries/boundaryList.cpp +++ b/src/phasicFlow/structuredData/boundaries/boundaryList.cpp @@ -144,7 +144,7 @@ pFlow::boundaryList::createBoundaries() if (listSet_) return true; - ForAllBoundaries(i, *this) + ForAllBoundariesPtr(i, this) { this->set( i, @@ -200,7 +200,7 @@ pFlow::boundaryList::beforeIteration(const timeInfo& ti, bool force) while(callAgain.anyElement(true) && step <= 10u) { - ForAllBoundaries(i,*this) + ForAllBoundariesPtr(i,this) { if(callAgain[i]) { @@ -239,7 +239,7 @@ pFlow::boundaryList::beforeIteration(const timeInfo& ti, bool force) step++; } - ForAllBoundaries(i,*this) + ForAllBoundariesPtr(i,this) { boundary(i).updataBoundaryData(1); } @@ -248,7 +248,7 @@ pFlow::boundaryList::beforeIteration(const timeInfo& ti, bool force) bdry->updataBoundaryData(1); }*/ - ForAllBoundaries(i,*this) + ForAllBoundariesPtr(i,this) { boundary(i).updataBoundaryData(2); } @@ -263,7 +263,7 @@ pFlow::boundaryList::beforeIteration(const timeInfo& ti, bool force) bool pFlow::boundaryList::iterate(const timeInfo& ti, bool force) { - ForAllBoundaries(i, *this) + ForAllBoundariesPtr(i, this) { if (!boundary(i).iterate(ti)) { @@ -293,7 +293,7 @@ pFlow::boundaryList::afterIteration(const timeInfo& ti, bool force) int step = 1; while(callAgain.anyElement(true)&& step <=10) { - ForAllBoundaries(i,*this) + ForAllBoundariesPtr(i,this) { if(callAgain[i]) { diff --git a/src/phasicFlow/structuredData/boundaries/boundaryListPtr.hpp b/src/phasicFlow/structuredData/boundaries/boundaryListPtr.hpp index 8d528ff7..6ea90039 100644 --- a/src/phasicFlow/structuredData/boundaries/boundaryListPtr.hpp +++ b/src/phasicFlow/structuredData/boundaries/boundaryListPtr.hpp @@ -34,35 +34,19 @@ template class boundaryListPtr { private: - std::array boundaries_; + std::array baseBoundaries_; std::bitset<6> activeBoundaries_=0B000000; public: boundaryListPtr(): - boundaries_({nullptr, nullptr, nullptr, nullptr, nullptr, nullptr}) + baseBoundaries_({nullptr, nullptr, nullptr, nullptr, nullptr, nullptr}) {} - void set(size_t i, uniquePtr&& ptr ) - { - if( i > boundaries_.size() ) - { - fatalErrorInFunction<< - "Out of range access of boundaryListPtr members. List size is "<< - size() << "and you are accessing "<< i << "\n"; - fatalExit; - } + boundaryListPtr(const boundaryListPtr&)=delete; - if(boundaries_[i]) delete boundaries_[i]; - boundaries_[i] = ptr.release(); - - if(boundaries_[i]) - { - // query if this boundary active or not - activeBoundaries_.set(i,boundaries_[i]->isActive()); - } - } + boundaryListPtr(boundaryListPtr&&)=default; ~boundaryListPtr() { @@ -71,7 +55,7 @@ public: void clear() { - for(auto& bndry:boundaries_) + for(auto& bndry:baseBoundaries_) { if(bndry != nullptr) { @@ -82,16 +66,36 @@ public: activeBoundaries_.reset(); } + void set(size_t i, uniquePtr&& ptr ) + { + if( i > baseBoundaries_.size() ) + { + fatalErrorInFunction<< + "Out of range access of boundaryListPtr members. List size is "<< + size() << "and you are accessing "<< i << "\n"; + fatalExit; + } + + if(baseBoundaries_[i]) delete baseBoundaries_[i]; + baseBoundaries_[i] = ptr.release(); + + if(baseBoundaries_[i]) + { + // query if this boundary active or not + activeBoundaries_.set(i,baseBoundaries_[i]->isActive()); + } + } + // - access to ith element inline BoundaryType& operator[](size_t i) { - if(boundaries_[i]== nullptr) + if(baseBoundaries_[i]== nullptr) { fatalErrorInFunction<<"Accessing nullptr element"<size(); i++) #define ForAllActiveBoundaries(i,bndryList) for(size_t i = bndryList.firstActive(); ifirstActive(); isize(); i=bndryList->nextActive(i)) diff --git a/src/phasicFlow/structuredData/boundaries/boundaryPeriodic/boundaryPeriodic.cpp b/src/phasicFlow/structuredData/boundaries/boundaryPeriodic/boundaryPeriodic.cpp index f7a29898..c3f048d8 100644 --- a/src/phasicFlow/structuredData/boundaries/boundaryPeriodic/boundaryPeriodic.cpp +++ b/src/phasicFlow/structuredData/boundaries/boundaryPeriodic/boundaryPeriodic.cpp @@ -47,67 +47,70 @@ bool pFlow::boundaryPeriodic::beforeIteration( { if(step==1) { + boundaryBase::beforeIteration(step, ti, updateIter, iterBeforeUpdate, callAgain); callAgain = true; + return true; } - else + + + callAgain = false; + // nothing have to be done + if(empty()) { - callAgain = false; - // nothing have to be done - if(empty()) + return true; + } + //output<thisBoundaryIndex()<<" ->"<thisBoundaryIndex()<<" ->"<< ti.iter()<<" update is being performed \n"; + uint32 s = size(); + uint32Vector_D transferFlags("transferFlags",s+1, s+1, RESERVE()); + transferFlags.fill(0u); + + auto points = thisPoints(); + auto p = boundaryPlane().infPlane(); + const auto & transferD = transferFlags.deviceViewAll(); + + uint32 numTransfered = 0; + + Kokkos::parallel_reduce + ( + "boundaryPeriodic::beforeIteration", + deviceRPolicyStatic(0u,s), + LAMBDA_HD(uint32 i, uint32& trnasToUpdate) { - return true; - } - - if(!performBoundarytUpdate()) - { - return true; - } - - uint32 s = size(); - uint32Vector_D transferFlags("transferFlags",s+1, s+1, RESERVE()); - transferFlags.fill(0u); - - auto points = thisPoints(); - auto p = boundaryPlane().infPlane(); - const auto & transferD = transferFlags.deviceViewAll(); - - uint32 numTransfered = 0; - - Kokkos::parallel_reduce - ( - "boundaryPeriodic::beforeIteration", - deviceRPolicyStatic(0u,s), - LAMBDA_HD(uint32 i, uint32& trnasToUpdate) + if(p.pointInNegativeSide(points(i))) { - if(p.pointInNegativeSide(points(i))) - { - transferD(i)=1; - trnasToUpdate++; - } - }, - numTransfered - ); + transferD(i)=1; + trnasToUpdate++; + } + }, + numTransfered + ); - // no point to be transfered - if(numTransfered == 0 ) - { - return true; - } - - // to obtain the transfer vector - realx3 transferVec = displacementVectroToMirror(); - - return transferPointsToMirror - ( - numTransfered, - transferFlags, - mirrorBoundaryIndex(), - transferVec - ); + // no point to be transfered + if(numTransfered == 0 ) + { + return true; } + // to obtain the transfer vector + realx3 transferVec = displacementVectroToMirror(); + + return transferPointsToMirror + ( + numTransfered, + transferFlags, + mirrorBoundaryIndex(), + transferVec + ); + return true; + } bool pFlow::boundaryPeriodic::iterate(const timeInfo& ti) diff --git a/src/phasicFlow/structuredData/domain/simulationDomain.cpp b/src/phasicFlow/structuredData/domain/simulationDomain.cpp index 7621e79f..5851804f 100644 --- a/src/phasicFlow/structuredData/domain/simulationDomain.cpp +++ b/src/phasicFlow/structuredData/domain/simulationDomain.cpp @@ -75,7 +75,7 @@ bool pFlow::simulationDomain::prepareBoundaryDicts() return false; } - bDict.addOrReplace("boundaryExtntionLengthRatio", boundaryExtntionLengthRatio); + bDict.addOrKeep("boundaryExtntionLengthRatio", boundaryExtntionLengthRatio); }