[yade] 02/04: Fix FTBFS with glibc 2.23. (Closes: #820450)
Anton Gladky
gladk at moszumanska.debian.org
Fri May 20 17:50:57 UTC 2016
This is an automated email from the git hooks/post-receive script.
gladk pushed a commit to branch master
in repository yade.
commit a68444ecadee3ded7be32b2793b0fddff8856817
Author: Graham Inggs <ginggs at debian.org>
Date: Fri May 20 19:48:42 2016 +0200
Fix FTBFS with glibc 2.23. (Closes: #820450)
---
debian/patches/fix_glibc223.patch | 373 ++++++++++++++++++++++++++++++++++++++
debian/patches/series | 1 +
2 files changed, 374 insertions(+)
diff --git a/debian/patches/fix_glibc223.patch b/debian/patches/fix_glibc223.patch
new file mode 100644
index 0000000..c281e47
--- /dev/null
+++ b/debian/patches/fix_glibc223.patch
@@ -0,0 +1,373 @@
+Description: fix FTBFS with glibc 2.23
+Author: Graham Inggs <ginggs at debian.org>
+Acked-By: Anton Gladky <gladk at debian.org>
+Last-Update: 2016-05-20
+
+--- a/gui/qt4/GLViewer.cpp
++++ b/gui/qt4/GLViewer.cpp
+@@ -350,7 +350,7 @@
+ if(not(rb->bound)){ rb->updateBound();}
+
+ min=rb->bound->min; max=rb->bound->max;
+- bool hasNan=(isnan(min[0])||isnan(min[1])||isnan(min[2])||isnan(max[0])||isnan(max[1])||isnan(max[2]));
++ bool hasNan=(std::isnan(min[0])||std::isnan(min[1])||std::isnan(min[2])||std::isnan(max[0])||std::isnan(max[1])||std::isnan(max[2]));
+ Real minDim=std::min(max[0]-min[0],std::min(max[1]-min[1],max[2]-min[2]));
+ if(minDim<=0 || hasNan){
+ // Aabb is not yet calculated...
+@@ -362,7 +362,7 @@
+ max=max.cwiseMax(b->state->pos);
+ min=min.cwiseMin(b->state->pos);
+ }
+- if(isinf(min[0])||isinf(min[1])||isinf(min[2])||isinf(max[0])||isinf(max[1])||isinf(max[2])){ LOG_DEBUG("No min/max computed from bodies either, setting cube (-1,-1,-1)×(1,1,1)"); min=-Vector3r::Ones(); max=Vector3r::Ones(); }
++ if(std::isinf(min[0])||std::isinf(min[1])||std::isinf(min[2])||std::isinf(max[0])||std::isinf(max[1])||std::isinf(max[2])){ LOG_DEBUG("No min/max computed from bodies either, setting cube (-1,-1,-1)×(1,1,1)"); min=-Vector3r::Ones(); max=Vector3r::Ones(); }
+ } else {LOG_DEBUG("Using scene's Aabb");}
+
+ LOG_DEBUG("Got scene box min="<<min<<" and max="<<max);
+--- a/gui/qt5/GLViewer.cpp
++++ b/gui/qt5/GLViewer.cpp
+@@ -350,7 +350,7 @@
+ if(not(rb->bound)){ rb->updateBound();}
+
+ min=rb->bound->min; max=rb->bound->max;
+- bool hasNan=(isnan(min[0])||isnan(min[1])||isnan(min[2])||isnan(max[0])||isnan(max[1])||isnan(max[2]));
++ bool hasNan=(std::isnan(min[0])||std::isnan(min[1])||std::isnan(min[2])||std::isnan(max[0])||std::isnan(max[1])||std::isnan(max[2]));
+ Real minDim=std::min(max[0]-min[0],std::min(max[1]-min[1],max[2]-min[2]));
+ if(minDim<=0 || hasNan){
+ // Aabb is not yet calculated...
+@@ -362,7 +362,7 @@
+ max=max.cwiseMax(b->state->pos);
+ min=min.cwiseMin(b->state->pos);
+ }
+- if(isinf(min[0])||isinf(min[1])||isinf(min[2])||isinf(max[0])||isinf(max[1])||isinf(max[2])){ LOG_DEBUG("No min/max computed from bodies either, setting cube (-1,-1,-1)×(1,1,1)"); min=-Vector3r::Ones(); max=Vector3r::Ones(); }
++ if(std::isinf(min[0])||std::isinf(min[1])||std::isinf(min[2])||std::isinf(max[0])||std::isinf(max[1])||std::isinf(max[2])){ LOG_DEBUG("No min/max computed from bodies either, setting cube (-1,-1,-1)×(1,1,1)"); min=-Vector3r::Ones(); max=Vector3r::Ones(); }
+ } else {LOG_DEBUG("Using scene's Aabb");}
+
+ LOG_DEBUG("Got scene box min="<<min<<" and max="<<max);
+--- a/pkg/common/Cylinder.cpp
++++ b/pkg/common/Cylinder.cpp
+@@ -450,7 +450,7 @@
+
+ ChainedCylinder *cc1=static_cast<ChainedCylinder*>(cm1.get());
+ ChainedCylinder *cc2=static_cast<ChainedCylinder*>(cm2.get());
+- if(isnan(dist)){ //now if we didn't found a suitable distance because the segments don't cross each other, we try to find a sphere-cylinder distance.
++ if(std::isnan(dist)){ //now if we didn't found a suitable distance because the segments don't cross each other, we try to find a sphere-cylinder distance.
+ Vector3r pointsToCheck[4]={A,A+a,B,B+b}; Real resultDist=dist, resultProj=dist ; int whichCaseIsCloser=-1 ;
+ for (int i=0;i<4;i++){ //loop on the 4 cylinder's extremities and look at the extremity-cylinder distance
+ Vector3r S=pointsToCheck[i], C=(i<2)?B:A, vec=(i<2)?b:a; Vector3r CS=S-C;
+@@ -458,7 +458,7 @@
+ if(d<0.) resultDist=CS.norm();
+ else if(d>vec.norm()) resultDist=(C+vec-S).norm();
+ else resultDist=(CS.cross(vec)).norm()/(vec.norm());
+- if(dist>resultDist or isnan(dist)){dist=resultDist ; whichCaseIsCloser=i; resultProj=d;}
++ if(dist>resultDist or std::isnan(dist)){dist=resultDist ; whichCaseIsCloser=i; resultProj=d;}
+ }
+ //we know which extremity may be in contact (i), so k and m are computed to generate the right fictiousStates.
+ insideCyl1=1 ; insideCyl2=1;
+--- a/pkg/common/Facet.cpp
++++ b/pkg/common/Facet.cpp
+@@ -20,7 +20,7 @@
+ // in the future, a fixed-size array should be used instead of vector<Vector3r> for vertices
+ // this is prevented by yade::serialization now IIRC
+ if(vertices.size()!=3){ throw runtime_error(("Facet must have exactly 3 vertices (not "+boost::lexical_cast<string>(vertices.size())+")").c_str()); }
+- if(isnan(vertices[0][0])) return; // not initialized, nothing to do
++ if(std::isnan(vertices[0][0])) return; // not initialized, nothing to do
+ Vector3r e[3] = {vertices[1]-vertices[0] ,vertices[2]-vertices[1] ,vertices[0]-vertices[2]};
+ #define CHECK_EDGE(i) if(e[i].squaredNorm()==0){LOG_FATAL("Facet has coincident vertices "<<i<<" ("<<vertices[i]<<") and "<<(i+1)%3<<" ("<<vertices[(i+1)%3]<<")!");}
+ CHECK_EDGE(0); CHECK_EDGE(1);CHECK_EDGE(2);
+--- a/pkg/common/Gl1_NormPhys.cpp
++++ b/pkg/common/Gl1_NormPhys.cpp
+@@ -34,7 +34,7 @@
+ fnNorm=std::abs(fnNorm);
+ Real radiusScale=1.;
+ // weak/strong fabric, only used if maxWeakFn is set
+- if(!isnan(maxWeakFn)){
++ if(!std::isnan(maxWeakFn)){
+ if(fnNorm*fnSign<maxWeakFn){ // weak fabric
+ if(weakFilter>0) return;
+ radiusScale=weakScale;
+--- a/pkg/common/InsertionSortCollider.cpp
++++ b/pkg/common/InsertionSortCollider.cpp
+@@ -241,9 +241,9 @@
+ if(!s) continue;
+ minR=min(s->radius,minR);
+ }
+- if (isinf(minR)) LOG_ERROR("verletDist is set to 0 because no spheres were found. It will result in suboptimal performances, consider setting a positive verletDist in your script.");
++ if (std::isinf(minR)) LOG_ERROR("verletDist is set to 0 because no spheres were found. It will result in suboptimal performances, consider setting a positive verletDist in your script.");
+ // if no spheres, disable stride
+- verletDist=isinf(minR) ? 0 : std::abs(verletDist)*minR;
++ verletDist=std::isinf(minR) ? 0 : std::abs(verletDist)*minR;
+ }
+ // if interactions are dirty, force reinitialization
+ if(scene->interactions->dirty){
+--- a/pkg/common/MatchMaker.cpp
++++ b/pkg/common/MatchMaker.cpp
+@@ -9,7 +9,7 @@
+ if(((int)m[0]==id1 && (int)m[1]==id2) || ((int)m[0]==id2 && (int)m[1]==id1)) return m[2];
+ }
+ // no match
+- if(fbNeedsValues && (isnan(val1) || isnan(val2))) throw std::invalid_argument("MatchMaker: no match for ("+boost::lexical_cast<string>(id1)+","+boost::lexical_cast<string>(id2)+"), and values required for algo computation '"+algo+"' not specified.");
++ if(fbNeedsValues && (std::isnan(val1) || std::isnan(val2))) throw std::invalid_argument("MatchMaker: no match for ("+boost::lexical_cast<string>(id1)+","+boost::lexical_cast<string>(id2)+"), and values required for algo computation '"+algo+"' not specified.");
+ return computeFallback(val1,val2);
+ }
+
+--- a/pkg/common/ZECollider.cpp
++++ b/pkg/common/ZECollider.cpp
+@@ -68,7 +68,7 @@
+ minR=min(s->radius,minR);
+ }
+ // if no spheres, disable stride
+- verletDist=isinf(minR) ? 0 : std::abs(verletDist)*minR;
++ verletDist=std::isinf(minR) ? 0 : std::abs(verletDist)*minR;
+ }
+
+ // update bounds via boundDispatcher
+--- a/pkg/dem/ConcretePM.cpp
++++ b/pkg/dem/ConcretePM.cpp
+@@ -43,14 +43,14 @@
+
+ // check unassigned values
+ if (!mat1->neverDamage) {
+- assert(!isnan(mat1->sigmaT));
+- assert(!isnan(mat1->epsCrackOnset));
+- assert(!isnan(mat1->relDuctility));
++ assert(!std::isnan(mat1->sigmaT));
++ assert(!std::isnan(mat1->epsCrackOnset));
++ assert(!std::isnan(mat1->relDuctility));
+ }
+ if (!mat2->neverDamage) {
+- assert(!isnan(mat2->sigmaT));
+- assert(!isnan(mat2->epsCrackOnset));
+- assert(!isnan(mat2->relDuctility));
++ assert(!std::isnan(mat2->sigmaT));
++ assert(!std::isnan(mat2->epsCrackOnset));
++ assert(!std::isnan(mat2->relDuctility));
+ }
+
+ cpmPhys->damLaw = mat1->damLaw;
+@@ -273,7 +273,7 @@
+
+ #ifdef YADE_DEBUG
+ #define CPM_YADE_DEBUG_A \
+- if(isnan(epsN)){\
++ if(std::isnan(epsN)){\
+ /*LOG_FATAL("refLength="<<geom->refLength<<"; pos1="<<geom->se31.position<<"; pos2="<<geom->se32.position<<"; displacementN="<<geom->displacementN());*/ \
+ throw runtime_error("!! epsN==NaN !!");\
+ }
+@@ -283,8 +283,8 @@
+
+
+ #define YADE_VERIFY(condition) if(!(condition)){LOG_FATAL("Verification `"<<#condition<<"' failed!"); LOG_FATAL("in interaction #"<<I->getId1()<<"+#"<<I->getId2()); Omega::instance().saveSimulation("/tmp/verificationFailed.xml"); throw;}
+-#define NNAN(a) YADE_VERIFY(!isnan(a));
+-#define NNANV(v) YADE_VERIFY(!isnan(v[0])); assert(!isnan(v[1])); assert(!isnan(v[2]));
++#define NNAN(a) YADE_VERIFY(!std::isnan(a));
++#define NNANV(v) YADE_VERIFY(!std::isnan(v[0])); assert(!std::isnan(v[1])); assert(!std::isnan(v[2]));
+
+ bool Law2_ScGeom_CpmPhys_Cpm::go(shared_ptr<IGeom>& _geom, shared_ptr<IPhys>& _phys, Interaction* I){
+ TIMING_DELTAS_START();
+--- a/pkg/dem/GeneralIntegratorInsertionSortCollider.cpp
++++ b/pkg/dem/GeneralIntegratorInsertionSortCollider.cpp
+@@ -86,9 +86,9 @@
+ if(!s) continue;
+ minR=min(s->radius,minR);
+ }
+- if (isinf(minR)) LOG_ERROR("verletDist is set to 0 because no spheres were found. It will result in suboptimal performances, consider setting a positive verletDist in your script.");
++ if (std::isinf(minR)) LOG_ERROR("verletDist is set to 0 because no spheres were found. It will result in suboptimal performances, consider setting a positive verletDist in your script.");
+ // if no spheres, disable stride
+- verletDist=isinf(minR) ? 0 : std::abs(verletDist)*minR;
++ verletDist=std::isinf(minR) ? 0 : std::abs(verletDist)*minR;
+ }
+
+ // update bounds via boundDispatcher
+--- a/pkg/dem/NewtonIntegrator.cpp
++++ b/pkg/dem/NewtonIntegrator.cpp
+@@ -102,7 +102,7 @@
+ // its velocity will count as max velocity of bodies
+ // otherwise the collider might not run if only the cell were changing without any particle motion
+ // FIXME: will not work for pure shear transformation, which does not change Cell::getSize()
+- if(scene->isPeriodic && ((prevCellSize!=scene->cell->getSize())) && /* initial value */!isnan(prevCellSize[0]) ){ cellChanged=true; maxVelocitySq=(prevCellSize-scene->cell->getSize()).squaredNorm()/pow(dt,2); }
++ if(scene->isPeriodic && ((prevCellSize!=scene->cell->getSize())) && /* initial value */!std::isnan(prevCellSize[0]) ){ cellChanged=true; maxVelocitySq=(prevCellSize-scene->cell->getSize()).squaredNorm()/pow(dt,2); }
+ else { maxVelocitySq=0; cellChanged=false; }
+
+ #ifdef YADE_BODY_CALLBACK
+@@ -144,8 +144,8 @@
+ //in most cases, the initial force on clumps will be zero and next line is not changing f and m, but make sure we don't miss something (e.g. user defined forces on clumps)
+ f=scene->forces.getForce(id); m=scene->forces.getTorque(id);
+ #ifdef YADE_DEBUG
+- if(isnan(f[0])||isnan(f[1])||isnan(f[2])) throw runtime_error(("NewtonIntegrator: NaN force acting on #"+boost::lexical_cast<string>(id)+".").c_str());
+- if(isnan(m[0])||isnan(m[1])||isnan(m[2])) throw runtime_error(("NewtonIntegrator: NaN torque acting on #"+boost::lexical_cast<string>(id)+".").c_str());
++ if(std::isnan(f[0])||std::isnan(f[1])||std::isnan(f[2])) throw runtime_error(("NewtonIntegrator: NaN force acting on #"+boost::lexical_cast<string>(id)+".").c_str());
++ if(std::isnan(m[0])||std::isnan(m[1])||std::isnan(m[2])) throw runtime_error(("NewtonIntegrator: NaN torque acting on #"+boost::lexical_cast<string>(id)+".").c_str());
+ if(state->mass<=0 && ((state->blockedDOFs & State::DOF_XYZ) != State::DOF_XYZ)) throw runtime_error(("NewtonIntegrator: #"+boost::lexical_cast<string>(id)+" has some linear accelerations enabled, but State::mass is non-positive."));
+ if(state->inertia.minCoeff()<=0 && ((state->blockedDOFs & State::DOF_RXRYRZ) != State::DOF_RXRYRZ)) throw runtime_error(("NewtonIntegrator: #"+boost::lexical_cast<string>(id)+" has some angular accelerations enabled, but State::inertia contains non-positive terms."));
+ #endif
+--- a/pkg/dem/PeriIsoCompressor.cpp
++++ b/pkg/dem/PeriIsoCompressor.cpp
+@@ -154,7 +154,7 @@
+ if(doUpdate || min(stiff[0],min(stiff[1],stiff[2])) <=0 || dynCell){ strainStressStiffUpdate(); }
+
+ // set mass to be sum of masses, if not set by the user
+- if(dynCell && isnan(mass)){
++ if(dynCell && std::isnan(mass)){
+ mass=0; FOREACH(const shared_ptr<Body>& b, *scene->bodies){ if(b && b->state) mass+=b->state->mass; }
+ LOG_INFO("Setting cell mass to "<<mass<<" automatically.");}
+ bool allOk=true;
+--- a/pkg/dem/Polyhedra_Ig2.cpp
++++ b/pkg/dem/Polyhedra_Ig2.cpp
+@@ -64,7 +64,7 @@
+ Real volume;
+ Vector3r centroid;
+ P_volume_centroid(Int, &volume, ¢roid);
+- if(isnan(volume) || volume<=1E-25 || volume > min(A->GetVolume(),B->GetVolume())) {
++ if(std::isnan(volume) || volume<=1E-25 || volume > min(A->GetVolume(),B->GetVolume())) {
+ bang->equivalentPenetrationDepth=0;
+ bang->penetrationVolume=min(A->GetVolume(),B->GetVolume());
+ bang->normal = (A->GetVolume()>B->GetVolume() ? 1 : -1)*(se32.position+shift2-se31.position);
+@@ -78,7 +78,7 @@
+
+ //calculate area of projection of Intersection into the normal plane
+ //Real area = CalculateProjectionArea(Int, ToCGALVector(normal));
+- //if(isnan(area) || area<=1E-20) {bang->equivalentPenetrationDepth=0; return true;}
++ //if(std::isnan(area) || area<=1E-20) {bang->equivalentPenetrationDepth=0; return true;}
+ //Real area = volume/1E-8;
+ Real area = std::pow(volume,2./3.);
+ // store calculated stuff in bang; some is redundant
+@@ -155,13 +155,13 @@
+ Real volume;
+ Vector3r centroid;
+ P_volume_centroid(Int, &volume, ¢roid);
+- if(isnan(volume) || volume<=1E-25 || volume > B->GetVolume()) {bang->equivalentPenetrationDepth=0; return true;}
++ if(std::isnan(volume) || volume<=1E-25 || volume > B->GetVolume()) {bang->equivalentPenetrationDepth=0; return true;}
+ if (!Is_inside_Polyhedron(PB, ToCGALPoint(centroid))) {bang->equivalentPenetrationDepth=0; return true;}
+
+ //calculate area of projection of Intersection into the normal plane
+ Real area = volume/1E-8;
+ //Real area = CalculateProjectionArea(Int, CGALnormal);
+- //if(isnan(area) || area<=1E-20) {bang->equivalentPenetrationDepth=0; return true;}
++ //if(std::isnan(area) || area<=1E-20) {bang->equivalentPenetrationDepth=0; return true;}
+
+ // store calculated stuff in bang; some is redundant
+ bang->equivalentCrossSection=area;
+@@ -250,7 +250,7 @@
+ Real volume;
+ Vector3r centroid;
+ P_volume_centroid(Int, &volume, ¢roid);
+- if(isnan(volume) || volume<=1E-25 || volume > B->GetVolume()) {bang->equivalentPenetrationDepth=0; return true;}
++ if(std::isnan(volume) || volume<=1E-25 || volume > B->GetVolume()) {bang->equivalentPenetrationDepth=0; return true;}
+ if (!Is_inside_Polyhedron(PB, ToCGALPoint(centroid))) {bang->equivalentPenetrationDepth=0; return true;}
+
+ //find normal direction
+@@ -260,7 +260,7 @@
+ //calculate area of projection of Intersection into the normal plane
+ Real area = volume/1E-8;
+ //Real area = CalculateProjectionArea(Int, ToCGALVector(normal));
+- //if(isnan(area) || area<=1E-20) {bang->equivalentPenetrationDepth=0; return true;}
++ //if(std::isnan(area) || area<=1E-20) {bang->equivalentPenetrationDepth=0; return true;}
+
+ // store calculated stuff in bang; some is redundant
+ bang->equivalentCrossSection=area;
+@@ -435,7 +435,7 @@
+ CGALvector normalCGAL;
+ CGALpoint centroidCGAL=ToCGALPoint(se32.position);
+ Sphere_Polyhedron_intersection(PB, r, ToCGALPoint(se31.position), centroidCGAL, volume, normalCGAL, area);
+- if(isnan(volume) || volume<=1E-25 || volume > B->GetVolume()) {bang->equivalentPenetrationDepth=0; return true;}
++ if(std::isnan(volume) || volume<=1E-25 || volume > B->GetVolume()) {bang->equivalentPenetrationDepth=0; return true;}
+ Vector3r centroid = FromCGALPoint(centroidCGAL);
+ Vector3r normal = FromCGALVector(normalCGAL);
+
+--- a/pkg/dem/ScGeom.cpp
++++ b/pkg/dem/ScGeom.cpp
+@@ -104,7 +104,7 @@
+ // add -DYADE_SCGEOM_DEBUG to CXXFLAGS to enable this piece or just do
+ // #define YADE_SCGEOM_DEBUG //(but do not commit with that enabled in the code)
+ #ifdef YADE_SCGEOM_DEBUG
+- if (isnan(aa.angle())) {
++ if (std::isnan(aa.angle())) {
+ cerr<<"NaN angle found in angleAxisr(q), for quaternion "<<delta<<", after quaternion product"<<endl;
+ cerr<<"rbp1.ori * (initialOrientation1.conjugate())) * (initialOrientation2 * (rbp2.ori.conjugate()) with quaternions :"<<endl;
+ cerr<<rbp1.ori<<" * "<<initialOrientation1<<" * "<<initialOrientation2<<" * "<<rbp2.ori<<endl<<" and sub-products :"<<endl<<rbp1.ori * (initialOrientation1.conjugate())<<" * "<<initialOrientation2 * (rbp2.ori.conjugate())<<endl;
+@@ -115,7 +115,7 @@
+ cerr<<delta<<" "<<bb.angle()<<endl;
+ }
+ #else
+- if (isnan(aa.angle())) aa.angle()=0;
++ if (std::isnan(aa.angle())) aa.angle()=0;
+ #endif
+ if (aa.angle() > Mathr::PI) aa.angle() -= Mathr::TWO_PI; // angle is between 0 and 2*pi, but should be between -pi and pi
+ twist = (aa.angle() * aa.axis().dot(normal));
+--- a/pkg/dem/Shop_02.cpp
++++ b/pkg/dem/Shop_02.cpp
+@@ -87,7 +87,7 @@
+ else theta=0;
+ Real hRef=dH_dTheta*(theta-theta0);
+ long period;
+- if(isnan(periodStart)){
++ if(std::isnan(periodStart)){
+ Real h=Shop::periodicWrap(pt[axis]-hRef,hRef-Mathr::PI*dH_dTheta,hRef+Mathr::PI*dH_dTheta,&period);
+ return boost::make_tuple(r,h,theta);
+ }
+@@ -238,7 +238,7 @@
+ Real N=(compressionPositive?-1:1)*phys->normalForce.dot(n);
+ // Real R=(Body::byId(I->getId2(),scene)->state->pos+cellHsize*I->cellDist.cast<Real>()-Body::byId(I->getId1(),scene)->state->pos).norm();
+ Real R=.5*(geom->refR1+geom->refR2);
+- Real Fsplit=(!isnan(thresholdForce))?thresholdForce:Fmean;
++ Real Fsplit=(!std::isnan(thresholdForce))?thresholdForce:Fmean;
+ if (compressionPositive?(N<Fsplit):(N>Fsplit)){
+ for(int i=0; i<3; i++) for(int j=i; j<3; j++){
+ sigNStrong(i,j)+=R*N*n[i]*n[j];}
+@@ -304,7 +304,7 @@
+ fabricStrong=Matrix3r::Zero();
+ fabricWeak=Matrix3r::Zero();
+ int nStrong(0), nWeak(0); // number of strong and weak contacts respectively
+- if (!splitTensor & !isnan(thresholdForce)) {LOG_WARN("The bool splitTensor should be set to True if you specified a threshold value for the contact force, otherwise the function will return only the fabric tensor and not the two separate contributions.");}
++ if (!splitTensor & !std::isnan(thresholdForce)) {LOG_WARN("The bool splitTensor should be set to True if you specified a threshold value for the contact force, otherwise the function will return only the fabric tensor and not the two separate contributions.");}
+ FOREACH(const shared_ptr<Interaction>& I, *scene->interactions){
+ if(!I->isReal()) continue;
+ GenericSpheresContact* geom=YADE_CAST<GenericSpheresContact*>(I->geom.get());
+@@ -312,7 +312,7 @@
+ const Vector3r& n=geom->normal;
+ Real f=(revertSign?-1:1)*phys->normalForce.dot(n);
+ // slipt the tensor according to the mean contact force or a threshold value if this is given
+- Real Fsplit=(!isnan(thresholdForce))?thresholdForce:Fmean;
++ Real Fsplit=(!std::isnan(thresholdForce))?thresholdForce:Fmean;
+ if (revertSign?(f<Fsplit):(f>Fsplit)){ // reminder: forces are compared with their sign
+ for(int i=0; i<3; i++) for(int j=i; j<3; j++){
+ fabricStrong(i,j)+=n[i]*n[j];
+--- a/pkg/dem/UniaxialStrainer.cpp
++++ b/pkg/dem/UniaxialStrainer.cpp
+@@ -38,13 +38,13 @@
+ if(originalLength<=0) throw runtime_error(("UniaxialStrainer: Initial length is negative or zero (swapped reference particles?)! "+boost::lexical_cast<string>(originalLength)).c_str());
+ /* this happens is nan propagates from e.g. brefcom consitutive law in case 2 bodies have _exactly_ the same position
+ * (the the normal strain is 0./0.=nan). That is an user's error, however and should not happen. */
+- if(isnan(originalLength)) throw logic_error("UniaxialStrainer: Initial length is NaN!");
+- assert(originalLength>0 && !isnan(originalLength));
++ if(std::isnan(originalLength)) throw logic_error("UniaxialStrainer: Initial length is NaN!");
++ assert(originalLength>0 && !std::isnan(originalLength));
+
+- assert(!isnan(strainRate) || !isnan(absSpeed));
+- if(!isnan(std::numeric_limits<Real>::quiet_NaN())){ throw runtime_error("UniaxialStrainer: NaN's are not properly supported (compiled with -ffast-math?), which is required."); }
++ assert(!std::isnan(strainRate) || !std::isnan(absSpeed));
++ if(!std::isnan(std::numeric_limits<Real>::quiet_NaN())){ throw runtime_error("UniaxialStrainer: NaN's are not properly supported (compiled with -ffast-math?), which is required."); }
+
+- if(isnan(strainRate)){ strainRate=absSpeed/originalLength; LOG_INFO("Computed new strainRate "<<strainRate); }
++ if(std::isnan(strainRate)){ strainRate=absSpeed/originalLength; LOG_INFO("Computed new strainRate "<<strainRate); }
+ else {absSpeed=strainRate*originalLength;}
+
+ if(!setSpeeds){
+@@ -77,7 +77,7 @@
+ b->state->vel[axis]=pNormalized*(v1-v0)+v0;
+ }
+ }
+- if(isnan(crossSectionArea)){ throw std::invalid_argument("UniaxialStrain.crossSectionArea must be specified."); }
++ if(std::isnan(crossSectionArea)){ throw std::invalid_argument("UniaxialStrain.crossSectionArea must be specified."); }
+ }
+
+ void UniaxialStrainer::action(){
+@@ -93,7 +93,7 @@
+ } else currentStrainRate=strainRate;
+ // how much do we move (in total, symmetry handled below)
+ Real dAX=currentStrainRate*originalLength*scene->dt;
+- if(!isnan(stopStrain)){
++ if(!std::isnan(stopStrain)){
+ Real axialLength=axisCoord(posIds[0])-axisCoord(negIds[0]);
+ Real newStrain=(axialLength+dAX)/originalLength-1;
+ if((newStrain*stopStrain>0) && std::abs(newStrain)>=stopStrain){ // same sign of newStrain and stopStrain && over the limit from below in abs values
diff --git a/debian/patches/series b/debian/patches/series
index b1c59d8..e6dbaa8 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,3 +1,4 @@
01_remove_google_analytics.patch
02_FixMatplotLibWarning.patch
01fea359c04d08f93d2feddcd07b31bc794dbb37.patch
+fix_glibc223.patch
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/yade.git
More information about the debian-science-commits
mailing list