Couple Openfoam with Any Other Solver Using Precice
Total Page:16
File Type:pdf, Size:1020Kb
Couple OpenFOAM with any other solver using preCICE Gerasimos Chourdakis et al. Technical University of Munich Department of Informatics Chair of Scientific Computing in Computer Science 2nd German OpenFoam User meetiNg TU Braunschweig February 21, 2018 Part II: + Agenda Part I: + Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN22 + Agenda Part I: + Part II: Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN22 How to simulate this heat exchanger? Geometry of a shell-and-tube heat exchanger (Image by L. Cheung Yau, 2016) Surface plot and streamlines of the two fluids colored by temperature. Solid not shown. Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN23 A shell-and-tube heat exchanger with preCICE Coupling interfaces (Image by L. Cheung Yau, 2016) Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN24 preCICE precise Code Interaction Coupling Environment libprecice Communication adapter Data Mapping Coupling Schemes Solver A Solver B • Free (GNU LGPL), developed at TU Munich & Univ. of Stuttgart. • Version 1.0 in November 2017 (10+ years, 3 PhD generations). • Official adapters for CalculiX, Code_Aster, COMSOL, Fluent, OpenFOAM, SU2 • Third-party adapters for Ateles, Alya, Carat++, FASTEST, FEAP, foam-extend, ... • API in C, C++, Fortran, Python Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN25 But why preCICE? libprecice Ope nFOAM CHT adapter CalculiX in-house FSI solver • Pure library approach ! flexibility • Fully parallel, peer-to-peer concept ! scalable and efficient communication • Sophisticated and robust quasi-Newton coupling algorithms • Multi-coupling Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN26 The roles of an adapter Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN27 + Part IIa: previous approach Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN28 Duplicated development effort Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN29 Duplicated development effort Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN29 Duplicated development effort All these adapters are bound to specific solvers! Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN29 Duplicated development effort All these adapters are bound to specific solvers! ! We need an official, general adapter! Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN29 Example of an adapted solver (previous) 1 /* Adapter: Initialize coupling */ 22 /* solve the equations */ 2 adapter.initialize(); 23 #include "rhoEqn.H" 3 24 while (pimple.loop()) 4 Info<<"\nStarting time loop\n" << endl; 25 { 5 26 ... 6 while (adapter.isCouplingOngoing()) { 27 } 7 #include "readTimeControls.H" 28 8 #include "compressibleCourantNo.H" 29 /* Adapter: Write in buffers */ 9 #include "setDeltaT.H" 30 adapter.writeCouplingData(); 10 31 11 /* Adapter: Adjust solver time */ 32 /* Adapter: advance the coupling */ 12 adapter.adjustSolverTimeStep(); 33 adapter.advance(); 13 34 14 /* Adapter: Write checkpoint */ 35 /* Adapter: Read checkpoint */ 15 if(adapter.isWriteCheckptRequired()) 36 if(adapter.isReadCheckptRequired()) 16 adapter.writeCheckpoint(); 37 adapter.readCheckpoint(); 17 38 18 runTime++; 39 if(adapter.isCouplTimeStepComplete()) 19 40 runTime.write(); 20 /* Adapter: Receive coupling data */ 41 21 adapter.readCouplingData(); 42 } Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 10 Before: Working and validated prototypes Image from desertcart.ae. Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 11 Before: Working and validated prototypes Image from desertcart.ae. Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 11 Now: A user-friendly, plug-and-play adapter The human-like figure is a property of ikea.com. Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 12 + Part IIb: a new, official adapter Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 13 Several advantages: • No source code changes • Load at runtime • (mostly) Solver agnostic However: • Still ready-to-run only for CHT • but... Making this a function object Several challenges: • No changes in the source allowed − Cannot use variables directly − Ask the objects’ registry • One adapter for all the solvers and problem types − Some parameters are not available • Only one call to execute() at the end − We may need to reload a checkpoint at the last timestep... − Set the endTime to GREAT and exit when ready. • Collaboration with other function objects − At the end, call any other end() methods explicitly. • Error handling − read() degrades errors to warnings − Catch them and throw them in execute • One adapter for all the OpenFOAM flavors and versions? − E.g. boundaryField() and boundaryFieldRef() − E.g. missing adjustTimeStep() − How to distribute? Branches/Tags? Preprocessor ifdef? • ... Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 14 However: • Still ready-to-run only for CHT • but... Making this a function object Several challenges: Several advantages: • No changes in the source allowed • No source code changes − Cannot use variables directly • Load at runtime − Ask the objects’ registry • (mostly) Solver agnostic • One adapter for all the solvers and problem types − Some parameters are not available • Only one call to execute() at the end − We may need to reload a checkpoint at the last timestep... − Set the endTime to GREAT and exit when ready. • Collaboration with other function objects − At the end, call any other end() methods explicitly. • Error handling − read() degrades errors to warnings − Catch them and throw them in execute • One adapter for all the OpenFOAM flavors and versions? − E.g. boundaryField() and boundaryFieldRef() − E.g. missing adjustTimeStep() − How to distribute? Branches/Tags? Preprocessor ifdef? • ... Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 14 Making this a function object Several challenges: Several advantages: • No changes in the source allowed • No source code changes − Cannot use variables directly • Load at runtime − Ask the objects’ registry • (mostly) Solver agnostic • One adapter for all the solvers and problem types However: − Some parameters are not available • Still ready-to-run only for CHT • Only one call to execute() at the end • but... − We may need to reload a checkpoint at the last timestep... − Set the endTime to GREAT and exit when ready. • Collaboration with other function objects − At the end, call any other end() methods explicitly. • Error handling − read() degrades errors to warnings − Catch them and throw them in execute • One adapter for all the OpenFOAM flavors and versions? − E.g. boundaryField() and boundaryFieldRef() − E.g. missing adjustTimeStep() − How to distribute? Branches/Tags? Preprocessor ifdef? • ... Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 14 An extensible adapter Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 15 OK! I want to use it! Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 16 Properties for incompressible solvers: 1 // constant/transportProperties 2 rho rho [1-300000]1; 3 Cp Cp [02-2-1000] 5000; Properties for basic solvers: 1 // constant/transportProperties 2 k k [11-3-1000] 100; OpenFOAM configuration 1 // system/controlDict 2 functions 3 { 4 preCICE_Adapter 5 { 6 type preciceAdapterFunctionObject; 7 libs ("libpreciceAdapterFunctionObject.so"); 8 } 9 } Set the appropriate boundary condition types: 1 // 0/T 2 interface 3 { 4 type fixedValue; 5 value uniform 300; 6 } 7 8 // other types: fixedGradient, mixed Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 17 OpenFOAM configuration 1 // system/controlDict 2 functions 3 { 4 preCICE_Adapter 5 { 6 type preciceAdapterFunctionObject; 7 libs ("libpreciceAdapterFunctionObject.so"); 8 } 9 } Set the appropriate boundary condition types: Properties for incompressible solvers: 1 // 0/T 1 // constant/transportProperties 2 interface 2 rho rho [1-300000]1; 3 { 3 Cp Cp [02-2-1000] 5000; 4 type fixedValue; Properties for basic solvers: 5 value uniform 300; 6 } 1 // constant/transportProperties 7 2 k k [11-3-1000] 100; 8 // other types: fixedGradient, mixed Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 17 preCICE & adapter configuration libprecice adapter Solver A Solver B YAML YAML XML Adapter A Config Adapter B Config preCICE Config To run the simulation, just execute the solvers as usual. Gerasimos Chourdakis (TUM) | Couple OpenFOAM with any other solver using preCICE | Feb 21, 2018 | GOFUN2 18 Tutorials Gerasimos