TCC source code function listing and descriptions

This page lists function names and descriptions which are scraped from the TCC source code using doxygen.

file bonds.c

Functions

double Get_Interparticle_Distance(int i, int j)
void enforce_PBCs(double * dx, double * dy, double * dz)
void get_distance_components(int i, int j, double * dx, double * dy, double * dz)
void Are_All_Bonds_Symmetric()
void build_bond_network(int frame_number)
void Get_Simple_Bonds()
void Check_For_Valid_Bond(int particle_1, int particle_2, double squared_distance)
void Check_Num_Bonds(int particle_1, int particle_2, double squared_distance)
void too_many_bonds(int particle_1, int particle_2, const char * method_name)
void Add_New_Bond(int particle_1, int particle_2, double squared_distance)
int Bonds_BondCheck(int particle_1_id, int particle_2_id)
file cell_list.c

Functions

int cell_list_get_particle_1_neighbours(int i, int * particle_1_neighbours, int * particle_1_bonds, double * particle_1_bond_lengths, double * store_dr2)
void get_all_particle_neighbours()
void loop_over_neighbouring_cells(int cell_x, int cell_y, int cell_z, int current_cell_index)
void loop_over_particles_in_cell(int current_cell_index, int neighbour_cell_index)
void fill_cell_list()
int get_scalar_cell_index(int x_index, int y_index, int z_index)
void set_up_cell_list()
void free_cell_list()
file 10A.c

Functions

void Clusters_Get10A()

An 10A cluster is the two bonded sp4b clusters with no common particles.

Find 10A clusters An 10A is 2 sp4b clusters where:

  • There are no common particles.
  • The spindles are not bonded.
  • Each particle in each sp4 ring is bonded to exactly two particles in the other sp4 ring

Cluster output: BBBBBBBOO Storage order: first_sp4b_ring x 4, second_sp4b_ring x 4, firrst_sp4b_spindle, second_sp4b_spindle

void zero_used_array(int * used_sp4b)
void Cluster_Write_10A(int * first_sp4b_cluster, int * second_sp4b_cluster)
file 10B.c

Functions

void Clusters_Get10B(int j)

An 10B cluster is the intersection of a 9B and a 7A cluster.

Find 10B clusters An 10A is a 9B and 7A cluster where:

  • One spindle from 7A is common to the common spindle particle of the 9B cluster
  • The other spindle from 7A is bonded to the two distinct spindles of 9B.
  • Both of the distinct spindles of 9B are in the ring of the 7A.
  • Two 7A ring particles are common with the distinct sp5 particles of 9B.
  • There is one 7A ring particle which is distinct from the 9B cluster.

Cluster output: BBBBBBOOOS Storage order: ordered_shell_particles x 6, spindles x 3, common_spindle

void Cluster_Write_10B(int trial[10])
file 10K.c

Functions

void Clusters_Get10K()

An 10K cluster is 9K with a SINGLE particle bonded to the common spindle of 9K.

Find 10K clusters An 10K is a 9K with one extra particle where:

  • The extra particle is bonded to common spindle of 9K.
  • The 9K common spindle has no other extra neighbours.

Cluster output: BBBBBOOOO Storage order: as_for_9K x 9, extra_particle

int count_extra_particles(const int * first_9K_cluster, int first_9K_common_id, int * extra_particle_id)
void Cluster_Write_10K(int id_9k, int extra_particle)
file 10W.c

Functions

void Clusters_Get10W()

An 10W cluster is the intersection six sp5b which all share one spindle.

Find 10W clusters An 10W is six sp5b clusters where:

  • All clusters share the same spindle
  • The coordination number of this common spindle is 9. The reason this construction is chosen over simpler ones is that it is robust to different values of the voronoi parameter from 0.82 to 1.

Cluster output: SBBBBBBBB Storage order: central_spindle_particle, shell_particles x 9

int count_shared_sp5bs(int * neighbouring_sp5_ids, const int first_sp5b_id, const int center_id)
int get_shell_particle_ids(int * shell_ids, const int * neighbouring_sp5_ids)
void Cluster_Write_10W(int center_id, int * shell_ids)
file 11A.c

Functions

void Clusters_Get11A()

An 11A cluster is the intersection two 6A clusters with a common spindle.

