# Usage : perl addversions.pl NODE1,NODE2,.. filename 
#         e.g. perl ipmap.pl 2,6,11 gastrocnemius 
#         needs gastrocnemius.ipnode and gastrocnemius.ipelem as inputs
#         creates >> gastrocnemius_version.ipnode gastrocnemius_version.ipelem
#
# Note  : This script
#
# Author: Kumar Mithraratne. 20th Nov. 2006.	 


$nodes = $ARGV[0]; $file_name = $ARGV[1];	
chomp $nodes;                     #print "$nodes $file_name\n";
@numbers = split (/,/,$nodes);    #print "$numbers[0] $numbers[1]\n";
$total = $#numbers + 1;           #print "$total\n";

##########################################################################

open (IPNODEIN, "$file_name.ipnode") || die ("CAN'T OPEN $file_name.ipnode");
open (IPNODEOUT, ">${file_name}_version.ipnode") || die ("CAN'T OPEN ${file_name}_version.ipnode");

@file1=<IPNODEIN>;                #print "@file1\n";
$total_lines = $#file1;           #print "$total_lines\n";

for ($line = 0 ; $line < 12 ; $line++)
  {
   chomp $file1[$line];
   print IPNODEOUT "$file1[$line]\n";

  }
  

for ($line = 12 ; $line < $total_lines + 1 ; $line++)
  { 
   chomp $file1[$line];
   $_ = $file1[$line];  
   
   if (m/Node number/)
     {
      print IPNODEOUT "$file1[$line]\n";
                                              #print "$file1[$line]\n";
      @words = split (/     /,$file1[$line]); #print "$words[1]\n";
      $N = $words[1];
    
      $modify = 0;
      for ($nn = 0; $nn < $total; $nn++)
          {
           if ($numbers[$nn] == $N)
	      {
	       $modify = 1;                  #print "$N modify\n";
	      }    
          } 
      if ($modify == 0)	  
         {
	  for ($l = 1; $l < 8; $l++)
	      {
	       chomp $file1[$line+$l];print IPNODEOUT "$file1[$line+$l]\n";
	      }
         }
      if ($modify == 1)	  
         {
	  print IPNODEOUT " The number of versions for nj=1 is [1]:  2\n";
	  print IPNODEOUT " For version number 1:\n";
	  chomp $file1[$line+2];print IPNODEOUT "$file1[$line+2]\n";
	  print IPNODEOUT " For version number 2:\n";
	  chomp $file1[$line+2];print IPNODEOUT "$file1[$line+2]\n";
	  print IPNODEOUT " The number of versions for nj=2 is [1]:  2\n";
	  print IPNODEOUT " For version number 1:\n";
	  chomp $file1[$line+4];print IPNODEOUT "$file1[$line+4]\n";
	  print IPNODEOUT " For version number 2:\n";
	  chomp $file1[$line+4];print IPNODEOUT "$file1[$line+4]\n";	  
	  print IPNODEOUT " The number of versions for nj=3 is [1]:  2\n";
	  print IPNODEOUT " For version number 1:\n";
	  chomp $file1[$line+6];print IPNODEOUT "$file1[$line+6]\n";
	  print IPNODEOUT " For version number 2:\n";
	  chomp $file1[$line+6];print IPNODEOUT "$file1[$line+6]\n";
	  print IPNODEOUT " \n";	  
         }	 
	 
     }

  }

##########################################################################

open (IPELEMIN, "$file_name.ipelem") || die ("CAN'T OPEN $file_name.ipelem");
open (IPELEMOUT, ">${file_name}_version.ipelem") || die ("CAN'T OPEN ${file_name}_version.ipelem");

@file2=<IPELEMIN>;                #print "@file2\n";
$total_lines = $#file2;           #print "$total_lines\n";

for ($line = 0 ; $line < 5 ; $line++)
  {
   chomp $file2[$line];
   print IPELEMOUT "$file2[$line]\n";
  }

for ($line = 5 ; $line < $total_lines + 1 ; $line++)
  { 
   chomp $file2[$line];
   $_ = $file2[$line];  
   
   if (m/Element number/)
     {
      chomp $file2[$line];
      print IPELEMOUT "$file2[$line]\n";
       
      for ($l = 1; $l < 6; $l++)
         {
	  chomp $file2[$line + $l];
	  print IPELEMOUT "$file2[$line + $l]\n";
	  
	 }  
       @words = split(/\s+/,$file2[$line + 5]); 
       #print "$words[9] $words[10] $words[11] $words[12] ";
       #print "$words[13] $words[14] $words[15] $words[16]\n";
       
       for ($n = 1; $n < 9; $n++)
           {
	    $node[$n] = $words[8 + $n];
	   }
       
       for ($n = 1; $n < 5; $n++)
          {
           $collapsed[$n] = 0;
           if ($node[$n] == $node[4 + $n]) {$collapsed[$n] = 1; $collapsed[4 + $n] = 1} 
          } 
       
       for ($n = 1; $n < 5; $n++)
           {
	    if ($collapsed[$n] == 1)
	       {
	        print IPELEMOUT " The version number for occurrence  1 of node";
		printf (IPELEMOUT "%6d",$node[$n]);
		print IPELEMOUT ", njj=1 is [ 1]: 1\n";
	        print IPELEMOUT " The version number for occurrence  1 of node";
		printf (IPELEMOUT "%6d",$node[$n]);
		print IPELEMOUT ", njj=2 is [ 1]: 1\n";
	        print IPELEMOUT " The version number for occurrence  1 of node";
		printf (IPELEMOUT "%6d",$node[$n]);
		print IPELEMOUT ", njj=3 is [ 1]: 1\n";		
	       }	       	       
	   }
       
       for ($n = 1; $n < 5; $n++)
           {
	    if ($collapsed[$n] == 1)
	       {
	        print IPELEMOUT " The version number for occurrence  2 of node";
		printf (IPELEMOUT "%6d",$node[$n]);
		print IPELEMOUT ", njj=1 is [ 1]: 2\n";
	        print IPELEMOUT " The version number for occurrence  2 of node";
		printf (IPELEMOUT "%6d",$node[$n]);
		print IPELEMOUT ", njj=2 is [ 1]: 2\n";
	        print IPELEMOUT " The version number for occurrence  2 of node";
		printf (IPELEMOUT "%6d",$node[$n]);
		print IPELEMOUT ", njj=3 is [ 1]: 2\n";			       
		}	       	       
	   }       
       
       
       print IPELEMOUT "$file2[$line + 6]\n";   

     }

  }
