use strict;
use lib '/people/sche155/Eye/create_sphere2/';
use generate_cmgui_mesh qw(generate_cmgui_mesh);
use Math::Trig qw(pi);

my $node_filename = $ARGV[0];
my $element_filename = $ARGV[1];

my $xi1_discretization = 3;
my $xi2_discretization = 3;
my $xi3_discretization = 3;

my $pi = pi;

my @centre = (312, 266.8, -119.0);

my @axis1 = (13.0, 0.0, 0.0);
my @axis2 = (0.0, 12.8, 0.0);
my @axis3 = (0.0, 4.0, 10.0);

my @axis1 = map{$_*1.3}@axis1;
my @axis2 = map{$_*1.3}@axis2;
my @axis3 = map{$_*1.3}@axis3;

#If $generate_cubics is non zero then the resulting mesh will be cubic Hermite, otherwise linear.
my $generate_cubics = 1;

my $group_name = "choroid_host";

sub location_function
{
  my ($xi1_step, $xi2_step, $xi3_step) = @_;

  my @coordinates;
  my @derivatives;

  my $xi3 = $xi3_step / $xi3_discretization;

  my $xi2 = $xi2_step / $xi2_discretization;

  my $xi1 = $xi1_step / $xi1_discretization;

  for (my $i = 0 ; $i < 3 ; $i++)
	 {
		$coordinates[$i] = $centre[$i] +
		  (2.0 * $xi1 - 1.0) * $axis1[$i] +
		  (2.0 * $xi2 - 1.0) * $axis2[$i] +
		  (2.0 * $xi3 - 1.0) * $axis3[$i];

		# d/ds1
		$derivatives[$i * 7] =
		  2.0 / $xi1_discretization * $axis1[$i];

		# d/ds2
		$derivatives[$i * 7 + 1] =
		  2.0 / $xi2_discretization * $axis2[$i];

		# d2/ds1ds2
		$derivatives[$i * 7 + 2] = 0.0;

		# d/ds3
		$derivatives[$i * 7 + 3] =
		  2.0 / $xi3_discretization * $axis3[$i];

		# d2/ds1ds3
		$derivatives[$i * 7 + 4] = 0.0;

		# d2/ds2ds3
		$derivatives[$i * 7 + 5] = 0.0;

		# d3/ds1ds2ds3
		$derivatives[$i * 7 + 6] = 0.0;

	 }

  return(\@coordinates, \@derivatives);
}


generate_cmgui_mesh( $node_filename, $element_filename,
     $xi1_discretization, $xi2_discretization, $xi3_discretization,
     \&location_function, $generate_cubics, $group_name );

