Skip to content

Commit

Permalink
initial infrastructure to support radial basis functions as an altern…
Browse files Browse the repository at this point in the history
…ative MeshfreeInterpolation scheme
  • Loading branch information
benkirk committed Mar 18, 2013
1 parent 0129974 commit 7e0aebd
Show file tree
Hide file tree
Showing 10 changed files with 251 additions and 8 deletions.
66 changes: 66 additions & 0 deletions Makefile.in

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions include/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -781,6 +781,8 @@ include_HEADERS = \
solution_transfer/meshfree_interpolation.h \
solution_transfer/meshfree_solution_transfer.h \
solution_transfer/meshfunction_solution_transfer.h \
solution_transfer/radial_basis_functions.h \
solution_transfer/radial_basis_interpolation.h \
solution_transfer/solution_transfer.h \
solvers/adaptive_time_solver.h \
solvers/diff_solver.h \
Expand Down
2 changes: 2 additions & 0 deletions include/include_HEADERS
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,8 @@ include_HEADERS = \
solution_transfer/meshfree_interpolation.h \
solution_transfer/meshfree_solution_transfer.h \
solution_transfer/meshfunction_solution_transfer.h \
solution_transfer/radial_basis_functions.h \
solution_transfer/radial_basis_interpolation.h \
solution_transfer/solution_transfer.h \
solvers/adaptive_time_solver.h \
solvers/diff_solver.h \
Expand Down
8 changes: 7 additions & 1 deletion include/libmesh/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# include the magic script!
EXTRA_DIST = rebuild_makefile.sh

