Esempio n. 1
0
/** OWMax operator
 *
 * @param x numeric
 * @param w numeric
 * @return numeric of length 1
 */
SEXP owmax(SEXP x, SEXP w)
{
   x = prepare_arg_numeric_sorted_inc(x, "x");
   return wmax(x, w);
}
Esempio n. 2
0
HugeNumber operator + ( HugeNumber &u, HugeNumber &v)
// Slogenie neotrisatelnix selix chisel
{
	word j;
	dword k; // Cifra perenosa
	word uk; // Chislo razriadov u
	word vk; // Chislo razriadov v
	word wk; // Chislo razriadov w
	word kw;
	dword p;
	HugeNumber w; // Zdes bydem nakaplivat rezyltat

	vk=v.Razr();
	uk=u.Razr();
	wk=wmax(uk,vk);
	kw=wmin(uk,vk);
	w.Resize(wk+1);	// Delaem nygnyiy razriadnost rezyltata

	k=0;
	// Symiryem razriadi po samomy korotkomy chisly
	for (j=0; j<kw; j++)
	{
		p=dword(u.digit[j])+dword(v.digit[j])+k;
		if (p>=base)
		{
			k=1;
			w.digit[j] = word(p & (base-1));
		}
		else
		{
			k=0;
			w.digit[j]= word(p);
		};
	};

	// Tiper nado prosymirovat ostavshiesia razriadi dlinnogo chisla i
	// razriad perenosa.
	if (k!=0)
	{	// Bil perenos pri symmirovanii po korotkomy chisly
		// Nado symmirivat ostavshiesia razriady
		if (uk>vk)
		{
			// Symmiryem, poka est cifra perenosa
			for (; j<uk; j++)
			{
				p=u.digit[j]+k;
				if (p>=base)
				{
					k=1;
      			w.digit[j] = word(p & (base-1));
				}
				else
				{
					k=0;
					w.digit[j]= word(p);
					break;
				};
			}
			// Kopiryem ostavshiesia razriady
			if (k==0) for (j++; j<uk; j++) w.digit[j]=u.digit[j];
		}
		else
		{
			// Symmiryem, poka est cifra perenosa
			for (; j<vk; j++)
			{
				p=v.digit[j]+k;
				w.digit[j]= word(p & (base-1));
				if (p>=base)
				{
					k=1;
				}
				else
				{
					k=0;
					break;
				};
			}
			// Kopiryem ostavshiesia razriady
			if (k==0) for (j++; j<vk; j++) w.digit[j]=v.digit[j];
		};
		if (k!=0)
		{	// Symmirovanie provedeno po vsem razriadam, no eshe est
			// cifra perenosa
			w.digit[j]=word(k);
		}
	}
	else
	{	// Nebilo perenosa pri symmirovanii po korotkomy chisly
		// Nado prosto skopirovat ostavshiesia razriady dlinnogo chisla
		if (vk>uk)
			for (; j<vk; j++)
				w.digit[j]=v.digit[j];
		else
			if (uk>vk)
				for (; j<uk; j++)
					w.digit[j]=word(u.digit[j]+k);
	};
	return w;
};
void btParticlesDynamicsWorld::adjustGrid()
{
	//btVector3 wmin( BT_LARGE_FLOAT,  BT_LARGE_FLOAT,  BT_LARGE_FLOAT);
	//btVector3 wmax(-BT_LARGE_FLOAT, -BT_LARGE_FLOAT, -BT_LARGE_FLOAT);

	btVector3 wmin( BT_LARGE_FLOAT,  BT_LARGE_FLOAT, BT_LARGE_FLOAT);
	btVector3 wmax(-BT_LARGE_FLOAT, -BT_LARGE_FLOAT, -BT_LARGE_FLOAT);
	btVector3 boxDiag(m_particleRad, m_particleRad, m_particleRad);
	for(int i = 0; i < m_numParticles; i++)
	{
		btVector3 pos = m_hPos[i];
		btVector3 boxMin = pos - boxDiag;
		btVector3 boxMax = pos + boxDiag;
		wmin.setMin(boxMin);
		wmax.setMax(boxMax);
	}
	m_worldMin = wmin;
	m_worldMax = wmax;
	btVector3 wsize = m_worldMax - m_worldMin;
	wsize[3] = 1.0f;

	glBindBufferARB(GL_ARRAY_BUFFER, m_colVbo);
    btVector3* color = (btVector3*)glMapBufferARB(GL_ARRAY_BUFFER, GL_WRITE_ONLY);
    for(int i = 0; i < m_numParticles; i++, color++)
	{
		*color = (m_hPos[i] - m_worldMin) / wsize;
		(*color)[3] = 1.f;
	}
    glUnmapBufferARB(GL_ARRAY_BUFFER);

/*
	wsize[0] *= 0.5f;
	wsize[1] *= 0.1f;
	wsize[2] *= 0.5f;
	m_worldMin -= wsize;
	m_worldMax += wsize;
*/
	m_worldMin.setValue(-1.f, -1.f, -1.f);
	m_worldMax.setValue( 1.f,  1.f,  1.f);
	wsize = m_worldMax - m_worldMin;

	m_cellSize[0] = m_cellSize[1] = m_cellSize[2] = m_particleRad * btScalar(2.f);

	m_simParams.m_worldMin[0] = m_worldMin[0];
	m_simParams.m_worldMin[1] = m_worldMin[1];
	m_simParams.m_worldMin[2] = m_worldMin[2];

	m_simParams.m_worldMax[0] = m_worldMax[0];
	m_simParams.m_worldMax[1] = m_worldMax[1];
	m_simParams.m_worldMax[2] = m_worldMax[2];

	m_simParams.m_cellSize[0] = m_cellSize[0];
	m_simParams.m_cellSize[1] = m_cellSize[1];
	m_simParams.m_cellSize[2] = m_cellSize[2];

	m_simParams.m_gridSize[0] = (int)(wsize[0] / m_cellSize[0]);
	m_simParams.m_gridSize[1] = (int)(wsize[1] / m_cellSize[1]);
	m_simParams.m_gridSize[2] = (int)(wsize[2] / m_cellSize[2]);
	m_numGridCells = m_simParams.m_gridSize[0] * m_simParams.m_gridSize[1] * m_simParams.m_gridSize[2];
	m_hCellStart.resize(m_numGridCells);
    unsigned int memSize = sizeof(int) *  m_numGridCells;
    cl_int ciErrNum;
	m_dCellStart = clCreateBuffer(m_cxMainContext, CL_MEM_READ_WRITE, memSize, NULL, &ciErrNum);
    oclCHECKERROR(ciErrNum, CL_SUCCESS);

}