Ejemplo n.º 1
0
std::vector< double > LatticeMinimizer::calculateStress()
{
	std::vector<double> stress(strainBasis.size());
	
	logPrintf("\nCalculating stress tensor... "); logFlush();
	for(size_t i=0; i<strainBasis.size(); i++)
		stress[i] = centralDifference(strainBasis[i]);
	logPrintf(" done!\n");
	
	return stress;
}
Ejemplo n.º 2
0
void CVolume3D::computeGradient(void)
{
	int i, j, k;

	SafeDelete(m_pGradientVolume);
	m_nxy = m_nx*m_ny;
	const int nsize = m_nxy*m_nz;
	m_pGradientVolume =new Vector4f[nsize];
	if (m_pGradientVolume==NULL){
		unsigned int maxsize = nsize*sizeof(Vector4f);
		do{
			char *pchar = (char*)malloc(maxsize);
			if (pchar!=NULL){
				printf("Max malloc size is %d!\n", maxsize);
				break;
			}
			else
				maxsize-=1024;
			if (maxsize<16) maxsize=16;
		}while(true);
		printf("Not enough memroy!\n");
		exit(0);
	}
	memset(m_pGradientVolume,0, sizeof(Vector4f)*nsize);

	const Vector3f h(0.5f, 0.5f, 0.5f);
	for (k=1; k<m_nz-1; k++){
		for (j=1; j<m_ny-1; j++){
			Vector4f *p = m_pGradientVolume + (k*m_nxy+j*m_nx);
			for (i=1; i<m_nx-1; i++){
				Vector4f *v4 = &p[i];
				centralDifference(i, j, k, *v4);
				Vector3f *v3 = (Vector3f*) v4;
				(*v3) = (*v3)*0.5f+h;
			}
		}
	}

	//scale to max gradient magnitude
	_scaleNormalizedGradients(1);
}