void TriaxialCompressionEngine::updateParameters () { UnbalancedForce=ComputeUnbalancedForce (); if ( (currentState!=STATE_TRIAX_LOADING && currentState==STATE_ISO_COMPACTION) || currentState==STATE_ISO_UNLOADING || currentState==STATE_FIXED_POROSITY_COMPACTION || autoCompressionActivation) { if (UnbalancedForce<=StabilityCriterion && abs ( ( meanStress-sigma_iso ) /sigma_iso ) <0.005 && fixedPoroCompaction==false ) { // only go to UNLOADING if it is needed if ( currentState==STATE_ISO_COMPACTION && autoUnload && sigmaLateralConfinement!=sigmaIsoCompaction ) { doStateTransition (STATE_ISO_UNLOADING ); computeStressStrain (); // update stress and strain } else if((currentState==STATE_ISO_COMPACTION || currentState==STATE_ISO_UNLOADING || currentState==STATE_LIMBO) && autoCompressionActivation){ doStateTransition (STATE_TRIAX_LOADING ); computeStressStrain (); // update stress and strain } } else if ( porosity<=fixedPorosity && currentState==STATE_FIXED_POROSITY_COMPACTION ) { // Omega::instance().pause(); return; } } }
void SampleCapillaryPressureEngine::action() { updateParameters(); TriaxialStressController::action(); if (pressureVariationActivated) { if (scene->iter % 100 == 0) cerr << "pressure variation!!" << endl; if ((Pressure>=0) && (Pressure<=1000000000)) Pressure += PressureVariation; capillaryCohesiveLaw->capillaryPressure = Pressure; capillaryCohesiveLaw->fusionDetection = fusionDetection; capillaryCohesiveLaw->binaryFusion = binaryFusion; } else { capillaryCohesiveLaw->capillaryPressure = Pressure; capillaryCohesiveLaw->fusionDetection = fusionDetection; capillaryCohesiveLaw->binaryFusion = binaryFusion;} if (scene->iter % 100 == 0) cerr << "capillary pressure = " << Pressure << endl; capillaryCohesiveLaw->scene=scene;; capillaryCohesiveLaw->action(); UnbalancedForce = ComputeUnbalancedForce(scene); }
void SampleCapillaryPressureEngine::updateParameters() { UnbalancedForce = ComputeUnbalancedForce(scene); if (!Phase1 && UnbalancedForce<=StabilityCriterion && !pressureVariationActivated) { internalCompaction = false; Phase1 = true; } if ( Phase1 && UnbalancedForce<=StabilityCriterion && !pressureVariationActivated) { Real S = meanStress; cerr << "Smoy = " << meanStress << endl; if ((S > (sigma_iso - (sigma_iso*SigmaPrecision))) && (S < (sigma_iso + (sigma_iso*SigmaPrecision)))) { string fileName = "../data/" + Phase1End + "_" + boost::lexical_cast<string>(scene->iter) + ".xml"; cerr << "saving snapshot: " << fileName << " ..."; Omega::instance().saveSimulation(fileName); pressureVariationActivated = true; } } }