Beispiel #1
0
void dumprsrc(list_t *rl)
{
	node_t *rn = rl->next;
	while(rn != (node_t*) rl) {
		printres((resource_t*)rn->data);
		rn = rn->next;
	}
}
Beispiel #2
0
void test6(){
  sqlite3 *db;
  int res, i, a, b;
  sqlite3_stmt *stmt;
  char str[256];

  res=sqlite3_open("TEST6", &db); assert(res==0);

  // create first table
  char *s1 = "CREATE TABLE t1 (a INTEGER PRIMARY KEY, b INT);";
  res=sqlite3_prepare(db, s1, -1, &stmt, 0);
  if (res){
    printf("  Error creating table t1 (table already exists?)\n");
    return;
  }
  res=sqlite3_step(stmt);
  if (res != SQLITE_DONE){
    printres(res);
    return;
  }
  sqlite3_finalize(stmt);

  // insert into first table
  for (i=0; i < TEST6_NROWS; ++i){
    sprintf(str, "INSERT INTO t1 VALUES (%d,%d);", i, TEST6_NROWS-1-i);
    res=sqlite3_prepare(db, str, -1, &stmt, 0); assert(res==0);
    do {
      res=sqlite3_step(stmt); 
    } while (res==SQLITE_BUSY);
    assert(res==SQLITE_DONE);
    sqlite3_finalize(stmt);
  }

  s1 = "SELECT * FROM t1 ORDER BY b;";
  res=sqlite3_prepare(db, s1, -1, &stmt, 0); assert(res==0);
  res=sqlite3_step(stmt);
  i=0;
  do {
    if (res==SQLITE_ROW){
      res = sqlite3_column_count(stmt);
      assert(res==2);
      a=sqlite3_column_int(stmt, 0);
      b=sqlite3_column_int(stmt, 1);
      assert(a==TEST6_NROWS-1-i);
      assert(b==i);
    }
    res=sqlite3_step(stmt);
    ++i;
  } while (res == SQLITE_ROW);
  
  res=sqlite3_finalize(stmt); assert(res==0);
  assert(i==TEST6_NROWS);

  res=sqlite3_close(db); assert(res==0);
  return;
}
Beispiel #3
0
// test1: basic test that creates a table, inserts a value, and
// queries for that value repeatedly.
void test1(){
  sqlite3 *db;
  int res, i;
  sqlite3_stmt *stmt;

  res=sqlite3_open("TEST1", &db); assert(res==0);

  const char *s1 = "CREATE TABLE t1 (a INTEGER PRIMARY KEY, b INT);";
  res=sqlite3_prepare(db, s1, -1, &stmt, 0);
  if (res){
    printf("  Error creating table (table already exists?)\n");
    return;
  }
  res=sqlite3_step(stmt);
  if (res != SQLITE_DONE){
    printres(res);
    return;
  }
  sqlite3_finalize(stmt);

  s1 = "INSERT INTO t1 VALUES (1,2);";
  res=sqlite3_prepare(db, s1, -1, &stmt, 0); assert(res==0);
  res=sqlite3_step(stmt);
  if (res != SQLITE_DONE){
    printres(res);
    return;
  }
  sqlite3_finalize(stmt);

  s1 = "SELECT * FROM t1 WHERE a=1;";

  for (i=0; i < TEST1_REPS; ++i){
    res=sqlite3_prepare(db, s1, -1, &stmt, 0); assert(res==0);
    res=sqlite3_step(stmt);
    res=sqlite3_finalize(stmt); assert(res==0);
  }

  res=sqlite3_close(db); assert(res==0);
  return;
}
Beispiel #4
0
 void nqueens(vector<int> A, int cur, int n)
 {
   if (cur == n) 
     printres(A, n);
   else
   {
     for (int i = 0; i < n; i++)
     {
       A[cur] = i;
       if (isValid(A, cur))
         nqueens(A, cur + 1, n);
     }
   }
 }
