From 94d3e79a8617f88dc0219cfdeedfa3147833719d Mon Sep 17 00:00:00 2001 From: Adrian Kummerlaender Date: Mon, 24 Jun 2019 14:43:36 +0200 Subject: Initialize at openlb-1-3 --- src/dynamics/interactionPotential.hh | 194 +++++++++++++++++++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 src/dynamics/interactionPotential.hh (limited to 'src/dynamics/interactionPotential.hh') diff --git a/src/dynamics/interactionPotential.hh b/src/dynamics/interactionPotential.hh new file mode 100644 index 0000000..70f568a --- /dev/null +++ b/src/dynamics/interactionPotential.hh @@ -0,0 +1,194 @@ +/* This file is part of the OpenLB library + * + * Copyright (C) 2015 Peter Weisbrod + * E-mail contact: info@openlb.net + * The most recent release of OpenLB can be downloaded at + * + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write to the Free + * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#ifndef INTERACTION_POTENTIAL_HH +#define INTERACTION_POTENTIAL_HH + + +#include "dynamics/interactionPotential.h" + + +namespace olb { + + + +template +ShanChen93::ShanChen93(T rhoZero) : AnalyticalF1D(1), _rhoZero(rhoZero) +{ + this->getName() = "ShanChen93"; +} + +template +bool ShanChen93::operator()(T psi[], const S rho[]) +{ + psi[0]=sqrt(_rhoZero)*(1-exp(-(rho[0]/_rhoZero))); + return true; +} + + +template +ShanChen94::ShanChen94(T rhoZero, T psiZero) : AnalyticalF1D(1), _rhoZero(rhoZero), _psiZero(psiZero) +{ + this->getName() = "ShanChen94"; +} + +template +bool ShanChen94::operator()(T psi[], const S rho[]) +{ + psi[0]=_psiZero*exp(-_rhoZero/rho[0]); + return true; +} + + +template +PengRobinson::PengRobinson(T G, T acentricFactor, T a, T b, T tr) : AnalyticalF1D(1), _G(G), _acentricFactor(acentricFactor), _a(a), _b(b) +{ + _R = 1.; + //a=0.45724*R*R*tc*tc/pc; + //b=0.0778*R*tc/pc; + _tc = 0.0778/0.45724*_a/_b/_R; + //T pc = 0.0778*_R*tc/_b; + //T rhoc = pc/0.307/_R/tc; + _t = _tc*tr; + //Zc=0.307 Tc=0.072922004 pc=0.059569985 rhoc=2.6609121 + _alpha = 1. + (0.37464+1.54226*_acentricFactor-0.26992*_acentricFactor*_acentricFactor)*(1.-sqrt(_t/_tc)); + _alpha = _alpha*_alpha; + this->getName() = "PengRobinson"; +} + +template +bool PengRobinson::operator()(T psi[], const S rho[]) +{ + T p = (rho[0]*_R*_t/(1.-_b*rho[0]))-(_a*_alpha*rho[0]*rho[0]/(1.+2.*_b*rho[0]-_b*_b*rho[0]*rho[0])); + psi[0] = sqrt(6.*(p-rho[0]/3.)/_G); + return true; +} + +// second operator allows to incorporate temperature changes +template +bool PengRobinson::operator()(T psi[], const S rho[], const S t[]) +{ + _t = t[0]; + _alpha = 1. + (0.37464+1.54226*_acentricFactor-0.26992*_acentricFactor*_acentricFactor)*(1.-sqrt(_t/_tc)); + _alpha = _alpha*_alpha; + T p = (rho[0]*_R*_t/(1.-_b*rho[0]))-(_a*_alpha*rho[0]*rho[0]/(1.+2.*_b*rho[0]-_b*_b*rho[0]*rho[0])); + psi[0] = sqrt(6.*(p-rho[0]/3.)/_G); + return true; +} + + +template +CarnahanStarling::CarnahanStarling(T G, T a, T b, T tr) : AnalyticalF1D(1), _G(G), _a(a), _b(b) +{ + _R = 1.; + //a=0.4963*tc*tc*R*R/pc; + //b=0.18727*R*tc/pc; + T tc = 0.18727/0.4963*_a/_b/_R; + //T pc = 0.18727*_R*tc/_b; + //T rhoc = pc/0.35930763/_R/tc; + _t = tc*tr; + //Zc=0.35930763 Tc=0.094333065 pc=0.0044164383 rhoc=0.13029921 + this->getName() = "CarnahanStarling"; +} + +template +bool CarnahanStarling::operator()(T psi[], const S rho[]) +{ + T c = _b*rho[0]/4.; + T p = rho[0]*_R*_t*((1.+c+c*c-c*c*c)/(1.-c)/(1.-c)/(1.-c))-_a*rho[0]*rho[0]; + psi[0] = sqrt(6.*(p-rho[0]/3.)/_G); + return true; +} + +// second operator allows to incorporate temperature changes +template +bool CarnahanStarling::operator()(T psi[], const S rho[], const S t[]) +{ + _t = t[0]; + T c = _b*rho[0]/4.; + T p = rho[0]*_R*_t*((1.+c+c*c-c*c*c)/(1.-c)/(1.-c)/(1.-c))-_a*rho[0]*rho[0]; + psi[0] = sqrt(6.*(p-rho[0]/3.)/_G); + return true; +} + + +template +PsiEqualsRho::PsiEqualsRho() : AnalyticalF1D(1) +{ + this->getName() = "PsiEqualsRho"; +} + +template +bool PsiEqualsRho::operator()(T psi[], const S rho[]) +{ + psi[0]=rho[0]; + return true; +} + + +template +Krause::Krause(T rhoZero, T psiZero) : AnalyticalF1D(1), _rhoZero(rhoZero), _psiZero(psiZero) +{ + this->getName() = "Krause"; +} + +template +bool Krause::operator()(T psi[], const S rho[]) +{ + psi[0]=_psiZero/1.77*1.414/_rhoZero*exp(-(_rhoZero-rho[0])*(_rhoZero-rho[0])/_rhoZero/_rhoZero); + return true; +} + + +template +WeisbrodKrause::WeisbrodKrause(T rhoZero, T sigmu) : AnalyticalF1D(1), _rhoZero(rhoZero), _sigmu(sigmu) +{ + _rhoZero=_rhoZero/1.005088; + this->getName() = "WeisbrodKrause"; +} + +template +bool WeisbrodKrause::operator()(T psi[], const S rho[]) +{ + psi[0]=sqrt(_rhoZero)*1.5179/_sigmu*exp(-(_sigmu-rho[0]/_rhoZero)*(_sigmu-rho[0]/_rhoZero)/_sigmu/_sigmu); + return true; +} + + +template +Normal::Normal(T sigma, T mu) : AnalyticalF1D(1), _sigma(sigma), _mu(mu) +{ + this->getName() = "Normal"; +} + +template +bool Normal::operator()(T psi[], const S rho[]) +{ + psi[0]=1./2.507/_sigma*exp(-(rho[0]-_mu)*(rho[0]-_mu)/_sigma/_sigma/2.); + return true; +} + + +} // end namespace olb + +#endif -- cgit v1.2.3