BUG: Fixing problem with parallel DTRMParticle

This commit is contained in:
sergio
2019-06-11 16:12:36 -07:00
committed by Andrew Heather
parent 1db1815b54
commit 3a1178ff12

View File

@ -2,7 +2,7 @@
========= | ========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | \\ / O peration |
\\ / A nd | Copyright (C) 2017 OpenCFD Ltd \\ / A nd | Copyright (C) 2017-2019 OpenCFD Ltd
\\/ M anipulation | \\/ M anipulation |
------------------------------------------------------------------------------- -------------------------------------------------------------------------------
License License
@ -99,11 +99,12 @@ bool Foam::DTRMParticle::move
td.switchProcessor = false; td.switchProcessor = false;
td.keepParticle = true; td.keepParticle = true;
while (td.keepParticle && !td.switchProcessor && stepFraction() < 1) do
{ {
//Cache old data of particle to use for reflected particle //Cache old data of particle to use for reflected particle
const point pos0 = position(); const point pos0 = position();
const label cell0 = cell(); const label cell1 = cell();
const tetIndices tetIs = this->currentTetIndices();
scalar f = 1 - stepFraction(); scalar f = 1 - stepFraction();
const vector s = p1() - p0() - deviationFromMeshCentre(); const vector s = p1() - p0() - deviationFromMeshCentre();
@ -113,7 +114,7 @@ bool Foam::DTRMParticle::move
vector dsv = p1 - pos0; vector dsv = p1 - pos0;
scalar ds = mag(dsv); scalar ds = mag(dsv);
const label cell1 = cell(); //const label cell1 = cell();
//NOTE: //NOTE:
// Under the new barocentric tracking alghorithm the newly // Under the new barocentric tracking alghorithm the newly
@ -181,7 +182,8 @@ bool Foam::DTRMParticle::move
, 0.98 , 0.98
); );
scalar delaM = cbrt(mesh().cellVolumes()[cell0]); //scalar delaM = cbrt(mesh().cellVolumes()[cell0]);
scalar delaM = cbrt(mesh().cellVolumes()[cell1]);
const point insertP(position() - pDir*0.1*delaM); const point insertP(position() - pDir*0.1*delaM);
label cellI = mesh().findCell(insertP); label cellI = mesh().findCell(insertP);
@ -208,11 +210,11 @@ bool Foam::DTRMParticle::move
// Change transmissiveId of the particle // Change transmissiveId of the particle
transmissiveId_ = reflectedZoneId; transmissiveId_ = reflectedZoneId;
const tetIndices tetIs = this->currentTetIndices(); scalar a = td.aInterp().interpolate(pos0, cell1);
scalar a = td.aInterp().interpolate(this->coordinates(), tetIs); scalar e = td.eInterp().interpolate(pos0, cell1);
scalar e = td.eInterp().interpolate(this->coordinates(), tetIs); scalar E = td.EInterp().interpolate(pos0, cell1);
scalar E = td.EInterp().interpolate(this->coordinates(), tetIs); scalar T = td.TInterp().interpolate(pos0, cell1);
scalar T = td.TInterp().interpolate(this->coordinates(), tetIs);
// Left intensity after reflection // Left intensity after reflection
const scalar Itran = I_*(1.0 - rho); const scalar Itran = I_*(1.0 - rho);
@ -234,11 +236,10 @@ bool Foam::DTRMParticle::move
} }
else else
{ {
const tetIndices tetIs = this->currentTetIndices(); scalar a = td.aInterp().interpolate(pos0, cell1);
scalar a = td.aInterp().interpolate(this->coordinates(), tetIs); scalar e = td.eInterp().interpolate(pos0, cell1);
scalar e = td.eInterp().interpolate(this->coordinates(), tetIs); scalar E = td.EInterp().interpolate(pos0, cell1);
scalar E = td.EInterp().interpolate(this->coordinates(), tetIs); scalar T = td.TInterp().interpolate(pos0, cell1);
scalar T = td.TInterp().interpolate(this->coordinates(), tetIs);
const scalar I1 = const scalar I1 =
( (
@ -257,7 +258,7 @@ bool Foam::DTRMParticle::move
} }
} }
} }while (td.keepParticle && !td.switchProcessor && stepFraction() < 1);
return td.keepParticle; return td.keepParticle;
} }