OpenLB 1.7
Loading...
Searching...
No Matches
permeability.h
Go to the documentation of this file.
1/* This file is part of the OpenLB library
2 *
3 * Copyright (C) 2023 Nicolas Hafen Mathias J. Krause
4 * E-mail contact: info@openlb.net
5 * The most recent release of OpenLB can be downloaded at
6 * <http://www.openlb.net/>
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public
19 * License along with this program; if not, write to the Free
20 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21 * Boston, MA 02110-1301, USA.
22*/
23
24#ifndef PERMEABILITY_H
25#define PERMEABILITY_H
26
27
28namespace olb {
29
30
31template<typename T, bool check=false>
32T getConfinedPermeability( T latticeViscosity, T latticeRelaxationTime, T physDeltaX,
33 T charPhysLength, T physPermeability )
34{
35 T minPermeabiliy = physDeltaX * physDeltaX * latticeViscosity * latticeRelaxationTime;
36 if constexpr (check){
37 if ( physPermeability >= minPermeabiliy ){
38 throw std::invalid_argument( "Error: Min permeability exceeded!" );
39 return 1.0;
40 } else {
41 return 1. - minPermeabiliy / physPermeability;
42 }
43 } else {
44 return 1. - minPermeabiliy / physPermeability;
45 }
46
47 __builtin_unreachable();
48}
49
50template<typename T, typename DESCRIPTOR, bool check=false>
51T getConfinedPermeability( const UnitConverter<T,DESCRIPTOR>& converter, T physPermeability ){
52 return getConfinedPermeability<T,check>(
53 converter.getLatticeViscosity(), converter.getLatticeRelaxationTime(),
54 converter.getPhysDeltaX(), converter.getCharPhysLength(),
55 physPermeability );
56}
57
58template<typename T>
59T getPhysPermeability( T latticeViscosity, T latticeRelaxationTime, T physDeltaX,
60 T charPhysLength, T confinedPermeability )
61{
62 T minPermeabiliy = physDeltaX * physDeltaX * latticeViscosity * latticeRelaxationTime;
63 return minPermeabiliy / (1. - confinedPermeability);
64}
65
66template<typename T, typename DESCRIPTOR, bool check=false>
67T getPhysPermeability( const UnitConverter<T,DESCRIPTOR>& converter, T confinedPermeability ){
68 return getPhysPermeability<T>(
69 converter.getLatticeViscosity(), converter.getLatticeRelaxationTime(),
70 converter.getPhysDeltaX(), converter.getCharPhysLength(),
71 confinedPermeability );
72}
73
74} // namespace olb
75
76#endif
Conversion between physical and lattice units, as well as discretization.
constexpr T getLatticeViscosity() const
conversion from physical to lattice viscosity
constexpr T getCharPhysLength() const
return characteristic length in physical units
constexpr T getLatticeRelaxationTime() const
return relaxation time in lattice units
constexpr T getPhysDeltaX() const
returns grid spacing (voxel length) in m
Top level namespace for all of OpenLB.
T getPhysPermeability(T latticeViscosity, T latticeRelaxationTime, T physDeltaX, T charPhysLength, T confinedPermeability)
T getConfinedPermeability(T latticeViscosity, T latticeRelaxationTime, T physDeltaX, T charPhysLength, T physPermeability)