[yade] 04/06: Fix glibc_2.23 compilation. (Closes: #820450)

Anton Gladky gladk at moszumanska.debian.org
Thu Jun 2 21:02:30 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 57d5a6d7f2b4e00b5469dfa2fefa387ea6ce50e8
Author: Graham Inggs <ginggs at debian.org>
Date:   Thu Jun 2 22:56:06 2016 +0200

    Fix glibc_2.23 compilation. (Closes: #820450)
---
 debian/patches/fix_glibc223.patch | 353 +++++++++++++++++---------------------
 1 file changed, 155 insertions(+), 198 deletions(-)

diff --git a/debian/patches/fix_glibc223.patch b/debian/patches/fix_glibc223.patch
index c281e47..32e5062 100644
--- a/debian/patches/fix_glibc223.patch
+++ b/debian/patches/fix_glibc223.patch
@@ -1,28 +1,8 @@
 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
+Last-Update: 2016-06-02
 
---- 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 @@
@@ -38,8 +18,8 @@ Last-Update: 2016-05-20
  			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(); }
+-		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);
@@ -63,17 +43,28 @@ Last-Update: 2016-05-20
  			}
  			//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/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/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/Gl1_NormPhys.cpp
 +++ b/pkg/common/Gl1_NormPhys.cpp
 @@ -34,7 +34,7 @@
@@ -99,71 +90,50 @@ Last-Update: 2016-05-20
  		}
  		// 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]));
+--- 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/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; }
  
- bool Law2_ScGeom_CpmPhys_Cpm::go(shared_ptr<IGeom>& _geom, shared_ptr<IPhys>& _phys, Interaction* I){
- 	TIMING_DELTAS_START();
+ 	#ifdef YADE_BODY_CALLBACK
+--- a/lib/triangulation/FlowBoundingSphere.ipp
++++ b/lib/triangulation/FlowBoundingSphere.ipp
+@@ -895,7 +895,7 @@
+ 						} else {							
+ 						/// INCOMPRESSIBLE 
+ 							m += (cell->info().kNorm())[j2] * cell->neighbor(j2)->info().p();
+-							if ( isinf(m) && j<10 ) cout << "(cell->info().kNorm())[j2] = " << (cell->info().kNorm())[j2] << " cell->neighbor(j2)->info().p() = " << cell->neighbor(j2)->info().p() << endl;
++							if ( std::isinf(m) && j<10 ) cout << "(cell->info().kNorm())[j2] = " << (cell->info().kNorm())[j2] << " cell->neighbor(j2)->info().p() = " << cell->neighbor(j2)->info().p() << endl;
+ 							if (j==0) n += (cell->info().kNorm())[j2];
+ 						}  
+ 					}
+--- a/lib/triangulation/PeriodicFlow.hpp
++++ b/lib/triangulation/PeriodicFlow.hpp
+@@ -406,7 +406,7 @@
+ 				if (j==0) n += compFlowFactor*(cell->info().kNorm())[j2];
+ 			} else {
+ 				m += (cell->info().kNorm())[j2]*cell->neighbor(j2)->info().shiftedP();
+-				if ( isinf(m) && j<10 ) cout << "(cell->info().kNorm())[j2] = " << (cell->info().kNorm())[j2] << " cell->neighbor(j2)->info().shiftedP() = " << cell->neighbor(j2)->info().shiftedP() << endl;
++				if ( std::isinf(m) && j<10 ) cout << "(cell->info().kNorm())[j2] = " << (cell->info().kNorm())[j2] << " cell->neighbor(j2)->info().shiftedP() = " << cell->neighbor(j2)->info().shiftedP() << endl;
+ 				if (j==0) n += (cell->info().kNorm())[j2];
+ 			} 
+ 		  }
 --- a/pkg/dem/GeneralIntegratorInsertionSortCollider.cpp
 +++ b/pkg/dem/GeneralIntegratorInsertionSortCollider.cpp
 @@ -86,9 +86,9 @@
@@ -178,39 +148,45 @@ Last-Update: 2016-05-20
  		}
  		
  		// 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; }
+--- 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));
  
- 	#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(); }
+-	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."); }
  
- 	// 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;
+-	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
 --- a/pkg/dem/Polyhedra_Ig2.cpp
 +++ b/pkg/dem/Polyhedra_Ig2.cpp
 @@ -64,7 +64,7 @@
@@ -222,16 +198,7 @@ Last-Update: 2016-05-20
  		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 @@
+@@ -155,7 +155,7 @@
  	Real volume;
  	Vector3r centroid;	
  	P_volume_centroid(Int, &volume, &centroid);
@@ -240,13 +207,6 @@ Last-Update: 2016-05-20
  	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;	
@@ -256,24 +216,6 @@ Last-Update: 2016-05-20
  	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 @@
@@ -332,42 +274,57 @@ Last-Update: 2016-05-20
  		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));
+--- a/pkg/dem/ConcretePM.cpp
++++ b/pkg/dem/ConcretePM.cpp
+@@ -43,14 +43,14 @@
  
--	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."); }
+ 	// 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));
+ 	}
  
--	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;}
+ 	cpmPhys->damLaw = mat1->damLaw;
+@@ -273,7 +273,7 @@
  
- 	if(!setSpeeds){
-@@ -77,7 +77,7 @@
- 			b->state->vel[axis]=pNormalized*(v1-v0)+v0;
+ #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 !!");\
  		}
- 	}
--	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."); }
- }
+@@ -283,8 +283,8 @@
  
- 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
+ 
+ #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/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;

-- 
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