BUILT_SOURCES = auto_ptr.h dirichlet_boundaries.h dof_map.h dof_object.h factory.h getpot.h id_types.h libmesh.h libmesh_C_isnan.h libmesh_augment_std_namespace.h libmesh_base.h libmesh_common.h libmesh_documentation.h libmesh_exceptions.h libmesh_logging.h libmesh_version.h multi_predicates.h periodic_boundaries.h periodic_boundary.h periodic_boundary_base.h print_trace.h reference_counted_object.h reference_counter.h single_predicates.h sparsity_pattern.h variable.h variant_filter_iterator.h enum_eigen_solver_type.h enum_elem_quality.h enum_elem_type.h enum_fe_family.h enum_inf_map_type.h enum_io_package.h enum_norm_type.h enum_order.h enum_parallel_type.h enum_point_locator_type.h enum_preconditioner_type.h enum_quadrature_type.h enum_solver_package.h enum_solver_type.h enum_subset_solve_mode.h enum_xdr_mode.h adjoint_refinement_estimator.h adjoint_residual_error_estimator.h discontinuity_measure.h error_estimator.h exact_error_estimator.h exact_solution.h fourth_error_estimators.h hp_coarsentest.h hp_selector.h hp_singular.h jump_error_estimator.h kelly_error_estimator.h patch_recovery_error_estimator.h uniform_refinement_estimator.h weighted_patch_recovery_error_estimator.h fe.h fe_abstract.h fe_base.h fe_compute_data.h fe_interface.h fe_macro.h fe_map.h fe_transformation_base.h fe_type.h fe_xyz_map.h h1_fe_transformation.h hcurl_fe_transformation.h inf_fe.h inf_fe_instantiate_1D.h inf_fe_instantiate_2D.h inf_fe_instantiate_3D.h inf_fe_macro.h cell.h cell_hex.h cell_hex20.h cell_hex27.h cell_hex8.h cell_inf.h cell_inf_hex.h cell_inf_hex16.h cell_inf_hex18.h cell_inf_hex8.h cell_inf_prism.h cell_inf_prism12.h cell_inf_prism6.h cell_prism.h cell_prism15.h cell_prism18.h cell_prism6.h cell_pyramid.h cell_pyramid5.h cell_tet.h cell_tet10.h cell_tet4.h edge.h edge_edge2.h edge_edge3.h edge_edge4.h edge_inf_edge2.h elem.h elem_quality.h elem_range.h elem_type.h face.h face_inf_quad.h face_inf_quad4.h face_inf_quad6.h face_quad.h face_quad4.h face_quad8.h face_quad9.h face_tri.h face_tri3.h face_tri6.h node.h node_elem.h node_range.h plane.h point.h remote_elem.h side.h sphere.h stored_range.h surface.h abaqus_io.h boundary_info.h boundary_mesh.h diva_io.h ensight_io.h exodusII_io.h exodusII_io_helper.h fro_io.h gmsh_io.h gmv_io.h gnuplot_io.h inf_elem_builder.h legacy_xdr_io.h matlab_io.h medit_io.h mesh.h mesh_base.h mesh_communication.h mesh_data.h mesh_function.h mesh_generation.h mesh_input.h mesh_inserter_iterator.h mesh_modification.h mesh_output.h mesh_refinement.h mesh_serializer.h mesh_smoother.h mesh_smoother_laplace.h mesh_smoother_vsmoother.h mesh_tetgen_interface.h mesh_tetgen_wrapper.h mesh_tools.h mesh_triangle_holes.h mesh_triangle_interface.h mesh_triangle_wrapper.h nemesis_io.h nemesis_io_helper.h off_io.h parallel_mesh.h patch.h postscript_io.h serial_mesh.h tecplot_io.h tetgen_io.h ucd_io.h unstructured_mesh.h unv_io.h vtk_io.h xdr_head.h xdr_io.h xdr_mesh.h xdr_mgf.h xdr_mhead.h xdr_shead.h xdr_soln.h analytic_function.h const_fem_function.h const_function.h coupling_matrix.h dense_matrix.h dense_matrix_base.h dense_submatrix.h dense_subvector.h dense_vector.h dense_vector_base.h distributed_vector.h eigen_core_support.h eigen_preconditioner.h eigen_sparse_matrix.h eigen_sparse_vector.h fem_function_base.h function_base.h laspack_matrix.h laspack_vector.h numeric_vector.h parsed_function.h petsc_macro.h petsc_matrix.h petsc_preconditioner.h petsc_vector.h preconditioner.h raw_accessor.h refinement_selector.h shell_matrix.h sparse_matrix.h sparse_shell_matrix.h sum_shell_matrix.h tensor_shell_matrix.h tensor_tools.h tensor_value.h trilinos_epetra_matrix.h trilinos_epetra_vector.h trilinos_preconditioner.h type_n_tensor.h type_tensor.h type_vector.h vector_value.h wrapped_function.h zero_function.h parallel.h parallel_algebra.h parallel_bin_sorter.h parallel_conversion_utils.h parallel_ghost_sync.h parallel_hilbert.h parallel_histogram.h parallel_implementation.h parallel_sort.h threads.h threads_allocators.h centroid_partitioner.h hilbert_sfc_partitioner.h linear_partitioner.h metis_partitioner.h morton_sfc_partitioner.h parmetis_partitioner.h partitioner.h sfc_partitioner.h diff_physics.h diff_qoi.h fem_physics.h quadrature.h quadrature_clough.h quadrature_conical.h quadrature_gauss.h quadrature_gm.h quadrature_grid.h quadrature_jacobi.h quadrature_monomial.h quadrature_rules.h quadrature_simpson.h quadrature_trap.h derived_rb_construction.h derived_rb_evaluation.h rb_assembly_expansion.h rb_construction.h rb_construction_base.h rb_eim_assembly.h rb_eim_construction.h rb_eim_evaluation.h rb_eim_theta.h rb_evaluation.h rb_parameters.h rb_parametrized.h rb_parametrized_function.h rb_scm_construction.h rb_scm_evaluation.h rb_temporal_discretization.h rb_theta.h rb_theta_expansion.h transient_rb_assembly_expansion.h transient_rb_construction.h transient_rb_evaluation.h transient_rb_theta_expansion.h direct_solution_transfer.h dtk_adapter.h dtk_evaluator.h dtk_solution_transfer.h meshfree_interpolation.h meshfree_solution_transfer.h meshfunction_solution_transfer.h solution_transfer.h adaptive_time_solver.h diff_solver.h eigen_solver.h eigen_sparse_linear_solver.h eigen_time_solver.h euler2_solver.h euler_solver.h laspack_linear_solver.h linear.h linear_solver.h memory_solution_history.h newton_solver.h no_solution_history.h nonlinear_solver.h petsc_diff_solver.h petsc_dm_nonlinear_solver.h petsc_linear_solver.h petsc_nonlinear_solver.h petscdmlibmesh.h slepc_eigen_solver.h slepc_macro.h solution_history.h solver.h steady_solver.h time_solver.h trilinos_aztec_linear_solver.h trilinos_nox_nonlinear_solver.h twostep_time_solver.h unsteady_solver.h condensed_eigen_system.h continuation_system.h diff_context.h diff_system.h eigen_system.h elem_assembly.h equation_systems.h explicit_system.h fem_context.h fem_system.h frequency_system.h implicit_system.h linear_implicit_system.h newmark_system.h nonlinear_implicit_system.h parameter_vector.h qoi_set.h sensitivity_data.h steady_system.h system.h system_norm.h system_subset.h system_subset_by_subdomain.h transient_system.h compare_types.h error_vector.h hashword.h ignore_warnings.h location_maps.h mapvector.h null_output_iterator.h number_lookups.h ostream_proxy.h parameters.h perf_log.h perfmon.h plt_loader.h point_locator_base.h point_locator_list.h point_locator_tree.h pool_allocator.h restore_warnings.h statistics.h string_to_enum.h timestamp.h tree.h tree_base.h tree_node.h utility.h xdr_cxx.h parallel_communicator_specializations
BUILT_SOURCES = auto_ptr.h dirichlet_boundaries.h dof_map.h dof_object.h factory.h getpot.h id_types.h libmesh.h libmesh_C_isnan.h libmesh_augment_std_namespace.h libmesh_base.h libmesh_common.h libmesh_documentation.h libmesh_exceptions.h libmesh_logging.h libmesh_version.h multi_predicates.h periodic_boundaries.h periodic_boundary.h periodic_boundary_base.h print_trace.h reference_counted_object.h reference_counter.h single_predicates.h sparsity_pattern.h variable.h variant_filter_iterator.h enum_eigen_solver_type.h enum_elem_quality.h enum_elem_type.h enum_fe_family.h enum_inf_map_type.h enum_io_package.h enum_norm_type.h enum_order.h enum_parallel_type.h enum_point_locator_type.h enum_preconditioner_type.h enum_quadrature_type.h enum_solver_package.h enum_solver_type.h enum_subset_solve_mode.h enum_xdr_mode.h adjoint_refinement_estimator.h adjoint_residual_error_estimator.h discontinuity_measure.h error_estimator.h exact_error_estimator.h exact_solution.h fourth_error_estimators.h hp_coarsentest.h hp_selector.h hp_singular.h jump_error_estimator.h kelly_error_estimator.h patch_recovery_error_estimator.h uniform_refinement_estimator.h weighted_patch_recovery_error_estimator.h fe.h fe_abstract.h fe_base.h fe_compute_data.h fe_interface.h fe_macro.h fe_map.h fe_transformation_base.h fe_type.h fe_xyz_map.h h1_fe_transformation.h hcurl_fe_transformation.h inf_fe.h inf_fe_instantiate_1D.h inf_fe_instantiate_2D.h inf_fe_instantiate_3D.h inf_fe_macro.h cell.h cell_hex.h cell_hex20.h cell_hex27.h cell_hex8.h cell_inf.h cell_inf_hex.h cell_inf_hex16.h cell_inf_hex18.h cell_inf_hex8.h cell_inf_prism.h cell_inf_prism12.h cell_inf_prism6.h cell_prism.h cell_prism15.h cell_prism18.h cell_prism6.h cell_pyramid.h cell_pyramid5.h cell_tet.h cell_tet10.h cell_tet4.h edge.h edge_edge2.h edge_edge3.h edge_edge4.h edge_inf_edge2.h elem.h elem_quality.h elem_range.h elem_type.h face.h face_inf_quad.h face_inf_quad4.h face_inf_quad6.h face_quad.h face_quad4.h face_quad8.h face_quad9.h face_tri.h face_tri3.h face_tri6.h node.h node_elem.h node_range.h plane.h point.h remote_elem.h side.h sphere.h stored_range.h surface.h abaqus_io.h boundary_info.h boundary_mesh.h diva_io.h ensight_io.h exodusII_io.h exodusII_io_helper.h fro_io.h gmsh_io.h gmv_io.h gnuplot_io.h inf_elem_builder.h legacy_xdr_io.h matlab_io.h medit_io.h mesh.h mesh_base.h mesh_communication.h mesh_data.h mesh_function.h mesh_generation.h mesh_input.h mesh_inserter_iterator.h mesh_modification.h mesh_output.h mesh_refinement.h mesh_serializer.h mesh_smoother.h mesh_smoother_laplace.h mesh_smoother_vsmoother.h mesh_tetgen_interface.h mesh_tetgen_wrapper.h mesh_tools.h mesh_triangle_holes.h mesh_triangle_interface.h mesh_triangle_wrapper.h nemesis_io.h nemesis_io_helper.h off_io.h parallel_mesh.h patch.h postscript_io.h serial_mesh.h tecplot_io.h tetgen_io.h ucd_io.h unstructured_mesh.h unv_io.h vtk_io.h xdr_head.h xdr_io.h xdr_mesh.h xdr_mgf.h xdr_mhead.h xdr_shead.h xdr_soln.h analytic_function.h const_fem_function.h const_function.h coupling_matrix.h dense_matrix.h dense_matrix_base.h dense_submatrix.h dense_subvector.h dense_vector.h dense_vector_base.h distributed_vector.h eigen_core_support.h eigen_preconditioner.h eigen_sparse_matrix.h eigen_sparse_vector.h fem_function_base.h function_base.h laspack_matrix.h laspack_vector.h numeric_vector.h parsed_function.h petsc_macro.h petsc_matrix.h petsc_preconditioner.h petsc_vector.h preconditioner.h raw_accessor.h refinement_selector.h shell_matrix.h sparse_matrix.h sparse_shell_matrix.h sum_shell_matrix.h tensor_shell_matrix.h tensor_tools.h tensor_value.h trilinos_epetra_matrix.h trilinos_epetra_vector.h trilinos_preconditioner.h type_n_tensor.h type_tensor.h type_vector.h vector_value.h wrapped_function.h zero_function.h parallel.h parallel_algebra.h parallel_bin_sorter.h parallel_conversion_utils.h parallel_ghost_sync.h parallel_hilbert.h parallel_histogram.h parallel_implementation.h parallel_sort.h threads.h threads_allocators.h centroid_partitioner.h hilbert_sfc_partitioner.h linear_partitioner.h metis_partitioner.h morton_sfc_partitioner.h parmetis_partitioner.h partitioner.h sfc_partitioner.h diff_physics.h diff_qoi.h fem_physics.h quadrature.h quadrature_clough.h quadrature_conical.h quadrature_gauss.h quadrature_gm.h quadrature_grid.h quadrature_jacobi.h quadrature_monomial.h quadrature_rules.h quadrature_simpson.h quadrature_trap.h derived_rb_construction.h derived_rb_evaluation.h rb_assembly_expansion.h rb_construction.h rb_construction_base.h rb_eim_assembly.h rb_eim_construction.h rb_eim_evaluation.h rb_eim_theta.h rb_evaluation.h rb_parameters.h rb_parametrized.h rb_parametrized_function.h rb_scm_construction.h rb_scm_evaluation.h rb_temporal_discretization.h rb_theta.h rb_theta_expansion.h transient_rb_assembly_expansion.h transient_rb_construction.h transient_rb_evaluation.h transient_rb_theta_expansion.h direct_solution_transfer.h dtk_adapter.h dtk_evaluator.h dtk_solution_transfer.h meshfree_interpolation.h meshfree_solution_transfer.h meshfunction_solution_transfer.h radial_basis_functions.h radial_basis_interpolation.h solution_transfer.h adaptive_time_solver.h diff_solver.h eigen_solver.h eigen_sparse_linear_solver.h eigen_time_solver.h euler2_solver.h euler_solver.h laspack_linear_solver.h linear.h linear_solver.h memory_solution_history.h newton_solver.h no_solution_history.h nonlinear_solver.h petsc_diff_solver.h petsc_dm_nonlinear_solver.h petsc_linear_solver.h petsc_nonlinear_solver.h petscdmlibmesh.h slepc_eigen_solver.h slepc_macro.h solution_history.h solver.h steady_solver.h time_solver.h trilinos_aztec_linear_solver.h trilinos_nox_nonlinear_solver.h twostep_time_solver.h unsteady_solver.h condensed_eigen_system.h continuation_system.h diff_context.h diff_system.h eigen_system.h elem_assembly.h equation_systems.h explicit_system.h fem_context.h fem_system.h frequency_system.h implicit_system.h linear_implicit_system.h newmark_system.h nonlinear_implicit_system.h parameter_vector.h qoi_set.h sensitivity_data.h steady_system.h system.h system_norm.h system_subset.h system_subset_by_subdomain.h transient_system.h compare_types.h error_vector.h hashword.h ignore_warnings.h location_maps.h mapvector.h null_output_iterator.h number_lookups.h ostream_proxy.h parameters.h perf_log.h perfmon.h plt_loader.h point_locator_base.h point_locator_list.h point_locator_tree.h pool_allocator.h restore_warnings.h statistics.h string_to_enum.h timestamp.h tree.h tree_base.h tree_node.h utility.h xdr_cxx.h parallel_communicator_specializations

