34 #include "fourier_decomposed_helmholtz.h"
37 #include "time_harmonic_fourier_decomposed_linear_elasticity.h"
40 #include "multi_physics.h"
43 #include "meshes/annular_mesh.h"
44 #include "meshes/triangle_mesh.h"
47 #include "oomph_crbond_bessel.h"
49 using namespace oomph;
71 : GeomObject(1,2), R_start(r_start), R_end(r_end)
78 BrokenCopy::broken_copy(
"MyStraightLine");
85 void position(
const Vector<double>& zeta, Vector<double>& r)
const
88 r[0] = R_start[0]+(R_end[0]-R_start[0])*zeta[0];
89 r[1] = R_start[1]+(R_end[1]-R_start[1])*zeta[0];
130 std::complex<double>
Nu(std::complex<double>(0.3,0.0));
133 Vector<std::complex<double> >
E(2,std::complex<double>(1.0,0.0));
136 Vector<std::complex<double> >
Omega_sq(2,std::complex<double>(100.0,0.0));
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));
163 for(
unsigned i=0;i<dim;i++)
165 traction[i] = complex<double>(-magnitude*
P*n[i],magnitude*
P*n[i]);
179 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
195 void actions_before_adapt();
198 void actions_after_adapt();
203 Helmholtz_DtN_mesh_pt->setup_gamma();
224 void create_solid_traction_elements();
227 void delete_face_elements(Mesh*
const & boundary_mesh_pt);
230 void complete_problem_setup();
279 Mesh* FSI_traction_mesh_pt;
294 Mesh* Helmholtz_fsi_flux_mesh_pt;
297 FourierDecomposedHelmholtzDtNMesh<HELMHOLTZ_ELEMENT>* Helmholtz_DtN_mesh_pt;
308 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
318 Vector<double> r_start(2);
319 Vector<double> r_end(2);
322 double r_outer = 1.0;
328 double rib_thick=0.05;
331 double rib_depth=0.2;
340 double half_phi_rib=asin(0.5*rib_thick/r_inner);
343 TriangleMeshClosedCurve* closed_curve_pt=0;
346 Vector<TriangleMeshCurveSection*> curvilinear_boundary_pt;
350 Ellipse* outer_boundary_circle_pt =
new Ellipse(r_outer,r_outer);
351 double zeta_start=-0.5*MathematicalConstants::Pi;
352 double zeta_end=0.5*MathematicalConstants::Pi;
353 unsigned nsegment=50;
354 unsigned boundary_id=curvilinear_boundary_pt.size();
355 curvilinear_boundary_pt.push_back(
356 new TriangleMeshCurviLine(
357 outer_boundary_circle_pt,zeta_start,zeta_end,nsegment,boundary_id));
360 Outer_boundary_id=boundary_id;
373 boundary_id=curvilinear_boundary_pt.size();
374 curvilinear_boundary_pt.push_back(
375 new TriangleMeshCurviLine(
376 upper_sym_pt,zeta_start,zeta_end,nsegment,boundary_id));
379 Upper_symmetry_boundary_id=boundary_id;
383 Ellipse* upper_inner_boundary_pt =
384 new Ellipse(r_inner,r_inner);
385 zeta_start=0.5*MathematicalConstants::Pi;
386 zeta_end=half_phi_rib;
388 boundary_id=curvilinear_boundary_pt.size();
389 curvilinear_boundary_pt.push_back(
390 new TriangleMeshCurviLine(
391 upper_inner_boundary_pt,
392 zeta_start,zeta_end,nsegment,boundary_id));
395 Upper_inner_boundary_id=boundary_id;
400 TriangleMeshCurviLine* upper_inward_rib_curviline_pt=0;
401 Vector<TriangleMeshOpenCurve*> inner_boundary_pt;
402 TriangleMeshCurviLine* lower_inward_rib_curviline_pt=0;
403 Vector<double> rib_center(2);
407 r_start[0]=r_inner*cos(half_phi_rib);
408 r_start[1]=r_inner*sin(half_phi_rib);
409 r_end[0]=r_start[0]-rib_depth;
415 boundary_id=curvilinear_boundary_pt.size();
416 upper_inward_rib_curviline_pt=
417 new TriangleMeshCurviLine(
418 upper_inward_rib_pt,zeta_start,zeta_end,nsegment,boundary_id);
419 curvilinear_boundary_pt.push_back(upper_inward_rib_curviline_pt);
426 r_end[1]=r_start[1]+0.5*(t_width-rib_thick);
431 boundary_id=curvilinear_boundary_pt.size();
432 curvilinear_boundary_pt.push_back(
433 new TriangleMeshCurviLine(
434 vertical_upper_t_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
441 r_end[0]=r_start[0]-t_thick;
447 boundary_id=curvilinear_boundary_pt.size();
448 curvilinear_boundary_pt.push_back(
449 new TriangleMeshCurviLine(
450 horizontal_upper_t_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
457 r_end[1]=-r_start[1];
462 boundary_id=curvilinear_boundary_pt.size();
463 curvilinear_boundary_pt.push_back(
464 new TriangleMeshCurviLine(
465 inner_vertical_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
472 r_end[0]=r_start[0]+t_thick;
478 boundary_id=curvilinear_boundary_pt.size();
479 curvilinear_boundary_pt.push_back(
480 new TriangleMeshCurviLine(
481 horizontal_lower_t_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
489 r_end[1]=r_start[1]+0.5*(t_width-rib_thick);
494 boundary_id=curvilinear_boundary_pt.size();
495 curvilinear_boundary_pt.push_back(
496 new TriangleMeshCurviLine(
497 vertical_lower_t_rib_pt,zeta_start,zeta_end,nsegment,boundary_id));
502 r_end[0]=r_inner*cos(half_phi_rib);
503 r_end[1]=-r_inner*sin(half_phi_rib);
504 r_start[0]=r_end[0]-rib_depth;
510 boundary_id=curvilinear_boundary_pt.size();
511 lower_inward_rib_curviline_pt=
512 new TriangleMeshCurviLine(
513 lower_inward_rib_pt,zeta_start,zeta_end,nsegment,boundary_id);
514 curvilinear_boundary_pt.push_back(lower_inward_rib_curviline_pt);
519 Ellipse* lower_inner_boundary_circle_pt =
new Ellipse(r_inner,r_inner);
520 zeta_start=-half_phi_rib;
521 zeta_end=-0.5*MathematicalConstants::Pi;
523 boundary_id=curvilinear_boundary_pt.size();
524 curvilinear_boundary_pt.push_back(
525 new TriangleMeshCurviLine(
526 lower_inner_boundary_circle_pt,zeta_start,zeta_end,nsegment,boundary_id));
529 Lower_inner_boundary_id=boundary_id;
541 boundary_id=curvilinear_boundary_pt.size();
542 curvilinear_boundary_pt.push_back(
543 new TriangleMeshCurviLine(
544 lower_sym_pt,zeta_start,zeta_end,nsegment,boundary_id));
547 Lower_symmetry_boundary_id=boundary_id;
552 new TriangleMeshClosedCurve(curvilinear_boundary_pt);
556 Vector<TriangleMeshCurveSection*> internal_polyline_pt(1);
557 r_start[0]=r_inner*cos(half_phi_rib);
558 r_start[1]=r_inner*sin(half_phi_rib);
559 r_end[0]=r_inner*cos(half_phi_rib);
560 r_end[1]=-r_inner*sin(half_phi_rib);
562 Vector<Vector<double> > boundary_vertices(2);
563 boundary_vertices[0]=r_start;
564 boundary_vertices[1]=r_end;
566 TriangleMeshPolyLine* rib_divider_pt=
567 new TriangleMeshPolyLine(boundary_vertices,boundary_id);
568 internal_polyline_pt[0]=rib_divider_pt;
571 Rib_divider_boundary_id=boundary_id;
574 double s_connect=0.0;
575 internal_polyline_pt[0]->connect_initial_vertex_to_curviline(
576 upper_inward_rib_curviline_pt,s_connect);
580 internal_polyline_pt[0]->connect_final_vertex_to_curviline(
581 lower_inward_rib_curviline_pt,s_connect);
584 inner_boundary_pt.push_back(
new TriangleMeshOpenCurve(internal_polyline_pt));
587 rib_center[0]=r_inner-rib_depth;
597 TriangleMeshParameters triangle_mesh_parameters(closed_curve_pt);
600 triangle_mesh_parameters.element_area()=0.2;
603 triangle_mesh_parameters.internal_open_curves_pt()=inner_boundary_pt;
606 triangle_mesh_parameters.add_region_coordinates(1,rib_center);
612 RefineableTriangleMesh<ELASTICITY_ELEMENT>(triangle_mesh_parameters);
618 TriangleMesh<ELASTICITY_ELEMENT>(triangle_mesh_parameters);
628 Vector<double> r_start(2);
629 Vector<double> r_end(2);
632 double r_inner = 1.0;
638 TriangleMeshClosedCurve* closed_curve_pt=0;
641 Vector<TriangleMeshCurveSection*> curvilinear_boundary_pt;
645 Ellipse* outer_boundary_circle_pt =
new Ellipse(r_outer,r_outer);
646 double zeta_start=-0.5*MathematicalConstants::Pi;
647 double zeta_end=0.5*MathematicalConstants::Pi;
648 unsigned nsegment=50;
649 unsigned boundary_id=curvilinear_boundary_pt.size();
650 curvilinear_boundary_pt.push_back(
651 new TriangleMeshCurviLine(
652 outer_boundary_circle_pt,zeta_start,zeta_end,nsegment,boundary_id));
655 HH_outer_boundary_id=boundary_id;
668 boundary_id=curvilinear_boundary_pt.size();
669 curvilinear_boundary_pt.push_back(
670 new TriangleMeshCurviLine(
671 upper_sym_pt,zeta_start,zeta_end,nsegment,boundary_id));
674 HH_upper_symmetry_boundary_id=boundary_id;
678 Ellipse* upper_inner_boundary_pt =
679 new Ellipse(r_inner,r_inner);
680 zeta_start=0.5*MathematicalConstants::Pi;
681 zeta_end=-0.5*MathematicalConstants::Pi;
683 boundary_id=curvilinear_boundary_pt.size();
684 curvilinear_boundary_pt.push_back(
685 new TriangleMeshCurviLine(
686 upper_inner_boundary_pt,
687 zeta_start,zeta_end,nsegment,boundary_id));
690 HH_inner_boundary_id=boundary_id;
702 boundary_id=curvilinear_boundary_pt.size();
703 curvilinear_boundary_pt.push_back(
704 new TriangleMeshCurviLine(
705 lower_sym_pt,zeta_start,zeta_end,nsegment,boundary_id));
708 HH_lower_symmetry_boundary_id=boundary_id;
713 new TriangleMeshClosedCurve(curvilinear_boundary_pt);
721 TriangleMeshParameters triangle_mesh_parameters(closed_curve_pt);
724 triangle_mesh_parameters.element_area()=0.2;
729 Helmholtz_mesh_pt=
new
730 RefineableTriangleMesh<HELMHOLTZ_ELEMENT>(triangle_mesh_parameters);
735 Helmholtz_mesh_pt=
new
736 TriangleMesh<HELMHOLTZ_ELEMENT>(triangle_mesh_parameters);
743 unsigned nfourier=20;
744 Helmholtz_DtN_mesh_pt=
745 new FourierDecomposedHelmholtzDtNMesh<HELMHOLTZ_ELEMENT>(
752 Solid_mesh_pt->spatial_error_estimator_pt()=
new Z2ErrorEstimator;
753 Helmholtz_mesh_pt->spatial_error_estimator_pt()=
new Z2ErrorEstimator;
759 Solid_mesh_pt->output(
"solid_mesh.dat");
760 Helmholtz_mesh_pt->output(
"helmholtz_mesh.dat");
761 Solid_mesh_pt->output_boundaries(
"solid_mesh_boundary.dat");
762 Helmholtz_mesh_pt->output_boundaries(
"helmholtz_mesh_boundary.dat");
768 Solid_traction_mesh_pt=
new Mesh;
769 create_solid_traction_elements();
772 FSI_traction_mesh_pt=
new Mesh;
773 create_fsi_traction_elements();
776 Helmholtz_fsi_flux_mesh_pt=
new Mesh;
777 create_helmholtz_fsi_flux_elements();
780 create_helmholtz_DtN_elements();
784 add_sub_mesh(Solid_mesh_pt);
785 add_sub_mesh(Solid_traction_mesh_pt);
786 add_sub_mesh(FSI_traction_mesh_pt);
787 add_sub_mesh(Helmholtz_mesh_pt);
788 add_sub_mesh(Helmholtz_fsi_flux_mesh_pt);
789 add_sub_mesh(Helmholtz_DtN_mesh_pt);
795 complete_problem_setup();
804 Trace_file.open(filename);
807 cout <<
"Number of equations: " << assign_eqn_numbers() << std::endl;
815 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
820 delete_face_elements(Solid_traction_mesh_pt);
823 delete_face_elements(FSI_traction_mesh_pt);
826 delete_face_elements(Helmholtz_fsi_flux_mesh_pt);
829 delete_face_elements(Helmholtz_DtN_mesh_pt);
832 rebuild_global_mesh();
841 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
846 complete_problem_setup();
849 create_solid_traction_elements();
853 create_fsi_traction_elements();
856 create_helmholtz_fsi_flux_elements();
860 create_helmholtz_DtN_elements();
866 rebuild_global_mesh();
876 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
890 unsigned n_node = Solid_mesh_pt->nboundary_node(Upper_symmetry_boundary_id);
891 for(
unsigned i=0;i<n_node;i++)
893 Node* nod_pt=Solid_mesh_pt->boundary_node_pt(Upper_symmetry_boundary_id,i);
897 nod_pt->set_value(0,0.0);
901 nod_pt->set_value(3,0.0);
905 nod_pt->set_value(2,0.0);
909 nod_pt->set_value(5,0.0);
915 unsigned n_node = Solid_mesh_pt->nboundary_node(Lower_symmetry_boundary_id);
916 for(
unsigned i=0;i<n_node;i++)
918 Node* nod_pt=Solid_mesh_pt->boundary_node_pt(Lower_symmetry_boundary_id,i);
922 nod_pt->set_value(0,0.0);
926 nod_pt->set_value(3,0.0);
930 nod_pt->set_value(2,0.0);
934 nod_pt->set_value(5,0.0);
941 unsigned nreg=Solid_mesh_pt->nregion();
942 for (
unsigned r=0;r<nreg;r++)
944 unsigned nel=Solid_mesh_pt->nregion_element(r);
945 for (
unsigned e=0;e<nel;e++)
948 ELASTICITY_ELEMENT *el_pt =
949 dynamic_cast<ELASTICITY_ELEMENT*
>(Solid_mesh_pt->
950 region_element_pt(r,e));
969 unsigned n_element = Helmholtz_mesh_pt->nelement();
970 for(
unsigned i=0;i<n_element;i++)
973 HELMHOLTZ_ELEMENT *el_pt =
dynamic_cast<HELMHOLTZ_ELEMENT*
>(
974 Helmholtz_mesh_pt->element_pt(i));
990 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
995 unsigned n_element = boundary_mesh_pt->nelement();
998 for(
unsigned e=0;e<n_element;e++)
1001 delete boundary_mesh_pt->element_pt(e);
1005 boundary_mesh_pt->flush_element_and_node_storage();
1014 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
1019 unsigned b=HH_outer_boundary_id;
1022 unsigned n_element = Helmholtz_mesh_pt->nboundary_element(b);
1023 for(
unsigned e=0;e<n_element;e++)
1026 HELMHOLTZ_ELEMENT* bulk_elem_pt =
dynamic_cast<HELMHOLTZ_ELEMENT*
>(
1027 Helmholtz_mesh_pt->boundary_element_pt(b,e));
1030 int face_index = Helmholtz_mesh_pt->face_index_at_boundary(b,e);
1033 FourierDecomposedHelmholtzDtNBoundaryElement<HELMHOLTZ_ELEMENT>*
1034 flux_element_pt =
new
1035 FourierDecomposedHelmholtzDtNBoundaryElement<HELMHOLTZ_ELEMENT>
1036 (bulk_elem_pt,face_index);
1039 Helmholtz_DtN_mesh_pt->add_element_pt(flux_element_pt);
1043 flux_element_pt->set_outer_boundary_mesh_pt(Helmholtz_DtN_mesh_pt);
1055 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
1061 unsigned boundary_in_helmholtz_mesh=HH_inner_boundary_id;
1065 the_file.open(
"boundary_coordinate_hh.dat");
1066 Helmholtz_mesh_pt->Mesh::template doc_boundary_coordinates<HELMHOLTZ_ELEMENT>
1067 (boundary_in_helmholtz_mesh, the_file);
1071 Multi_domain_functions::setup_bulk_elements_adjacent_to_face_mesh
1072 <HELMHOLTZ_ELEMENT,2>
1073 (
this,boundary_in_helmholtz_mesh,Helmholtz_mesh_pt,FSI_traction_mesh_pt);
1076 unsigned boundary_in_solid_mesh=Outer_boundary_id;
1079 the_file.open(
"boundary_coordinate_solid.dat");
1080 Solid_mesh_pt->Mesh::template doc_boundary_coordinates<ELASTICITY_ELEMENT>
1081 (boundary_in_solid_mesh, the_file);
1085 Multi_domain_functions::setup_bulk_elements_adjacent_to_face_mesh
1086 <ELASTICITY_ELEMENT,2>(
1087 this,boundary_in_solid_mesh,Solid_mesh_pt,Helmholtz_fsi_flux_mesh_pt);
1098 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
1103 unsigned b=Outer_boundary_id;
1106 unsigned n_element = Solid_mesh_pt->nboundary_element(b);
1109 for(
unsigned e=0;e<n_element;e++)
1112 ELASTICITY_ELEMENT* bulk_elem_pt =
dynamic_cast<ELASTICITY_ELEMENT*
>(
1113 Solid_mesh_pt->boundary_element_pt(b,e));
1116 int face_index = Solid_mesh_pt->face_index_at_boundary(b,e);
1119 FourierDecomposedTimeHarmonicLinElastLoadedByHelmholtzPressureBCElement
1120 <ELASTICITY_ELEMENT,HELMHOLTZ_ELEMENT>* el_pt=
1121 new FourierDecomposedTimeHarmonicLinElastLoadedByHelmholtzPressureBCElement
1122 <ELASTICITY_ELEMENT,HELMHOLTZ_ELEMENT>(bulk_elem_pt,
1125 FSI_traction_mesh_pt->add_element_pt(el_pt);
1129 el_pt->set_boundary_number_in_bulk_mesh(b);
1142 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
1148 unsigned b=HH_inner_boundary_id;
1151 unsigned n_element = Helmholtz_mesh_pt->nboundary_element(b);
1154 for(
unsigned e=0;e<n_element;e++)
1157 HELMHOLTZ_ELEMENT* bulk_elem_pt =
dynamic_cast<HELMHOLTZ_ELEMENT*
>(
1158 Helmholtz_mesh_pt->boundary_element_pt(b,e));
1161 int face_index = Helmholtz_mesh_pt->face_index_at_boundary(b,e);
1164 FourierDecomposedHelmholtzFluxFromNormalDisplacementBCElement
1165 <HELMHOLTZ_ELEMENT,ELASTICITY_ELEMENT>* el_pt=
1166 new FourierDecomposedHelmholtzFluxFromNormalDisplacementBCElement
1167 <HELMHOLTZ_ELEMENT,ELASTICITY_ELEMENT>(bulk_elem_pt,
1171 Helmholtz_fsi_flux_mesh_pt->add_element_pt(el_pt);
1175 el_pt->set_boundary_number_in_bulk_mesh(b);
1184 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
1191 for (
unsigned i=0;i<nb;i++)
1196 b=Upper_inner_boundary_id;
1200 b=Lower_inner_boundary_id;
1204 b=Rib_divider_boundary_id;
1212 unsigned n_element = Solid_mesh_pt->nboundary_element_in_region(b,r);
1215 for(
unsigned e=0;e<n_element;e++)
1218 ELASTICITY_ELEMENT* bulk_elem_pt =
dynamic_cast<ELASTICITY_ELEMENT*
>(
1219 Solid_mesh_pt->boundary_element_in_region_pt(b,r,e));
1222 int face_index = Solid_mesh_pt->face_index_at_boundary_in_region(b,r,e);
1225 TimeHarmonicFourierDecomposedLinearElasticityTractionElement
1226 <ELASTICITY_ELEMENT>* el_pt=
1227 new TimeHarmonicFourierDecomposedLinearElasticityTractionElement
1228 <ELASTICITY_ELEMENT>(bulk_elem_pt,face_index);
1231 Solid_traction_mesh_pt->add_element_pt(el_pt);
1235 el_pt->set_boundary_number_in_bulk_mesh(b);
1249 template<
class ELASTICITY_ELEMENT,
class HELMHOLTZ_ELEMENT>
1255 oomph_info <<
"Writing result for step " << doc_info.number()
1256 <<
". Parameters: "<< std::endl;
1257 oomph_info <<
"Fourier mode number : N = "
1264 oomph_info <<
"Solid wavenumber : Omega_sq = "
1266 oomph_info <<
"Solid wavenumber : Omega_sq = "
1268 << std::endl << std::endl;
1271 ofstream some_file,some_file2;
1279 sprintf(filename,
"%s/power%i.dat",doc_info.directory().c_str(),
1281 some_file.open(filename);
1285 unsigned nn_element=Helmholtz_DtN_mesh_pt->nelement();
1286 for(
unsigned e=0;e<nn_element;e++)
1288 FourierDecomposedHelmholtzBCElementBase<HELMHOLTZ_ELEMENT> *el_pt =
1289 dynamic_cast<FourierDecomposedHelmholtzBCElementBase<HELMHOLTZ_ELEMENT>*
>(
1290 Helmholtz_DtN_mesh_pt->element_pt(e));
1291 power += el_pt->global_power_contribution(some_file);
1294 oomph_info <<
"Radiated power: " << power << std::endl;
1298 sprintf(filename,
"%s/elast_soln%i.dat",doc_info.directory().c_str(),
1300 some_file.open(filename);
1301 Solid_mesh_pt->output(some_file,n_plot);
1306 sprintf(filename,
"%s/helmholtz_soln%i.dat",doc_info.directory().c_str(),
1308 some_file.open(filename);
1309 Helmholtz_mesh_pt->output(some_file,n_plot);
1315 sprintf(filename,
"%s/fsi_traction_soln%i.dat",doc_info.directory().c_str(),
1317 some_file.open(filename);
1318 FSI_traction_mesh_pt->output(some_file,n_plot);
1324 sprintf(filename,
"%s/fsi_flux_bc_soln%i.dat",doc_info.directory().c_str(),
1326 some_file.open(filename);
1327 Helmholtz_fsi_flux_mesh_pt->output(some_file,n_plot);
1341 doc_info.number()++;
1354 CommandLineArgs::setup(argc,argv);
1360 CommandLineArgs::specify_command_line_flag(
"--dir",
1364 CommandLineArgs::specify_command_line_flag(
"--alpha",
1368 CommandLineArgs::parse_and_assign();
1371 CommandLineArgs::doc_specified_flags();
1394 ProjectableTimeHarmonicFourierDecomposedLinearElasticityElement
1395 <TTimeHarmonicFourierDecomposedLinearElasticityElement<3> >,
1396 ProjectableFourierDecomposedHelmholtzElement
1397 <TFourierDecomposedHelmholtzElement<3> > > problem;
1403 TFourierDecomposedHelmholtzElement<3> > problem;
1410 for(
unsigned i=0;i<nstep;i++)
1417 unsigned max_adapt=3;
1418 problem.newton_solve(max_adapt);
1423 problem.newton_solve();
unsigned HH_upper_symmetry_boundary_id
Boundary ID of upper boundary in Helmholtz mesh.
RefineableTriangleMesh< ELASTICITY_ELEMENT > * Solid_mesh_pt
Pointer to solid mesh.
void actions_before_adapt()
Actions before adapt: Wipe the face meshes.
void delete_face_elements(Mesh *const &boundary_mesh_pt)
Delete (face) elements in specified mesh.
void create_fsi_traction_elements()
Create FSI traction elements.
unsigned HH_inner_boundary_id
Boundary ID of inner boundary in Helmholtz mesh.
void actions_before_newton_convergence_check()
Recompute gamma integral before checking Newton residuals.
unsigned Rib_divider_boundary_id
Boundary ID of rib divider.
RefineableTriangleMesh< HELMHOLTZ_ELEMENT > * Helmholtz_mesh_pt
Pointer to Helmholtz mesh.
TriangleMesh< ELASTICITY_ELEMENT > * Solid_mesh_pt
Pointer to solid mesh.
void complete_problem_setup()
Complete problem setup: Apply boundary conditions and set physical properties.
unsigned HH_outer_boundary_id
Boundary ID of outer boundary in Helmholtz mesh.
void actions_after_adapt()
Actions after adapt: Rebuild the face meshes.
void create_helmholtz_DtN_elements()
Create DtN elements on outer boundary.
unsigned HH_lower_symmetry_boundary_id
Boundary ID of lower boundary in Helmholtz mesh.
void create_solid_traction_elements()
Create solid traction elements.
void create_helmholtz_fsi_flux_elements()
Create Helmholtz FSI flux elements.
unsigned Lower_symmetry_boundary_id
Boundary ID of lower symmetry boundary.
void actions_before_newton_solve()
Update function (empty)
Mesh * Solid_traction_mesh_pt
Pointer to mesh of solid traction elements.
TriangleMesh< HELMHOLTZ_ELEMENT > * Helmholtz_mesh_pt
Pointer to Helmholtz mesh.
void doc_solution(DocInfo &doc_info)
Doc the solution.
CoatedSphereProblem()
Constructor:
unsigned Upper_inner_boundary_id
Boundary ID of upper inner boundary.
unsigned Outer_boundary_id
Boundary ID of outer boundary.
unsigned Lower_inner_boundary_id
Boundary ID of lower inner boundary.
unsigned Upper_symmetry_boundary_id
Boundary ID of upper symmetry boundary.
void actions_after_newton_solve()
Update function (empty)
void setup_interaction()
Setup interaction.
////////////////////////////////////////////////////////////////////
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.
~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)
string Directory
Output directory.
double P
Uniform pressure.
std::complex< double > Nu(std::complex< double >(0.3, 0.0))
Poisson's ratio Nu.
Vector< std::complex< double > > Omega_sq(2, std::complex< double >(100.0, 0.0))
Non-dim square of frequency for solid – dependent variable!
double Density_ratio
Density ratio: solid to fluid.
Vector< double > Density_ratio(2, 1.0)
Density ratio: solid to fluid.
double Outer_radius
Radius of outer boundary of Helmholtz domain.
std::complex< double > Omega_sq(std::complex< double >(100.0, 0.0))
Non-dim square of frequency for solid – dependent variable!
double K_squared
Square of wavenumber for the Helmholtz equation.
Vector< std::complex< double > > E(2, std::complex< double >(1.0, 0.0))
Define the non-dimensional Young's modulus.
void update_parameter_values()
Function to update dependent parameter values.
int Fourier_wavenumber
Define azimuthal Fourier wavenumber.
double H_coating
Non-dim thickness of elastic coating.
double Alpha
Peakiness parameter for pressure load.
int main(int argc, char **argv)
Driver for coated sphere loaded by lineared fluid loading.