applications/mp-melt-pool/cases/evaporating_droplet/evaporating_droplet_with_heat.hpp Source File

Developer Documentation: applications/mp-melt-pool/cases/evaporating_droplet/evaporating_droplet_with_heat.hpp Source File
Developer Documentation
evaporating_droplet_with_heat.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <deal.II/base/function.h>
4#include <deal.II/base/function_signed_distance.h>
5#include <deal.II/base/point.h>
6#include <deal.II/base/tensor_function.h>
7
8#include <deal.II/distributed/shared_tria.h>
9#include <deal.II/distributed/tria.h>
10
11#include <deal.II/grid/grid_generator.h>
12#include <deal.II/grid/manifold_lib.h>
13
17
18#include <iostream>
19
20#include "../../melt_pool_case.hpp"
21
23{
24 template <int dim>
25 class InitialValuesLS : public dealii::Function<dim>
26 {
27 public:
28 InitialValuesLS(const double eps)
29 : dealii::Function<dim>()
30 , distance_sphere(dim == 2 ? dealii::Point<dim>(0, 0) : dealii::Point<dim>(0, 0, 0), 0.02)
31 , eps(eps)
32 {}
33
34 double
35 value(const dealii::Point<dim> &p, const unsigned int /*component*/) const override
36 {
38 }
39
40 private:
41 const dealii::Functions::SignedDistance::Sphere<dim> distance_sphere;
42 const double eps;
43 };
44
45 /*
46 * This class collects all relevant input data for the level set simulation
47 */
48
49 template <int dim, typename number>
51 {
52 public:
54 const MPI_Comm mpi_communicator)
56 , lambda(2. * dealii::numbers::PI *
57 std::sqrt(3. * this->parameters.flow.surface_tension.surface_tension_coefficient /
58 (9.81 * (this->parameters.material.liquid.density -
59 this->parameters.material.gas.density))))
60 {}
61
62 void
64 {
65 if (this->parameters.base.fe.type == FiniteElementType::FE_SimplexP)
66 {
67 this->triangulation =
68 std::make_shared<dealii::parallel::shared::Triangulation<dim>>(this->mpi_communicator);
69 }
70 else
71 {
72 this->triangulation = std::make_shared<dealii::parallel::distributed::Triangulation<dim>>(
73 this->mpi_communicator);
74 }
75
76 if constexpr ((dim == 2) || (dim == 3))
77 {
78 // create mesh
79 std::vector<unsigned int> subdivisions(
80 dim,
81 5 * (this->parameters.base.fe.type == FiniteElementType::FE_SimplexP ?
82 dealii::Utilities::pow(2, this->parameters.base.global_refinements) :
83 1));
84
85 const dealii::Point<dim> top_right =
86 (dim == 2) ? dealii::Point<dim>(lambda / 2., lambda / 2.) :
87 dealii::Point<dim>(lambda / 2., lambda / 2., lambda / 2.);
88 const dealii::Point<dim> bottom_left =
89 (dim == 2) ? dealii::Point<dim>(-lambda / 2., -lambda / 2.) :
90 dealii::Point<dim>(-lambda / 2., -lambda / 2., -lambda / 2.);
91
92 if (this->parameters.base.fe.type == FiniteElementType::FE_SimplexP)
93 {
94 dealii::GridGenerator::subdivided_hyper_rectangle_with_simplices(*this->triangulation,
95 subdivisions,
96 bottom_left,
97 top_right);
98 }
99 else
100 {
101 dealii::GridGenerator::subdivided_hyper_rectangle(*this->triangulation,
102 subdivisions,
103 bottom_left,
104 top_right);
105 this->triangulation->refine_global(this->parameters.base.global_refinements);
106 }
107 }
108 else
109 {
110 AssertThrow(false, dealii::ExcNotImplemented());
111 }
112 }
113
114 void
116 {
117 auto dirichlet_temp = std::make_shared<dealii::Functions::ConstantFunction<dim>>(10);
118
119 this->attach_boundary_condition({0, dirichlet_temp}, "dirichlet", "heat_transfer");
120 this->attach_boundary_condition({0, std::make_shared<dealii::Functions::ZeroFunction<dim>>()},
121 "open",
122 "navier_stokes_u");
123 }
124
125 void
127 {
128 const double eps = this->parameters.ls.reinit.compute_interface_thickness_parameter_epsilon(
129 dealii::GridTools::minimal_cell_diameter(*this->triangulation) /
130 this->parameters.ls.get_n_subdivisions() / std::sqrt(dim));
131
132 AssertThrow(eps > 0, dealii::ExcNotImplemented());
133
134 this->attach_initial_condition(std::make_shared<InitialValuesLS<dim>>(eps), "level_set");
135 this->attach_initial_condition(std::shared_ptr<dealii::Function<dim>>(
136 new dealii::Functions::ZeroFunction<dim>(dim)),
137 "navier_stokes_u");
138 this->attach_initial_condition(std::shared_ptr<dealii::Function<dim>>(
139 new dealii::Functions::ConstantFunction<dim>(0.0)),
140 "heat_transfer");
141 }
142
143 const double lambda;
144 };
145} // namespace MeltPoolDG::Simulation::EvaporatingDropletWithHeat
Definition melt_pool_case.hpp:290
MeltPoolCaseParameters< number > parameters
Definition melt_pool_case.hpp:292
void attach_boundary_condition(std::pair< const dealii::types::boundary_id, const std::shared_ptr< dealii::Function< dim > > > id_and_function, const std::string &type, const std::string &operation_name)
Attach a boundary condition for a specific operation.
Definition simulation_case_base.hpp:345
std::shared_ptr< dealii::Triangulation< dim, spacedim > > triangulation
Definition simulation_case_base.hpp:49
const std::string parameter_file
Definition simulation_case_base.hpp:52
void attach_initial_condition(std::shared_ptr< dealii::Function< dim > > initial_function, const std::string &operation_name)
Definition simulation_case_base.hpp:327
const MPI_Comm mpi_communicator
Definition simulation_case_base.hpp:56
Definition evaporating_droplet_with_heat.hpp:26
const dealii::Functions::SignedDistance::Sphere< dim > distance_sphere
Definition evaporating_droplet_with_heat.hpp:41
const double eps
Definition evaporating_droplet_with_heat.hpp:42
InitialValuesLS(const double eps)
Definition evaporating_droplet_with_heat.hpp:28
double value(const dealii::Point< dim > &p, const unsigned int) const override
Definition evaporating_droplet_with_heat.hpp:35
void create_spatial_discretization() override
Pure virtual function to create the spatial discretization.
Definition evaporating_droplet_with_heat.hpp:63
SimulationEvaporatingDropletWithHeat(std::string parameter_file, const MPI_Comm mpi_communicator)
Definition evaporating_droplet_with_heat.hpp:53
const double lambda
Definition evaporating_droplet_with_heat.hpp:143
void set_field_conditions() override
Pure virtual function to set the field conditions.
Definition evaporating_droplet_with_heat.hpp:126
void set_boundary_conditions() override
Pure virtual function to set the boundary conditions.
Definition evaporating_droplet_with_heat.hpp:115
number tanh_characteristic_function(const number &distance, const number &eps)
Definition characteristic_functions.hpp:12
Definition evaporating_droplet_with_heat.cpp:6
Definition dealii_tensor.hpp:10