30 #include "helmholtz.h"
31 #include "time_harmonic_linear_elasticity.h"
32 #include "multi_physics.h"
35 #include "meshes/annular_mesh.h"
36 #include "meshes/triangle_mesh.h"
39 using namespace oomph;
59 : GeomObject(1,2), R_start(r_start), R_end(r_end)
66 BrokenCopy::broken_copy(
"MyStraightLine");
72 BrokenCopy::broken_assign(
"MyStraightLine");
80 void position(
const Vector<double>& zeta, Vector<double>& r)
const
83 r[0] = R_start[0]+(R_end[0]-R_start[0])*zeta[0];
84 r[1] = R_start[1]+(R_end[1]-R_start[1])*zeta[0];
135 Vector<TimeHarmonicIsotropicElasticityTensor*>
E_pt;
152 const Vector<double> &n,
153 Vector<std::complex<double> >&traction)
155 double phi=atan2(x[1],x[0]);
156 double magnitude=exp(-
Alpha*pow(phi-0.25*MathematicalConstants::Pi,2));
158 unsigned dim = traction.size();
159 for(
unsigned i=0;i<dim;i++)
161 traction[i] = complex<double>(-magnitude*
P*n[i],magnitude*
P*n[i]);
178 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
205 void complete_problem_setup();
208 void create_solid_traction_elements();
220 void create_helmholtz_ABC_elements();
232 Mesh* FSI_traction_mesh_pt;
235 TreeBasedRefineableMeshBase* Helmholtz_mesh_pt;
238 Mesh* Helmholtz_fsi_flux_mesh_pt;
273 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
285 Vector<double> r_start(2);
286 Vector<double> r_end(2);
289 double r_outer = 1.0;
295 double rib_thick=0.05;
298 double rib_depth=0.2;
307 double half_phi_rib=asin(0.5*rib_thick/r_inner);
310 TriangleMeshClosedCurve* closed_curve_pt=0;
313 Vector<TriangleMeshCurveSection*> curvilinear_boundary_pt;
317 Ellipse* outer_boundary_circle_pt =
new Ellipse(r_outer,r_outer);
318 double zeta_start=-0.5*MathematicalConstants::Pi;
319 double zeta_end=0.5*MathematicalConstants::Pi;
320 unsigned nsegment=50;
321 unsigned boundary_id=curvilinear_boundary_pt.size();
322 curvilinear_boundary_pt.push_back(
323 new TriangleMeshCurviLine(
324 outer_boundary_circle_pt,zeta_start,zeta_end,nsegment,boundary_id));
327 Outer_boundary_id=boundary_id;
340 boundary_id=curvilinear_boundary_pt.size();
341 curvilinear_boundary_pt.push_back(
342 new TriangleMeshCurviLine(
343 upper_sym_pt,zeta_start,zeta_end,nsegment,boundary_id));
346 Upper_symmetry_boundary_id=boundary_id;
350 Ellipse* upper_inner_boundary_pt =
351 new Ellipse(r_inner,r_inner);
352 zeta_start=0.5*MathematicalConstants::Pi;
353 zeta_end=half_phi_rib;
355 boundary_id=curvilinear_boundary_pt.size();
356 curvilinear_boundary_pt.push_back(
357 new TriangleMeshCurviLine(
358 upper_inner_boundary_pt,
359 zeta_start,zeta_end,nsegment,boundary_id));
362 Upper_inner_boundary_id=boundary_id;
367 TriangleMeshCurviLine* upper_inward_rib_curviline_pt=0;
368 Vector<TriangleMeshOpenCurve*> inner_boundary_pt;
369 TriangleMeshCurviLine* lower_inward_rib_curviline_pt=0;
370 Vector<double> rib_center(2);
374 r_start[0]=r_inner*cos(half_phi_rib);
375 r_start[1]=r_inner*sin(half_phi_rib);
376 r_end[0]=r_start[0]-rib_depth;
382 boundary_id=curvilinear_boundary_pt.size();
383 upper_inward_rib_curviline_pt=
384 new TriangleMeshCurviLine(
385 upper_inward_rib_pt,zeta_start,zeta_end,nsegment,boundary_id);
386 curvilinear_boundary_pt.push_back(upper_inward_rib_curviline_pt);
393 r_end[1]=r_start[1]+0.5*(t_width-rib_thick);
398 boundary_id=curvilinear_boundary_pt.size();
399 curvilinear_boundary_pt.push_back(
400 new TriangleMeshCurviLine(
401 vertical_upper_t_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
408 r_end[0]=r_start[0]-t_thick;
414 boundary_id=curvilinear_boundary_pt.size();
415 curvilinear_boundary_pt.push_back(
416 new TriangleMeshCurviLine(
417 horizontal_upper_t_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
424 r_end[1]=-r_start[1];
429 boundary_id=curvilinear_boundary_pt.size();
430 curvilinear_boundary_pt.push_back(
431 new TriangleMeshCurviLine(
432 inner_vertical_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
439 r_end[0]=r_start[0]+t_thick;
445 boundary_id=curvilinear_boundary_pt.size();
446 curvilinear_boundary_pt.push_back(
447 new TriangleMeshCurviLine(
448 horizontal_lower_t_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
456 r_end[1]=r_start[1]+0.5*(t_width-rib_thick);
461 boundary_id=curvilinear_boundary_pt.size();
462 curvilinear_boundary_pt.push_back(
463 new TriangleMeshCurviLine(
464 vertical_lower_t_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
469 r_end[0]=r_inner*cos(half_phi_rib);
470 r_end[1]=-r_inner*sin(half_phi_rib);
471 r_start[0]=r_end[0]-rib_depth;
477 boundary_id=curvilinear_boundary_pt.size();
478 lower_inward_rib_curviline_pt=
479 new TriangleMeshCurviLine(
480 lower_inward_rib_pt,zeta_start,zeta_end,nsegment,boundary_id);
481 curvilinear_boundary_pt.push_back(lower_inward_rib_curviline_pt);
486 Ellipse* lower_inner_boundary_circle_pt =
new Ellipse(r_inner,r_inner);
487 zeta_start=-half_phi_rib;
488 zeta_end=-0.5*MathematicalConstants::Pi;
490 boundary_id=curvilinear_boundary_pt.size();
491 curvilinear_boundary_pt.push_back(
492 new TriangleMeshCurviLine(
493 lower_inner_boundary_circle_pt,zeta_start,zeta_end,nsegment,boundary_id));
496 Lower_inner_boundary_id=boundary_id;
508 boundary_id=curvilinear_boundary_pt.size();
509 curvilinear_boundary_pt.push_back(
510 new TriangleMeshCurviLine(
511 lower_sym_pt,zeta_start,zeta_end,nsegment,boundary_id));
514 Lower_symmetry_boundary_id=boundary_id;
519 new TriangleMeshClosedCurve(curvilinear_boundary_pt);
523 Vector<TriangleMeshCurveSection*> internal_polyline_pt(1);
524 r_start[0]=r_inner*cos(half_phi_rib);
525 r_start[1]=r_inner*sin(half_phi_rib);
526 r_end[0]=r_inner*cos(half_phi_rib);
527 r_end[1]=-r_inner*sin(half_phi_rib);
529 Vector<Vector<double> > boundary_vertices(2);
530 boundary_vertices[0]=r_start;
531 boundary_vertices[1]=r_end;
533 TriangleMeshPolyLine* rib_divider_pt=
534 new TriangleMeshPolyLine(boundary_vertices,boundary_id);
535 internal_polyline_pt[0]=rib_divider_pt;
538 Rib_divider_boundary_id=boundary_id;
541 double s_connect=0.0;
542 internal_polyline_pt[0]->connect_initial_vertex_to_curviline(
543 upper_inward_rib_curviline_pt,s_connect);
547 internal_polyline_pt[0]->connect_final_vertex_to_curviline(
548 lower_inward_rib_curviline_pt,s_connect);
551 inner_boundary_pt.push_back(
new TriangleMeshOpenCurve(internal_polyline_pt));
554 rib_center[0]=r_inner-rib_depth;
564 TriangleMeshParameters triangle_mesh_parameters(closed_curve_pt);
567 triangle_mesh_parameters.element_area()=0.2;
570 triangle_mesh_parameters.internal_open_curves_pt()=inner_boundary_pt;
573 triangle_mesh_parameters.add_region_coordinates(1,rib_center);
577 RefineableTriangleMesh<ELASTICITY_ELEMENT>(triangle_mesh_parameters);
596 double azimuthal_fraction=0.5;
597 double phi=MathematicalConstants::Pi/2.0;
598 Helmholtz_mesh_pt =
new
599 RefineableTwoDAnnularMesh<HELMHOLTZ_ELEMENT>
600 (periodic,azimuthal_fraction,
601 ntheta_helmholtz,nr_helmholtz,a,h_thick_helmholtz,phi);
604 Solid_mesh_pt->spatial_error_estimator_pt()=
new Z2ErrorEstimator;
605 Helmholtz_mesh_pt->spatial_error_estimator_pt()=
new Z2ErrorEstimator;
609 Helmholtz_outer_boundary_mesh_pt =
new Mesh;
619 complete_problem_setup();
622 unsigned n_element =Helmholtz_mesh_pt->nelement();
623 for(
unsigned i=0;i<n_element;i++)
626 HELMHOLTZ_ELEMENT *el_pt =
627 dynamic_cast<HELMHOLTZ_ELEMENT*
>(Helmholtz_mesh_pt->element_pt(i));
635 Solid_mesh_pt->output(
"solid_mesh.dat");
636 Helmholtz_mesh_pt->output(
"helmholtz_mesh.dat");
637 Solid_mesh_pt->output_boundaries(
"solid_mesh_boundary.dat");
638 Helmholtz_mesh_pt->output_boundaries(
"helmholtz_mesh_boundary.dat");
644 Solid_traction_mesh_pt=
new Mesh;
645 create_solid_traction_elements();
648 FSI_traction_mesh_pt=
new Mesh;
649 create_fsi_traction_elements();
652 Helmholtz_fsi_flux_mesh_pt=
new Mesh;
653 create_helmholtz_fsi_flux_elements();
656 create_helmholtz_ABC_elements();
663 add_sub_mesh(Solid_mesh_pt);
666 add_sub_mesh(Solid_traction_mesh_pt);
669 add_sub_mesh(FSI_traction_mesh_pt);
672 add_sub_mesh(Helmholtz_mesh_pt);
675 add_sub_mesh(Helmholtz_fsi_flux_mesh_pt);
678 add_sub_mesh(Helmholtz_outer_boundary_mesh_pt);
689 oomph_info <<
"Number of unknowns: " << assign_eqn_numbers() << std::endl;
696 sprintf(filename,
"%s/trace.dat",Doc_info.directory().c_str());
697 Trace_file.open(filename);
706 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
711 delete_face_elements(Solid_traction_mesh_pt);
714 delete_face_elements(FSI_traction_mesh_pt);
717 delete_face_elements(Helmholtz_fsi_flux_mesh_pt);
720 delete_face_elements(Helmholtz_outer_boundary_mesh_pt);
723 rebuild_global_mesh();
732 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
737 complete_problem_setup();
740 create_solid_traction_elements();
744 create_fsi_traction_elements();
747 create_helmholtz_fsi_flux_elements();
751 create_helmholtz_ABC_elements();
757 rebuild_global_mesh();
768 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
782 unsigned n_node = Solid_mesh_pt->nboundary_node(Upper_symmetry_boundary_id);
783 for(
unsigned i=0;i<n_node;i++)
785 Node* nod_pt=Solid_mesh_pt->boundary_node_pt(Upper_symmetry_boundary_id,i);
789 nod_pt->set_value(0,0.0);
793 nod_pt->set_value(2,0.0);
799 unsigned n_node = Solid_mesh_pt->nboundary_node(Lower_symmetry_boundary_id);
800 for(
unsigned i=0;i<n_node;i++)
802 Node* nod_pt=Solid_mesh_pt->boundary_node_pt(Lower_symmetry_boundary_id,i);
806 nod_pt->set_value(0,0.0);
810 nod_pt->set_value(2,0.0);
818 unsigned nreg=Solid_mesh_pt->nregion();
819 for (
unsigned r=0;r<nreg;r++)
821 unsigned nel=Solid_mesh_pt->nregion_element(r);
822 for (
unsigned e=0;e<nel;e++)
825 ELASTICITY_ELEMENT *el_pt =
826 dynamic_cast<ELASTICITY_ELEMENT*
>(Solid_mesh_pt->
827 region_element_pt(r,e));
841 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
846 unsigned n_element = boundary_mesh_pt->nelement();
849 for(
unsigned e=0;e<n_element;e++)
852 delete boundary_mesh_pt->element_pt(e);
856 boundary_mesh_pt->flush_element_and_node_storage();
865 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
872 for (
unsigned i=0;i<nb;i++)
877 b=Upper_inner_boundary_id;
881 b=Lower_inner_boundary_id;
885 b=Rib_divider_boundary_id;
893 unsigned n_element = Solid_mesh_pt->nboundary_element_in_region(b,r);
896 for(
unsigned e=0;e<n_element;e++)
899 ELASTICITY_ELEMENT* bulk_elem_pt =
dynamic_cast<ELASTICITY_ELEMENT*
>(
900 Solid_mesh_pt->boundary_element_in_region_pt(b,r,e));
903 int face_index = Solid_mesh_pt->face_index_at_boundary_in_region(b,r,e);
906 TimeHarmonicLinearElasticityTractionElement<ELASTICITY_ELEMENT>* el_pt=
907 new TimeHarmonicLinearElasticityTractionElement<ELASTICITY_ELEMENT>
908 (bulk_elem_pt,face_index);
911 Solid_traction_mesh_pt->add_element_pt(el_pt);
915 el_pt->set_boundary_number_in_bulk_mesh(b);
929 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
934 unsigned b=Outer_boundary_id;
937 unsigned n_element = Solid_mesh_pt->nboundary_element(b);
940 for(
unsigned e=0;e<n_element;e++)
943 ELASTICITY_ELEMENT* bulk_elem_pt =
dynamic_cast<ELASTICITY_ELEMENT*
>(
944 Solid_mesh_pt->boundary_element_pt(b,e));
947 int face_index = Solid_mesh_pt->face_index_at_boundary(b,e);
950 TimeHarmonicLinElastLoadedByHelmholtzPressureBCElement
951 <ELASTICITY_ELEMENT,HELMHOLTZ_ELEMENT>* el_pt=
952 new TimeHarmonicLinElastLoadedByHelmholtzPressureBCElement
953 <ELASTICITY_ELEMENT,HELMHOLTZ_ELEMENT>(bulk_elem_pt,
956 FSI_traction_mesh_pt->add_element_pt(el_pt);
960 el_pt->set_boundary_number_in_bulk_mesh(b);
975 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
984 unsigned n_element = Helmholtz_mesh_pt->nboundary_element(b);
987 for(
unsigned e=0;e<n_element;e++)
990 HELMHOLTZ_ELEMENT* bulk_elem_pt =
dynamic_cast<HELMHOLTZ_ELEMENT*
>(
991 Helmholtz_mesh_pt->boundary_element_pt(b,e));
994 int face_index = Helmholtz_mesh_pt->face_index_at_boundary(b,e);
997 HelmholtzFluxFromNormalDisplacementBCElement
998 <HELMHOLTZ_ELEMENT,ELASTICITY_ELEMENT>* el_pt=
999 new HelmholtzFluxFromNormalDisplacementBCElement
1000 <HELMHOLTZ_ELEMENT,ELASTICITY_ELEMENT>(bulk_elem_pt,
1004 Helmholtz_fsi_flux_mesh_pt->add_element_pt(el_pt);
1008 el_pt->set_boundary_number_in_bulk_mesh(b);
1019 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
1027 unsigned n_element = Helmholtz_mesh_pt->nboundary_element(b);
1030 for(
unsigned e=0;e<n_element;e++)
1033 HELMHOLTZ_ELEMENT* bulk_elem_pt =
dynamic_cast<HELMHOLTZ_ELEMENT*
>(
1034 Helmholtz_mesh_pt->boundary_element_pt(b,e));
1037 int face_index = Helmholtz_mesh_pt->face_index_at_boundary(b,e);
1040 HelmholtzAbsorbingBCElement<HELMHOLTZ_ELEMENT>* flux_element_pt =
new
1041 HelmholtzAbsorbingBCElement<HELMHOLTZ_ELEMENT>(bulk_elem_pt,face_index);
1050 Helmholtz_outer_boundary_mesh_pt->add_element_pt(flux_element_pt);
1060 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
1066 unsigned boundary_in_helmholtz_mesh=0;
1070 the_file.open(
"boundary_coordinate_hh.dat");
1071 Helmholtz_mesh_pt->Mesh::doc_boundary_coordinates<HELMHOLTZ_ELEMENT>
1072 (boundary_in_helmholtz_mesh, the_file);
1075 Multi_domain_functions::setup_bulk_elements_adjacent_to_face_mesh
1076 <HELMHOLTZ_ELEMENT,2>
1077 (
this,boundary_in_helmholtz_mesh,Helmholtz_mesh_pt,FSI_traction_mesh_pt);
1080 unsigned boundary_in_solid_mesh=Outer_boundary_id;
1083 the_file.open(
"boundary_coordinate_solid.dat");
1084 Solid_mesh_pt->Mesh::template doc_boundary_coordinates<ELASTICITY_ELEMENT>
1085 (boundary_in_solid_mesh, the_file);
1088 Multi_domain_functions::setup_bulk_elements_adjacent_to_face_mesh
1089 <ELASTICITY_ELEMENT,2>(
1090 this,boundary_in_solid_mesh,Solid_mesh_pt,Helmholtz_fsi_flux_mesh_pt);
1098 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
1102 ofstream some_file,some_file2;
1110 sprintf(filename,
"%s/power%i.dat",Doc_info.directory().c_str(),
1112 some_file.open(filename);
1116 unsigned nn_element=Helmholtz_outer_boundary_mesh_pt->nelement();
1117 for(
unsigned e=0;e<nn_element;e++)
1119 HelmholtzBCElementBase<HELMHOLTZ_ELEMENT> *el_pt =
1120 dynamic_cast<HelmholtzBCElementBase<HELMHOLTZ_ELEMENT>*
>(
1121 Helmholtz_outer_boundary_mesh_pt->element_pt(e));
1122 power += el_pt->global_power_contribution(some_file);
1125 oomph_info <<
"Step: " << Doc_info.number()
1128 <<
" density ratio (annulus) ="
1130 <<
" density ratio (rib) ="
1134 <<
" Total radiated power " << power <<
"\n"
1148 std::ostringstream case_string;
1149 case_string <<
"TEXT X=10,Y=90, T=\"Q="
1151 <<
", k<sup>2</sup> = "
1153 <<
", density ratio = "
1164 sprintf(filename,
"%s/elast_soln%i.dat",Doc_info.directory().c_str(),
1166 some_file.open(filename);
1167 Solid_mesh_pt->output(some_file,n_plot);
1172 sprintf(filename,
"%s/solid_traction_soln%i.dat",Doc_info.directory().c_str(),
1174 some_file.open(filename);
1175 Solid_traction_mesh_pt->output(some_file,n_plot);
1180 sprintf(filename,
"%s/traction_soln%i.dat",Doc_info.directory().c_str(),
1182 some_file.open(filename);
1183 FSI_traction_mesh_pt->output(some_file,n_plot);
1189 sprintf(filename,
"%s/flux_bc_soln%i.dat",Doc_info.directory().c_str(),
1191 some_file.open(filename);
1192 Helmholtz_fsi_flux_mesh_pt->output(some_file,n_plot);
1198 sprintf(filename,
"%s/helmholtz_soln%i.dat",Doc_info.directory().c_str(),
1200 some_file.open(filename);
1201 Helmholtz_mesh_pt->output(some_file,n_plot);
1202 some_file << case_string.str();
1207 unsigned nreg=Solid_mesh_pt->nregion();
1208 for (
unsigned r=0;r<nreg;r++)
1210 sprintf(filename,
"%s/region%i_%i.dat",Doc_info.directory().c_str(),
1211 r,Doc_info.number());
1212 some_file.open(filename);
1213 unsigned nel=Solid_mesh_pt->nregion_element(r);
1214 for (
unsigned e=0;e<nel;e++)
1216 FiniteElement* el_pt=Solid_mesh_pt->region_element_pt(r,e);
1217 el_pt->output(some_file,n_plot);
1226 for (
unsigned i=0;i<nstep;i++)
1228 sprintf(filename,
"%s/helmholtz_animation%i_frame%i.dat",
1229 Doc_info.directory().c_str(),
1230 Doc_info.number(),i);
1231 some_file.open(filename);
1232 double phi=2.0*MathematicalConstants::Pi*double(i)/double(nstep-1);
1233 unsigned nelem=Helmholtz_mesh_pt->nelement();
1234 for (
unsigned e=0;e<nelem;e++)
1236 HELMHOLTZ_ELEMENT* el_pt=
dynamic_cast<HELMHOLTZ_ELEMENT*
>(
1237 Helmholtz_mesh_pt->element_pt(e));
1238 el_pt->output_real(some_file,phi,n_plot);
1244 << Doc_info.number() <<
")\n";
1247 Doc_info.number()++;
1260 CommandLineArgs::setup(argc,argv);
1266 CommandLineArgs::specify_command_line_flag(
"--dir",
1270 CommandLineArgs::specify_command_line_flag(
"--alpha",
1274 CommandLineArgs::specify_command_line_flag(
"--el_multiplier",
1278 CommandLineArgs::specify_command_line_flag(
"--outer_radius",
1282 CommandLineArgs::specify_command_line_flag(
"--validation");
1285 unsigned max_adapt=3;
1286 CommandLineArgs::specify_command_line_flag(
"--max_adapt",&max_adapt);
1289 CommandLineArgs::parse_and_assign();
1292 CommandLineArgs::doc_specified_flags();
1296 <TTimeHarmonicLinearElasticityElement<2,3> >,
1297 RefineableQHelmholtzElement<2,3> > problem;
1308 if (CommandLineArgs::command_line_flag_has_been_set(
"--validation"))
1313 for(
unsigned i=0;i<nstep;i++)
1317 problem.newton_solve(max_adapt);
1320 problem.doc_solution();
unsigned Rib_divider_boundary_id
void create_fsi_traction_elements()
Create FSI traction elements.
Mesh * Helmholtz_outer_boundary_mesh_pt
Pointer to mesh containing the ABC elements.
void create_solid_traction_elements()
Create solid traction elements.
void create_helmholtz_fsi_flux_elements()
Create Helmholtz FSI flux elements.
void actions_before_newton_solve()
Update function (empty)
Mesh * Solid_traction_mesh_pt
Pointer to mesh of solid traction elements.
unsigned Lower_symmetry_boundary_id
Boundary ID of lower symmetry boundary.
void complete_problem_setup()
Complete problem setup: Apply boundary conditions and set physical properties.
void delete_face_elements(Mesh *const &boundary_mesh_pt)
Delete (face) elements in specified mesh.
unsigned Lower_inner_boundary_id
Boundary ID of lower inner boundary.
void actions_before_adapt()
Actions before adapt: Wipe the face meshes.
RefineableTriangleMesh< ELASTICITY_ELEMENT > * Solid_mesh_pt
Pointer to refineable solid mesh.
void actions_after_adapt()
Actions after adapt: Rebuild the face meshes.
CoatedDiskProblem()
Constructor:
void actions_after_newton_solve()
Update function (empty)
unsigned Upper_symmetry_boundary_id
Boundary ID of upper symmetry boundary.
unsigned Outer_boundary_id
Boundary ID of outer boundary.
void setup_interaction()
Setup interaction.
void create_helmholtz_ABC_elements()
Create ABC face elements.
unsigned Upper_inner_boundary_id
Boundary ID of upper inner boundary.
void doc_solution()
Doc the solution.
////////////////////////////////////////////////////////////////////
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.
MyStraightLine(const MyStraightLine &dummy)
Broken copy constructor.
void operator=(const MyStraightLine &)
Broken assignment operator.
~MyStraightLine()
Destructor: Empty.
void position(const Vector< double > &zeta, Vector< double > &r) const
Position Vector at Lagrangian coordinate zeta.
Vector< double > R_end
End point of line.
/////////////////////////////////////////////////////////////////// /////////////////////////////////...
void pressure_load(const Vector< double > &x, const Vector< double > &n, Vector< std::complex< double > > &traction)
Pressure load (real and imag part)
double Nu
Poisson's ratio.
string Directory
Output directory.
double P
Uniform pressure.
unsigned El_multiplier
Multiplier for number of elements.
Vector< double > Density_ratio(2, 0.1)
Density ratio for the two regions: solid to fluid.
Vector< double > Omega_sq(2, 0.0)
Square of non-dim frequency for the two regions – dependent variable!
double Density_ratio
Density ratio: solid to fluid.
Vector< TimeHarmonicIsotropicElasticityTensor * > E_pt
The elasticity tensors for the two regions.
double Outer_radius
Radius of outer boundary of Helmholtz domain.
double K_squared
Square of wavenumber for the Helmholtz equation.
void update_parameter_values()
Function to update dependent parameter values.
unsigned ABC_order
Order of absorbing/appproximate boundary condition.
double H_coating
Non-dim thickness of elastic coating.
double Omega_sq
Non-dim square of frequency for solid – dependent variable!
double Alpha
Peakiness parameter for pressure load.
int main(int argc, char **argv)
Driver for acoustic fsi problem.