CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (http://www.cfd-online.com/Forums/openfoam-programming-development/)
-   -   "Coulomb"-type BC (http://www.cfd-online.com/Forums/openfoam-programming-development/69842-coulomb-type-bc.html)

 ckroener November 6, 2009 07:21

"Coulomb"-type BC

Hello Foamers,

i would like to use a Coulomb-Type BC for the simulation of a collapse of a granular column with interFoam.

Therefore, i want to mimic a kind of stick-slip BC by utilizing the partSlip BC and introducing a calculated valueFraction.

The flow at the boundary should feel an additional friction term F_c=-u_t/|u_t|*tan(delta)*N, where delta is the bottom friction angle, N the normal force acting on the Boundary and u_t is the velocity at the patch.

The change in velocity due to this force could be callculated, by assuming free slip, and correcting the velocity by:

u_t=u_fs - deltaT*u_fs/|u_fs| *tan(delta)*pressure*area
u_t=u_fs*(1-deltaT/|u_fs|*tan(delta)*pressure*area)

so i would like to calculte the valueFraction by:

Code:

```if(deltaT/|u_fs|*tan(delta)*pressure*area>=0){ valueFraction=deltaT/|u_fs|*tan(delta)*pressure*area } else{ valueFraction=0;}```
Now I have some questions:
1) Is it legal to handle the bottom friction in this way? Or is there a better way to introduce an bottom frition law?

2) I'm new to OpenFoam and, therefore, have some problems with the fundamental basics of implementing the BC.

a) Can I use

Code:

```    const Field<scalar>& magS=patch().magSf();     const fvPatchField<scalar>& pp=patch().lookupPatchField<volScalarField, scalar> ("p");     const fvPatchField<scalar>& rhop=patch().lookupPatchField<volScalarField, scalar>("rho");     scalar dt=runTime.deltaT();```
to get the the values of p,rho and the area of the patch?

b) And to calculate the valueFraction could I use:

Code:

```    if(dt/mag(*this)*valueFraction_*magS*pp*rhop>=0){     valueFractionCalc_ = dt/mag(*this)*tandelta_*magS*pp*rhop;     }     else{valueFractionCalc_ =0;}```

Thanks a lot!

Christian

 ckroener November 12, 2009 13:55

The code is now partly working, i have now used:
Code:

```    const Field<scalar>& pp = this->patch().lookupPatchField     (         "p",         reinterpret_cast<const volScalarField*>(NULL),         reinterpret_cast<const scalar*>(NULL)     );     scalar deltaTime = this->db().time().deltaT().value();     scalarField area = this->patch().magSf();     Field<scalar> magVel=max(1e-30,mag((*this)));     Field<scalar> newValueFraction_;     newValueFraction_ = min(1.,max(0.,tanDe_*deltaTime/magVel*pp*area));```
so now i have created a newValueFracation_ which uses a tanDe_ read from dictionary. The Simulation seems to run fine, but now I have some problems with paraFoam...
But I will try to check if the BC is somehow meaningfull :rolleyes:

Christian

 riespt November 23, 2015 10:05

Dear Christian
I am also interested in this coulomb-type slip bc. I guess you started from the partialSlipfvPatchField.C/.H and modified the "evaluate" member function? are there any caveats with this code, i.e. is it "meaningful", as you decribe in your last post?