Validation

Notus CFD is thoroughly verified and validated thanks to an important amount of numerical test cases and adequate processing tools.

A Python script runs a collection of NTS files that cover most of the modeling and numerical methods of the code. It can be used on the whole NTS files, but also on a reduced part of it to focus on the validation of somes cases in particular.

The test cases are separated into two mains topics, Verification and Validation:

  • The verification topic provides a set of test cases that aim to verify the base numerical methods. Precise convergence is verified, symmetry is tested. It is mainly a mathematical and numeric oriented approach. They can be used to compare numerical schemes and methods.
  • The validation topic provides a set of test cases that aim to validate the usability of the code on typical, advanced and well documented physical cases taken from the literature. They can be used to compare results obtained with other CFD codes.

Below is given an extraction of the validation log file that indicates for each test case if the validation has passed (expected value is verified up to a certain precision), failed (the expected precision is not reached) or has given an error :

Validation of Notus
Start interactive validation
════════════════════════════════
File: test_cases/validation/multiphase/dam_break/dam_break_levelset_2D.nts
Arguments:
Log: validation_log/validation/multiphase/dam_break/dam_break_levelset_2D.log
MPI proc: 9

iteration │ tolerance │ mean volume fraction air │ mean volume fraction water
──────────┼───────────┼──────────────────────────┼───────────────────────────
10        │ 1e-12     │ 1.5453895718664512e-07   │ 1.5453896262673794e-07    
Status: FAIL

════════════════════════════════
File: test_cases/validation/free_convection/square_cavity_2D.nts
Arguments:
Log: validation_log/validation/free_convection/square_cavity_2D.log
MPI proc: 9

converged │ iteration │ tolerance │     mean velocity     │    mean temperature   
──────────┼───────────┼───────────┼───────────────────────┼───────────────────────
True      │ 287       │ 1e-10     │ 4.124825481177652e-14 │ 2.7284841053187847e-12
Status: PASS

════════════════════════════════
File: test_cases/verification/navier/ibd/poiseuille_tilted_2D.nts
Arguments:
Log: validation_log/verification/navier/ibd/poiseuille_tilted_2D.log
MPI proc: 9
Status: ERROR

 

At the end of the log file, statistics are given:

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Statistics

Elapsed time: 889.69 s

PASS │ FAIL │ ERROR
─────┼──────┼──────
27   │ 11   │ 6    

Failed tests:
test_cases/validation/laminar_flows/driven_cavity_2D.nts                                         [] {'converged': True, 'iteration': 2171, 'tolerance': 1e-10, 'mean velocity': 4.0011877144863206e-10}
test_cases/validation/laminar_flows/flows_past_obstacle/backward_facing_step_axisymmetric_2D.nts [] {'converged': True, 'iteration': 448, 'tolerance': 1e-10, 'mean velocity': 0.11310357021808526}
test_cases/validation/laminar_flows/flows_past_obstacle/cylinder_2D.nts                          [] {'converged': True, 'iteration': 1929, 'tolerance': 1e-07, 'mean velocity': 4.09130440193195e-07}
test_cases/validation/laminar_flows/flows_past_obstacle/ellipse_2D.nts                           [] {'converged': True, 'iteration': 1269, 'tolerance': 1e-07, 'mean velocity': 8.267106268444735e-07}
test_cases/validation/multiphase/dam_break/dam_break_levelset_2D.nts                             [] {'iteration': 10, 'tolerance': 1e-12, 'mean volume fraction air': 1.5453895718664512e-07, 'mean volume fraction water': 1.5453896262673794e-07}
test_cases/validation/multiphase/dam_break/dam_break_vof_plic_2D.nts                             [] {'iteration': 10, 'tolerance': 1e-12, 'mean volume fraction air': 0.00017052631579028699, 'mean volume fraction water': 0.0001705263157855269}
test_cases/validation/multiphase/solitary_waves/solitary_wave_periodic_2D.nts                    [] {'iteration': 450, 'tolerance': 1e-11, 'mean velocity': nan, 'mean volume fraction air': 0.5149845841124816, 'mean volume fraction water': 0.5149845841124887}
test_cases/validation/multiphase/solitary_waves/solitary_wave_wall_2D.nts                        [] {'iteration': 500, 'tolerance': 1e-11, 'mean velocity': nan, 'mean volume fraction air': 0.5172061693352239, 'mean volume fraction water': 0.5172061693353069}
test_cases/validation/thermosolutal/square_cavity_2D.nts                                         [] {'converged': False, 'iteration': 1000, 'tolerance': 1e-13, 'mean velocity': 4.1232084413422854e-10, 'mean temperature': 2.3190103386472316e-06, 'mean concentration tc_species_1': 2.3190008445195254e-06}
test_cases/verification/navier/ibd/poiseuille_2D.nts                                             [] {'converged': True, 'iteration': 11, 'tolerance': 1e-13, 'mean velocity': 0.004827201891756283}
test_cases/verification/phase_advection/level_set_sheared_2D.nts                                 [] {'iteration': 200, 'tolerance': 1e-13, 'mean volume fraction fluid_1': 0.0012876879876512204, 'mean volume fraction fluid_2': 0.0012876879876511926}

Tests with error:
test_cases/validation/multiphase/bubble_rise/bubble_rise_2D.nts         []
test_cases/validation/multiphase/dam_break/dam_break_mof_2D.nts         []
test_cases/verification/navier/ibd/couette_2D.nts                       []
test_cases/verification/navier/ibd/poiseuille_tilted_2D.nts             []
test_cases/verification/phase_advection/mof_analytic_sheared_2D.nts     []
test_cases/verification/phase_advection/mof_minimization_sheared_2D.nts []