Find 11A clusters An 11A is two 6A clusters where:

  • There is one common spindle particle
  • All other particles are distinct.
  • Each particle in each ring is bonded to exactly 2 particles in the other ring

Cluster output: BBBBBBBBOOS Storage order: sp4_i x 4, sp4_j x 4, uncommon_spindles x 2, common_spindle

int Check_6A_rings_bonded(const int * first_6A_cluster, const int * second_6A_cluster)
void Cluster_Write_11A(const int * first_6A, const int * second_6A, const int * sother, const int scom)
file 11B.c

Functions

void Clusters_Get11B()

An 11B cluster is 9B with two additional particles.

Find 11B clusters An 11A is a 9B and two extra particles where:

  • The common spindle particle from the 9B cluster has coordination number 10.
  • The two additional particles (a1 and a2) are bonded to each other and to the common spindle particle of 9B.
  • a1 is bonded to two particles in the shell of the 9B cluster (b1 and b2).
  • a2 is bonded to two particles in the shell of the 9B cluster (c1 and c2).
  • b1 and b2 are not bonded. c1 and c2 are not bonded.
  • One of b1 or b2 is bonded to one of c1 or c2. The other pair are also bonded.

Cluster output: BBBBBBOOSBB Storage order: as_for_9B x 9, extra_particles x 2

void Cluster_Write_11B(const int * extra_particles, int parent_9B_id)
file 11C.c

Functions

void Clusters_Get11C()

An 11C cluster is the intersection of two 7A clusters with a common spindle.

Find 11C clusters An 11C is two 7A clusters where:

  • There are two common particles between the two sp5 rings. These are a bonded pair.
  • There are two more bonds between two pairs of distinct particles in the sp5 ring.

Cluster output: SOOBBBBBBBB Storage order: common_spindle x 1, uncommon_spindles x 2, common_ring_1, common_ring_2, uncommon_bonded_ring_1_i, uncommon_bonded_ring_2_i, uncommon_bonded_ring_1_j, uncommon_bonded_ring_2_j, uncommon_unbonded x 2

int count_particles_bonded_to_common(const int * cluster, const int * common_particles, int * bonded_particles)
int count_bonded_ring_particles_11C(const int * common_ring_particles, const int * first_7A_cluster, const int * second_7A_cluster)
void Cluster_Write_11C(int * trial)
file 11E.c

Functions

void Clusters_Get11E_12D(int i, int j, int sp1, int sp2i, int sp2j)

An 11E cluster is the intersection of a 9B and a 7A.

Find 11E clusters An 11E is a 9B and a 7A where:

  • One 7A spindle particle is common to one of the uncommon spindle particles, sd1, in the 7A clusters constituting the 9B cluster.
  • The other spindle particle of the additional 7A is labeled sd3 and is bonded to the other uncommon spindle particle sd2 in 9B and the common spindle particle sc of 9B. Of the 7A cluster sp5 ring particles, one is common to the common with sc, one is common with sd2, and one is common to one of the uncommon sp5 ring particles of the 9B cluster. The final two sp5 ring particles are distinct from the 9B cluster.

Cluster output: OOOOBBBBBBB Storage order: unknown

void Clust_Write_11E()
file 11F.c

Functions

void Clusters_Get11F_13K()

An 11F cluster is the intersection of two 5A and two 6A clusters.

Find 11F clusters An 11F is constructed from two 5A and two 6A clusters where:

  • Each spindle of 5Ai is bonded to a spindle of 5Aj.
  • There is one common ring particle between the 5A clusters.
  • There is one bonded pair of ring particle between the 5A clusters.
  • 6A_i has a distinct spindle and a spindle which is the common ring particle of the 5As
  • 6A_j has a distinct spindle and a spindle which is the common ring particle of the 5As
  • Each 6A has two bonded 5A spindles and two bonded 5A ring particles as its ring.

Cluster output: BOOOOOOBBBB Storage order: 5A_common particle, 6A_uncommon_spindle x 2, 5A_spindles x 4, 5A_ring_particles x 4

