aboutsummaryrefslogtreecommitdiff
path: root/tests/centering_check.c
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2012-08-31 16:20:21 +0200
committerThomas White <taw@physics.org>2012-10-02 15:02:12 +0200
commit4b3ffa51ec169406185a76016a29833bc9637264 (patch)
treebf40ef935ec0dda9da90e2f72e52413b56023af6 /tests/centering_check.c
parent60ec4009e4bc28ab9ed772ee6fcd8c80c533dccd (diff)
WIP on cell transformations
Diffstat (limited to 'tests/centering_check.c')
-rw-r--r--tests/centering_check.c127
1 files changed, 108 insertions, 19 deletions
diff --git a/tests/centering_check.c b/tests/centering_check.c
index 0dc79a5f..96326d21 100644
--- a/tests/centering_check.c
+++ b/tests/centering_check.c
@@ -35,46 +35,63 @@
#include <cell-utils.h>
-static int check_cell(UnitCell *cell)
+static int check_cell(UnitCell *cell, const char *text)
{
int err = 0;
if ( !cell_is_sensible(cell) ) {
- ERROR("Warning: Unit cell parameters are not sensible.\n");
+ ERROR(" %s unit cell parameters are not sensible.\n", text);
err = 1;
}
if ( !bravais_lattice(cell) ) {
- ERROR("Warning: Unit cell is not a conventional Bravais"
- " lattice.\n");
+ ERROR(" %s unit cell is not a conventional Bravais"
+ " lattice.\n", text);
err = 1;
}
if ( !right_handed(cell) ) {
- ERROR("Warning: Unit cell is not right handed.\n");
+ ERROR(" %s unit cell is not right handed.\n", text);
err = 1;
}
+ if ( err ) cell_print(cell);
+
return err;
}
-static int check_centering()
+static int check_centering(double a, double b, double c,
+ double al, double be, double ga,
+ LatticeType latt, char cen, char ua)
{
UnitCell *cell;
UnitCell *n;
+ UnitCellTransformation *t;
int fail = 0;
- cell = cell_new();
+ STATUS("Checking %s %c (ua %c) %5.2e %5.2e %5.2e %5.2f %5.2f %5.2f\n",
+ str_lattice(latt), cen, ua, a, b, c, al, be, ga);
+
+ cell = cell_new_from_parameters(a, b, c,
+ deg2rad(al), deg2rad(be), deg2rad(ga));
+ cell_set_lattice_type(cell, latt);
+ cell_set_centering(cell, cen);
+ cell_set_unique_axis(cell, ua);
+
+ if ( check_cell(cell, "Input") ) fail = 1;
+ //cell_print(cell);
+ n = uncenter_cell(cell, &t);
+ if ( n != NULL ) {
+ if ( check_cell(n, "Output") ) fail = 1;
+ } else {
+ fail = 1;
+ }
+
+ STATUS("Transformation was:\n");
+ cell_transformation_print(t);
- cell_set_parameters(cell, 10e-10, 20e-10, 30e-10,
- deg2rad(90.0), deg2rad(90.0), deg2rad(100.0));
- cell_set_centering(cell, 'C');
- cell_set_lattice_type(cell, L_MONOCLINIC);
- cell_set_unique_axis(cell, 'c');
- if ( check_cell(cell) ) fail = 1;
- n = uncenter_cell(cell);
- if ( check_cell(n) ) fail = 1;
+ if ( fail ) ERROR("\n");
return fail;
}
@@ -86,28 +103,100 @@ int main(int argc, char *argv[])
int fail = 0;
/* Triclinic P */
- check_centering(10e-10, 20e-10, 30e-10, 100.0, 120.0, 140.0,
- L_TRICLINIC, 'P', '*',
- );
+ fail += check_centering(50e-10, 55e-10, 70e-10, 67.0, 70.0, 77.0,
+ L_TRICLINIC, 'P', '*');
+
/* Monoclinic P */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 100.0, 90.0, 90.0,
+ L_MONOCLINIC, 'P', 'a');
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 100.0, 90.0,
+ L_MONOCLINIC, 'P', 'b');
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 100.0,
+ L_MONOCLINIC, 'P', 'c');
+
/* Monoclinic A */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 100.0, 90.0, 90.0,
+ L_MONOCLINIC, 'A', 'a');
+
/* Monoclinic B */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 100.0, 90.0,
+ L_MONOCLINIC, 'B', 'b');
+
/* Monoclinic C */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 100.0,
+ L_MONOCLINIC, 'C', 'c');
+
/* Orthorhombic P */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_ORTHORHOMBIC, 'P', '*');
+
/* Orthorhombic A */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_ORTHORHOMBIC, 'A', '*');
+
/* Orthorhombic B */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_ORTHORHOMBIC, 'B', '*');
+
/* Orthorhombic C */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_ORTHORHOMBIC, 'C', '*');
+
/* Orthorhombic I */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_ORTHORHOMBIC, 'I', '*');
+
/* Orthorhombic F */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_ORTHORHOMBIC, 'F', '*');
+
/* Tetragonal P */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_TETRAGONAL, 'P', 'a');
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_TETRAGONAL, 'P', 'b');
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_TETRAGONAL, 'P', 'c');
+
/* Tetragonal I */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_TETRAGONAL, 'I', 'a');
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_TETRAGONAL, 'I', 'b');
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_TETRAGONAL, 'I', 'c');
+
/* Rhombohedral R */
+ fail += check_centering(10e-10, 10e-10, 10e-10, 60.0, 60.0, 60.0,
+ L_RHOMBOHEDRAL, 'R', '*');
+
/* Hexagonal P */
+ fail += check_centering(10e-10, 20e-10, 30e-10, 120.0, 90.0, 90.0,
+ L_HEXAGONAL, 'P', 'a');
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 120.0, 90.0,
+ L_HEXAGONAL, 'P', 'b');
+ fail += check_centering(10e-10, 20e-10, 30e-10, 90.0, 90.0, 120.0,
+ L_HEXAGONAL, 'P', 'c');
+
/* Hexagonal H (PDB-speak for rhombohedral) */
+ fail += check_centering(40e-10, 20e-10, 20e-10, 120.0, 90.0, 90.0,
+ L_HEXAGONAL, 'H', 'a');
+ fail += check_centering(20e-10, 40e-10, 20e-10, 90.0, 120.0, 90.0,
+ L_HEXAGONAL, 'H', 'b');
+ fail += check_centering(20e-10, 20e-10, 40e-10, 90.0, 90.0, 120.0,
+ L_HEXAGONAL, 'H', 'c');
+
/* Cubic P */
+ fail += check_centering(30e-10, 30e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_CUBIC, 'P', '*');
+
/* Cubic I */
- /* Cubic F */
+ fail += check_centering(30e-10, 30e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_CUBIC, 'I', '*');
+ /* Cubic F */
+ fail += check_centering(30e-10, 30e-10, 30e-10, 90.0, 90.0, 90.0,
+ L_CUBIC, 'F', '*');
return fail;
}