<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=Potts_Metropolis</id>
	<title>Potts Metropolis - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="http://fiscomp.if.ufrgs.br/index.php?action=history&amp;feed=atom&amp;title=Potts_Metropolis"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Potts_Metropolis&amp;action=history"/>
	<updated>2026-06-12T19:39:57Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>http://fiscomp.if.ufrgs.br/index.php?title=Potts_Metropolis&amp;diff=4436&amp;oldid=prev</id>
		<title>Pedhmendes: Criou página com &#039;&lt;source lang = &quot;c&quot;&gt; /*****************************************************************************  *                              Potts Model 2D...&#039;</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Potts_Metropolis&amp;diff=4436&amp;oldid=prev"/>
		<updated>2021-05-16T21:38:49Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;&amp;lt;source lang = &amp;quot;c&amp;quot;&amp;gt; /*****************************************************************************  *                              Potts Model 2D...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;source lang = &amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
/*****************************************************************************&lt;br /&gt;
 *                              Potts Model 2D                               *&lt;br /&gt;
 *                                Metropolis				     *&lt;br /&gt;
 ****************************************************************************/&lt;br /&gt;
&lt;br /&gt;
/*****************************************************************************&lt;br /&gt;
 *                            	   INCLUDES 			             *&lt;br /&gt;
 ****************************************************************************/&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;math.h&amp;gt;&lt;br /&gt;
#include &amp;lt;time.h&amp;gt;&lt;br /&gt;
#include &amp;lt;string.h&amp;gt;&lt;br /&gt;
#include &amp;quot;mc.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
/*****************************************************************************&lt;br /&gt;
 *                            	  DEFINITIONS                      	     *&lt;br /&gt;
 ****************************************************************************/&lt;br /&gt;
#define 			L           			64&lt;br /&gt;
#define 			L2          			(L*L)&lt;br /&gt;
#define 			J           			1.&lt;br /&gt;
#define 			KB			        1.&lt;br /&gt;
#define 			TRAN      			1//100000&lt;br /&gt;
#define 			TMAX     			1000000&lt;br /&gt;
&lt;br /&gt;
/*****************************************************************************&lt;br /&gt;
 *                            GLOBAL VARIABLES                   	     *&lt;br /&gt;
 ****************************************************************************/&lt;br /&gt;
int M, ET;&lt;br /&gt;
&lt;br /&gt;
/*****************************************************************************&lt;br /&gt;
 *                                FUNCTIONS 		                     *&lt;br /&gt;
 ****************************************************************************/&lt;br /&gt;
void initialize(int *spin, int **neigh, int **kronecker, int _Q);&lt;br /&gt;
void sweep(int *spin, int **neigh, int **kronecker, int _Q, double _TEMP);&lt;br /&gt;
void states(int *spin, int **neigh, int **kronecker, int _Q);&lt;br /&gt;
void visualize(int *spin);&lt;br /&gt;
&lt;br /&gt;
/*****************************************************************************&lt;br /&gt;
 *                         	 MAIN PROGRAM  				     *&lt;br /&gt;
 ****************************************************************************/&lt;br /&gt;
