Author: chareyre
Date: 2009-01-05 14:57:17 +0100 (Mon, 05 Jan 2009)
New Revision: 1607

Added:
   trunk/pkg/dem/Engine/EngineUnit/SimpleElasticRelationshipsWater.cpp
   trunk/pkg/dem/Engine/EngineUnit/SimpleElasticRelationshipsWater.hpp
Log:

1. Add a missing class (for the capillarity model), this fixes a compilation 
error in the previous commit due to the missing files.



Added: trunk/pkg/dem/Engine/EngineUnit/SimpleElasticRelationshipsWater.cpp
===================================================================
--- trunk/pkg/dem/Engine/EngineUnit/SimpleElasticRelationshipsWater.cpp 
2009-01-05 11:25:40 UTC (rev 1606)
+++ trunk/pkg/dem/Engine/EngineUnit/SimpleElasticRelationshipsWater.cpp 
2009-01-05 13:57:17 UTC (rev 1607)
@@ -0,0 +1,120 @@
+/*************************************************************************
+*  Copyright (C) 2007 by Bruno CHAREYRE                                 *
+*  [email protected]                                        *
+*                                                                        *
+*  This program is free software; it is licensed under the terms of the  *
+*  GNU General Public License v2 or later. See file LICENSE for details. *
+*************************************************************************/
+
+#include"SimpleElasticRelationshipsWater.hpp"
+#include<yade/pkg-dem/SpheresContactGeometry.hpp>
+#include <yade/pkg-dem/CapillaryParameters.hpp>
+#include<yade/pkg-dem/ElasticContactInteraction.hpp>
+#include<yade/pkg-dem/SDECLinkGeometry.hpp> // FIXME - I can't dispatch by 
SDECLinkGeometry <-> SpheresContactGeometry !!?
+#include<yade/pkg-dem/SDECLinkPhysics.hpp> // FIXME
+#include<yade/pkg-dem/BodyMacroParameters.hpp>
+#include<yade/core/Omega.hpp>
+#include<yade/core/MetaBody.hpp>
+
+
+SimpleElasticRelationshipsWater::SimpleElasticRelationshipsWater()
+{
+
+}
+
+
+void SimpleElasticRelationshipsWater::registerAttributes()
+{
+       
+}
+
+
+
+
+void SimpleElasticRelationshipsWater::go( const 
shared_ptr<PhysicalParameters>& b1 //BodyMacroParameters
+                                       , const shared_ptr<PhysicalParameters>& 
b2 // BodyMacroParameters
+                                       , const shared_ptr<Interaction>& 
interaction)
+{
+       
+       SpheresContactGeometry* interactionGeometry = 
YADE_CAST<SpheresContactGeometry*>(interaction->interactionGeometry.get());
+       
+       if(interactionGeometry) // so it is SpheresContactGeometry  - NON 
PERMANENT LINK
+       {
+//cerr << "interactionGeometry" << endl;
+               if( interaction->isNew)
+               {
+//cerr << "interaction->isNew" << endl;
+                       const shared_ptr<BodyMacroParameters>& sdec1 = 
YADE_PTR_CAST<BodyMacroParameters>(b1);
+                       const shared_ptr<BodyMacroParameters>& sdec2 = 
YADE_PTR_CAST<BodyMacroParameters>(b2);
+                       
+                       if (!interaction->interactionPhysics) 
interaction->interactionPhysics = shared_ptr<CapillaryParameters>(new 
CapillaryParameters());
+//                     interaction->interactionPhysics = 
shared_ptr<CapillaryParameters>(new CapillaryParameters());
+                       const shared_ptr<CapillaryParameters>& contactPhysics = 
YADE_PTR_CAST<CapillaryParameters>(interaction->interactionPhysics);
+
+                       Real Ea         = sdec1->young;
+                       Real Eb         = sdec2->young;
+                       Real Va         = sdec1->poisson;
+                       Real Vb         = sdec2->poisson;
+                       Real Da         = interactionGeometry->radius1; // 
FIXME - multiply by factor of sphere interaction distance (so sphere interacts 
at bigger range that its geometrical size)
+                       Real Db         = interactionGeometry->radius2; // 
FIXME - as above
+                       Real fa         = sdec1->frictionAngle;
+                       Real fb         = sdec2->frictionAngle;
+
+                       //Real Eab      = 2*Ea*Eb/(Ea+Eb);
+                       //Real Vab      = 2*Va*Vb/(Va+Vb);
+
+                       Real Dinit      = Da+Db;                        // 
FIXME - is it just a sum?
+                       //Real Sinit    = Mathr::PI * std::pow( std::min(Da,Db) 
, 2);
+
+                       Real Kn = 2*Ea*Da*Eb*Db/(Ea*Da+Eb*Db);//harmonic 
average of two stiffnesses
+                       Real Ks = 
2*Ea*Da*Va*Eb*Db*Vb/(Ea*Da*Va+Eb*Db*Va);//harmonic average of two stiffnesses 
with ks=V*kn for each sphere
+
+
+       //This is the formula used in PFC-3D
+       //
+       //Real Kn = 4 * ((Ea+Eb)*0.5) * ((Da+Db)*0.5);
+       //Real Ks = Kn/2.0;
+
+
+                       contactPhysics->initialKn                       = Kn;
+                       contactPhysics->initialKs                       = Ks;
+//cerr << "Ks: " <<       contactPhysics->initialKs                    << endl;
+                       contactPhysics->frictionAngle                   = 
std::min(fa,fb); // FIXME - this is actually a waste of memory space, just like 
initialKs and initialKn
+//cerr << "contactPhysics->frictionAngle " << contactPhysics->frictionAngle << 
" "<< fa << " " << fb << endl;
+                       contactPhysics->tangensOfFrictionAngle          = 
std::tan(contactPhysics->frictionAngle); 
+//cerr << "contactPhysics->tangensOfFrictionAngle " << 
contactPhysics->tangensOfFrictionAngle << endl;
+
+                       contactPhysics->prevNormal                      = 
interactionGeometry->normal;
+                       contactPhysics->initialEquilibriumDistance      = 
Dinit;                        
+
+                       contactPhysics->kn = contactPhysics->initialKn;
+                       contactPhysics->ks = contactPhysics->initialKs;
+                       contactPhysics->equilibriumDistance = 
contactPhysics->initialEquilibriumDistance;
+
+               }
+               
+               /*else
+               {       // FIXME - are those lines necessary ???? what they are 
doing in fact ???
+                       ElasticContactInteraction* contactPhysics = 
YADE_CAST<ElasticContactInteraction*>(interaction->interactionPhysics.get());
+
+                       contactPhysics->kn = contactPhysics->initialKn;
+                       contactPhysics->ks = contactPhysics->initialKs;
+                       contactPhysics->equilibriumDistance = 
contactPhysics->initialEquilibriumDistance;
+               }*/     
+               
+       }
+       else cerr << "Problem here (PERMANENT LINK)" << endl;
+//     else   // this is PERMANENT LINK because previous dynamic_cast failed, 
dispatcher should do this job
+//     {
+//             SDECLinkGeometry* sdecLinkGeometry =  
dynamic_cast<SDECLinkGeometry*>(interaction->interactionGeometry.get());
+//             if (sdecLinkGeometry)
+//             {               
+//                     SDECLinkPhysics* linkPhysics = 
static_cast<SDECLinkPhysics*>(interaction->interactionPhysics.get());
+//     //              linkPhysics->frictionAngle              = ?? //FIXME - 
uninitialized 
+//                     linkPhysics->kn                         = 
linkPhysics->initialKn;
+//                     linkPhysics->ks                         = 
linkPhysics->initialKs;
+//                     linkPhysics->equilibriumDistance        = 
linkPhysics->initialEquilibriumDistance;
+//             }
+//     }
+};
+YADE_PLUGIN();


