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.
1549 string directory_for_data =
"RESLT";
1550 unsigned outflow = 0;
1553 unsigned p_solver=2;
1554 unsigned f_solver=2;
1555 unsigned refinement=0;
1556 unsigned nsteps=200;
1557 double amplitude=1.0e-2;
1559 bool validation_run=
false;
1562 #ifdef OOMPH_HAS_TRILINOS
1563 unsigned f_ml_settings=1;
1567 #ifdef OOMPH_HAS_HYPRE
1568 unsigned f_bamg_smoother=1;
1569 double f_bamg_damping=1.0;
1570 double f_bamg_strength=0.25;
1577 unsigned print_help = 0;
1579 while (arg_index < argc)
1581 if ( strcmp(argv[arg_index],
"-dir") == 0 )
1584 string directory_number = argv[arg_index++];
1585 directory_for_data += directory_number;
1587 else if ( strcmp(argv[arg_index],
"-outflow") == 0 )
1590 outflow = atoi(argv[arg_index++]);
1592 else if ( strcmp(argv[arg_index],
"-Re") == 0 )
1597 else if ( strcmp(argv[arg_index],
"-solver") == 0 )
1600 solver = atoi(argv[arg_index++]);
1602 else if ( strcmp(argv[arg_index],
"-p_solver") == 0 )
1605 p_solver = atoi(argv[arg_index++]);
1607 else if ( strcmp(argv[arg_index],
"-f_solver") == 0 )
1610 f_solver = atoi(argv[arg_index++]);
1612 #ifdef OOMPH_HAS_HYPRE
1613 else if ( strcmp(argv[arg_index],
"-f_bamg_smoother") == 0 )
1616 f_bamg_smoother = atoi(argv[arg_index++]);
1618 else if ( strcmp(argv[arg_index],
"-f_bamg_damping") == 0 )
1621 f_bamg_damping = atof(argv[arg_index++]);
1623 else if ( strcmp(argv[arg_index],
"-f_bamg_strength") == 0 )
1626 f_bamg_strength = atof(argv[arg_index++]);
1629 #ifdef OOMPH_HAS_TRILINOS
1630 else if ( strcmp(argv[arg_index],
"-f_ml_settings") == 0 )
1633 f_ml_settings = atoi(argv[arg_index++]);
1636 else if ( strcmp(argv[arg_index],
"-refine") == 0 )
1639 refinement = atoi(argv[arg_index++]);
1641 else if ( strcmp(argv[arg_index],
"-amplitude") == 0 )
1644 amplitude = atof(argv[arg_index++]);
1646 else if ( strcmp(argv[arg_index],
"-nsteps") == 0 )
1649 nsteps = atoi(argv[arg_index++]);
1651 else if ( strcmp(argv[arg_index],
"-period") == 0 )
1654 period = atof(argv[arg_index++]);
1656 else if ( strcmp(argv[arg_index],
"-validation_run") == 0 )
1659 validation_run=
true;
1661 else if ( strcmp(argv[arg_index],
"-help") == 0 )
1674 if (MPI_Helpers::communicator_pt()->my_rank()==0)
1677 oomph_info <<
"-dir <n> Data saved to /RESLTn\n";
1678 oomph_info <<
"-outflow <ID> Outflow type:\n"
1679 <<
" ID=0 flux control\n"
1680 <<
" ID=1 pressure driven with impedance"
1681 <<
" with LSC preconditioner\n"
1682 <<
" ID=2 pressure driven with impedance"
1683 <<
" with block triangluar and LSC preconditioner\n"
1684 <<
" ID=3 prescribed outflow\n"
1686 <<
" otherwise pressure driven flow\n";
1688 oomph_info <<
"-nsteps <value> Number of timesteps\n";
1689 oomph_info <<
"-solver <ID> Linear solver type:\n"
1691 <<
" otherwise SuperLU is used\n";
1692 oomph_info <<
"-p_solver <ID> P matrix solve type:\n"
1693 <<
" ID=0 BoomerAMG\n"
1694 <<
" ID=1 ML SA-AMG\n"
1695 <<
" otherwise SuperLU is used\n";
1696 oomph_info <<
"-f_solver <ID> F matrix solve type\n"
1697 <<
" ID=0 BoomerAMG\n"
1698 <<
" ID=1 ML SA-AMG\n"
1699 <<
" otherwise SuperLU is used\n";
1700 oomph_info <<
"-f_bamg_smoother <ID> BoomerAMG smoother for F matrix\n"
1701 <<
" ID=0 damped Jacobi\n"
1702 <<
" ID=1 Gauss-Seidel\n";
1703 oomph_info <<
"-f_bamg_damping <value> BoomerAMG Jacobi damping for F matrix\n";
1704 oomph_info <<
"-f_bamg_strength <value> BoomerAMG strength paramater F matrix\n";
1705 oomph_info <<
"-f_ml_settings <ID> Settings for ML on F matrix\n"
1707 <<
" otherwise SA\n";
1708 oomph_info <<
"-refine <n> Refines mesh n times\n";
1709 oomph_info <<
"-period <value> Set period to value\n";
1710 oomph_info <<
"-amplitude <value> Set amplitude to value\n";
1711 oomph_info <<
"-validation_run Generate validation data for 1D Womersley\n";
1725 directory_for_data =
"RESLT_flux_control";
1727 else if (outflow==1)
1729 directory_for_data =
"RESLT_impedance_tube";
1731 else if (outflow==2)
1733 directory_for_data =
"RESLT_impedance_tube_with_flux_control";
1748 << directory_for_data <<
"\n";
1759 #ifdef OOMPH_HAS_HYPRE
1760 oomph_info <<
"Using BoomerAMG on P matrix\n";
1763 <<
"Warning: Hypre not available. Using SuperLU on P matrix\n";
1766 else if (p_solver==1)
1768 #ifdef OOMPH_HAS_TRILINOS
1769 oomph_info <<
"Using ML SA-AMG on P matrix\n";
1772 <<
"Warning: Trilinos not available. Using SuperLU on P matrix\n";
1781 #ifdef OOMPH_HAS_HYPRE
1782 oomph_info <<
"Using BoomerAMG on F matrix\n"
1783 <<
"smoother: " << f_bamg_smoother
1784 <<
"\ndamping: " << f_bamg_damping
1785 <<
"\nstrength: " << f_bamg_strength
1789 <<
"Warning: Hypre not available. Using SuperLU on F matrix\n";
1792 else if (f_solver==1)
1794 #ifdef OOMPH_HAS_TRILINOS
1795 oomph_info <<
"Using ML SA-AMG on F matrix ";
1796 if (f_ml_settings==0)
1806 <<
"Warning: Trilinos not available. Using SuperLU on F matrix\n";
1819 oomph_info <<
"Refining mesh " << refinement <<
" times\n";
1823 unsigned ncollapsible=8;
1829 double lcollapsible=1.0;
1832 double limpedance=0.0;
1835 if ((outflow==1) || (outflow==2))
1854 <<
"\nPeriod=" << period <<
"\n";
1864 lup, lcollapsible, ldown,
ly, limpedance,
1865 amplitude, period, outflow);
1870 for (
unsigned i=0;
i<refinement;
i++)
1880 iterative_solver_pt->
max_iter() = 200;
1881 iterative_solver_pt->
tolerance() = 1.0e-8;
1882 problem.linear_solver_pt() = iterative_solver_pt;
1895 ns_preconditioner_pt =
1900 fsi_preconditioner_pt->
1901 set_wall_mesh(
problem.outflow_impedance_master_mesh_pt(),
true);
1904 fsi_preconditioner_pt->
1905 set_navier_stokes_mesh
1906 (
problem.create_mesh_for_navier_stokes_preconditioner());
1919 (
problem.create_mesh_for_navier_stokes_preconditioner());
1927 problem.create_mesh_for_navier_stokes_preconditioner());
1931 #ifdef OOMPH_HAS_HYPRE
1934 #ifdef OOMPH_HAS_HYPRE
1945 #ifdef OOMPH_HAS_TRILINOS
1948 #ifdef OOMPH_HAS_TRILINOS
1956 #ifdef OOMPH_HAS_HYPRE
1959 #ifdef OOMPH_HAS_HYPRE
1967 hypre_preconditioner_pt->
amg_damping()=f_bamg_damping;
1968 hypre_preconditioner_pt->
amg_strength()=f_bamg_strength;
1974 #ifdef OOMPH_HAS_TRILINOS
1977 #ifdef OOMPH_HAS_TRILINOS
1981 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;
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
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