72 if (this->parameters.base.fe.type == FiniteElementType::FE_SimplexP || dim == 1)
74#ifdef DEAL_II_WITH_METIS
75 this->triangulation = std::make_shared<dealii::parallel::shared::Triangulation<dim>>(
76 this->mpi_communicator,
77 dealii::Triangulation<dim>::none,
79 dealii::parallel::shared::Triangulation<dim>::Settings::partition_metis);
84 "Missing Metis support of the deal.II installation. "
85 "Configure deal.II with -D DEAL_II_WITH_METIS='ON' to execute this example."));
90 this->triangulation = std::make_shared<dealii::parallel::distributed::Triangulation<dim>>(
91 this->mpi_communicator);
94 const dealii::Point<dim, number> bottom_left =
95 dim == 1 ? dealii::Point<dim, number>(domain_x_min) :
96 dim == 2 ? dealii::Point<dim, number>(domain_x_min, domain_y_min) :
97 dealii::Point<dim, number>(domain_x_min, domain_y_min, domain_z_min);
98 const dealii::Point<dim, number> top_right =
99 dim == 1 ? dealii::Point<dim, number>(domain_x_max) :
100 dim == 2 ? dealii::Point<dim, number>(domain_x_max, domain_y_max) :
101 dealii::Point<dim, number>(domain_x_max, domain_y_max, domain_z_max);
103 if (this->parameters.base.fe.type != FiniteElementType::FE_SimplexP)
105 dealii::GridGenerator::subdivided_hyper_rectangle(*this->triangulation,
113 std::vector<unsigned int> subdivisions(
114 dim, 5 * dealii::Utilities::pow(2, this->parameters.base.global_refinements));
115 subdivisions[dim - 1] *= 2;
116 for (
int d = 0; d < dim; d++)
117 subdivisions[d] *= cell_repetitions[d];
119 dealii::GridGenerator::subdivided_hyper_rectangle_with_simplices(*this->triangulation,
133 const auto [lower_bc, upper_bc, left_bc, right_bc, front_bc, back_bc] =
134 get_colorized_rectangle_boundary_ids<dim>();
137 this->attach_boundary_condition(
138 {lower_bc, std::make_shared<dealii::Functions::ConstantFunction<dim>>(T_initial)},
143 if constexpr (std::is_same_v<CaseClass, MeltPoolCase<dim, number>>)
146 this->attach_boundary_condition(lower_bc,
"symmetry",
"navier_stokes_u");
147 this->attach_boundary_condition(upper_bc,
"symmetry",
"navier_stokes_u");
150 this->attach_boundary_condition(left_bc,
"symmetry",
"navier_stokes_u");
151 this->attach_boundary_condition(right_bc,
"symmetry",
"navier_stokes_u");
155 this->attach_boundary_condition(front_bc,
"symmetry",
"navier_stokes_u");
156 this->attach_boundary_condition(back_bc,
"symmetry",
"navier_stokes_u");
160 this->attach_boundary_condition(lower_bc,
"fix_pressure_constant",
"navier_stokes_p");
164#ifdef MELT_POOL_DG_WITH_RTE
165 if constexpr (std::is_same_v<CaseClass,
168 this->attach_boundary_condition(
170 std::make_shared<Heat::GaussProjectionIntensityProfile<dim, number>>(
171 this->parameters.laser.power,
172 this->parameters.laser.radius,
173 this->parameters.laser.template get_starting_position<dim>(),
174 this->parameters.laser.template get_beam_direction<dim>())},
180 if (this->parameters.laser.model == Heat::LaserModelType::RTE)
182 this->parameters.laser.rte_boundary_id = upper_bc;
185 if (this->parameters.base.fe.type != FiniteElementType::FE_SimplexP)
186 this->triangulation->refine_global(this->parameters.base.global_refinements);
195 this->attach_initial_condition(
196 std::make_shared<dealii::Functions::ConstantFunction<dim>>(T_initial),
"heat_transfer");
199 if constexpr (std::is_same_v<CaseClass, Heat::HeatTransferCase<dim, number>>)
205 LevelSet::InterfaceThicknessParameterType::proportional_to_cell_size;
209 this->attach_initial_condition(
212 LevelSet::LevelSetType::smoothed_heaviside,
214 dealii::GridTools::minimal_cell_diameter(*this->triangulation) / std::sqrt(dim))),
215 "prescribed_heaviside");
219 if constexpr (std::is_same_v<CaseClass, MeltPoolCase<dim, number>>)
223 this->attach_initial_condition(
226 LevelSet::LevelSetType::signed_distance,
227 mp_case->parameters.ls.reinit.compute_interface_thickness_parameter_epsilon(
228 dealii::GridTools::minimal_cell_diameter(*this->triangulation) / std::sqrt(dim))),
231 this->attach_initial_condition(std::make_shared<dealii::Functions::ZeroFunction<dim>>(dim),
235 if (this->parameters.laser.model == Heat::LaserModelType::RTE)
237 this->attach_initial_condition(std::make_shared<dealii::Functions::ZeroFunction<dim>>(),