OGS
BaseLib::GradualSubdivisionFixedNum Class Reference

Detailed Description

Gradual subdivision operator with a constant multiplier_.

In this class the number of subdivisions is known a priori.

Definition at line 90 of file Subdivision.h.

#include <Subdivision.h>

Inheritance diagram for BaseLib::GradualSubdivisionFixedNum:
[legend]
Collaboration diagram for BaseLib::GradualSubdivisionFixedNum:
[legend]

Public Member Functions

 GradualSubdivisionFixedNum (const double L, const std::size_t num_subdivisions, const double multiplier)
std::vector< double > operator() () const override
 Returns a vector of subdivided points.
Public Member Functions inherited from BaseLib::ISubdivision
virtual ~ISubdivision ()=default

Private Attributes

const double length_
const std::size_t num_subdivisions_
const double multiplier_

Constructor & Destructor Documentation

◆ GradualSubdivisionFixedNum()

BaseLib::GradualSubdivisionFixedNum::GradualSubdivisionFixedNum ( const double L,
const std::size_t num_subdivisions,
const double multiplier )

Constructor

Parameters
Ltotal length to be subdivided
num_subdivisionsnumber of subdivisions to generate
multipliermultiplier to cell length

Definition at line 61 of file Subdivision.cpp.

63 : length_{L}, num_subdivisions_{num_subdivisions}, multiplier_{multiplier}
64{
65}

References length_, multiplier_, and num_subdivisions_.

Member Function Documentation

◆ operator()()

std::vector< double > BaseLib::GradualSubdivisionFixedNum::operator() ( ) const
overridevirtual

Returns a vector of subdivided points.

Implements BaseLib::ISubdivision.

Definition at line 67 of file Subdivision.cpp.

68{
69 std::vector<double> subdivisions;
70 subdivisions.reserve(num_subdivisions_ + 1);
71 subdivisions.push_back(0.0);
72 auto const q = multiplier_;
73
74 if (q == 1.0)
75 {
76 double const dx = length_ / num_subdivisions_;
77
78 for (std::size_t i = 1; i < num_subdivisions_; ++i)
79 {
80 subdivisions.push_back(dx * i);
81 }
82 }
83 else
84 {
85 // compute initial subdivision size
86 auto const a =
87 length_ * (q - 1.0) / (std::pow(q, num_subdivisions_) - 1.0);
88
89 double qi = q; // q^i
90 for (std::size_t i = 1; i < num_subdivisions_; ++i)
91 {
92 subdivisions.push_back(a * (qi - 1.0) / (q - 1.0));
93 qi *= q;
94 }
95 }
96
97 subdivisions.push_back(length_);
98
99 return subdivisions;
100}

References length_, multiplier_, and num_subdivisions_.

Member Data Documentation

◆ length_

const double BaseLib::GradualSubdivisionFixedNum::length_
private

Definition at line 107 of file Subdivision.h.

Referenced by GradualSubdivisionFixedNum(), and operator()().

◆ multiplier_

const double BaseLib::GradualSubdivisionFixedNum::multiplier_
private

Definition at line 109 of file Subdivision.h.

Referenced by GradualSubdivisionFixedNum(), and operator()().

◆ num_subdivisions_

const std::size_t BaseLib::GradualSubdivisionFixedNum::num_subdivisions_
private

Definition at line 108 of file Subdivision.h.

Referenced by GradualSubdivisionFixedNum(), and operator()().


The documentation for this class was generated from the following files: