69class PointwiseOutputGeneratorBase
72 using point_value_type =
typename PointwiseOutputDataBase<dim>::point_value_type;
78 do_evaluate(std::function<
void()>
const & write_solution,
double const time,
bool const unsteady);
80 PointwiseOutputGeneratorBase(MPI_Comm
const & comm);
82 virtual ~PointwiseOutputGeneratorBase() =
default;
85 setup_base(dealii::Triangulation<dim>
const & triangulation_in,
86 dealii::Mapping<dim>
const & mapping_in,
90 add_quantity(std::string
const & name,
unsigned int const n_components);
92 template<
int n_components>
94 write_quantity(std::string
const & name,
95 std::vector<dealii::Tensor<1, n_components, Number>>
const & values,
96 unsigned int const first_component)
98 unsigned int const components = name_to_components.at(name);
99 for(
unsigned int comp = 0; comp < components; ++comp)
102 write_component((components == 1) ? name : name + std::to_string(comp), componentwise_result);
107 write_quantity(std::string
const & name, std::vector<Number>
const & values)
109 write_component(name, values);
112 template<
int n_components>
113 [[nodiscard]] std::vector<
114 typename dealii::FEPointEvaluation<n_components, dim, dim, Number>::value_type>
115 compute_point_values(dealii::LinearAlgebra::distributed::Vector<Number>
const & solution,
116 dealii::DoFHandler<dim>
const & dof_handler)
const
118 return dealii::VectorTools::point_values<n_components>(*remote_evaluator,
125 setup_remote_evaluator();
128 reinit_remote_evaluator();
134 write_evaluation_points(std::string
const & name);
136#ifdef DEAL_II_WITH_HDF5
138 add_evaluation_points_dataset(dealii::HDF5::Group & group, std::string
const & name);
141 add_time_dataset(dealii::HDF5::Group & group, std::string
const & name);
145 write_time(
double time);
147 template<
typename ComponentwiseContainerType>
149 write_component(std::string
const & name, ComponentwiseContainerType
const & componentwise_result)
151#ifdef DEAL_II_WITH_HDF5
152 auto dataset = hdf5_file->open_dataset(
"PhysicalInformation/" + name);
154 std::vector<hsize_t> hyperslab_offset = {0, time_control.get_counter()};
155 std::vector<hsize_t> hyperslab_dim = {pointwise_output_data.evaluation_points.size(), 1};
157 if(dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0)
158 dataset.write_hyperslab(componentwise_result, hyperslab_offset, hyperslab_dim);
160 dataset.template write_none<Number>();
163 (void)componentwise_result;
164 AssertThrow(
false, dealii::ExcMessage(
"deal.II is not compiled with HDF5!"));
168 MPI_Comm
const mpi_comm;
170 dealii::SmartPointer<dealii::Triangulation<dim>
const> triangulation;
171 dealii::SmartPointer<dealii::Mapping<dim>
const> mapping;
173 dealii::Vector<Number> componentwise_result;
174 unsigned int n_out_samples;
175 std::shared_ptr<dealii::Utilities::MPI::RemotePointEvaluation<dim>> remote_evaluator;
176 bool first_evaluation;
178 std::map<std::string, unsigned int> name_to_components;
180#ifdef DEAL_II_WITH_HDF5
181 std::unique_ptr<dealii::HDF5::File> hdf5_file;
void extract_component_from_tensors(dealii::Vector< Number > &dst, std::vector< dealii::Tensor< n_components1, n_components2, Number > > const &values, unsigned int const comp1, unsigned int const comp2)
Definition tensor_utilities.h:39