#! /usr/bin/perl # # Harvey Ho and Peter Bier #last updated: 21-08-07 my (@x, @y, @z, @conn, $text, $filename); # Parse the command line if ( $#ARGV != 1) { $text=qq{---------------------------------------- Perl script to convert Tecplot file into cmgui exnode and exelem files Input: a Tecplot filename, cmgui filename Output: an exnode and exelem file ---------------------------------------- Usage: tec2ex.pl tec-file cmgui-file ---------------------------------------- Example: tec2ex pipe.dat pipe Will produce pipe.exnode and pipe.exelem }; print $text; exit 0; }; $infile=$ARGV[0]; $filename=$ARGV[1]; #======== open data file for reading open(DATA, $infile) or die "can't open data file\n"; print "Reading data from $infile\n"; #======== read in data $line = ; #read in the first line $line = ; #read in variable line if($line!="Variables=x,y,z"){ print "Note: this file only parses geometry (x,y,z) data\n"; } $line = ; #read in node and elem number @num=split(",", $line); $strNode=@num[1]; $strElem=@num[2]; @tmpNode=split("=", $strNode); $numNode=@tmpNode[1]; @tmpElem=split("=", $strElem); $numElem=@tmpElem[1]; print " Total number of nodes: ".$numNode."\n Total number of elements: ".$numElem."\n"; $line = ; $counter=1; $xindex=0; $yindex=0; $zindex=0; $elem=0; # Free ALE writes geometry data six entries per line $numline=int($numNode/6+0.9); $totalline=$numline*3+$numElem; do{ $line = ; chomp($line); @coord=split(" ",$line); if ($counter<=$numline){ $x[$xindex*6]=@coord[0]; $x[$xindex*6+1]=@coord[1]; $x[$xindex*6+2]=@coord[2]; $x[$xindex*6+3]=@coord[3]; $x[$xindex*6+4]=@coord[4]; $x[$xindex*6+5]=@coord[5]; $xindex++; } elsif($counter<=$numline*2){ $y[$yindex*6]=@coord[0]; $y[$yindex*6+1]=@coord[1]; $y[$yindex*6+2]=@coord[2]; $y[$yindex*6+3]=@coord[3]; $y[$yindex*6+4]=@coord[4]; $y[$yindex*6+5]=@coord[5]; $yindex++; } elsif($counter<=$numline*3){ $z[$zindex*6]=@coord[0]; $z[$zindex*6+1]=@coord[1]; $z[$zindex*6+2]=@coord[2]; $z[$zindex*6+3]=@coord[3]; $z[$zindex*6+4]=@coord[4]; $z[$zindex*6+5]=@coord[5]; $zindex++; } # elsif($counter<=$totalline){ else{ $conn[$elem][0]=@coord[0]; $conn[$elem][1]=@coord[1]; $conn[$elem][2]=@coord[2]; $conn[$elem][3]=@coord[3]; $elem++; } $counter++; } until($counter==($totalline+1)); #======== open exnode file for writing open(EXNODE, ">$filename.exnode") or die ("can't opend exnode file"); #========= write to exnode file print("Writing $filename.exnode\n"); # write out header $text=qq{ Group name: tets #Fields=1 1) coordinates, coordinate, rectangular cartesian, #Components=3 x. Value index=1, #Derivatives=0 y. Value index=2, #Derivatives=0 z. Value index=3, #Derivatives=0 }; printf(EXNODE $text); # write out nodes for($i=0;$i<$numNode;$i++){ printf(EXNODE " Node: ".($i+1)."\n"); printf(EXNODE " ".$x[$i]."\n"); printf(EXNODE " ".$y[$i]."\n"); printf(EXNODE " ".$z[$i]."\n"); } #======== open exelem file for writing open(EXELEM, ">$filename.exelem") or die ("can't open exelem file"); #===========write to ipelem file ========== print("Writing $filename.exelem\n"); # write out header $text=qq{Group name: tets Shape. Dimension=3, simplex(2;3)*simplex*simplex #Scale factor sets= 1 l.simplex(2;3)*l.simplex*l.simplex, #Scale factors=4 #Nodes= 4 #Fields=1 1) coordinates, coordinate, rectangular cartesian, #Components=3 x. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based. #Nodes= 4 1. #Values=1 Value indices: 1 Scale factor indices: 1 2. #Values=1 Value indices: 1 Scale factor indices: 2 3. #Values=1 Value indices: 1 Scale factor indices: 3 4. #Values=1 Value indices: 1 Scale factor indices: 4 y. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based. #Nodes= 4 1. #Values=1 Value indices: 1 Scale factor indices: 1 2. #Values=1 Value indices: 1 Scale factor indices: 2 3. #Values=1 Value indices: 1 Scale factor indices: 3 4. #Values=1 Value indices: 1 Scale factor indices: 4 z. l.simplex(2;3)*l.simplex*l.simplex, no modify, standard node based. #Nodes= 4 1. #Values=1 Value indices: 1 Scale factor indices: 1 2. #Values=1 Value indices: 1 Scale factor indices: 2 3. #Values=1 Value indices: 1 Scale factor indices: 3 4. #Values=1 Value indices: 1 Scale factor indices: 4 }; printf(EXELEM $text); # write out elements for($i=0;$i<$numElem;$i++){ print(EXELEM " Element: ".($i+1)." 0 0\n"); print(EXELEM " Nodes:\n"); print(EXELEM " ".$conn[$i][0]." ".$conn[$i][1]." ".$conn[$i][2]." ".$conn[$i][3]."\n"); printf(EXELEM " Scale factors:\n"); printf(EXELEM " 1.0E+0 1.0E+0 1.0E+0 1.0E+0\n"); } # close all files close(DATA); close(EXELEM); close(EXNODE);