Beispiel #5
0
void dumponersrc(const char *num)
{
	int n;
	node_t *rn;

	n = readnum (num);
	rn = resource_list.next;
	while(rn != (node_t*) &resource_list) {
		if (((resource_t*)rn->data)->id == n) {
			printres((resource_t*) rn->data);
			break;
		} else {
			rn = rn->next;
		}
	}
}
Beispiel #6
0
void dumpteam(int id)
{
	node_t *rn;
	
	team_t *team = rsrc_find_team(id);
	if(team){
		kprintf("team %d (%s)...",team->rsrc.id,team->rsrc.name);
		rn = team->resources.next;
		while(rn != (node_t*) &team->resources) {
			printres((resource_t*) rn->data);
			rn = rn->next;
		}	
	} else {
		kprintf("no such team %d",id);
	}
	
}
Beispiel #7
0
void
telnet_readcb(struct bufferevent *bev, void *parameter)
{
	struct argument *arg = parameter;
	struct evbuffer *input = EVBUFFER_INPUT(bev);
	struct telnet_state *state = arg->a_state;

	DFPRINTF((stderr, "%s: called\n", __func__));

	if (arg->a_flags == 0) {
		int res = telnet_makeconnect(bev, arg);
		if (res == -1) {
			evbuffer_add(input, "", 1);
			printres(arg, arg->a_ports[0].port, 
			    EVBUFFER_DATA(input));
			scanhost_return(bev, arg, 0);
			return;
		} else if (res == 1) {
			arg->a_flags = TELNET_WAITING_CONNECT;
			bufferevent_disable(bev, EV_READ);
		}
	} else if (arg->a_flags & TELNET_READING_CONNECT) {
		if (evbuffer_find(input, state->connect_wait,
			strlen(state->connect_wait)) == NULL)
			return;
		evbuffer_drain(input, EVBUFFER_LENGTH(input));

		arg->a_flags = TELNET_WRITING_COMMAND;
		bufferevent_disable(bev, EV_READ);
		http_makerequest(bev, arg, socks_getword(), 0);
	} else if (arg->a_flags & TELNET_WAITING_RESPONSE) {
		int res = http_bufferanalyse(bev, arg);
		if (res == -1)
			return;
		if (res == 1) {
			postres(arg, state->response);
			scanhost_return(bev, arg, 1);
		}
	}

	return;
}
Beispiel #8
0
// routine running RND
void rundev(librandom::RandomDev *rnd, const unsigned long N)
{
  double sum = 0;
  double sum2= 0;
  double x;
  std::clock_t t1, t2;

  t1 = std::clock();
  for (unsigned long k = 0 ; k < N ; k++ ) {
    x = (*rnd)();
    // std::cout << x << std::endl;
    sum += x;
    sum2 += std::pow(x, 2);
  }
  t2 = std::clock();
  double dt =  double(t2-t1) / CLOCKS_PER_SEC * 1000; // ms

  double mean = sum / N;
  double sdev = std::sqrt(sum2/N - std::pow(mean,2));
  printres(mean, sdev, dt);
}
Beispiel #9
0
int main(void)
{
 // create random number generator type dictionary
  Dictionary rngdict;
  DictionaryDatum rngdictd(rngdict);
  
  // add non-GSL rngs
  register_rng<librandom::KnuthLFG>("KnuthLFG", rngdictd);
  register_rng<librandom::MT19937>("MT19937", rngdictd);

  // let GslRandomGen add all of the GSL rngs
  librandom::GslRandomGen::add_gsl_rngs(rngdictd);

  // run all available RNG
  std::cout << std::endl
	    << "==========================================================="
	    << std::endl << std::endl;
  std::cout << "Available random generators---Generating "
	    << Ngen << " numbers" << std::endl;
  std::cout << "-----------------------------------------------------------"
	    << std::endl;
  // check all implementations
  for ( Dictionary::const_iterator it = rngdict.begin() ;
  it != rngdict.end() ; ++it )
  {
    std::cout << std::left << std::setw(25) << it->first << ": ";
    
    librandom::RngFactoryDatum fd = getValue<librandom::RngFactoryDatum>(it->second);
    librandom::RngPtr rp = fd->create(librandom::RandomGen::DefaultSeed);
    rungen(rp, Ngen);
  }

  std::cout << std::left << std::setw(25) << "Expected" << ": ";
  printres(0.5, 1.0/std::sqrt(12.0), -1);
  std::cout << std::endl
	    << "==========================================================="
	    << std::endl;

  // random deviates
  std::cout << std::endl
	    << "Available random deviates---Generating "
	    << Ndev << " numbers" << std::endl
	    << "-----------------------------------------------------------"
	    << std::endl << std::endl;


  // create default generator for deviate generation
    librandom::RngFactoryDatum rngfact 
      = getValue<librandom::RngFactoryDatum>(rngdict.begin()->second);
  
    librandom::RngPtr lockrng = rngfact->create(librandom::RandomGen::DefaultSeed);

    librandom::RandomDev* rnd;
    
  // Poisson
  {
    std::cout << std::left << std::setw(25) << "Poisson (lam=1)" << " : ";
    lockrng->seed(seed);
    rnd = new librandom::PoissonRandomDev(lockrng,1);
    rundev(rnd, Ndev);
    std::cout << std::left << std::setw(25) << "Expected" << " : ";
    printres(1.0, 1.0, -1);
    std::cout << std::endl;
  }

  // Normal
  {
    std::cout << std::left << std::setw(25) << "Normal" << " : ";
    lockrng->seed(seed);
    rnd = new librandom::NormalRandomDev(lockrng);
    rundev(rnd, Ndev);
    std::cout << std::left << std::setw(25) << "Expected" << " : ";
    printres(0.0, 1.0, -1);
    std::cout << std::endl;
  }

  // Exponential
  {
    std::cout << std::left << std::setw(25) << "Exponential" << " : ";
    lockrng->seed(seed);
    rnd = new librandom::ExpRandomDev(lockrng);
    rundev(rnd, Ndev);
    std::cout << std::left << std::setw(25) << "Expected" << " : ";
    printres(1.0, 1.0, -1);
    std::cout << std::endl;
  }

  // Gamma
  {
    std::cout << std::left << std::setw(25) << "Gamma (Order 4)" << " : ";
    lockrng->seed(seed);
    rnd = new librandom::GammaRandomDev(lockrng, 4);
    rundev(rnd, Ndev);
    std::cout << std::left << std::setw(25) << "Expected" << " : ";
    printres(4.0, 2.0, -1);
    std::cout << std::endl;
  }

  // Binomial
  {
    std::cout << std::left << std::setw(25) << "Binom (0.25, 8)" << " : ";
    lockrng->seed(seed);
    rnd = new librandom::BinomialRandomDev(lockrng, 0.25, 8);
    rundev(rnd, Ndev);
    std::cout << std::left << std::setw(25) << "Expected" << " : ";
    printres(2.0, 1.2247, -1);
    std::cout << std::endl;
  }

            std::cout << std::endl
	    << "==========================================================="
	    << std::endl;

  return 0;
}
Beispiel #10
0
// common function for test7 and test5
void test7(){
  sqlite3 *db;
  int res, i, j, a, b;
  sqlite3_stmt *stmt;
  char str[256];

  res=sqlite3_open("TEST7", &db); assert(res==0);

  // create table
  char *s1 = "CREATE TABLE t1 (a INTEGER PRIMARY KEY, b INT);";
  res=sqlite3_prepare(db, s1, -1, &stmt, 0);
  if (res){
    printf("  Error creating table t1 (table already exists?)\n");
    return;
  }
  res=sqlite3_step(stmt);
  if (res != SQLITE_DONE){
    printres(res);
    return;
  }
  sqlite3_finalize(stmt);

  // run transactions
  for (i=0; i < TEST7_TXS; ++i){
    do {
      s1 = "BEGIN TRANSACTION;";
      res=sqlite3_prepare(db, s1, -1, &stmt, 0); assert(!res);
      res=sqlite3_step(stmt); assert(res==SQLITE_DONE);
      sqlite3_finalize(stmt);

      for (j=0; j < TEST7_OPS; ++j){
        sprintf(str, "INSERT INTO t1 VALUES (%d,%d);", i*TEST7_OPS+j,
                i*TEST7_OPS+j);
        res=sqlite3_prepare(db, str, -1, &stmt, 0); assert(res==0);
        do {
          res=sqlite3_step(stmt);
          if (res==SQLITE_BUSY) putchar('B');
        } while (res==SQLITE_BUSY);
        assert(res==SQLITE_DONE);
        sqlite3_finalize(stmt);
      }

      s1 = "COMMIT TRANSACTION;";
      res=sqlite3_prepare(db, s1, -1, &stmt, 0);
      if (res == SQLITE_BUSY){
        putchar('C');
        goto test7_busy;
      }
      assert(!res);
      res=sqlite3_step(stmt);
      if (res == SQLITE_BUSY){
        putchar('D');
        goto test7_busy;
      }
      assert(res==SQLITE_DONE);
     test7_busy:
      sqlite3_finalize(stmt);
    } while (res == SQLITE_BUSY);
  }
    

  s1 = "SELECT * FROM t1 ORDER BY a;";
  res=sqlite3_prepare(db, s1, -1, &stmt, 0); assert(res==0);
  res=sqlite3_step(stmt);
  i=0;
  do {
    if (res==SQLITE_ROW){
      res = sqlite3_column_count(stmt);
      assert(res==2);
      a=sqlite3_column_int(stmt, 0);
      b=sqlite3_column_int(stmt, 1);
      assert(a==i);
      assert(b==i);
    }
    res=sqlite3_step(stmt);
    ++i;
  } while (res == SQLITE_ROW);
  
  res=sqlite3_finalize(stmt); assert(res==0);
  assert(i==TEST7_TXS * TEST7_OPS);

  res=sqlite3_close(db); assert(res==0);
  return;
}
Beispiel #11
0
// common function for test4 and test5
void test4and5_common(char *dbname, bool indexfirst){
  sqlite3 *db;
  int res, i, j, a, b, c;
  sqlite3_stmt *stmt;
  char str[256];

  res=sqlite3_open(dbname, &db); assert(res==0);

  // create first table
  char *s1 = "CREATE TABLE t1 (a INTEGER PRIMARY KEY, b INT);";
  res=sqlite3_prepare(db, s1, -1, &stmt, 0);
  if (res){
    printf("  Error creating table t1 (table already exists?)\n");
    return;
  }
  res=sqlite3_step(stmt);
  if (res != SQLITE_DONE){
    printres(res);
    return;
  }
  sqlite3_finalize(stmt);

  // create second table
  s1 = "CREATE TABLE t2 (c INT, d INT);";
  res=sqlite3_prepare(db, s1, -1, &stmt, 0);
  if (res){
    printf("  Error creating table t2 (table already exists?)\n");
    return;
  }
  res=sqlite3_step(stmt);
  if (res != SQLITE_DONE){
    printres(res);
    return;
  }
  sqlite3_finalize(stmt);

  if (indexfirst){
    // create index
    s1 = "CREATE INDEX i1 ON t2(c);";
    res=sqlite3_prepare(db, s1, -1, &stmt, 0);
    if (res){
      printf("  Error creating table t2 (table already exists?)\n");
      return;
    }
    res=sqlite3_step(stmt);
    if (res != SQLITE_DONE){
      printres(res);
      return;
    }
    sqlite3_finalize(stmt);
  }

  // insert into first table
  for (i=0; i < TEST4_NROWS; ++i){
    sprintf(str, "INSERT INTO t1 VALUES (%d,%d);", i, i);
    res=sqlite3_prepare(db, str, -1, &stmt, 0); assert(res==0);
    do {
      res=sqlite3_step(stmt); 
    } while (res==SQLITE_BUSY);
    assert(res==SQLITE_DONE);
    sqlite3_finalize(stmt);
  }

  // insert into second table
  for (i=0; i < TEST4_NROWS; ++i){
    for (j=0; j < TEST4_NJOINS; ++j){
      sprintf(str, "INSERT INTO t2 VALUES (%d,%d);", i, j);
      res=sqlite3_prepare(db, str, -1, &stmt, 0); assert(res==0);
      do {
        res=sqlite3_step(stmt); 
      } while (res==SQLITE_BUSY);
      assert(res==SQLITE_DONE);
      sqlite3_finalize(stmt);
    }
  }

  if (!indexfirst){
    // create index
    s1 = "CREATE INDEX i1 ON t2(c);";
    res=sqlite3_prepare(db, s1, -1, &stmt, 0);
    if (res){
      printf("  Error creating table t2 (table already exists?)\n");
      return;
    }
    res=sqlite3_step(stmt);
    if (res != SQLITE_DONE){
      printres(res);
      return;
    }
    sqlite3_finalize(stmt);
  }

  s1 = "SELECT * FROM t1 JOIN t2 on t1.b=t2.c;";
  res=sqlite3_prepare(db, s1, -1, &stmt, 0); assert(res==0);
  res=sqlite3_step(stmt);
  i=0;
  do {
    if (res==SQLITE_ROW){
      res = sqlite3_column_count(stmt);
      assert(res==4);
      a=sqlite3_column_int(stmt, 0);
      b=sqlite3_column_int(stmt, 1);
      c=sqlite3_column_int(stmt, 2);
      // d=sqlite3_column_int(stmt, 3);
      assert(a==b);
      assert(b==c);
    }
    res=sqlite3_step(stmt);
    ++i;
  } while (res == SQLITE_ROW);
  
  res=sqlite3_finalize(stmt); assert(res==0);
  assert(i==TEST4_NROWS * TEST4_NJOINS);

  res=sqlite3_close(db); assert(res==0);
  return;
}
Beispiel #12
0
/*--------------------------------------------------------------*/
int main (int argc, char *argv[])
{
  static int n, npoints, nfin, nfout1, nfout2, ierr, nprpv;
  static double t0, dt, delta, vmin, vmax, tmin, tmax;
  static double snr, tresh, ffact, perc, taperl,fmatch,piover4;
  static float sei[16384], sei_p[32768], sei_n[16384];
  static double arr1[100][8],arr2[100][7];
  static double c_per[100],g_vel[100],amp_p[100],amp_n[100];
  static double tamp, ampo[32][32768], pred[2][300];
  static int nrow, ncol, npred;
  static double prpvper[300],prpvvel[300]; // phase vel prediction files

  double snr_p[64], snr_n[64];
  double f1,f2,f3,f4,dom_am;
  char  *p,name[160],name1[160],buf[200],str[160],phvelname[160],root[160];
  char  amp_name[100];
  FILE  *in, *fd, *inv, *fas;
  int   i, j, flag, k, len, n_am, i_am;
  int   nn,sac = 1; // =1 - SAC, =0 - ftat files

// input command line arguments treatment
  if(argc != 2) {
      printf("Usage: aftan_amp [parameter file]\n");
      exit(-1);
  }
// open and read contents of parameter file
  if((in = fopen(argv[1],"r")) == NULL) {
      printf("Can not find file %s.\n",argv[1]);
      exit(1);
  }
  while((n = fscanf(in,"%lf %lf %lf %lf %lf %lf %lf %lf %lf %lf %s %d",
             &piover4,&vmin,&vmax,&tmin,&tmax,&tresh,&ffact,&taperl,&snr,&fmatch,
             name,&flag)) != EOF) { // start main loop
  strcpy(root,name);
  p = strrchr(root,'.');
  *(p+1) = '\0';
  //strcpy(phvelname,root);
  //strcat(phvelname,"SAC_PHP");

      if(n == 0 || n != 12) break;

      printf("vmin= %lf, vmax= %lf, tmin= %lf, tmax= %lf\n",
              vmin,vmax,tmin,tmax);
// remove quotes from file names
      j = 0;
      for(i = 0; i < strlen(name); i++) {
          if(name[i] == '\'' || name[i] == '\"') continue;
          name[j] = name[i]; j++;
      }
      name[j] = '\0';
      printf("Tresh= %lf, Filter factor= %lf, SNR= %lf, Match = %lf\nData file name=%s\n",
             tresh,ffact,snr,fmatch,name);
// if presents, read phase velocity prediction file
// ---
nprpv = -1;
                                                                                
/*
 *  read phase velocity information
 */
//    strtok(root,"_");
//    strcpy(sta1,strtok(NULL,"_"));
//    strcpy(sta2,strtok(NULL,"."));
//    sscanf(root, "%[A-Z,a-z,0-9]_%[A-Z,a-z,0-9].", sta1, sta2);
      sprintf(phvelname, "/home/tianye/code/Programs/head/scalifornia_avg_phvel.dat");
//    sprintf(phvelname, "%s/%s/%s_%s.dat",argv[2],sta1,sta1,sta2);
//    fprintf(stderr, "predicted phase velocity %s \n",phvelname);
//  if((inv = fopen(phvelname,"r")) == NULL) {
//      printf("Can not find file %s. Use the inversed path instead\n",phvelname);
//      sprintf(phvelname, "%s/%s/%s_%s.dat",argv[2],sta2,sta2,sta1);
      if((inv = fopen(phvelname,"r")) == NULL) {
         printf("Can not find file %s.\n",phvelname);
         nprpv = 0;
         //goto next;
         continue;
        }
//     }

  fgets(buf,200,inv);
  while(fgets(buf,200,inv) != NULL) {
         if(nprpv == -1) { nprpv++; continue; }
         if((n = sscanf(buf,"%lf %lf",&prpvper[nprpv],&prpvvel[nprpv])) < 2) break;
         nprpv++;
     }
         fclose(inv);
         printf("Phase velocity prediction file name= %s\n",phvelname);

//  next:
/*
 *   read SAC or ascii data 
 */
      readdata(sac,name,&n,&dt,&delta,&t0,sei_p);

      if(flag==1) {
         len=(n-1)/2;
         for(k=0;k<=len;k++) sei_n[k]=sei_p[len-k]; 
         for(k=0;k<=len;k++) sei_p[k]=sei_p[len+k];
         for(k=0;k<=len;k++) sei[k]=(sei_p[k]+sei_n[k])/2.;
         n=len+1;
	 t0 += len*dt;
        }
      else 
         for(k=0;k<n;k++) sei[k]=sei_p[k];
/*
 * Read group velocity prediction file
 */
//      strcpy(name1,root);
//      strcat(name1,"SAC_GRP");
//      sscanf(root, "%[A-Z,a-z,0-9]_%[A-Z,a-z,0-9].", sta1, sta2);
      //sprintf(name1, "/home/linf/California/PRED_DISP/COR_%s_%s.SAC_PRED", sta1, sta2);
      //printf("Group velocity prediction curve: %s\n",name1);
      //if((fd = fopen(name1,"r")) == NULL) {
      //    printf("Can not find file %s.\n",name1);
      //    exit(1);
      //}
      //i = 0;
      //fgets(str,100,fd);
      //while((nn = fscanf(fd,"%lf %lf",&pred[0][i],&pred[1][i])) == 2) i++;
      //npred = i;
      //fclose(fd);
/* ====================================================================
 * Parameters for aftanipg function:
 * Input parameters:
 * piover4 - phase shift = pi/4*piover4, for cross-correlation
 *           piover4 should be -1.0 !!!!     (double)
 * n       - number of input samples, (int)
 * sei     - input array length of n, (float)
 * t0      - time shift of SAC file in seconds, (double)
 * dt      - sampling rate in seconds, (double)
 * delta   - distance, km (double)
 * vmin    - minimal group velocity, km/s (double)
 * vmax    - maximal value of the group velocity, km/s (double)
 * tmin    - minimal period, s (double)
 * tmax    - maximal period, s (double)
 * tresh   - treshold, usually = 10, (double)
 * ffact   - factor to automatic filter parameter, (double)
 * perc    - minimal length of of output segment vs freq. range, % (double)
 * npoints - max number points in jump, (int)
 * taperl  - factor for the left end seismogram tapering,
 *           taper = taperl*tmax,    (double)
 * nfin    - starting number of frequencies, nfin <= 32, (int)
 * snr     - phase match filter parameter, spectra ratio to
 *           determine cutting point    (double)
 * fmatch  - factor to length of phase matching window
 * npred   - length of prediction table
 * pred    - prediction table: pred[0][] - periods in sec,
 *                             pred[1][] - pedicted velocity, km/s
 * flag    - Input file type: 0 for single-sided, 1 for double-sided
 * ==========================================================
 * Output parameters are placed in 2-D arrays arr1 and arr2,
 * arr1 contains preliminary results and arr2 - final.
 * ==========================================================
 * nfout1 - output number of frequencies for arr1, (int)
 * arr1   - the first nfout1 raws contain preliminary data,
 *          (double arr1[n][5], n >= nfout1)
 *          arr1[:,0] -  central periods, s (double)
 *          arr1[:,1] -  apparent periods, s (double)
 *          arr1[:,2] -  group velocities, km/s (double)
 *          arr1[:,3] -  phase velocities, km/s (double)
 *          arr1[:,4] -  amplitudes, Db (double)
 *          arr1[:,5] -  discrimination function, (double)
 *          arr1[:,6] -  signal/noise ratio, Db (double)
 *          arr1[:,7] -  maximum half width, s (double)
 * nfout2 - output number of frequencies for arr2, (int)
 *          If nfout2 == 0, no final result.
 * arr2   - the first nfout2 raws contains final data,
 *          (double arr2[n][5], n >= nfout2)
 *          arr2[:,0] -  central periods, s (double)
 *          arr2[:,1] -  apparent periods, s (double)
 *          arr2[:,2] -  group velocities, km/s (double)
 *          arr2[:,3] -  amplitudes, Db (double)
 *          arr2[:,4] -  signal/noise ratio, Db (double)
 *          arr2[:,5] -  maximum half width, s (double)
 *          tamp      -  time to the beginning of ampo table, s (double)
 *          nrow      -  number of rows in array ampo, (int)
 *          ncol      -  number of columns in array ampo, (int)
 *          ampo      -  Ftan amplitude array, Db, (double [32][32768])
 * ierr   - completion status, =0 - O.K.,           (int)
 *                             =1 - some problems occures
 *                             =2 - no final results
 */

//  t0      = 0.0;
  nfin    = 32;
  npoints = 10;        // only 3 points in jump
  perc    = 50.0;     // 50 % for output segment
//  taperl  = 2.0;      // factor to the left end tapering
  printf("pi/4 = %5.1lf, t0 = %9.3lf\n",piover4,t0);
  printf("#filters= %d, Perc= %6.2f %s, npoints= %d, Taper factor= %6.2f\n",
          nfin,perc,"%",npoints,taperl);
/* Call aftanipg function, FTAN + prediction         */

  // printf("FTAN + prediction curve\n");

  //ffact =2.0;
  //aftanipg_(&piover4,&n,sei,&t0,&dt,&delta,&vmin,&vmax,&tmin,&tmax,&tresh,
  //      &ffact,&perc,&npoints,&taperl,&nfin,&snr,&fmatch,&npred,pred,
  //      &nprpv,prpvper,prpvvel,
  //      &nfout1,arr1,&nfout2,arr2,&tamp,&nrow,&ncol,ampo,&ierr);
  //printres(dt,nfout1,arr1,nfout2,arr2,tamp,nrow,ncol,ampo,ierr,name,"_P");
  //if(nfout2 == 0) continue;   // break aftan sequence
  //printf("Tamp = %9.3lf, nrow = %d, ncol = %d\n",tamp,nrow,ncol);

/* Pre-whiten and record the amp factor */
  f1=1./tmax/1.25;
  f2=1./tmax;
  f3=1./tmin;
  f4=1./tmin/1.25;
  filter4_(&f1,&f2,&f3,&f4,&dt,&n,sei,&n_am,&dom_am);
//  printf("%lf  %lf %lf\n",amp_rec[180],amp_rec[1000],amp_rec[1600]);
//  printf("%d  %lf\n",n_am/2+1,dom_am);
/* FTAN with phase match filter. First Iteration. */

  printf("FTAN - the first iteration\n");
  ffact =1.0;
  aftanpg_(&piover4,&n,sei,&t0,&dt,&delta,&vmin,&vmax,&tmin,&tmax,&tresh,
        &ffact,&perc,&npoints,&taperl,&nfin,&snr,&nprpv,prpvper,prpvvel,
        &nfout1,arr1,&nfout2,arr2,&tamp,&nrow,&ncol,ampo,&ierr);
//  printres(dt,nfout1,arr1,nfout2,arr2,tamp,nrow,ncol,ampo,ierr,name,"_1");
  if(nfout2 == 0) continue;   // break aftan sequence
  printf("Tamp = %9.3lf, nrow = %d, ncol = %d\n",tamp,nrow,ncol);

/* Make prediction based on the first iteration               */

  npred = nfout2;
  tmin = arr2[0][1];
  tmax = arr2[nfout2-1][1];
  for(i = 0; i < nfout2; i++) {
      pred[0][i] = arr2[i][1];   // apparent period // central periods
      pred[1][i] = arr2[i][2];   // group velocities
  }

/* FTAN with phase with phase match filter. Second Iteration. */

  printf("FTAN - the second iteration (phase match filter)\n");
  ffact = 2.0;
  aftanipg_(&piover4,&n,sei,&t0,&dt,&delta,&vmin,&vmax,&tmin,&tmax,&tresh,
        &ffact,&perc,&npoints,&taperl,&nfin,&snr,&fmatch,&npred,pred,
        &nprpv,prpvper,prpvvel,
        &nfout1,arr1,&nfout2,arr2,&tamp,&nrow,&ncol,ampo,&ierr);
  printf("Tamp = %9.3lf, nrow = %d, ncol = %d\n",tamp,nrow,ncol);
  printres(dt,nfout1,arr1,nfout2,arr2,tamp,nrow,ncol,ampo,ierr,name,"_2");
  for(i = 0; i < nfout2; i++) {
      c_per[i]=arr2[i][0];
      g_vel[i]=arr2[i][2];
     }
  get_snr(sei_p,n,dt,delta,t0,c_per,g_vel,nfout2,amp_p,snr_p);
  if(flag==1) get_snr(sei_n,n,dt,delta,t0,c_per,g_vel,nfout2,amp_n,snr_n);
  sprintf(amp_name,"%s_amp_snr",name);
  if((fas=fopen(amp_name,"w"))==NULL) {
     printf("Cannot open file %s to write!\n");
     exit (1);
    }
  if(flag==1) for(i = 0; i < nfout2; i++)
     fprintf(fas,"%8.4f   %.5g  %8.4f  %.5g  %8.4f\n",arr2[i][1],amp_p[i],snr_p[i],amp_n[i],snr_n[i]);
  else for(i = 0; i < nfout2; i++) 
     fprintf(fas,"%8.4f   %.5g  %8.4f\n",arr2[i][1],amp_p[i],snr_p[i]);
  fclose(fas);
  }
  fclose(in);
  return 0;
}
Beispiel #13
0
int main(int argc,char * argv[])
{
	int rank,size,i;
	MPI_Init(&argc,&argv);
	MPI_Comm_rank(MPI_COMM_WORLD,&rank);
	MPI_Comm_size(MPI_COMM_WORLD,&size);
	if(rank==0)
	{
		if(!readFromFile())
			exit(-1);
		if(size>2*variableNum)
		{
			printf("Too many Processors,reduce your -np value \n");
			MPI_Abort(MPI_COMM_WORLD,1);
		}
		beginTime=MPI_Wtime();
		for(int i=1;i<size;i++)
		{
		MPI_Send(&variableNum,1,MPI_INT,i,V_TAG,MPI_COMM_WORLD);
		MPI_Send(p,variableNum*2,MPI_DOUBLE,i,P_TAG,MPI_COMM_WORLD);
		}
		
		addTransTime(MPI_Wtime()-beginTime);
	}
	else
	{
	    MPI_Recv(&variableNum,1,MPI_INT,0,V_TAG,MPI_COMM_WORLD,&status);
	    MPI_Recv(p,variableNum*2,MPI_DOUBLE,0,P_TAG,MPI_COMM_WORLD,&status);
	}
	int wLength=2*variableNum;
	for(i=0;i<wLength;i++)
	{
		w[i].real=cos(i*2*PI/wLength);
		w[i].imag=sin(i*2*PI/wLength);
	}
	int everageLength=wLength/size;
	int moreLength=wLength%size;
	int startPos=moreLength+rank*everageLength;
	int stopPos=startPos+everageLength-1;
	if(rank==0)
	{
		startPos=0;
		stopPos=moreLength+everageLength-1;
	}
	evaluate(p,0,variableNum-1,w,s,startPos,stopPos,wLength);
       
	if(rank>0)
	{
		MPI_Send(s+startPos,everageLength*2,MPI_DOUBLE,0,S_TAG,MPI_COMM_WORLD);
		MPI_Recv(s,wLength*2,MPI_DOUBLE,0,S_TAG2,MPI_COMM_WORLD,&status);
	}
	else
	{
		double tempTime=MPI_Wtime();
		for(i=1;i<size;i++)
		{
			MPI_Recv(s+moreLength+i*everageLength,everageLength*2,MPI_DOUBLE,i,S_TAG,MPI_COMM_WORLD,&status);
		}
		for(i=1;i<size;i++)
		{
			MPI_Send(s,wLength*2,MPI_DOUBLE,i,S_TAG2,MPI_COMM_WORLD);
		}
	      printf("The final results :\n");
	      printres(s,wLength);
		addTransTime(MPI_Wtime()-tempTime);
	}	
	if(rank==0)
	{
	        totalTime=MPI_Wtime();
	        totalTime-=beginTime;
		printf("\nUse prossor size=%d\n",size);
		printf("Total running time=%f(s)\n",totalTime);
		printf("Distribute data time = %f(s)\n",transTime);
		printf("Parallel compute time = %f(s)\n ",totalTime-transTime);
	}
	MPI_Finalize();
	return 0;
}
Beispiel #14
0
int main(int argc,char * argv[])
{
	int rank,size,i;

	MPI_Init(&argc,&argv);
	MPI_Comm_rank(MPI_COMM_WORLD,&rank);
	MPI_Comm_size(MPI_COMM_WORLD,&size);

	// 分发数据
	if(rank==0)
	{
		// 0# 进程从文件读入多项式p的阶数和系数序列
		if(!readFromFile())
			exit(-1);

		// 进程数目太多,造成每个进程平均分配不到一个元素,异常退出
		if(size>2*variableNum)
		{
			printf("Too many Processors,reduce your -np value \n");
			MPI_Abort(MPI_COMM_WORLD,1);
		}

		beginTime=MPI_Wtime();

		// 0#进程把多项式的阶数,p发送给其它进程
		sendOrigData(size);

		// 累计传输时间
		addTransTime(MPI_Wtime()-beginTime);

	}
	else // 其它进程接收进程0发送来的数据,包括variableNum、数组p
	{
		recvOrigData();
	}

	// 初始化数组w,用于进行傅立叶变换
	int wLength=2*variableNum;
	for(i=0;i<wLength;i++)
	{
		w[i].r=cos(i*2*PI/wLength);
		w[i].i=sin(i*2*PI/wLength);
	}

	// 划分各个进程的工作范围 startPos ~ stopPos
	int everageLength=wLength/size; // 8/2=4 (假设有两个进程)
	int moreLength=wLength%size; // 8%2=0
	int startPos=moreLength+rank*everageLength; // 0+0*4=0; 0+1*4=4;
	int stopPos=startPos+everageLength-1; // 0+4-1=3; 4+4-1=7;
	//[0,1,2,3,4,5,6,7], 片段: [0,3], [4,7]

	if(rank==0)
	{
		startPos=0; // 0
		stopPos=moreLength+everageLength-1; // 0+4-1=3
	}

    // 对p作FFT,输出序列为s,每个进程仅负责计算出序列中位置为 startPos 到 stopPos 的元素
	evaluate(p,0,variableNum-1,w,s,startPos,stopPos,wLength);
	// p 原始序列
	// 0 原始序列在数组f中的第一个下标
	// variableNum-1 原始序列在数组f中的最后一个下标
	// w 存放单位根的数组,其元素为w,w^2,w^3...
	// s 输出序列
	// startPos 所负责计算输出的y的片断的起始下标
	// stopPos 所负责计算输出的y的片断的终止下标
	// wLength s的长度
	
	printf("partial results, process %d.\n",rank);	
	myprint(s,wLength); // 输出每个进程的结果(部分结果)
	
	// 各个进程都把s中自己负责计算出来的部分发送给进程0,并从进程0接收汇总的s
	if(rank>0)
	{
		MPI_Send(s+startPos,everageLength*2,MPI_DOUBLE,0,S_TAG,MPI_COMM_WORLD);
		MPI_Recv(s,wLength*2,MPI_DOUBLE,0,S_TAG2,MPI_COMM_WORLD,&status);
	}
	else // 进程0接收s片段,向其余进程发送完整的s
	{
		double tempTime=MPI_Wtime();

		// 进程0接收s片段
		for(i=1;i<size;i++)
		{
			MPI_Recv(s+moreLength+i*everageLength,everageLength*2,MPI_DOUBLE,i,S_TAG,MPI_COMM_WORLD,&status);
		}

		//进程0向其余进程发送完整的结果s	
		for(i=1;i<size;i++)
		{
			MPI_Send(s,wLength*2,MPI_DOUBLE,i,S_TAG2,MPI_COMM_WORLD);
		}

		printf("The final results :\n");
		printres(s,wLength); //结果占s一半空间

		addTransTime(MPI_Wtime()-tempTime);
	}

	if(rank==0)
	{
		totalTime=MPI_Wtime();
		totalTime-=beginTime;

		printf("\nUse prossor size=%d\n",size);
		printf("Total running time=%f(s)\n",totalTime);
		printf("Distribute data time = %f(s)\n",transTime);
		printf("Parallel compute time = %f(s)\n ",totalTime-transTime);
	}

	MPI_Finalize();
}