352 const std::vector<Number> * vec,
353 const std::vector<std::string> * solution_names)
358#ifndef LIBMESH_HAVE_TECPLOT_API
360 libMesh::err <<
"WARNING: Tecplot Binary files require the Tecplot API." << std::endl
361 <<
"Continuing with ASCII output."
364 if (this->
mesh().processor_id() == 0)
372#elif defined(LIBMESH_HAVE_TECPLOT_API_112)
378 std::string tecplot_variable_names;
409 libmesh_error_msg(
"Unsupported element dimension: " << this->
elem_dimension());
414 tecplot_variable_names +=
"x, y, z";
416 if (solution_names !=
nullptr)
418 for (
const auto & val : *solution_names)
420#ifdef LIBMESH_USE_REAL_NUMBERS
422 tecplot_variable_names +=
", ";
423 tecplot_variable_names += val;
427 tecplot_variable_names +=
", ";
428 tecplot_variable_names +=
"r_";
429 tecplot_variable_names += val;
430 tecplot_variable_names +=
", ";
431 tecplot_variable_names +=
"i_";
432 tecplot_variable_names += val;
433 tecplot_variable_names +=
", ";
434 tecplot_variable_names +=
"a_";
435 tecplot_variable_names += val;
446 TecplotMacros tm(the_mesh.
n_nodes(),
447#ifdef LIBMESH_USE_REAL_NUMBERS
448 (3 + ((solution_names ==
nullptr) ? 0 :
449 cast_int<unsigned int>(solution_names->size()))),
451 (3 + 3*((solution_names ==
nullptr) ? 0 :
452 cast_int<unsigned int>(solution_names->size()))),
464 tm.nd(0,v) =
static_cast<float>(the_mesh.
point(v)(0));
465 tm.nd(1,v) =
static_cast<float>(the_mesh.
point(v)(1));
466 tm.nd(2,v) =
static_cast<float>(the_mesh.
point(v)(2));
468 if ((vec !=
nullptr) &&
469 (solution_names !=
nullptr))
471 const std::size_t
n_vars = solution_names->size();
473 for (std::size_t c=0; c<
n_vars; c++)
475#ifdef LIBMESH_USE_REAL_NUMBERS
477 tm.nd((3+c),v) =
static_cast<float>((*vec)[v*
n_vars + c]);
479 tm.nd((3+3*c),v) =
static_cast<float>((*vec)[v*
n_vars + c].real());
480 tm.nd((3+3*c+1),v) =
static_cast<float>((*vec)[v*
n_vars + c].imag());
481 tm.nd((3+3*c+2),v) =
static_cast<float>(std::abs((*vec)[v*
n_vars + c]));
489 ierr = TECINI112 (
nullptr,
490 const_cast<char *
>(tecplot_variable_names.c_str()),
491 const_cast<char *
>(fname.c_str()),
492 const_cast<char *
>(
"."),
498 libmesh_file_error(fname);
506 unsigned int n_subcells_in_subdomain=0;
508 for (
const auto & elem :
509 as_range(the_mesh.active_subdomain_elements_begin(sbd_id),
510 the_mesh.active_subdomain_elements_end(sbd_id)))
511 n_subcells_in_subdomain += elem->n_sub_elem();
514 tm.set_n_cells (n_subcells_in_subdomain);
518 for (
const auto & elem :
519 as_range(the_mesh.active_subdomain_elements_begin(sbd_id),
520 the_mesh.active_subdomain_elements_end(sbd_id)))
522 std::vector<dof_id_type> conn;
523 for (
auto se :
make_range(elem->n_sub_elem()))
525 elem->connectivity(se,
TECPLOT, conn);
528 tm.cd(node,te) = conn[node];
539 num_nodes =
static_cast<int>(the_mesh.
n_nodes()),
540 num_cells =
static_cast<int>(tm.n_cells),
548 num_face_connect = 0,
549 face_neighbor_mode = 0,
550 tot_num_face_nodes = 0,
551 num_connect_boundary_faces = 0,
552 tot_num_boundary_connect = 0,
553 share_connect_from_zone=0;
556 passive_var_list (tm.n_vars, 0),
557 share_var_from_zone (tm.n_vars, 1);
562 std::ostringstream zone_name;
569 if (subdomain_name.size())
572 zone_name << subdomain_name;
580 ierr = TECZNE112 (
const_cast<char *
>(zone_name.str().c_str()),
595 &num_connect_boundary_faces,
596 &tot_num_boundary_connect,
597 passive_var_list.data(),
599 (firstzone) ?
nullptr : share_var_from_zone.data(),
600 &share_connect_from_zone);
603 libmesh_file_error(fname);
608 int total = cast_int<int>
609#ifdef LIBMESH_USE_REAL_NUMBERS
610 ((3 + ((solution_names ==
nullptr) ? 0 : solution_names->size()))*num_nodes);
612 ((3 + 3*((solution_names ==
nullptr) ? 0 : solution_names->size()))*num_nodes);
616 ierr = TECDAT112 (&total,
621 libmesh_file_error(fname);
625 ierr = TECNOD112 (tm.connData.data());
628 libmesh_file_error(fname);
638 libmesh_file_error(fname);
659 std::string tecplot_variable_names;
666 tecplot_variable_names +=
"x, y, z";
668 if (solution_names !=
nullptr)
670 for (
const auto & val : *solution_names)
672#ifdef LIBMESH_USE_REAL_NUMBERS
674 tecplot_variable_names +=
", ";
675 tecplot_variable_names += val;
679 tecplot_variable_names +=
", ";
680 tecplot_variable_names +=
"r_";
681 tecplot_variable_names += val;
682 tecplot_variable_names +=
", ";
683 tecplot_variable_names +=
"i_";
684 tecplot_variable_names += val;
685 tecplot_variable_names +=
", ";
686 tecplot_variable_names +=
"a_";
687 tecplot_variable_names += val;
698 TecplotMacros tm(cast_int<unsigned int>(the_mesh.
n_nodes()),
699 cast_int<unsigned int>
700#ifdef LIBMESH_USE_REAL_NUMBERS
701 (3 + ((solution_names ==
nullptr) ? 0 : solution_names->size())),
703 (3 + 3*((solution_names ==
nullptr) ? 0 : solution_names->size())),
705 cast_int<unsigned int>
716 tm.nd(0,v) =
static_cast<float>(the_mesh.
point(v)(0));
717 tm.nd(1,v) =
static_cast<float>(the_mesh.
point(v)(1));
718 tm.nd(2,v) =
static_cast<float>(the_mesh.
point(v)(2));
720 if ((vec !=
nullptr) &&
721 (solution_names !=
nullptr))
723 const std::size_t
n_vars = solution_names->size();
725 for (std::size_t c=0; c<
n_vars; c++)
727#ifdef LIBMESH_USE_REAL_NUMBERS
729 tm.nd((3+c),v) =
static_cast<float>((*vec)[v*
n_vars + c]);
731 tm.nd((3+3*c),v) =
static_cast<float>((*vec)[v*
n_vars + c].real());
732 tm.nd((3+3*c+1),v) =
static_cast<float>((*vec)[v*
n_vars + c].imag());
733 tm.nd((3+3*c+2),v) =
static_cast<float>(std::abs((*vec)[v*
n_vars + c]));
744 for (
const auto & elem : the_mesh.active_element_ptr_range())
746 std::vector<dof_id_type> conn;
747 for (
auto se :
make_range(elem->n_sub_elem()))
749 elem->connectivity(se,
TECPLOT, conn);
752 tm.cd(node,te) = conn[node];
763 num_nodes =
static_cast<int>(the_mesh.
n_nodes()),
767 ierr = TECINI (
nullptr,
768 (
char *) tecplot_variable_names.c_str(),
769 (
char *) fname.c_str(),
775 libmesh_file_error(fname);
778 ierr = TECZNE (
nullptr,
786 libmesh_file_error(fname);
790#ifdef LIBMESH_USE_REAL_NUMBERS
791 ((3 + ((solution_names ==
nullptr) ? 0 : solution_names->size()))*num_nodes);
793 ((3 + 3*((solution_names ==
nullptr) ? 0 : solution_names->size()))*num_nodes);
797 ierr = TECDAT (&total,
802 libmesh_file_error(fname);
804 ierr = TECNOD (tm.connData.data());
807 libmesh_file_error(fname);
812 libmesh_file_error(fname);