Breaking of a dam (fluidsimfoam-dam solver)#

We created a solver fluidsimfoam-dam to reproduce the OpenFOAM tutorial Breaking of a dam.

from fluidsimfoam_dam import Simul

To run a sequential simulation:

params = Simul.create_default_params()
params.output.sub_directory = "doc_fluidsimfoam/dam"
params.control_dict.end_time = 1.0
sim = Simul(params)
path_run: /home/docs/Sim_data/doc_fluidsimfoam/dam/dam_run_2024-01-21_22-30-20
INFO     sim:                        <class 'fluidsimfoam_dam.Simul'>                                              
         sim.output.log:             <class 'fluidsimfoam.output.log.Log'>                                         
         sim.output.fields:          <class 'fluidsimfoam.output.fields.Fields'>                                   
         input_files:                                                                                              
           - in 0:          U alpha_water p_rgh                                                                    
           - in constant:   g transportProperties turbulenceProperties                                             
           - in system:     blockMeshDict controlDict decomposeParDict fvSchemes fvSolution sampling setFieldsDict 
         sim.output:                 <class 'fluidsimfoam_dam.output.OutputDam'>                                   
         sim.oper:                   <class 'fluidsimfoam.operators.Operators'>                                    
         sim.init_fields:            <class 'fluidsimfoam.init_fields.InitFields'>                                 
         sim.make:                   <class 'fluidsimfoam.make.MakeInvoke'>                                        
                                                                                                                   
sim.make.exec("polymesh")
blockMesh
sim.make.exec("run")
setFields
Starting simulation in 
/home/docs/Sim_data/doc_fluidsimfoam/dam/dam_run_2024-01-21_22-30-20
end_time = 1.0
eq_time:        0.025 (  2.46 %), clock_time:        0.201 s
eq_time:        0.453 ( 45.26 %), clock_time:        2.204 s
eq_time:        0.808 ( 80.77 %), clock_time:        4.207 s
Simulation done. path_run:
/home/docs/Sim_data/doc_fluidsimfoam/dam/dam_run_2024-01-21_22-30-20
import pyvista
pyvista.set_jupyter_backend("static")

pyvista.global_theme.anti_aliasing = 'ssaa'
pyvista.global_theme.background = 'white'
pyvista.global_theme.font.color = 'black'
pyvista.global_theme.font.label_size = 12
pyvista.global_theme.font.title_size = 16
pyvista.global_theme.colorbar_orientation = 'vertical'
sim.output.fields.plot_contour("alpha.water", time=0.1);
_images/97c2b50c5828f11dae7a15f18ff5dc816870cdb5e325c114c1f977891ebf1e03.png
sim.output.fields.plot_contour("alpha.water", time=0.4);
_images/e9106026d322216e5641a0f5f9c16264781ea37ecf907c1e58c1b748ac13ea99.png
sim.output.fields.plot_contour("alpha.water", time=1);
_images/fd8b691eaa8885fd9cfaebb561faf3b9ed4566ee7bd12ea86ed609f5fae46a96.png

To run the same simulation but in parallel:

params = Simul.create_default_params()
params.output.sub_directory = "doc_fluidsimfoam/dam"
params.control_dict.end_time = 1.0

params.parallel.method = "simple"
params.parallel.nsubdoms = 4
params.parallel.nsubdoms_xyz = [2, 2, 1]

sim = Simul(params)
path_run: /home/docs/Sim_data/doc_fluidsimfoam/dam/dam_run_2024-01-21_22-30-32
INFO     sim:                        <class 'fluidsimfoam_dam.Simul'>                                              
         sim.output.log:             <class 'fluidsimfoam.output.log.Log'>                                         
         sim.output.fields:          <class 'fluidsimfoam.output.fields.Fields'>                                   
         input_files:                                                                                              
           - in 0:          U alpha_water p_rgh                                                                    
           - in constant:   g transportProperties turbulenceProperties                                             
           - in system:     blockMeshDict controlDict decomposeParDict fvSchemes fvSolution sampling setFieldsDict 
         sim.output:                 <class 'fluidsimfoam_dam.output.OutputDam'>                                   
         sim.oper:                   <class 'fluidsimfoam.operators.Operators'>                                    
         sim.init_fields:            <class 'fluidsimfoam.init_fields.InitFields'>                                 
         sim.make:                   <class 'fluidsimfoam.make.MakeInvoke'>                                        
                                                                                                                   
sim.make.exec("run")
blockMesh
setFields
decomposePar
Starting simulation in 
/home/docs/Sim_data/doc_fluidsimfoam/dam/dam_run_2024-01-21_22-30-32
end_time = 1.0
eq_time:        0.172 ( 17.24 %), clock_time:        2.203 s
eq_time:        0.336 ( 33.62 %), clock_time:        4.206 s
eq_time:        0.484 ( 48.43 %), clock_time:        6.209 s
eq_time:        0.593 ( 59.26 %), clock_time:        8.212 s
eq_time:        0.755 ( 75.51 %), clock_time:       10.215 s
eq_time:        0.917 ( 91.73 %), clock_time:       12.218 s
Simulation done. path_run:
/home/docs/Sim_data/doc_fluidsimfoam/dam/dam_run_2024-01-21_22-30-32

One can also try with a higher dam:

params.parallel.nsubdoms = 1

params.block_mesh_dict.height_dam *= 2
sim = Simul(params)
path_run: /home/docs/Sim_data/doc_fluidsimfoam/dam/dam_run_2024-01-21_22-30-46
INFO     sim:                        <class 'fluidsimfoam_dam.Simul'>                                              
         sim.output.log:             <class 'fluidsimfoam.output.log.Log'>                                         
         sim.output.fields:          <class 'fluidsimfoam.output.fields.Fields'>                                   
         input_files:                                                                                              
           - in 0:          U alpha_water p_rgh                                                                    
           - in constant:   g transportProperties turbulenceProperties                                             
           - in system:     blockMeshDict controlDict decomposeParDict fvSchemes fvSolution sampling setFieldsDict 
         sim.output:                 <class 'fluidsimfoam_dam.output.OutputDam'>                                   
         sim.oper:                   <class 'fluidsimfoam.operators.Operators'>                                    
         sim.init_fields:            <class 'fluidsimfoam.init_fields.InitFields'>                                 
         sim.make:                   <class 'fluidsimfoam.make.MakeInvoke'>                                        
                                                                                                                   
sim.make.exec("run")
blockMesh
setFields
Starting simulation in 
/home/docs/Sim_data/doc_fluidsimfoam/dam/dam_run_2024-01-21_22-30-46
end_time = 1.0
eq_time:        0.025 (  2.46 %), clock_time:        0.201 s
eq_time:        0.411 ( 41.05 %), clock_time:        2.204 s
eq_time:        0.669 ( 66.90 %), clock_time:        4.206 s
eq_time:        0.856 ( 85.56 %), clock_time:        6.209 s
Simulation done. path_run:
/home/docs/Sim_data/doc_fluidsimfoam/dam/dam_run_2024-01-21_22-30-46
sim.output.fields.plot_contour("alpha.water", time=0.1);
_images/489de57a580e130f8092646ef9b61d71ac0c0b83827920480009d96eeaec0251.png
sim.output.fields.plot_contour("alpha.water", time=0.4);
_images/3fcce536c74abe9ae9ace4025dee175a88c6f06a01934d495c2a5e112826ba72.png
sim.output.fields.plot_contour("alpha.water", time=1);
_images/8babcaadd6deda4d62daa47cd84928141fcf5706d1d68bd64e17ea68fd13ccd3.png