示例#1
0
int main () {
	
	struct timeval tv;
	struct timezone tz;
	struct tm*tm;
	tm = localtime(&tv.tv_sec);
	gettimeofday(&tv, &tz);
	//srand(tv.tv_usec * tv.tv_sec);
	
	v_o = 4; v_th = sqrt(.2);
	
    //Lx = 40; Ly = 20;
	Lx = 40; Ly = 20;
    dx = 1; dy = 1; delta2 = dx*dx;
	imax = Lx - 1; jmax = Ly;
	nmax = imax*jmax;
	//ppc = 1200;
    ppc = 200; 
    LeftBC = 0; RightBC = -10;
    pcn = 1/(double)ppc;
	Npart = Lx*Ly*ppc;
	
	pi = 4*atan(1);
	nt = .5;
	dt = nt/(v_o*(1 + erf(v_th/v_o)));
	//finaltime = 50;
	finaltime = 10;
	omega = 1;
	
	initial_conditions();
    seconds = read_timer();
	inject_node_move();
    elapsed = read_timer() - seconds;
	outputs();
	
	FILE *file1;
	file1 = fopen("Sys_Cond.txt", "w");
	fprintf(file1, "%d\t%d\t%d\t%d\t%d",Lx,Ly,dx,dy,finaltime);
	fclose(file1);
	printf("Elapsed time (serial): %f seconds\n", elapsed); 
    return EXIT_SUCCESS;
}
示例#2
0
void init_run() {
	int i, j, k;
	int index;
	double a_th;

	int ipart;
	int icell;
	double qi, qj, qk;
	double xcons, vcons;
	double dx, dvx;
	double pw;
	double a_vel;
	double qfact;

	int num_level_cells;
	int *level_cells;

	cosmology_set(OmegaM,OmM0);
	cosmology_set(OmegaB,OmB0);
	cosmology_set(OmegaL,OmL0);
	cosmology_set(h,h0);
	cosmology_set(DeltaDC,dDC);
	box_size = Lbox0;

	units_set_art(cosmology->OmegaM,cosmology->h,box_size);
	units_init();
	build_cell_buffer();
	repair_neighbors();
        
	auni[min_level] = auni_init;
	tl[min_level] = tcode_from_auni( auni_init );
	for ( i = min_level; i <= max_level; i++ ) { tl[i] = tl[min_level]; }
	abox[min_level] = auni_init;

	for(i=min_level+1; i<=max_level; i++)
	{
            tl[i] = tl[min_level];
            auni[i] = auni[min_level];
            abox[i] = abox[min_level];
	}
        
	units_update(min_level);
	cart_debug("tl[min_level] = %f", tl[min_level] );
	cart_debug("au[min_level] = %f", auni[min_level] );
	cart_debug("ab[min_level] = %f", abox[min_level] );
	cart_debug("DC mode = %f", cosmology->DeltaDC );
	cosmology_set_fixed();


	rhogas0 = cosmology->OmegaB/cosmology->OmegaM;
	cart_debug("rhogas0 = %e", rhogas0 );

	Tinit = TinitK/units->temperature;


	ak = 2.0*M_PI / lambda;
	dgrowth = growth(abox[min_level]);
	ddgrowthdt = dgrowthdt(abox[min_level]);
	ampl = 1.0 / ( growth(a_cross) * ak );
	cart_debug("Tinit,TinitK = %e %e", Tinit,TinitK );

#ifdef HYDRO
	for ( i = min_level; i <= max_level; i++ ) {
		cart_debug("generating initial conditions on level %u", i );
	
		select_level( i, CELL_TYPE_LOCAL, &num_level_cells, &level_cells );
		for ( j = 0; j < num_level_cells; j++ ) {
//                    cart_debug("%d %d",level_cells[j],num_cells);
			initial_conditions( level_cells[j], i );
		}
		cart_free( level_cells );
	}

	for ( i = min_level; i <= max_level; i++ ) {
		update_buffer_level( i, all_hydro_vars, num_hydro_vars );
	}
#endif /* HYDRO */

	cart_debug("choose timestep and set velocity on the half step");
	dtl[min_level] = 0.0;
	set_timestepping_scheme();
	dtl[min_level]=.125;
	cart_debug("=======================%e",dtl[min_level]);

	dtl_old[min_level] = dtl[min_level];
	tl_old[min_level] = tl[min_level]-dtl[min_level];
	abox_old[min_level] = abox_from_tcode(tl_old[min_level]);
	dtl_old[min_level] = dtl[min_level];

	for ( i = min_level+1; i <= max_level; i++ ) {
		tl_old[i] = tl[i]-dtl[i];
		abox_old[i] = abox_from_tcode(tl_old[i]);
		dtl_old[i] = dtl[i];
	}

#ifdef GRAVITY
#ifdef HYDRO
	for ( i = min_level; i <= max_level; i++ ) {
		cart_debug("generating gravity on level %u", i );
	
//                cart_assert(dtl[i]==0);
		select_level( i, CELL_TYPE_LOCAL, &num_level_cells, &level_cells );
		for ( j = 0; j < num_level_cells; j++ ) {
			initial_gravity( level_cells[j], i );
		}
		cart_free( level_cells );
	}

	for ( i = min_level; i <= max_level; i++ ) {
		update_buffer_level( i, all_hydro_vars, num_hydro_vars );
	}
#endif /* GRAVITY */
#endif /* HYDRO */
        
        
#ifdef PARTICLES
	qfact = (double)num_grid / (double)num_grid;
	pw = (1.0-rhogas0)*qfact*qfact*qfact;

	cart_debug("particle weight = %e", pw );

	xcons = dgrowth*ampl;
	a_vel = abox_from_tcode( tl[min_level] - 0.5*dtl[min_level] );
	vcons = ampl * dgrowthdt( a_vel);

	ipart = 0;
	for ( i = 0; i < num_grid; i++ ) {
		qi = qfact*((double)i + 0.5);
		dx = xcons * sin( ak * qi );
		dvx = vcons * sin( ak * qi );
		for ( j = 0; j < num_grid; j++ ) {
			qj = qfact*((double)j + 0.5);
			for ( k = 0; k < num_grid; k++ ) {
				qk = qfact*((double)k + 0.5);

				particle_x[ipart][0] = qi + dx;
				particle_x[ipart][1] = qj;
				particle_x[ipart][2] = qk;

				if ( particle_x[ipart][0] >= (double)num_grid ) {
					particle_x[ipart][0] -= num_grid;
				}

				if ( particle_x[ipart][1] >= (double)num_grid ) {
					particle_x[ipart][1] -= num_grid;
				}

				if ( particle_x[ipart][2] >= (double)num_grid ) {
					particle_x[ipart][2] -= num_grid;
				}

				icell = cell_find_position( particle_x[ipart] );

				if ( icell != -1 && cell_is_local(icell) ) {
					particle_v[ipart][0] = dvx;
					particle_v[ipart][1] = 0.0;
					particle_v[ipart][2] = 0.0;

					particle_id[ipart] = (particleid_t)num_grid*(num_grid*i + j) + k;
					particle_mass[ipart] = pw;

					cart_assert( qi == particle_q_init( particle_id[ipart] ) );

					particle_t[ipart] = tl[min_level];
					particle_dt[ipart] = dtl[min_level];

					ipart++;
				}
			}
		}
	}

	cart_debug("created %u particles", ipart );

	num_local_particles = ipart;
	num_particles_total = (particleid_t)num_grid*(particleid_t)num_grid*(particleid_t)num_grid;
	num_particle_species = 1;
	particle_species_mass[0] = pw;
	particle_species_num[0] = num_particles_total;
	particle_species_indices[0] = 0;
	particle_species_indices[1] = num_particles_total;

	build_particle_list();

/* 	assign_density( min_level, min_level ); */ //for refinement
/* 	modify( min_level, 0 ); */
 	assign_density( min_level, min_level );  //for refinement
 	modify( min_level, 0 ); 

	if ( local_proc_id == MASTER_NODE ) {
		particles = fopen("dumps/particle_rms.dat", "w");
		fclose(particles);
	}
#endif

	check_map();
	cart_debug("done with initialization");
}