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.