Esempio n. 1
0
int MakeCumRMx(const int *R, int Order, int *CumRMx)
{
  int  MxA[9], MxB[9];
  int  *RR, *RRR, *Swp, iO, i;


  if (Order < 0) {
    Order *= -1;
    if (Order % 2) Order *= 2;
  }

  InitRotMx(CumRMx, 1);

  if (Order > 1)
  {
    RR = (int *) R;
    RRR = MxA;

    for (iO = 1;;)
    {
      for (i = 0; i < 9; i++) CumRMx[i] += RR[i];

      if (++iO == Order)
        break;

      RotMxMultiply(RRR, R, RR);
      if (RR == R) RR = MxB;
      Swp = RR; RR = RRR; RRR = Swp;
    }
  }

  return Order;
}
Esempio n. 2
0
static void PutSchakal(const T_SgInfo *SgInfo, FILE *fpout)
{
  int           iList, nMx, i;
  int           nTrV, iTrV;
  const int     *TrV;
  T_RTMx        SMx;
  const T_RTMx  *lsmx;
  const char    *xyz;


  if (Sg_nLoopInv(SgInfo) == 2)
    fprintf(fpout, "DU -x,-y,-z\n");

  nTrV = SgInfo->LatticeInfo->nTrVector;
   TrV = SgInfo->LatticeInfo->TrVector;

  if (nTrV > 1)
  {
    fprintf(fpout, "DU");

    InitRotMx(SMx.s.R, 1);

    TrV += 3;

    for (iTrV = 1; iTrV < nTrV; iTrV++, TrV += 3)
    {
      for (i = 0; i < 3; i++)
        SMx.s.T[i] = TrV[i];

          xyz = RTMx2XYZ(&SMx, 1, STBF, 0, 0, 1, ",", NULL, 0);
      if (xyz)
      {
        if (iTrV > 1)
          fprintf(fpout, " ;");

        fprintf(fpout, " %s", xyz);
      }
      else
      {
        putc('\n', fpout);
        goto ReturnError;
      }
    }

    putc('\n', fpout);
  }

  nMx = 0;

  lsmx = &SgInfo->ListSeitzMx[1];

  for (iList = 1; iList < SgInfo->nList; iList++, lsmx++)
  {
        xyz = RTMx2XYZ(lsmx, 1, STBF, 0, 0, 1, ",", NULL, 0);
    if (xyz)
    {
      if (nMx % 4 == 0)
      {
        if (nMx) putc('\n', fpout);
        fprintf(fpout, "SY %s", xyz);
      }
      else
        fprintf(fpout, " ; %s", xyz);
    }
    else
    {
      putc('\n', fpout);
      goto ReturnError;
    }

    nMx++;
  }

  if (nMx)
    putc('\n', fpout);

  putc('\n', fpout);

  return;

  ReturnError:

  SetSgError("Internal Error: PutSchakal()");
  return;
}