← Back to team overview

yade-users team mailing list archive

Re: Energy dissipation

 

2010/4/21 chiara modenese <c.modenese@xxxxxxxxx>

>
>
> On 21 April 2010 16:40, Bruno Chareyre <bruno.chareyre@xxxxxxxxxxx> wrote:
>
>>
>>  2. current "trial" shear strain εT is computed*, with corresponding
>>> trial stress σT(εT); for admissible state f(σN,|σT(εT)|)<=0, there is no
>>> dissipation and the contact is done for this timestep. In case of
>>> non-admissible f(σN,|σT|)>0, shear strain is modified** to have new
>>> value εT2 so that f(σN,|σT(εT2)|=0; dissipated energy increment is |
>>> εT-εT2|*σT(εT2), which is added to cummulative dissipated energy. In the
>>> Cpm model, plastic flow rule is non-associated and σN doesn't have to be
>>> recomputed again, after changing σT.***
>>>
>>>
>>>> Worth than that : unload the normal component with null shear velocity.
>>>> It will meet the plasticity criterion at some point (assuming purely
>>>> frictional law). Some elastic energy will be transfered to plasticity with
>>>> total dUs=0. I see this special case only now... I'll have to tackle this
>>>> even for FrictPhys_basic.
>>>>
>>>>
>>>
>>> That works just fine in the scenario described above, as far as I see.
>>>
>>>
>>>
>> Interesting. For forces, I used exactly the same formulae that you write
>> for strain/stress, and indeed it should work just fine in the special case
>> described.
>>
>> if( shearForce.SquaredLength() > maxFs ){
>>       Real ratio = Mathr::Sqrt(maxFs) / shearForce.Length();
>>       if (traceEnergy) {//define the plastic work input and increment the
>> total plastic energy dissipated
>>           plasticDissipation +=
>>
>> (shearDisp+(1/currentContactPhysics->ks)*(shearForce-prevForce))//plastic
>> disp.
>>               .Dot(shearForce);//active force
>>       }
>>
>>
>> For elastic energy, I don't see any problem(*) in my case :
>>
>> Real Law2_ScGeom_FrictPhys_Basic::elasticEnergy()
>> {
>>   Real energy=0;
>>   FOREACH(const shared_ptr<Interaction>& I, *scene->interactions){
>>       if(!I->isReal()) continue;
>>       FrictPhys* phys =
>> dynamic_cast<FrictPhys*>(I->interactionPhysics.get());<----------------------------------
>> see (*)
>>       if(phys) {
>>           energy += 0.5*(phys->normalForce.SquaredLength()/phys->kn +
>> phys->shearForce.SquaredLength()/phys->ks);}
>>   }
>>   return energy;
>> }
>>
>> BTW, a c++ question. Why are looping here over all the interactions if
this is done in the interaction dispatcher? Sorry I am still learning :)
Law2_ScGeom_FrictPhys_Basic is not inheriting from a periodic engine..
cheers, Chiara



> I'm compiling and commiting in minutes. I changed "void updateShear" to
>> "Vector3r updateShear", to avoid computing shear displacement twice.
>>
> Great, thanks Bruno!
>
>> (*) I used to use classIndex to check types, instead of dynamic_casts. Is
>> it still possible? What is the best way in your opinion?
>>
>> Bruno
>>
>>
>>
>>
>>
>> _______________________________________________
>> Mailing list: https://launchpad.net/~yade-users<https://launchpad.net/%7Eyade-users>
>> Post to     : yade-users@xxxxxxxxxxxxxxxxxxx
>> Unsubscribe : https://launchpad.net/~yade-users<https://launchpad.net/%7Eyade-users>
>> More help   : https://help.launchpad.net/ListHelp
>>
>
>

Follow ups

References