Chi-Tech
chi_ffinter_line_execute.cc
Go to the documentation of this file.
1#include "chi_ffinter_line.h"
2
4
8
9#include "chi_runtime.h"
10#include "chi_log.h"
11
12//###################################################################
13/**Executes the interpolation.*/
15{
16 Chi::log.Log0Verbose1() << "Executing line interpolator.";
17 for (int ff=0; ff < field_functions_.size(); ff++)
18 {
19 auto& ff_ctx = ff_contexts_[ff];
20 const auto& ref_ff = *ff_ctx.ref_ff;
21 const auto& sdm = ref_ff.GetSpatialDiscretization();
22 const auto& grid = sdm.Grid();
23
24 const auto& uk_man = ref_ff.GetUnknownManager();
25 const auto uid = 0;
26 const auto cid = ref_component_;
27
28 const auto field_data = ref_ff.GetGhostedFieldVector();
29
30 ff_ctx.interpolation_points_values.assign(number_of_points_, 0.0);
31 for (int p=0; p < number_of_points_; ++p)
32 {
33 if (not ff_ctx.interpolation_points_has_ass_cell[p]) continue;
34
35 const auto cell_local_index = ff_ctx.interpolation_points_ass_cell[p];
36 const auto& cell = grid.local_cells[cell_local_index];
37 const auto& cell_mapping = sdm.GetCellMapping(cell);
38 const size_t num_nodes = cell_mapping.NumNodes();
39
40 std::vector<double> shape_function_vals(num_nodes, 0.0);
41 cell_mapping.ShapeValues(interpolation_points_[p], shape_function_vals);
42
43 double point_value = 0.0;
44 for (size_t i=0; i<num_nodes; ++i)
45 {
46 const int64_t imap = sdm.MapDOFLocal(cell, i, uk_man, uid, cid);
47
48 point_value += shape_function_vals[i]*field_data[imap];
49 }//for node i
50 ff_ctx.interpolation_points_values[p] = point_value;
51 }//for p
52 }//for ff
53
54}
static chi::ChiLog & log
Definition: chi_runtime.h:81
LogStream Log0Verbose1()
Definition: chi_log.h:234
std::vector< chi_physics::FieldFunctionGridBasedPtr > field_functions_
std::vector< chi_mesh::Vector3 > interpolation_points_
std::vector< FieldFunctionContext > ff_contexts_