예제 #1
0
파일: main.c 프로젝트: sleitner/cart
int main(int argc,char **argv)
{
	KD kd;
	SMX smx;
	int nBucket,nSmooth,i,j;
	FILE *fp;
	float fPeriod[3];
	float period;

   	nBucket = 16;
	nSmooth = 24;

	if ( argc < 4 || argc > 5 ) {
		fprintf(stderr,"USAGE: smooth PMcrd.DAT PMcrs.DAT [stars.dat] rho_smooth.den\n");
		exit(1);
	}

	kdInit(&kd,nBucket);

	/* read in here */
	if ( argc == 4 ) {
		kdReadART(kd,argv[1],argv[2],&period);
	} else {
		kdReadARTStars(kd,argv[1],argv[2],argv[3],&period);
	}

	fPeriod[0] = period;
	fPeriod[1] = period;
	fPeriod[2] = period;

	printf("bulding tree...\n");
	kdBuildTree(kd);
	printf("initializing density...\n");
	smInit(&smx,kd,nSmooth,fPeriod);
	printf("smoothing density...\n");
	smSmooth(smx,smDensitySym);
	printf("ordering tree...\n");
	kdOrder(kd);

	printf("writing output...\n");

	/* write density file */
	if ( argc == 4 ) {
		fp = fopen(argv[3], "w" );
	} else {
		fp = fopen(argv[4],"wb");	
	}
	assert(fp != NULL);
	smOutDensityBin(smx,fp);
	fclose(fp);

	smFinish(smx);
	kdFinish(kd);
	return 0;
	}
예제 #2
0
파일: main.c 프로젝트: alexji/pynbody
/*==========================================================================*/
PyObject *kdfree(PyObject *self, PyObject *args)
{
    KD kd;
    PyObject *kdobj;

    PyArg_ParseTuple(args, "O", &kdobj);
    kd = PyCObject_AsVoidPtr(kdobj);

    kdFinish(kd);

    return Py_None;
}
예제 #3
0
파일: kd.c 프로젝트: tuxfan/ocl-mla
void ReadChkpt(KD kd,int *plBlock,int *pkBlock)
{
	FILE *fp;
	struct rusage ru;
	struct chkptHeader h;
	int j;

	fp = fopen(kd->pszChkptName,"rb");
	if (fp == NULL) {
		fprintf(stderr,"Sorry the check point file %s could not be opened\n",
				kd->pszChkptName);
		kdFinish(kd);
		exit(1);
		}
	fread(&h,sizeof(struct chkptHeader),1,fp);
	kd->nParticles = h.nParticles;
	kd->nGas = h.nGas;
	kd->nDark = h.nDark;
	kd->nStar = h.nStar;
	kd->bGas = h.bGas;
	kd->bDark = h.bDark;
	kd->bStar = h.bStar;
	kd->nActive = h.nActive;
	kd->nMark = h.nMark;
	kd->G = h.G;
	for (j=0;j<3;++j) {
		kd->fPeriod[j] = h.fPeriod[j];
		kd->fCenter[j] = h.fCenter[j];
		}
	kd->iSoftType = h.iSoftType;
	kd->bPeriodic = h.bPeriodic;
	kd->iBlockSize = h.iBlockSize;
	/*
	 ** Fix up CPU time.
	 */
	getrusage(0,&ru);
	kd->uMicro = ru.ru_utime.tv_usec - h.uMicro;
	kd->uSecond = ru.ru_utime.tv_sec - h.uSecond;
	if (kd->uMicro < 0) {
		kd->uMicro += 1000000;
		kd->uSecond -= 1;
		}
	/*
	 ** Allocate particles.
	 */
	kd->p = (PARTICLE *)malloc(kd->nActive*sizeof(PARTICLE));
	assert(kd->p != NULL);
	fread(kd->p,sizeof(PARTICLE),kd->nActive,fp);
	*plBlock = h.lBlock;
	*pkBlock = h.kBlock;
	fclose(fp);
	}
예제 #4
0
파일: kdmain.cpp 프로젝트: mtremmel/pynbody
/*==========================================================================*/
PyObject *kdfree(PyObject *self, PyObject *args)
{
    KD kd;
    PyObject *kdobj;

    PyArg_ParseTuple(args, "O", &kdobj);
    kd = (KD)PyCapsule_GetPointer(kdobj, NULL);

    kdFinish(kd);
    Py_XDECREF(kd->pNumpyPos);
    Py_XDECREF(kd->pNumpyMass);
    Py_XDECREF(kd->pNumpySmooth);
    Py_XDECREF(kd->pNumpyDen);
    return Py_None;
}
예제 #5
0
파일: dudt.c 프로젝트: N-BodyShop/tipsy
void
calc_dudt()
{
  struct gas_particle *gp ;
  KD kd;
  int n_smooth = 64;
  float period[MAXDIM];
  int i;
  double rsys, vsys;

  if (boxlist[0].ngas != header.nsph) {
    printf("<Warning, box 0 does not contain all particles, %s>\n", title);
    printf("<Reloading box 0, %s>\n", title);
    loadall();
  }
  if (!dkernel_loaded){
    dkernel_load() ;
  }
  if (!redshift_loaded){
    load_redshift() ;
  }
  if (!cool_loaded ){
    load_cool() ;
  }
  if (!visc_loaded) {
    load_visc();
  }
  if (!divv_loaded) {
    divv();
  }
  if (!meanmwt_loaded) {
    meanmwt_func() ;
  }

  rsys = kpcunit/1.e3 ;
  vsys = sqrt(msolunit/kpcunit*(GCGS*MSOLG/KPCCM))/1.e5 ;
  hsys = rsys*hubble_constant/vsys;


  if (dudt != NULL){
      free(dudt);
  }
  if (boxlist[0].ngas != 0) {
    dudt = (double *)malloc(boxlist[0].ngas *sizeof(*dudt));
    if (dudt == NULL) {
      printf("<sorry, no memory for hsmdivv, %s>\n",title) ;
      return ;
    }
  }
  else
    dudt = NULL;
    
  if (box0_smx) {
    kdFinish(box0_smx->kd);
    smFinish(box0_smx);
    box0_smx = NULL;
  }

  printf("<Building tree, %s>\n", title);
  kdInit(&kd);
  kdReadBox(kd, &boxlist[0], 0, 1, 0);
  kdBuildTree(kd);
  if (periodic)
    period[0] = period[1] = period[2] = period_size;
  else
    period[0] = period[1] = period[2] = 1e37;

  printf("<Calculating dudt, %s>\n", title);

  smInit(&box0_smx,kd,n_smooth,period);
  smSetBallh(box0_smx);
  smReSmooth(box0_smx,smDudtSym);

  kdOrder(kd);
  for(i = 0; i < boxlist[0].ngas; i++) {
    gp = boxlist[0].gp[i];
    dudt[i] = 0.5 * kd->p[i].fDensity;
  }
  dudt_loaded = YES ;
  starform_loaded = NO ;

}