Foam::tmp<Foam::volScalarField>
Foam::kineticTheoryModels::viscosityModels::HrenyaSinclair::nu
(
    const volScalarField& alpha1,
    const volScalarField& Theta,
    const volScalarField& g0,
    const volScalarField& rho1,
    const volScalarField& da,
    const dimensionedScalar& e
) const
{
    const scalar sqrtPi = sqrt(constant::mathematical::pi);

    volScalarField lamda
    (
        scalar(1) + da/(6.0*sqrt(2.0)*(alpha1 + scalar(1.0e-5)))/L_
    );

    return da*sqrt(Theta)*
    (
        (4.0/5.0)*sqr(alpha1)*g0*(1.0 + e)/sqrtPi
      + (1.0/15.0)*sqrtPi*g0*(1.0 + e)*(3.0*e - 1)*sqr(alpha1)/(3.0-e)
      + (1.0/6.0)*sqrtPi*alpha1*(0.5*lamda + 0.25*(3.0*e - 1.0))
       /(0.5*(3.0 - e)*lamda)
      + (10/96.0)*sqrtPi/((1.0 + e)*0.5*(3.0 - e)*g0*lamda)
    );
}
Foam::tmp<Foam::volScalarField>
Foam::kineticTheoryModels::conductivityModels::HrenyaSinclair::kappa
(
    const volScalarField& alpha1,
    const volScalarField& Theta,
    const volScalarField& g0,
    const volScalarField& rho1,
    const volScalarField& da,
    const dimensionedScalar& e
) const
{
    const scalar sqrtPi = sqrt(constant::mathematical::pi);

    volScalarField lamda
    (
        scalar(1) + da/(6*sqrt(2.0)*(alpha1 + 1e-5))/L_
    );

    return rho1*da*sqrt(Theta)*
    (
        2*sqr(alpha1)*g0*(1 + e)/sqrtPi
      + (9.0/8.0)*sqrtPi*g0*0.25*sqr(1 + e)*(2*e - 1)*sqr(alpha1)
       /(49.0/16.0 - 33*e/16.0)
      + (15.0/16.0)*sqrtPi*alpha1*(0.5*sqr(e) + 0.25*e - 0.75 + lamda)
       /((49.0/16.0 - 33*e/16.0)*lamda)
      + (25.0/64.0)*sqrtPi
       /((1 + e)*(49.0/16.0 - 33*e/16.0)*lamda*g0)
    );
}
示例#3
0
hduVector3Dd HapticDevice::atomeForce(hduVector3Dd* effector,hduVector3Dd* currentTarget, btTransform* invertCamera){
	
	hduVector3Dd force = hduVector3Dd(0,0.1,0.0);	

	hduVector3Dd direct = hduVector3Dd(0,0.0,0.0);	

	HDdouble someNorme = 0.1;

	for(unsigned int i = 0; i< m_possibleImpact.size(); i++){

		hduVector3Dd impact = invertTransform(m_possibleImpact[i], invertCamera);
		
		hduVector3Dd inbetween = impact - *effector ;			

		HDdouble x = inbetween.magnitude();
				
		if(x <= Quick_Distance_max)
			someNorme += pow(x,2);		
	
	}	

	for(unsigned int i = 0; i< m_possibleImpact.size(); i++){

		hduVector3Dd impact = invertTransform(m_possibleImpact[i], invertCamera);
		
		hduVector3Dd inbetween = impact - *effector ;			

		HDdouble x = inbetween.magnitude();
				
		if(x <= Quick_Distance_max)
			direct += (pow(x,2) / someNorme) * impact;		
	
	}	

	direct -= *effector;

	HDdouble va = direct.magnitude();

		
	force += 0.3 * pow((lamda(Quick_Distance_max,va) / Quick_Distance_max),2) * 
		pow((lamda(max_velocity,m_velocity)/max_velocity),2) * direct;

	//std::cout << m_velocity << std::endl;
	return force;
}
示例#4
0
hduVector3Dd HapticDevice::magneticForce(hduVector3Dd* effector,hduVector3Dd* currentTarget,btTransform* invertCamera){
	
	hduVector3Dd force = hduVector3Dd(0,0.1,0.0);

	HDdouble phi = 0.58;

	HDdouble sigma = 10;

	HDdouble s2 = pow(sigma, 2);

	HDdouble fmax = 0.0;

	HDdouble seuil = 0.5;

	hduVector3Dd target = *currentTarget - *effector ;
	
	HDdouble distanceMin = target.magnitude();
	
	/*
	for(unsigned int i = 0; i< m_possibleImpact.size(); i++){

		hduVector3Dd impact = invertTransform(m_possibleImpact[i], invertCamera);

		hduVector3Dd inbetween = impact - *effector ;			

		HDdouble x = inbetween.magnitude();

		HDdouble f = phi * ( pow(x,2)/ s2 ) * std::exp((s2 - pow(x,2))/s2);				
		
		inbetween.normalize();		

		HDdouble d = 1;// 1 si c'est la sible, < 1 sinon 
		if(x >= 0.1) 
			d = distanceMin / x; 

		force += d * f * inbetween;	
		
	}	
	*/

	
	for(int traj = 0; traj < ThronNumber ; traj++){
		for(unsigned int i = 0; i< m_trajectory[traj].size(); i++){			

			if( i % 6 == 0){
				hduVector3Dd impact = invertTransform((m_trajectory[traj])[i], invertCamera);

				hduVector3Dd inbetween = impact - *effector ;			

				HDdouble x = inbetween.magnitude();
				
				//if(inbetween[1] < 3 && inbetween[1] > -3){
				HDdouble f = phi * ( pow(x,2)/ s2 ) * std::exp((s2 - pow(x,2))/s2);				
		
				inbetween.normalize();		

				HDdouble d = 1;// 1 si c'est la sible, < 1 sinon 
				if(x >= 0.1) 
					d = distanceMin / x; 

				force +=  f * inbetween;		
				//}
			}
			
		}	
	}

	//std::cout << " --> "<< std::endl;

	force *= (lamda(max_velocity,m_velocity)/max_velocity);
	return force;
}