~yade-dev/yade/0.80

« back to all changes in this revision

Viewing changes to pkg/dem/SampleCapillaryPressureEngine.cpp

  • Committer: Anton Gladky
  • Date: 2012-05-02 21:50:42 UTC
  • Revision ID: gladky.anton@gmail.com-20120502215042-v1fa9r65usqe7kfk
0.80.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*************************************************************************
 
2
*  Copyright (C) 2006 by Luc Scholtes                                    *
 
3
*  luc.scholtes@hmg.inpg.fr                                              *
 
4
*                                                                        *
 
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
*************************************************************************/
 
8
 
 
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>
 
16
 
 
17
using namespace boost;
 
18
using namespace std;
 
19
 
 
20
YADE_PLUGIN((SampleCapillaryPressureEngine));
 
21
CREATE_LOGGER(SampleCapillaryPressureEngine);
 
22
 
 
23
SampleCapillaryPressureEngine::~SampleCapillaryPressureEngine()
 
24
{
 
25
}
 
26
 
 
27
void SampleCapillaryPressureEngine::updateParameters()
 
28
{
 
29
        UnbalancedForce = ComputeUnbalancedForce(scene);
 
30
 
 
31
        if (!Phase1 && UnbalancedForce<=StabilityCriterion && !pressureVariationActivated) {
 
32
          
 
33
          internalCompaction = false;
 
34
          Phase1 = true;
 
35
        }
 
36
        
 
37
        if ( Phase1 && UnbalancedForce<=StabilityCriterion && !pressureVariationActivated) {
 
38
          
 
39
          Real S = meanStress;
 
40
          cerr << "Smoy = " << meanStress << endl;
 
41
          if ((S > (sigma_iso - (sigma_iso*SigmaPrecision))) && (S < (sigma_iso + (sigma_iso*SigmaPrecision)))) {
 
42
            
 
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;
 
48
          }     
 
49
        }
 
50
}
 
51
        
 
52
void SampleCapillaryPressureEngine::action()
 
53
{       
 
54
        updateParameters();
 
55
        TriaxialStressController::action();
 
56
        if (pressureVariationActivated)         
 
57
                {
 
58
                        if (scene->iter % 100 == 0) cerr << "pressure variation!!" << endl;
 
59
                
 
60
                        if ((Pressure>=0) && (Pressure<=1000000000)) Pressure += PressureVariation;
 
61
                        capillaryCohesiveLaw->CapillaryPressure = Pressure;
 
62
 
 
63
                        capillaryCohesiveLaw->fusionDetection = fusionDetection;
 
64
                        capillaryCohesiveLaw->binaryFusion = binaryFusion;
 
65
                }               
 
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);
 
73
}
 
74