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/particles/forces/magneticForceFromHField3D.hh | 119 ++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100755 src/particles/forces/magneticForceFromHField3D.hh (limited to 'src/particles/forces/magneticForceFromHField3D.hh') diff --git a/src/particles/forces/magneticForceFromHField3D.hh b/src/particles/forces/magneticForceFromHField3D.hh new file mode 100755 index 0000000..2bc71c6 --- /dev/null +++ b/src/particles/forces/magneticForceFromHField3D.hh @@ -0,0 +1,119 @@ +/* + * Copyright (C) 2018 Marie-Luise Maier + * 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 MagneticForceFromHField3D_HH +#define MagneticForceFromHField3D_HH + +#include +#include +#include "magneticForceFromHField3D.h" + +#ifndef M_PI +#define M_PI 3.14159265358979323846 +#endif + +namespace olb { + +/* +template class PARTICLETYPE, typename DESCRIPTOR> +MagneticForceFromHField3D::MagneticForceFromHField3D( + SuperLattice3D& sLattice, + SuperLatticeField3D& sLatticeHField, T Mp, T scale) : + Force3D(), _sLattice(sLattice), _sLatticeHField( + sLatticeHField), _Mp(Mp), _scale(scale) { +} + +template class PARTICLETYPE, typename DESCRIPTOR> +void MagneticForceFromHField3D::applyForce( + typename std::deque >::iterator p, int pInt, + ParticleSystem3D& pSys) { + + // vacuum permeability + T mu_0 = 4. * M_PI * 1.e-7; + T Vp = 4. / 3. * M_PI * std::pow(p->getRad(), 3); + T physLatticeLength = + _sLattice.getCuboidGeometry().get(p->getCuboid()).getDeltaR(); + + int glob = p->getCuboid(); + int latticePos[3] = { 0, 0, 0 }; + _sLattice.getCuboidGeometry().get(p->getCuboid()).getLatticeR(latticePos, + &p->getPos()[0]); + + T H[3] = { T(), T(), T() }; + T HXplus[3] = { T(), T(), T() }; + T HYplus[3] = { T(), T(), T() }; + T HZplus[3] = { T(), T(), T() }; + + int X[4] = { glob, latticePos[0], latticePos[1], latticePos[2] }; + + int Xplus[4] = { glob, latticePos[0] + 1, latticePos[1], latticePos[2] }; + int Yplus[4] = { glob, latticePos[0], latticePos[1] + 1, latticePos[2] }; + int Zplus[4] = { glob, latticePos[0], latticePos[1], latticePos[2] + 1 }; + + T gradHx[3] = { T(), T(), T() }; + T gradHy[3] = { T(), T(), T() }; + T gradHz[3] = { T(), T(), T() }; + T modGradH[3] = { T(), T(), T() }; + + _sLatticeHField(H, X); + _sLatticeHField(HXplus, Xplus); + _sLatticeHField(HYplus, Yplus); + _sLatticeHField(HZplus, Zplus); + + if (!(util::nearZero(H[0]) && util::nearZero(H[1]) && util::nearZero(H[2]))) { + Vector M(H[0], H[1], H[2]); + M.normalize(); + M[0] *= _Mp; + M[1] *= _Mp; + M[2] *= _Mp; + + gradHx[0] = (HXplus[0] - H[0]) / physLatticeLength; + gradHx[1] = (HXplus[1] - H[1]) / physLatticeLength; + gradHx[2] = (HXplus[2] - H[2]) / physLatticeLength; + + gradHy[0] = (HYplus[0] - H[0]) / physLatticeLength; + gradHy[1] = (HYplus[1] - H[1]) / physLatticeLength; + gradHy[2] = (HYplus[2] - H[2]) / physLatticeLength; + + gradHz[0] = (HZplus[0] - H[0]) / physLatticeLength; + gradHz[1] = (HZplus[1] - H[1]) / physLatticeLength; + gradHz[2] = (HZplus[2] - H[2]) / physLatticeLength; + + // modGradH = (M \cdot \nabla) H + modGradH[0] = M[0] * gradHx[0] + M[1] * gradHy[0] + M[2] * gradHz[0]; + modGradH[1] = M[0] * gradHx[1] + M[1] * gradHy[1] + M[2] * gradHz[1]; + modGradH[2] = M[0] * gradHx[2] + M[1] * gradHy[2] + M[2] * gradHz[2]; + + if (modGradH[0] > T() || modGradH[1] > T() || modGradH[2] > T()) { + std::cout << "without scale: modGradH[0] " << Vp * mu_0 * modGradH[0] + << "modGradH[1] " << Vp * mu_0 * modGradH[1] << "modGradH[2] " + << Vp * mu_0 * modGradH[2] << std::endl; + } + p->getForce()[0] += Vp * mu_0 * modGradH[0] * _scale; + p->getForce()[1] += Vp * mu_0 * modGradH[1] * _scale; + p->getForce()[2] += Vp * mu_0 * modGradH[2] * _scale; + } +} +*/ + +} +#endif -- cgit v1.2.3