void get_unbonded_5A_particles(int * trial_cluster, const int * first_5A_cluster, const int * second_5A_cluster)
int are_spindles_bonded(int first_5A_id, int second_5A_id, int * trial_cluster)
int count_bonded_ring_particles_11F(const int * first_5A, const int * second_5A, int * trial_cluster)
int get_bonded_6As(int * bonded_6A_id, int * trial_cluster)
int check_6A(int * trial_cluster, const int * potential_6A_cluster, const int * ring_particles, int which_6A)
void setup_6A_rings(const int * trial_cluster, int * first_6A_ring, int * second_6A_ring)
void write_11F(const int * trial_cluster)
file 11W.c

Functions

void Clusters_Get11W()

An 11W cluster is a 10B with an extra particle.

Find 11W clusters An 11W is constructed from a 10B and an extra particle where:

  • The common spindle of the 10B cluster has coordination number 10.
  • The additional particle is not bonded to any of the distinct spindles of the 7A clusters constituting the 10B cluster.

Cluster output: BBBBBBBBBBO Storage order: as_for_10B x 10, extra_particle

int is_particle_bonded_to_7As(int id_10B, int extra_particle)
int get_11W_extra_particle(int * parent_10B_cluster, int spindle_10B)
void Write_11W(int id_10B, int extra_particle)
file 12A.c

Functions

void Clusters_Get12A()

A 12A is an 11C with an extra particle bonded to only 3 specific particles in the 11C.

Find 12A clusters An 12A is an 11C and an extra particle where:

  • The common spindle particle of the 11C has coordination number 11.
  • The extra particle is bonded to the common spindle.
  • The extra particle is bonded to the two unbonded ring particles of 11C.
  • The exrtra particle is not bonded to other particles in the 11C.

Cluster output: SOOBBBBBBBBB Storage order: as_for_11C x 11, extra_particle

int check_extra_particle_bonds(int extra_particle, int * first_11C_cluster)
int get_12A_extra_particle(int * parent_11C_cluster)
int bond_check_12A_extra_particle(int * first_11C_cluster, int extra_particle)
void Write_12A(const int * first_11C_cluster, int ep)
file 12B.c

Functions

void Clusters_Get12B_13A()

A 12B is the intersection of 6 7A clusters.

Find 12B clusters A 12B is 6 7A clusters where:

  • There is one central 7A with spindles A and B
  • Every other 7A has a spindle common with the 7A spindle A and a spindle common with a ring particle of the first 7A

Cluster output: SBOOOOOBBBBB Storage order: unknown

int count_7A_spindle_bonds(int * sj1, const int first_7A)
void Clust_Write_12B()
file 12D.c

Functions

int Clusters_Get12D(int j, int k, int sp1, int sp2)

A 12D is the intersection of an 11F and a 7A.

Find 12D clusters An 12A is an 11C and an extra particle where:

  • The spindle particles of the 7A cluster are common with 11E cluster spindles sd2 and sd3.
  • Of the sp5 ring particles of the 7A cluster, one is common to sc, one is common to sd1,
  • two are in the SP5 rings of the 7A clusters constituting 11E, and one is new

Cluster output: OOOOBBBBBBBB Storage order: d1_unc, d2_unc, d3_unc, d4_unc, d12_com, d13_com, d24_com, d34_com, s_d1, s_d2, s_d3, s_com

void Cluster_Write_12D()
file 12E.c

Functions

void Clusters_Get12E()

An 12E cluster is the intersection of an 11F and 5A cluster.

Find 12E clusters A 12E cluster is an 11F and 5A cluster where:

  • The spindle atoms of the 5A cluster are common with the uncommon spindle atoms of the 6A clusters constituting the 11F cluster.
  • Of the SP3 ring particles in the 5A cluster, two are common with rd1 and rd2 from the 11F cluster, and one is new.

Cluster output: BBBBBBBBBBBB Storage order: particles ordered by id x 12

int are_5A_spindles_common(const int * first_5A_cluster, const int * first_11F_cluster)
int are_5A_ring_particles_common(const int * cluster_5A, const int * cluster_11F)
int get_uncommon_5A_ring_particle(const int * cluster_11F, const int * cluster_5A)
int is_12E_unique(const int * cluster_11F, int uncommon_sp3_ring_particle, int * trial)
void Write_12E(const int * trial)
file 12K.c

Functions

void Clusters_Get12K()

A 12K clusters is an 11A with an extra particle bonded to three of the ring particles of the 11A.

