private static void Main(string[] args) //****************************************************************************80 // // Purpose: // // MAIN is the main program for TET_MESH_TO_GMSH. // // Discussion: // // TET_MESH_TO_GMSH converts a tet mesh, using 4 or 10 node // tetrahedral elements, to a Gmsh file. // // Usage: // // tet_mesh_to_gmsh prefix // // where prefix is the common file prefix: // // * prefix_nodes.txt, the node coordinates; // * prefix_elements.txt, the linear element definitions. // * prefix.msh, the Gmsh msh file. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 31 May 2013 // // Author: // // John Burkardt // // Reference: // // Christophe Geuzaine, Jean-Francois Remacle, // Gmsh: a three-dimensional finite element mesh generator with // built-in pre- and post-processing facilities, // International Journal for Numerical Methods in Engineering, // Volume 79, Number 11, pages 1309-1331, 2009. // { string prefix; Console.WriteLine(""); Console.WriteLine("TET_MESH_TO_GMSH;"); Console.WriteLine(" Convert a linear or quadratic tet mesh to Gmsh format"); Console.WriteLine(""); Console.WriteLine(" Read \"prefix\"_nodes.txt, node coordinates."); Console.WriteLine(" Read \"prefix\"_elements.txt, 4 or 10 node element definitions."); Console.WriteLine(""); Console.WriteLine(" Create \"prefix\".msh, a corresponding Gmsh mesh file."); Console.WriteLine(""); // // Get the filename prefix. // try { prefix = args[0]; } catch { Console.WriteLine(""); Console.WriteLine("TET_MESH_TO_GMSH;:"); Console.WriteLine(" Please enter the filename prefix."); prefix = Console.ReadLine(); } // // Create the filenames. // string node_filename = prefix + "_nodes.txt"; string element_filename = prefix + "_elements.txt"; string gmsh_filename = prefix + ".msh"; // // Read the node data. // TableHeader h = typeMethods.r8mat_header_read(node_filename); int dim_num = h.m; int node_num = h.n; if (dim_num != 3) { Console.WriteLine(""); Console.WriteLine("TET_MESH_TO_GMSH; - Fatal error!"); Console.WriteLine(" The spatial dimension must be 3."); return; } Console.WriteLine(""); Console.WriteLine(" Read the header of \"" + node_filename + "\"."); Console.WriteLine(""); Console.WriteLine(" Spatial dimension = " + dim_num + ""); Console.WriteLine(" Number of nodes = " + node_num + ""); double[] node_xyz = typeMethods.r8mat_data_read(node_filename, dim_num, node_num); Console.WriteLine(""); Console.WriteLine(" Read the data in \"" + node_filename + "\"."); typeMethods.r8mat_transpose_print_some(dim_num, node_num, node_xyz, 1, 1, dim_num, 5, " First 5 nodes:"); // // Read the element data. // h = typeMethods.i4mat_header_read(element_filename); int element_order = h.m; int element_num = h.n; switch (element_order) { case 4: break; case 10: break; case 20: break; default: Console.WriteLine(""); Console.WriteLine("TET_MESH_TO_GMSH; - Fatal error!"); Console.WriteLine(" The tet mesh must have order 4, 10, or 20."); return; } Console.WriteLine(""); Console.WriteLine(" Read the header of \"" + element_filename + "\"."); Console.WriteLine(""); Console.WriteLine(" Element order = " + element_order + ""); Console.WriteLine(" Number of elements = " + element_num + ""); int[] element_node = typeMethods.i4mat_data_read(element_filename, element_order, element_num); Console.WriteLine(""); Console.WriteLine(" Read the data in \"" + element_filename + "\"."); typeMethods.i4mat_transpose_print_some(element_order, element_num, element_node, 1, 1, element_order, 5, " First 5 elements:"); // // Use 1-based indexing. // TetMesh.tet_mesh_base_one(node_num, element_order, element_num, ref element_node); // // Write the Gmsh file. // Burkardt.GMesh.IO.gmsh_write(gmsh_filename, dim_num, node_num, node_xyz, element_order, element_num, element_node); Console.WriteLine(""); Console.WriteLine(" Created GMSH file \"" + gmsh_filename + "\"."); Console.WriteLine(""); Console.WriteLine("TET_MESH_TO_GMSH;"); Console.WriteLine(" Normal end of execution."); Console.WriteLine(""); }