aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2014-01-23 11:14:29 +0100
committerThomas White <taw@physics.org>2014-01-23 11:14:29 +0100
commit3776f8cbfd41798a1591a1a5a337fffef3322bd5 (patch)
tree1fefb6c27f3438bacb3a1cdcc63ba679ed3b489e
parent4e172a34adca99d71a22aa4bcaccf0dd6a374400 (diff)
pattern_sim: Add point groups 4 and 422 for GPU
-rw-r--r--data/diffraction.cl18
-rw-r--r--src/diffraction-gpu.c40
2 files changed, 52 insertions, 6 deletions
diff --git a/data/diffraction.cl b/data/diffraction.cl
index 78cf1cf4..76c6b9d9 100644
--- a/data/diffraction.cl
+++ b/data/diffraction.cl
@@ -171,6 +171,24 @@ float molecule_factor(global float *intensities, global float *flags,
val += lookup_flagged_intensity(intensities, flags, h, k, -l);
#endif /* PGMMM */
+ #ifdef PG4
+ val += lookup_flagged_intensity(intensities, flags, -k, h, l);
+ val += lookup_flagged_intensity(intensities, flags, h, k, l);
+ val += lookup_flagged_intensity(intensities, flags, -h, -k, l);
+ val += lookup_flagged_intensity(intensities, flags, k, -h, l);
+ #endif /* PG4 */
+
+ #ifdef PG422
+ val += lookup_flagged_intensity(intensities, flags, -k, h, l);
+ val += lookup_flagged_intensity(intensities, flags, -h, k, l);
+ val += lookup_flagged_intensity(intensities, flags, h, k, l);
+ val += lookup_flagged_intensity(intensities, flags, -h, -k, l);
+ val += lookup_flagged_intensity(intensities, flags, -k, -h, -l);
+ val += lookup_flagged_intensity(intensities, flags, k, h, -l);
+ val += lookup_flagged_intensity(intensities, flags, k, -h, -l);
+ val += lookup_flagged_intensity(intensities, flags, h, -k, -l);
+ #endif /* PG422 */
+
#ifdef PG321H
val += lookup_flagged_intensity(intensities, flags, h, k, l);
val += lookup_flagged_intensity(intensities, flags, i, h, l);
diff --git a/src/diffraction-gpu.c b/src/diffraction-gpu.c
index ff4f2414..1ed008e8 100644
--- a/src/diffraction-gpu.c
+++ b/src/diffraction-gpu.c
@@ -434,24 +434,52 @@ struct gpu_context *setup_gpu(int no_sfac,
free(intensities_ptr);
if ( sym != NULL ) {
+
+ /* Triclinic */
if ( strcmp(sym, "1") == 0 ) {
strncat(cflags, "-DPG1 ", 511-strlen(cflags));
} else if ( strcmp(sym, "-1") == 0 ) {
strncat(cflags, "-DPG1BAR ", 511-strlen(cflags));
- } else if ( strcmp(sym, "6/mmm") == 0 ) {
- strncat(cflags, "-DPG6MMM ", 511-strlen(cflags));
+
+ /* Monoclinic */
+ /* FIXME: 2, 2/m, (m)*/
+
+ /* Orthorhombic */
+ } else if ( strcmp(sym, "mmm") == 0 ) {
+ strncat(cflags, "-DPGMMM ", 511-strlen(cflags));
+ /* FIXME: 222, mmm, (mm2) */
+
+ /* Tetragonal */
+ } else if ( strcmp(sym, "4") == 0 ) {
+ strncat(cflags, "-DPG4 ", 511-strlen(cflags));
+ } else if ( strcmp(sym, "422") == 0 ) {
+ strncat(cflags, "-DPG422 ", 511-strlen(cflags));
+ /* FIXME: 4/m, 4/mmm, (-42m, -4m2, -4, 4mm) */
+
+ /* Trigonal (rhombohedral) */
+ /* FIXME: 3, 32, -3m, (3m) */
+
+ /* Trigonal (hexagonal) */
+ } else if ( strcmp(sym, "321_H") == 0 ) {
+ strncat(cflags, "-DPG321H ", 511-strlen(cflags));
+ /* FIXME: 3, -3, 312, -31m -3m1, (3m1, 31m) */
+
+ /* Hexagonal */
} else if ( strcmp(sym, "6") == 0 ) {
strncat(cflags, "-DPG6 ", 511-strlen(cflags));
} else if ( strcmp(sym, "6/m") == 0 ) {
strncat(cflags, "-DPG6M ", 511-strlen(cflags));
- } else if ( strcmp(sym, "mmm") == 0 ) {
- strncat(cflags, "-DPGMMM ", 511-strlen(cflags));
+ } else if ( strcmp(sym, "6/mmm") == 0 ) {
+ strncat(cflags, "-DPG6MMM ", 511-strlen(cflags));
+ /* FIXME: 622, (-6, -6m2, -62m) */
+
+ /* Cubic */
} else if ( strcmp(sym, "23") == 0 ) {
strncat(cflags, "-DPG23 ", 511-strlen(cflags));
} else if ( strcmp(sym, "m-3") == 0 ) {
strncat(cflags, "-DPGM3 ", 511-strlen(cflags));
- } else if ( strcmp(sym, "321_H") == 0 ) {
- strncat(cflags, "-DPG321H ", 511-strlen(cflags));
+ /* FIXME: 432, m-3m, (-43m) */
+
} else {
ERROR("Sorry! Point group '%s' is not currently"
" supported on the GPU."