// TEXTOUT.C
// Functions for text output.
// © 2021 Peter J. Meyer
#include "iss.h"
#define PAUSE false
#define STANDARD_LATTICE_TYPES_ONLY true
static void display_common_input_data_format_1(void);
static void display_percolation_input_data_format_1(void);
static void display_spin_model_input_data_format_1(void);
static void display_common_input_data_format_2(void);
static void display_percolation_input_data_format_2(void);
static void display_spin_model_input_data_format_2(void);
/*------------------------*/
void display_copyright(void)
{
printf("%s, Version %.2f, Copyright 2000 Peter Meyer\n",exe_name,version_no);
}
/*------------------*/
void show_notice(void)
{
printf("\nThis program accompanies a thesis submitted to the University");
printf("\nof Derby in July 2000 for the degree of Master of Philosophy.");
printf("\nAny use of this program other than to verify results of research");
printf("\nreported in the thesis should be undertaken only after consultation");
printf("\nwith the author of this software.\n");
printf("\nPress a key to continue ...");
if ( getch() == 27 )
exit(0);
printf("\n");
}
/*---------------------*/
void display_syntax(void)
{
printf("\nSyntax: %s input_file_1.IN [input_file_2.IN [...]]",exe_name);
printf("\nOutput data file has same name with extension .OUT.");
// printf("\nMap file has same name with extension .MAP.");
#if SAVE_MEASUREMENTS
printf("\nMeasurements file has same name with extension .MEA.");
#endif
printf("\nFor the format of the input data use: %s /F\n",exe_name);
exit(0);
}
/*--------------------------------*/
void display_input_data_format(void)
{
int ch;
#if DOES_PERCOLATION_THRESHOLDS
printf("\nFor info re determination of percolation thresholds press 'P'."
"\nFor info re spin model dynamics press 'S'. Otherwise press Escape. \n");
ch = getch();
ch -= 32*(ch>'Z');
#else
ch = 'S';
#endif
if ( ch == 'P' || ch == 'S' )
{
printf("\n------------ ISM V%.2f INPUT PARAMETERS "
"(%s) ------------",version_no,
(ch=='P' ? "PERCOLATION THRESHOLDS" : "SPIN MODEL DYNAMICS" ));
printf("\nParameter name Permitted values");
#if DOES_PERCOLATION_THRESHOLDS
printf("\ngoal: %s",
(ch=='P' ? "Si[te percolation threshold] | Bo[nd percolation threshold]" :
"Sp[in model dynamics]"));
#endif
display_common_input_data_format_1();
if ( ch == 'P' )
display_percolation_input_data_format_1();
else
display_spin_model_input_data_format_1();
display_common_input_data_format_2();
if ( ch == 'P' )
display_percolation_input_data_format_2();
else if ( ch == 'S' )
display_spin_model_input_data_format_2();
}
printf("\n");
exit(0);
}
/*------------------------------------------------*/
static void display_common_input_data_format_1(void)
{
#if TETRAHEDRAL_LATTICE_IMPLEMENTED
printf("\nlattice type: SQU | HON | TRI | DTR | CUB | DIA | QUA | TET | HC4 | HD4");
#elif STANDARD_LATTICE_TYPES_ONLY
printf("\nlattice type: SQU | HON | TRI | CUB | DIA | HC4");
#else
printf("\nlattice type: SQU | HON | TRI | DTR | CUB | DIA | QUA | HC4 | HD4");
#endif
// Lattice types: Square | Honeycomb | Triangular | Double triangular
// | Cubic | Diamond | Quadrilateral | Tetrahedral
// | Hypercubic (4d) | Hyperdiamond (4d)
#if MAJOR_AXIS_SPECIFICATION_PERMITTED
printf("\nmajor axis: %d - %d // If honeycomb or diamond lattice.",
MIN_MAJOR_AXIS,MAX_MAJOR_AXIS);
#endif
}
/*-----------------------------------------------------*/
static void display_percolation_input_data_format_1(void)
{
printf("\nlattice size: %d - %d (2d), %d - %d (3d), %d - %d (4d)",
MIN_SIZE_PT,max_size[0][2],MIN_SIZE_PT,max_size[0][3],
MIN_SIZE_PT,max_size[0][4]);
}
/*----------------------------------------------------*/
static void display_spin_model_input_data_format_1(void)
{
printf("\nlattice size: %d - %d (2d), %d - %d (3d), %d - %d (4d)",MIN_SIZE,max_size[0][2],
MIN_SIZE,max_size[0][3],MIN_SIZE,max_size[0][4]);
printf("\nmodel: Is[ing] | q-[state Potts]");
printf("\nq-value: %d - %d // q-state Potts model only",
MIN_Q_VALUE,MAX_Q_VALUE);
printf("\ndynamics: ME[tropolis] | GL[auber] | SW[endsen-Wang] | WO[lff]");
#if ALTERNATIVE_SPIN_SELECTIONS
printf("\nspin selection: RA[ndom] | CH[eckerboard] // ME or GL only");
#endif
printf("\ntemperature: %.3f - %.3f // or \"critical\"",
MIN_TEMPERATURE,MAX_TEMPERATURE);
printf("\ntemperatures: // Separate multiple temperatures with commas");
printf("\ninitial magnetization: -1.0 - +1.0 // >= -1/(q-1) for q-state Potts");
}
/*------------------------------------------------*/
static void display_common_input_data_format_2(void)
{
printf("\nsite concentration: %.3f - %.3f",
MIN_CONCENTRATION,MAX_CONCENTRATION);
printf("\nbond concentration: %.3f - %.3f",
MIN_CONCENTRATION,MAX_CONCENTRATION);
}
/*-----------------------------------------------------*/
static void display_percolation_input_data_format_2(void)
{
printf("\nprecision: %d - %d // decimal places",
MIN_PRECISION,MAX_PRECISION);
}
/*----------------------------------------------------*/
static void display_spin_model_input_data_format_2(void)
{
#if PAUSE
int ch;
unsigned int i, j;
#endif
printf("\nnumber of configurations: 1 - %s // 1 for a non-diluted lattice",
ultoa_commas(MAX_NUM_CONFIGURATIONS,temp));
printf("\nnumber of spin assignments: 1 - %s",ultoa_commas(MAX_NUM_SPIN_ASSIGNMENTS,temp));
printf("\nnumber of repetitions: 1 - %d // Using different random numbers",
MAX_NUM_REPETITIONS);
printf("\nnumber of timeslices: %d - %s",MIN_NUM_TIME_SLICES,
ultoa_commas(MAX_NUM_TIME_SLICES,temp));
printf("\nstep length: 1 - %s // timesteps between timeslices",
ultoa_commas(MAX_STEP_LENGTH,temp));
printf("\npercentage range for mean: %d - %d",
MIN_PERCENTAGE_RANGE_FOR_MEAN,MAX_PERCENTAGE_RANGE_FOR_MEAN);
#if PAUSE
strcpy(temp,"Press a key ...");
printf("\n%s",temp);
ch = getch();
j = strlen(temp);
for ( i=0; i<j; i++ )
printf("\b");
if ( ch == ESCAPE )
{
for ( i=0; i<j; i++ )
printf(" ");
}
else
#else
printf("\n");
#endif
{
printf("Use \"Y[es]\" or \"N[o]\" for the following (1st three required):");
printf("\nprecompute nn sites: absolute magnetization: timeslice values:");
printf("\nsecond moment: autocorrelation: map file:");
printf("\ninternal energy: Binder cumulant: log values:");
printf("\nadjust zero initial magnetization:");
#if false
printf("\npercolation correlation length:");
printf("\nthermal correlation length A: thermal correlation length B:");
#endif
}
}