<?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=Suscetibilidade_magn%C3%A9tica_e_calor_espec%C3%ADfico</id>
	<title>Suscetibilidade magnética e calor específico - 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=Suscetibilidade_magn%C3%A9tica_e_calor_espec%C3%ADfico"/>
	<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Suscetibilidade_magn%C3%A9tica_e_calor_espec%C3%ADfico&amp;action=history"/>
	<updated>2026-05-02T17:02:42Z</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=Suscetibilidade_magn%C3%A9tica_e_calor_espec%C3%ADfico&amp;diff=2313&amp;oldid=prev</id>
		<title>Asorander: Criou página com &#039;&lt;source lang = &quot;c&quot;&gt;  #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; #include &lt;time.h&gt;   // Função para atribuir as energias do sistema double W(double w[9], double...&#039;</title>
		<link rel="alternate" type="text/html" href="http://fiscomp.if.ufrgs.br/index.php?title=Suscetibilidade_magn%C3%A9tica_e_calor_espec%C3%ADfico&amp;diff=2313&amp;oldid=prev"/>
		<updated>2018-01-26T21:34:16Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;&amp;lt;source lang = &amp;quot;c&amp;quot;&amp;gt;  #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;math.h&amp;gt; #include &amp;lt;time.h&amp;gt;   // Função para atribuir as energias do sistema double W(double w[9], double...&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;
