[P]arallel [Hi]gh-order [Li]brary for [P]DEs  Latest
Parallel High-Order Library for PDEs through hp-adaptive Discontinuous Galerkin methods
artificial_dissipation_factory.cpp
1 #include "parameters/all_parameters.h"
2 #include "parameters/parameters_artificial_dissipation.h"
3 #include <boost/preprocessor/seq/for_each.hpp>
4 #include <deal.II/base/tensor.h>
5 #include "artificial_dissipation_factory.h"
6 #include "artificial_dissipation.h"
7 
8 namespace PHiLiP {
9 
10 template <int dim, int nspecies, int nstate>
11 std::shared_ptr < ArtificialDissipationBase<dim,nspecies,nstate> >
13 {
15 
16  if constexpr(nspecies==1) {
17  artificial_dissipation_enum arti_dissipation_type = parameters_input->artificial_dissipation_param.artificial_dissipation_type;
18  switch (arti_dissipation_type)
19  {
20  case artificial_dissipation_enum::laplacian:
21  {
22  return std::make_shared<LaplacianArtificialDissipation<dim,nspecies,nstate>>(parameters_input);
23  break;
24  }
25 
26  case artificial_dissipation_enum::physical:
27  {
28  if constexpr(dim+2==nstate)
29  {
30  std::cout<<"Physical Artifical Dissipation pointer created"<<std::endl;
31  return std::make_shared<PhysicalArtificialDissipation<dim,nspecies,nstate>>(parameters_input);
32  }
33  break;
34  }
35 
36  case artificial_dissipation_enum::enthalpy_conserving_laplacian:
37  {
38  if constexpr(dim+2==nstate)
39  {
40  std::cout<<"Enthalpy Conserving Laplacian Artifical Dissipation pointer created"<<std::endl;
41  return std::make_shared<EnthalpyConservingArtificialDissipation<dim,nspecies,nstate>>(parameters_input);
42  }
43  break;
44  }
45 
46  }
47  }
48 
49  assert(0==1 && "Cannot create artificial dissipation due to an invalid artificial dissipation type specified for the problem");
50  return nullptr;
51 }
52 
53 #if PHILIP_SPECIES==1
54  // Define a sequence of possible nstate in the range [1, 6]
55  #define POSSIBLE_NSTATE (1)(2)(3)(4)(5)(6)
56 
57  // Define a macro to instantiate ArtificialDissipationFactory for a specific index
58  #define INSTANTIATE_ADFactory(r, data, nstate) \
59  template class ArtificialDissipationFactory <PHILIP_DIM, PHILIP_SPECIES, nstate>;
60  BOOST_PP_SEQ_FOR_EACH(INSTANTIATE_ADFactory, _, POSSIBLE_NSTATE)
61 #else
63 #endif
64 } // namespace PHiLiP
static std::shared_ptr< ArtificialDissipationBase< dim, nspecies, nstate > > create_artificial_dissipation(const Parameters::AllParameters *const parameters_input)
Creates artificial dissipation type depending on input parameters.
Files for the baseline physics.
Definition: ADTypes.hpp:10
Main parameter class that contains the various other sub-parameter classes.
ArtificialDissipationType
Specified choices of artificial dissipation type.
ArtificialDissipationType artificial_dissipation_type
Selected artificial dissipation type specified in the input.
Creates artificial dissipation pointer.
ArtificialDissipationParam artificial_dissipation_param
Contains parameters for artificial dissipation.