Find 12K clusters A 12K is constructed of from an 11A and an extra particle where:

  • The additional particle is bonded to three mutually bonded sp4 ring particles of the 11A cluster.

Since there are 8 possible sites for bonding on each 11A there may be multiple 12K for each 11A

Cluster output: BBBBBBBBOOSB Storage order: as_for_11A x 11, extra_particle

void find_12K_cluster(int * parent_11A_cluster, const int * sp3_ring)
void get_12K_ring_bonds(int * cluster_11A, int(*sp3_rings)[3])
void Cluster_Write_12K(int ep, const int * parent_11A_cluster)
file 13A.c

Functions

void Clust_Write_13A()

A 13A clusters is the intersection of a 12B and a 7A cluster. Topologically it is a regular icosahedron.

Find 13A clusters A 13A is constructed from a 12B and a 7A where:

  • The 7A cluster has one spindle given by sc of the 12B cluster, and one spindle that is distinct from the 12B particles.
  • The sp5 ring particles of the 7A cluster are distinct from the sp5 ring particles of the central 7A cluster in 12B.

Cluster output: SOOBBBBBBBBBB Storage order: unknown

file 13B.c

Functions

void Clusters_Get13B()

A 13B cluster is the intersection of two 7A clusters.

Find 13B clusters A 13K is constructed from two 7A clusters where:

  • There is one common spindle between the two 7As
  • Other spindle particles are distinct and unbonded.
  • The sp5 ring particles of the 7A cluster are distinct from the sp5 ring particles of the central 7A cluster in 12B.
  • Each particle from each ring is bonded to one particle of the other ring

Cluster output: SOOBBBBBBBBBB Storage order: common_spindle, uncommon_spindle x 2, first_7A_ring_particles x 5, second_7A_ring_particles x 5

int check_rings_are_bonded(const int * first_7A_cluster, const int * second_7A_cluster)
int count_bonds_to_ring(int particle_id, const int * first_7A_cluster)
void Cluster_Write_13B(const int * first_7A_cluster, const int * second_7A_cluster, int common_spindle_id, const int * uncommon_spindle_ids)
file 13K.c

Functions

int Clusters_Get13K(int sp3c_i, int sp3c_j, int the6A_i)

A 13K cluster is the intersection an 11F and two 5A clusters.

Find 13K clusters A 13K is constructed from an 11F and two 5A clusters where:

  • Cluster output: SBBBBBBBBBBOO Storage order: as_for_11F, extra_particles x 2

void Cluster_Write_13K()
file 6Z.c

Functions

void Clusters_Get6Z()

A 6Z is made of two overlapping 5A clusters.

Find 6Z clusters 6Z is made from two overlapping 5A particles where:

  • The are no common spindles between the two 5A clusters.
  • One spindle of 5Ai is common with a sp3 ring particle of 5Aj.
  • One spindle of 5Aj is common with a sp3 ring particle of 5Ai.
  • The spindles in the two sp3 rings are bonded.
  • Two particles are common between the sp3 rings of 5Ai and 5Aj.

Cluster output: OOOBBB Storage order: bonded spindle i, non-bonded spindle i, bonded spindle j, non-bonded spindle j, common ring x 2

int count_spindles_in_ring(const int * first_5A_cluster, const int * second_5A_cluster, int * spindles)
int get_bonds_between_rings(const int * first_5A_cluster, const int * second_5A_cluster, int * common_ring_particles)
void Cluster_Write_6Z(const int * first_spindles, const int * second_spindles, const int * common_ring_particles)
file 7K.c

Functions

void Clusters_Get7K()

A 7K is made of two overlapping 5A clusters which have one common spindle.

Find 7K clusters 7K is made from two overlapping 5A particles where:

  • 5Ai and 5Aj have one common spindle.
  • The other spindle of 5Ai is distinct from all the particles in 5Aj.
  • The other spindle of 5Aj is distinct from all the particles in 5Ai.
  • There are two common particles between the sp3 rings of 5Ai and 5Aj.

Cluster output: OOOOBBB Storage order: common spindle, other spindle x 2, common ring x 2, other ring x 2)

void Cluster_Write_7K(int common_spindle_id, int * other_spindle_ids, int * common_ring_particles, int * uncommon_ring_particles)
file 7T.c

Functions

