示例#1
0
文件: tore.c 项目: GhaisB/Raytracer
int		inter_tore(t_cod *cor, t_tmp *tmp, t_obj *obc, t_sph *obj_a)
{
  double	d0;
  double	d1;
  double	d2;
  double	p0;
  double	p1;
  double	p2;
  double	R;
  double	r;
  double	tmp2[4];

  modif_lX(cor, obj_a, tmp);
  init_d(tmp, &d0, &d1, &d2);
  init_R_r(obj_a, &R, &r);
  init_p(tmp, &p0, &p1, &p2);
  tmp2[0] = X2(d0) + X2(d1) + X2(d2);
  tmp2[1] = d0 * p0 + d1 * p1 + d2 * p2;
  tmp2[2] = X2(p0) + X2(p1) + X2(p2) + X2(R) - X2(r);
  tmp->l_v[0] = X2(tmp2[0]);
  tmp->l_v[1] = 4 * tmp2[0] * tmp2[1];
  tmp->l_v[2] = 2 * tmp2[0] * tmp2[2] + (4. * X2(tmp2[1])) -
    (4. * X2(R) * (X2(d0) + X2(d1)));
  tmp->l_c[0] = 4 * tmp2[1] * tmp2[2] - (8. * X2(R) * ((d0 * p0) + (d1 * p1)));
  tmp->l_c[1] = X2(tmp2[2]) - (4. * X2(R) * (X2(p0) + X2(p1)));
  return (ferari(tmp, obc));
}
示例#2
0
void test() {
    struct st s;
    init_p(&(s.p));
    
    double *pd = s.p;
    ASSERT(pd[0] == 42)
}
void engine()
{
  int i,j;
  static int lasttick = 0;
  int start = 0;

  for(i=0;i<4;i++)
    for(j=0;j<MAX_SPRITE_Z;j++){
      sp_list[i][j].used = 0;
    }

  init_mem();
  init_p();

  i = 0;
  while(1){
    while(tick - lasttick < REFRESH_TICKS);
    lasttick = tick;

    disable_irq(CLOCK_IRQ);
    disable_irq(KEYBOARD_IRQ);

    draw_rect(0,0,320,200,0);

    if(start == 0){
      int key = get_lastkey();

      if(key == VKEY_START){
        start = 1;
        srand(tick/REFRESH_TICKS);
      }
    } else {
      main_p();

      for(i=0;i<4;i++)
        for(j=0;j<MAX_SPRITE_Z;j++){
          if(sp_list[i][j].used == 1){
            sp_list[i][j].sp->t(sp_list[i][j].sp);
            sp_list[i][j].sp->d(sp_list[i][j].sp);
          }
        }
    }


    keys_len = 0;

    fill_screen(buf);
    enable_irq(KEYBOARD_IRQ);
    enable_irq(CLOCK_IRQ);
  }
}
示例#4
0
name_pointer
#line 270 "./cwebdir/comm-w2c.ch"

