private function spongeLayer_radial_polyn5_for_treeids(me, treeIds, tree, nDim, n) result(res)
This function calculates the sigma for the radial spongelayer
polynomial order 5 from treeids.
Sponge profile:
where, \sigma_A - sponge strength, L - thickness, x0 - start of sponge.
Profile is taken from:
Xu, Hui; Sagaut, Pierre (2013): Analysis of the absorbing layers for the
weakly-compressible lattice Boltzmann methods. In Journal of Computational
Physics 245, pp. 14-42. DOI: 10.1016/j.jcp.2013.02.051.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Nodes of different colours represent the following:
Solid arrows point from a procedure to one which it calls. Dashed
arrows point from an interface to procedures which implement that interface.
This could include the module procedures in a generic interface or the
implementation in a submodule of an interface in a parent module.
Source Code
function spongeLayer_radial_polyn5_for_treeids(me,treeids,tree,nDim,n)&&result(res)! --------------------------------------------------------------------------!> Spatial sponge layer to evaluatetype(tem_spongeLayer_radial_type)::me!> Number of arrays to returninteger,intent(in)::n!> global treelm meshtype(treelmesh_type),intent(in)::tree!> treeIds of elements in given levelinteger(kind=long_k),intent(in)::treeIds(n)!> Dimensioninteger,intent(in)::nDim!> return valuereal(kind=rk)::res(n)! --------------------------------------------------------------------------integer::ireal(kind=rk)::rad,outer_radius,sigma,vec(3),coord(3)real(kind=rk)::const_fac! --------------------------------------------------------------------------outer_radius=me%radius+me%thicknessvec=0.0_rkconst_fac=3125_rk/(256_rk*me%thickness**5)do i=1,n!barycentric coordinatecoord=tem_BaryOfId(tree,treeIds(i))vec(1:nDim)=coord(1:nDim)-me%origin(1:nDim)rad=sqrt(vec(1)**2+vec(2)**2+vec(3)**2)if(rad>me%radius.and.rad<outer_radius)thensigma=const_fac*(outer_radius-rad)*(rad-me%radius)**4res(i)=sigma*me%dampFactorelse if(rad>outer_radius)thenres(i)=me%dampFactorelseres(i)=0.0_rkend if end do end function spongeLayer_radial_polyn5_for_treeids