Parallel transfer of list of site forces and postitions.

This commit is contained in:
graham
2008-12-22 17:00:03 +00:00
parent 3672a2786d
commit 428d80539b
6 changed files with 85 additions and 80 deletions

View File

@ -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."

View File

@ -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>());

View File

@ -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;

View File

@ -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);
}

View File

@ -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

View File

@ -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
)
);
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~