#include <stdio.h>
/* This programme calculates the action density profile of the SU(3) 
   caloron with the three constituents in the plane z=0. beta is the
   time-period. */

main(argc,argv)
int argc;
char **argv;
{
        double dAdAlnpsi();
        double beta,nu1,nu2,x,y,z,t,s,tt,yx1,yx2,yx3,yy1,yy2,yy3,yz1,yz2,yz3;
        int mx,my,nx,ny;
        void message();

        if(argc != 17)message();
        if(sscanf(argv[1],"%le",&nu1)!= 1)message();
        if(sscanf(argv[2],"%le",&nu2)!= 1)message();
        if(sscanf(argv[3],"%le",&yx1)!= 1)message();
        if(sscanf(argv[4],"%le",&yy1)!= 1)message();
        if(sscanf(argv[5],"%le",&yx2)!= 1)message();
        if(sscanf(argv[6],"%le",&yy2)!= 1)message();
        if(sscanf(argv[7],"%le",&yx3)!= 1)message();
        if(sscanf(argv[8],"%le",&yy3)!= 1)message();
        if(sscanf(argv[9],"%le",&x)!= 1)message();
        if(sscanf(argv[10],"%le",&y)!= 1)message();
        if(sscanf(argv[11],"%le",&z)!= 1)message();
        if(sscanf(argv[12],"%le",&t)!= 1)message();
        if(sscanf(argv[13],"%le",&s)!= 1)message();
        if(sscanf(argv[14],"%d",&nx)!= 1)message();
        if(sscanf(argv[15],"%d",&ny)!= 1)message();
        if(sscanf(argv[16],"%le",&beta)!= 1)message();
        if(nu1<0.0 || nu1>1.0 || nu2<0.0 || nu2>1.0 || nu1+nu2>1){
          printf("nu1=%lg or nu2=%lg or nu3=%lg not between 0 and 1\n",
                  nu1,nu2,1-nu1-nu2);
          exit();
        }
        yz1=yz2=yz3=0.0;
        x /=beta;
        y /=beta;
        z /=beta;
        t /=beta;
        s /=beta;
        yx1 /=beta;
        yx2 /=beta;
        yx3 /=beta;
        yy1 /=beta;
        yy2 /=beta;
        yy3 /=beta;

     	printf("(* x-y caloron profile for: nu1,nu2,nu3=%lg,%lg,%lg\n",
                                            nu1,nu2,1-nu1-nu2); 
     	printf("   x[1],y[1],step,nx,ny=%lg,%lg,%lg,%d,%d, z,t,beta=%lg,%lg,%lg\n",
		x,y,s,nx,ny,z,t,beta); 
     	printf("   (x1,y1,z1)=(%lg,%lg,%lg),(x2,y2,z2)=(%lg,%lg,%lg),(x3,y3,z3)=(%lg,%lg,%lg) *)\n",
		    yx1,yy1,yz1,yx2,yy2,yz2,yx3,yy3,yz3); 
     	printf("Profile[0]={\n"); 
     	for(mx=0;mx<nx-1;mx++){
     	   printf("{\n"); 
     	   for(my=0;my<ny-1;my++){
     	       tt=-dAdAlnpsi(nu1,nu2,yx1,yx2,yx3,yy1,yy2,yy3,yz1,yz2,yz3,
                             x+s*mx,y+s*my,z,t)/2; 
               printf("%16.10E,\n",tt); 
           }
           tt=-dAdAlnpsi(nu1,nu2,yx1,yx2,yx3,yy1,yy2,yy3,yz1,yz2,yz3,
                         x+s*mx,y+s*(ny-1),z,t)/2; 
     	   printf("%16.10E},\n",tt);
           }
     	   printf("{\n"); 
     	   for(my=0;my<ny-1;my++){
              tt=-dAdAlnpsi(nu1,nu2,yx1,yx2,yx3,yy1,yy2,yy3,yz1,yz2,yz3,
                            x+s*(nx-1),y+s*my,z,t)/2; 
     	      printf("%16.10E,\n",tt);
              }
           tt=-dAdAlnpsi(nu1,nu2,yx1,yx2,yx3,yy1,yy2,yy3,yz1,yz2,yz3,
                         x+s*(nx-1),y+s*(ny-1),z,t)/2; 
     	   printf("%16.10E}\n",tt);
     	printf("};\n"); 
        return(0);
}
     
void message(){
        fprintf(stderr,"usage: su3-x-y nu1 nu2 x1 y1 x2 y2 x3 y3 x y z t s nx ny beta\n");
        exit();
}

