mirror of
https://github.com/PhasicFlow/phasicFlow.git
synced 2025-09-16 04:16:04 +00:00
118 lines
2.6 KiB
C++
118 lines
2.6 KiB
C++
/*------------------------------- 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 "NBSLevel0.hpp"
|
|
#include "streams.hpp"
|
|
|
|
bool pFlow::NBSLevel0::findPairs
|
|
(
|
|
csPairContainerType &pairs,
|
|
const deviceViewType1D<realx3> &pointPos,
|
|
const pFlagTypeDevice &flags,
|
|
const deviceViewType1D<real> &diameter
|
|
)
|
|
{
|
|
uint32 getFull = 1;
|
|
|
|
// loop until the container size fits the numebr of contact pairs
|
|
while (getFull > 0)
|
|
{
|
|
|
|
getFull = pFlow::NBSLevel0Kernels::findPairsCount
|
|
(
|
|
pairs,
|
|
sizeRatio_,
|
|
pointPos,
|
|
flags,
|
|
diameter,
|
|
getCellIterator()
|
|
);
|
|
|
|
if(getFull)
|
|
{
|
|
// - resize the container
|
|
// note that getFull now shows the number of failed insertions.
|
|
uint32 len = max(getFull,500u) ;
|
|
|
|
auto oldCap = pairs.capacity();
|
|
|
|
pairs.increaseCapacityBy(len);
|
|
|
|
INFORMATION<< "The contact pair container capacity increased from "<<
|
|
oldCap << " to "<<pairs.capacity()<<" in NBSLevel0."<<END_INFO;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|
|
pFlow::NBSLevel0::NBSLevel0
|
|
(
|
|
const box& domain,
|
|
real cellSize,
|
|
real sizeRatio,
|
|
const deviceViewType1D<realx3>& pointPos,
|
|
const pFlagTypeDevice& flags,
|
|
bool adjustableBox
|
|
)
|
|
:
|
|
mapperNBS
|
|
(
|
|
domain,
|
|
cellSize,
|
|
pointPos,
|
|
flags,
|
|
adjustableBox,
|
|
true
|
|
),
|
|
sizeRatio_(sizeRatio)
|
|
{
|
|
|
|
}
|
|
|
|
bool pFlow::NBSLevel0::broadSearch
|
|
(
|
|
csPairContainerType &pairs,
|
|
const deviceViewType1D<realx3> &pointPos,
|
|
const pFlagTypeDevice &flags,
|
|
const deviceViewType1D<real> &diameter,
|
|
bool& searchBoxChanged
|
|
)
|
|
{
|
|
if(!build(pointPos, flags, searchBoxChanged))
|
|
{
|
|
fatalErrorInFunction;
|
|
return false;
|
|
}
|
|
|
|
if(!findPairs(pairs, pointPos, flags, diameter))
|
|
{
|
|
fatalErrorInFunction;
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
|