Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Development
openfoam
Commits
d5cd67f7
Commit
d5cd67f7
authored
May 25, 2011
by
andy
Browse files
ENH: MOved Dij and penetration calcs to Kinematic Cloud
parent
8e598ca1
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloud.H
View file @
d5cd67f7
...
...
@@ -462,6 +462,12 @@ public:
//- Total rotational kinetic energy in the system
inline
scalar
rotationalKineticEnergyOfSystem
()
const
;
//- Penetration for percentage of the current total mass
inline
scalar
penetration
(
const
scalar
&
prc
)
const
;
//- Mean diameter Dij
inline
scalar
Dij
(
const
label
i
,
const
label
j
)
const
;
// Fields
...
...
src/lagrangian/intermediate/clouds/Templates/KinematicCloud/KinematicCloudI.H
View file @
d5cd67f7
...
...
@@ -278,6 +278,131 @@ Foam::KinematicCloud<CloudType>::rotationalKineticEnergyOfSystem() const
}
template
<
class
CloudType
>
inline
Foam
::
scalar
Foam
::
KinematicCloud
<
CloudType
>::
Dij
(
const
label
i
,
const
label
j
)
const
{
scalar
si
=
0.0
;
scalar
sj
=
0.0
;
forAllConstIter
(
typename
KinematicCloud
<
CloudType
>
,
*
this
,
iter
)
{
const
parcelType
&
p
=
iter
();
si
+=
p
.
nParticle
()
*
pow
(
p
.
d
(),
i
);
sj
+=
p
.
nParticle
()
*
pow
(
p
.
d
(),
j
);
}
reduce
(
si
,
sumOp
<
scalar
>
());
reduce
(
sj
,
sumOp
<
scalar
>
());
sj
=
max
(
sj
,
VSMALL
);
return
si
/
sj
;
}
template
<
class
CloudType
>
inline
Foam
::
scalar
Foam
::
KinematicCloud
<
CloudType
>::
penetration
(
const
scalar
&
prc
)
const
{
scalar
distance
=
0.0
;
scalar
mTot
=
0.0
;
label
np
=
this
->
size
();
// arrays containing the parcels mass and
// distance from injector in ascending order
scalarField
mass
(
np
);
scalarField
dist
(
np
);
if
(
np
>
0
)
{
label
n
=
0
;
// first arrange the parcels in ascending order
// the first parcel is closest to its injection position
// and the last one is most far away.
forAllConstIter
(
typename
KinematicCloud
<
CloudType
>
,
*
this
,
iter
)
{
const
parcelType
&
p
=
iter
();
scalar
mi
=
p
.
nParticle
()
*
p
.
mass
();
scalar
di
=
mag
(
p
.
position
()
-
p
.
position0
());
mTot
+=
mi
;
// insert at the last place
mass
[
n
]
=
mi
;
dist
[
n
]
=
di
;
label
i
=
0
;
bool
found
=
false
;
// insert the parcel in the correct place
// and move the others
while
((
i
<
n
)
&&
(
!
found
))
{
if
(
di
<
dist
[
i
])
{
found
=
true
;
for
(
label
j
=
n
;
j
>
i
;
j
--
)
{
mass
[
j
]
=
mass
[
j
-
1
];
dist
[
j
]
=
dist
[
j
-
1
];
}
mass
[
i
]
=
mi
;
dist
[
i
]
=
di
;
}
i
++
;
}
n
++
;
}
}
reduce
(
mTot
,
sumOp
<
scalar
>
());
if
(
np
>
0
)
{
scalar
mLimit
=
prc
*
mTot
;
scalar
mOff
=
(
1.0
-
prc
)
*
mTot
;
if
(
np
>
1
)
{
// 'prc' is large enough that the parcel most far
// away will be used, no need to loop...
if
(
mLimit
>
mTot
-
mass
[
np
-
1
])
{
distance
=
dist
[
np
-
1
];
}
else
{
scalar
mOffSum
=
0.0
;
label
i
=
np
;
while
((
mOffSum
<
mOff
)
&&
(
i
>
0
))
{
i
--
;
mOffSum
+=
mass
[
i
];
}
distance
=
dist
[
i
+
1
]
+
(
dist
[
i
]
-
dist
[
i
+
1
])
*
(
mOffSum
-
mOff
)
/
mass
[
i
+
1
]
;
}
}
else
{
distance
=
dist
[
0
];
}
}
reduce
(
distance
,
maxOp
<
scalar
>
());
return
distance
;
}
template
<
class
CloudType
>
inline
Foam
::
cachedRandom
&
Foam
::
KinematicCloud
<
CloudType
>::
rndGen
()
{
...
...
src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.C
View file @
d5cd67f7
...
...
@@ -185,9 +185,10 @@ void Foam::SprayCloud<CloudType>::checkParcelProperties
parcel
.
position0
()
=
parcel
.
position
();
parcel
.
d0
()
=
parcel
.
d
();
parcel
.
y
()
=
breakup
().
y0
();
parcel
.
yDot
()
=
breakup
().
yDot0
();
parcel
.
liquidCore
()
=
atomization
().
initLiquidCore
();
}
...
...
@@ -337,137 +338,12 @@ void Foam::SprayCloud<CloudType>::motion(TrackData& td)
}
template
<
class
CloudType
>
Foam
::
scalar
Foam
::
SprayCloud
<
CloudType
>::
D
(
const
label
i
,
const
label
j
)
const
{
scalar
si
=
0
.
0
;
scalar
sj
=
0
.
0
;
forAllConstIter
(
typename
SprayCloud
<
CloudType
>
,
*
this
,
iter
)
{
const
parcelType
&
p
=
iter
();
si
+=
p
.
nParticle
()
*
pow
(
p
.
d
(),
i
);
sj
+=
p
.
nParticle
()
*
pow
(
p
.
d
(),
j
);
}
reduce
(
si
,
sumOp
<
scalar
>
());
reduce
(
sj
,
sumOp
<
scalar
>
());
sj
=
max
(
sj
,
VSMALL
);
return
si
/
sj
;
}
template
<
class
CloudType
>
Foam
::
scalar
Foam
::
SprayCloud
<
CloudType
>::
liquidPenetration
(
const
scalar
&
prc
)
const
{
scalar
distance
=
0
.
0
;
scalar
mTot
=
0
.
0
;
label
np
=
this
->
size
();
// arrays containing the parcels mass and
// distance from injector in ascending order
scalarField
mass
(
np
);
scalarField
dist
(
np
);
if
(
np
>
0
)
{
label
n
=
0
;
// first arrange the parcels in ascending order
// the first parcel is closest to its injection position
// and the last one is most far away.
forAllConstIter
(
typename
SprayCloud
<
CloudType
>
,
*
this
,
iter
)
{
const
parcelType
&
p
=
iter
();
scalar
mi
=
p
.
nParticle
()
*
p
.
mass
();
scalar
di
=
mag
(
p
.
position
()
-
p
.
position0
());
mTot
+=
mi
;
// insert at the last place
mass
[
n
]
=
mi
;
dist
[
n
]
=
di
;
label
i
=
0
;
bool
found
=
false
;
// insert the parcel in the correct place
// and move the others
while
((
i
<
n
)
&&
(
!
found
))
{
if
(
di
<
dist
[
i
])
{
found
=
true
;
for
(
label
j
=
n
;
j
>
i
;
j
--
)
{
mass
[
j
]
=
mass
[
j
-
1
];
dist
[
j
]
=
dist
[
j
-
1
];
}
mass
[
i
]
=
mi
;
dist
[
i
]
=
di
;
}
i
++
;
}
n
++
;
}
}
reduce
(
mTot
,
sumOp
<
scalar
>
());
if
(
np
>
0
)
{
scalar
mLimit
=
prc
*
mTot
;
scalar
mOff
=
(
1
.
0
-
prc
)
*
mTot
;
if
(
np
>
1
)
{
// 'prc' is large enough that the parcel most far
// away will be used, no need to loop...
if
(
mLimit
>
mTot
-
mass
[
np
-
1
])
{
distance
=
dist
[
np
-
1
];
}
else
{
scalar
mOffSum
=
0
.
0
;
label
i
=
np
;
while
((
mOffSum
<
mOff
)
&&
(
i
>
0
))
{
i
--
;
mOffSum
+=
mass
[
i
];
}
distance
=
dist
[
i
+
1
]
+
(
dist
[
i
]
-
dist
[
i
+
1
])
*
(
mOffSum
-
mOff
)
/
mass
[
i
+
1
]
;
}
}
else
{
distance
=
dist
[
0
];
}
}
reduce
(
distance
,
maxOp
<
scalar
>
());
return
distance
;
}
template
<
class
CloudType
>
void
Foam
::
SprayCloud
<
CloudType
>::
info
()
const
{
CloudType
::
info
();
scalar
d32
=
1.0e+6
*
D
(
3
,
2
);
scalar
pen
=
liquidP
enetration
(
0
.
95
);
scalar
d32
=
1.0e+6
*
this
->
Dij
(
3
,
2
);
scalar
pen
=
this
->
p
enetration
(
0
.
95
);
Info
<<
" D32 (mu) = "
<<
d32
<<
endl
;
Info
<<
" Liquid penetration 95% mass (m) = "
<<
pen
<<
endl
;
...
...
src/lagrangian/spray/clouds/Templates/SprayCloud/SprayCloud.H
View file @
d5cd67f7
...
...
@@ -203,12 +203,6 @@ public:
// Check
//- Calculate the liquid penetration for prc % of the mass
scalar
liquidPenetration
(
const
scalar
&
prc
)
const
;
//- Calculate the diameter Dij
scalar
D
(
const
label
i
,
const
label
j
)
const
;
//- Print cloud information
void
info
()
const
;
...
...
src/lagrangian/spray/parcels/Templates/SprayParcel/SprayParcelI.H
View file @
d5cd67f7
...
...
@@ -38,7 +38,6 @@ inline Foam::SprayParcel<ParcelType>::SprayParcel
ParcelType
(
mesh
,
position
,
cellI
,
tetFaceI
,
tetPtI
),
d0_
(
this
->
d
()),
position0_
(
position
),
// liquidCore_(owner.atomization().initLiquidCore()),
liquidCore_
(
0.0
),
KHindex_
(
0.0
),
y_
(
0.0
),
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment