Driver code for an unsteady adaptive collapsible channel problem with prescribed wall motion. Presence of command line arguments indicates validation run with coarse resolution and small number of timesteps.
1557 string directory_for_data =
"RESLT";
1558 unsigned outflow = 0;
1561 unsigned p_solver=2;
1562 unsigned f_solver=2;
1563 unsigned f_bamg_smoother=1;
1564 double f_bamg_damping=1.0;
1565 double f_bamg_strength=0.25;
1566 unsigned f_ml_settings=1;
1567 unsigned refinement=0;
1568 unsigned nsteps=200;
1569 double amplitude=1.0e-2;
1571 bool validation_run=
false;
1575 unsigned print_help = 0;
1577 while (arg_index < argc)
1579 if ( strcmp(argv[arg_index],
"-dir") == 0 )
1582 string directory_number = argv[arg_index++];
1583 directory_for_data += directory_number;
1585 else if ( strcmp(argv[arg_index],
"-outflow") == 0 )
1588 outflow = atoi(argv[arg_index++]);
1590 else if ( strcmp(argv[arg_index],
"-Re") == 0 )
1595 else if ( strcmp(argv[arg_index],
"-solver") == 0 )
1598 solver = atoi(argv[arg_index++]);
1600 else if ( strcmp(argv[arg_index],
"-p_solver") == 0 )
1603 p_solver = atoi(argv[arg_index++]);
1605 else if ( strcmp(argv[arg_index],
"-f_solver") == 0 )
1608 f_solver = atoi(argv[arg_index++]);
1610 else if ( strcmp(argv[arg_index],
"-f_bamg_smoother") == 0 )
1613 f_bamg_smoother = atoi(argv[arg_index++]);
1615 else if ( strcmp(argv[arg_index],
"-f_bamg_damping") == 0 )
1618 f_bamg_damping = atof(argv[arg_index++]);
1620 else if ( strcmp(argv[arg_index],
"-f_bamg_strength") == 0 )
1623 f_bamg_strength = atof(argv[arg_index++]);
1625 else if ( strcmp(argv[arg_index],
"-f_ml_settings") == 0 )
1628 f_ml_settings = atoi(argv[arg_index++]);
1630 else if ( strcmp(argv[arg_index],
"-refine") == 0 )
1633 refinement = atoi(argv[arg_index++]);
1635 else if ( strcmp(argv[arg_index],
"-amplitude") == 0 )
1638 amplitude = atof(argv[arg_index++]);
1640 else if ( strcmp(argv[arg_index],
"-nsteps") == 0 )
1643 nsteps = atoi(argv[arg_index++]);
1645 else if ( strcmp(argv[arg_index],
"-period") == 0 )
1648 period = atof(argv[arg_index++]);
1650 else if ( strcmp(argv[arg_index],
"-validation_run") == 0 )
1653 validation_run=
true;
1655 else if ( strcmp(argv[arg_index],
"-help") == 0 )
1671 oomph_info <<
"-dir <n> Data saved to /RESLTn\n";
1672 oomph_info <<
"-outflow <ID> Outflow type:\n"
1673 <<
" ID=0 flux control\n"
1674 <<
" ID=1 pressure driven with impedance"
1675 <<
" with LSC preconditioner\n"
1676 <<
" ID=2 pressure driven with impedance"
1677 <<
" with block triangluar and LSC preconditioner\n"
1678 <<
" ID=3 prescribed outflow\n"
1680 <<
" otherwise pressure driven flow\n";
1682 oomph_info <<
"-nsteps <value> Number of timesteps\n";
1683 oomph_info <<
"-solver <ID> Linear solver type:\n"
1685 <<
" otherwise SuperLU is used\n";
1686 oomph_info <<
"-p_solver <ID> P matrix solve type:\n"
1687 <<
" ID=0 BoomerAMG\n"
1688 <<
" ID=1 ML SA-AMG\n"
1689 <<
" otherwise SuperLU is used\n";
1690 oomph_info <<
"-f_solver <ID> F matrix solve type\n"
1691 <<
" ID=0 BoomerAMG\n"
1692 <<
" ID=1 ML SA-AMG\n"
1693 <<
" otherwise SuperLU is used\n";
1694 oomph_info <<
"-f_bamg_smoother <ID> BoomerAMG smoother for F matrix\n"
1695 <<
" ID=0 damped Jacobi\n"
1696 <<
" ID=1 Gauss-Seidel\n";
1697 oomph_info <<
"-f_bamg_damping <value> BoomerAMG Jacobi damping for F matrix\n";
1698 oomph_info <<
"-f_bamg_strength <value> BoomerAMG strength paramater F matrix\n";
1699 oomph_info <<
"-f_ml_settings <ID> Settings for ML on F matrix\n"
1701 <<
" otherwise SA\n";
1702 oomph_info <<
"-refine <n> Refines mesh n times\n";
1703 oomph_info <<
"-period <value> Set period to value\n";
1704 oomph_info <<
"-amplitude <value> Set amplitude to value\n";
1705 oomph_info <<
"-validation_run Generate validation data for 1D Womersley\n";
1716 directory_for_data =
"RESLT_flux_control";
1718 else if (outflow==1)
1720 directory_for_data =
"RESLT_impedance_tube";
1722 else if (outflow==2)
1724 directory_for_data =
"RESLT_impedance_tube_with_flux_control";
1739 << directory_for_data <<
"\n";
1750 #ifdef OOMPH_HAS_HYPRE
1751 oomph_info <<
"Using BoomerAMG on P matrix\n";
1754 <<
"Warning: Hypre not available. Using SuperLU on P matrix\n";
1757 else if (p_solver==1)
1759 #ifdef OOMPH_HAS_TRILINOS
1760 oomph_info <<
"Using ML SA-AMG on P matrix\n";
1763 <<
"Warning: Trilinos not available. Using SuperLU on P matrix\n";
1772 #ifdef OOMPH_HAS_HYPRE
1773 oomph_info <<
"Using BoomerAMG on F matrix\n"
1774 <<
"smoother: " << f_bamg_smoother
1775 <<
"\ndamping: " << f_bamg_damping
1776 <<
"\nstrength: " << f_bamg_strength
1780 <<
"Warning: Hypre not available. Using SuperLU on F matrix\n";
1783 else if (f_solver==1)
1785 #ifdef OOMPH_HAS_TRILINOS
1786 oomph_info <<
"Using ML SA-AMG on F matrix ";
1787 if (f_ml_settings==0)
1797 <<
"Warning: Trilinos not available. Using SuperLU on F matrix\n";
1810 oomph_info <<
"Refining mesh " << refinement <<
" times\n";
1814 unsigned ncollapsible=8;
1820 double lcollapsible=1.0;
1823 double limpedance=0.0;
1826 if ((outflow==1) || (outflow==2))
1845 <<
"\nPeriod=" << period <<
"\n";
1849 p_preconditioner_pt=0;
1851 f_preconditioner_pt=0;
1859 lup, lcollapsible, ldown,
ly, limpedance,
1860 amplitude, period, outflow);
1865 for (
unsigned i=0;
i<refinement;
i++)
1875 iterative_solver_pt->
max_iter() = 200;
1876 iterative_solver_pt->
tolerance() = 1.0e-8;
1877 problem.linear_solver_pt() = iterative_solver_pt;
1890 ns_preconditioner_pt =
1896 ns_preconditioner_pt->
1897 enable_accept_non_NavierStokesElementWithDiagonalMassMatrices_elements();
1902 problem.outflow_impedance_master_mesh_pt(),
true);
1906 problem.create_mesh_for_navier_stokes_preconditioner());
1914 ns_preconditioner_pt =
new
1920 ns_preconditioner_pt->
1921 enable_accept_non_NavierStokesElementWithDiagonalMassMatrices_elements();
1926 problem.create_mesh_for_navier_stokes_preconditioner(),
true);
1935 problem.create_mesh_for_navier_stokes_preconditioner(),
true);
1939 #ifdef OOMPH_HAS_HYPRE
1951 #ifdef OOMPH_HAS_TRILINOS
1960 #ifdef OOMPH_HAS_HYPRE
1970 hypre_preconditioner_pt->
amg_damping()=f_bamg_damping;
1971 hypre_preconditioner_pt->
amg_strength()=f_bamg_strength;
1976 #ifdef OOMPH_HAS_TRILINOS
1982 if (f_ml_settings==1)
1996 problem.unsteady_run(directory_for_data, nsteps, validation_run);
2000 delete iterative_solver_pt;
2001 iterative_solver_pt=0;
2002 delete ns_preconditioner_pt;
2003 ns_preconditioner_pt=0;
2006 std::cout <<
"dummy output to suppress compiler warnings: "
2007 << f_bamg_smoother+f_bamg_damping+f_bamg_strength+f_ml_settings
2008 <<
" " << p_preconditioner_pt
2009 <<
" " << f_preconditioner_pt
BiCGSTAB< SparseMatrix< double > > solver
Definition: BiCGSTAB_simple.cpp:5
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Problem class.
Definition: collapsible_channel.cc:236
Definition: fsi_preconditioners.h:51
void enable_doc_time()
Enable documentation of time.
Definition: fsi_preconditioners.h:205
void set_navier_stokes_mesh(Mesh *mesh_pt, const bool &allow_multiple_element_type_in_navier_stokes_mesh=false)
Definition: fsi_preconditioners.h:164
void set_wall_mesh(Mesh *mesh_pt, const bool &allow_multiple_element_type_in_wall_mesh=false)
Definition: fsi_preconditioners.h:179
NavierStokesSchurComplementPreconditioner * navier_stokes_preconditioner_pt() const
Access function to the Navier Stokes preconditioner (inexact solver)
Definition: fsi_preconditioners.h:198
The GMRES method.
Definition: iterative_linear_solver.h:1227
Definition: hypre_solver.h:826
unsigned & amg_simple_smoother()
Access function to AMG_simple_smoother flag.
Definition: hypre_solver.h:983
double & amg_strength()
Access function to AMG_strength.
Definition: hypre_solver.h:1038
double & amg_damping()
Access function to AMG_damping parameter.
Definition: hypre_solver.h:1032
void set_amg_iterations(const unsigned &amg_iterations)
Function to set the number of times to apply BoomerAMG.
Definition: hypre_solver.h:964
void amg_using_simple_smoothing()
Definition: hypre_solver.h:977
void use_BoomerAMG()
Function to select BoomerAMG as the preconditioner.
Definition: hypre_solver.h:958
Preconditioner *& preconditioner_pt()
Access function to preconditioner.
Definition: iterative_linear_solver.h:95
double & tolerance()
Access to convergence tolerance.
Definition: iterative_linear_solver.h:107
unsigned & max_iter()
Access to max. number of iterations.
Definition: iterative_linear_solver.h:113
Definition: navier_stokes_preconditioners.h:607
void set_p_preconditioner(Preconditioner *new_p_preconditioner_pt)
Function to set a new pressure matrix preconditioner (inexact solver)
Definition: navier_stokes_preconditioners.h:745
void set_f_preconditioner(Preconditioner *new_f_preconditioner_pt)
Function to set a new momentum matrix preconditioner (inexact solver)
Definition: navier_stokes_preconditioners.h:769
void set_navier_stokes_mesh(Mesh *mesh_pt, const bool &allow_multiple_element_type_in_navier_stokes_mesh=false)
Definition: navier_stokes_preconditioners.h:732
void enable_doc_time()
Enable documentation of time.
Definition: navier_stokes_preconditioners.h:805
Definition: preconditioner.h:54
Definition: trilinos_preconditioners.h:152
void set_NSSA_default_values()
Broken assignment operator.
Definition: trilinos_preconditioners.h:177
void set_SA_default_values()
Definition: trilinos_preconditioners.h:200
void setup(Time *time_pt)
Create all GeomObjects needed to define the cylinder and the flag.
Definition: turek_flag_non_fsi.cc:277
double ReSt
Womersley number.
Definition: rayleigh_instability.cc:56
double Re
Reynolds number.
Definition: fibre.cc:55
const double ly
Definition: ConstraintElementsUnitTest.cpp:34
const unsigned ny
Definition: ConstraintElementsUnitTest.cpp:31
void set_defaults_for_2D_poisson_problem(HyprePreconditioner *hypre_preconditioner_pt)
Definition: hypre_solver.cc:45
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
Constructor for SteadyAxisymAdvectionDiffusion problem
Definition: steady_axisym_advection_diffusion.cc:213