void Clusters_Get7T()

A 7T is made of a 6Z cluster with an additional particle.

Find 7Ta and 7Ts clusters 7T is made made of a 6Z cluster and a 5A. Depending on where the location of the new 5A spindle, the cluster is either asymmetric (7Ta) or symmetric (7Ts) 7T:

  • The 5A has one spindle common with the common ring particles of the 6A
  • For 7Ts the other 5A spindle is bonded to both 6Z bonded spindles
  • For 7TA the other 5A spindle is bonded to one bonded 6Z spindle and one unbonded 6Z spindle

Cluster output: BBBBBBB Storage order: original 6Z particles x 6, new 5A spindle)

int is_particle_spindle_of_5A(int particle_id, const int * new_5A_cluster)
int get_new_particle(const int * new_5A_cluster, int spindle_id)
int check_ring_bonds(const int * new_5A_cluster, const int * old_6Z_cluster)
void check_7T_type(int bond_counter, const int * old_6Z, int new_particle)
void add_7T_a(const int * old_6Z, int new_particle)
void add_7T_s(const int * old_6Z, int new_particle)
file 8A.c

Functions

void Clusters_Get8A()

An 8A cluster is one of 3 possible topological combinations of sp5b/c clusters.

Find 8A clusters There are 3 methods used for 8A detection

  • A pair of sp5b where the spindles are distinct and share 4 ring particles
  • A pair of 7A clusters where
    • Both 7Ai spindle particles are common with the 7Aj spindles.
    • There are four common particles between sp5 rings of 7Ai and 7Aj .
  • A sp5b cluster and a 7A cluster where:
    • One 7A spindle is common with the sp5b spindle.
    • The other 7A spindle is distinct from all the sp5b particles.
    • There are four common particles between sp5 rings of sp5b and 7A.

Cluster output: BBBBBBBB Storage order: particles ordered by id x 8)

void get_first_8A_type()
void get_second_8A_type()
void get_third_8A_type()
void Cluster_Write_8A(const int * trial)
file 8B.c

Functions

void Clusters_Get8B()

An 8B cluster is an 7A cluster with an extra particle attached.

Find 8B clusters An 8B is a 7A cluster with an extra particle bonded to two of the ring particles and a spindle of the 7A cluster

Cluster output: BBBBOOB Storage order: as for 7A x 7, extra_particle)

int count_bonds_to_7A_ring(int first_7A_id, int new_particle_id)
void Cluster_Write_8B(int * first_7A_cluster, int new_particle_id)
file 8K.c

Functions

void Clusters_Get8K()

An 8K cluster is the intersection of 3 5A clusters.

Find 8K clusters An 8B is 3 5A clusters where:

  • There are two common particles in the sp3 rings of 5Ai, 5Aj and 5Ak.
  • There is one unique particle in each of the 5Ai, 5Aj and 5Ak rings.
  • There is one common spindle between each pair of 5As

Cluster output: OOBBBBBB Storage order: common_ring_particles x2, spindles x 3, uncommon_ring_particles x 3

int is_particle_in_5A_ring(const int * second_5A_cluster, int first_5A_ring_particle, int * cp)
void Cluster_Write_8K()
file 9A.c

Functions

void Clusters_Get9A()

A 9A is made of three overlapping sp4b clusters which each share 2 ring particles with each of the others.

Find 9A clusters 9A is made from three overlapping sp4b clusters where:

  • All of the spindles are uncommon
  • Two particles are common between the rings of sp4b_i and sp4b_j
  • The ring of sp4b_j is made from the uncommon ring particles of sp4b_i and sp4b_j

Cluster output: OOOBBBBBB Storage order: common spindle, other spindle x 2, common ring x 2, other ring x 2)

int check_spindles_are_uncommon_and_unbonded(int * cluster_1, int * cluster_2)
int count_bonded_ring_particles(const int * first_sp4b_cluster, const int * second_sp4b_cluster, const int * common_ring_particles, int * uncommon_ring_particles)
void Cluster_Write_9A(int * first_sp4b_cluster, int * second_sp4b_cluster, int * third_sp4b_cluster, int * i_j_common_ring_particles, int * i_j_uncommon_ring_particles)
file 9B.c

Functions

void Clusters_Get9B_10B_11E_12D()

