Chair of Scientific Computing Department of Informatics Technical University of Munich Scalable coupled simulations with OpenFOAM R and other solvers Setting up Multi-Physics simulations like playing LEGO, R without stepping on the pieces Hans-Joachim Bungartz1, Gerasimos Chourdakis1, Derek Risseeuw2, Alexander Rusch1, Benjamin Uekermann1 1{bungartz, chourdak, uekerman}@in.tum.de and
[email protected], Scientific Computing, Technical University of Munich
[email protected], Faculty of Aerospace Engineering, Delft University of Technology [10] Multi-Physics in OpenFOAM OpenFOAM adapter for preCICE Approaches and problems One adapter, no changes in the solver Framework approach: Two different regions in Previous approach: Modify the solver to OpenFOAM Solver Foam::Time Foam::functionObjectList Foam::functionObject an OpenFOAM solver, solved sequentially. OpenFOAM solver add calls to preCICE ! solver-specific. read() read() Examples: chtMultiRegionFoam (intrinsic), Examples: FOAM-FSI [11], L. Cheung [12], while ( runTime.loop() ) loop() fsiFoam (only in foam-extend) [1]. start() or execute() Fluid region K. Rave [13], D. Schneider [14]. + Everything inside OpenFOAM while ( runTime.run() ) run() execute() OpenFOAM function objects: Inject code - Limited to specific, OpenFOAM-only solvers write() at specific, pre-defined points, without mo- solvers with adjustable timestep: - Limited coupling numerics Solid region end() end() difying the solver’s code or re-compiling. #include "setDeltaT.H" adjustDeltaT() - Limited scalability Compatible: Designed for current versions adjustTimeStep() adjustTimeStep() - Partitioned numerics, but monolithic software dynamic mesh solvers: Foam::polyMesh of openfoam.com and openfoam.org. mesh.update(); updateMesh() updateMesh() updateMesh() Master - Slave approach: The Challenges: Access everything through the mesh.movePoints(); movePoints() movePoints() movePoints() OpenFOAM solver calls an external OpenFOAM solver objects’ registry and keep the code general.