Exemplo n.º 1
0
int main (int argc, char **argv)
{
  Prop **diff;
  real *tVal;
  int j, k, n, nData, nDataSkip, nv, nValDiffuse;
  char buff[BUFF_LEN], *bp;
  FILE *fp;

  if ((fp = fopen (argv[1], "r")) == 0) {
    printf ("no file\n");
    exit (0);
  }
  while (1) {
    bp = fgets (buff, BUFF_LEN, fp);
    if (*bp == CHAR_MINUS) break;
    NameVal (nValDiffuse);
  }
  AllocMem2 (diff, NDIFF, nValDiffuse, Prop);
  for (j = 0; j < NDIFF; j ++) {
    for (n = 0; n < nValDiffuse; n ++) PropZero (diff[j][n]);
  }
  AllocMem (tVal, nValDiffuse, real);
  nDataSkip = 3;
  nv = 0;
  nData = 0;
  while (1) {
    if (! (bp = fgets (buff, BUFF_LEN, fp))) break;
    if (! strncmp (bp, txtDiff, strlen (txtDiff))) {
      if (++ nData > nDataSkip) {
        ++ nv;
        for (n = 0; n < nValDiffuse; n ++) {
          bp = fgets (buff, BUFF_LEN, fp);
          tVal[n] = strtod (bp, &bp);
          for (j = 0; j < NDIFF; j ++) {
            diff[j][n].val = strtod (bp, &bp);
            PropAccum (diff[j][n]);
          }
        }
      }
    }
  }
  fclose (fp);
  printf ("%d\n", nv);
  for (n = 0; n < nValDiffuse; n ++) {
    printf ("%9.4f", tVal[n]);
    for (j = 0; j < NDIFF; j ++) {
      PropAvg (diff[j][n], nv);
      printf (" %9.4f %9.4f", PropEst (diff[j][n]));
    }
    printf ("\n");
  }
}
Exemplo n.º 2
0
int main (int argc, char **argv)
{
  real **sumAcf, **sumAcfSq, *valAcf[3], intAcfSum[3], intAcfSumSq[3],
     intAcfTrunc[3], intAcfTruncSq[3], deltaT, fac, x, w;
  int nValAcf, k, j, n, nSet, nValInt, stepAcf;
  char *bp, buff[BUFF_LEN];
  FILE *fp;

  nValInt = 280;
  if ((fp = fopen (argv[1], "r")) == 0) {
    printf ("no file\n");
    exit (0);
  }
  while (1) {
    bp = fgets (buff, BUFF_LEN, fp);
    if (*bp == CHAR_MINUS) break;
    NameVal (deltaT);
    NameVal (nValAcf);
    NameVal (stepAcf);
  }
  AllocMem2 (sumAcf, 3, nValAcf, real);
  AllocMem2 (sumAcfSq, 3, nValAcf, real);
  for (j = 0; j < 3; j ++) {
    for (n = 0; n < nValAcf; n ++) sumAcf[j][n] = sumAcfSq[j][n] = 0.;
    intAcfSum[j] = intAcfSumSq[j] = 0.;
    intAcfTrunc[j] = intAcfTruncSq[j] = 0.;
  }
  for (j = 0; j < 3; j ++) AllocMem (valAcf[j], nValAcf, real);
  nSet = 0;
  while (1) {
    if (! (bp = fgets (buff, BUFF_LEN, fp))) break;
    if (! strncmp (bp, txtAcf, strlen (txtAcf))) {
      ++ nSet;
      for (n = 0; n < nValAcf; n ++) {
        bp = fgets (buff, BUFF_LEN, fp);
        x = strtod (bp, &bp);
        for (j = 0; j < 3; j ++) {
          w = strtod (bp, &bp);
          valAcf[j][n] = w;
          sumAcf[j][n] += w;
          sumAcfSq[j][n] += Sqr (w);
        }
      }
      bp = fgets (buff, BUFF_LEN, fp);
      bp += strlen (txtintAcf);
      for (j = 0; j < 3; j ++) {
        w = strtod (bp, &bp);
        intAcfSum[j] += w;
        intAcfSumSq[j] += Sqr (w);
      }
      for (j = 0; j < 3; j ++) {
        w = Integrate (valAcf[j], nValInt);
        intAcfTrunc[j] += w;
        intAcfTruncSq[j] += Sqr (w);
      }
    }
  }
  fclose (fp);
  printf ("%d\n", nSet);
  for (j = 0; j < 3; j ++) {
    for (n = 0; n < nValAcf; n ++) {
      sumAcf[j][n] /= nSet;
      sumAcfSq[j][n] = sqrt (sumAcfSq[j][n] / nSet - Sqr (sumAcf[j][n]));
    }
  }
  for (j = 0; j < 3; j ++) {
    intAcfSum[j] /= nSet;
    intAcfSumSq[j] = sqrt (intAcfSumSq[j] / nSet - Sqr (intAcfSum[j]));
    printf ("%9.4f %9.4f %9.4f\n", intAcfSum[j], intAcfSumSq[j],
       intAcfSumSq[j] / intAcfSum[j]);
  }
  for (j = 0; j < 3; j ++) {
    intAcfTrunc[j] /= nSet;
    intAcfTruncSq[j] = sqrt (intAcfTruncSq[j] / nSet - Sqr (intAcfTrunc[j]));
    fac = intAcfSum[j] / Integrate (sumAcf[j], nValAcf);
    intAcfTrunc[j] *= fac;
    intAcfTruncSq[j] *= fac;
  }
  printf ("%d\n", nValInt);
  for (j = 0; j < 3; j ++) {
    printf ("%9.4f %9.4f %9.4f\n", intAcfTrunc[j],
       intAcfTruncSq[j], intAcfTruncSq[j] / intAcfTrunc[j]);
  }
  for (n = 0; n < nValAcf; n ++) {
    x = n * stepAcf * deltaT;
    printf ("%8.4f", x);
    for (j = 0; j < 3; j ++)
       printf (" %8.4f %8.4f", sumAcf[j][n], sumAcfSq[j][n]);
    printf ("\n");
  }
}
Exemplo n.º 3
0
int main (int argc, char **argv)
{
    Cmplx *work;
    real *corrSum[3], *corrSumSq[3], damp, deltaT, deltaTCorr,
         omegaMax, tMax, w, x;
    int doFourier, doWindow, j, k, n, nData, nFunCorr, nSet,
        nSetSkip, nv, nValCorr, stepCorr;
    char *bp, *fName, buff[BUFF_LEN];
    FILE *fp;

    n = 1;
    if (-- argc < 1 || ! strcmp (argv[1], "-h")) PrintHelp (argv[0]);
    doFourier = 1;
    doWindow = 0;
    nSetSkip = 1;
    while (-- argc >= 0) {
        if (! strcmp (argv[n], "-t")) doFourier = 0;
        else if (! strcmp (argv[n], "-w")) doWindow = 1;
        else if (! strcmp (argv[n], "-s")) nSetSkip = atoi (argv[n] + 2);
        else {
            fName = argv[n];
            break;
        }
        ++ n;
    }
    if (argc > 0) PrintHelp (argv[0]);
    omegaMax = 10.;
    tMax = 5.;
    if ((fp = fopen (fName, "r")) == 0) {
        printf ("no file\n");
        exit (0);
    }
    while (1) {
        bp = fgets (buff, BUFF_LEN, fp);
        if (*bp == CHAR_MINUS) break;
        NameVal (deltaT);
        NameVal (nFunCorr);
        NameVal (nValCorr);
        NameVal (stepCorr);
    }
    deltaTCorr = stepCorr * deltaT;
    for (j = 0; j < 3; j ++) {
        AllocMem (corrSum[j], nFunCorr * nValCorr, real);
        AllocMem (corrSumSq[j], nFunCorr * nValCorr, real);
        for (n = 0; n < nFunCorr * nValCorr; n ++)
            corrSum[j][n] = corrSumSq[j][n] = 0.;
    }
    AllocMem (work, 2 * (nValCorr - 1), Cmplx);
    nData = 0;
    nSet = 0;
    while (1) {
        if (! (bp = fgets (buff, BUFF_LEN, fp))) break;
        if (! strncmp (bp, txtCorr, strlen (txtCorr))) {
            ++ nSet;
            if (nSet < nSetSkip) continue;
            ++ nData;
            for (j = 0; j < 3; j ++) {
                bp = fgets (buff, BUFF_LEN, fp);
                for (n = 0; n < nValCorr; n ++) {
                    bp = fgets (buff, BUFF_LEN, fp);
                    w = strtod (bp, &bp);
                    for (k = 0; k < nFunCorr; k ++) {
                        w = strtod (bp, &bp);
                        corrSum[j][k * nValCorr + n] += w;
                        corrSumSq[j][k * nValCorr + n] += Sqr (w);
                    }
                }
            }
        }
    }
    fclose (fp);
    printf ("%d\n", nData);
    for (j = 0; j < 3; j ++) {
        for (n = 0; n < nFunCorr * nValCorr; n ++) {
            corrSum[j][n] /= nData;
            corrSumSq[j][n] = sqrt (corrSumSq[j][n] / nData - Sqr (corrSum[j][n]));
        }
    }
    if (doFourier) {
        for (j = 0; j < 3; j ++) {
            for (k = 0; k < nFunCorr; k ++) {
                for (n = 0; n < nValCorr; n ++) {
                    if (doWindow) damp = (nValCorr - n) / (nValCorr + 0.5);
                    else damp = 1.;
                    CSet (work[n], corrSum[j][k * nValCorr + n] * damp, 0.);
                }
                for (n = nValCorr; n < 2 * (nValCorr - 1); n ++)
                    work[n] = work[2 * (nValCorr - 1) - n];
                FftComplex (work, 2 * nValCorr - 2);
                for (n = 0; n < nValCorr; n ++)
                    corrSum[j][k * nValCorr + n] = work[n].R;
            }
        }
        omegaMax = Min (omegaMax, M_PI / deltaTCorr);
        nv = nValCorr * omegaMax / (M_PI / deltaTCorr);
    } else {
        for (j = 0; j < 3; j ++) {
            for (k = 0; k < nFunCorr; k ++) {
                for (n = 1; n < nValCorr; n ++)
                    corrSum[j][k * nValCorr + n] /= corrSum[j][k * nValCorr];
                corrSum[j][k * nValCorr] = 1.;
            }
        }
        tMax = Min (tMax, (nValCorr - 1) * deltaTCorr);
        nv = nValCorr * tMax / ((nValCorr - 1) * deltaTCorr);
    }
    for (j = 0; j < 3; j ++) {
        printf ("%s\n", header[j]);
        for (n = 0; n < nv; n ++) {
            if (doFourier) x = n * omegaMax / nv;
            else x = n * deltaTCorr;
            printf ("%9.4f", x);
            for (k = 0; k < nFunCorr; k ++)
                printf (" %9.4f", corrSum[j][k * nValCorr + n]);
            printf ("\n");
        }
    }
}