34 #include "helmholtz.h" 35 #include "time_harmonic_linear_elasticity.h" 36 #include "multi_physics.h" 39 #include "meshes/annular_mesh.h" 40 #include "meshes/triangle_mesh.h" 43 using namespace oomph;
63 : GeomObject(1,2), R_start(r_start), R_end(r_end)
70 BrokenCopy::broken_copy(
"MyStraightLine");
76 BrokenCopy::broken_assign(
"MyStraightLine");
84 void position(
const Vector<double>& zeta, Vector<double>& r)
const 87 r[0] = R_start[0]+(R_end[0]-R_start[0])*zeta[0];
88 r[1] = R_start[1]+(R_end[1]-R_start[1])*zeta[0];
139 Vector<TimeHarmonicIsotropicElasticityTensor*>
E_pt;
156 const Vector<double> &n,
157 Vector<std::complex<double> >&traction)
159 double phi=atan2(x[1],x[0]);
160 double magnitude=exp(-Alpha*pow(phi-0.25*MathematicalConstants::Pi,2));
162 unsigned dim = traction.size();
163 for(
unsigned i=0;i<dim;i++)
165 traction[i] = complex<double>(-magnitude*P*n[i],magnitude*P*n[i]);
182 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
198 void actions_before_adapt();
201 void actions_after_adapt();
209 void complete_problem_setup();
212 void create_solid_traction_elements();
215 void create_fsi_traction_elements();
218 void create_helmholtz_fsi_flux_elements();
221 void delete_face_elements(Mesh*
const & boundary_mesh_pt);
224 void create_helmholtz_ABC_elements();
227 void setup_interaction();
236 Mesh* FSI_traction_mesh_pt;
239 TreeBasedRefineableMeshBase* Helmholtz_mesh_pt;
242 Mesh* Helmholtz_fsi_flux_mesh_pt;
277 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
289 Vector<double> r_start(2);
290 Vector<double> r_end(2);
293 double r_outer = 1.0;
299 double rib_thick=0.05;
302 double rib_depth=0.2;
311 double half_phi_rib=asin(0.5*rib_thick/r_inner);
314 TriangleMeshClosedCurve* closed_curve_pt=0;
317 Vector<TriangleMeshCurveSection*> curvilinear_boundary_pt;
321 Ellipse* outer_boundary_circle_pt =
new Ellipse(r_outer,r_outer);
322 double zeta_start=-0.5*MathematicalConstants::Pi;
323 double zeta_end=0.5*MathematicalConstants::Pi;
324 unsigned nsegment=50;
325 unsigned boundary_id=curvilinear_boundary_pt.size();
326 curvilinear_boundary_pt.push_back(
327 new TriangleMeshCurviLine(
328 outer_boundary_circle_pt,zeta_start,zeta_end,nsegment,boundary_id));
331 Outer_boundary_id=boundary_id;
344 boundary_id=curvilinear_boundary_pt.size();
345 curvilinear_boundary_pt.push_back(
346 new TriangleMeshCurviLine(
347 upper_sym_pt,zeta_start,zeta_end,nsegment,boundary_id));
350 Upper_symmetry_boundary_id=boundary_id;
354 Ellipse* upper_inner_boundary_pt =
355 new Ellipse(r_inner,r_inner);
356 zeta_start=0.5*MathematicalConstants::Pi;
357 zeta_end=half_phi_rib;
359 boundary_id=curvilinear_boundary_pt.size();
360 curvilinear_boundary_pt.push_back(
361 new TriangleMeshCurviLine(
362 upper_inner_boundary_pt,
363 zeta_start,zeta_end,nsegment,boundary_id));
366 Upper_inner_boundary_id=boundary_id;
371 TriangleMeshCurviLine* upper_inward_rib_curviline_pt=0;
372 Vector<TriangleMeshOpenCurve*> inner_boundary_pt;
373 TriangleMeshCurviLine* lower_inward_rib_curviline_pt=0;
374 Vector<double> rib_center(2);
378 r_start[0]=r_inner*cos(half_phi_rib);
379 r_start[1]=r_inner*sin(half_phi_rib);
380 r_end[0]=r_start[0]-rib_depth;
386 boundary_id=curvilinear_boundary_pt.size();
387 upper_inward_rib_curviline_pt=
388 new TriangleMeshCurviLine(
389 upper_inward_rib_pt,zeta_start,zeta_end,nsegment,boundary_id);
390 curvilinear_boundary_pt.push_back(upper_inward_rib_curviline_pt);
397 r_end[1]=r_start[1]+0.5*(t_width-rib_thick);
402 boundary_id=curvilinear_boundary_pt.size();
403 curvilinear_boundary_pt.push_back(
404 new TriangleMeshCurviLine(
405 vertical_upper_t_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
412 r_end[0]=r_start[0]-t_thick;
418 boundary_id=curvilinear_boundary_pt.size();
419 curvilinear_boundary_pt.push_back(
420 new TriangleMeshCurviLine(
421 horizontal_upper_t_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
428 r_end[1]=-r_start[1];
433 boundary_id=curvilinear_boundary_pt.size();
434 curvilinear_boundary_pt.push_back(
435 new TriangleMeshCurviLine(
436 inner_vertical_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
443 r_end[0]=r_start[0]+t_thick;
449 boundary_id=curvilinear_boundary_pt.size();
450 curvilinear_boundary_pt.push_back(
451 new TriangleMeshCurviLine(
452 horizontal_lower_t_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
460 r_end[1]=r_start[1]+0.5*(t_width-rib_thick);
465 boundary_id=curvilinear_boundary_pt.size();
466 curvilinear_boundary_pt.push_back(
467 new TriangleMeshCurviLine(
468 vertical_lower_t_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
473 r_end[0]=r_inner*cos(half_phi_rib);
474 r_end[1]=-r_inner*sin(half_phi_rib);
475 r_start[0]=r_end[0]-rib_depth;
481 boundary_id=curvilinear_boundary_pt.size();
482 lower_inward_rib_curviline_pt=
483 new TriangleMeshCurviLine(
484 lower_inward_rib_pt,zeta_start,zeta_end,nsegment,boundary_id);
485 curvilinear_boundary_pt.push_back(lower_inward_rib_curviline_pt);
490 Ellipse* lower_inner_boundary_circle_pt =
new Ellipse(r_inner,r_inner);
491 zeta_start=-half_phi_rib;
492 zeta_end=-0.5*MathematicalConstants::Pi;
494 boundary_id=curvilinear_boundary_pt.size();
495 curvilinear_boundary_pt.push_back(
496 new TriangleMeshCurviLine(
497 lower_inner_boundary_circle_pt,zeta_start,zeta_end,nsegment,boundary_id));
500 Lower_inner_boundary_id=boundary_id;
512 boundary_id=curvilinear_boundary_pt.size();
513 curvilinear_boundary_pt.push_back(
514 new TriangleMeshCurviLine(
515 lower_sym_pt,zeta_start,zeta_end,nsegment,boundary_id));
518 Lower_symmetry_boundary_id=boundary_id;
523 new TriangleMeshClosedCurve(curvilinear_boundary_pt);
527 Vector<TriangleMeshCurveSection*> internal_polyline_pt(1);
528 r_start[0]=r_inner*cos(half_phi_rib);
529 r_start[1]=r_inner*sin(half_phi_rib);
530 r_end[0]=r_inner*cos(half_phi_rib);
531 r_end[1]=-r_inner*sin(half_phi_rib);
533 Vector<Vector<double> > boundary_vertices(2);
534 boundary_vertices[0]=r_start;
535 boundary_vertices[1]=r_end;
537 TriangleMeshPolyLine* rib_divider_pt=
538 new TriangleMeshPolyLine(boundary_vertices,boundary_id);
539 internal_polyline_pt[0]=rib_divider_pt;
542 Rib_divider_boundary_id=boundary_id;
545 double s_connect=0.0;
546 internal_polyline_pt[0]->connect_initial_vertex_to_curviline(
547 upper_inward_rib_curviline_pt,s_connect);
551 internal_polyline_pt[0]->connect_final_vertex_to_curviline(
552 lower_inward_rib_curviline_pt,s_connect);
555 inner_boundary_pt.push_back(
new TriangleMeshOpenCurve(internal_polyline_pt));
558 rib_center[0]=r_inner-rib_depth;
568 TriangleMeshParameters triangle_mesh_parameters(closed_curve_pt);
571 triangle_mesh_parameters.element_area()=0.2;
574 triangle_mesh_parameters.internal_open_curves_pt()=inner_boundary_pt;
577 triangle_mesh_parameters.add_region_coordinates(1,rib_center);
581 RefineableTriangleMesh<ELASTICITY_ELEMENT>(triangle_mesh_parameters);
600 double azimuthal_fraction=0.5;
601 double phi=MathematicalConstants::Pi/2.0;
602 Helmholtz_mesh_pt =
new 603 RefineableTwoDAnnularMesh<HELMHOLTZ_ELEMENT>
604 (periodic,azimuthal_fraction,
605 ntheta_helmholtz,nr_helmholtz,a,h_thick_helmholtz,phi);
608 Solid_mesh_pt->spatial_error_estimator_pt()=
new Z2ErrorEstimator;
609 Helmholtz_mesh_pt->spatial_error_estimator_pt()=
new Z2ErrorEstimator;
613 Helmholtz_outer_boundary_mesh_pt =
new Mesh;
623 complete_problem_setup();
626 unsigned n_element =Helmholtz_mesh_pt->nelement();
627 for(
unsigned i=0;i<n_element;i++)
630 HELMHOLTZ_ELEMENT *el_pt =
631 dynamic_cast<HELMHOLTZ_ELEMENT*
>(Helmholtz_mesh_pt->element_pt(i));
639 Solid_mesh_pt->output(
"solid_mesh.dat");
640 Helmholtz_mesh_pt->output(
"helmholtz_mesh.dat");
641 Solid_mesh_pt->output_boundaries(
"solid_mesh_boundary.dat");
642 Helmholtz_mesh_pt->output_boundaries(
"helmholtz_mesh_boundary.dat");
648 Solid_traction_mesh_pt=
new Mesh;
649 create_solid_traction_elements();
652 FSI_traction_mesh_pt=
new Mesh;
653 create_fsi_traction_elements();
656 Helmholtz_fsi_flux_mesh_pt=
new Mesh;
657 create_helmholtz_fsi_flux_elements();
660 create_helmholtz_ABC_elements();
667 add_sub_mesh(Solid_mesh_pt);
670 add_sub_mesh(Solid_traction_mesh_pt);
673 add_sub_mesh(FSI_traction_mesh_pt);
676 add_sub_mesh(Helmholtz_mesh_pt);
679 add_sub_mesh(Helmholtz_fsi_flux_mesh_pt);
682 add_sub_mesh(Helmholtz_outer_boundary_mesh_pt);
693 oomph_info <<
"Number of unknowns: " << assign_eqn_numbers() << std::endl;
700 sprintf(filename,
"%s/trace.dat",Doc_info.directory().c_str());
701 Trace_file.open(filename);
710 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
715 delete_face_elements(Solid_traction_mesh_pt);
718 delete_face_elements(FSI_traction_mesh_pt);
721 delete_face_elements(Helmholtz_fsi_flux_mesh_pt);
724 delete_face_elements(Helmholtz_outer_boundary_mesh_pt);
727 rebuild_global_mesh();
736 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
741 complete_problem_setup();
744 create_solid_traction_elements();
748 create_fsi_traction_elements();
751 create_helmholtz_fsi_flux_elements();
755 create_helmholtz_ABC_elements();
761 rebuild_global_mesh();
772 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
786 unsigned n_node = Solid_mesh_pt->nboundary_node(Upper_symmetry_boundary_id);
787 for(
unsigned i=0;i<n_node;i++)
789 Node* nod_pt=Solid_mesh_pt->boundary_node_pt(Upper_symmetry_boundary_id,i);
793 nod_pt->set_value(0,0.0);
797 nod_pt->set_value(2,0.0);
803 unsigned n_node = Solid_mesh_pt->nboundary_node(Lower_symmetry_boundary_id);
804 for(
unsigned i=0;i<n_node;i++)
806 Node* nod_pt=Solid_mesh_pt->boundary_node_pt(Lower_symmetry_boundary_id,i);
810 nod_pt->set_value(0,0.0);
814 nod_pt->set_value(2,0.0);
822 unsigned nreg=Solid_mesh_pt->nregion();
823 for (
unsigned r=0;r<nreg;r++)
825 unsigned nel=Solid_mesh_pt->nregion_element(r);
826 for (
unsigned e=0;e<nel;e++)
829 ELASTICITY_ELEMENT *el_pt =
830 dynamic_cast<ELASTICITY_ELEMENT*
>(Solid_mesh_pt->
831 region_element_pt(r,e));
845 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
850 unsigned n_element = boundary_mesh_pt->nelement();
853 for(
unsigned e=0;e<n_element;e++)
856 delete boundary_mesh_pt->element_pt(e);
860 boundary_mesh_pt->flush_element_and_node_storage();
869 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
876 for (
unsigned i=0;i<nb;i++)
881 b=Upper_inner_boundary_id;
885 b=Lower_inner_boundary_id;
889 b=Rib_divider_boundary_id;
897 unsigned n_element = Solid_mesh_pt->nboundary_element_in_region(b,r);
900 for(
unsigned e=0;e<n_element;e++)
903 ELASTICITY_ELEMENT* bulk_elem_pt =
dynamic_cast<ELASTICITY_ELEMENT*
>(
904 Solid_mesh_pt->boundary_element_in_region_pt(b,r,e));
907 int face_index = Solid_mesh_pt->face_index_at_boundary_in_region(b,r,e);
910 TimeHarmonicLinearElasticityTractionElement<ELASTICITY_ELEMENT>* el_pt=
911 new TimeHarmonicLinearElasticityTractionElement<ELASTICITY_ELEMENT>
912 (bulk_elem_pt,face_index);
915 Solid_traction_mesh_pt->add_element_pt(el_pt);
919 el_pt->set_boundary_number_in_bulk_mesh(b);
933 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
938 unsigned b=Outer_boundary_id;
941 unsigned n_element = Solid_mesh_pt->nboundary_element(b);
944 for(
unsigned e=0;e<n_element;e++)
947 ELASTICITY_ELEMENT* bulk_elem_pt =
dynamic_cast<ELASTICITY_ELEMENT*
>(
948 Solid_mesh_pt->boundary_element_pt(b,e));
951 int face_index = Solid_mesh_pt->face_index_at_boundary(b,e);
954 TimeHarmonicLinElastLoadedByHelmholtzPressureBCElement
955 <ELASTICITY_ELEMENT,HELMHOLTZ_ELEMENT>* el_pt=
956 new TimeHarmonicLinElastLoadedByHelmholtzPressureBCElement
957 <ELASTICITY_ELEMENT,HELMHOLTZ_ELEMENT>(bulk_elem_pt,
960 FSI_traction_mesh_pt->add_element_pt(el_pt);
964 el_pt->set_boundary_number_in_bulk_mesh(b);
979 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
988 unsigned n_element = Helmholtz_mesh_pt->nboundary_element(b);
991 for(
unsigned e=0;e<n_element;e++)
994 HELMHOLTZ_ELEMENT* bulk_elem_pt =
dynamic_cast<HELMHOLTZ_ELEMENT*
>(
995 Helmholtz_mesh_pt->boundary_element_pt(b,e));
998 int face_index = Helmholtz_mesh_pt->face_index_at_boundary(b,e);
1001 HelmholtzFluxFromNormalDisplacementBCElement
1002 <HELMHOLTZ_ELEMENT,ELASTICITY_ELEMENT>* el_pt=
1003 new HelmholtzFluxFromNormalDisplacementBCElement
1004 <HELMHOLTZ_ELEMENT,ELASTICITY_ELEMENT>(bulk_elem_pt,
1008 Helmholtz_fsi_flux_mesh_pt->add_element_pt(el_pt);
1012 el_pt->set_boundary_number_in_bulk_mesh(b);
1023 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
1031 unsigned n_element = Helmholtz_mesh_pt->nboundary_element(b);
1034 for(
unsigned e=0;e<n_element;e++)
1037 HELMHOLTZ_ELEMENT* bulk_elem_pt =
dynamic_cast<HELMHOLTZ_ELEMENT*
>(
1038 Helmholtz_mesh_pt->boundary_element_pt(b,e));
1041 int face_index = Helmholtz_mesh_pt->face_index_at_boundary(b,e);
1044 HelmholtzAbsorbingBCElement<HELMHOLTZ_ELEMENT>* flux_element_pt =
new 1045 HelmholtzAbsorbingBCElement<HELMHOLTZ_ELEMENT>(bulk_elem_pt,face_index);
1054 Helmholtz_outer_boundary_mesh_pt->add_element_pt(flux_element_pt);
1064 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
1070 unsigned boundary_in_helmholtz_mesh=0;
1074 the_file.open(
"boundary_coordinate_hh.dat");
1075 Helmholtz_mesh_pt->Mesh::doc_boundary_coordinates<HELMHOLTZ_ELEMENT>
1076 (boundary_in_helmholtz_mesh, the_file);
1079 Multi_domain_functions::setup_bulk_elements_adjacent_to_face_mesh
1080 <HELMHOLTZ_ELEMENT,2>
1081 (
this,boundary_in_helmholtz_mesh,Helmholtz_mesh_pt,FSI_traction_mesh_pt);
1084 unsigned boundary_in_solid_mesh=Outer_boundary_id;
1087 the_file.open(
"boundary_coordinate_solid.dat");
1088 Solid_mesh_pt->Mesh::template doc_boundary_coordinates<ELASTICITY_ELEMENT>
1089 (boundary_in_solid_mesh, the_file);
1092 Multi_domain_functions::setup_bulk_elements_adjacent_to_face_mesh
1093 <ELASTICITY_ELEMENT,2>(
1094 this,boundary_in_solid_mesh,Solid_mesh_pt,Helmholtz_fsi_flux_mesh_pt);
1102 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
1106 ofstream some_file,some_file2;
1114 sprintf(filename,
"%s/power%i.dat",Doc_info.directory().c_str(),
1116 some_file.open(filename);
1120 unsigned nn_element=Helmholtz_outer_boundary_mesh_pt->nelement();
1121 for(
unsigned e=0;e<nn_element;e++)
1123 HelmholtzBCElementBase<HELMHOLTZ_ELEMENT> *el_pt =
1124 dynamic_cast<HelmholtzBCElementBase<HELMHOLTZ_ELEMENT>*
>(
1125 Helmholtz_outer_boundary_mesh_pt->element_pt(e));
1126 power += el_pt->global_power_contribution(some_file);
1129 oomph_info <<
"Step: " << Doc_info.number()
1132 <<
" density ratio (annulus) =" 1134 <<
" density ratio (rib) =" 1138 <<
" Total radiated power " << power <<
"\n" 1152 std::ostringstream case_string;
1153 case_string <<
"TEXT X=10,Y=90, T=\"Q=" 1155 <<
", k<sup>2</sup> = " 1157 <<
", density ratio = " 1168 sprintf(filename,
"%s/elast_soln%i.dat",Doc_info.directory().c_str(),
1170 some_file.open(filename);
1171 Solid_mesh_pt->output(some_file,n_plot);
1176 sprintf(filename,
"%s/solid_traction_soln%i.dat",Doc_info.directory().c_str(),
1178 some_file.open(filename);
1179 Solid_traction_mesh_pt->output(some_file,n_plot);
1184 sprintf(filename,
"%s/traction_soln%i.dat",Doc_info.directory().c_str(),
1186 some_file.open(filename);
1187 FSI_traction_mesh_pt->output(some_file,n_plot);
1193 sprintf(filename,
"%s/flux_bc_soln%i.dat",Doc_info.directory().c_str(),
1195 some_file.open(filename);
1196 Helmholtz_fsi_flux_mesh_pt->output(some_file,n_plot);
1202 sprintf(filename,
"%s/helmholtz_soln%i.dat",Doc_info.directory().c_str(),
1204 some_file.open(filename);
1205 Helmholtz_mesh_pt->output(some_file,n_plot);
1206 some_file << case_string.str();
1211 unsigned nreg=Solid_mesh_pt->nregion();
1212 for (
unsigned r=0;r<nreg;r++)
1214 sprintf(filename,
"%s/region%i_%i.dat",Doc_info.directory().c_str(),
1215 r,Doc_info.number());
1216 some_file.open(filename);
1217 unsigned nel=Solid_mesh_pt->nregion_element(r);
1218 for (
unsigned e=0;e<nel;e++)
1220 FiniteElement* el_pt=Solid_mesh_pt->region_element_pt(r,e);
1221 el_pt->output(some_file,n_plot);
1230 for (
unsigned i=0;i<nstep;i++)
1232 sprintf(filename,
"%s/helmholtz_animation%i_frame%i.dat",
1233 Doc_info.directory().c_str(),
1234 Doc_info.number(),i);
1235 some_file.open(filename);
1236 double phi=2.0*MathematicalConstants::Pi*double(i)/double(nstep-1);
1237 unsigned nelem=Helmholtz_mesh_pt->nelement();
1238 for (
unsigned e=0;e<nelem;e++)
1240 HELMHOLTZ_ELEMENT* el_pt=
dynamic_cast<HELMHOLTZ_ELEMENT*
>(
1241 Helmholtz_mesh_pt->element_pt(e));
1242 el_pt->output_real(some_file,phi,n_plot);
1248 << Doc_info.number() <<
")\n";
1251 Doc_info.number()++;
1264 CommandLineArgs::setup(argc,argv);
1270 CommandLineArgs::specify_command_line_flag(
"--dir",
1274 CommandLineArgs::specify_command_line_flag(
"--alpha",
1278 CommandLineArgs::specify_command_line_flag(
"--el_multiplier",
1282 CommandLineArgs::specify_command_line_flag(
"--outer_radius",
1286 CommandLineArgs::specify_command_line_flag(
"--validation");
1289 unsigned max_adapt=3;
1290 CommandLineArgs::specify_command_line_flag(
"--max_adapt",&max_adapt);
1293 CommandLineArgs::parse_and_assign();
1296 CommandLineArgs::doc_specified_flags();
1300 <TTimeHarmonicLinearElasticityElement<2,3> >,
1301 RefineableQHelmholtzElement<2,3> > problem;
1312 if (CommandLineArgs::command_line_flag_has_been_set(
"--validation"))
1317 for(
unsigned i=0;i<nstep;i++)
1321 problem.newton_solve(max_adapt);
1324 problem.doc_solution();
double Omega_sq
Non-dim square of frequency for solid – dependent variable!
CoatedDiskProblem()
Constructor:
Vector< double > Omega_sq(2, 0.0)
Square of non-dim frequency for the two regions – dependent variable!
RefineableTriangleMesh< ELASTICITY_ELEMENT > * Solid_mesh_pt
Pointer to refineable solid mesh.
double Outer_radius
Radius of outer boundary of Helmholtz domain.
int main(int argc, char **argv)
Driver for acoustic fsi problem.
Vector< double > Density_ratio(2, 0.1)
Density ratio for the two regions: solid to fluid.
void update_parameter_values()
Function to update dependent parameter values.
double Density_ratio
Density ratio: solid to fluid.
unsigned Upper_symmetry_boundary_id
Boundary ID of upper symmetry boundary.
void doc_solution()
Doc the solution.
void create_solid_traction_elements()
Create solid traction elements.
void operator=(const MyStraightLine &)
Broken assignment operator.
void actions_before_adapt()
Actions before adapt: Wipe the mesh of traction elements.
Vector< TimeHarmonicIsotropicElasticityTensor * > E_pt
The elasticity tensors for the two regions.
unsigned Upper_inner_boundary_id
Boundary ID of upper inner boundary.
Vector< double > R_start
Start point of line.
MyStraightLine(const Vector< double > &r_start, const Vector< double > &r_end)
Constructor: Pass start and end points.
double K_squared
Square of wavenumber for the Helmholtz equation.
~MyStraightLine()
Destructor: Empty.
void create_helmholtz_fsi_flux_elements()
Create Helmholtz FSI flux elements.
void pressure_load(const Vector< double > &x, const Vector< double > &n, Vector< std::complex< double > > &traction)
Pressure load (real and imag part)
void setup_interaction()
Setup interaction.
Mesh * Solid_traction_mesh_pt
Pointer to mesh of solid traction elements.
string Directory
Output directory.
unsigned Lower_inner_boundary_id
Boundary ID of lower inner boundary.
unsigned Rib_divider_boundary_id
unsigned El_multiplier
Multiplier for number of elements.
double H_coating
Non-dim thickness of elastic coating.
Vector< double > R_end
End point of line.
Straight 1D line in 2D space.
void delete_face_elements(Mesh *const &boundary_mesh_pt)
Delete (face) elements in specified mesh.
double Nu
Poisson's ratio.
void create_helmholtz_ABC_elements()
Create ABC face elements.
void actions_after_adapt()
Actions after adapt: Rebuild the mesh of traction elements.
unsigned ABC_order
Order of absorbing/appproximate boundary condition.
MyStraightLine(const MyStraightLine &dummy)
Broken copy constructor.
void actions_before_newton_solve()
Update function (empty)
double Alpha
Peakiness parameter for pressure load.
void actions_after_newton_solve()
Update function (empty)
double P
Uniform pressure.
unsigned Outer_boundary_id
Boundary ID of outer boundary.
void complete_problem_setup()
void create_fsi_traction_elements()
Create FSI traction elements.
Mesh * Helmholtz_outer_boundary_mesh_pt
Pointer to mesh containing the ABC elements.
unsigned Lower_symmetry_boundary_id
Boundary ID of lower symmetry boundary.
void position(const Vector< double > &zeta, Vector< double > &r) const
Position Vector at Lagrangian coordinate zeta.