void FilterFluxDensity::precalculate(int order, int mask) { Quad2D* quad = quads[cur_quad]; int np = quad->get_num_points(order, this->get_active_element()->get_mode()); Node* node = new_node(H2D_FN_DEFAULT, np); sln[0]->set_quad_order(order, H2D_FN_VAL | H2D_FN_DX | H2D_FN_DY); sln[1]->set_quad_order(order, H2D_FN_VAL | H2D_FN_DX | H2D_FN_DY); double *dudx1, *dudy1, *dudx2, *dudy2; sln[0]->get_dx_dy_values(dudx1, dudy1); sln[1]->get_dx_dy_values(dudx2, dudy2); double *uval1 = sln[0]->get_fn_values(); double *uval2 = sln[1]->get_fn_values(); update_refmap(); double *x = refmap->get_phys_x(order); for (int i = 0; i < np; i++) { node->values[0][0][i] = std::sqrt(sqr(dudy1[i]) + sqr(dudy2[i]) + sqr(dudx1[i] + ((x[i] > 1e-10) ? uval1[i] / x[i] : 0.0)) + sqr(dudx2[i] + ((x[i] > 1e-10) ? uval2[i] / x[i] : 0.0))); } if(nodes->present(order)) { assert(nodes->get(order) == cur_node); ::free(nodes->get(order)); } nodes->add(node, order); cur_node = node; }
void ViewScalarFilter::precalculate(int order, int mask) { Quad2D* quad = quads[cur_quad]; int np = quad->get_num_points(order); node = new_node(H2D_FN_DEFAULT, np); if (sln[0]) { sln[0]->set_quad_order(order, H2D_FN_VAL | H2D_FN_DX | H2D_FN_DY); sln[0]->get_dx_dy_values(dudx1, dudy1); value1 = sln[0]->get_fn_values(); } if (num >= 2 && sln[1]) { sln[1]->set_quad_order(order, H2D_FN_VAL | H2D_FN_DX | H2D_FN_DY); sln[1]->get_dx_dy_values(dudx2, dudy2); value2 = sln[1]->get_fn_values(); } if (num >= 3 && sln[2]) { sln[2]->set_quad_order(order, H2D_FN_VAL | H2D_FN_DX | H2D_FN_DY); sln[2]->get_dx_dy_values(dudx3, dudy3); value3 = sln[2]->get_fn_values(); } update_refmap(); x = refmap->get_phys_x(order); y = refmap->get_phys_y(order); Element *e = refmap->get_active_element(); material = Util::scene()->labels[atoi(mesh->get_element_markers_conversion().get_user_marker(e->marker).c_str())]->material; for (int i = 0; i < np; i++) { calculateVariable(i); } if (nodes->present(order)) { assert(nodes->get(order) == cur_node); ::free(nodes->get(order)); } nodes->add(node, order); cur_node = node; }