67class PointwiseOutputGeneratorBase
70 using point_value_type =
typename PointwiseOutputDataBase<dim>::point_value_type;
76 do_evaluate(std::function<
void()>
const & write_solution,
double const time,
bool const unsteady);
78 PointwiseOutputGeneratorBase(MPI_Comm
const & comm);
80 virtual ~PointwiseOutputGeneratorBase() =
default;
83 setup_base(dealii::Triangulation<dim>
const & triangulation_in,
84 dealii::Mapping<dim>
const & mapping_in,
88 add_quantity(std::string
const & name,
unsigned int const n_components);
90 template<
int n_components>
92 write_quantity(std::string
const & name,
93 std::vector<dealii::Tensor<1, n_components, Number>>
const & values,
94 unsigned int const first_component)
96 unsigned int const components = name_to_components.at(name);
97 for(
unsigned int comp = 0; comp < components; ++comp)
100 write_component((components == 1) ? name : name + std::to_string(comp), componentwise_result);
105 write_quantity(std::string
const & name, std::vector<Number>
const & values)
107 write_component(name, values);
110 template<
int n_components>
111 [[nodiscard]] std::vector<
112 typename dealii::FEPointEvaluation<n_components, dim, dim, Number>::value_type>
113 compute_point_values(dealii::LinearAlgebra::distributed::Vector<Number>
const & solution,
114 dealii::DoFHandler<dim>
const & dof_handler)
const
116 return dealii::VectorTools::point_values<n_components>(*remote_evaluator,
123 setup_remote_evaluator();
126 reinit_remote_evaluator();
132 write_evaluation_points(std::string
const & name);
134#ifdef DEAL_II_WITH_HDF5
136 add_evaluation_points_dataset(dealii::HDF5::Group & group, std::string
const & name);
139 add_time_dataset(dealii::HDF5::Group & group, std::string
const & name);
143 write_time(
double time);
145 template<
typename ComponentwiseContainerType>
147 write_component(std::string
const & name, ComponentwiseContainerType
const & componentwise_result)
149#ifdef DEAL_II_WITH_HDF5
150 auto dataset = hdf5_file->open_dataset(
"PhysicalInformation/" + name);
152 std::vector<hsize_t> hyperslab_offset = {0, time_control.get_counter()};
153 std::vector<hsize_t> hyperslab_dim = {pointwise_output_data.evaluation_points.size(), 1};
155 if(dealii::Utilities::MPI::this_mpi_process(mpi_comm) == 0)
156 dataset.write_hyperslab(componentwise_result, hyperslab_offset, hyperslab_dim);
158 dataset.template write_none<Number>();
161 (void)componentwise_result;
162 AssertThrow(
false, dealii::ExcMessage(
"deal.II is not compiled with HDF5!"));
166 MPI_Comm
const mpi_comm;
168 dealii::ObserverPointer<dealii::Triangulation<dim>
const> triangulation;
169 dealii::ObserverPointer<dealii::Mapping<dim>
const> mapping;
171 dealii::Vector<Number> componentwise_result;
172 unsigned int n_out_samples;
173 std::shared_ptr<dealii::Utilities::MPI::RemotePointEvaluation<dim>> remote_evaluator;
174 bool first_evaluation;
176 std::map<std::string, unsigned int> name_to_components;
178#ifdef DEAL_II_WITH_HDF5
179 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