Skip to content

Commit 2035e5d

Browse files
added the possibility of using a spheroid
1 parent 3431f42 commit 2035e5d

4 files changed

Lines changed: 36 additions & 0 deletions

File tree

include/bem_problem.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ class BEMProblem : public ParameterAcceptor
239239
void adaptive_refinement(const TrilinosWrappers::MPI::Vector &error_vector);
240240

241241

242+
242243
ConditionalOStream pcout;
243244
ComputationalDomain<dim> &comp_dom;
244245

include/computational_domain.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,10 @@ class ComputationalDomain : public ParameterAcceptor
249249
std::map<unsigned int, std::vector<typename Triangulation<dim-1,dim>::active_cell_iterator> > vert_to_elems;
250250
std::set<typename Triangulation<dim-1,dim>::active_cell_iterator> edge_cells;
251251
Manifold<dim-1, dim> *manifold;
252+
253+
bool spheroid_bool, used_spherical_manifold;
254+
double spheroid_x_axis, spheroid_y_axis, spheroid_z_axis;
255+
252256
ConditionalOStream pcout;
253257

254258

source/bem_problem.cc

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,16 @@ void BEMProblem<dim>::reinit()
148148
// mapping_degree = fe->get_degree();
149149
if (!mapping)
150150
{
151+
if (comp_dom.spheroid_bool && comp_dom.used_spherical_manifold)
152+
{
153+
for (types::global_dof_index ii=0; ii<gradient_dh.n_dofs()/dim; ++ii)
154+
{
155+
map_vector[vec_original_to_sub_wise[ii]] *= comp_dom.spheroid_x_axis;
156+
map_vector[vec_original_to_sub_wise[ii+gradient_dh.n_dofs()/dim]] *= comp_dom.spheroid_y_axis;
157+
if (dim == 3)
158+
map_vector[vec_original_to_sub_wise[ii+gradient_dh.n_dofs()/dim]] *= comp_dom.spheroid_z_axis;
159+
}
160+
}
151161
if (mapping_type == "FE")
152162
mapping = SP(new MappingFEField<dim-1, dim> (gradient_dh, map_vector));
153163
else

source/computational_domain.cc

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ ComputationalDomain<dim>::ComputationalDomain(MPI_Comm comm)
3939
mpi_communicator (comm),
4040
n_mpi_processes (Utilities::MPI::n_mpi_processes(mpi_communicator)),
4141
this_mpi_process (Utilities::MPI::this_mpi_process(mpi_communicator)),
42+
used_spherical_manifold(false),
4243
pcout(std::cout)
4344

4445
{
@@ -115,6 +116,18 @@ void ComputationalDomain<dim>::declare_parameters (ParameterHandler &prm)
115116
}
116117
prm.leave_subsection();
117118

119+
prm.declare_entry("Use a spheroid", "false",
120+
Patterns::Bool());
121+
122+
prm.declare_entry("Axis x dimension", "2.",
123+
Patterns::Double());
124+
125+
prm.declare_entry("Axis y dimension", "3.",
126+
Patterns::Double());
127+
128+
prm.declare_entry("Axis z dimension", "4.",
129+
Patterns::Double());
130+
118131

119132
}
120133

@@ -134,6 +147,12 @@ void ComputationalDomain<dim>::parse_parameters (ParameterHandler &prm)
134147
max_curvature_ref_cycles = prm.get_integer("Maximum number of curvature adaptive refinement cycles");
135148
cad_to_projectors_tolerance_ratio = prm.get_double("Cad tolerance to projectors tolerance ratio");
136149

150+
151+
spheroid_bool = prm.get_bool("Use a spheroid");
152+
spheroid_x_axis = prm.get_double("Axis x dimension");
153+
spheroid_y_axis = prm.get_double("Axis y dimension");
154+
spheroid_z_axis = prm.get_double("Axis z dimension");
155+
137156
prm.enter_subsection("Boundary Conditions ID Numbers");
138157
{
139158
std::vector<std::string> dirichlet_string_list = Utilities::split_string_list(prm.get("Dirichlet boundary ids"));
@@ -266,6 +285,8 @@ void ComputationalDomain<dim>::read_domain()
266285
tria.set_all_manifold_ids(0);
267286
tria.set_manifold(0, *manifold);
268287

288+
used_spherical_manifold = true;
289+
269290
}
270291

271292
}

0 commit comments

Comments
 (0)