// PRECOMP.C // Precompoutes nn sites // © 2021 Peter J. Meyer #include "iss.h" static void adjust_indices_2(void); /*--------------------------*/ void precompute_nn_sites(void) { int i, j, k, l, r; switch ( dimensionality ) { case 2: for ( i=0; i<size; i++ ) { for ( j=0; j<size; j++ ) { if ( direction_table_is_parity_dependent ) adjust_direction_table((i+j)%2); for ( r=0; r<coord_num; r++ ) // For each direction { nn_sites[r][0] = i + dir[r][0]; // See DIRTABLE.C nn_sites[r][1] = j + dir[r][1]; } adjust_indices_2(); for ( r=0; r<coord_num; r++ ) { precomp_nn_sites2[i][j][r][0] = nn_sites[r][0]; precomp_nn_sites2[i][j][r][1] = nn_sites[r][1]; } } } break; case 3: for ( i=0; i<size; i++ ) { for ( j=0; j<size; j++ ) { for ( k=0; k<size; k++ ) { if ( direction_table_is_parity_dependent ) adjust_direction_table((i+j+k)%2); for ( r=0; r<coord_num; r++ ) // For each direction { nn_sites[r][0] = i + dir[r][0]; // See DIRTABLE.C nn_sites[r][1] = j + dir[r][1]; nn_sites[r][2] = k + dir[r][2]; } adjust_indices_2(); for ( r=0; r<coord_num; r++ ) { precomp_nn_sites3[i][j][k][r][0] = nn_sites[r][0]; precomp_nn_sites3[i][j][k][r][1] = nn_sites[r][1]; precomp_nn_sites3[i][j][k][r][2] = nn_sites[r][2]; } } } } break; case 4: for ( i=0; i<size; i++ ) { for ( j=0; j<size; j++ ) { for ( k=0; k<size; k++ ) { for ( l=0; l<size; l++ ) { if ( direction_table_is_parity_dependent ) adjust_direction_table((i+j+k+l)%2); for ( r=0; r<coord_num; r++ ) // For each direction { nn_sites[r][0] = i + dir[r][0]; nn_sites[r][1] = j + dir[r][1]; nn_sites[r][2] = k + dir[r][2]; nn_sites[r][3] = l + dir[r][3]; } adjust_indices_2(); for ( r=0; r<coord_num; r++ ) { precomp_nn_sites4[i][j][k][l][r][0] = nn_sites[r][0]; precomp_nn_sites4[i][j][k][l][r][1] = nn_sites[r][1]; precomp_nn_sites4[i][j][k][l][r][2] = nn_sites[r][2]; precomp_nn_sites4[i][j][k][l][r][3] = nn_sites[r][3]; } } } } } break; } } /*------------------------------*/ static void adjust_indices_2(void) { int r, index; for ( r=0; r<coord_num; r++ ) // For each direction { for ( index=0; index<dimensionality; index++ ) { if ( nn_sites[r][index] < 0 ) nn_sites[r][index] = ( free_boundary_conditions ? NON_EXISTENT : nn_sites[r][index] + size ); else if ( nn_sites[r][index] >= size ) nn_sites[r][index] = ( free_boundary_conditions ? NON_EXISTENT : nn_sites[r][index] - size ); if ( nn_sites[r][index] == NON_EXISTENT ) { nn_sites[r][0] = NON_EXISTENT; break; } } } }