Hi, I've updated the patch to use the std:: namespace prefix instead of "using std::xxx" - in the header files this is a cleaner approach.
Best, Gert
--- 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
-- debian-science-maintainers mailing list debian-science-maintainers@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/debian-science-maintainers