From 3776f8cbfd41798a1591a1a5a337fffef3322bd5 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 23 Jan 2014 11:14:29 +0100 Subject: pattern_sim: Add point groups 4 and 422 for GPU --- data/diffraction.cl | 18 ++++++++++++++++++ src/diffraction-gpu.c | 40 ++++++++++++++++++++++++++++++++++------ 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." -- cgit v1.2.3