DISTCLEANFILES = $(BUILT_SOURCES)

Expand Down Expand Up @@ -954,6 +954,12 @@ meshfree_solution_transfer.h: $(top_srcdir)/include/solution_transfer/meshfree_s
meshfunction_solution_transfer.h: $(top_srcdir)/include/solution_transfer/meshfunction_solution_transfer.h
$(AM_V_GEN)rm -f $@ && $(LN_S) $< $@

radial_basis_functions.h: $(top_srcdir)/include/solution_transfer/radial_basis_functions.h
$(AM_V_GEN)rm -f $@ && $(LN_S) $< $@

radial_basis_interpolation.h: $(top_srcdir)/include/solution_transfer/radial_basis_interpolation.h
$(AM_V_GEN)rm -f $@ && $(LN_S) $< $@

solution_transfer.h: $(top_srcdir)/include/solution_transfer/solution_transfer.h
$(AM_V_GEN)rm -f $@ && $(LN_S) $< $@

Expand Down
9 changes: 8 additions & 1 deletion include/libmesh/Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -510,7 +510,8 @@ BUILT_SOURCES = auto_ptr.h dirichlet_boundaries.h dof_map.h \
transient_rb_theta_expansion.h direct_solution_transfer.h \
dtk_adapter.h dtk_evaluator.h dtk_solution_transfer.h \
meshfree_interpolation.h meshfree_solution_transfer.h \
meshfunction_solution_transfer.h solution_transfer.h \
meshfunction_solution_transfer.h radial_basis_functions.h \
radial_basis_interpolation.h solution_transfer.h \
adaptive_time_solver.h diff_solver.h eigen_solver.h \
eigen_sparse_linear_solver.h eigen_time_solver.h \
euler2_solver.h euler_solver.h laspack_linear_solver.h \
Expand Down Expand Up @@ -1639,6 +1640,12 @@ meshfree_solution_transfer.h: $(top_srcdir)/include/solution_transfer/meshfree_s
meshfunction_solution_transfer.h: $(top_srcdir)/include/solution_transfer/meshfunction_solution_transfer.h
$(AM_V_GEN)rm -f $@ && $(LN_S) $< $@

