37 #include "navier_stokes.h"    40 #include "meshes/quarter_circle_sector_mesh.h"    44 using namespace oomph;
    62  void body_force(
const double& time, 
const Vector<double>& x, 
    63                  Vector<double>& result)
    71                       Vector<double>& result)
    87 template<
class ELEMENT>
    95   NavierStokesEquations<2>::NavierStokesBodyForceFctPt body_force_fct_pt);
   109   unsigned num_nod= mesh_pt()->nboundary_node(ibound);
   110   for (
unsigned inod=0;inod<num_nod;inod++)
   113     double x=mesh_pt()->boundary_node_pt(ibound,inod)->x(0);
   114     double y=mesh_pt()->boundary_node_pt(ibound,inod)->x(1);
   123     mesh_pt()->boundary_node_pt(ibound,inod)->set_value(i,-sin(zeta));
   126     mesh_pt()->boundary_node_pt(ibound,inod)->set_value(i,cos(zeta));
   130   unsigned num_bound = mesh_pt()->nboundary();
   131   for(
unsigned ibound=0;ibound<num_bound;ibound++)
   135       unsigned num_nod= mesh_pt()->nboundary_node(ibound);
   136       for (
unsigned inod=0;inod<num_nod;inod++)
   138         for (
unsigned i=0;i<2;i++)
   140           mesh_pt()->boundary_node_pt(ibound,inod)->set_value(i,0.0);
   153    RefineableNavierStokesEquations<2>::
   154     unpin_all_pressure_dofs(mesh_pt()->element_pt());
   157    RefineableNavierStokesEquations<2>::
   158     pin_redundant_nodal_pressures(mesh_pt()->element_pt());
   161    fix_pressure(0,0,0.0);
   165  void doc_solution(DocInfo& doc_info);
   174                    const double &pvalue)
   177    dynamic_cast<ELEMENT*
>(mesh_pt()->element_pt(e))->
   178                           fix_pressure(pdof,pvalue);
   188 template<
class ELEMENT>
   190  NavierStokesEquations<2>::NavierStokesBodyForceFctPt body_force_fct_pt) :
   191  Body_force_fct_pt(body_force_fct_pt)
   198  double a_ellipse=1.0;
   199  double b_ellipse=1.0;
   202  GeomObject* Wall_pt=
new Ellipse(a_ellipse,b_ellipse); 
   206  double xi_hi=2.0*atan(1.0);
   209  double fract_mid=0.5;
   210  Problem::mesh_pt() = 
new    211   RefineableQuarterCircleSectorMesh<ELEMENT>(
   212    Wall_pt,xi_lo,fract_mid,xi_hi);
   215  Z2ErrorEstimator* error_estimator_pt=
new Z2ErrorEstimator;
   216  dynamic_cast<RefineableQuarterCircleSectorMesh<ELEMENT>*
>(
   217   mesh_pt())->spatial_error_estimator_pt()=error_estimator_pt;
   222  unsigned num_bound = mesh_pt()->nboundary();
   223  for(
unsigned ibound=0;ibound<num_bound;ibound++)
   225    unsigned num_nod= mesh_pt()->nboundary_node(ibound);
   226    for (
unsigned inod=0;inod<num_nod;inod++)
   229      for (
unsigned i=0;i<2;i++)
   231        mesh_pt()->boundary_node_pt(ibound,inod)->pin(i); 
   237  unsigned n_element = mesh_pt()->nelement();
   242  for(
unsigned e=0;e<n_element;e++)
   245    ELEMENT* el_pt = 
dynamic_cast<ELEMENT*
>(mesh_pt()->element_pt(e));
   263  RefineableNavierStokesEquations<2>::
   264   pin_redundant_nodal_pressures(mesh_pt()->element_pt());
   270  cout <<
"Number of equations: " << assign_eqn_numbers() << std::endl; 
   279 template<
class ELEMENT>
   291  sprintf(filename,
"%s/soln%i.dat",doc_info.directory().c_str(),
   293  some_file.open(filename);
   294  mesh_pt()->output(some_file,npts);
   310  doc_info.set_directory(
"RESLT2");
   313  unsigned max_adapt=3;
   323   NavierStokesEquations<2>::Gamma[0]=1;
   324   NavierStokesEquations<2>::Gamma[1]=1;
   332   problem.newton_solve(max_adapt);
   352   NavierStokesEquations<2>::Gamma[0]=0;
   353   NavierStokesEquations<2>::Gamma[1]=0;
   361   problem.newton_solve(max_adapt);
 Namespace for physical parameters. 
 
void actions_after_newton_solve()
Update the after solve (empty) 
 
void body_force(const double &time, const Vector< double > &x, Vector< double > &result)
Functional body force. 
 
QuarterCircleDrivenCavityProblem2(NavierStokesEquations< 2 >::NavierStokesBodyForceFctPt body_force_fct_pt)
Constructor. 
 
int main()
Driver for QuarterCircleDrivenCavityProblem2 test problem. 
 
Vector< double > Gravity(2)
Gravity vector. 
 
NavierStokesEquations< 2 >::NavierStokesBodyForceFctPt Body_force_fct_pt
Pointer to body force function. 
 
double Re
Reynolds number. 
 
void actions_before_newton_solve()
Update the problem specs before solve. (Re-)set velocity boundary conditions just to be on the safe s...
 
double Re_invFr
Reynolds/Froude number. 
 
void doc_solution(DocInfo &doc_info)
Doc the solution. 
 
void actions_after_adapt()
After adaptation: Unpin pressure and pin redudant pressure dofs. 
 
void zero_body_force(const double &time, const Vector< double > &x, Vector< double > &result)
Zero functional body force. 
 
void fix_pressure(const unsigned &e, const unsigned &pdof, const double &pvalue)
Fix pressure in element e at pressure dof pdof and set to pvalue. 
 
~QuarterCircleDrivenCavityProblem2()
Destructor: Empty.