[Users] new CarpetIOASCII/src/util/Carpet2ygraph.pl

alibeck alexander.beck-ratzka at aei.mpg.de
Fri Aug 12 00:48:26 CDT 2011


Hi Folks,

I am afraid this script will also not work for the case that the data
don't start with component 0. Look at this section:

[snip]

	# Only output the headers if this is the zero component
	# FIXME: what happens if component 0 isn't output first?
	if (0 == $componentflag{$refinementlevel})
	{
	    push(@outputdata, ("\"",$line)); # Add ygraph comment marker
	    $newflag = 0;
	}
	else
	{
	    $flag = 1;
	    @outputdata=("");
	}

[snip]

As far as I know, this is the problem that Luca reported to me.

Best wishes

Alexander
> Hi,
>     I was trying to use the script
> CarpetIOASCII/src/util/Carpet2ygraph.pl (it is the same both in the
> git and hg versions of Carpet), but it was not working. I modified it
> in order to be able again to produce different output for the
> different refinement levels and now it can also work with more than 9
> refinement levels. I have attached my version and the diff with the
> version in the repository.
>
>     The only problem is that it still doesn't know how to remove ghost
> points, so the output files may contain duplicated points. Im my
> parfile I'm using CarpetIOASCII::out3D_ghosts = "no" and consequently
> I don't have any problem. But if you have ghostpoints in your .asc
> files, you may see duplicated points in the output produced by the
> script. Any suggestion is appreciated.
>
> Cheers,
> Bruno
>
> Dr. Bruno Giacomazzo
> Department of Astronomy
> University of Maryland
> College Park
> MD 20742-2421
> USA
>
> Tel.  : +1 301 405 0676
> Fax  : +1 301 314 9067
> Tel.  : +1 301 286 3809 (NASA/GSFC)
> Fax  : +1 301 286 7230 (NASA/GSFC)
> email : bgiacoma at astro.umd.edu
> web: http://www.brunogiacomazzo.org
>
> ----------------------------------------------------------------------
> There are only 10 types of people in the world:
> Those who understand binary, and those who don't
> ----------------------------------------------------------------------
> ------------------------------------------------------------------------
>
> #! /usr/bin/perl -sw
> #
> # Blame Ian Hawke for not checking that Scott had already written a C
> # program to do this add so writing a perl version instead
> #
> # Given an output file in CarpetIOASCII 1d format, strip to ygraph format.
> # The arguments should be direction (x=0,y=1,z=2) and filename.
> # Output is to a file. Only the base name should be given.
> # The base will be appended with _<level>.xg
> #
> # Example:
> #
> # Carpet2ygraph.pl 0 alp.xl alp_x
> #
> # produces alp_x_<d>.xg where <d> is the refinement level.
> #
> # The headers of the Carpet files are just copied with the addition of
> # the correct time for ygraph, and the different comment marker.
> #
> # This script is a much altered version of Tom Goodale's convergence
> # testing scripts.
> #
>
> use FileHandle;
>
> if(@ARGV != 3 or $ARGV[0] !~ /^0|1|2$/)
> {
>   print "Usage: $0 direction <Inputfile> <Outputfile>\n";
>   print "       where direction is either 0, 1, 2\n";
>   exit;
> }
>
> open(CARPETFILE,   "<$ARGV[1]") || die "Unable to find file \"$ARGV[1]\"."; 
>
> my $direction = $ARGV[0]+9; 
> my $flag = 0;
> my $newflag = 0;
> my $refinementlevel = 0;
> my %componentflag = ();
> $componentflag{$refinementlevel} = 0;
> my @outputdata = ("\n");
>
> #
> # Open the output file for the base grid. 
> #
> my $file = $ARGV[2]."_$refinementlevel.xg";
> my %outputfilelist = ();
> $outputfilelist{$refinementlevel} =
>   new FileHandle(">$file") || die "Unable to open file \"$file\"."; 
>
> #
> # Find the correct column for the spatial coordinate; requires a magic number
> #
> while (<CARPETFILE>)
> {
>     # skip empty lines
>     next if (/^(\s)*$/);
>
>     $line = $_;
>
>     if(/^\#/) # The line is a header comment
>     {
> 	if ($flag==1) # It's a new level and there is data to output
>         {
> 	    my $fh = $outputfilelist{$refinementlevel};
> 	    print $fh @outputdata;
> 	    @outputdata=("\n");
> 	    $flag = 0;
> 	}
> 	if ($line =~ /refinement level ([0-9]{1,2})/) # Line gives ref. level
> 	{
> 	    $refinementlevel = $1;
> 	    $line =~ /component ([0-9+])/;
> 	    $componentflag{$refinementlevel} = $1; # Which component?
>
> 	    # If no file exists for this refinement level, 
> 	    # open and add filehandle to list
> 	    if (not defined $outputfilelist{$refinementlevel})
> 	    { 
> 		$file = $ARGV[2] . "_$refinementlevel.xg";
> 		$outputfilelist{$refinementlevel} = 
> 		  new FileHandle(">$file") || die "Unable to open file \"$file\"."; 
> 	    }
> 	}
> 	# Only output the headers if this is the zero component
> 	# FIXME: what happens if component 0 isn't output first?
> 	if (0 == $componentflag{$refinementlevel})
> 	{
> 	    push(@outputdata, ("\"",$line)); # Add ygraph comment marker
> 	    $newflag = 0;
> 	}
> 	else
> 	{
> 	    $flag = 1;
> 	    @outputdata=("");
> 	}
>     }
>     else # The line contains real data
>     {
> 	@data = split(/[ \t]+/,$line);
> 	if (($newflag==0)) # This is the first line of data
> 	{
> 	    $newflag = 1;
> 	    my $timeset = $data[8]; # Magic number gives the Cactus time
> 	    @outputdata = ("\n\n\#Time = $timeset \n", at outputdata);
> 	}
>         chomp ($data[12]);
>         push(@outputdata, "$data[$direction] $data[12]\n");
>     }
> }
>
> #
> # At end of file, so output final data set.
> #
> my $fh = $outputfilelist{$refinementlevel};
> print $fh @outputdata;
>
> foreach $refinementlevel (keys %outputfilelist)
> {
>     close($outputfilelist{$refinementlevel});
> }
>   
> ------------------------------------------------------------------------
>
> _______________________________________________
> Users mailing list
> Users at einsteintoolkit.org
> http://lists.einsteintoolkit.org/mailman/listinfo/users
>   



More information about the Users mailing list