id_lookup P3C(char*,first,char*,last,char,t)
#line 666 "./cwebdir/common.w"
{
char*i= first;
int h;
int l;
name_pointer p;
if(last==NULL)for(last= first;*last!='\0';last++);
l= last-first;
/*38:*/
#line 683 "./cwebdir/common.w"

h= (unsigned char)*i;
while(++i<last)h= (h+h+(int)((unsigned char)*i))%hash_size;


/*:38*/
#line 673 "./cwebdir/common.w"
;
/*39:*/
#line 691 "./cwebdir/common.w"

p= hash[h];
while(p&&!names_match(p,first,l,t))p= p->link;
if(p==NULL){
p= name_ptr;
p->link= hash[h];hash[h]= p;
}

/*:39*/
#line 674 "./cwebdir/common.w"
;
if(p==name_ptr)/*41:*/
#line 706 "./cwebdir/common.w"
{
if(byte_ptr+l> byte_mem_end)overflow("byte memory");
if(name_ptr>=name_dir_end)overflow("name");
strncpy(byte_ptr,first,l);
(++name_ptr)->byte_start= byte_ptr+= l;
if(program==cweave)init_p(p,t);
}

/*:41*/
#line 675 "./cwebdir/common.w"
;
return(p);
}
示例#5
0
文件: seg-tree.c 项目: klion26/KCode
int main(void)
{
	freopen("h.in","r",stdin);
	freopen("h.out","w",stdout);
	int i;
	int max,min;
	int s,e,a;
	int tcase=1;
	init_node(1,1,500000);
	while(EOF != scanf("%d",&n))
		{
			init_p();
			for(i=0;i<500006*4;i++)
				{
					node[i].max=-1;
					node[i].min=500006*4;
				}
			for(i=1;i<=n;i++)
				{
					scanf("%d",&a);
					insert(1,i,i,a);
				}
			scanf("%d",&m);
			for(i=0;i<m;i++)
				{
					scanf("%d%d",&s,&e);
					max=query_max(1,s,e);
					min=query_min(1,s,e);
					union_set(max,min);
				}
			scanf("%d",&k);
			printf("CASE %d\n",tcase);
			tcase++;
			for(i=0;i<k;i++)
				{
					scanf("%d%d",&s,&e);
					ps=find(s);
					pe=find(e);
					if(ps==pe)
						printf("YES\n");
					else
						printf("NO\n");
				}
		}
	return 0;
}
        virtual void init(const Opm::parameter::ParameterGroup& param,
                          const Grid& grid,
                          const Fluid& fluid,
                          typename Grid::Vector gravity,
                          State& simstate)
        {
            typedef typename Fluid::CompVec CompVec;
            typedef typename Fluid::PhaseVec PhaseVec;

            if (param.getDefault("heterogenous_initial_mix", false)) {
                CompVec init_oil(0.0);
                init_oil[Fluid::Oil] = 1.0;
                CompVec init_water(0.0);
                init_water[Fluid::Water] = 1.0;
                simstate.cell_z_.resize(grid.numCells());
                std::fill(simstate.cell_z_.begin(), simstate.cell_z_.begin() + simstate.cell_z_.size()/2, init_oil);
                std::fill(simstate.cell_z_.begin() + simstate.cell_z_.size()/2, simstate.cell_z_.end(), init_water);
                OPM_MESSAGE("******* Assuming zero capillary pressures *******");
                PhaseVec init_p(100.0*Opm::unit::barsa);
                simstate.cell_pressure_.resize(grid.numCells(), init_p);
                //         if (gravity.two_norm() != 0.0) {
                //             double ref_gravpot = grid.cellCentroid(0)*gravity;
                //             double rho = init_z*fluid_.surfaceDensities();  // Assuming incompressible, and constant initial z.
                //             for (int cell = 1; cell < grid.numCells(); ++cell) {
                //                 double press = rho*(grid.cellCentroid(cell)*gravity - ref_gravpot) + simstate.cell_pressure_[0][0];
                //                 simstate.cell_pressure_[cell] = PhaseVec(press);
                //             }
                //         }
            } else if (param.getDefault("unstable_initial_mix", false)) {
                CompVec init_oil(0.0);
                init_oil[Fluid::Oil] = 1.0;
                init_oil[Fluid::Gas] = 0.0;
                CompVec init_water(0.0);
                init_water[Fluid::Water] = 1.0;
                CompVec init_gas(0.0);
                init_gas[Fluid::Gas] = 150.0;
                simstate.cell_z_.resize(grid.numCells());
                std::fill(simstate.cell_z_.begin(),
                          simstate.cell_z_.begin() + simstate.cell_z_.size()/3,
                          init_water);
                std::fill(simstate.cell_z_.begin() + simstate.cell_z_.size()/3,
                          simstate.cell_z_.begin() + 2*(simstate.cell_z_.size()/3),
                          init_oil);
                std::fill(simstate.cell_z_.begin() + 2*(simstate.cell_z_.size()/3),
                          simstate.cell_z_.end(),
                          init_gas);
                OPM_MESSAGE("******* Assuming zero capillary pressures *******");
                PhaseVec init_p(100.0*Opm::unit::barsa);
                simstate.cell_pressure_.resize(grid.numCells(), init_p);

                if (gravity.two_norm() != 0.0) {
            
                    typename Fluid::FluidState state = fluid.computeState(simstate.cell_pressure_[0], simstate.cell_z_[0]);
                    simstate.cell_z_[0] *= 1.0/state.total_phase_volume_density_;
                    for (int cell = 1; cell < grid.numCells(); ++cell) {
                        double fluid_vol_dens;
                        int cnt =0;    
                        do {
                            double rho = 0.5*((simstate.cell_z_[cell]+simstate.cell_z_[cell-1])*fluid.surfaceDensities());
                            double press = rho*((grid.cellCentroid(cell) - grid.cellCentroid(cell-1))*gravity) + simstate.cell_pressure_[cell-1][0];
                            simstate.cell_pressure_[cell] = PhaseVec(press);
                            state = fluid.computeState(simstate.cell_pressure_[cell], simstate.cell_z_[cell]);
                            fluid_vol_dens = state.total_phase_volume_density_;
                            simstate.cell_z_[cell] *= 1.0/fluid_vol_dens;
                            ++cnt;
                        } while (std::fabs((fluid_vol_dens-1.0)) > 1.0e-8 && cnt < 10);
                
                    }  
                } else {
                    std::cout << "---- Exit - BlackoilSimulator.hpp: No gravity, no fun ... ----" << std::endl;
                    exit(-1);
                } 
            } else if (param.getDefault("CO2-injection", false)) {
                CompVec init_water(0.0);
                // Initially water filled (use Oil-component for water in order
                // to utilise blackoil mechanisms for brine-co2 interaction)          
                init_water[Fluid::Oil] = 1.0;  
                simstate.cell_z_.resize(grid.numCells());
                std::fill(simstate.cell_z_.begin(),simstate.cell_z_.end(),init_water);

                double datum_pressure_barsa = param.getDefault<double>("datum_pressure", 200.0);
                double datum_pressure = Opm::unit::convert::from(datum_pressure_barsa, Opm::unit::barsa);
                PhaseVec init_p(datum_pressure);
                simstate.cell_pressure_.resize(grid.numCells(), init_p);

                // Simple initial condition based on "incompressibility"-assumption
                double zMin = grid.cellCentroid(0)[2];
                for (int cell = 1; cell < grid.numCells(); ++cell) {
                    if (grid.cellCentroid(cell)[2] < zMin)
                        zMin = grid.cellCentroid(cell)[2];
                }

                typename Fluid::FluidState state = fluid.computeState(init_p, init_water);
		simstate.cell_z_[0] *= 1.0/state.total_phase_volume_density_;
                double density = (init_water*fluid.surfaceDensities())/state.total_phase_volume_density_;

                for (int cell = 0; cell < grid.numCells(); ++cell) {
                    double pressure(datum_pressure + (grid.cellCentroid(cell)[2] - zMin)*gravity[2]*density);
                    simstate.cell_pressure_[cell] = PhaseVec(pressure);
                    state = fluid.computeState(simstate.cell_pressure_[cell], simstate.cell_z_[cell]);
                    simstate.cell_z_[cell] *= 1.0/state.total_phase_volume_density_;
                }       
            } else {
                CompVec init_z(0.0);
                double initial_mixture_gas = param.getDefault("initial_mixture_gas", 0.0);
                double initial_mixture_oil = param.getDefault("initial_mixture_oil", 1.0);
                double initial_mixture_water = param.getDefault("initial_mixture_water", 0.0);
                init_z[Fluid::Water] = initial_mixture_water;
                init_z[Fluid::Gas] = initial_mixture_gas;
                init_z[Fluid::Oil] = initial_mixture_oil;

                simstate.cell_z_.resize(grid.numCells(), init_z);
                OPM_MESSAGE("******* Assuming zero capillary pressures *******");
                PhaseVec init_p(param.getDefault("initial_pressure", 100.0*Opm::unit::barsa));
                simstate.cell_pressure_.resize(grid.numCells(), init_p);
                if (gravity.two_norm() != 0.0) {
                    double ref_gravpot = grid.cellCentroid(0)*gravity;
                    double rho = init_z*fluid.surfaceDensities();  // Assuming incompressible, and constant initial z.
                    for (int cell = 1; cell < grid.numCells(); ++cell) {
                        double press = rho*(grid.cellCentroid(cell)*gravity - ref_gravpot) + simstate.cell_pressure_[0][0];
                        simstate.cell_pressure_[cell] = PhaseVec(press);
                    }
                }
            }
        }