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) ); }
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; }
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; }