Dear preCICE users,
I am currently doing my MSc Thesis in the field of FSI. I am using a workflow that combines OpenFOAM for the fluid modelling and deal.ii for the structural modelling in order to simulate the Chen and Wambsganss case consisting of annular axial water flow over a single brass beam that is fixed at both of its ends ( for more information, see: Redirecting ). I am using preCICE 2.3.0 to couple the solvers. My preCICE config file is attached below. It is important to note that I am using a parallel subiteration scheme, with a compact and consistent RBF mapping between the domains.
I am particularly interested at the moment in how the solver uses up the computational time for a given FSI simulation, that is, how long different operations such as mapping, coupling, and calling the solvers take. For this, I looked into the events summary log files for the two domains (attached below). I am hence interested in the main contributors to the computational time for each of the two domains. These are the “advance”, “solver.advance”, and the different entries associated with the mapping between the two domains (particularly the advance/map.pet.mapData and the advance/map.pet.solveConsistent for the two). I tried looking into the source code of preCICE (more specifically, in PetRadialBasisFctMapping.hpp). While I do understand what map.pet.solveConsistent accounts for (that is, finding the unknown weights of the RBF mapping at a given subiteration), it was difficult for me to determine what the map.pet.mapData entry stands for. I see that the start of the event is at the beginning of the mapConservative method in PetRadialBasisFctMapping.hpp, within the line:
precice::profiling::Event e("map.pet.mapData.From" + this->input()->getName() + "To" + this->output()->getName(), profiling::Synchronize);
However, I do not see where the event is stopped. Hence, I do not know what actions are actually executed within the timeframe that map.pet.mapData.From accounts for.
My second question has to do with what operations are executed within the “solver” and the “solver.advance” entries. Again, by checking ParticipantImpl.cpp, I could understand that for a given solver, the “advance” entry within the events summary file stands for the exchange of information with the other domain (writing the data to be sent to the other solver, and reading the input from the other solver). Then, I assume the “solver.advance” entry would correspond to actually calling the Fluid or the Solid solver, though I cannot find a proof of this in the source code. But if this were indeed the case, it should be that the “solver.advance” would require a larger computational time for the fluid solver, since the grid I am using is two orders of magnitude larger than the structural one. However, it appears that the opposite is true, where “solver.advance” requires little time for the Fluid solver, and a long time for the Strutuctural one.
In conclusion, as the title says, I would like to know exactly what operations preCICE does within the “advance/map.pet.mapData”, “solver” and “solver.advance” time events. Thank you!
precice-Fluid-events-summary.log (12.6 KB)
precice-Solid-events-summary.log (11.6 KB)
precice-config.xml (2.9 KB)