// ISS_VAR.H // Variable declarations and initializations. // © 2021 Peter J. Meyer // M is #defined only in ISM.C. double version_no #ifdef M = 1.93 // Last version at U. of D.: 1.93 #endif ; clock_t task_start, task_end; int dimensionality; // lattice dimension int size; // lattice size int num_sites; // number of sites in the lattice int coord_num; // coordination number int q; // q-value for q-state Potts model int major_axis // used with honeycomb and diamond lattices #ifdef M = 0 #endif ; // maximum size of lattice based on dimensionality and dynamics algorithm int max_size[][MAX_DIMENSIONALITY+1] #ifdef M = { { 0, 0, 4096, 256, 64 }, // Metropolis { 0, 0, 4096, 256, 64 }, // Glauber { 0, 0, 2048, 128, 48 }, // Swendsen-Wang { 0, 0, 1028, 96, 32 } // Wolff } // 1200 with 2d and Wolff leads to stack overflow with 1 MB stack #endif ; char lattice_type[4]; // lattice structure type, SQU, TRI, HY4, etc. char dilution_type[3]; // dilution type, SI, BO or NO char dynamics[3]; // dynamics, Glauber, etc. char goal[3]; // equilibration or percolation threshold char model[3]; // Ising, q-state Potts char spin_seln[3]; // random or checkerboard double site_concentration; // probability of occupied site double bond_concentration; // probability of open bond double precision; // used in determination of percolation threshold double temperature; double site_perc_thr; // site percolation threshold double bond_perc_thr; // bond percolation threshold double initial_magnetization; // when spin model initialized double ising_square_critical_temp; double ising_honeycomb_critical_temp; double ising_triangular_critical_temp; double ising_cubic_critical_temp; double ising_diamond_critical_temp; double ising_4d_hypercubic_critical_temp; double num_samples; double run_time; double v_bond_probability; // virtual bond probability in Swendsen-Wang and in Wolff // indices for goal, lattice, dilution, algorithm, spin selection; int l_type; // lattice int d_type; // dynamics int g_type; // goal int m_type; // model int ss_type; // spin selection // Critical temperatures for the honeycomb, triangular and diamond lattices // are taken from Fisher, 1967, p671. (Should be replaced by newer values.) // Critical temperature for the cubic lattice is from Heuer, 1993. const struct lattice_type lattice_types[NUM_LATTICE_TYPES] #ifdef M = { { "HON", "honeycomb", 2, 3, 1.5187, 0.6962, 0.65271 }, { "SQU", "square", 2, 4, 2.2692, 0.592746, 0.5 }, { "TRI", "triangular", 2, 6, 3.6410, 0.5, 0.34729 }, { "DTR", "double triangular", 2, 8, -1, -1, -1 }, { "DIA", "diamond", 3, 4, 2.7040, 0.428, 0.388 }, { "CUB", "cubic", 3, 6, 4.5115, 0.3116, 0.2488 }, { "QUA", "quadrilateral", 3, 8, -1, -1, -1 }, { "HD4", "hyperdiamond (4d)", 4, 5, -1, -1, -1 }, { "HC4", "hypercubic (4d)", 4, 8, -1, 0.197, 0.160 } #if TETRAHEDRAL_LATTICE_IMPLEMENTED , { "TET", "tetrahedral", 3, 12, -1, -1, -1 } #endif } #endif ; // Percolation thresholds not necessarily exactly correct (-1 means unknown). const char models[][2][30] #ifdef M = { { "IS", "Ising" }, { "Q-", "%d-state Potts" }, { "", "" } } #endif ; // Cf. #defines for ISING and for Q_STATE_POTTS in ISS_DEF.H const char dynamics_types[][2][30] #ifdef M = { { "ME", "Metropolis" }, { "GL", "Glauber" }, { "SW", "Swendsen-Wang" }, { "WO", "Wolff" }, { "", "" } } #endif ; const char goals[][2][30] #ifdef M = { { "SI", "site percolation threshold" }, { "BO", "bond percolation threshold" }, { "SP", "spin model dynamics" }, { "EQ", "equilibration" }, // EQ = SP, for compatibility with previous version { "", "" } } #endif ; const char spin_selns[][2][30] #ifdef M = { { "CH", "checkerboard" }, { "RA", "random" }, { "", "" } } #endif ; // Pointers for dynamically allocated arrays. A2(unsigned char) sites2; // See ALLOC.C A2(unsigned char) bonds2; A2(unsigned char) v_bonds2; // Used only with Swendsen-Wang dynamics. A2(unsigned char) initial_sites2; // Used only if measuring correlation function. A2(unsigned short int)cluster_numbers2; A2(unsigned short int)spin_distances2; A4(short int)precomp_nn_sites2; // For precomputed nn sites. A3(unsigned char) sites3; A3(unsigned char) bonds3; A3(unsigned char) v_bonds3; A3(unsigned char) initial_sites3; A3(unsigned short int)cluster_numbers3; A3(unsigned short int)spin_distances3; A5(short int)precomp_nn_sites3; A4(unsigned char) sites4; A4(unsigned char) bonds4; A4(unsigned char) v_bonds4; A4(unsigned char) initial_sites4; A4(unsigned short int)cluster_numbers4; A4(unsigned short int)spin_distances4; A6(short int)precomp_nn_sites4; A2(double) magnetization; A2(double) potts_magnetization_squares; A2(double) autocorrelation; A2(double) internal_energy; A2(char) edge; // Used in CLUSTERS.C int input_file_num; int num_input_files; int num_spins; // S&B.C int num_opened_bonds; int num_pairs_nn; // number of pairs of nearest neighbour sites int abs_magnetization; // number of up spins minus number of other spins int abs_internal_energy; // the actual internal energy of the model int num_configurations; int num_spin_assignments; int num_repetitions; int step_length; int num_time_slices; int num_time_slices_done; int num_temperatures; // normally 1 int percentage_range_for_mean; // Used in RESULTS.C int num_divisors; // SETPARAM.C int num_decimal_places; // used in determination of percolation threshold int ct_spin_value, ct_new_spin_value; int ct_size_of_cluster; int temperature_num; // for use with multiple temperatures short int ct_i, ct_j, ct_k, ct_l, ct_r; short int nn_i, nn_j, nn_k, nn_l; short unsigned int ct_cluster_number; int ct_cluster_number_overflow; int max_cluster_size; unsigned int num_clusters_traced_this_sweep; unsigned int num_clusters_traced; unsigned int num_clusters_traced_overflow; unsigned int seed; // the random seed unsigned int num_spin_visits; unsigned int num_spin_visits_overflow; unsigned int num_spin_flips; unsigned int num_spin_flips_overflow; unsigned int num_sweeps; unsigned int num_sweeps_overflow; unsigned int num_spins_visited_this_sweep; unsigned int num_spins_flipped_this_sweep; unsigned long mcs_num; // EQUIL.C // unsigned long num_mcs_to_do; unsigned long mcs_done; unsigned long pause_time; char exe_name[16]; // name of executable char input_filepath[128]; // pathname of input data file char output_filepath[128]; // pathname of output data file char map_filepath[128]; // pathname of map file char measurements_filepath[128]; // pathname for measurements file // char spin_ass_filepath[128]; // pathname for spin assignment file char temp[128]; // miscellaneous temporary string storage char temp1[128]; char temp2[128]; char line[128]; char session_start_date[16]; char session_start_time[16]; char session_end_date[16]; char session_end_time[16]; char run_start_date[16]; char run_start_time[16]; char run_end_date[16]; char run_end_time[16]; int dir[MAX_COORD_NUM][MAX_DIMENSIONALITY]; // Defines up to 8 directions. // Values depend on lattice type // and are set in DIRTABLE.C. short int nn_sites[MAX_COORD_NUM][MAX_DIMENSIONALITY]; // Holds indices of // nearest neighbour sites. // See get_nn_site() in Q&A.C. short int nn_site[MAX_DIMENSIONALITY]; // Holds indices of nearest neighbour site // in a given direction. // See get_nn_site_in_dir() in Q&A.C int directionality[MAX_COORD_NUM]; int divisors[MAX_DIVISORS]; // Used in spin selection. unsigned short int spanning_cluster_list[MAX_NUM_SPANNING_CLUSTERS]; // Transition probabilities double w[4*MAX_COORD_NUM+1]; // So as to handle -16, -15, ..., 15, 16 double temperatur[MAX_NUM_TEMPERATURES]; double multiple_temperature_results[MAX_NUM_TEMPERATURES][NUM_MULTIPLE_RESULTS][2]; // Array for saving averages over final values for magnetization, Binder cumulant, // internal energy and specific heat (plus the standard deviations). unsigned char spin_value_mask; // Depends on model. // Struct for cluster tracing. struct _all_cluster_trace_data ct_data; // Array of structs used in determination of percolation thresholds. struct _perc_thr_iter iterations[MAX_ITERATIONS]; // Variables connected with cluster-trace stack. // This is a stack of short unsigned ints // intended for storage of indices in the range 0-65535. int stack_size; A1(short int) stack; const unsigned char bit[8] // bit patterns #ifdef M = { /* 0 */ BIT1_0, // 00000001 See #defines for bit masks /* 1 */ BIT1_1, // 00000010 in ISS_DEF.H /* 2 */ BIT1_2, // 00000100 /* 3 */ BIT1_3, // 00001000 /* 4 */ BIT1_4, // 00010000 /* 5 */ BIT1_5, // 00100000 /* 6 */ BIT1_6, // 01000000 /* 7 */ BIT1_7 // 10000000 } #endif ; const unsigned char unbit[8] // bit patterns #ifdef M = { /* 0 */ 254, // 11111110 /* 1 */ 253, // 11111101 /* 2 */ 251, // 11111011 /* 3 */ 247, // 11110111 /* 4 */ 239, // 11101111 /* 5 */ 223, // 11011111 /* 6 */ 191, // 10111111 /* 7 */ 127 // 01111111 } #endif ;