Property changes on: 
trunk/pkg/dem/Engine/EngineUnit/SimpleElasticRelationshipsWater.cpp
___________________________________________________________________
Name: svn:executable
   + *

Added: trunk/pkg/dem/Engine/EngineUnit/SimpleElasticRelationshipsWater.hpp
===================================================================
--- trunk/pkg/dem/Engine/EngineUnit/SimpleElasticRelationshipsWater.hpp 
2009-01-05 11:25:40 UTC (rev 1606)
+++ trunk/pkg/dem/Engine/EngineUnit/SimpleElasticRelationshipsWater.hpp 
2009-01-05 13:57:17 UTC (rev 1607)
@@ -0,0 +1,35 @@
+/*************************************************************************
+*  Copyright (C) 2007 by Bruno CHAREYRE                                 *
+*  [email protected]                                        *
+*                                                                        *
+*  This program is free software; it is licensed under the terms of the  *
+*  GNU General Public License v2 or later. See file LICENSE for details. *
+*************************************************************************/
+
+#ifndef SIMPLECONTACTMODELWATER_HPP
+#define SIMPLECONTACTMODELWATER_HPP
+
+#include<yade/pkg-common/InteractionPhysicsEngineUnit.hpp>
+
+class SimpleElasticRelationshipsWater : public InteractionPhysicsEngineUnit
+{
+       public :
+               SimpleElasticRelationshipsWater();
+
+               virtual void go(        const shared_ptr<PhysicalParameters>& 
b1,
+                                       const shared_ptr<PhysicalParameters>& 
b2,
+                                       const shared_ptr<Interaction>& 
interaction);
+
+       protected :
+               virtual void registerAttributes();
+
+       FUNCTOR2D(BodyMacroParameters,BodyMacroParameters);
+       REGISTER_CLASS_NAME(SimpleElasticRelationshipsWater);
+       REGISTER_BASE_CLASS_NAME(InteractionPhysicsEngineUnit);
+
+};
+
+REGISTER_SERIALIZABLE(SimpleElasticRelationshipsWater);
+
+#endif // SIMPLECONTACTMODEL_HPP
+


Property changes on: 
trunk/pkg/dem/Engine/EngineUnit/SimpleElasticRelationshipsWater.hpp
___________________________________________________________________
Name: svn:executable
   + *


_______________________________________________
Mailing list: https://launchpad.net/~yade-dev
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yade-dev
More help   : https://help.launchpad.net/ListHelp

Reply via email to