
[Sponsors] 
October 23, 2012, 18:47 
anisotropic porous media in OpenFOAM

#1 
Member
,...
Join Date: Apr 2011
Posts: 92
Rep Power: 7 
Does anyone have any experience in simulating flow in anisotropic porous media in OF? I mean simulations in which the permeability in x direction is different from the permeability in y direction.
My main problem is that when I am adding the darcy soource term as + ((1/Perm)*(fvm::Sp(Visc,U))) I do not know how to tell the OF that Perm will be different based on the direction! comments are appreciated! 

October 24, 2012, 04:48 

#2 
Senior Member
Nima Samkhaniani
Join Date: Sep 2009
Location: Tehran, Iran
Posts: 1,215
Blog Entries: 1
Rep Power: 17 
hi mahdi
is in this condition permeability ("Prem") a vectorField? if yes, you can define a volVectorField for Prem, then assign your directional variation with setFields in 0 folder 

October 24, 2012, 09:37 
Permeability Vector

#3 
Member
,...
Join Date: Apr 2011
Posts: 92
Rep Power: 7 
Hi nimasam
Thanks for the comment. But, if I define the permeability as volVectorField then, when I want to multiply it by velocity what kind of vector multiplication do I have to use; definitely not inner or cross product. Right? 

October 24, 2012, 09:52 

#4 
Senior Member
Hisham Elsafti
Join Date: Apr 2011
Location: Braunschweig, Germany
Posts: 252
Blog Entries: 10
Rep Power: 10 
Hi Mahdi
In the case of nonisotropic permeability, the permeability is a symmetric tensor. For anisotropy, you should assign zero offdiagonal values and be left with kxx, kyy and kzz. Hope this helps! Regards Hisham 

October 24, 2012, 09:57 
multiplying permeability tensor and velocity vector

#5 
Member
,...
Join Date: Apr 2011
Posts: 92
Rep Power: 7 
Dear Hisham
Thanks for the comment. I know that true, but, as I mentioned in my previous post, I am not sure how to multiply permeability tensor and velocity vector in the momentum equation. What kind of multiplication operator do I have to use? 

October 24, 2012, 10:26 

#6 
Senior Member
Nima Samkhaniani
Join Date: Sep 2009
Location: Tehran, Iran
Posts: 1,215
Blog Entries: 1
Rep Power: 17 
dear mahdi,
if you want to divide Ux/Kx , Uy/Ky , Uz/Kz then i guess you may want to use some thing like this : forAll(U,celli) { S[celli].x() = U[celli].x()/Kx[celli].x(); ........ } 

October 24, 2012, 10:35 

