#!/usr/bin/perl

BEGIN {
#use lib 'd:/Programs/Perl/lib';
#use lib '/home/tkamiya/bin/lib';
my $BaseDir = $ENV{'TkPerlDir'};
#print "\nBaseDir: $BaseDir\n";
@INC = ("$BaseDir/lib", "$BaseDir/VNL", "d:/Programs/Perl/lib", @INC);
}

use strict;
use Utils;

	my $InFile  = "LaFeOP.spaghettiup_ene";
	my $OutFile = "FSup{iBand}.vasp";
	my ($a, $b, $c) = (0.135, 0.135, 0.0625);
	my $EF      = 0.0;
	my $Eoffset = 0.0;# 100;
	my $div = 60;
	my ($nx,   $ny,   $nz) = (3, 3, 3);
	my ($emin, $emax) = (-2.0, 1.5);

	open(IN, "$InFile")    or die "$!: Can not read [$InFile]\n";

	my $iBand = 0;
	while(1) {
		$iBand++;
		my $line = <IN>;
		last if(!defined $line);
		$line = Utils::DelSpace($line);
		last if($line eq '');
print "line: $line\n";

		my @Energy = ([], [], []);
		my ($emin, $emax) = (1.0e10, -1.0e10);
		for(my $ix = 0 ; $ix <= $nx ; $ix++) {
			for(my $iy = 0 ; $iy <= $ny ; $iy++) {
				for(my $iz = 0 ; $iz <= $nz ; $iz++) {
					$line = Utils::DelSpace(<IN>);
					my ($kx, $ky, $kz, $dk, $e) = Utils::Split("\\s+", $line);
					$Energy[$ix][$iy][$iz] = $e;
					$emin = $e if($e < $emin);
					$emax = $e if($e > $emax);
				}
			}
		}
		next if($emin > $EF or $emax < $EF);

		my $FName = $OutFile;
		$FName =~ s/{iBand}/$iBand/;
print("Save to [$FName]: e=($emin - $emax)\n");
		open(OUT, ">$FName") or die "$!: Can not write to [$FName]\n";


print(OUT "$InFile\n");
printf(OUT "%6.4f\n", $a);
printf(OUT "   %10.6f  %10.6f  %10.6f\n", 1.0, 0.0,   0.0);
printf(OUT "   %10.6f  %10.6f  %10.6f\n", 0.0, $b/$a, 0.0);
printf(OUT "   %10.6f  %10.6f  %10.6f\n", 0.0, 0.0,   $c/$a);
print(OUT "    1\n");
print(OUT "Direct\n");
print(OUT "  0.000000  0.000000  0.000000\n");
print(OUT "\n");
printf(OUT " %d %d %d\n", $nx+1, $ny+1, $nz+1);
		my $ie = 0;
		for(my $ix = 0 ; $ix <= $nx ; $ix++) {
			for(my $iy = 0 ; $iy <= $ny ; $iy++) {
				for(my $iz = 0 ; $iz <= $nz ; $iz++) {
					printf(OUT "%8.5f    ", $Energy[$ix][$iy][$iz]);
#					printf(OUT "%8.5f    ", $Energy[$iy][$iz][$ix]);
					$ie++;
					if($ie % 10 == 0) {		print(OUT "\n");
					}
				}
			}
		}
		close(OUT);
	}
	close(IN);
	exit;
