void MEDITIO::write_ascii (const std::string & fname, const std::vector<Number> * vec, const std::vector<std::string> * solution_names) { // Current lacks in implementation: // (i) only 3D meshes. // (ii) only QUAD4, TRI3, TET4 elements, others are omitted ! // (iii) no distinction between materials. // (iv) no vector output, just first scalar as output // libmesh_assert three dimensions (should be extended later) libmesh_assert_equal_to (MeshOutput<MeshBase>::mesh().mesh_dimension(), 3); // Open the output file stream std::ofstream out_stream (fname.c_str()); // Make sure it opened correctly if (!out_stream.good()) libmesh_file_error(fname.c_str()); // Get a reference to the mesh const MeshBase & the_mesh = MeshOutput<MeshBase>::mesh(); // Begin interfacing with the MEdit data file { // header: out_stream << "MeshVersionFormatted 1\n"; out_stream << "Dimension 3\n"; out_stream << "# Mesh generated by libmesh\n\n"; // write the nodes: out_stream << "# Set of mesh vertices\n"; out_stream << "Vertices\n"; out_stream << the_mesh.n_nodes() << "\n"; for (unsigned int v=0; v<the_mesh.n_nodes(); v++) out_stream << the_mesh.point(v)(0) << " " << the_mesh.point(v)(1) << " " << the_mesh.point(v)(2) << " 0\n"; } { // write the connectivity: out_stream << "\n# Set of Polys\n\n"; // count occurrences of output elements: int n_tri3 = 0; int n_quad4 = 0; int n_tet4 = 0; for (const auto & elem : the_mesh.active_element_ptr_range()) { if (elem->type() == TRI3) n_tri3++; if (elem->type() == QUAD4) n_quad4++; if (elem->type() == QUAD9) n_quad4+=4; // (QUAD9 is written as 4 QUAD4.) if (elem->type() == TET4) n_tet4++; } // First: write out TRI3 elements: out_stream << "Triangles\n"; out_stream << n_tri3 << "\n"; for (const auto & elem : the_mesh.active_element_ptr_range()) if (elem->type() == TRI3) out_stream << elem->node_id(0)+1 << " " << elem->node_id(1)+1 << " " << elem->node_id(2)+1 << " 0\n"; // Second: write out QUAD4 elements: out_stream << "Quadrilaterals\n"; out_stream << n_quad4 << "\n"; for (const auto & elem : the_mesh.active_element_ptr_range()) { if (elem->type() == QUAD4) { out_stream << elem->node_id(0)+1 << " " << elem->node_id(1)+1 << " " << elem->node_id(2)+1 << " " << elem->node_id(3)+1 <<" 0\n"; } // if else if (elem->type() == QUAD9) { out_stream << elem->node_id(0)+1 << " " << elem->node_id(4)+1 << " " << elem->node_id(8)+1 << " " << elem->node_id(7)+1 <<" 0\n"; out_stream << elem->node_id(7)+1 << " " << elem->node_id(8)+1 << " " << elem->node_id(6)+1 << " " << elem->node_id(3)+1 <<" 0\n"; out_stream << elem->node_id(4)+1 << " " << elem->node_id(1)+1 << " " << elem->node_id(5)+1 << " " << elem->node_id(8)+1 <<" 0\n"; out_stream << elem->node_id(8)+1 << " " << elem->node_id(5)+1 << " " << elem->node_id(2)+1 << " " << elem->node_id(6)+1 <<" 0\n"; } } // Third: write out TET4 elements: out_stream << "Tetrahedra\n"; out_stream << n_tet4 << "\n"; for (const auto & elem : the_mesh.active_element_ptr_range()) if (elem->type() == TET4) { out_stream << elem->node_id(0)+1 << " " << elem->node_id(1)+1 << " " << elem->node_id(2)+1 << " " << elem->node_id(3)+1 <<" 0\n"; } } // end of the out file out_stream << '\n' << "# end of file\n"; // optionally write the data if ((solution_names != nullptr) && (vec != nullptr)) { // Open the ".bb" file stream std::size_t idx = fname.find_last_of("."); std::string bbname = fname.substr(0,idx) + ".bb"; std::ofstream bbout (bbname.c_str()); // Make sure it opened correctly if (!bbout.good()) libmesh_file_error(bbname.c_str()); // Header: 3: 3D mesh, 1: scalar output, 2: node-indexed const std::size_t n_vars = solution_names->size(); bbout << "3 1 " << the_mesh.n_nodes() << " 2\n"; for (dof_id_type n=0; n<the_mesh.n_nodes(); n++) bbout << std::setprecision(10) << (*vec)[n*n_vars + scalar_idx] << " "; bbout << "\n"; } // endif }
static apr_status_t h2_status_stream_filter(h2_stream *stream) { h2_session *session = stream->session; h2_mplx *mplx = session->mplx; conn_rec *c = session->c; h2_push_diary *diary; apr_bucket_brigade *bb; apr_status_t status; if (!stream->response) { return APR_EINVAL; } if (!stream->buffer) { stream->buffer = apr_brigade_create(stream->pool, c->bucket_alloc); } bb = stream->buffer; apr_table_unset(stream->response->headers, "Content-Length"); stream->response->content_length = -1; bbout(bb, "{\n"); bbout(bb, " \"HTTP2\": \"on\",\n"); bbout(bb, " \"H2PUSH\": \"%s\",\n", h2_session_push_enabled(session)? "on" : "off"); bbout(bb, " \"mod_http2_version\": \"%s\",\n", MOD_HTTP2_VERSION); bbout(bb, " \"session_id\": %ld,\n", (long)session->id); bbout(bb, " \"streams_max\": %d,\n", (int)session->max_stream_count); bbout(bb, " \"this_stream\": %d,\n", stream->id); bbout(bb, " \"streams_open\": %d,\n", (int)h2_ihash_count(session->streams)); bbout(bb, " \"max_stream_started\": %d,\n", mplx->max_stream_started); bbout(bb, " \"requests_received\": %d,\n", session->remote.emitted_count); bbout(bb, " \"responses_submitted\": %d,\n", session->responses_submitted); bbout(bb, " \"streams_reset\": %d, \n", session->streams_reset); bbout(bb, " \"pushes_promised\": %d,\n", session->pushes_promised); bbout(bb, " \"pushes_submitted\": %d,\n", session->pushes_submitted); bbout(bb, " \"pushes_reset\": %d,\n", session->pushes_reset); diary = session->push_diary; if (diary) { const char *data; const char *base64_digest; apr_size_t len; status = h2_push_diary_digest_get(diary, stream->pool, 256, stream->request->authority, &data, &len); if (status == APR_SUCCESS) { base64_digest = h2_util_base64url_encode(data, len, stream->pool); bbout(bb, " \"cache_digest\": \"%s\",\n", base64_digest); } /* try the reverse for testing purposes */ status = h2_push_diary_digest_set(diary, stream->request->authority, data, len); if (status == APR_SUCCESS) { status = h2_push_diary_digest_get(diary, stream->pool, 256, stream->request->authority, &data, &len); if (status == APR_SUCCESS) { base64_digest = h2_util_base64url_encode(data, len, stream->pool); bbout(bb, " \"cache_digest^2\": \"%s\",\n", base64_digest); } } } bbout(bb, " \"frames_received\": %ld,\n", (long)session->frames_received); bbout(bb, " \"frames_sent\": %ld,\n", (long)session->frames_sent); bbout(bb, " \"bytes_received\": %"APR_UINT64_T_FMT",\n", session->io.bytes_read); bbout(bb, " \"bytes_sent\": %"APR_UINT64_T_FMT"\n", session->io.bytes_written); bbout(bb, "}\n"); return APR_SUCCESS; }