An 9B cluster is the intersection of 7A clusters shraing a spindle and two ring particles.

Find 9B clusters An 9B is 2 7A clusters where:

  • There is one common spindle.
  • The uncommon spindles are bonded.
  • Each distinct spindle is common with a ring particle of the other 7A
  • There are two common particles between the two 7A rings

Cluster output: BBBBBBOOS Storage order: SP5_lowerd_to_4, SP5_lowerd_to_5, SP5_higherd_to_4, SP5_higherd_to_5, SP5_i_j_com_lower, SP5_i_j_com_higher, sp5c_d1_lower, sp5c_d2_higher, s_com

void Cluster_Write_9B()
file 9K.c

Functions

void Clusters_Get9K()

An 9K cluster is the intersection of two 6A clusters sharing a spindle and two ring particles.

Find 9K clusters An 9K is 2 6A clusters where:

  • There is one common spindle.
  • The uncommon spindles are not in the opposite cluster.
  • There are two common particles between the two 6A rings
  • The uncommon sp4 ring particle are bonded

Cluster output: BBBBBBOOO Storage order: common_ring_particles x 2, uncommon_ring_particles x 4, uncommon_spindles x 2, common_spindle

void Cluster_Write_9k(const int * common_ring_particle_ids, const int * uncommon_ring_particles, const int * uncommon_spindle_particles, int common_spindle_id)
file BCC9.c

Functions

void Clusters_GetBCC_9()

A BCC_9 cluster is the intersection of sp4b and sp4c clusters.

Find BCC_9 clusters A BCC_9 is constructed from some combination of sp4b and sp4c clusters

  • Cluster output: SBBBBBBBB Storage order: unknown

void Cluster_Write_BCC9()
file FCC.c

Functions

void Clusters_GetFCC()

An FCC cluster is a 13 particle cluster of the FCC lattice, it is made from either four sp3b clusters or three sp3b clusters and a 5A cluster.

Find FCC clusters Method 1: An FCC cluster is constructed from four sp3b clusters Method 2: An FCC cluster is constructed from three sp3b clusters and a 5A cluster

Cluster output: SBBOOBBOBBOOO Storage order: unknown

void Cluster_Write_FCC()
file HCP.c

Functions

void Clusters_GetHCP()

An HCP cluster is a 13 particle cluster of the HCP lattice, it is made from three 5A clusters.

Find HCP clusters An HCP cluster is made from three 5A clusters where:

  • There is one common ring particle the three 5A clusters.
  • The spindles are all distinct and form two sp3 rings above and below the plane created by the ring particles.
  • Within the three 5A clusters, the spindle atoms are only bonded to the particles from the cluster’s own sp3 ring.
  • The uncommon ring particles form a six-membered ring around the common ring particle

Cluster output: unknown Storage order: unknown

void Cluster_Write_HCP(int i, int j, int j2, int k)
file simple_cluster_methods.c

Functions

int count_common_particles(const int * cluster_1, const int * cluster_2, int cluster_1_size, int cluster_2_size, int * common_particle_ids)

Count number of common ring particles between two clusters and get thier ids.

This function can be applied to whole clusters or subsets of clusters since it just compares lists of integers. To compare a subset of the clusters set the clus_size parameters to the number of elements to iterate over.

This function assumes that the n ring particles are the first n particles of the cluster. This is true for the basic clusters but may not be true for other clusters.

Return
an integer giving the number of common ring particles between the clusters
Parameters
  • cluster_1: - a pointer to a cluster stored in an hc memory array
  • cluster_2: - a pointer to a cluster stored in an hc memory array
  • cluster_1_size: - the number of ring particles in cluster 1 to iterate over
  • cluster_2_size: - the number of ring particles in cluster 2 to iterate over
  • common_particle_ids: - a pointer to an array of length num_particles_in_ring, ids of common particles will be written to this array

int count_uncommon_particles(const int * cluster_1, const int * cluster_2, int clus_1_size, int clus_2_size, int * uncommon_particle_ids)

Count number of uncommon particles between two clusters and get their ids.

This function can be applied to whole clusters or subsets of clusters since it just compares lists of integers. To compare a subset of the clusters set the clus_size parameters to the number of elements to iterate over.

