Andre Weiner, a.weiner@tu-bs.de
Prof. Dr. rer. nat. Dieter Bothe, bothe@mma.tu-darmstadt.de
Slides available at: andreweiner.github.io/reveal.js/gofun2020.html
micro reactor
size: millimeter
source: SPP 1740
prediction of
bubble column reactor
size: meter
source: R. M. Raimundo, ENI
U. D. Kück, M. Schlüter, N. Räbiger:
Analyse des grenzschichtnahen Stofftransports an frei aufsteigenden Gasblasen (2009)
$d_b=1~mm$ water/oxygen at room temperature
$\delta_h/\delta_c$ typically 10 ... 100
feasible simulations up to $Pe\approx 1000$ (3D, HPC)
mitigate complexity by decoupling two-phase flow and mass transfer
Keywords: Basilisk, geometrical advection with PLIC recontruction, adaptive mesh refinement, curvature computation based on height functions, learn more (Github).
From left to right: ellipsoidal, spherical cap, dimpled ellipsoidal.
How to model $u_{\parallel}^{liq}$ in single-phase simulations?
Learn more: publication, Jupyter notebooks
bubbleSurfaceVelocitySimpleFvPatchVectorField.H
class bubbleSurfaceVelocitySimpleFvPatchVectorField
:
public fixedValueFvPatchVectorField
{
// Private data
...
//- name of the PyTorch model
word model_name_;
//- PyTorch model
torch::jit::script::Module pyTorch_model_;
...
bubbleSurfaceVelocitySimpleFvPatchVectorField.C
Foam::bubbleSurfaceVelocitySimpleFvPatchVectorField::
bubbleSurfaceVelocitySimpleFvPatchVectorField
(
const fvPatch& p,
const DimensionedField<vector, volMesh>& iF,
const dictionary& dict
)
:
fixedValueFvPatchField<vector>(p, iF, dict, false),
...
model_name_(dict.lookupOrDefault<word>("model", "velocity_model.pt"))
{
pyTorch_model_ = torch::jit::load(model_name_);
}
bubbleSurfaceVelocitySimpleFvPatchVectorField.C
void Foam::bubbleSurfaceVelocitySimpleFvPatchVectorField::updateCoeffs()
{
...
// run forward pass to compute tangential velocity
std::vector<torch::jit::IValue> modelFeatures{phiTensor};
torch::Tensor uTensor = pyTorch_model_.forward(modelFeatures).toTensor();
auto uAccessor = uTensor.accessor<double,1>();
vectorField surfaceVelocity(Cf.size(), Zero);
forAll(surfaceVelocity, faceI)
{
surfaceVelocity[faceI] = tau[faceI] * uAccessor[faceI];
}
...
bubble patch in 0/U
bubble
{
type bubbleSurfaceVelocitySimple;
origin (0 0 0);
axis (0 1 0);
normal (0 0 -1);
model "bhaga_02_u_tau.pt";
}
Wedge mesh creation: blockMesh, snappyHexMesh, extrudeMesh, collapseEdges
OpenFoam test cases on Github
Jupyter notebooks for post-processing on Github
Physisorption $ A^{gas} \rightarrow A^{liq}$
Comparison of global Sherwood number computed with Dirichlet and slip boundary condition.
assessment for dynamic interfaces
Thank you for your attention!
Get in touch: