nFacesToBreak = 0; nCoupledFacesToBreak = 0; { // Check internal faces // scalarField effTraction = // cohesiveZone.internalField() * // mag(traction.internalField()); scalarField normalTraction = cohesiveZone.internalField()* ( n.internalField() & traction.internalField() ); // only consider tensile tractions normalTraction = max(normalTraction, scalar(0)); scalarField shearTraction = cohesiveZone.internalField()* mag( (I - Foam::sqr(n.internalField())) & traction.internalField() ); // the traction fraction is monitored to decide which faces to break: // ie (tN/tNC)^2 + (tS/tSC)^2 >1 to crack a face const surfaceScalarField sigmaMax = rheology.cohLaw().sigmaMax(); const surfaceScalarField tauMax = rheology.cohLaw().tauMax(); const scalarField& sigmaMaxI = sigmaMax.internalField(); const scalarField& tauMaxI = tauMax.internalField(); //scalarField effTractionFraction = effTraction/sigmaMax; // scalarField effTractionFraction = // (normalTraction/sigmaMaxI)*(normalTraction/sigmaMaxI) + (shearTraction/tauMaxI)*(shearTraction/tauMaxI); scalarField effTractionFraction(normalTraction.size(), 0.0); if(cohesivePatchDUPtr) { effTractionFraction = (normalTraction/sigmaMaxI)*(normalTraction/sigmaMaxI) + (shearTraction/tauMaxI)*(shearTraction/tauMaxI); } else { // solidCohesiveFixedModeMix only uses sigmaMax effTractionFraction = (normalTraction/sigmaMaxI)*(normalTraction/sigmaMaxI) + (shearTraction/sigmaMaxI)*(shearTraction/sigmaMaxI); } maxEffTractionFraction = gMax(effTractionFraction); SLList