fitpack
Modern Fortran library for curve and surface fitting with splines
Loading...
Searching...
No Matches
fpGridPolar.hpp
Go to the documentation of this file.
1/***************************************************************************************************
2! ____________________ ___ ________ __
3! / ____/ _/_ __/ __ \/ | / ____/ //_/
4! / /_ / / / / / /_/ / /| |/ / / ,<
5! / __/ _/ / / / / ____/ ___ / /___/ /| |
6! /_/ /___/ /_/ /_/ /_/ |_\____/_/ |_|
7!
8! A Curve Fitting Package
9!
10! fpGridPolar.hpp (class fpGridPolar)
11!> @brief Standalone C++ wrapper for fitpack_grid_polar (no fortran-arrays dependency)
12!
13! @author Federico Perini
14! @date 2026-08-27
15!
16! References :
17! - C. De Boor, "On calculating with b-splines", J Approx Theory 6 (1972) 50-62
18! - M. G. Cox, "The numerical evaluation of b-splines", J Inst Maths Applics 10 (1972) 134-149
19! - P. Dierckx, "Curve and surface fitting with splines", Monographs on numerical analysis,
20! Oxford university press, 1993.
21!
22! **************************************************************************************************/
23
24#ifndef FPGRIDPOLAR_HPP_INCLUDED
25#define FPGRIDPOLAR_HPP_INCLUDED
26
27#include "fitpack_config.h"
28
29#if HAVE_FXARRAY
30#include "fxArrays.hpp"
31#endif
32
33#include "fitpack_grid_polar_c.h"
34#include "fpFitter.hpp"
35#include <string>
36#include <vector>
37#include <cstdint>
38#include <memory>
39#include <stdexcept>
40#include <variant>
41#include <optional>
42#include <array>
43
44static_assert(sizeof(fitpack_grid_polar_c) == sizeof(fitpack_fitter_c),
45 "C descriptor layout mismatch: fitpack_grid_polar_c vs fitpack_fitter_c");
46
55class fpGridPolar : public fpFitter {
56public:
57 // ===========================================================================================
58 // Constructors and Destructor
59 // ===========================================================================================
60
65 fitpack_grid_polar_c_allocate(as<fitpack_grid_polar_c>(), nullptr);
66 }
67
71 ~fpGridPolar() override {
72 fitpack_grid_polar_c_destroy(as<fitpack_grid_polar_c>(), nullptr);
73 }
74
79 *as<fitpack_grid_polar_c>() = fitpack_grid_polar_c_null;
80 fitpack_grid_polar_c_copy(as<fitpack_grid_polar_c>(), other.as<fitpack_grid_polar_c>(), false, nullptr);
81 }
82
87 if (this != &other) {
88 fitpack_grid_polar_c_destroy(as<fitpack_grid_polar_c>(), nullptr);
89 fitpack_grid_polar_c_copy(as<fitpack_grid_polar_c>(), other.as<fitpack_grid_polar_c>(), false, nullptr);
90 }
91 return *this;
92 }
93
97 fpGridPolar(fpGridPolar&& other) noexcept : fpFitter(NoAlloc{}) {
98 *as<fitpack_grid_polar_c>() = fitpack_grid_polar_c_null;
99 fitpack_grid_polar_c_move_alloc(as<fitpack_grid_polar_c>(), other.as<fitpack_grid_polar_c>(), nullptr);
100 }
101
105 fpGridPolar& operator=(fpGridPolar&& other) noexcept {
106 if (this != &other) {
107 fitpack_grid_polar_c_destroy(as<fitpack_grid_polar_c>(), nullptr);
108 fitpack_grid_polar_c_move_alloc(as<fitpack_grid_polar_c>(), other.as<fitpack_grid_polar_c>(), nullptr);
109 }
110 return *this;
111 }
112
116 explicit fpGridPolar(fitpack_grid_polar_c& c_wrapper, bool move = false) : fpFitter(NoAlloc{}) {
117 if (move) {
118 fitpack_grid_polar_c_move_alloc(as<fitpack_grid_polar_c>(), &c_wrapper, nullptr);
119 } else {
120 *as<fitpack_grid_polar_c>() = fitpack_grid_polar_c_null;
121 fitpack_grid_polar_c_copy(as<fitpack_grid_polar_c>(), &c_wrapper, false, nullptr);
122 }
123 }
124
130 explicit fpGridPolar(fitpack_grid_polar_c& c_wrapper, ViewTag) : fpFitter(NoAlloc{}) {
131 *as<fitpack_grid_polar_c>() = c_wrapper;
132 as<fitpack_grid_polar_c>()->is_pointer = true;
133 }
134
135 // ===========================================================================================
136 // Utility Methods
137 // ===========================================================================================
138
142 bool is_allocated() const override {
143 return as<fitpack_grid_polar_c>()->cptr != nullptr;
144 }
145
149 bool is_pointer() const override {
150 return as<fitpack_grid_polar_c>()->is_pointer;
151 }
152
156 const char* c_type_name() const override {
157 return fitpack_grid_polar_c_c_type_name(*as<fitpack_grid_polar_c>());
158 }
159
164 const char* cpp_type_name() const override {
165 return "fpGridPolar";
166 }
167
171 fitpack_grid_polar_c& c_handle() {
172 return *as<fitpack_grid_polar_c>();
173 }
174
178 const fitpack_grid_polar_c& c_handle() const {
179 return *as<fitpack_grid_polar_c>();
180 }
181
191 return fpGridPolar(NoAlloc{});
192 }
193
198 return static_cast<fpFitter&>(*this);
199 }
200 const fpFitter& as_parent() const {
201 return static_cast<const fpFitter&>(*this);
202 }
203
204 // ===========================================================================================
205 // Method Wrappers (standalone — no fxArray dependency)
206 // ===========================================================================================
207
211 virtual void new_points(std::vector<double>& u, std::vector<double>& v, double r, int32_t z_n1, int32_t z_n2, std::vector<double>& z, double* z0 = nullptr) {
212 int32_t n = static_cast<int32_t>(u.size());
213 fitpack_grid_polar_c_new_points(as<fitpack_grid_polar_c>(), n, u.data(), v.data(), r, z_n1, z_n2, z.data(), z0);
214 }
215
216
220 virtual int32_t new_fit(std::vector<double>& u, std::vector<double>& v, double r, int32_t z_n1, int32_t z_n2, std::vector<double>& z, double* z0 = nullptr, double* smoothing = nullptr) {
221 int32_t n = static_cast<int32_t>(u.size());
222 return fitpack_grid_polar_c_new_fit(as<fitpack_grid_polar_c>(), n, u.data(), v.data(), r, z_n1, z_n2, z.data(), z0, smoothing);
223 }
224
225
226 virtual void set_origin_BC(double* z0 = nullptr, bool* exact = nullptr, bool* differentiable = nullptr) {
227 fitpack_grid_polar_c_set_origin_BC(as<fitpack_grid_polar_c>(), z0, exact, differentiable);
228 }
229
230 virtual int32_t fit(double* smoothing = nullptr, bool* keep_knots = nullptr) {
231 return fitpack_grid_polar_c_fit(as<fitpack_grid_polar_c>(), smoothing, keep_knots);
232 }
233
234 virtual int32_t least_squares(double* smoothing = nullptr, bool* reset_knots = nullptr) {
235 return fitpack_grid_polar_c_least_squares(as<fitpack_grid_polar_c>(), smoothing, reset_knots);
236 }
237
238 virtual int32_t interpolate(bool* reset_knots = nullptr) {
239 return fitpack_grid_polar_c_interpolate(as<fitpack_grid_polar_c>(), reset_knots);
240 }
241
242 virtual double eval(double u, double v, int32_t* ierr = nullptr) {
243 return fitpack_grid_polar_c_gridded_eval_one(as<fitpack_grid_polar_c>(), u, v, ierr);
244 }
245
249 virtual std::vector<double> eval(std::vector<double>& u, std::vector<double>& v, int32_t* ierr = nullptr) {
250 int32_t n = static_cast<int32_t>(u.size());
251 std::vector<double> result(n * n);
252 int32_t n_result = 0;
253 fitpack_grid_polar_c_gridded_eval_many(as<fitpack_grid_polar_c>(), n, u.data(), v.data(), ierr, result.data(), &n_result, n * n);
254 result.resize(n_result);
255 return result;
256 }
257
258
259 int32_t comm_size() const override {
260 return fitpack_grid_polar_c_comm_size(as<fitpack_grid_polar_c>());
261 }
262
266 void comm_pack(std::vector<double>& buffer) const override {
267 int32_t n = static_cast<int32_t>(buffer.size());
268 fitpack_grid_polar_c_comm_pack(as<fitpack_grid_polar_c>(), n, buffer.data());
269 }
270
271
275 void comm_expand(std::vector<double>& buffer) override {
276 int32_t n = static_cast<int32_t>(buffer.size());
277 fitpack_grid_polar_c_comm_expand(as<fitpack_grid_polar_c>(), n, buffer.data());
278 }
279
280
281 virtual void write(const char* filename) {
282 fitpack_grid_polar_c_write(as<fitpack_grid_polar_c>(), filename);
283 }
284
285 double mse() const override {
286 return fitpack_grid_polar_c_mse(as<fitpack_grid_polar_c>());
287 }
288
289 int32_t core_comm_size() const override {
290 return fitpack_grid_polar_c_core_comm_size(as<fitpack_grid_polar_c>());
291 }
292
296 void core_comm_pack(std::vector<double>& buffer) const override {
297 int32_t n = static_cast<int32_t>(buffer.size());
298 fitpack_grid_polar_c_core_comm_pack(as<fitpack_grid_polar_c>(), n, buffer.data());
299 }
300
301
305 void core_comm_expand(std::vector<double>& buffer) override {
306 int32_t n = static_cast<int32_t>(buffer.size());
307 fitpack_grid_polar_c_core_comm_expand(as<fitpack_grid_polar_c>(), n, buffer.data());
308 }
309
310
311 void destroy_base() override {
312 fitpack_grid_polar_c_destroy_base(as<fitpack_grid_polar_c>());
313 }
314
315 // ===========================================================================================
316 // Component Array Accessors
317 // ===========================================================================================
318
323 std::vector<double> u_vector() const {
324 double* raw = nullptr;
325 int64_t extents[1] = {0};
326 fitpack_grid_polar_c_getcomp_u(as<fitpack_grid_polar_c>(), &raw, extents);
327 const int64_t total = extents[0];
328 if (raw == nullptr || total <= 0) return {};
329 const double* first = reinterpret_cast<const double*>(raw);
330 return std::vector<double>(first, first + total);
331 }
332
333#if HAVE_FXARRAY
346 fxArray<double> u() const {
347 double* raw = nullptr;
348 int64_t extents[1] = {0};
349 fitpack_grid_polar_c_getcomp_u(as<fitpack_grid_polar_c>(), &raw, extents);
350 FX_SIZE bounds[2]; // (lower, upper) per dimension, Fortran lbound 1
351 for (int k = 0; k < 1; ++k) {
352 bounds[2 * k] = 1;
353 bounds[2 * k + 1] = static_cast<FX_SIZE>(extents[k]);
354 }
355 array_c descr = array_c_null;
356 array_c_from_ptr(&descr, "u", static_cast<void*>(raw),
357 getCFITypeFlag<double>(),
358 static_cast<FX_SIZE>(sizeof(double)),
359 static_cast<FX_RANK>(1), bounds);
360 return fxArray<double>(descr);
361 }
362#endif // HAVE_FXARRAY
363
368 std::vector<double> v_vector() const {
369 double* raw = nullptr;
370 int64_t extents[1] = {0};
371 fitpack_grid_polar_c_getcomp_v(as<fitpack_grid_polar_c>(), &raw, extents);
372 const int64_t total = extents[0];
373 if (raw == nullptr || total <= 0) return {};
374 const double* first = reinterpret_cast<const double*>(raw);
375 return std::vector<double>(first, first + total);
376 }
377
378#if HAVE_FXARRAY
391 fxArray<double> v() const {
392 double* raw = nullptr;
393 int64_t extents[1] = {0};
394 fitpack_grid_polar_c_getcomp_v(as<fitpack_grid_polar_c>(), &raw, extents);
395 FX_SIZE bounds[2]; // (lower, upper) per dimension, Fortran lbound 1
396 for (int k = 0; k < 1; ++k) {
397 bounds[2 * k] = 1;
398 bounds[2 * k + 1] = static_cast<FX_SIZE>(extents[k]);
399 }
400 array_c descr = array_c_null;
401 array_c_from_ptr(&descr, "v", static_cast<void*>(raw),
402 getCFITypeFlag<double>(),
403 static_cast<FX_SIZE>(sizeof(double)),
404 static_cast<FX_RANK>(1), bounds);
405 return fxArray<double>(descr);
406 }
407#endif // HAVE_FXARRAY
408
417 std::vector<double> z_vector() const {
418 double* raw = nullptr;
419 int64_t extents[2] = {0, 0};
420 fitpack_grid_polar_c_getcomp_z(as<fitpack_grid_polar_c>(), &raw, extents);
421 const int64_t total = extents[0] * extents[1];
422 if (raw == nullptr || total <= 0) return {};
423 const double* first = reinterpret_cast<const double*>(raw);
424 return std::vector<double>(first, first + total);
425 }
426
431 std::array<int64_t, 2> z_shape() const {
432 double* raw = nullptr;
433 int64_t extents[2] = {0, 0};
434 fitpack_grid_polar_c_getcomp_z(as<fitpack_grid_polar_c>(), &raw, extents);
435 return { extents[0], extents[1] };
436 }
437
438#if HAVE_FXARRAY
451 fxArray<double> z() const {
452 double* raw = nullptr;
453 int64_t extents[2] = {0, 0};
454 fitpack_grid_polar_c_getcomp_z(as<fitpack_grid_polar_c>(), &raw, extents);
455 FX_SIZE bounds[4]; // (lower, upper) per dimension, Fortran lbound 1
456 for (int k = 0; k < 2; ++k) {
457 bounds[2 * k] = 1;
458 bounds[2 * k + 1] = static_cast<FX_SIZE>(extents[k]);
459 }
460 array_c descr = array_c_null;
461 array_c_from_ptr(&descr, "z", static_cast<void*>(raw),
462 getCFITypeFlag<double>(),
463 static_cast<FX_SIZE>(sizeof(double)),
464 static_cast<FX_RANK>(2), bounds);
465 return fxArray<double>(descr);
466 }
467#endif // HAVE_FXARRAY
468
477 std::vector<double> t_vector() const {
478 double* raw = nullptr;
479 int64_t extents[2] = {0, 0};
480 fitpack_grid_polar_c_getcomp_t(as<fitpack_grid_polar_c>(), &raw, extents);
481 const int64_t total = extents[0] * extents[1];
482 if (raw == nullptr || total <= 0) return {};
483 const double* first = reinterpret_cast<const double*>(raw);
484 return std::vector<double>(first, first + total);
485 }
486
491 std::array<int64_t, 2> t_shape() const {
492 double* raw = nullptr;
493 int64_t extents[2] = {0, 0};
494 fitpack_grid_polar_c_getcomp_t(as<fitpack_grid_polar_c>(), &raw, extents);
495 return { extents[0], extents[1] };
496 }
497
498#if HAVE_FXARRAY
511 fxArray<double> t() const {
512 double* raw = nullptr;
513 int64_t extents[2] = {0, 0};
514 fitpack_grid_polar_c_getcomp_t(as<fitpack_grid_polar_c>(), &raw, extents);
515 FX_SIZE bounds[4]; // (lower, upper) per dimension, Fortran lbound 1
516 for (int k = 0; k < 2; ++k) {
517 bounds[2 * k] = 1;
518 bounds[2 * k + 1] = static_cast<FX_SIZE>(extents[k]);
519 }
520 array_c descr = array_c_null;
521 array_c_from_ptr(&descr, "t", static_cast<void*>(raw),
522 getCFITypeFlag<double>(),
523 static_cast<FX_SIZE>(sizeof(double)),
524 static_cast<FX_RANK>(2), bounds);
525 return fxArray<double>(descr);
526 }
527#endif // HAVE_FXARRAY
528
529 // ===========================================================================================
530 // Scalar Property Accessors
531 // ===========================================================================================
532
533 double& r() {
534 return *fitpack_grid_polar_c_ref_r(as<fitpack_grid_polar_c>());
535 }
536 const double& r() const {
537 return *fitpack_grid_polar_c_ref_r(as<fitpack_grid_polar_c>());
538 }
539
540 double& z0() {
541 return *fitpack_grid_polar_c_ref_z0(as<fitpack_grid_polar_c>());
542 }
543 const double& z0() const {
544 return *fitpack_grid_polar_c_ref_z0(as<fitpack_grid_polar_c>());
545 }
546
547 bool z0_present() const {
548 return fitpack_grid_polar_c_get_z0_present(as<fitpack_grid_polar_c>());
549 }
550 void set_z0_present(bool value) {
551 fitpack_grid_polar_c_set_z0_present(as<fitpack_grid_polar_c>(), value);
552 }
553
554 bool z0_exact() const {
555 return fitpack_grid_polar_c_get_z0_exact(as<fitpack_grid_polar_c>());
556 }
557 void set_z0_exact(bool value) {
558 fitpack_grid_polar_c_set_z0_exact(as<fitpack_grid_polar_c>(), value);
559 }
560
561 bool z0_zero_gradient() const {
562 return fitpack_grid_polar_c_get_z0_zero_gradient(as<fitpack_grid_polar_c>());
563 }
564 void set_z0_zero_gradient(bool value) {
565 fitpack_grid_polar_c_set_z0_zero_gradient(as<fitpack_grid_polar_c>(), value);
566 }
567
568 int32_t& nmax() {
569 return *fitpack_grid_polar_c_ref_nmax(as<fitpack_grid_polar_c>());
570 }
571 const int32_t& nmax() const {
572 return *fitpack_grid_polar_c_ref_nmax(as<fitpack_grid_polar_c>());
573 }
574
576 return *fitpack_grid_polar_c_ref_bc_continuity_origin(as<fitpack_grid_polar_c>());
577 }
578 const int32_t& bc_continuity_origin() const {
579 return *fitpack_grid_polar_c_ref_bc_continuity_origin(as<fitpack_grid_polar_c>());
580 }
581
582 int32_t& bc_boundary() {
583 return *fitpack_grid_polar_c_ref_bc_boundary(as<fitpack_grid_polar_c>());
584 }
585 const int32_t& bc_boundary() const {
586 return *fitpack_grid_polar_c_ref_bc_boundary(as<fitpack_grid_polar_c>());
587 }
588
589protected:
590 explicit fpGridPolar(NoAlloc tag) : fpFitter(tag) {}
591
592};
593
594#endif /* FPGRIDPOLAR_HPP_INCLUDED */
double & smoothing()
Definition fpFitter.hpp:317
fpFitter(NoAlloc)
Protected constructor for derived classes (does not allocate)
Definition fpFitter.hpp:354
T * as()
Definition fpFitter.hpp:360
fpGridPolar(fitpack_grid_polar_c &c_wrapper, ViewTag)
Non-owning view ctor: bit-copy the C handle, mark is_pointer=true. Used by parent classes' polymorphi...
Definition fpGridPolar.hpp:130
fxArray< double > z() const
Zero-copy fxArray view of component 'z'.
Definition fpGridPolar.hpp:451
fpGridPolar & operator=(const fpGridPolar &other)
Copy assignment - deep copy.
Definition fpGridPolar.hpp:86
double & r()
Definition fpGridPolar.hpp:533
int32_t & bc_continuity_origin()
Definition fpGridPolar.hpp:575
int32_t & bc_boundary()
Definition fpGridPolar.hpp:582
void set_z0_present(bool value)
Definition fpGridPolar.hpp:550
std::vector< double > v_vector() const
Deep copy of component 'v' as a std::vector.
Definition fpGridPolar.hpp:368
void comm_expand(std::vector< double > &buffer) override
comm_expand
Definition fpGridPolar.hpp:275
fpFitter & as_parent()
Upcast to parent type (reference, no copy)
Definition fpGridPolar.hpp:197
double mse() const override
Definition fpGridPolar.hpp:285
virtual double eval(double u, double v, int32_t *ierr=nullptr)
Definition fpGridPolar.hpp:242
const int32_t & nmax() const
Definition fpGridPolar.hpp:571
const int32_t & bc_boundary() const
Definition fpGridPolar.hpp:585
fxArray< double > t() const
Zero-copy fxArray view of component 't'.
Definition fpGridPolar.hpp:511
void set_z0_zero_gradient(bool value)
Definition fpGridPolar.hpp:564
virtual int32_t least_squares(double *smoothing=nullptr, bool *reset_knots=nullptr)
Definition fpGridPolar.hpp:234
virtual int32_t interpolate(bool *reset_knots=nullptr)
Definition fpGridPolar.hpp:238
virtual int32_t new_fit(std::vector< double > &u, std::vector< double > &v, double r, int32_t z_n1, int32_t z_n2, std::vector< double > &z, double *z0=nullptr, double *smoothing=nullptr)
new_fit
Definition fpGridPolar.hpp:220
std::array< int64_t, 2 > z_shape() const
Extents of component 'z', leading dimension first.
Definition fpGridPolar.hpp:431
virtual int32_t fit(double *smoothing=nullptr, bool *keep_knots=nullptr)
Definition fpGridPolar.hpp:230
static fpGridPolar make_view()
Construct an empty (non-owning) wrapper, for use as a view target.
Definition fpGridPolar.hpp:190
double & z0()
Definition fpGridPolar.hpp:540
fpGridPolar()
Default constructor - allocates new fitpack_grid_polar.
Definition fpGridPolar.hpp:64
fpGridPolar(fpGridPolar &&other) noexcept
Move constructor - transfer ownership.
Definition fpGridPolar.hpp:97
int32_t & nmax()
Definition fpGridPolar.hpp:568
bool is_allocated() const override
Check if object is allocated.
Definition fpGridPolar.hpp:142
virtual void write(const char *filename)
Definition fpGridPolar.hpp:281
void destroy_base() override
Definition fpGridPolar.hpp:311
virtual std::vector< double > eval(std::vector< double > &u, std::vector< double > &v, int32_t *ierr=nullptr)
eval
Definition fpGridPolar.hpp:249
fxArray< double > u() const
Zero-copy fxArray view of component 'u'.
Definition fpGridPolar.hpp:346
void core_comm_pack(std::vector< double > &buffer) const override
core_comm_pack
Definition fpGridPolar.hpp:296
const fpFitter & as_parent() const
Definition fpGridPolar.hpp:200
fpGridPolar(NoAlloc tag)
Definition fpGridPolar.hpp:590
virtual void set_origin_BC(double *z0=nullptr, bool *exact=nullptr, bool *differentiable=nullptr)
Definition fpGridPolar.hpp:226
const fitpack_grid_polar_c & c_handle() const
Get underlying C wrapper (const, for interop)
Definition fpGridPolar.hpp:178
const char * c_type_name() const override
Return the C wrapper struct name for this class (e.g. "fitpack_grid_polar_c").
Definition fpGridPolar.hpp:156
std::array< int64_t, 2 > t_shape() const
Extents of component 't', leading dimension first.
Definition fpGridPolar.hpp:491
bool is_pointer() const override
Check if this is a non-owning pointer.
Definition fpGridPolar.hpp:149
const char * cpp_type_name() const override
Return the fully-qualified C++ class name for this class. Owned by the C++ layer — does not round-tri...
Definition fpGridPolar.hpp:164
std::vector< double > t_vector() const
Deep copy of component 't' as a std::vector.
Definition fpGridPolar.hpp:477
fitpack_grid_polar_c & c_handle()
Get underlying C wrapper (for interop)
Definition fpGridPolar.hpp:171
fpGridPolar(fitpack_grid_polar_c &c_wrapper, bool move=false)
Construct from existing C wrapper (takes ownership if move=true)
Definition fpGridPolar.hpp:116
fpGridPolar & operator=(fpGridPolar &&other) noexcept
Move assignment - transfer ownership.
Definition fpGridPolar.hpp:105
void set_z0_exact(bool value)
Definition fpGridPolar.hpp:557
bool z0_exact() const
Definition fpGridPolar.hpp:554
void comm_pack(std::vector< double > &buffer) const override
comm_pack
Definition fpGridPolar.hpp:266
std::vector< double > z_vector() const
Deep copy of component 'z' as a std::vector.
Definition fpGridPolar.hpp:417
std::vector< double > u_vector() const
Deep copy of component 'u' as a std::vector.
Definition fpGridPolar.hpp:323
int32_t comm_size() const override
Definition fpGridPolar.hpp:259
void core_comm_expand(std::vector< double > &buffer) override
core_comm_expand
Definition fpGridPolar.hpp:305
const double & r() const
Definition fpGridPolar.hpp:536
const double & z0() const
Definition fpGridPolar.hpp:543
const int32_t & bc_continuity_origin() const
Definition fpGridPolar.hpp:578
bool z0_present() const
Definition fpGridPolar.hpp:547
int32_t core_comm_size() const override
Definition fpGridPolar.hpp:289
virtual void new_points(std::vector< double > &u, std::vector< double > &v, double r, int32_t z_n1, int32_t z_n2, std::vector< double > &z, double *z0=nullptr)
new_points
Definition fpGridPolar.hpp:211
bool z0_zero_gradient() const
Definition fpGridPolar.hpp:561
fxArray< double > v() const
Zero-copy fxArray view of component 'v'.
Definition fpGridPolar.hpp:391
~fpGridPolar() override
Destructor - deallocates if owned.
Definition fpGridPolar.hpp:71
fpGridPolar(const fpGridPolar &other)
Copy constructor - deep copy.
Definition fpGridPolar.hpp:78
Tag type for derived class constructors (no allocation)
Definition fpFitter.hpp:349
Tag type for non-owning view constructors of polymorphic concrete subtypes. Declared on roots and abs...
Definition fpFitter.hpp:103