-// Copyright (C) 2007-2012 CEA/DEN, EDF R&D
+// Copyright (C) 2007-2016 CEA/DEN, EDF R&D
//
// 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.
+// 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
#define __INTERPOLATIONOPTIONS_HXX__
#include "INTERPKERNELDefines.hxx"
+#include "NormalizedUnstructuredMesh.hxx"
#include <string>
namespace INTERP_KERNEL
{
- typedef enum { Triangulation, Convex, Geometric2D, PointLocator } IntersectionType;
- /// Type describing the different ways in which the hexahedron can be split into tetrahedra.
- /// The PLANAR_* policies persume that each face is to be considered planar, while the general
- /// policies make no such hypothesis. The integer at the end gives the number of tetrahedra
- /// that result from the split.
- typedef enum { PLANAR_FACE_5 = 5, PLANAR_FACE_6 = 6, GENERAL_24 = 24, GENERAL_48 = 48 } SplittingPolicy;
+ typedef enum { Triangulation, Convex, Geometric2D, PointLocator, Barycentric, BarycentricGeo2D, MappedBarycentric } IntersectionType;
/*!
- * \class InterpolationOptions
- * Class defining the options for all interpolation algorithms.
+ * Class defining the options for all interpolation algorithms used in the \ref remapper "remapper" and
+ * in some of the \ref para-dec "DECs".
*
* List of options, possible values and default values can be found on this page:
* \ref InterpKerIntersectors
//! this measure is absolute \b not relative to the cell size
double _bounding_box_adjustment_abs ;
double _max_distance_for_3Dsurf_intersect;
+ double _min_dot_btw_3Dsurf_intersect;
int _orientation ;
bool _measure_abs;
SplittingPolicy _splitting_policy ;
- bool _P1P0_bary_method; // issue 0020440
-
public:
InterpolationOptions() { init(); }
int getPrintLevel() const { return _print_level; }
double getPrecision() const { return _precision; }
void setPrecision(double p) { _precision=p; }
+ double getArcDetectionPrecision() const;
+ void setArcDetectionPrecision(double p);
+
double getMedianPlane() const { return _median_plane; }
void setMedianPlane(double mp) { _median_plane=mp; }
double getMaxDistance3DSurfIntersect() const { return _max_distance_for_3Dsurf_intersect; }
void setMaxDistance3DSurfIntersect(double bba) { _max_distance_for_3Dsurf_intersect=bba; }
+ double getMinDotBtwPlane3DSurfIntersect() const { return _min_dot_btw_3Dsurf_intersect; }
+ void setMinDotBtwPlane3DSurfIntersect(double v) { _min_dot_btw_3Dsurf_intersect=v; }
+
int getOrientation() const { return _orientation; }
void setOrientation(int o) { _orientation=o; }
void setSplittingPolicy(SplittingPolicy sp) { _splitting_policy=sp; }
std::string getSplittingPolicyRepr() const;
- void setP1P0BaryMethod(bool isP1P0) { _P1P0_bary_method=isP1P0; }
- bool getP1P0BaryMethod() const { return _P1P0_bary_method; }
-
std::string filterInterpolationMethod(const std::string& meth) const;
- void init()
- {
- _print_level=0;
- _intersection_type=Triangulation;
- _precision=1e-12;
- _median_plane=DFT_MEDIAN_PLANE;
- _do_rotate=true;
- _bounding_box_adjustment=DFT_SURF3D_ADJ_EPS;
- _bounding_box_adjustment_abs=0.;
- _max_distance_for_3Dsurf_intersect=DFT_MAX_DIST_3DSURF_INTERSECT;
- _orientation=0;
- _measure_abs=true;
- _splitting_policy=GENERAL_48;
- _P1P0_bary_method=false;
- }
+ void init();
+
bool setInterpolationOptions(long print_level,
std::string intersection_type,
double precision,
double max_distance_for_3Dsurf_intersect,
long orientation,
bool measure_abs,
- std::string splitting_policy,
- bool P1P0_bary_method );
+ std::string splitting_policy);
void copyOptions(const InterpolationOptions & other) { *this = other; }
bool setOptionDouble(const std::string& key, double value);
bool setOptionInt(const std::string& key, int value);
bool setOptionString(const std::string& key, const std::string& value);
std::string printOptions() const;
+ public:
+ static void CheckAndSplitInterpolationMethod(const std::string& method, std::string& srcMeth, std::string& trgMeth);
private:
static const double DFT_MEDIAN_PLANE;
static const double DFT_SURF3D_ADJ_EPS;
static const double DFT_MAX_DIST_3DSURF_INTERSECT;
+ static const double DFT_MIN_DOT_BTW_3DSURF_INTERSECT;
public:
static const char PRECISION_STR[];
+ static const char ARC_DETECTION_PRECISION_STR[];
static const char MEDIANE_PLANE_STR[];
static const char BOUNDING_BOX_ADJ_STR[];
static const char BOUNDING_BOX_ADJ_ABS_STR[];
static const char MAX_DISTANCE_3DSURF_INSECT_STR[];
+ static const char MIN_DOT_BTW_3DSURF_INSECT_STR[];
static const char PRINT_LEV_STR[];
static const char DO_ROTATE_STR[];
static const char ORIENTATION_STR[];
static const char CONVEX_INTERSECT2D_STR[];
static const char GEOMETRIC_INTERSECT2D_STR[];
static const char POINTLOCATOR_INTERSECT_STR[];
+ static const char BARYCENTRIC_INTERSECT_STR[];
+ static const char BARYCENTRICGEO2D_INTERSECT_STR[];
static const char PLANAR_SPLIT_FACE_5_STR[];
static const char PLANAR_SPLIT_FACE_6_STR[];
static const char GENERAL_SPLIT_24_STR[];