function triangulation_q2l ( input_triangulation_filename ) %% MAIN is the main program for TRIANGULATION_Q2L. % % Discussion: % % TRIANGULATION_Q2L makes a linear triangulation from a quadratic one. % % A quadratic triangulation is assumed to consist of 6-node triangles, % as in the following: % % 11-12-13-14-15 % |\ |\ | % | \ | \ | % 6 7 8 9 10 % | \ | \ | % | \| \| % 1--2--3--4--5 % % This routine rearranges information so as to define the 3-node % triangulation: % % 11-12-13-14-15 % |\ |\ |\ |\ | % | \| \| \| \| % 6--7--8--9-10 % |\ |\ |\ |\ | % | \| \| \| \| % 1--2--3--4--5 % % Modified: % % 01 January 2007 % % Author: % % John Burkardt % % Usage: % % triangulation_q2l ( 'triangle_file' ) % timestamp; fprintf ( 1, '\n' ); fprintf ( 1, 'TRIANGULATION_Q2L\n' ); fprintf ( 1, ' MATLAB version\n' ); fprintf ( 1, ' Read a "quadratic" triangulation and\n' ); fprintf ( 1, ' write out a "linear" triangulation.\n' ); fprintf ( 1, '\n' ); fprintf ( 1, ' Read a triangulation dataset of TRIANGLE_NUM1\n' ); fprintf ( 1, ' triangles using 6 nodes.\n' ); fprintf ( 1, '\n' ); fprintf ( 1, ' Create a 3 node triangulation by breaking\n' ); fprintf ( 1, ' every 6 node triangle into 4 smaller ones.\n' ); fprintf ( 1, ' Write the new linear triangulation to a file.\n' ); % % Get the number of command line arguments. % if ( nargin < 1 ) fprintf ( 1, '\n' ); fprintf ( 1, 'TRIANGULATION_Q2L:\n' ); input_triangulation_filename = input ( ... ' Please enter the name of the triangulation file.' ); end % % Read the data. % [ triangle_order1, triangle_num1 ] = itable_header_read ( ... input_triangulation_filename ); if ( triangle_order1 ~= 6 ) fprintf ( 1, '\n' ); fprintf ( 1, 'TRIANGULATION_Q2L - Fatal error!\n' ); fprintf ( 1, ' Data is not for a 6-node triangulation.\n' ); error ( 'TRIANGULATION_Q2L - Fatal error!' ); end fprintf ( 1, '\n' ); fprintf ( 1, ' Read the header of ""%s".\n', input_triangulation_filename ); fprintf ( 1, '\n' ); fprintf ( 1, ' Triangle order = %d\n', triangle_order1 ); fprintf ( 1, ' Number of triangles TRIANGLE_NUM1 = %d\n', triangle_num1 ); triangle_node1(1:triangle_order1,1:triangle_num1) = itable_data_read ( ... input_triangulation_filename, triangle_order1, triangle_num1 ); fprintf ( 1, '\n' ); fprintf ( 1, ' Read the data in ""%s".\n', input_triangulation_filename ); i4mat_transpose_print_some ( triangle_order1, triangle_num1, triangle_node1, ... 1, 1, 6, 10, ' 6 by 10 portion TRIANGLE_NODE1:' ); % % Create the output file names from the input file names. % output_triangulation_filename = file_name_ext_swap ( ... input_triangulation_filename, 'q2l.txt' ); % % Set the number of linear triangles: % triangle_num2 = 4 * triangle_num1; triangle_order2 = 3; % % Convert the data. % triangle_node2 = triangulation_order6_to_order3 ( triangle_num1, ... triangle_node1 ); i4mat_transpose_print ( triangle_order2, triangle_num2, ... triangle_node2, ' TRIANGLE_NODE2' ); % % Write out the node and triangle data for the quadratic mesh % header = 1; itable_write ( output_triangulation_filename, triangle_order2, ... triangle_num2, triangle_node2, header ); fprintf ( 1, '\n' ); fprintf ( 1, 'TRIANGULATION_Q2L\n' ); fprintf ( 1, ' Normal end of execution.\n' ); fprintf ( 1, '\n' ); timestamp;