51#include "MR_rect_tree.hpp"
52#include "MR_cell_cplx.hpp"
53#include "MR_rt_to_cc.hpp"
57typedef mjr::tree15b2d9rT tt_t;
58typedef mjr::MRccT5 cc_t;
59typedef mjr::MR_rt_to_cc<tt_t, cc_t> tc_t;
60typedef mjr::color3c64F ct_t;
63tt_t::rrpt_t cpf(tt_t::drpt_t xvec) {
64 std::complex<double> z(xvec[0], xvec[1]);
65 double z_abs, z_arg, f_re, f_im, f_abs, f_arg, red, green, blue;
70 if ( (std::abs(z-1.0) > 1.0e-5) && (std::abs(z+1.0) > 1.0e-5) ) {
71 std::complex<double>
f;
72 f = 1.0/(z+1.0) + 1.0/(z-1.0);
77 ct_t c = ct_t::cs2dIdxPalArg<ct_t::csCColdeRainbow, 3, 5.0, 20.0, 2.0, 1>::c(
f);
82 f_re = f_im = f_abs = f_arg = red = green = blue = std::numeric_limits<double>::quiet_NaN();
85 return {z_abs, z_arg, f_re, f_im, f_abs, f_arg, red, green, blue};
89tt_t::src_t cpfd(tt_t::drpt_t xvec) {
91 double cut_for_z = 3.5;
94 if(std::isnan(fv[idx_for_z]))
97 return fv[idx_for_z]-cut_for_z;
102 tt_t tree({-2.2, -1.2},
110 tree.refine_grid(7, cpf);
122 tree.refine_leaves_recursive_cell_pred(6, cpf, [&tree](tt_t::diti_t i) {
return !(tree.cell_above_range_level(i, 4, 0.25)); });
131 tree.refine_leaves_recursive_cell_pred(7, cpf, [&tree](tt_t::diti_t i) {
return (tree.cell_cross_range_level(i, 4, 3.5)); });
143 for(
auto lev: {0.4, 0.7, 1.1, 1.4, 1.8, 2.6, 3.5})
144 tree.refine_leaves_recursive_cell_pred(7, cpf, [&tree, lev](tt_t::diti_t i) {
return (tree.cell_cross_range_level(i, 4, lev)); });
150 tree.refine_leaves_recursive_cell_pred(7, cpf, [&tree](tt_t::diti_t i) {
return (tree.cell_cross_range_level(i, 5, 0.0)); });
156 tree.refine_leaves_recursive_cell_pred(5, cpf, [&tree](tt_t::diti_t i) {
return (tree.cell_near_domain_level(i, 0, 0.0, 1.0e-6)); });
159 tree.refine_leaves_recursive_cell_pred(5, cpf, [&tree](tt_t::diti_t i) {
return (tree.cell_near_domain_level(i, 1, 0.0, 1.0e-6)); });
165 tree.balance_tree(1, cpf);
173 auto tcret = tc_t::construct_geometry_fans(ccplx,
175 tree.get_leaf_cells_pred(tree.ccc_get_top_cell(),
176 [&tree](tt_t::diti_t i) { return !(tree.cell_above_range_level(i, 4, 3.5)); }),
178 {{tc_t::val_src_spc_t::FDOMAIN, 0},
179 {tc_t::val_src_spc_t::FDOMAIN, 1},
180 {tc_t::val_src_spc_t::FRANGE, 4}});
181 std::cout <<
"TC Return: " << tcret << std::endl;
182 ccplx.create_named_datasets({
"Re(z)",
"Im(z)",
"abs(z)",
"arg(z)",
"Re(f(z))",
"Im(f(z))",
"abs(f(z))",
"arg(f(z))"}, {{
"COLORS", {8, 9, 10}}});
183 std::cout <<
"POST CONST" << std::endl;
188 ccplx.triangle_folder([](cc_t::node_data_t x){
return tc_t::tsampf_to_cdatf( cpf, x); },
189 [](cc_t::node_data_t x){
return tc_t::tsampf_to_clcdf(4, 3.5, cpf, x); });
190 std::cout <<
"POST FOLD" << std::endl;
200 ccplx.cull_cells([&ccplx](cc_t::cell_verts_t c){
return !(ccplx.cell_below_level(c, tc_t::rt_rng_idx_to_pd_idx(4), 3.5)); });
202 std::cout <<
"POST CULL" << std::endl;
206 ccplx.write_legacy_vtk(
"complex_magnitude_surface.vtk",
"complex_magnitude_surface");
207 ccplx.write_xml_vtk(
"complex_magnitude_surface.vtu",
"complex_magnitude_surface");
208 ccplx.write_ply(
"complex_magnitude_surface.ply",
"complex_magnitude_surface");
double f(double x, double y)