mirror of
https://github.com/PhasicFlow/phasicFlow.git
synced 2025-06-22 16:28:30 +00:00
Particle insertion is added with anyList
- collision check is not active yet. - variable velocity is not active yet. - events and messages are not active yet.
This commit is contained in:
@ -0,0 +1,99 @@
|
||||
/*------------------------------- phasicFlow ---------------------------------
|
||||
O C enter of
|
||||
O O E ngineering and
|
||||
O O M ultiscale modeling of
|
||||
OOOOOOO F luid flow
|
||||
------------------------------------------------------------------------------
|
||||
Copyright (C): www.cemf.ir
|
||||
email: hamid.r.norouzi AT gmail.com
|
||||
------------------------------------------------------------------------------
|
||||
Licence:
|
||||
This file is part of phasicFlow code. It is a free software for simulating
|
||||
granular and multiphase flows. You can redistribute it and/or modify it under
|
||||
the terms of GNU General Public License v3 or any other later versions.
|
||||
|
||||
phasicFlow is distributed to help others in their research in the field of
|
||||
granular and multiphase flows, but WITHOUT ANY WARRANTY; without even the
|
||||
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
-----------------------------------------------------------------------------*/
|
||||
|
||||
#include "particleIdHandler.hpp"
|
||||
|
||||
pFlow::particleIdHandler::particleIdHandler(pointStructure& pStruct)
|
||||
:
|
||||
uint32PointField_D
|
||||
(
|
||||
objectFile
|
||||
(
|
||||
"id",
|
||||
"",
|
||||
objectFile::READ_IF_PRESENT,
|
||||
objectFile::WRITE_ALWAYS
|
||||
),
|
||||
pStruct,
|
||||
static_cast<uint32>(-1),
|
||||
static_cast<uint32>(-1)
|
||||
)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool
|
||||
pFlow::particleIdHandler::hearChanges(
|
||||
real t,
|
||||
real dt,
|
||||
uint32 iter,
|
||||
const message& msg,
|
||||
const anyList& varList
|
||||
)
|
||||
{
|
||||
if(msg.equivalentTo(message::ITEM_INSERT))
|
||||
{
|
||||
const word eventName = message::eventName(message::ITEM_INSERT);
|
||||
|
||||
const auto& indices = varList.getObject<uint32IndexContainer>(
|
||||
eventName);
|
||||
|
||||
uint32 numNew = indices.size();
|
||||
if(numNew == 0u)return true;
|
||||
|
||||
auto idRange = getIdRange(numNew);
|
||||
uint32Vector newId("newId",numNew,numNew,RESERVE());
|
||||
fillSequence(newId, idRange.first);
|
||||
output<< "id "<< idRange<<endl;
|
||||
return this->field().insertSetElement(indices, newId);
|
||||
}
|
||||
else
|
||||
{
|
||||
return uint32PointField_D::hearChanges(t,dt,iter, msg,varList);
|
||||
}
|
||||
}
|
||||
|
||||
pFlow::uniquePtr<pFlow::particleIdHandler>
|
||||
pFlow::particleIdHandler::create(pointStructure& pStruct)
|
||||
{
|
||||
word idHType = angleBracketsNames(
|
||||
"particleIdHandler",
|
||||
pFlowProcessors().localRunTypeName());
|
||||
|
||||
|
||||
if( pointStructurevCtorSelector_.search(idHType) )
|
||||
{
|
||||
REPORT(1)<<"Creating particle id handler "<<
|
||||
Green_Text(idHType)<<END_REPORT;
|
||||
return pointStructurevCtorSelector_[idHType] (pStruct);
|
||||
}
|
||||
else
|
||||
{
|
||||
printKeys
|
||||
(
|
||||
fatalError << "Ctor Selector "<< idHType << " dose not exist. \n"
|
||||
<<"Avaiable ones are: \n\n"
|
||||
,
|
||||
pointStructurevCtorSelector_
|
||||
);
|
||||
fatalExit;
|
||||
}
|
||||
return nullptr;
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
/*------------------------------- phasicFlow ---------------------------------
|
||||
O C enter of
|
||||
O O E ngineering and
|
||||
O O M ultiscale modeling of
|
||||
OOOOOOO F luid flow
|
||||
------------------------------------------------------------------------------
|
||||
Copyright (C): www.cemf.ir
|
||||
email: hamid.r.norouzi AT gmail.com
|
||||
------------------------------------------------------------------------------
|
||||
Licence:
|
||||
This file is part of phasicFlow code. It is a free software for simulating
|
||||
granular and multiphase flows. You can redistribute it and/or modify it under
|
||||
the terms of GNU General Public License v3 or any other later versions.
|
||||
|
||||
phasicFlow is distributed to help others in their research in the field of
|
||||
granular and multiphase flows, but WITHOUT ANY WARRANTY; without even the
|
||||
implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
-----------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __particleIdHandler_hpp__
|
||||
#define __particleIdHandler_hpp__
|
||||
|
||||
|
||||
#include "pointFields.hpp"
|
||||
|
||||
namespace pFlow
|
||||
{
|
||||
|
||||
class particleIdHandler
|
||||
:
|
||||
public uint32PointField_D
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
/// class info
|
||||
ClassInfo("particleIdHandler");
|
||||
|
||||
explicit particleIdHandler(pointStructure& pStruct);
|
||||
|
||||
create_vCtor
|
||||
(
|
||||
particleIdHandler,
|
||||
pointStructure,
|
||||
(pointStructure& pStruct),
|
||||
(pStruct)
|
||||
);
|
||||
|
||||
~particleIdHandler()override=default;
|
||||
|
||||
virtual
|
||||
Pair<uint32, uint32> getIdRange(uint32 nNewParticles)=0;
|
||||
|
||||
virtual
|
||||
bool initialIdCheck()=0;
|
||||
|
||||
// heat change for possible insertion of particles
|
||||
// overrdie from internalField
|
||||
bool hearChanges
|
||||
(
|
||||
real t,
|
||||
real dt,
|
||||
uint32 iter,
|
||||
const message& msg,
|
||||
const anyList& varList
|
||||
) override;
|
||||
|
||||
static
|
||||
uniquePtr<particleIdHandler> create(
|
||||
pointStructure& pStruct);
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user