#!/usr/bin/perl # program preprocess input $name=$ARGV[0]; $nam2=$ARGV[1]; print $name,"\n"; if ($name eq 'help') { #Documentation print ' creates and populate a set of directory for a multiparameter calculations gene_setdir file_input name_input were file_input is an input type file, were numerical values have been replaced by fields Directories are called NODE_j, where j runs from 1 to N1x..xNix...xNmax and are populated by a file name_input example (for DL_POLY): gene_setdir FIELD FIELD Rk: It is important to have spaces around the fields: example: Kpoints <3:1:1> <3:1:1> <3:1:1> ' } else { open (FICHIER1, $name); @map1 = ; @map2=@map1; &trim(@map2); $diro = `pwd`; chop($diro); for ($i=1; $i<=9; $i++) {@data_n[$i]=1;} #Step 1, identify 'parameters' ======================================= $index_ligne=-1; $index=0; foreach $lign1 (@map2) { $index_ligne++; if (substr($lign1,0,1) ne '#' ) { if ($lign1=~ m/(<*>)/) { print $lign1,"\n"; @list2=split(/ /,$lign1); foreach $elem (@list2) { if ($elem=~ m/<*>/) { $index++; $elem=~s/(<|>| )//g; print $elem."\n"; @list3=split(/:/,$elem); $data_pos[$index]=$index_ligne; $data_n[$index]=$list3[0]; $data_start[$index]=$list3[1]; $data_inc[$index]=$list3[2]; } } } } } print 'we have '.$index." parameters\n"; for ($i=1; $i<=$index;$i++) { print "$i is located on line $data_pos[$i] and has : $data_n[$i] $data_start [$i] $data_inc[$i]\n"; } #Step 2, loop and replace ========================================= $index_file=0; for ($i1=0; $i1<$data_n[1];$i1++) {$i[1]=$i1; for ($i2=0; $i2<$data_n[2];$i2++) {$i[2]=$i2; for ($i3=0; $i3<$data_n[3];$i3++) {$i[3]=$i3; for ($i4=0; $i4<$data_n[4];$i4++) {$i[4]=$i4; for ($i5=0; $i5<$data_n[5];$i5++) {$i[5]=$i5; for ($i6=0; $i6<$data_n[6];$i6++) {$i[6]=$i6; for ($i7=0; $i7<$data_n[7];$i7++) {$i[7]=$i7; for ($i8=0; $i8<$data_n[8];$i8++) {$i[8]=$i8; for ($i9=0; $i9<$data_n[9];$i9++) {$i[9]=$i9; foreach $a (@i) {print $a;} print "\n"; for ($k=1; $k<=$index;$k++) { if ($data_n[$k] != 1) {$value[$k]=$data_start[$k]+$i[$k]*$data_inc[$k]} } $index_file++; $name_dir='NODE_'.$index_file; $name_out=">$nam2"; print $name_dir.'/'; print $name_out."\n"; mkdir ($name_dir, 0777); chdir ($name_dir); open (FICHIER2,$name_out); @mapout=''; $index_ligne=-1; $index=0; foreach $lign1 (@map1) { $index_ligne++; # $lign3=$map1[$index_ligne]; $ligncopy1=$lign1; chop($ligncopy1); if ((substr($ligncopy1,0,1) ne '#') && ($ligncopy1=~ m/<*>/)) { @list2=split(/ /,$ligncopy1); $lign2=''; foreach $elem (@list2) { if ($elem=~ m/<*>/) { $index++; $elem=$value[$index]; print $elem."\n"; } $lign2=$lign2.$elem.' '; } print $lign2."\n"; push(@mapout,$lign2."\n"); } else { push(@mapout,$ligncopy1."\n"); # push(@mapout,$lign3); } } print FICHIER2 @mapout; close (FICHIER2); chdir (".."); } } } } } } } } } close(FICHIER1); } #-------------------------------------------------------- sub trim { foreach $lign (@_) { $lign=~s/ +/ /g; if (substr($lign,0,1) eq ' ') {substr($lign,0,1)=''} chop ($lign); } }