Return
an integer giving the number of uncommon particles between the clusters
Parameters
  • cluster_1: - a pointer to a cluster stored in an hc memory array
  • cluster_2: - a pointer to a cluster stored in an hc memory array
  • clus_1_size: - the number of particles in cluster_1 to iterate over
  • clus_2_size: - the number of particles in cluster_2 to iterate over
  • uncommon_particle_ids: - a pointer to an array of length clus_1_size + clus_2_size, ids of uncommon particles will be written to this array

int count_common_spindle_particles(const int * cluster_1, const int * cluster_2, int cluster_1_size, int cluster_2_size, int * common_spindle_ids)

Count number of common spindle particles between two clusters and get thier ids.

This function assumes that the spindle particles are the final two particles in the cluster, this is true for all of the basic clusters but may not be true for larger clusters.

Return
an integer giving the number of common ring particles between the clusters
Parameters
  • cluster_1: - a pointer to a cluster stored in an hc memory array
  • cluster_2: - a pointer to a cluster stored in an hc memory array
  • cluster_1_size: - the number of particles in cluster_1
  • cluster_2_size: - the number of particles in cluster_2
  • common_spindle_ids: - a pointer to an array of length 2 where common spindle ids will be written

int get_uncommon_spindle(const int * cluster, int cluster_size, int common_spindle_id)

Get the id of the uncommon spindle in an sp3c, sp4c or sp5c cluster.

Return
the id_of the uncommon spindle
Parameters
  • cluster: - a pointer to a cluster stored in an hc memory array
  • cluster_size: - the number of particles in cluster
  • common_spindle_id: - the id of the common particle

int is_particle_in_cluster(const int * cluster, int cluster_size, int particle_id)

Determine if a particle id exists within a cluster.

Return
1 if particle_id is in cluster, 0 if particle_id is not in cluster
Parameters
  • cluster: - a pointer to a cluster stored in an hc memory array
  • cluster_size: - the number of particles in cluster
  • particle_id: - the id of the particle to check

int are_clusters_distinct(const int * cluster_1, const int * cluster_2, int cluster_1_size, int cluster_2_size)

Determine if there are any shared particles between two clusters.

Return
1 if there are no common particles, 0 if there is at least 1 common particle
Parameters
  • cluster_1: - a pointer to a cluster stored in an hc memory array
  • cluster_2: - a pointer to a cluster stored in an hc memory array
  • cluster_1_size: - the number of particles in cluster_1
  • cluster_2_size: - the number of particles in cluster_2

int check_unique_cluster(const int * trial, const int cluster_size, int ** cluster_list, const int num_clusters)

Determine if a trial cluster already exists in list of clusters.

Return
0 if the cluster is unique, 1 if the cluster already exists in the list
Parameters
  • trial: - a pointer to a cluster, particle ids sorted in ascending order
  • cluster_size: - the number of particles in the trial cluster
  • cluster_list: - a pointer to a list of clusters with the particle ids making up each cluster sorted in ascending order
  • num_clusters: - the number of clusters in cluster list

int count_cluster_bonds_to_particle(int particle_id, int * cluster, int cluster_size, int * bonded_ids)

Count the number of bonds between a particle and a cluster and return the ids of bonded particles.

Return
a pointer to an array of length cluster_size, ids of bonded particles will be written to this array
Parameters
  • particle_id: - an integer representing a particle id
  • cluster: - a pointer to a cluster stored in an hc memory array
  • cluster_size: - the number of particles in cluster
  • bonded_ids: - an empty list which w

file input.c

Functions

void read_ini_file()
void read_clusters_to_analyse()
void parse_box_file(int total_frames)
void get_NVT_box(FILE * read_box_file)
void get_box_file_offsets(FILE * read_box_file, int total_frames)
void get_box_size(int current_frame_number)
struct xyz_info parse_xyz_file()
void initialize_xyz_info(struct xyz_info * input_xyz_info)
void free_xyz_info(struct xyz_info * input_xyz_info)
void get_frame_coordinates_from_xyz(const struct xyz_info * input_xyz_info, int frame_number)
void get_coords_from_line(int frame_number, FILE * xyzfile, int particle)
int check_frame_numbers(int num_xyz_frames)
file main.c

Functions

int main(int argc, char ** argv)
file output.c

Functions

