private static void Main(string[] args) //****************************************************************************80 // // Purpose: // // MAIN is the main program for TET_MESH_TET_NEIGHBORS. // // Discussion: // // TET_MESH_TET_NEIGHBORS manages the tet mesh neighbor calculation. // // A tet mesh of order 4 or order 10 may be used. // // Usage: // // tet_mesh_tet_neighbors prefix // // where prefix is the common file prefix: // // * prefix_nodes.txt, the node coordinates (not needed by this program); // * prefix_elements.txt, the linear element definitions. // * prefix_element_neighbors.txt, the element neighbors. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 27 September 2009 // // Author: // // John Burkardt // { const int node_num = 0; string prefix; Console.WriteLine(""); Console.WriteLine("TET_MESH_TET_NEIGHBORS"); Console.WriteLine(" Read a tet mesh dataset of TETRA_NUM"); Console.WriteLine(" tetrahedrons, using 4 or 10 nodes."); Console.WriteLine(""); Console.WriteLine(" Compute the tet mesh neighbors, and write this"); Console.WriteLine(" information to a file"); Console.WriteLine(""); // // Get the filename prefix. // try { prefix = args[0]; } catch { Console.WriteLine(""); Console.WriteLine("TET_MESH_TET_NEIGHBORS:"); Console.WriteLine(" Please enter the filename prefix."); prefix = Console.ReadLine(); } // // Create the filenames. // string element_filename = prefix + "_elements.txt"; string neighbor_filename = prefix + "_element_neighbors.txt"; // // Read the tet mesh data. // TableHeader h = typeMethods.i4mat_header_read(element_filename); int element_order = h.m; int element_num = h.n; if (element_order != 4 && element_order != 10) { Console.WriteLine(""); Console.WriteLine("TET_MESH_TET_NEIGHBORS - Fatal error!"); Console.WriteLine(" The tet mesh must have order 4 or order 10."); return; } Console.WriteLine(""); Console.WriteLine(" Read the header of \"" + element_filename + "\"."); Console.WriteLine(""); Console.WriteLine(" Tetrahedron order = " + element_order + ""); Console.WriteLine(" Number of tetras = " + 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 tetrahedrons:"); // // Detect and correct 1-based node indexing. // TetMesh.tet_mesh_base_zero(node_num, element_order, element_num, ref element_node); // // Compute the neighbor information. // int[] element_neighbor = TetMesh_Neighbors.tet_mesh_neighbor_tets(element_order, element_num, element_node); typeMethods.i4mat_transpose_print_some(4, element_num, element_neighbor, 1, 1, 4, 5, " First 5 neighbor sets:"); // // Write the neighbor information to a file. // typeMethods.i4mat_write(neighbor_filename, 4, element_num, element_neighbor); Console.WriteLine(""); Console.WriteLine(" Created the file \"" + neighbor_filename + "\"."); Console.WriteLine(""); Console.WriteLine("TET_MESH_TET_NEIGHBORS:"); Console.WriteLine(" Normal end of execution."); Console.WriteLine(""); }
private static void Main(string[] args) //****************************************************************************80 // // Purpose: // // MAIN is the main program for FEM3D_SAMPLE. // // Discussion: // // FEM3D_SAMPLE reads files defining a 3D FEM representation of data, // and a set of sample points, and writes out a file containing the // value of the finite element function at the sample points. // // Usage: // // fem3d_sample fem_prefix sample_prefix // // where 'fem_prefix' is the common prefix for the FEM files: // // * fem_prefix_nodes.txt, the node coordinates. // * fem_prefix_elements.txt, the nodes that make up each element; // * fem_prefix_values.txt, the values defined at each node. // // and 'sample_prefix' is the common prefix for the SAMPLE files. // (the node file is input, and the values file is created by the program.) // // * sample_prefix_nodes.txt, the node coordinates where samples are desired. // * sample_prefix_values.txt, the values computed at each sample node. // // Licensing: // // This code is distributed under the GNU LGPL license. // // Modified: // // 07 August 2009 // // Author: // // John Burkardt // { string fem_prefix; string sample_prefix; Console.WriteLine(""); Console.WriteLine("FEM3D_SAMPLE"); Console.WriteLine(""); Console.WriteLine(" Read files defining an FEM function of 3 arguments."); Console.WriteLine(" Read a file of sample arguments."); Console.WriteLine(" Write a file of function values at the arguments."); // // Get the number of command line arguments. // try { fem_prefix = args[0]; } catch { Console.WriteLine(""); Console.WriteLine("Enter the FEM file prefix:"); fem_prefix = Console.ReadLine(); } try { sample_prefix = args[1]; } catch { Console.WriteLine(""); Console.WriteLine("Enter the sample file prefix:"); sample_prefix = Console.ReadLine(); } // // Create the filenames. // string fem_node_filename = fem_prefix + "_nodes.txt"; string fem_element_filename = fem_prefix + "_elements.txt"; string fem_value_filename = fem_prefix + "_values.txt"; string sample_node_filename = sample_prefix + "_nodes.txt"; string sample_value_filename = sample_prefix + "_values.txt"; // // Read the FEM data. // TableHeader h = typeMethods.r8mat_header_read(fem_node_filename); int fem_node_dim = h.m; int fem_node_num = h.n; double[] fem_node_xyz = typeMethods.r8mat_data_read(fem_node_filename, fem_node_dim, fem_node_num); Console.WriteLine(""); Console.WriteLine(" The FEM node dimension is " + fem_node_dim + ""); Console.WriteLine(" The FEM node number is " + fem_node_num + ""); if (fem_node_dim != 3) { Console.WriteLine(""); Console.WriteLine("FEM3D_SAMPLE - Fatal error!"); Console.WriteLine(" Spatial dimension of the nodes is not 3."); return; } h = typeMethods.i4mat_header_read(fem_element_filename); int fem_element_order = h.m; int fem_element_num = h.n; int[] fem_element_node = typeMethods.i4mat_data_read(fem_element_filename, fem_element_order, fem_element_num); Console.WriteLine(" The FEM element order is " + fem_element_order + ""); Console.WriteLine(" The FEM element number is " + fem_element_num + ""); typeMethods.r8mat_header_read(fem_value_filename); int fem_value_dim = h.m; int fem_value_num = h.n; Console.WriteLine(" The FEM value order is " + fem_value_dim + ""); Console.WriteLine(" the FEM value number is " + fem_value_num + ""); if (fem_value_num != fem_node_num) { Console.WriteLine(""); Console.WriteLine("FEM3D_SAMPLE - Fatal error!"); Console.WriteLine(" Number of values and nodes differ."); return; } double[] fem_value = typeMethods.r8mat_data_read(fem_value_filename, fem_value_dim, fem_value_num); // // Create the element neighbor array. // int[] fem_element_neighbor = TetMesh_Neighbors.tet_mesh_neighbor_tets(fem_element_order, fem_element_num, fem_element_node); Console.WriteLine(" The element neighbor array has been computed."); // // Read the SAMPLE node data. // h = typeMethods.r8mat_header_read(sample_node_filename); int sample_node_dim = h.m; int sample_node_num = h.n; double[] sample_node_xyz = typeMethods.r8mat_data_read(sample_node_filename, sample_node_dim, sample_node_num); Console.WriteLine(""); Console.WriteLine(" Sample node spatial dimension is " + sample_node_dim + ""); Console.WriteLine(" Sample node number is " + sample_node_num + ""); if (sample_node_dim != 3) { Console.WriteLine(""); Console.WriteLine("FEM3D_SAMPLE - Fatal error!"); Console.WriteLine(" Spatial dimension of the sample nodes is not 2."); return; } // // Compute the SAMPLE values. // int sample_value_dim = fem_value_dim; int sample_value_num = sample_node_num; double[] sample_value = FEM_3D_Evaluate.fem3d_evaluate(fem_node_num, fem_node_xyz, fem_element_order, fem_element_num, fem_element_node, fem_element_neighbor, fem_value_dim, fem_value, sample_node_num, sample_node_xyz); // // Write the sample values. // typeMethods.r8mat_write0(sample_value_filename, sample_value_dim, sample_value_num, sample_value); Console.WriteLine(""); Console.WriteLine(" Interpolated FEM data written to \"" + sample_value_filename + "\""); Console.WriteLine(""); Console.WriteLine("FEM3D_SAMPLE"); Console.WriteLine(" Normal end of execution."); Console.WriteLine(""); }