#!/usr/bin/perl if ($ARGV[0] eq 'help') { #Documentation print ' creates and populate a set of directory for a set of abinit linear response calculation it requires 5 files: qpts.abi (which contains a list of N qpoints) input0.abi (abinit input files for Gamma point) input1.abi (abinit input file for any qpoint) files.abi (abinit files file) run.abi (condor submission script) It then creates N directories : QPT_qx_qy_qz and fill them with the relevant files: files.abi,run.abi,input.abi ' } else { open (FICHIER0, "qpts.abi"); @map0 = ; &trim(@map0); open (FICHIER1, "run.abi"); @map1 = ; open (FICHIER2, "input1.abi"); @map2 = ; $diro = `pwd`; chop($diro); #-------------------------------------------------------- foreach $lign0 (@map0) { # each qpoint $ind1++; @lis0=split(/ /,$lign0); $lis1[0]=int($lis0[0]*100)/100; $lis1[1]=int($lis0[1]*100)/100; $lis1[2]=int($lis0[2]*100)/100; print $lis0[0],' ',$lis1[0],"\n"; print $lis0[1],' ',$lis1[1],"\n"; print $lis0[2],' ',$lis1[2],"\n"; print "\n"; # $nam0=QPT._.$lis0[0]._.$lis0[1]._.$lis0[2]; $nam0=QPT._.$lis1[0]._.$lis1[1]._.$lis1[2]; # create dir and copy easy files mkdir ($nam0, 0777); # system("cp *.pp $nam0/."); system("cp files.abi $nam0/."); # deal with run.abi @mapout=(); foreach $lign1 (@map1) { if ($lign1=~ m/initial/) { push (@mapout,'initial_dir = '.$diro.'/'.$nam0."\n"); } else { push (@mapout,$lign1); } } chdir ($nam0); open (FICHIER2, ">run.abi"); print FICHIER2 @mapout; chdir (".."); close(FICHIER2); if (abs($lis0[0])+abs($lis0[1])+abs($lis0[2]) == 0) { # deal with run.abi when Gamma $igamma++; system("cp input0.abi $nam0/input.abi"); } else { # deal with run.abi when different qpoint $iother++; @mapout=(); $ii=1; foreach $lign1 (@map2) { if ($lign1=~ m/ qpt/) { $ii++; push (@mapout," qpt$ii $lis0[0] $lis0[1] $lis0[2]\n"); } else { push (@mapout,$lign1); } } chdir ($nam0); open (FICHIER2, ">input.abi"); print FICHIER2 @mapout; chdir (".."); close(FICHIER2); } } print $igamma," gamma point\n"; print $iother," other \n"; #-------------------------------------------------------- sub trim { foreach $lign (@_) { $lign=~s/ +/ /g; if (substr($lign,0,1) eq ' ') {substr($lign,0,1)=''} chop ($lign); } } }