CHFL_ATOM
¶
CHFL_ATOM
¶An opaque type handling an atom.
A `CHFL_ATOM` is a particle in the current `CHFL_FRAME`. It stores the following atomic properties:
The atom name is usually an unique identifier (`”H1”`, `”C_a”`) while the atom type will be shared between all particles of the same type: `”H”`, `”Ow”`, `”CH3”`.
chfl_atom
(const char *name)¶Create an atom with the given `name`, and set the atom type to `name`.
The caller of this function should free the associated memory using `chfl_atom_free`.
CHFL_ATOM* atom = chfl_atom("Na");
if (atom == NULL) {
/* handle error */
}
chfl_atom_free(atom);
chfl_atom_from_frame
(const CHFL_FRAME *const frame, uint64_t i)¶Get a copy of the atom at index `i` from a `frame`
The caller of this function should free the associated memory using `chfl_atom_free`.
CHFL_FRAME* frame = chfl_frame();
/* Update the frame, or read it from a file */
chfl_frame_resize(frame, 5);
CHFL_ATOM* atom = chfl_atom_from_frame(frame, 4);
if (atom == NULL) {
/* handle error */
}
chfl_atom_free(atom);
chfl_frame_free(frame);
chfl_atom_from_topology
(const CHFL_TOPOLOGY *const topology, uint64_t i)¶Get a copy of the atom at index `i` from a `topology`
The caller of this function should free the associated memory using `chfl_atom_free`.
CHFL_TOPOLOGY* topology = chfl_topology();
/* Update the topology by hand, or using a file */
CHFL_ATOM* atom = chfl_atom_from_topology(topology, 4);
if (atom == NULL) {
/* handle error */
}
chfl_atom_free(atom);
chfl_topology_free(topology);
chfl_atom_copy
(const CHFL_ATOM *const atom)¶Get a copy of an `atom`.
The caller of this function should free the associated memory using `chfl_atom_free`.
CHFL_ATOM* atom = chfl_atom("Na");
CHFL_ATOM* copy = chfl_atom_copy(atom);
if (copy == NULL) {
/* handle error */
}
chfl_atom_free(copy);
chfl_atom_free(atom);
chfl_atom_mass
(const CHFL_ATOM *const atom, double *mass)¶Get the mass of an `atom`, in the double pointed to by `mass`.
The mass is given in atomic mass units.
CHFL_ATOM* atom = chfl_atom("Na");
double mass = 0;
chfl_atom_mass(atom, &mass);
assert(fabs(mass - 22.98976928) < 1e-15);
chfl_atom_free(atom);
chfl_atom_set_mass
(CHFL_ATOM *const atom, double mass)¶Set the mass of an `atom` to `mass`.
The mass must be in atomic mass units.
CHFL_ATOM* atom = chfl_atom("H");
chfl_atom_set_mass(atom, 1.45);
double mass = 0;
chfl_atom_mass(atom, &mass);
assert(fabs(mass - 1.45) < 1e-15);
chfl_atom_free(atom);
chfl_atom_charge
(const CHFL_ATOM *const atom, double *charge)¶Get the charge of an `atom`, in the double pointed to by `charge`.
The charge is in number of the electron charge *e*.
CHFL_ATOM* atom = chfl_atom("Na");
double charge = 0;
chfl_atom_charge(atom, &charge);
assert(charge == 0);
chfl_atom_free(atom);
chfl_atom_set_charge
(CHFL_ATOM *const atom, double charge)¶Set the charge of an `atom` to `charge`.
The charge must be in number of the electron charge *e*.
CHFL_ATOM* atom = chfl_atom("H");
chfl_atom_set_charge(atom, 0.82);
double charge = 0;
chfl_atom_charge(atom, &charge);
assert(fabs(charge - 0.82) < 1e-15);
chfl_atom_free(atom);
chfl_atom_name
(const CHFL_ATOM *const atom, char *const name, uint64_t buffsize)¶Get the name of an `atom` in the string buffer `name`.
The buffer size must be passed in `buffsize`. This function will truncate the name to fit in the buffer.
CHFL_ATOM* atom = chfl_atom("Na");
char name[32] = {0};
chfl_atom_name(atom, name, sizeof(name));
assert(strcmp(name, "Na") == 0);
chfl_atom_free(atom);
chfl_atom_set_name
(CHFL_ATOM *const atom, const char *name)¶Set the name of an `atom` to `name`.
`name` must be a null terminated string.
CHFL_ATOM* atom = chfl_atom("Na");
chfl_atom_set_name(atom, "Cs");
char name[32] = {0};
chfl_atom_name(atom, name, sizeof(name));
assert(strcmp(name, "Cs") == 0);
chfl_atom_free(atom);
chfl_atom_type
(const CHFL_ATOM *const atom, char *const type, uint64_t buffsize)¶Get the type of an `atom` in the string buffer `type`.
The buffer size must be passed in `buffsize`. This function will truncate the atomic type to fit in the buffer.
CHFL_ATOM* atom = chfl_atom("Na");
char type[32] = {0};
chfl_atom_type(atom, type, sizeof(type));
assert(strcmp(type, "Na") == 0);
chfl_atom_free(atom);
chfl_atom_set_type
(CHFL_ATOM *const atom, const char *type)¶Set the type of an `atom` to `type`.
`type` must be a null terminated string.
CHFL_ATOM* atom = chfl_atom("Na");
chfl_atom_set_type(atom, "Cs");
char type[32] = {0};
chfl_atom_type(atom, type, sizeof(type));
assert(strcmp(type, "Cs") == 0);
chfl_atom_free(atom);
chfl_atom_full_name
(const CHFL_ATOM *const atom, char *const name, uint64_t buffsize)¶Get the full name of an `atom` from its type in the string buffer `name`
The buffer size must be passed in `buffsize`. This function will truncate the name to fit in the buffer.
CHFL_ATOM* atom = chfl_atom("Na");
char name[32] = {0};
chfl_atom_full_name(atom, name, sizeof(name));
assert(strcmp(name, "Sodium") == 0);
chfl_atom_free(atom);
chfl_atom_vdw_radius
(const CHFL_ATOM *const atom, double *radius)¶Get the Van der Waals radius of an `atom` from the atom type, in the double pointed to by `radius`.
If the radius in unknown, this function set `radius` to -1.
CHFL_ATOM* atom = chfl_atom("Na");
double radius = 0;
chfl_atom_vdw_radius(atom, &radius);
assert(fabs(radius - 2.4) < 1e-15);
chfl_atom_free(atom);
chfl_atom_covalent_radius
(const CHFL_ATOM *const atom, double *radius)¶Get the covalent radius of an `atom` from the atom type, in the double pointed to by `radius`.
If the radius in unknown, this function set `radius` to -1.
CHFL_ATOM* atom = chfl_atom("Na");
double radius = 0;
chfl_atom_covalent_radius(atom, &radius);
assert(fabs(radius - 1.54) < 1e-15);
chfl_atom_free(atom);
chfl_atom_atomic_number
(const CHFL_ATOM *const atom, int64_t *number)¶Get the atomic number of an `atom` from the atom type, in the integer pointed to by `number`.
If the atomic number in unknown, this function set `number` to -1.
CHFL_ATOM* atom = chfl_atom("Na");
int64_t number = 0;
chfl_atom_atomic_number(atom, &number);
assert(number == 11);
chfl_atom_free(atom);
chfl_atom_free
(CHFL_ATOM *const atom)¶Free the memory associated with an `atom`.
CHFL_ATOM* atom = chfl_atom("Na");
if (atom == NULL) {
/* handle error */
}
chfl_atom_free(atom);