-
Notifications
You must be signed in to change notification settings - Fork 124
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
Create incompressible_viscous solver and lid-driven cavity test problem #138
Merged
zingale
merged 44 commits into
python-hydro:main
from
simonguichandut:dev_incompressible_viscous
Aug 9, 2023
Merged
Changes from all commits
Commits
Show all changes
44 commits
Select commit
Hold shift + click to select a range
fd36dc1
create incompressible_viscous solver and lid-driven cavity test problem
simonguichandut 59c9ccd
Merge branch 'main' into dev_incompressible_viscous
zingale b0f306f
isort,flake8 fixes
simonguichandut 85b6d70
another one
simonguichandut 0932c4c
add regression test
simonguichandut 0ccb018
add incompressible_viscous in setup.py benchmarks
simonguichandut 3b267d0
Merge branch 'main' into dev_incompressible_viscous
zingale 92fb3c6
[WIP] incompressible viscous docs
simonguichandut ba3dab3
[WIP] incompressible viscous converge test
simonguichandut 60d0407
Merge branch 'main' into dev_incompressible_viscous
zingale d2883aa
gitignore adds
simonguichandut 977d2c6
add viscosity as aux variable
simonguichandut 45f37a2
docs fixes
simonguichandut b0a3811
add viscosity units
simonguichandut 290446b
add incompressible_viscous converge problem
simonguichandut abe7bd1
add incompressible_viscous shear problem
simonguichandut 76433f7
remove 0.5 factor
simonguichandut a7f5e61
add viscous term to interface calculation
simonguichandut b25cb2a
flake8
simonguichandut 58a87c8
Merge branch 'main' into dev_incompressible_viscous
simonguichandut 8c7bd09
factor in proj_type
simonguichandut 9ef648b
Merge branch 'dev_incompressible_viscous' of https://github.com/simon…
simonguichandut 2b6cf87
Merge branch 'python-hydro:main' into dev_incompressible_viscous
simonguichandut 7b17330
check errors on zero viscosity test at the same time as incompressible
simonguichandut 06f1003
fix converge problem solution
simonguichandut e2c4e8e
pylint fixes
simonguichandut 5478a88
more
simonguichandut 6b033d7
pylint arguments-differ ignore
simonguichandut 991a71e
Eric's suggestion
simonguichandut 8b9dc61
lower default viscosity on shear problem
simonguichandut 808a2b6
update cavity benchmark file
simonguichandut 6ffb4aa
remove time in cavity plot title
simonguichandut 23bbcaf
incompressible viscous docs page
simonguichandut 9ddd85b
docs update
simonguichandut e142d56
Merge branch 'main' into dev_incompressible_viscous
simonguichandut 2a51706
api docs
simonguichandut 47ebdf7
pyro.rst api file
simonguichandut 4e8047e
redundant try except
simonguichandut aa3248c
Merge branch 'main' into dev_incompressible_viscous
simonguichandut affacbb
Merge branch 'main' into dev_incompressible_viscous
zingale 02df7f4
merge from main, apply_other_source_terms() in incomp_interface
simonguichandut 749cdd5
correct function description
simonguichandut a7cfc0d
re-import bnd
simonguichandut d299134
update description
simonguichandut File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,7 +22,10 @@ inputs.auto | |
|
||
__pycache__/ | ||
|
||
.DS_Store | ||
|
||
|
||
pyro/_version.py | ||
pyro.egg-info/ | ||
pyro_hydro.egg-info/ | ||
.eggs/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,115 @@ | ||
Incompressible viscous hydrodynamics solver | ||
=========================================== | ||
|
||
pyro's incompressible viscous solver solves: | ||
|
||
.. math:: | ||
|
||
\frac{\partial U}{\partial t} + U \cdot \nabla U + \nabla p &= \nu \nabla^2 U \\ | ||
\nabla \cdot U &= 0 | ||
|
||
This solver is based on pyro's incompressible solver, but modifies the | ||
velocity update step to take viscosity into account. | ||
|
||
The main parameters that affect this solver are: | ||
|
||
.. include:: incompressible_viscous_defaults.inc | ||
|
||
Examples | ||
-------- | ||
|
||
shear | ||
^^^^^ | ||
|
||
The same shear problem as in incompressible solver, here with viscosity | ||
added. | ||
|
||
.. prompt:: bash | ||
|
||
pyro_sim.py incompressible_viscous shear inputs.shear | ||
|
||
.. image:: shear_viscous.png | ||
:align: center | ||
|
||
Compare this with the inviscid result. Notice how the velocities have | ||
diffused in all directions. | ||
|
||
cavity | ||
^^^^^^ | ||
|
||
The lid-driven cavity is a well-known benchmark problem for hydro codes | ||
(see e.g. :cite:t:`ghia1982`, :cite:t:`Kuhlmann2019`). In a unit square box | ||
with initially static fluid, motion is initiated by a "lid" at the top | ||
boundary, moving to the right with unit velocity. The basic command is: | ||
|
||
.. prompt:: bash | ||
|
||
pyro_sim.py incompressible_viscous cavity inputs.cavity | ||
|
||
It is interesting to observe what happens when varying the viscosity, or, | ||
equivalently the Reynolds number (in this case :math:`\rm{Re}=1/\nu` since | ||
the characteristic length and velocity scales are 1 by default). | ||
|
||
|pic1| |pic2| |pic3| | ||
|
||
.. |pic1| image:: cavity_Re100.png | ||
:width: 32% | ||
|
||
.. |pic2| image:: cavity_Re400.png | ||
:width: 32% | ||
|
||
.. |pic3| image:: cavity_Re1000.png | ||
:width: 32% | ||
|
||
These plots were made by allowing the code to run for longer and approach a | ||
steady-state with the option ``driver.max_steps=1000``, then running | ||
(e.g. for the Re=100 case): | ||
|
||
.. prompt:: bash | ||
|
||
python incompressible_viscous/problems/plot_cavity.py cavity_n64_Re100_0406.h5 -Re 100 -o cavity_Re100.png | ||
|
||
convergence | ||
^^^^^^^^^^^ | ||
|
||
This is the same test as in the incompressible solver. With viscosity, | ||
an exponential term is added to the solution. Limiting can again be | ||
disabled by adding ``incompressible.limiter=0`` to the run command. | ||
The basic set of tests shown below are run as: | ||
|
||
.. prompt:: bash | ||
|
||
pyro_sim.py incompressible_viscous converge inputs.converge.32 vis.dovis=0 | ||
pyro_sim.py incompressible_viscous converge inputs.converge.64 vis.dovis=0 | ||
pyro_sim.py incompressible_viscous converge inputs.converge.128 vis.dovis=0 | ||
|
||
The error is measured by comparing with the analytic solution using | ||
the routine ``incomp_viscous_converge_error.py`` in ``analysis/``. To | ||
generate the plot below, run | ||
|
||
.. prompt:: bash | ||
|
||
python incompressible_viscous/tests/convergence_errors.py convergence_errors.txt | ||
|
||
or ``convergence_errors_no_limiter.txt`` after running with that option. Then: | ||
|
||
.. prompt:: bash | ||
|
||
python incompressible_viscous/tests/convergence_plot.py | ||
|
||
.. image:: incomp_viscous_converge.png | ||
:align: center | ||
|
||
The solver is converging but below second-order, unlike the inviscid case. Limiting | ||
does not seem to make a difference here. | ||
|
||
Exercises | ||
--------- | ||
|
||
Explorations | ||
^^^^^^^^^^^^ | ||
|
||
* In the lid-driven cavity problem, when does the solution reach a steady-state? | ||
|
||
* :cite:`ghia1982` give benchmark velocities at different Reynolds number for the | ||
lid-driven cavity problem (see their Table I). Do we agree with their results? |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
* section: [driver] | ||
|
||
+----------------------------------+----------------+----------------------------------------------------+ | ||
| option | value | description | | ||
+==================================+================+====================================================+ | ||
| cfl | ``0.8`` | | | ||
+----------------------------------+----------------+----------------------------------------------------+ | ||
|
||
* section: [incompressible] | ||
|
||
+----------------------------------+----------------+----------------------------------------------------+ | ||
| option | value | description | | ||
+==================================+================+====================================================+ | ||
| limiter | ``2`` | limiter (0 = none, 1 = 2nd order, 2 = 4th order) | | ||
+----------------------------------+----------------+----------------------------------------------------+ | ||
| proj_type | ``2`` | what are we projecting? 1 includes -Gp term in U* | | ||
+----------------------------------+----------------+----------------------------------------------------+ | ||
|
||
* section: [incompressible_viscous] | ||
|
||
+----------------------------------+----------------+----------------------------------------------------+ | ||
| option | value | description | | ||
+==================================+================+====================================================+ | ||
| viscosity | ``0.1`` | kinematic viscosity of the fluid (units L^2/T) | | ||
+----------------------------------+----------------+----------------------------------------------------+ | ||
|
||
* section: [particles] | ||
|
||
+----------------------------------+----------------+----------------------------------------------------+ | ||
| option | value | description | | ||
+==================================+================+====================================================+ | ||
| do_particles | ``0`` | | | ||
+----------------------------------+----------------+----------------------------------------------------+ | ||
| particle_generator | ``grid`` | | | ||
+----------------------------------+----------------+----------------------------------------------------+ | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
pyro.incompressible\_viscous.problems package | ||
============================================= | ||
|
||
.. automodule:: pyro.incompressible_viscous.problems | ||
:members: | ||
:undoc-members: | ||
:show-inheritance: | ||
|
||
Submodules | ||
---------- | ||
|
||
pyro.incompressible\_viscous.problems.cavity module | ||
--------------------------------------------------- | ||
|
||
.. automodule:: pyro.incompressible_viscous.problems.cavity | ||
:members: | ||
:undoc-members: | ||
:show-inheritance: | ||
|
||
pyro.incompressible\_viscous.problems.converge module | ||
----------------------------------------------------- | ||
|
||
.. automodule:: pyro.incompressible_viscous.problems.converge | ||
:members: | ||
:undoc-members: | ||
:show-inheritance: | ||
|
||
pyro.incompressible\_viscous.problems.plot\_cavity module | ||
--------------------------------------------------------- | ||
|
||
.. automodule:: pyro.incompressible_viscous.problems.plot_cavity | ||
:members: | ||
:undoc-members: | ||
:show-inheritance: | ||
|
||
pyro.incompressible\_viscous.problems.shear module | ||
-------------------------------------------------- | ||
|
||
.. automodule:: pyro.incompressible_viscous.problems.shear | ||
:members: | ||
:undoc-members: | ||
:show-inheritance: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
pyro.incompressible\_viscous package | ||
==================================== | ||
|
||
.. automodule:: pyro.incompressible_viscous | ||
:members: | ||
:undoc-members: | ||
:show-inheritance: | ||
|
||
Subpackages | ||
----------- | ||
|
||
.. toctree:: | ||
:maxdepth: 4 | ||
|
||
pyro.incompressible_viscous.problems | ||
|
||
Submodules | ||
---------- | ||
|
||
pyro.incompressible\_viscous.BC module | ||
-------------------------------------- | ||
|
||
.. automodule:: pyro.incompressible_viscous.BC | ||
:members: | ||
:undoc-members: | ||
:show-inheritance: | ||
|
||
pyro.incompressible\_viscous.simulation module | ||
---------------------------------------------- | ||
|
||
.. automodule:: pyro.incompressible_viscous.simulation | ||
:members: | ||
:undoc-members: | ||
:show-inheritance: |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
#!/usr/bin/env python3 | ||
|
||
|
||
import math | ||
import sys | ||
|
||
import numpy as np | ||
|
||
import pyro.util.io_pyro as io | ||
|
||
usage = """ | ||
compare the output in file from the incompressible viscous converge problem to | ||
the analytic solution. | ||
|
||
usage: ./incomp_viscous_converge_error.py file | ||
""" | ||
|
||
|
||
def get_errors(file): | ||
|
||
sim = io.read(file) | ||
myd = sim.cc_data | ||
myg = myd.grid | ||
|
||
# numerical solution | ||
u = myd.get_var("x-velocity") | ||
v = myd.get_var("y-velocity") | ||
nu = myd.get_aux("viscosity") | ||
|
||
t = myd.t | ||
|
||
# analytic solution | ||
u_exact = myg.scratch_array() | ||
u_exact[:, :] = 1.0 - 2.0*np.cos(2.0*math.pi*(myg.x2d-t))*np.sin(2.0*math.pi*(myg.y2d-t))*np.exp(-8*math.pi**2*nu*t) | ||
|
||
v_exact = myg.scratch_array() | ||
v_exact[:, :] = 1.0 + 2.0*np.sin(2.0*math.pi*(myg.x2d-t))*np.cos(2.0*math.pi*(myg.y2d-t))*np.exp(-8*math.pi**2*nu*t) | ||
|
||
# error | ||
udiff = u_exact - u | ||
vdiff = v_exact - v | ||
|
||
return udiff.norm(), vdiff.norm() | ||
|
||
|
||
def main(): | ||
if len(sys.argv) != 2: | ||
print(usage) | ||
sys.exit(2) | ||
|
||
file = sys.argv[1] | ||
errors = get_errors(file) | ||
print("errors: ", errors[0], errors[1]) | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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.
I think
incompressible_viscous_basics
is really an extension ofincompressible
solver, so it might be better to just add subsections inincompressible_basics
.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.
That might make the page a little cumbersome. An alternative is to combine the solvers into a single one, since incompressible_viscous perfectly reproduces incompressible when viscosity=0. But that would be another PR.
Thoughts @zhichen3 @zingale ?