-
-
Notifications
You must be signed in to change notification settings - Fork 132
Partitioned heat conduction (G+Smo participant) #604
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Partitioned heat conduction (G+Smo participant) #604
Conversation
uekerman
commented
Dec 10, 2024
Let's first iterate on #603 and then here, OK?
MakisH
commented
Jul 17, 2025
@Crazy-Rich-Meghan do you plan to continue this development? It seems to currently be in draft state. We are happy to help get it in a good state!
Hi everyone,
Sorry for the delay! I have updated the partitioned heat conduction example from our side, this version supports the direct mesh access feature. To run the benchmark you need to do the following:
1. Clone G+Smo
2. cmake .. -DCMAKE_BUILD_TYPE=Release -DGISMO_OPTIONAL="gsPreCICE"
3. cmake --build build --target partitioned-heat-conduction -j 8
4. Install this example systemwide make install partitioned-heat-conduction
5. Go to the neumann-gismo folder run the Neumann participant with the run script.
6. Go to the dirichlet-gismo folder run the Dirichlet participant with the run script.
Let me know if you get stuck somewhere!
MakisH
commented
Oct 7, 2025
thanks for the updates! I am now trying to build on my system, based on the stable branch (Commit ef4c754785cf4949d3a89b916eed807b74b97a9b, October 2).
I do get a building error, though (g++ (Ubuntu 12.3.0-1ubuntu1~22.04.2) 12.3.0):
[ 97%] Building CXX object optional/gsPreCICE/examples/CMakeFiles/partitioned-heat-conduction.dir/partitioned-heat-conduction.cpp.o
/home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp: In function ‘int main(int, char**)’:
/home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:110:17: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’}
110 | for (; domIt->good(); domIt->next(), k++ )
| ^~
/home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:110:32: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’}
110 | for (; domIt->good(); domIt->next(), k++ )
| ^~
/home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:120:15: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’}
120 | for (domIt->reset(); domIt->good(); domIt->next(), k++ )
| ^~
/home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:120:31: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’}
120 | for (domIt->reset(); domIt->good(); domIt->next(), k++ )
| ^~
/home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:120:46: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’}
120 | for (domIt->reset(); domIt->good(); domIt->next(), k++ )
| ^~
/home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:124:29: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’}
124 | QuRule->mapTo( domIt->lowerCorner(), domIt->upperCorner(),
| ^~
/home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:124:51: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’}
124 | QuRule->mapTo( domIt->lowerCorner(), domIt->upperCorner(),
| ^~
gmake[3]: *** [optional/gsPreCICE/examples/CMakeFiles/partitioned-heat-conduction.dir/build.make:76: optional/gsPreCICE/examples/CMakeFiles/partitioned-heat-conduction.dir/partitioned-heat-conduction.cpp.o] Error 1
gmake[2]: *** [CMakeFiles/Makefile2:1940: optional/gsPreCICE/examples/CMakeFiles/partitioned-heat-conduction.dir/all] Error 2
gmake[1]: *** [CMakeFiles/Makefile2:1947: optional/gsPreCICE/examples/CMakeFiles/partitioned-heat-conduction.dir/rule] Error 2
gmake: *** [Makefile:907: partitioned-heat-conduction] Error 2
By the way, I edited your instructions above to add a number next to the -j flag. Without a number, it will use as many threads as parallelizable build targets, which might fill the memory completely and make a system crash.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These should be handled by clean_precice_logs(), called by clean_gismo() (see https://github.com/precice/tutorials/blob/develop/tools/cleaning-tools.sh)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is a bit too intrusive (especially for the .txt files). Better do a fine-grained extension of clean_gismo().
Same in the neumann-gismo directory.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could we move most of this content to the adapter documentation, and refer to that?
The path ./gismo_executable/gismo_executable is assumed by the run.sh, so it should probably be documented here. But we should better call that directory solver-gismo.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Not yet referred to from the README.md. In principle, both FEniCS and G+Smo should give the same solution. If not, we should add the picture in the README.md together with a comment.
Co-authored-by: Gerasimos Chourdakis <gerasimos.chourdakis@ipvs.uni-stuttgart.de>
Co-authored-by: Gerasimos Chourdakis <gerasimos.chourdakis@ipvs.uni-stuttgart.de>
Crazy-Rich-Meghan
commented
Oct 17, 2025
thanks for the updates! I am now trying to build on my system, based on the stable branch (Commit ef4c754785cf4949d3a89b916eed807b74b97a9b, October 2).
I do get a building error, though (
g++ (Ubuntu 12.3.0-1ubuntu1~22.04.2) 12.3.0):[ 97%] Building CXX object optional/gsPreCICE/examples/CMakeFiles/partitioned-heat-conduction.dir/partitioned-heat-conduction.cpp.o /home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp: In function ‘int main(int, char**)’: /home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:110:17: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’} 110 | for (; domIt->good(); domIt->next(), k++ ) | ^~ /home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:110:32: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’} 110 | for (; domIt->good(); domIt->next(), k++ ) | ^~ /home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:120:15: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’} 120 | for (domIt->reset(); domIt->good(); domIt->next(), k++ ) | ^~ /home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:120:31: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’} 120 | for (domIt->reset(); domIt->good(); domIt->next(), k++ ) | ^~ /home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:120:46: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’} 120 | for (domIt->reset(); domIt->good(); domIt->next(), k++ ) | ^~ /home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:124:29: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’} 124 | QuRule->mapTo( domIt->lowerCorner(), domIt->upperCorner(), | ^~ /home/gc/repos/misc/gismo/optional/gsPreCICE/examples/partitioned-heat-conduction.cpp:124:51: error: base operand of ‘->’ has non-pointer type ‘gismo::gsBasis<double>::domainIter’ {aka ‘gismo::gsDomainIteratorWrapper<double>’} 124 | QuRule->mapTo( domIt->lowerCorner(), domIt->upperCorner(), | ^~ gmake[3]: *** [optional/gsPreCICE/examples/CMakeFiles/partitioned-heat-conduction.dir/build.make:76: optional/gsPreCICE/examples/CMakeFiles/partitioned-heat-conduction.dir/partitioned-heat-conduction.cpp.o] Error 1 gmake[2]: *** [CMakeFiles/Makefile2:1940: optional/gsPreCICE/examples/CMakeFiles/partitioned-heat-conduction.dir/all] Error 2 gmake[1]: *** [CMakeFiles/Makefile2:1947: optional/gsPreCICE/examples/CMakeFiles/partitioned-heat-conduction.dir/rule] Error 2 gmake: *** [Makefile:907: partitioned-heat-conduction] Error 2By the way, I edited your instructions above to add a number next to the
-jflag. Without a number, it will use as many threads as parallelizable build targets, which might fill the memory completely and make a system crash.
Hi @makis, have you pulled the main Gismo? We couldn't replicate the issue (on both MacOS and Ubuntu).
@MakisH
MakisH
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Crazy-Rich-Meghan I have not forgotten about this PR, and I see there are still some easy points to close. I added a log file with my building issue.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Do we need other modules for this tutorial? If not, let's remove. If yes, document.
But as I wrote in another comment, this looks like something to move to the adapter documentation.
Crazy-Rich-Meghan
commented
Jan 20, 2026
Hi @MakisH,
The domIt->good() issue has been fixed in gsPreCICE (commit e557b51). Please update your gsPreCICE to the latest version:
rm -rf optional/gsPreCICE
cmake .. -DGISMO_OPTIONAL="gsPreCICE"
MakisH
commented
Jan 20, 2026
Thanks, @Crazy-Rich-Meghan, this worked! The perpendicular-flap-vertex-gismo does not build for me anymore, but I will have another look.
If you have no objections, I will (later) push a few changes directly to this branch, to make the tutorial more consistent with https://precice.org/tutorials-perpendicular-flap-stress.html
Crazy-Rich-Meghan
commented
Jan 21, 2026
Hi @MakisH,
Thanks for the review! I've addressed your comments:
- Updated
clean.shscripts to use the standardclean_gismo()function - Simplified the README.md, linking to the adapter documentation
- Updated executable paths in
run.shscripts - Removed the redundant gismo.gif (same result as FEniCS)
Please let me know if there's anything else that needs to be changed.
Summary: Partitioned heat conduction G+Smo (IsoGeometric Analysis) participant
NOTE: G+Smo adapter is a submodule of the G+Smo library, to run the tutorial you need to configure G+Smo main library.
This PR is marked as a draft because the documentation for the G+Smo adapter requires updates.