radial_basis_functions.h: $(top_srcdir)/include/solution_transfer/radial_basis_functions.h
$(AM_V_GEN)rm -f $@ && $(LN_S) $< $@

radial_basis_interpolation.h: $(top_srcdir)/include/solution_transfer/radial_basis_interpolation.h
$(AM_V_GEN)rm -f $@ && $(LN_S) $< $@

solution_transfer.h: $(top_srcdir)/include/solution_transfer/solution_transfer.h
$(AM_V_GEN)rm -f $@ && $(LN_S) $< $@

Expand Down
12 changes: 6 additions & 6 deletions include/solution_transfer/meshfree_interpolation.h
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ class MeshfreeInterpolation
template <unsigned int KDDim>
class InverseDistanceInterpolation : public MeshfreeInterpolation
{
private:
protected:

#ifdef LIBMESH_HAVE_NANOFLANN
/**
Expand Down Expand Up @@ -292,16 +292,16 @@ class InverseDistanceInterpolation : public MeshfreeInterpolation
/**
* Build & initialize the KD tree, if needed.
*/
void construct_kd_tree ();
virtual void construct_kd_tree ();

/**
* Performs inverse distance interpolation at the input point from
* the specified points.
*/
void interpolate (const Point &pt,
const std::vector<size_t> &src_indices,
const std::vector<Real> &src_dist_sqr,
std::vector<Number>::iterator &out_it) const;
virtual void interpolate (const Point &pt,
const std::vector<size_t> &src_indices,
const std::vector<Real> &src_dist_sqr,
std::vector<Number>::iterator &out_it) const;

const Real _half_power;
const unsigned int _n_interp_pts;
Expand Down
32 changes: 32 additions & 0 deletions include/solution_transfer/radial_basis_functions.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// The libMesh Finite Element Library.
// Copyright (C) 2002-2012 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner

// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.

// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA



#ifndef LIBMESH_RADIAL_BASIS_FUNCTIONS_H
#define LIBMESH_RADIAL_BASIS_FUNCTIONS_H

// Local includes



namespace libMesh
{
} // namespace libMesh


#endif // #define LIBMESH_RADIAL_BASIS_FUNCTIONS_H
67 changes: 67 additions & 0 deletions include/solution_transfer/radial_basis_interpolation.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
// The libMesh Finite Element Library.
// Copyright (C) 2002-2012 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner

// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.

// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.

// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA



#ifndef LIBMESH_RADIAL_BASIS_INTERPOLATION_H
#define LIBMESH_RADIAL_BASIS_INTERPOLATION_H

// Local includes
#include "libmesh/libmesh_config.h"
#include "libmesh/libmesh_common.h"
#include "libmesh/meshfree_interpolation.h"



namespace libMesh
{
/**
* Radial Basis Function interplation.
*/
template <unsigned int KDDim>
class RadialBasisInterpolation : public InverseDistanceInterpolation<KDDim>
{

public:

/**
* Constructor.
*/
RadialBasisInterpolation () :
InverseDistanceInterpolation<KDDim> ()
{}

/**
* Clears all internal data structures and restores to a
* pristine state.
*/
virtual void clear();

/**
* Interpolate source data at target points.
* Pure virtual, must be overriden in derived classes.
*/
virtual void interpolate_field_data (const std::vector<std::string> &field_names,
const std::vector<Point> &tgt_pts,
std::vector<Number> &tgt_vals) const;

};

} // namespace libMesh


#endif // #define LIBMESH_RADIAL_BASIS_INTERPOLATION_H
Loading

0 comments on commit 7e0aebd

Please sign in to comment.