/* Steven Andrews, 12/02, 1/03, 3/04	*/
/* See documentation called Ising doc */
/* Copyright 2003 by Steven Andrews.  Permission is granted
   for non-commercial use of and modifications to the code. */

#ifndef __Ising_h
#define __Ising_h

typedef struct LatticeType {
	int *g;
	char shape;
	int nx;
	int ny;
	int spc;
	int rot; }* Lattice;

Lattice SetUpIsing(char shape,int nx,int ny,int spc,int *nunit,int rot);
void FreeIsing(Lattice lt);
void DisplayIsing(Lattice lt);
void MetropolisIsingS(Lattice lt,int itmax,float *eps);
void MetropolisIsingH(Lattice lt,int itmax,float *eps);
void MetropolisIsingT(Lattice lt,int itmax,float *eps);
void MetropolisIsing(Lattice lt,int itmax,float *eps);
float EnergyAtIsingS(Lattice lt,float *eps,int ix,int iy,int spc1,int rot1);
float EnergyAtIsingH(Lattice lt,float *eps,int ix,int iy,int spc1,int rot1);
float EnergyAtIsingT(Lattice lt,float *eps,int ix,int iy,int spc1,int rot1);
float EnergyAtIsing(Lattice lt,float *eps,int ix,int iy,int spc1,int rot1);
float EnergyIsingS(Lattice lt,float *eps);
float EnergyIsingH(Lattice lt,float *eps);
float EnergyIsingT(Lattice lt,float *eps);
float EnergyIsing(Lattice lt,float *eps);
int CtClustersIsing(Lattice lt,int *count,int ncount);
void DisplayClustersIsing(Lattice lt);
float MinDistIsing(Lattice lt,int ix,int iy,int jx,int jy);
void RadCorrFnIsing(Lattice lt,int spc1,int spc2,float *bins,int nbins,float binsize);
void DisplayRCFIsing(Lattice lt,int spc1,int spc2,float binsize);
float LatticeSiteDistH(float *xptr,float *yptr,int *ixptr,int *iyptr,float sp);

//#ifdef __gl_h_
void DisplayIsingGL(Lattice lt,float *colors);
//#endif

#endif