mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
Parallel transfer of list of site forces and postitions.
This commit is contained in:
@ -276,7 +276,7 @@ Foam::directInteractionList::directInteractionList
|
||||
{
|
||||
buildDirectInteractionList(pointPointListBuild);
|
||||
}
|
||||
else
|
||||
else if((*this).size() == 1)
|
||||
{
|
||||
Info<< nl
|
||||
<< "Single cell mesh, no direct interaction lists required."
|
||||
|
||||
@ -50,6 +50,8 @@ scalar singleStepTotalrDotf = 0.0;
|
||||
|
||||
vector singleStepCentreOfMass(vector::zero);
|
||||
|
||||
label singleStepNMols = molecules.size();
|
||||
|
||||
{
|
||||
IDLList<molecule>::iterator mol(molecules.begin());
|
||||
|
||||
@ -69,7 +71,10 @@ vector singleStepCentreOfMass(vector::zero);
|
||||
singleStepCentreOfMass += mol().position()*molMass;
|
||||
}
|
||||
|
||||
singleStepCentreOfMass /= singleStepTotalMass;
|
||||
if(singleStepNMols)
|
||||
{
|
||||
singleStepCentreOfMass /= singleStepTotalMass;
|
||||
}
|
||||
|
||||
for
|
||||
(
|
||||
@ -110,8 +115,6 @@ vector singleStepCentreOfMass(vector::zero);
|
||||
}
|
||||
}
|
||||
|
||||
label singleStepNMols = molecules.size();
|
||||
|
||||
if (Pstream::parRun())
|
||||
{
|
||||
reduce(singleStepTotalLinearMomentum, sumOp<vector>());
|
||||
|
||||
@ -187,10 +187,6 @@ private:
|
||||
|
||||
vector tau_;
|
||||
|
||||
List<vector> siteForces_;
|
||||
|
||||
List<vector> sitePositions_;
|
||||
|
||||
vector specialPosition_;
|
||||
|
||||
scalar potentialEnergy_;
|
||||
@ -202,6 +198,10 @@ private:
|
||||
|
||||
label id_;
|
||||
|
||||
List<vector> siteForces_;
|
||||
|
||||
List<vector> sitePositions_;
|
||||
|
||||
// Private Member Functions
|
||||
|
||||
tensor rotationTensorX(scalar deltaT) const;
|
||||
|
||||
@ -175,13 +175,13 @@ inline Foam::molecule::molecule
|
||||
a_(a),
|
||||
pi_(pi),
|
||||
tau_(tau),
|
||||
siteForces_(constProps.nSites(), vector::zero),
|
||||
sitePositions_(constProps.nSites()),
|
||||
specialPosition_(specialPosition),
|
||||
potentialEnergy_(0.0),
|
||||
rf_(tensor::zero),
|
||||
special_(special),
|
||||
id_(id)
|
||||
id_(id),
|
||||
siteForces_(constProps.nSites(), vector::zero),
|
||||
sitePositions_(constProps.nSites())
|
||||
{
|
||||
setSitePositions(constProps);
|
||||
}
|
||||
|
||||
@ -37,23 +37,20 @@ Foam::molecule::molecule
|
||||
bool readFields
|
||||
)
|
||||
:
|
||||
Particle<molecule>(cloud, is),
|
||||
Particle<molecule>(cloud, is, true),
|
||||
Q_(tensor::zero),
|
||||
v_(vector::zero),
|
||||
a_(vector::zero),
|
||||
pi_(vector::zero),
|
||||
tau_(vector::zero),
|
||||
siteForces_(List<vector>(0,vector::zero)),
|
||||
sitePositions_(List<vector>(0,vector::zero)),
|
||||
specialPosition_(vector::zero),
|
||||
potentialEnergy_(0.0),
|
||||
rf_(tensor::zero),
|
||||
special_(0),
|
||||
id_(0)
|
||||
id_(0),
|
||||
siteForces_(0),
|
||||
sitePositions_(0)
|
||||
{
|
||||
Info<< "Set sizes of siteForces_ and sitePositions_ "
|
||||
<< "from molCloud reference if possible" << endl;
|
||||
|
||||
if (readFields)
|
||||
{
|
||||
if (is.format() == IOstream::ASCII)
|
||||
@ -73,6 +70,8 @@ Foam::molecule::molecule
|
||||
}
|
||||
else
|
||||
{
|
||||
Pout<< "Binary readfields." << endl;
|
||||
|
||||
is.read
|
||||
(
|
||||
reinterpret_cast<char*>(&Q_),
|
||||
@ -81,13 +80,14 @@ Foam::molecule::molecule
|
||||
+ sizeof(a_)
|
||||
+ sizeof(pi_)
|
||||
+ sizeof(tau_)
|
||||
+ sizeof(siteForces_)
|
||||
+ sizeof(sitePositions_)
|
||||
+ sizeof(specialPosition_)
|
||||
+ sizeof(potentialEnergy_)
|
||||
+ sizeof(rf_)
|
||||
+ sizeof(special_)
|
||||
+ sizeof(id_)
|
||||
);
|
||||
|
||||
is >> siteForces_ >> sitePositions_;
|
||||
}
|
||||
}
|
||||
|
||||
@ -212,13 +212,13 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const molecule& mol)
|
||||
<< token::SPACE << mol.a_
|
||||
<< token::SPACE << mol.pi_
|
||||
<< token::SPACE << mol.tau_
|
||||
<< token::SPACE << mol.siteForces_
|
||||
<< token::SPACE << mol.sitePositions_
|
||||
<< token::SPACE << mol.specialPosition_
|
||||
<< token::SPACE << mol.potentialEnergy_
|
||||
<< token::SPACE << mol.rf_
|
||||
<< token::SPACE << mol.special_
|
||||
<< token::SPACE << mol.id_;
|
||||
<< token::SPACE << mol.id_
|
||||
<< token::SPACE << mol.siteForces_
|
||||
<< token::SPACE << mol.sitePositions_;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -231,14 +231,13 @@ Foam::Ostream& Foam::operator<<(Ostream& os, const molecule& mol)
|
||||
+ sizeof(mol.a_)
|
||||
+ sizeof(mol.pi_)
|
||||
+ sizeof(mol.tau_)
|
||||
+ sizeof(mol.siteForces_)
|
||||
+ sizeof(mol.sitePositions_)
|
||||
+ sizeof(mol.specialPosition_)
|
||||
+ sizeof(mol.potentialEnergy_)
|
||||
+ sizeof(mol.rf_)
|
||||
+ sizeof(mol.special_)
|
||||
+ sizeof(mol.id_)
|
||||
);
|
||||
os << mol.siteForces_ << mol.sitePositions_;
|
||||
}
|
||||
|
||||
// Check state of Ostream
|
||||
|
||||
@ -482,68 +482,71 @@ Foam::moleculeCloud::moleculeCloud
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
const Cloud<molecule>& cloud = *this;
|
||||
|
||||
vector position1 = vector(0.4e-9,0,0.3e-9);
|
||||
if(Pstream::master())
|
||||
{
|
||||
vector position1 = vector(-2.4e-9,0,0.3e-9);
|
||||
|
||||
addParticle
|
||||
(
|
||||
new molecule
|
||||
addParticle
|
||||
(
|
||||
cloud,
|
||||
position1,
|
||||
mesh_.findCell(position1),
|
||||
tensor(1, 0, 0, 0, 1, 0, 0, 0, 1),
|
||||
vector(-5, 5, 5),
|
||||
vector::zero,
|
||||
vector(1e-36, -1.2e-35, -3.7e-35),
|
||||
vector::zero,
|
||||
vector::zero,
|
||||
constProps(0),
|
||||
0,
|
||||
0
|
||||
)
|
||||
);
|
||||
new molecule
|
||||
(
|
||||
cloud,
|
||||
position1,
|
||||
mesh_.findCell(position1),
|
||||
tensor(1, 0, 0, 0, 1, 0, 0, 0, 1),
|
||||
vector(-405, 5, 5),
|
||||
vector::zero,
|
||||
vector(1e-36, -1.2e-35, -3.7e-35),
|
||||
vector::zero,
|
||||
vector::zero,
|
||||
constProps(0),
|
||||
0,
|
||||
0
|
||||
)
|
||||
);
|
||||
|
||||
vector position2 = vector(-0.35e-9,0,-0.4e-9);
|
||||
vector position2 = vector(-2.35e-9,0,-0.4e-9);
|
||||
|
||||
addParticle
|
||||
(
|
||||
new molecule
|
||||
addParticle
|
||||
(
|
||||
cloud,
|
||||
position2,
|
||||
mesh_.findCell(position2),
|
||||
tensor(0, 0, 1, 0, 1, 0, -1, 0, 0),
|
||||
vector(-4,-3.7,-5),
|
||||
vector::zero,
|
||||
vector(-2.1e-35, 1.4e-35, 2e-36),
|
||||
vector::zero,
|
||||
vector::zero,
|
||||
constProps(1),
|
||||
0,
|
||||
1
|
||||
)
|
||||
);
|
||||
new molecule
|
||||
(
|
||||
cloud,
|
||||
position2,
|
||||
mesh_.findCell(position2),
|
||||
tensor(0, 0, 1, 0, 1, 0, -1, 0, 0),
|
||||
vector(396,-3.7,-5),
|
||||
vector::zero,
|
||||
vector(-2.1e-35, 1.4e-35, 2e-36),
|
||||
vector::zero,
|
||||
vector::zero,
|
||||
constProps(1),
|
||||
0,
|
||||
1
|
||||
)
|
||||
);
|
||||
|
||||
// vector position3 = vector(0,0.52e-9,0);
|
||||
vector position3 = vector(-2e-9,0.52e-9,0);
|
||||
|
||||
// addParticle
|
||||
// (
|
||||
// new molecule
|
||||
// (
|
||||
// cloud,
|
||||
// position3,
|
||||
// mesh_.findCell(position2),
|
||||
// tensor(-1, 0, 0, 0, 1, 0, 0, 0, -1),
|
||||
// vector(3.2, 1, -2),
|
||||
// vector::zero,
|
||||
// vector(4e-36, 1e-35, -1.3e-35),
|
||||
// vector::zero,
|
||||
// vector::zero,
|
||||
// constProps(1),
|
||||
// 0,
|
||||
// 1
|
||||
// )
|
||||
// );
|
||||
addParticle
|
||||
(
|
||||
new molecule
|
||||
(
|
||||
cloud,
|
||||
position3,
|
||||
mesh_.findCell(position2),
|
||||
tensor(-1, 0, 0, 0, 1, 0, 0, 0, -1),
|
||||
vector(403.2, 1, -2),
|
||||
vector::zero,
|
||||
vector(4e-36, 1e-35, -1.3e-35),
|
||||
vector::zero,
|
||||
vector::zero,
|
||||
constProps(1),
|
||||
0,
|
||||
1
|
||||
)
|
||||
);
|
||||
}
|
||||
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user