#!/usr/bin/env perl
# Generate delta.dat for flat bands. The same mesh is used as for spectral functions.
# Rok Zitko, rok.zitko@ijs.si, June 2012

use warnings;
use strict;
use Env;

my $max =   `getparam broaden_max param.loop`;
my $ratio = `getparam broaden_ratio param.loop`;
my $min =   `getparam broaden_min param.loop`;
chomp ($max, $ratio, $min);

my $Gamma = 0.3;
chomp($Gamma);

my @l = ();
for (my $x = $max; $x >= $min; $x /= $ratio) {
    my $xpos = $x;
    my $ypos = initialfn($xpos);
    my $xneg = -$x;
    my $yneg = initialfn($xneg);
    push(@l, [$xpos, $ypos]);
    push(@l, [$xneg, $yneg]);
}

my @sorted = sort { $a->[0] <=> $b->[0] } @l;

my $fn = "Delta.dat";
open(OUT, ">$fn") or die "Can't open $fn: $!. Stopped";
foreach (@sorted) {
    my ($x, $y) = @$_;
    print OUT "$x $y\n";
}
close(OUT);

# Hybridisation function
system "${NRGPREFIX} kk Delta.dat Delta-re.dat";

sub initialfn
{
    my $x = shift;
    # Pseudo-gap DOS which goes to zero at omega=0 as square root,
    # multipled by some asymmeric factor
    my $g = $Gamma * (abs($x) < 1.0 ? (1-$x**2) : 1e-5);
    return $g;
}