void Write_Raw(int f)
void Write_Raw_Particle_Types(int f, FILE * thefile, const char * sarr)
void Write_Bonds_File(int f)
void Write_Cluster_Centers_xyz(int f, int cluster_type)
void Write_Cluster_XYZ(int f)
void Write_Cluster(int f)
void Write_Cluster_Compostions(int f, int cluster_type)
void Write_Pop_Per_Frame(int f)
void write_output_files(int current_frame_number)
file rings.c

Functions

void get_basic_clusters()
void get_basic_sp4_rings(int n0, int n1, int n2)
void get_basic_sp5_rings(int n0, int n1, int n2, int n3)
void get_sp3_clusters(int n0, int n1, int n2)
void Store_sp3c(int n0, int n1, int n2, const int * cp)
void Store_sp3b(int n0, int n1, int n2, const int * cp)
void Store_sp3a(int n0, int n1, int n2)
void get_sp4_clusters(int n0, int n1, int n2, int n3)
void Store_sp4c(int n0, int n1, int n2, int n3, const int * cp)
void get_6A_clusters()
void Store_sp4b(int n0, int n1, int n2, int n3, const int * cp)
void Store_sp4a(int n0, int n1, int n2, int n3)
void get_sp5_clusters(int n0, int n1, int n2, int n3, int n4)
void Store_sp5c(int n0, int n1, int n2, int n3, int n4, const int * cp)
void Store_sp5b(int n0, int n1, int n2, int n3, int n4, const int * cp)
void Store_sp5a(int n0, int n1, int n2, int n3, int n4)
void add_mem_sp3b(int particle_ID)
void add_mem_sp3c(int particle_ID)
void add_mem_sp4b(int particle_ID)
void add_mem_sp4c(int particle_ID)
void add_mem_sp5b(int particle_ID)
void add_mem_sp5c(int particle_ID)
file setup.c

Functions

void Setup_Output_Files()
void initialise_run_variables()
void free_run_variables()
void initialise_frame_variables()
void free_frame_variables()
void check_null_pointer(void * pointer, char * pointer_name)
void analyse_cluster_dependencies()
void setup_cluster_lists()
void print_version_number()
file stats.c

Functions

void count_number_of_clusters()
void Stats_Report()
FILE* open_stats_report_file(const char * output_name)
void stats_report_clusters(FILE * output_file)
void stats_report_title(const char * output_name, FILE * output_file)
void count_frame_cluster_population(int f)
void count_mean_pop_per_frame(int frames_analysed)
file tools.c

Functions

long get_long_from_string(const char * buff, int * validLong)
double get_double_from_string(const char * buff, int * validDouble)
int try_read_line_from_file(FILE * file_name)
FILE* open_file(char * file_name, char * mode)
int make_directory(const char * name)
void Error_no_free(char * msg)
void Error(char * msg)
int** resize_2D_int(int ** the_array, int old_row_size, int new_row_size, int new_col_size, int value)
int* resize_1D_int(int * the_array, int old_col_size, int new_col_size)
int sort_list_of_lists_of_ints(const void * lhs, const void * rhs)
int quickSort(int * arr, int elements)
file voronoi_bonds.c

Functions

void Get_Bonds_With_Voronoi()
void add_new_voronoi_bond(int particle_1, int num_particle_1_neighbours, const int * sorted_particle_1_neighbours, const double * store_dr2, const int * particle_1_bonds)
void check_bond_cut_offs(int particle_1, int num_particle_1_neighbours, const int * sorted_particle_1_neighbours, const double * sorted_particle_1_bond_lengths, int * particle_1_bonds)
void Remove_Unbonded_Neighbours(int particle_1, const int num_particle_1_neighbours, const int * sorted_particle_1_neighbours, int * particle_1_bonds)
double is_particle_bonded(int p1, int p2, int p3)
int get_particle_1_neighbours(int particle_1, const int max_allowed_bonds, int * particle_1_bonds, double * particle_1_bond_lengths, double * store_dr2)
void Insertion_Sort_Bond_Lengths(int num_particle_1_neighbours, int * particle_1_neighbours, double * particle_1_bond_lengths)
dir C:/Users/Peter/Documents/GitHub/TCC/src/clusters
dir C:/Users/Peter/Documents/GitHub/TCC/src