All messages are revisited for internal points and boundaries

This commit is contained in:
HRN
2025-02-06 11:04:30 +03:30
parent edb02ecfc7
commit 02e0b72082
53 changed files with 431 additions and 846 deletions

View File

@ -21,7 +21,14 @@ Licence:
template<class T, class MemorySpace>
bool pFlow::internalField<T, MemorySpace>::insert(const anyList& varList)
{
const word eventName = message::eventName(message::ITEM_INSERT);
const word eventName = message::eventName(message::ITEMS_INSERT);
if(!varList.checkObjectType<uint32IndexContainer>(eventName))
{
fatalErrorInFunction<<"Insertion failed in internalField, "<< eventName <<
" does not exist or the type is incorrect"<<endl;
return false;
}
const auto& indices = varList.getObject<uint32IndexContainer>(
eventName);
@ -30,14 +37,24 @@ bool pFlow::internalField<T, MemorySpace>::insert(const anyList& varList)
if(varList.contains(name()))
{
// a single value is assigned
if(!varList.checkObjectType<T>(name()))
{
fatalErrorInFunction<<"wrong type for variable "<< name()<<endl;
return false;
}
T val = varList.getObject<T>(name());
success = field_.insertSetElement(indices, val);
}
else if(varList.contains(name()+"Vector"))
else if(word fn = name()+"Vector"; varList.contains(fn))
{
// a vector of values is going to be assigned
const auto& valVec = varList.getObject<Vector<T>>(name()+"Vector");
if(!varList.checkObjectType<Vector<T>>(fn))
{
fatalErrorInFunction<<"wrong type for variable "<< fn<<endl;
return false;
}
const auto& valVec = varList.getObject<Vector<T>>(fn);
success = field_.insertSetElement(indices,valVec);
}
else
@ -57,8 +74,13 @@ bool pFlow::internalField<T, MemorySpace>::insert(const anyList& varList)
template<class T, class MemorySpace>
bool pFlow::internalField<T, MemorySpace>::rearrange(const anyList& varList)
{
const word eventName = message::eventName(message::ITEM_REARRANGE);
const word eventName = message::eventName(message::ITEMS_REARRANGE);
if(!varList.checkObjectType<uint32IndexContainer>(eventName))
{
fatalErrorInFunction<<"Wrong type for variable "<< eventName<<endl;
return false;
}
const auto& indices = varList.getObject<uint32IndexContainer>(
eventName);
@ -162,40 +184,47 @@ typename pFlow::internalField<T, MemorySpace>::FieldTypeHost
template <class T, class MemorySpace>
bool pFlow::internalField<T, MemorySpace>:: hearChanges
(
real t,
real dt,
uint32 iter,
const timeInfo& ti,
const message& msg,
const anyList& varList
)
{
if(msg.equivalentTo(message::CAP_CHANGED))
if(msg.equivalentTo(message::RANGE_CHANGED))
{
auto newCap = varList.getObject<uint32>(
message::eventName(message::CAP_CHANGED));
auto varName = message::eventName(message::RANGE_CHANGED);
if( !varList.checkObjectType<rangeU32>(varName) )
{
fatalErrorInFunction<<"Wrong type for variable "<< varName<<endl;
return false;
}
field_.reserve(newCap);
auto newRange = varList.getObject<rangeU32>(varName);
if(newRange.end() > size())
field_.resize(newRange.end());
return true;
}
if(msg.equivalentTo(message::SIZE_CHANGED))
{
auto newSize = varList.getObject<uint32>(
message::eventName(message::SIZE_CHANGED));
field_.resize(newSize);
}
if(msg.equivalentTo(message::ITEM_DELETE))
else if(msg.equivalentTo(message::ITEMS_DELETE))
{
// do nothing
return true;
}
if(msg.equivalentTo(message::ITEM_INSERT))
else if(msg.equivalentTo(message::ITEMS_INSERT))
{
return insert(varList);
}
if(msg.equivalentTo(message::ITEM_REARRANGE))
else if(msg.equivalentTo(message::ITEMS_REARRANGE))
{
return rearrange(varList);
}
return true;
else
{
fatalErrorInFunction<<"hear changes in internal field is not processing "<<
message::eventName(message::RANGE_CHANGED)<<
" event with message code "<< msg<<endl;
return false;
}
}
template<class T, class MemorySpace>

View File

@ -64,13 +64,12 @@ protected:
static inline
const message defaultMessage_ =
(
message::CAP_CHANGED+
message::SIZE_CHANGED+
message::ITEM_INSERT+
message::ITEM_REARRANGE+
message::ITEM_DELETE
message::RANGE_CHANGED +
message::ITEMS_INSERT +
message::ITEMS_REARRANGE +
message::ITEMS_DELETE
);
bool insert(const anyList& varList);
bool rearrange(const anyList& varList);
@ -188,11 +187,15 @@ public:
return internalPoints_.time();
}
inline
const internalPoints& InternalPoints()const
{
return internalPoints_;
}
bool hearChanges
(
real t,
real dt,
uint32 iter,
const timeInfo& ti,
const message& msg,
const anyList& varList
) override;