// CRITTEMP.C
// © 2021 Peter J. Meyer
#include "iss.h"
// Critical temperature depends not only on model and dimensionality
// but also on lattice type.
// Returns critical temperature of the current spin model
// or -1 if not known.
/*---------------------------------*/
double get_critical_temperature(void)
{
int i;
if ( model_is_ising )
return ( lattice_types[l_type].ising_crit_temp );
else // model is q-state Potts
{
for ( i=0; i<NUM_LATTICE_TYPES; i++ )
{
if ( !strcmp(lattice_types[i].name,"square") )
break;
}
if ( l_type == i )
return ( 1/log(1+sqrt(q)) );
// Calculate critical temperatures for square q-state Potts models
// following Okano, et al., "Universality & Scaling in Short-time Critical Dynamics".
else
return ( -1 );
// Critical temperature for non-square q-state Potts models not known at this time.
}
}
#if false
/*--------------------------------*/
void set_critical_temperatures(void)
{
int i,j,qq;
#if false
for ( i=0; i<=MAX_DIMENSIONALITY; i++ )
for ( j=0; j<NUM_LATTICE_TYPES; j++ )
ising_critical_temperatures[i][j] = -1.0;
for ( i=0; i<=MAX_DIMENSIONALITY; i++ )
for ( j=0; j<NUM_LATTICE_TYPES; j++ )
for ( qq=0; qq<=MAX_Q_VALUE; qq++ )
potts_critical_temperatures[i][j][qq] = -1.0;
#endif
// Calculate pure Ising 2d square model critical temperature
// using formula given on p.177 of Stinchcombe's 1983 article
// on "Dilute Magnetism", Tc = 2J*[KB*ln(1+sqrt(2)]^-1
// with J = 1 and KB = 1:
for ( i=0; i<NUM_LATTICE_TYPES; i++ )
{
if ( !strcmp(lattice_types[i].name,"square") )
break;
}
ising_square_critical_temp = critical_temperatures[2][i]
= 2/log(1+sqrt(2));
for ( i=0; i<NUM_LATTICE_TYPES; i++ )
{
if ( !strcmp(lattice_types[i].name,"cubic") )
break;
}
ising_cubic_critical_temp = critical_temperatures[3][i]
= 4.511536; // Heuer, H.-0., 1992, J.Phys.A, L567
// Calculate critical temperatures for square q-state Potts models
// following Okano, et al., "Universality & Scaling in Short-time Critical Dynamics".
for ( i=0; i<NUM_LATTICE_TYPES; i++ )
{
if ( !strcmp(lattice_types[i].name,"square") )
break;
}
for ( qq=2; qq<=MAX_Q_VALUE; qq++ )
potts_critical_temperatures[2][i][qq] = 1/log(1+sqrt(qq));
// critical_temperatures[Q_STATE_POTTS_MODEL][2][qq] = 2/log(1+sqrt(qq));
// Potts critical temperatures for non-square lattices not known at this point.
}
#endif