int main(int argc, char *argv[])&lt;br /&gt;
{&lt;br /&gt;
	int *spin, **neigh, **kronecker;&lt;br /&gt;
	int i, mcs;&lt;br /&gt;
	int Q;	&lt;br /&gt;
	double TEMP;&lt;br /&gt;
&lt;br /&gt;
	Q = atoi(argv[1]);&lt;br /&gt;
	TEMP = atof(argv[2]);&lt;br /&gt;
&lt;br /&gt;
	spin = (int*)malloc(L2*sizeof(int));&lt;br /&gt;
	neigh = (int**)malloc(L2*sizeof(int*));&lt;br /&gt;
	kronecker =(int**)malloc(Q*sizeof(int*));&lt;br /&gt;
&lt;br /&gt;
	for(i=0; i&amp;lt;L2; i++)&lt;br /&gt;
	{&lt;br /&gt;
		neigh[i] = (int *)malloc(4*sizeof(int));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	for(i=0; i&amp;lt;Q; i++)&lt;br /&gt;
	{&lt;br /&gt;
		kronecker[i] = (int*)malloc(Q*sizeof(int));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	seed = start_randomic();&lt;br /&gt;
&lt;br /&gt;
	initialize(spin, neigh, kronecker, Q);&lt;br /&gt;
	states(spin, neigh, kronecker, Q);&lt;br /&gt;
&lt;br /&gt;
	for(mcs=0; mcs&amp;lt;TRAN; mcs++)&lt;br /&gt;
	{&lt;br /&gt;
      		sweep(spin, neigh, kronecker, Q, TEMP);	&lt;br /&gt;
    	  	states(spin, neigh, kronecker, Q);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	char Arq[100];&lt;br /&gt;
	FILE *arq;&lt;br /&gt;
	sprintf(Arq, &amp;quot;mp_Q%dL%dT%.3lf.dsf&amp;quot;, Q, L, TEMP);&lt;br /&gt;
	arq = fopen(Arq, &amp;quot;w&amp;quot;);&lt;br /&gt;
	fprintf(arq, &amp;quot;#SEED: %ld\n#MCS\tM\tET\n&amp;quot;, seed);&lt;br /&gt;
&lt;br /&gt;
    	&lt;br /&gt;
	for(mcs=0; mcs&amp;lt;TMAX; mcs++) &lt;br /&gt;
	{&lt;br /&gt;
	  	sweep(spin, neigh, kronecker, Q, TEMP);&lt;br /&gt;
	  	states(spin, neigh, kronecker, Q);&lt;br /&gt;
#ifdef VIEW	 &lt;br /&gt;
	       	if(mcs % 10 == 0)&lt;br /&gt;
		{&lt;br /&gt;
			printf(&amp;quot;set title &amp;#039;T = %d MCS&amp;#039;\n&amp;quot;, mcs);&lt;br /&gt;
			visualize(spin);&lt;br /&gt;
		}&lt;br /&gt;
#endif&lt;br /&gt;
		fprintf(arq, &amp;quot;%d\t%d\t%d\n&amp;quot;, mcs, M, ET);&lt;br /&gt;
&lt;br /&gt;
    	}&lt;br /&gt;
&lt;br /&gt;
	fclose(arq);&lt;br /&gt;
&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*****************************************************************************&lt;br /&gt;
 *                        	INITIALIZATION  			     *&lt;br /&gt;
 ****************************************************************************/&lt;br /&gt;
void initialize(int *spin, int **neigh, int **kronecker, int _Q)&lt;br /&gt;
{&lt;br /&gt;
	int i, j;&lt;br /&gt;
&lt;br /&gt;
     	for(i=0; i&amp;lt;L2; i++)&lt;br /&gt;
       	{&lt;br /&gt;
	   	spin[i]=FRANDOM*_Q;&lt;br /&gt;
     	}&lt;br /&gt;
	&lt;br /&gt;
     	for(i=0; i&amp;lt;L2; i++)&lt;br /&gt;
       	{&lt;br /&gt;
		neigh[i][0] = (i-L+L2)%L2;&lt;br /&gt;
                neigh[i][1] = (i+1)%L + (i/L)*L;&lt;br /&gt;
                neigh[i][2] = (i+L)%L2;&lt;br /&gt;
                neigh[i][3] = (i-1+L)%L + (i/L)*L;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
   	for(i=0; i&amp;lt;_Q; i++)&lt;br /&gt;
	{&lt;br /&gt;
		for(j=0; j&amp;lt;_Q; j++)&lt;br /&gt;
		{&lt;br /&gt;
			if(i==j)&lt;br /&gt;
			{&lt;br /&gt;
				kronecker[i][j] = 1;&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				kronecker[i][j] = 0;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
 }&lt;br /&gt;
/*****************************************************************************&lt;br /&gt;
 *                            MONTE CARLO ROUTINE                            *&lt;br /&gt;
 ****************************************************************************/&lt;br /&gt;
void sweep(int *spin, int **neigh, int **kronecker, int _Q, double _TEMP)&lt;br /&gt;
{&lt;br /&gt;
	for (int i=0; i&amp;lt;L2; i++) &lt;br /&gt;
	{&lt;br /&gt;
    		int site = FRANDOM*L2;&lt;br /&gt;
		int E1=0, E2 = 0;&lt;br /&gt;
  		int new_state = FRANDOM*_Q;&lt;br /&gt;
  		&lt;br /&gt;
		for(int j=0; j&amp;lt;4; j++)&lt;br /&gt;
		{&lt;br /&gt;
  		 	E1 -= J*kronecker[spin[site]][spin[neigh[site][j]]];&lt;br /&gt;
      		}&lt;br /&gt;
	  	&lt;br /&gt;
		for (int j=0; j&amp;lt;4; j++)&lt;br /&gt;
		{&lt;br /&gt;
		    	E2 -= J*kronecker[new_state][spin[neigh[site][j]]];&lt;br /&gt;
      		}&lt;br /&gt;
		&lt;br /&gt;
		double dE = E2 - E1;&lt;br /&gt;
		&lt;br /&gt;
		if(dE &amp;lt;= 0)&lt;br /&gt;
		{&lt;br /&gt;
		    	spin[site] = new_state;&lt;br /&gt;
      		}&lt;br /&gt;
		&lt;br /&gt;
		else&lt;br /&gt;
       		{&lt;br /&gt;
		    	double r = FRANDOM;&lt;br /&gt;
			double ALPHA = exp(-dE/(KB*_TEMP));  &lt;br /&gt;
		&lt;br /&gt;
			if(r&amp;lt;=ALPHA) &lt;br /&gt;
			{     &lt;br /&gt;
			       	spin[site] = new_state;&lt;br /&gt;
		    	}&lt;br /&gt;
  		}&lt;br /&gt;
  	}&lt;br /&gt;
&lt;br /&gt;
      	return;&lt;br /&gt;
}&lt;br /&gt;
/*****************************************************************************&lt;br /&gt;
 *                            	   STATES     		                     *&lt;br /&gt;
 ****************************************************************************/&lt;br /&gt;
void states(int *spin, int **neigh, int **kronecker, int _Q)&lt;br /&gt;
{&lt;br /&gt;
	int i, j;&lt;br /&gt;
&lt;br /&gt;
	ET=0;&lt;br /&gt;
  	M=0;&lt;br /&gt;
&lt;br /&gt;
  	if(_Q!=2)&lt;br /&gt;
	{&lt;br /&gt;
		for (i=0; i&amp;lt;L2; i++)&lt;br /&gt;
		{&lt;br /&gt;
			for(j=0; j&amp;lt;4; j++)&lt;br /&gt;
	     		{&lt;br /&gt;
				ET -=J*kronecker[spin[i]][spin[neigh[i][j]]];&lt;br /&gt;
			}			&lt;br /&gt;
&lt;br /&gt;
			M += spin[i];&lt;br /&gt;
	    	}&lt;br /&gt;
  	}&lt;br /&gt;
&lt;br /&gt;
  	else&lt;br /&gt;
	{&lt;br /&gt;
	    	for(i=0; i&amp;lt;L2; i++)&lt;br /&gt;
		{&lt;br /&gt;
			for(j=0; j&amp;lt;4; j++)&lt;br /&gt;
	     		{&lt;br /&gt;
				ET -=J*kronecker[spin[i]][spin[neigh[i][j]]];&lt;br /&gt;
			}					&lt;br /&gt;
		  	&lt;br /&gt;
			if(spin[i]==0)&lt;br /&gt;
			{&lt;br /&gt;
				M -= 1;  &lt;br /&gt;
			}&lt;br /&gt;
		  	if(spin[i]==1)&lt;br /&gt;
			{&lt;br /&gt;
				M += 1;  &lt;br /&gt;
			}&lt;br /&gt;
    		}&lt;br /&gt;
  	}&lt;br /&gt;
&lt;br /&gt;
	return;&lt;br /&gt;
}&lt;br /&gt;
/*****************************************************************************&lt;br /&gt;
 *                           GNUPLOT VISUALIZATION                           *&lt;br /&gt;
 ****************************************************************************/&lt;br /&gt;
void visualize(int *spin)&lt;br /&gt;
{&lt;br /&gt;
  	int i;&lt;br /&gt;
	printf(&amp;quot;unset xtics\nunset ytics\n&amp;quot;);	&lt;br /&gt;
	printf(&amp;quot;set size square\n&amp;quot;);&lt;br /&gt;
	printf(&amp;quot;set xrange [0:%d]\nset yrange [0:%d]\n&amp;quot;,L-1,L-1);&lt;br /&gt;
    	printf(&amp;quot;pl &amp;#039;-&amp;#039; matrix w image\n&amp;quot;);&lt;br /&gt;
	for(i=L2-1; i&amp;gt;=0; i--) &lt;br /&gt;
	{&lt;br /&gt;
	    	printf(&amp;quot;%d &amp;quot;, spin[i]);&lt;br /&gt;
		if(i%L == 0)&lt;br /&gt;
		{&lt;br /&gt;
		       	printf(&amp;quot;\n&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
      	}&lt;br /&gt;
	&lt;br /&gt;
      	printf(&amp;quot;e\n\n&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pedhmendes</name></author>
	</entry>
</feed>