示例#1
0
void gen_xsd(propdecl_t &decl, string &xsd)
{
	ofstream o(xsd);

	gen_head(o, decl);
	gen_body(o, decl);
}
示例#2
0
文件: ranics.c 项目: srs51/SRS-3000
void fix_rejects(PARAMS *p)
{
	FILE *fp;
	SSIO ssio;
	SSDATA data;
	int sh,sd;
	int rej,nRej=0,i;

	if (!(fp = fopen(REJECTS_FILE,"r"))) {
		(void) fprintf(stderr,"Unable to open \"%s\"\n",REJECTS_FILE);
		exit(1);
		}

	(void) fscanf(fp,"%i",&i);
	if (i != p->N) {
		(void) fprintf(stderr,"Incompatible rejects file.\n");
		exit(1);
		}

	if (ssioOpen(OUTPUT_FILE,&ssio,SSIO_UPDATE)) {
		(void) fprintf(stderr,"Unable to open \"%s\"\n",OUTPUT_FILE);
		exit(1);
		}

	sh = SSHEAD_SIZE; /* NOT sizeof(SSHEAD)! XDR has special data sizes */
	sd = SSDATA_SIZE; /* NOT sizeof(SSDATA)! Ditto */

	(void) ssioSetPos(&ssio,sh);

	i = 0;

	while (fscanf(fp,"%i",&rej) != EOF) {
		if (rej >= 0) {
			if (i != rej) {
				(void) fprintf(stderr,"Corrupted rejects data.\n");
				exit(1);
				}
			gen_body(p,&data,i);
			(void) ssioSetPos(&ssio,sh + i*sd);
			(void) ssioData(&ssio,&data);
			(void) printf("Particle %i regenerated.\n",rej);
			++nRej;
			}
		++i;
		}

	(void) ssioClose(&ssio);
	(void) fclose(fp);

	(void) printf("%i particle%s regenerated.\n",nRej,nRej==1?"":"s");
	}
示例#3
0
文件: ranics.c 项目: srs51/SRS-3000
void generate(PARAMS *p,SSDATA *d)
{
	double GPE,KE,f;
	int i,j;

	for (i=0;i<p->N;i++) {
		gen_body(p,&d[i],i);
		for (j=0;j<i;j++)
			if (OVERLAP(d[i].pos,d[i].radius,d[j].pos,d[j].radius)) {
				(void) printf("Particle %i overlaps particle %i\n"
							  "-- regenerating particle %i\n",i,j,i);
				--i;
				break;
				}
		}

	GPE = KE = 0.0;
	for (i=0;i<p->N;i++) {
		GPE += d[i].mass*pot(p,d,i);
		KE += 0.5*d[i].mass*MAG_SQ(d[i].vel);
		}

	(void) printf("Starting KE = %g = %g times GPE\n",KE,KE/GPE);

	assert(KE > 0.0);

	f = -0.5*p->KEf*GPE/KE;

	assert(f >= 0.0);

	for (i=0;i<p->N;i++)
		reset_vel(p,f,&d[i]);

	GPE = KE = 0.0;
	for (i=0;i<p->N;i++) {
		GPE += d[i].mass*pot(p,d,i);
		KE += 0.5*d[i].mass*MAG_SQ(d[i].vel);
		}

	(void) printf("Adjusted KE = %g = %g times GPE (= %g times virial)\n",KE,KE/GPE,-2*KE/GPE);

	{
	double t_dyn,t_step;

	t_dyn = 2*sqrt(CUBE(p->Rd)/(p->N*p->m));
	(void) printf("Dynamical time ~ %g\n",t_dyn);
	t_step = 2*sqrt(CUBE(p->R)/p->m)/33;
	(void) printf("Recommended time step < %g\n",t_step);
	(void) printf("Estimated number of steps needed per t_dyn = %i\n",(int) (t_dyn/t_step + 0.5));
	}
	}