#7 
Senior Member
Hisham Elsafti
Join Date: Apr 2011
Location: Braunschweig, Germany
Posts: 252
Blog Entries: 10
Rep Power: 10 
I think you first would have to define the tensor as k (kxx 0 0 kyy 0 kzz), then get the inverse of the tensor as inv(k). The product should be an inner product: + (inv(k) & (fvm::Sp(Visc,U))
I would appreciate it if you report what happened! Best regards, Hisham 

October 24, 2012, 10:55 

#8 
Member
,...
Join Date: Apr 2011
Posts: 92
Rep Power: 7 
Dear Hisham
I have define a tensor named PermTenInv which has diagonal terms of 1/kxx,1/kyy and 1/kzz. Now when i am doing explicit calculations in form of + ((PermTen) & (fvc::Sp(Visc,U))) there is no error. However, for implicit calculations in form of ((PermTen) & (fvm::Sp(Visc,U))) I get the following error  BR1IM003.C:84:40: error: no match for ‘operator&’ in ‘PermTen & Foam::fvm::Sp(const Foam::dimensionedScalar&, Foam::GeometricField<Type, Foam::fvPatchField, Foam::volMesh>&) [with Type = Foam::Vector<double>, Foam::dimensionedScalar = Foam::dimensioned<double>](((Foam::GeometricField<Foam::Vector<double>, Foam::fvPatchField, Foam::volMesh>&)(& U)))’ /opt/openfoam171/src/OpenFOAM/lnInclude/wordI.H:167:19: note: candidates are: Foam::word Foam:perator&(const Foam::word&, const Foam::word&) /opt/openfoam171/src/OpenFOAM/lnInclude/dimensionSet.H:273:29: note: Foam::dimensionSet Foam:perator&(const Foam::dimensionSet&, const Foam::dimensionSet&) /opt/openfoam171/src/finiteVolume/lnInclude/readPISOControls.H:8:10: warning: unused variable ‘momentumPredictor’ /opt/openfoam171/src/finiteVolume/lnInclude/readPISOControls.H:11:10: warning: unused variable ‘transonic’ /opt/openfoam171/src/finiteVolume/lnInclude/readPISOControls.H:14:9: warning: unused variable ‘nOuterCorr’ make: *** [Make/linux64GccDPOpt/BR1IM003.o] Error 1  Unfortunately, I have to discretise this source term implicitly. Any ideas how to fix this error? 

October 24, 2012, 11:23 

#9 
Senior Member
Hisham Elsafti
Join Date: Apr 2011
Location: Braunschweig, Germany
Posts: 252
Blog Entries: 10
Rep Power: 10 
Dear Mahdi,
It is really sad that this did not work directly. You can report this as a bug (assuming a similar feature should be available). If you are highly motivated for your problem you can try to add a new fvm::Sp function to fvmSup.C/.H that can take a "dimensionedVector & sp" argument. You then have to dig deep into OpenFOAM's number crunching mechanisms and figure out which elements of fvm.diag() should you multiply by which component. Here ends my ideas. I hope you can find an easier solution! Code:
template<class Type> 00153 Foam::tmp<Foam::fvMatrix<Type> > 00154 Foam::fvm::Sp 00155 ( 00156 const dimensionedScalar& sp, 00157 const GeometricField<Type, fvPatchField, volMesh>& vf 00158 ) 00159 { 00160 const fvMesh& mesh = vf.mesh(); 00161 00162 tmp<fvMatrix<Type> > tfvm 00163 ( 00164 new fvMatrix<Type> 00165 ( 00166 vf, 00167 dimVol*sp.dimensions()*vf.dimensions() 00168 ) 00169 ); 00170 fvMatrix<Type>& fvm = tfvm(); 00171 00172 fvm.diag() += mesh.V()*sp.value(); 00173 00174 return tfvm; 00175 } Hisham 

October 24, 2012, 12:44 

#10 
Member
,...
Join Date: Apr 2011
Posts: 92
Rep Power: 7 
THnaks Hisham. I am going to discuss it in a new post to be sure that this is a bug in OF.


September 16, 2013, 09:05 

#11 
Member
Anja Miehe
Join Date: Dec 2009
Location: Freiberg / Germany
Posts: 48
Rep Power: 9 
Hello Mhadi,
is there any progress in the subject? I am coding something similar for solidification and encounter the same problem. Regards, Anja 

April 7, 2016, 03:34 

#12 
New Member
Vitor Geraldes
Join Date: Dec 2009
Location: Lisbon, Portugal
Posts: 19
Rep Power: 9 
:::::::::::::::::::::::::::::::::::::::::
Last edited by vitor.geraldes@ist.utl.pt; April 8, 2016 at 19:48. 

July 25, 2016, 16:20 
Any solution?

#13 
New Member
Mateus Palharini Schwalbert
Join Date: May 2011
Posts: 18
Rep Power: 8 
Hi y'all,
I also need to implement an implicit anisotropic source term. Did anyone find a way to do that? fvm::Sp seems to not accept a tensor as coefficient... thanks 

July 25, 2016, 17:14 

#14 
New Member
Vitor Geraldes
Join Date: Dec 2009
Location: Lisbon, Portugal
Posts: 19
Rep Power: 9 
Try to create an homogeneous hydrodynamic resistance and then subtract a given fraction (fAniso) in the direction nT (unitary vector):
+ fvm::Sp(Rmush,U)  fAniso*Rmush*(U&nT)*nT if fAniso is 1, the resistance in the direction nT is zero, if fAniso is 0 then you have no anisotropy. 

July 25, 2016, 17:29 
Didn't get it

#15 
New Member
Mateus Palharini Schwalbert
Join Date: May 2011
Posts: 18
Rep Power: 8 
Thanks for the reply, Vitor, but I didn't get it.
In your suggestion, what is Rmush? Because if it is a tensor, it does not work... Maybe what you're suggesting is something I've already tried: to implement that in 2 terms, one implicit and isotropic, and one explicit and anisotric. But in my case it does not work, because the largest part of the resistance is specifically the anisotropic part, and any explicit treatment of that refuses to converge... 

July 25, 2016, 17:59 

#16 
New Member
Vitor Geraldes
Join Date: Dec 2009
Location: Lisbon, Portugal
Posts: 19
Rep Power: 9 
Rmush is a volScalarField which may be computed for instance by the Kozeny Carman correlation.


July 25, 2016, 23:14 
How to code the anisotropic heterogeneous source term as implicit?

#17 
New Member
Mateus Palharini Schwalbert
Join Date: May 2011
Posts: 18
Rep Power: 8 
Ok, but this way the anisotropic part is still explicit, right? Any way to code the anisotropic heterogeneous source term as implicit?


Thread Tools  
Display Modes  


Similar Threads  
Thread  Thread Starter  Forum  Replies  Last Post 
Can CFX treat anisotropic porous media?  beginer  CFX  2  May 8, 2013 02:10 
Multiphase Porous Media Flow  Convergence Issues  VT_Bromley  FLUENT  5  March 23, 2011 11:38 
Discrete phase modeling on porous media  magnounibo  FLUENT  0  April 9, 2009 08:18 
Data for anisotropic porous media  Arunav Gogoi  Main CFD Forum  1  March 28, 2006 09:28 
Porous media and convergence  A.Joshi  FLUENT  0  October 21, 2003 22:09 