snprintf(errbuf, errbufsize, "line %d: bad symmetry_operation format", lineNumber);
goto exit;
}
snprintf(errbuf, errbufsize, "line %d: bad symmetry_operation format", lineNumber);
goto exit;
}
i++;
if (i == 4) {
AssignArray(&mp->syms, &mp->nsyms, sizeof(Transform), mp->nsyms, tr);
i++;
if (i == 4) {
AssignArray(&mp->syms, &mp->nsyms, sizeof(Transform), mp->nsyms, tr);
if (sscanf(buf, "%lf %lf %lf", &dbuf[0], &dbuf[1], &dbuf[2]) < 3) {
snprintf(errbuf, errbufsize, "line %d: bad symmetry_operation format", lineNumber);
goto exit;
if (sscanf(buf, "%lf %lf %lf", &dbuf[0], &dbuf[1], &dbuf[2]) < 3) {
snprintf(errbuf, errbufsize, "line %d: bad symmetry_operation format", lineNumber);
goto exit;
if (cellType == 0) {
ReadFormat(buf, "I1F14F3F3F3F15F3F3F3F15F3F3F3", ibuf, fbuf, fbuf+1, fbuf+2, fbuf+3, fbuf+4, fbuf+5, fbuf+6, fbuf+7, fbuf+8, fbuf+9, fbuf+10, fbuf+11);
tr[0] = fbuf[1];
if (cellType == 0) {
ReadFormat(buf, "I1F14F3F3F3F15F3F3F3F15F3F3F3", ibuf, fbuf, fbuf+1, fbuf+2, fbuf+3, fbuf+4, fbuf+5, fbuf+6, fbuf+7, fbuf+8, fbuf+9, fbuf+10, fbuf+11);
tr[0] = fbuf[1];
static Transform tr_c = {1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.5, 0};
static Transform tr_a = {1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0.5};
static Transform tr_b = {1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 0.5};
static Transform tr_c = {1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0.5, 0};
static Transform tr_a = {1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0.5};
static Transform tr_b = {1, 0, 0, 0, 1, 0, 0, 0, 1, 0.5, 0, 0.5};
- static Transform tr_r1 = {0, -1, 0, 1, -1, 0, 0, 0, 1, 0, 0, 0};
- static Transform tr_r2 = {-1, 1, 0, -1, 0, 0, 0, 0, 1, 0, 0, 0};
+ static Transform tr_r1 = {0, 1, 0, -1, -1, 0, 0, 0, 1, 0, 0, 0};
+ static Transform tr_r2 = {-1, -1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0};
fprintf(fp, "! a11 a12 a13; a21 a22 a23; a31 a32 a33; t1 t2 t3\n");
for (i = 0; i < mp->nsyms; i++) {
Transform *tp = mp->syms + i;
fprintf(fp, "! a11 a12 a13; a21 a22 a23; a31 a32 a33; t1 t2 t3\n");
for (i = 0; i < mp->nsyms; i++) {
Transform *tp = mp->syms + i;
+ const unsigned char s_index_order[12] = {0, 3, 6, 1, 4, 7, 2, 5, 8, 9, 10, 11};
- fprintf(fp, "%11.6f%c", (*tp)[j], (j % 3 == 2 ? '\n' : ' '));
+ fprintf(fp, "%11.6f%c", (*tp)[s_index_order[j]], (j % 3 == 2 ? '\n' : ' '));
cp->tr[9] = cp->origin.x;
cp->tr[10] = cp->origin.y;
cp->tr[11] = cp->origin.z;
cp->tr[9] = cp->origin.x;
cp->tr[10] = cp->origin.y;
cp->tr[11] = cp->origin.z;
if (NormalizeVec(&v2, &v2))
return -1; /* Non-regular transform */
}
if (NormalizeVec(&v2, &v2))
return -1; /* Non-regular transform */
}
} else {
VecCross(v1, *vp1, *vp2);
if (fabs(VecDot(v1, *vp3)) < 1e-7)
return -1; /* Non-regular transform */
} else {
VecCross(v1, *vp1, *vp2);
if (fabs(VecDot(v1, *vp3)) < 1e-7)
return -1; /* Non-regular transform */
- cp->tr[n2] = vp2->x;
- cp->tr[n2 + 3] = vp2->y;
- cp->tr[n2 + 6] = vp2->z;
- cp->tr[n3] = vp3->x;
- cp->tr[n3 + 3] = vp3->y;
- cp->tr[n3 + 6] = vp3->z;
+ cp->tr[n2*3] = vp2->x;
+ cp->tr[n2*3+1] = vp2->y;
+ cp->tr[n2*3+2] = vp2->z;
+ cp->tr[n3*3] = vp3->x;
+ cp->tr[n3*3+1] = vp3->y;
+ cp->tr[n3*3+2] = vp3->z;
}
}
if (TransformInvert(cp->rtr, cp->tr))
return -1; /* Non-regular transform */
/* Calculate the reciprocal cell parameters */
}
}
if (TransformInvert(cp->rtr, cp->tr))
return -1; /* Non-regular transform */
/* Calculate the reciprocal cell parameters */
- cp->rcell[0] = sqrt(cp->rtr[0] * cp->rtr[0] + cp->rtr[3] * cp->rtr[3] + cp->rtr[6] * cp->rtr[6]);
- cp->rcell[1] = sqrt(cp->rtr[1] * cp->rtr[1] + cp->rtr[4] * cp->rtr[4] + cp->rtr[7] * cp->rtr[7]);
- cp->rcell[2] = sqrt(cp->rtr[2] * cp->rtr[2] + cp->rtr[5] * cp->rtr[5] + cp->rtr[8] * cp->rtr[8]);
- cp->rcell[3] = acos((cp->rtr[1] * cp->rtr[2] + cp->rtr[4] * cp->rtr[5] + cp->rtr[7] * cp->rtr[8]) / (cp->rcell[1] * cp->rcell[2])) * kRad2Deg;
- cp->rcell[4] = acos((cp->rtr[2] * cp->rtr[0] + cp->rtr[5] * cp->rtr[3] + cp->rtr[8] * cp->rtr[6]) / (cp->rcell[2] * cp->rcell[0])) * kRad2Deg;
- cp->rcell[5] = acos((cp->rtr[0] * cp->rtr[1] + cp->rtr[3] * cp->rtr[4] + cp->rtr[6] * cp->rtr[7]) / (cp->rcell[0] * cp->rcell[1])) * kRad2Deg;
+ cp->rcell[0] = sqrt(cp->rtr[0] * cp->rtr[0] + cp->rtr[1] * cp->rtr[1] + cp->rtr[2] * cp->rtr[2]);
+ cp->rcell[1] = sqrt(cp->rtr[3] * cp->rtr[3] + cp->rtr[4] * cp->rtr[4] + cp->rtr[5] * cp->rtr[5]);
+ cp->rcell[2] = sqrt(cp->rtr[6] * cp->rtr[6] + cp->rtr[7] * cp->rtr[7] + cp->rtr[8] * cp->rtr[8]);
+ cp->rcell[3] = acos((cp->rtr[3] * cp->rtr[6] + cp->rtr[4] * cp->rtr[7] + cp->rtr[5] * cp->rtr[8]) / (cp->rcell[1] * cp->rcell[2])) * kRad2Deg;
+ cp->rcell[4] = acos((cp->rtr[6] * cp->rtr[0] + cp->rtr[7] * cp->rtr[1] + cp->rtr[8] * cp->rtr[2]) / (cp->rcell[2] * cp->rcell[0])) * kRad2Deg;
+ cp->rcell[5] = acos((cp->rtr[0] * cp->rtr[3] + cp->rtr[1] * cp->rtr[4] + cp->rtr[2] * cp->rtr[5]) / (cp->rcell[0] * cp->rcell[1])) * kRad2Deg;
if (calc_abc) {
/* Calculate a, b, c, alpha, beta, gamma */
if (calc_abc) {
/* Calculate a, b, c, alpha, beta, gamma */
- anp->pmat[u] = axis[u].x * val[u];
- anp->pmat[u+3] = axis[u].y * val[u];
- anp->pmat[u+6] = axis[u].z * val[u];
+ anp->pmat[u*3] = axis[u].x * val[u];
+ anp->pmat[u*3+1] = axis[u].y * val[u];
+ anp->pmat[u*3+2] = axis[u].z * val[u];