1
/*************************************************************************
2
* Copyright (C) 2006 by Luc Scholtes *
3
* luc.scholtes@hmg.inpg.fr *
5
* This program is free software; it is licensed under the terms of the *
6
* GNU General Public License v2 or later. See file LICENSE for details. *
7
*************************************************************************/
9
#include "SampleCapillaryPressureEngine.hpp"
10
#include <yade/pkg/dem/Law2_ScGeom_CapillaryPhys_Capillarity.hpp>
11
#include<yade/core/Scene.hpp>
12
#include<yade/core/Omega.hpp>
13
#include<yade/pkg/dem/FrictPhys.hpp>
14
#include<yade/lib/base/Math.hpp>
15
#include <boost/lexical_cast.hpp>
17
using namespace boost;
20
YADE_PLUGIN((SampleCapillaryPressureEngine));
21
CREATE_LOGGER(SampleCapillaryPressureEngine);
23
SampleCapillaryPressureEngine::~SampleCapillaryPressureEngine()
27
void SampleCapillaryPressureEngine::updateParameters()
29
UnbalancedForce = ComputeUnbalancedForce(scene);
31
if (!Phase1 && UnbalancedForce<=StabilityCriterion && !pressureVariationActivated) {
33
internalCompaction = false;
37
if ( Phase1 && UnbalancedForce<=StabilityCriterion && !pressureVariationActivated) {
40
cerr << "Smoy = " << meanStress << endl;
41
if ((S > (sigma_iso - (sigma_iso*SigmaPrecision))) && (S < (sigma_iso + (sigma_iso*SigmaPrecision)))) {
43
string fileName = "../data/" + Phase1End + "_" +
44
lexical_cast<string>(scene->iter) + ".xml";
45
cerr << "saving snapshot: " << fileName << " ...";
46
Omega::instance().saveSimulation(fileName);
47
pressureVariationActivated = true;
52
void SampleCapillaryPressureEngine::action()
55
TriaxialStressController::action();
56
if (pressureVariationActivated)
58
if (scene->iter % 100 == 0) cerr << "pressure variation!!" << endl;
60
if ((Pressure>=0) && (Pressure<=1000000000)) Pressure += PressureVariation;
61
capillaryCohesiveLaw->CapillaryPressure = Pressure;
63
capillaryCohesiveLaw->fusionDetection = fusionDetection;
64
capillaryCohesiveLaw->binaryFusion = binaryFusion;
66
else { capillaryCohesiveLaw->CapillaryPressure = Pressure;
67
capillaryCohesiveLaw->fusionDetection = fusionDetection;
68
capillaryCohesiveLaw->binaryFusion = binaryFusion;}
69
if (scene->iter % 100 == 0) cerr << "capillary pressure = " << Pressure << endl;
70
capillaryCohesiveLaw->scene=scene;;
71
capillaryCohesiveLaw->action();
72
UnbalancedForce = ComputeUnbalancedForce(scene);