Simulating Kelvin Waves using the Spectral Element Library in Fortran
Upcoming Videos
Some commentary and ranting below
Look, I’ve got a lot of things I want to present. But keeping Fluid Numerics running and having other things going on in life, it’s challenging to stick to scheduled dates for these. At any rate, here’s a mind dump of a number of things I’ll likely cover at some point… Perhaps drop a comment below to tell me what you’d want to see!
[TBD] The ‘F’ Word : A configurable CLI with FLAP and JSON-Fortran
[TBD] The ‘F’ Word : Reading in accelerometer data from an Arduino in Fortran
[TBD] The ‘F’ Word : Making a highly customizable PDE solver : A deep dive into inheritance and procedure pointers
[TBD] The ‘F’ Word : Using OO Fortran features for portability; CPUs, GPUs, and APUs
[TBD] The ‘F’ Word : Building the linear Euler equations solver in SELF (again!)
[TBD] The ‘F’ Word : Adding nonlinearity to the Euler equations solver in SELF (again!)
[TBD] The ‘F’ Word : Describing 2-D unstructured meshes and computing Riemann fluxes in SELF
[TBD] The ‘F’ Word : What the flip?! Describing 3-D unstructured meshes and computing Riemann fluxes in SELF
“The ‘F’ Word” series is meant to document the use of modern fortran for developing an extensible library that can be used to solve conservation laws (PDEs) using spectral and spectral element methods. By documenting the development process, my hope is to curate examples of using OO Fortran as well as Fortran-C interoperability features for portable GPU and multi-GPU application development.
Another goal is to dispel the idea that Fortran is just about punch cards and GOTO statements by providing an example of an active modern Fortran project. I’ve heard too many times that Fortran is archaic, when it’s clear from this community that Fortran is alive and well in a vibrant and growing community.
For those interested in the mathematical theory, I’m putting together notes before each livestream that covers material relevant to the algorithms that are later implemented in Fortran. Here, the idea is to depict the process of transitioning from an idea and a mathematical model into an implementation in OO Fortran.
The current plan is to have livestreams every two weeks and to start putting out polished videos at least once per month. Rather than creating a new topic every time and polluting this Discourse, I figured it’d be best to share updates on this activity in this one topic.
Feel free to post any questions or discussions about this series or any of the material here. I enjoy spending time on this regularly and I hope this community finds this valuable.
In this livestream, Joe will work through the algorithm development for the linear shallow water equations with flat-bottomed topography and no background flow. In the process, we will discuss the development of the Local Lax-Friedrich’s Riemann solver and how to specify radiation and reflecting (no-normal-flow) boundary conditions. Following this discussion, we’ll show how to use Fortran type extensions for the Model2D class in SELF to build the linear shallow water equation solver. Additionally, we’ll cover how to enable GPU acceleration using HIP and ISO_C_Binding to expose the kernel launches in Fortran. Finally, we’ll draft an example program that simulates linear plane wave propagation and reflection.
Hey all, I’ve opted to have the description of this post be continually updated so that it’s easier to find the link to the next video as well as links to all of the previous ones. Feel free to share any feedback that can help make it easier to find all of this content.
@moderators - It seems I am no longer to make edits to this posts description. In an effort to not “spam” this discourse with weekly/bi-weekly updates to this series, I was hoping to be able to modify the description for this post to keep the community updated on past, present, and future episodes for this series. Is there a way you can enable post editing indefinitely , e.g ( Free to edit post at any time - feature - Discourse Meta ) ?
Hey everyone, the post has been updated with details for this week’s livestream. I’ve also added the planned schedule through July 2022. If you have any requests on topics you’d like to see covered, I’d love to hear your feedback! See you this Friday at 4pm MT!
The next livestream materials have been added to this thread’s description . If you’re interested in solving conservation laws in complex geometries with curved elements, this livestream will be right up your alley. See you there!
Hey everyone! I’m back at it. It took some time to getting used to having a young kiddo at home (18 months now! woot!) Kicking things off with a livestream next week
I’m also looking for folks who want to talk about their Fortran projects on future livestreams. Message me here on fortran-lang if you’re interested in doing a live 30-60 minute chat about your work
Thanks for all the work you’ve done @fluidnumerics_joe! This isn’t a complete idea, but what I’m interested in is modelling sediment transport. I’d be interested in how you can use the library to solve a coupled set of PDEs. I haven’t used general PDE solvers before. All my experience has been with purpose built solvers. I also haven’t used the spectral element method before. I’ve looked into it some and would like to learn more.
Additionally, I might have some free time next year and would be interested in helping out with SELF. I have some experience with Fortran and FEM. If I do end up with some time I’d be happy to work on documentation or other simple tasks until you, the team, and I have more confidence in the code I produced. Honestly, I’d like to use the opportunity of working on SELF to learn the spectral element method, gpu computing, and object orientated techniques in Fortran. I’ve done some OOP work in Fortran but nowhere near as intricate as you guys have done here.
@WaveHello - There’s a few ways I’m aware of for modeling sediment transport. If you have any reference papers/texts that illustrate the mathematical model you’re looking to implement, I’m happy to put it on the list
We’re working on docs and more videos to help explain exactly how SELF is designed. If you’d like to get involved in development, take a look through our issue tracker. If there’s something that you’d like to work on, drop some comments on the relevant issue to discuss how to get things done (and to confirm that we’re not already working on it).
In case you missed it, last week, I interviewed a PhD student at the University of Melbourne, (Marco Rosenzwieg) about his research and how he uses Fortran and GPU acceleration for CFD and combustion simulations.
If you would like to share your work on “The ‘F’ Word”, reach out! I’m always happy to talk shop
We’re still working through our schedule for the year, but have a short public service announcement for you! Initialize your memory and avoid potential correctness issues when porting to new hardware
Public Service Announcement : Initialize your memory on GPUs
New videos coming up
Now that that’s out of the way, we’re currently planning introduction/refresher videos on modern Fortran that will be published to “The ‘F’ Word” playlist. This is in response to a few requests from folks. Additionally, we have introduction to numerical methods and spectral element methods in the works as well. These will all be pre-recorded videos that will get published as time allows.
So what’s up with the live streams ?
Live streams will continue, as new models get added to SELF. In the works at the moment are
Nonlinear compressible Euler for atmospheric flows (2D and 3D models) - this uses a potential temperature as the energy variable and is quite useful for satisfying the “motionless atmosphere” conditions in the presence of gravity.
Nonlinear compressible Euler for transonic flows (2D and 3D models) - this uses internal energy as the energy variable and will be useful for moderate Mach number engineering applications
Two-point flux vectors and split form implementations - we’ll revisit our models and implement entropy conserving formulations using two-point flux divergence operations for dealiasing nonlinear fluxes and stabilizing simulations.
In addition to these, I had a ton of fun talking with Marco about his work. If you’d like to talk shop and share your work on the channel, reach out.