Advertisement
ProzacR

LCD baigtas

Jul 8th, 2015
647
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 3.42 KB | None | 0 0
  1. #!/usr/bin/perl
  2. #
  3. #VR
  4. #
  5. #
  6.  
  7.  
  8. use Data::Dumper qw(Dumper);
  9.  
  10.  
  11. #duomenis isskaityt is out failo:
  12. my $file = '4HTOconstrObigfragtrim_LCD_VK.out';
  13. open my $info, $file or die "Could not open $file: $!";
  14.  
  15.  
  16. while( my $line = <$info>)  {  
  17.         #print $line;
  18.         push @orbital_line, $line if ($line =~ "^ ORBITAL [ 0-9]");
  19.         $toliau_eina_mat=1 if ($line =~ "  INTRA- AND INTER-LCD ENERGY");
  20.         push @mat_line, $line if ($toliau_eina_mat == 1 && $line =~ "^  [ 0-9][ 0-9][0-9]");
  21. }
  22.  
  23.  
  24. #dabar sudaryti matrica uzpildyta orbitaliu numeriais x atomo nr. ir y jo orbitales eiles nr. nuo 0,1,...
  25. foreach $orb (@orbital_line) {
  26.         chop $orb;
  27.         #print "$orb";
  28.         @orb_words = split(/ +/, $orb);
  29.         #print " so $orb_words[2] $orb_words[6] $orb_words[8] $orb_words[10]\n";
  30.         push @{$atom[$orb_words[6]]}, $orb_words[2] if ($orb_words[6] > 0);
  31.         push @{$atom[$orb_words[8]]}, $orb_words[2] if ($orb_words[8] > 0);
  32.         push @{$atom[$orb_words[10]]}, $orb_words[2] if ($orb_words[10] > 0);
  33. }
  34. #print "primo atomo orbitales:\n";
  35. #print Dumper \@atom[1];
  36.  
  37.  
  38. #dabar sutvarkyti matrica orbitaliu saveiku energiju $orbital_interaction
  39. foreach $mat (@mat_line) {
  40.         chop $mat;
  41.         #print "$mat";
  42.         @mat_numbers = split(/ +/, $mat);
  43.         #print " so $mat_numbers[2] $mat_numbers[3] $mat_numbers[4] $mat_numbers[5] $mat_numbers[6]\n";
  44.         #mat_numbers[1] yra orbitales numeriai
  45.         $mat_numbers[1]--;
  46.         push @{$orbital_interaction[$mat_numbers[1]]}, $mat_numbers[2];
  47.         push @{$orbital_interaction[$mat_numbers[1]]}, $mat_numbers[3];
  48.         push @{$orbital_interaction[$mat_numbers[1]]}, $mat_numbers[4];
  49.         push @{$orbital_interaction[$mat_numbers[1]]}, $mat_numbers[5];
  50.         push @{$orbital_interaction[$mat_numbers[1]]}, $mat_numbers[6];
  51. }
  52. #print "test orbital interaction: $orbital_interaction[158][158]\n";
  53. #dabar jau orbitales sunumeruotos nuo 0!!!
  54.  
  55.  
  56. ##tada:
  57. ##visu atomu saveika su visais kitais:
  58. $a = 1;
  59. while (@{ $atom[$a] }) {
  60.     $x = 1;
  61.     while (@{ $atom[$x] }) {
  62.         foreach $orba (@{ $atom[$a] }) { #per visas a atomo orbitales
  63.         foreach $orbb (@{ $atom[$x] }) { #per visas x atomo orbitales
  64.             #print "orba $orba orbb $orbb";
  65.             $atom_interaction[$a][$x]+=$orbital_interaction[$orba-1][$orbb-1];
  66.         }
  67.         }
  68.         $x++;
  69.     }
  70. $a++;
  71. }
  72. #print "Energijos suma atomu poroms:";
  73. #print Dumper \@atom_interaction;
  74. #print "77 su 78 0.5722..: $atom_interaction[77][78] OK"
  75.  
  76.  
  77. #dabar rasti mix/max, bet pats atomas su savim netinka
  78. $x=1;
  79. $min{'eng'}=0;
  80. $max{'eng'}=0;
  81. #tik pirmus 12 su kitais imti:
  82. #while (@{ $atom_interaction[$x] }) {
  83. while ($x < 13) {
  84.         $y = 13;
  85.         while (@{ $atom_interaction[$y] }) {
  86.                 if ($atom_interaction[$x][$y] < $min{'eng'} && $x != $y) {
  87.                         $min{'eng'}=$atom_interaction[$x][$y];
  88.                         $min{'x'}=$x;
  89.                         $min{'y'}=$y;
  90.                 }
  91.                 if ($atom_interaction[$x][$y] > $max{'eng'} && $x != $y) {
  92.                         $max{'eng'}=$atom_interaction[$x][$y];
  93.                         $max{'x'}=$x;
  94.                         $max{'y'}=$y;
  95.                 }
  96.                 $y++;
  97.         }
  98.         $x++;
  99. }
  100. print "min saveika tarp atomu $min{'x'} ir $min{'y'} energija: $min{'eng'}\n";
  101. print "max saveika tarp atomu $max{'x'} ir $max{'y'} energija: $max{'eng'}\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement