static int Try_GS_si(T_SgInfo *SgInfo) { int h, k, l, iList; int Maxh, Maxk, Maxl; int Minh, Mink, Minl; int nTestField, *TestField; int nProperty, *Property, *pp; int IsFine, would_be, is; SgInfo->n_si_Vector = -1; nTestField = 12 * 12 * 12; AppMalloc(TestField, nTestField); if (TestField == NULL) { SetSgError("Not enough core"); return -1; } MarkLegalOrigins(SgInfo, TestField); Maxh = Maxk = Maxl = 7; SetListMin_hkl(SgInfo, Maxk, Maxl, &Minh, &Mink, &Minl); nProperty = (Maxh - Minh + 1) * (Maxk - Mink + 1) * (Maxl - Minl + 1); AppMalloc(Property, nProperty); if (Property == NULL) { SetSgError("Not enough core"); AppFree(TestField, nTestField); return -1; } pp = Property; for (h = Minh; h <= Maxh; h++) for (k = Mink; k <= Maxk; k++) for (l = Minl; l <= Maxl; l++) { iList = IsSysAbsent_hkl(SgInfo, h, k, l, NULL); if (SgError != NULL) { AppFree(Property, nProperty); AppFree(TestField, nTestField); return -1; } if (iList == 0) *pp++ = Verify_si(h, k, l, TestField); else *pp++ = -1; } if (Find_si(SgInfo) >= 0) { IsFine = 1; pp = Property; for (h = Minh; IsFine && h <= Maxh; h++) for (k = Mink; IsFine && k <= Maxk; k++) for (l = Minl; IsFine && l <= Maxl; l++) { is = *pp++; if (is >= 0) { would_be = Is_si(SgInfo, h, k, l); if (is != would_be) IsFine = 0; } } if (IsFine) { AppFree(Property, nProperty); AppFree(TestField, nTestField); return 0; } } SetSgError("Internal Error: Can't determine s.i. vectors and moduli"); AppFree(Property, nProperty); AppFree(TestField, nTestField); return -1; }
int Check_ssVM(T_SgInfo *SgInfo) { int h, k, l, iList; int Maxh, Maxk, Maxl; int Minh, Mink, Minl; int nTestField, *TestField; int nProperty, *Property, *pp; int RetVal, would_be, is; TestField = NULL; Property = NULL; RetVal = -1; nTestField = 12 * 12 * 12; nxs_malloc(TestField, nTestField); if (TestField == NULL) { SetSgError("Not enough core"); goto CleanAndReturn; } MarkLegalOrigins(SgInfo, TestField); Maxh = Maxk = Maxl = 7; Minh = Mink = Minl = -7; nProperty = (Maxh - Minh + 1) * (Maxk - Mink + 1) * (Maxl - Minl + 1); nxs_malloc(Property, nProperty); if (Property == NULL) { SetSgError("Not enough core"); goto CleanAndReturn; } pp = Property; for (h = Minh; h <= Maxh; h++) for (k = Mink; k <= Maxk; k++) for (l = Minl; l <= Maxl; l++) { iList = IsSysAbsent_hkl(SgInfo, h, k, l, NULL); if (SgError != NULL) goto CleanAndReturn; if (iList == 0) *pp++ = Verify_ss(h, k, l, TestField); else *pp++ = -1; } pp = Property; for (h = Minh; h <= Maxh; h++) for (k = Mink; k <= Maxk; k++) for (l = Minl; l <= Maxl; l++) { is = *pp++; if (is >= 0) { would_be = Is_ss(SgInfo, h, k, l); if (is != would_be) { RetVal = 0; goto CleanAndReturn; } } } RetVal = 1; CleanAndReturn: if (Property) free(Property); if (TestField) free(TestField); return RetVal; }