#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;
&lt;br /&gt;
&lt;br /&gt;
// Função para atribuir as energias do sistema&lt;br /&gt;
double W(double w[9], double);&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Função de atribuição de vizinhos em horizontais&lt;br /&gt;
int vizinhancaj(int l, int **vizinhoj)&lt;br /&gt;
{&lt;br /&gt;
	int i;&lt;br /&gt;
	for (i = 0; i &amp;lt; l; i++)&lt;br /&gt;
	{&lt;br /&gt;
		vizinhoj[i][1] = i+1;&lt;br /&gt;
		vizinhoj[i][3] = i-1;&lt;br /&gt;
		vizinhoj[i][2] = i;&lt;br /&gt;
		vizinhoj[i][4] = i;&lt;br /&gt;
	}&lt;br /&gt;
	vizinhoj[0][3] = l-1;&lt;br /&gt;
	vizinhoj[l-1][1] = 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Função de atribuição de vizinhos verticais&lt;br /&gt;
int vizinhancai(int l, int **vizinhoi)&lt;br /&gt;
{&lt;br /&gt;
	int i;&lt;br /&gt;
	for (i = 0; i &amp;lt; l; i++)&lt;br /&gt;
	{&lt;br /&gt;
		vizinhoi[i][2] = i+1;&lt;br /&gt;
		vizinhoi[i][4] = i-1;&lt;br /&gt;
		vizinhoi[i][1] = i;&lt;br /&gt;
		vizinhoi[i][3] = i;&lt;br /&gt;
	}&lt;br /&gt;
	vizinhoi[0][4] = l-1;&lt;br /&gt;
	vizinhoi[l-1][2] = 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Função responsável por calcular a variação de energia entre dois estados&lt;br /&gt;
double Eflip(int l, int** matrix, int i, int j, int **vizinhoi, int **vizinhoj)&lt;br /&gt;
{&lt;br /&gt;
	int k, J = 1;&lt;br /&gt;
	int E = 0;&lt;br /&gt;
&lt;br /&gt;
	for (k = 1; k &amp;lt; 5; k++)&lt;br /&gt;
	{&lt;br /&gt;
		E += matrix[vizinhoi[i][k]][vizinhoj[j][k]];&lt;br /&gt;
	}&lt;br /&gt;
	E = 2*J*E*matrix[i][j];&lt;br /&gt;
	return E;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Função responsável por calcular a energia total do sistema&lt;br /&gt;
double ETotal(int** matrix, int **vizinhoi, int **vizinhoj, int l)&lt;br /&gt;
{&lt;br /&gt;
	int i, j, k, J = 1;&lt;br /&gt;
	double E = 0;&lt;br /&gt;
&lt;br /&gt;
	for(i = 0; i &amp;lt; l; i++)&lt;br /&gt;
		for (j = 0; j &amp;lt; l; j++)&lt;br /&gt;
		{&lt;br /&gt;
			for (k = 1; k &amp;lt; 5; k++)&lt;br /&gt;
			{&lt;br /&gt;
				E += matrix[i][j]*matrix[vizinhoi[i][k]][vizinhoj[j][k]];&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	E *= -J;&lt;br /&gt;
	return E/2.0; //Divisão por 2 por somamos duas vezes cada interação entre vizinhos&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
main()&lt;br /&gt;
{&lt;br /&gt;
	int i, j, k, l = 20, MCS = 0, E;  // l = Lado da matrix&lt;br /&gt;
 	int t = 0;&lt;br /&gt;
	double r, prob, M = 0, T = 2.2, ET, w[9], X, M2 = 0, M_2 = 0, C, E2, E_2; // T = Temperatura&lt;br /&gt;
	FILE *arq, *arq2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	// Incialização das matrizes utilizadas no sistema&lt;br /&gt;
	int ** matrix = (int **)malloc(l*sizeof(int*));&lt;br /&gt;
	int **vizinhoi = (int **)malloc(l*sizeof(int*));&lt;br /&gt;
	int **vizinhoj = (int **)malloc(l*sizeof(int*));&lt;br /&gt;
&lt;br /&gt;
	for(i=0;i&amp;lt;l;i++)&lt;br /&gt;
	{&lt;br /&gt;
		vizinhoi[i] = (int*)malloc(5*sizeof(int));&lt;br /&gt;
		vizinhoj[i] = (int*)malloc(5*sizeof(int));&lt;br /&gt;
		matrix[i] = (int *) malloc(l*sizeof(int*));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	vizinhancai(l,vizinhoi);&lt;br /&gt;
	vizinhancaj(l,vizinhoj);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	srand(time(0));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
///////////////////////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;
&lt;br /&gt;
	arq = fopen(&amp;quot;Suscetibilidade&amp;quot;, &amp;quot;w&amp;quot;);&lt;br /&gt;
	arq2 = fopen(&amp;quot;Calor&amp;quot;, &amp;quot;w&amp;quot;);&lt;br /&gt;
	for(T = 2.1; T &amp;lt;= 2.6; T+=0.01)		// Laço de variação da temperatura&lt;br /&gt;
	{&lt;br /&gt;
		W(w,T);		// Inicializar probabilidades de mudar de estado&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		// Incialização da matriz de spins aleatóriamente para cada temperatura&lt;br /&gt;
		for (i = 0; i &amp;lt; l; i++)&lt;br /&gt;
		{&lt;br /&gt;
			for (j = 0; j &amp;lt; l; j++)&lt;br /&gt;
			{&lt;br /&gt;
				r = (double)rand()/RAND_MAX;&lt;br /&gt;
				if (r &amp;lt; 0.5)&lt;br /&gt;
					//Cooperadores recebem valor 0&lt;br /&gt;
					matrix[i][j] = (int)-1;&lt;br /&gt;
				else&lt;br /&gt;
					//Desertores ganham valor 1&lt;br /&gt;
					matrix[i][j] = (int)1;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		ET = ETotal(matrix, vizinhoi, vizinhoj, l);		// Calculo da energia total&lt;br /&gt;
		M = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		// Calculo da magnetização total&lt;br /&gt;
		for (i = 0; i &amp;lt; l; i++)&lt;br /&gt;
			for (j = 0; j &amp;lt; l; j++)&lt;br /&gt;
				M += matrix[i][j];&lt;br /&gt;
&lt;br /&gt;
		&lt;br /&gt;
&lt;br /&gt;
		for (MCS = 0; MCS &amp;lt; 1e5; MCS++)		// Laço de equilíbrio do sistema&lt;br /&gt;
		{&lt;br /&gt;
			for (t = 0; t &amp;lt; l*l; t++)&lt;br /&gt;
			{&lt;br /&gt;
				i = rand()%l;&lt;br /&gt;
				j = rand()%l;&lt;br /&gt;
				E = Eflip(l, matrix, i, j, vizinhoi, vizinhoj);&lt;br /&gt;
				if(E &amp;lt;= 0)&lt;br /&gt;
				{&lt;br /&gt;
					matrix[i][j] = -matrix[i][j];&lt;br /&gt;
					ET += E;&lt;br /&gt;
					M += 2*matrix[i][j];&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					prob = w[E];&lt;br /&gt;
					r = 1.*rand()/RAND_MAX;&lt;br /&gt;
					if(r &amp;lt; prob)&lt;br /&gt;
					{&lt;br /&gt;
						matrix[i][j] = -matrix[i][j];&lt;br /&gt;
						ET += E;&lt;br /&gt;
						M += 2*matrix[i][j];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Inicialização das variáveis de médias&lt;br /&gt;
		M2 = 0;&lt;br /&gt;
		M_2 = 0;&lt;br /&gt;
		E2 = 0;&lt;br /&gt;
		E_2 = 0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		for (MCS = 0; MCS &amp;lt; 1e6; MCS++)		// Laço de MCS&lt;br /&gt;
		{&lt;br /&gt;
			for (t = 0; t &amp;lt; l*l; t++)		// Laço de tempo para 1 MCS&lt;br /&gt;
			{&lt;br /&gt;
&lt;br /&gt;
				// Escolha aleatória de um spin&lt;br /&gt;
				i = rand()%l;&lt;br /&gt;
				j = rand()%l;&lt;br /&gt;
&lt;br /&gt;
				// Calculo da variação de energia&lt;br /&gt;
				E = Eflip(l, matrix, i, j, vizinhoi, vizinhoj);&lt;br /&gt;
			&lt;br /&gt;
				// Condicional do método de Metropolis&lt;br /&gt;
				if(E &amp;lt;= 0)&lt;br /&gt;
				{&lt;br /&gt;
					matrix[i][j] = -matrix[i][j];&lt;br /&gt;
					ET += E;&lt;br /&gt;
					M += 2*matrix[i][j];&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					prob = w[E];&lt;br /&gt;
					r = 1.*rand()/RAND_MAX;&lt;br /&gt;
					if(r &amp;lt; prob)&lt;br /&gt;
					{&lt;br /&gt;
						matrix[i][j] = -matrix[i][j];&lt;br /&gt;
						ET += E;&lt;br /&gt;
						M += 2*matrix[i][j];&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Somatórios de média e média quadráticas por spin para magnetização e energia&lt;br /&gt;
			M2 += (1.*M/(l*l))*(1.*M/(l*l));		// somatório da média quadrática de M&lt;br /&gt;
			E2 += (1.*ET/(l*l))*(1.*ET/(l*l));		// somatório da média quadrática de E&lt;br /&gt;
			E_2 += 1.*ET/(l*l);						// somatório da média de E&lt;br /&gt;
			M_2 += fabs(1.*M/(l*l));				// somatório da média de M&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Cálculo final das médias e médias quadráticas&lt;br /&gt;
		M_2 = (M_2/MCS);		// Média de M&lt;br /&gt;
		E_2 = (E_2/MCS);		// Média de E&lt;br /&gt;
		M_2 *= M_2;				// Quadrado da média de M&lt;br /&gt;
		E_2 *= E_2;				// Quadrado da média de E&lt;br /&gt;
		M2 /= MCS;				// Média quadrática de M&lt;br /&gt;
		E2 /= MCS;				// Média quadrática de E&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		X = (l*l)*(M2-M_2)/T;			//	Calculo da suscetibilidade magnética&lt;br /&gt;
		C = (l*l)*(E2-E_2)/(T*T);		//	Calculo do calor específico&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
		// Impressão da suscetibilidade magnética e calor específico&lt;br /&gt;
		fprintf(arq, &amp;quot;%lf\t%lf\n&amp;quot;, T, X);&lt;br /&gt;
		fprintf(arq2, &amp;quot;%lf\t%lf\n&amp;quot;, T, C);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	fclose(arq);&lt;br /&gt;
	fclose(arq2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Função de probabilidade de mudar de estado&lt;br /&gt;
double W(double w[9], double T)&lt;br /&gt;
{&lt;br /&gt;
	//return exp(-1.*E/(T));&lt;br /&gt;
	w[2] = exp(-2.0/T);&lt;br /&gt;
	w[4] = exp(-4.0/T);&lt;br /&gt;
	w[6] = exp(-6.0/T);&lt;br /&gt;
	w[8] = exp(-8.0/T);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Asorander</name></author>
	</entry>
</feed>