Exemplo n.º 1
0
    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("");
    }
Exemplo n.º 2
0
    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("");
    }