2010/4/21 chiara modenese <[email protected]> > > > On 21 April 2010 16:40, Bruno Chareyre <[email protected]> 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 : [email protected] >> Unsubscribe : >> https://launchpad.net/~yade-users<https://launchpad.net/%7Eyade-users> >> More help : https://help.launchpad.net/ListHelp >> > >
_______________________________________________ Mailing list: https://launchpad.net/~yade-users Post to : [email protected] Unsubscribe : https://launchpad.net/~yade-users More help : https://help.launchpad.net/ListHelp

