ex2ipelem.pl
This perl script converts exelem files into ipelem files.
ex2ipelem.pl
—
Plain Text,
2 KB (2814 bytes)
File contents
#! /bin/perl # # ........................................................................ # Name: trilinearex2ipelem.pl # Description: Reads a frontend .exelem file containing 8-noded elements and converts that file to the backend. Very simple e.g. does not handle versions. # Updates: # Usage: trilinearex2ipelem.pl exelemfile ipelemfile # ........................................................................ use strict; if (scalar @ARGV < 2) { print "Usage $0 exelemfile ipelemfile\n"; die; } my $filenameIn = $ARGV[0]; my $filenameOut = $ARGV[1]; my $data; my $number_location; my $element_number; my $number_of_nodes; my $number_of_elements; my $collapsed_basis; my $one; my $two; my $three; my $four; my $five; my $six; my $seven; my $eight; open (INPUT_FILE,"<$filenameIn") || (die "Could not open file $filenameIn"); open (OUTPUT_FILE, ">$filenameOut") || (die "Could not open output file $filenameOut"); $number_of_elements=0; print OUTPUT_FILE <<END_HEADER; CMISS Version 1.21 ipelem File Version 2 Heading: END_HEADER print OUTPUT_FILE " The number of elements is [1]: "; $number_location = tell OUTPUT_FILE; print OUTPUT_FILE "XXXXX\n\n"; while (defined($data = <INPUT_FILE>)) { if ($data =~ m/#Nodes=\s*(\d+)/) { $number_of_nodes = $1; } if (($data =~ m/Element:\s*([0-9]+).*/) && ($1 > 0)) { #Only want top level elements. $element_number = $1; #print "found element $1\n"; if ($number_of_nodes == 8) { $number_of_elements++; print OUTPUT_FILE " Element number [1]: $element_number\n"; #Read until we get the nodes while ((defined ($data = <INPUT_FILE>)) && !($data =~ m/Nodes:/)) { } #Read the node numbers if ((defined ($data = <INPUT_FILE>)) && ($data =~ m/\s*([0-9]*)\s*([0-9]*)\s*([0-9]*)\s*([0-9]*)\s*([0-9]*)\s*([0-9]*)\s*([0-9]*)\s*([0-9]*)/)) { $collapsed_basis = 0; $one = $1; $two = $2; $three = $3; $four = $4; $five = $5; $six = $6; $seven = $7; $eight = $8; print OUTPUT_FILE <<END_ELEMENT; The number of geometric Xj-coordinates is [3]: 3 The basis function type for geometric variable 1 is [1]: 1 The basis function type for geometric variable 2 is [1]: 1 The basis function type for geometric variable 3 is [1]: 1 Enter the 8 global numbers for basis 1: $one $two $three $four $five $six $seven $eight END_ELEMENT } else { die "Node numbers not found for element $element_number"; } } else { die "Fatal error: $number_of_nodes nodes for the top level element is not supported.\n"; } } } close INPUT_FILE; seek (OUTPUT_FILE, $number_location, 0); printf (OUTPUT_FILE "%5d", $number_of_elements); close OUTPUT_FILE;