CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (https://www.cfd-online.com/Forums/openfoam-programming-development/)
-   -   ActuatorDiskExplicitForce in OF2.1. Help (https://www.cfd-online.com/Forums/openfoam-programming-development/102852-actuatordiskexplicitforce-of2-1-help.html)

be_inspired June 4, 2012 11:10

ActuatorDiskExplicitForce in OF2.1. Help
 
Hi all,

Resume:

Are there a guide to now how to change a solver code prepared for OF1.5dev to a newer OF versions(OF2.1)?

Long version:

I have been checking the solver windSimpleFoam of the version 2.0.1 and due to the fact than it also takes into account the thrust to modify the momentum equation.

I investigate and I found the following report:

http://www.tfd.chalmers.se/~hani/kur...ningReport.pdf

It seems very interesting because it can be modelled the trust and the swirl with a radial distribution based on a analytical approach. It can be fixed the thrust and the torque of your wind turbine.

Although it was done based on OF 1.5dev, I have been trying to implement the same approach for OF 2.1 but I am not able to do it. Are there a guide to now how to change a solver between 1.5dev a newer OF versions?

When I try to compile, I receive the following error:

Code:

[beinspired@srvhpcmaster actuatorDiskExplicitForce]$ wmake
Making dependency list for source file actuatorDiskExplicitForceSimpleFoam.C
Making dependency list for source file actuatorDiskExplicitForce.cpp
could not open file actuatorDiskExplicitForce for source file actuatorDiskExplicitForce.cpp
SOURCE=actuatorDiskExplicitForceSimpleFoam.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -O3  -DNoRepository -ftemplate-depth-100 -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/turbulenceModels -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/turbulenceModels/incompressible/RAS/RASModel -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/transportModels -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/transportModels/incompressible/singlePhaseTransportModel -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude -IlnInclude -I. -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64Gcc45DPOpt/actuatorDiskExplicitForceSimpleFoam.o
In file included from actuatorDiskExplicitForceSimpleFoam.C:74:0:
UEqn.H: In function 'int main(int, char**)':
UEqn.H:19:38: error: no match for 'operator+' in 'Foam::solve(const Foam::tmp<Foam::fvMatrix<Type> >&) [with Type = Foam::Vector<double>]() + VolumeForce'
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/dictionary.H:519:12: note: candidates are: Foam::dictionary Foam::operator+(const Foam::dictionary&, const Foam::dictionary&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/dimensionSet.H:257:29: note:                Foam::dimensionSet Foam::operator+(const Foam::dimensionSet&, const Foam::dimensionSet&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/dimensionedScalar.H:49:19: note:                Foam::dimensionedScalar Foam::operator+(const Foam::dimensionedScalar&, Foam::scalar)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/dimensionedScalar.H:50:19: note:                Foam::dimensionedScalar Foam::operator+(Foam::scalar, const Foam::dimensionedScalar&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/scalarField.H:77:1: note:                Foam::tmp<Foam::Field<double> > Foam::operator+(const Foam::scalar&, const Foam::UList<double>&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/scalarField.H:77:1: note:                Foam::tmp<Foam::Field<double> > Foam::operator+(const Foam::scalar&, const Foam::tmp<Foam::Field<double> >&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/scalarField.H:77:1: note:                Foam::tmp<Foam::Field<double> > Foam::operator+(const Foam::UList<double>&, const Foam::scalar&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/scalarField.H:77:1: note:                Foam::tmp<Foam::Field<double> > Foam::operator+(const Foam::tmp<Foam::Field<double> >&, const Foam::scalar&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/labelField.H:53:1: note:                Foam::tmp<Foam::Field<int> > Foam::operator+(const Foam::label&, const Foam::UList<int>&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/labelField.H:53:1: note:                Foam::tmp<Foam::Field<int> > Foam::operator+(const Foam::label&, const Foam::tmp<Foam::Field<int> >&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/labelField.H:53:1: note:                Foam::tmp<Foam::Field<int> > Foam::operator+(const Foam::UList<int>&, const Foam::label&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/labelField.H:53:1: note:                Foam::tmp<Foam::Field<int> > Foam::operator+(const Foam::tmp<Foam::Field<int> >&, const Foam::label&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/diagTensorField.H:60:1: note:                Foam::tmp<Foam::Field<Foam::Tensor<double> > > Foam::operator+(const Foam::UList<Foam::DiagTensor<double> >&, const Foam::UList<Foam::Tensor<double> >&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/diagTensorField.H:60:1: note:                Foam::tmp<Foam::Field<Foam::Tensor<double> > > Foam::operator+(const Foam::UList<Foam::DiagTensor<double> >&, const Foam::tmp<Foam::Field<Foam::Tensor<double> > >&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/diagTensorField.H:60:1: note:                Foam::tmp<Foam::Field<Foam::Tensor<double> > > Foam::operator+(const Foam::tmp<Foam::Field<Foam::DiagTensor<double> > >&, const Foam::UList<Foam::Tensor<double> >&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/diagTensorField.H:60:1: note:                Foam::tmp<Foam::Field<Foam::Tensor<double> > > Foam::operator+(const Foam::tmp<Foam::Field<Foam::DiagTensor<double> > >&, const Foam::tmp<Foam::Field<Foam::Tensor<double> > >&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/diagTensorField.H:63:1: note:                Foam::tmp<Foam::Field<Foam::Tensor<double> > > Foam::operator+(const Foam::diagTensor&, const Foam::UList<Foam::Tensor<double> >&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/diagTensorField.H:63:1: note:                Foam::tmp<Foam::Field<Foam::Tensor<double> > > Foam::operator+(const Foam::diagTensor&, const Foam::tmp<Foam::Field<Foam::Tensor<double> > >&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/diagTensorField.H:63:1: note:                Foam::tmp<Foam::Field<Foam::Tensor<double> > > Foam::operator+(const Foam::UList<Foam::DiagTensor<double> >&, const Foam::tensor&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/diagTensorField.H:63:1: note:                Foam::tmp<Foam::Field<Foam::Tensor<double> > > Foam::operator+(const Foam::tmp<Foam::Field<Foam::DiagTensor<double> > >&, const Foam::tensor&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/vectorTensorTransformI.H:263:36: note:                Foam::vectorTensorTransform Foam::operator+(const Foam::vectorTensorTransform&, const Foam::vector&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/vectorTensorTransformI.H:273:36: note:                Foam::vectorTensorTransform Foam::operator+(const Foam::vector&, const Foam::vectorTensorTransform&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/quaternionI.H:263:25: note:                Foam::quaternion Foam::operator+(const Foam::quaternion&, const Foam::quaternion&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/septernionI.H:170:25: note:                Foam::septernion Foam::operator+(const Foam::septernion&, const Foam::vector&)
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude/septernionI.H:180:25: note:                Foam::septernion Foam::operator+(const Foam::vector&, const Foam::septernion&)
In file included from actuatorDiskExplicitForceSimpleFoam.C:75:0:
pEqn.H:1:1: error: expected ';' before '{' token
actuatorDiskExplicitForceSimpleFoam.C:92:1: error: expected '}' at end of input
actuatorDiskExplicitForceSimpleFoam.C:92:1: error: expected '}' at end of input
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude/initContinuityErrs.H:37:8: warning: unused variable 'cumulativeContErr'
actuatorDiskExplicitForceSimpleFoam.C:92:1: error: expected '}' at end of input
make: *** [Make/linux64Gcc45DPOpt/actuatorDiskExplicitForceSimpleFoam.o] Error 1

This is my Ueqn.H code:

Code:

    // Momentum predictor

    tmp<fvVectorMatrix> UEqn
    (
        fvm::div(phi, U)
      + turbulence->divDevReff(U)
    );

    UEqn().relax();

 // Clear old values in ioVolumeForce
 for ( label k = 0; k < VolumeForce . size () ; k ++) {
 VolumeForce [k ] = vector :: zero ;
 }

 // Calculate volume force from actuator disk
 actuatorDisk.CalcActuatorDiskVolForce ( mesh , VolumeForce ) ;

    solve(UEqn() == -fvc::grad(p)) + VolumeForce
//eqnResidual = solve
//(
//UEqn () == - fvc :: grad (p ) + VolumeForce
// ). initialResidual () ;

// maxResidual = max ( eqnResidual , maxResidual );

I have commented some lines because I receive error with eqnResidual and maxResidual due to the fact, I think, that in OF2.1 there are not included:
"readSIMPLEControls.H","initConvergenceCheck.H " and "convergenceCheck.H"

This is my first/second approach to the code of OF, so I will try to continue with the problem and If a find the mistake, I will post the solution.

Best Regards

be_inspired June 4, 2012 11:27

With this new Ueqn.H code, I have received the next error:

Code:

    // Momentum predictor

    tmp<fvVectorMatrix> UEqn
    (
        fvm::div(phi, U)
      + turbulence->divDevReff(U)
    );

    UEqn().relax();

 // Clear old values in ioVolumeForce
 for ( label k = 0; k < VolumeForce . size () ; k ++) {
 VolumeForce [k ] = vector :: zero ;
 }

 // Calculate volume force from actuator disk
 actuatorDisk.CalcActuatorDiskVolForce ( mesh , VolumeForce ) ;

    solve(UEqn() == -fvc::grad(p) + (VolumeForce)
//eqnResidual = solve
//(
//UEqn () == - fvc :: grad (p ) + VolumeForce
// ). initialResidual () ;

// maxResidual = max ( eqnResidual , maxResidual );

Code:

[beinspired@srvhpcmaster actuatorDiskExplicitForce]$ wmake
Making dependency list for source file actuatorDiskExplicitForceSimpleFoam.C
Making dependency list for source file actuatorDiskExplicitForce.cpp
could not open file actuatorDiskExplicitForce for source file actuatorDiskExplicitForce.cpp
SOURCE=actuatorDiskExplicitForceSimpleFoam.C ;  g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -O3  -DNoRepository -ftemplate-depth-100 -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/turbulenceModels -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/turbulenceModels/incompressible/RAS/RASModel -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/transportModels -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/transportModels/incompressible/singlePhaseTransportModel -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude  -IlnInclude -I. -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OpenFOAM/lnInclude -I/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/OSspecific/POSIX/lnInclude  -fPIC -c $SOURCE -o Make/linux64Gcc45DPOpt/actuatorDiskExplicitForceSimpleFoam.o
In file included from actuatorDiskExplicitForceSimpleFoam.C:75:0:
pEqn.H: In function 'int main(int, char**)':
pEqn.H:1:1: error: expected ')' before '{' token
actuatorDiskExplicitForceSimpleFoam.C:76:9: error: expected ';' before '}' token
/share/apps/OpenFOAM/OpenFOAM-2.1.0/src/finiteVolume/lnInclude/initContinuityErrs.H:37:8: warning: unused variable 'cumulativeContErr'
make: *** [Make/linux64Gcc45DPOpt/actuatorDiskExplicitForceSimpleFoam.o] Error 1


actuatorDiskExplicitForceSimpleFoam.C
Code:

/*---------------------------------------------------------------------------*\
  =========                |
  \\      /  F ield        | OpenFOAM: The Open Source CFD Toolbox
  \\    /  O peration    |
    \\  /    A nd          | Copyright (C) 2004-2011 OpenCFD Ltd.
    \\/    M anipulation  |
-------------------------------------------------------------------------------
License
    This file is part of OpenFOAM.

    OpenFOAM 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 3 of the License, or
    (at your option) any later version.

    OpenFOAM 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 OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.

Application
    simpleFoam

Description
    Steady-state solver for incompressible, turbulent flow

\*---------------------------------------------------------------------------*/

#include "fvCFD.H"
#include "singlePhaseTransportModel.H"
#include "RASModel.H"
#include "simpleControl.H"
//#include "IObasicSourceList.H"
#include "actuatorDiskExplicitForce.H"

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

int main(int argc, char *argv[])
{
  #include "setRootCase.H"
  #include "createTime.H"
  #include "createMesh.H"
  #include "createFields.H"
  #include "initContinuityErrs.H"
  #include "simpleControl.H"

  simpleControl simple(mesh);
// ************************************************************************* //

        Info<< "\nStarting time loop\n" << endl;

        actuatorDiskExplicitForce actuatorDisk;

        //Read actuator disk geometry
        actuatorDisk.ReadGeometry(mesh);

        //Write geometry to vtk
        actuatorDisk.WriteVTK();

    while (simple.loop())
    {
        Info<< "Time = " << runTime.timeName() << nl << endl;

//# include "readSIMPLEControls.H"
//#include "initConvergenceCheck.H"

        p.storePrevIter();

        // --- Pressure-velocity SIMPLE corrector
        {
            #include "UEqn.H"
            #include "pEqn.H"
        }

        turbulence->correct();

        runTime.write();

        Info<< "ExecutionTime = " << runTime.elapsedCpuTime() << " s"
            << "  ClockTime = " << runTime.elapsedClockTime() << " s"
            << nl << endl;
//# include "convergenceCheck.H"
   
    }

    Info<< "End\n" << endl;

    return 0;
}



 // ************************************************************************* //


be_inspired June 5, 2012 10:47

I have compiled the new code, but....
 
But it seems that it does not work properly.

It computes the forces (axial and tangential), but the volumeForce is always zero. There is not a source.

Please, I think that I am near to solve the problem but I do not find where it is.

Thank you

Code:

Starting time loop

 Reading actuator disk geometry .
Actuator disk values loaded from fvSolution :
mIntRadius : 2
mExtRadius : 45
mThrust : 319907
mTorque : 1112984
mRho : 1.225
mPointStartCenterLine : (-1 0 200)
mPointEndCenterLine : (6 0 200)
Time = 1

 Calculating volume force from actuator disk .
 Reading actuator disk geometry .
Actuator disk values loaded from fvSolution :
mIntRadius : 2
mExtRadius : 45
mThrust : 319907
mTorque : 1112984
mRho : 1.225
mPointStartCenterLine : (-1 0 200)
mPointEndCenterLine : (6 0 200)
 Point : 1568650 is in the actuator disk .Coordinates : (2 -13 157)
 Axial force : 1.01388393998
 Tangential force : 0.102133860429
 Tangential force : 0.102133860429
 Point : 1568651 is in the actuator disk .Coordinates : (6 -13 157)
 Axial force : 1.01388393998
 Tangential force : 0.102133860429
 Tangential force : 0.102133860429
 Point : 1568850 is in the actuator disk .Coordinates : (2 -11 157)
 Axial force : 2.81481452742
 Tangential force : 0.286984707626
 Tangential force : 0.286984707626
 Point : 1568851 is in the actuator disk .Coordinates : (6 -11 157)
 Axial force : 2.81481452742
 Tangential force : 0.286984707626
 Tangential force : 0.286984707626
 Point : 1569050 is in the actuator disk .Coordinates : (2 -9 157)
 Axial force : 3.66916761312
 Tangential force : 0.377947068908
 Tangential force : 0.377947068908
 Point : 1569051 is in the actuator disk .Coordinates : (6 -9 157)
 Axial force : 3.66916761312
 Tangential force : 0.377947068908
 Tangential force : 0.377947068908
 Point : 1569250 is in the actuator disk .Coordinates : (2 -7 157)
 Axial force : 4.21403338735
 Tangential force : 0.437715527254
 Tangential force : 0.437715527254
 Point : 1569251 is in the actuator disk .Coordinates : (6 -7 157)
 Axial force : 4.21403338735
 Tangential force : 0.437715527254
 Tangential force : 0.437715527254
 Point : 1569450 is in the actuator disk .Coordinates : (2 -5 157)
 Axial force : 4.57158094882
 Tangential force : 0.477885337417
 Tangential force : 0.477885337417
 Point : 1569451 is in the actuator disk .Coordinates : (6 -5 157)
 Axial force : 4.57158094882
 Tangential force : 0.477885337417
 Tangential force : 0.477885337417
 Point : 1569650 is in the actuator disk .Coordinates : (2 -3 157)
 Axial force : 4.79115051603
 Tangential force : 0.502989645109
 Tangential force : 0.502989645109
 Point : 1569651 is in the actuator disk .Coordinates : (6 -3 157)
 Axial force : 4.79115051603
 Tangential force : 0.502989645109
 Tangential force : 0.502989645109
 Point : 1569850 is in the actuator disk .Coordinates : (2 -1 157)
 Axial force : 4.89606361827
 Tangential force : 0.515113904249
 Tangential force : 0.515113904249
 Point : 1569851 is in the actuator disk .Coordinates : (6 -1 157)
 Axial force : 4.89606361827
 Tangential force : 0.515113904249
 Tangential force : 0.515113904249
 Point : 1570050 is in the actuator disk .Coordinates : (2 1 157)
 Axial force : 4.89606361827
 Tangential force : 0.515113904249
 Tangential force : 0.515113904249
 Point : 1570051 is in the actuator disk .Coordinates : (6 1 157)
 Axial force : 4.89606361827
 Tangential force : 0.515113904249
 Tangential force : 0.515113904249
 Point : 1570250 is in the actuator disk .Coordinates : (2 3 157)
 Axial force : 4.79115051603
 Tangential force : 0.502989645109
 Tangential force : 0.502989645109
 Point : 1570251 is in the actuator disk .Coordinates : (6 3 157)
 Axial force : 4.79115051603
 Tangential force : 0.502989645109
 Tangential force : 0.502989645109
 Point : 1570450 is in the actuator disk .Coordinates : (2 5 157)
 Axial force : 4.57158094882
 Tangential force : 0.477885337417
 Tangential force : 0.477885337417

Code:

    // Momentum predictor

    tmp<fvVectorMatrix> UEqn
    (
        fvm::div(phi, U)
      + turbulence->divDevReff(U)
    );

    UEqn().relax();

 // Clear old values in ioVolumeForce
 for (label k = 0; k < VolumeForce.size();k ++) {VolumeForce[k] = vector::zero;}

 // Calculate volume force from actuator disk
 actuatorDisk.CalcActuatorDiskVolForce (mesh,VolumeForce);

    solve(UEqn() == -fvc::grad(p) + VolumeForce);
//eqnResidual = solve
//(
//UEqn () == - fvc :: grad (p ) + VolumeForce
// ). initialResidual () ;

// maxResidual = max ( eqnResidual , maxResidual );


drsattar August 12, 2012 06:58

hello
 
hi all

i am very interested in this case of actuator dis of Erik Svenning
but i found the same problem of you :( ???
are you solved??
please contact me

oscar_urri August 17, 2012 11:32

hello drsattar and be_inspired,

about the Erik Svenning code there's a couple of things you ahve to take into account,

first that code was made for OpenFoam 1.5 dev, and the coding the solvers has changed from that version to 2.1.x. so that's why the simplefoam solver that comes with the code won't compile in more recent versions of openfoam. if you insist on using it you would have to cut and paste the parts of the code into the newer version of simplefoam (it can be a bit tricky - it took me a while)

second, that code was made on a openfoam workshop, and not for a phd or masters thesis, i've personally updated the code and made it run in the new version of openfoam and i've encounter a couple of mistakes in the code:

- first in the code he sets the axial and tangential force to be in the same direction, which is not true, even though openfoam works in cartesian coordiantes you have to decompose the tagential force in Z and Y.

-also the way the code selects the cells to insert the bodyforce form points and faces leads to a erratic distribution of the force.

i finally gave up on that code :s

i would refer you to this thread:

http://www.cfd-online.com/Forums/ope...rce-model.html

here they show a very simple and practical way to generate and insert a bodyforce into a solver :),

and depending on you C++ it turns out to be very flexible to insert mathematical expresions to calculate the force.

i hope this helps and good luck!

Oscar

drsattar August 17, 2012 13:50

bodyForce
 
dear oscar_urri

i am very thanful for your reply, if you like send me your email to send you the final case which i created it of actuator disk model. i wish if you able to check it...
also the case of Fan (body force mode) is not work with me??? :o
my email (hdrsattar@yahoo.com)
thank again :)

oscar_urri August 19, 2012 19:05

2 Attachment(s)
dear drsattar,

it's not necessary for you to send me an e-mail :),

my recomendation is not to use the actuador disk model form Erik Svenning, as i told you it has mistakes that i was not able to correct,

you should go with the bodyforce model, i'm going to attach a sample solver and a sample case, (it's only set to add an axial force, you're gonna have to modify it to include the tangential force),

to make a good case,

the first thing you should do is to validate your code against the analytical solution, here's and article that talks about that, and gives the formulas for the anlytical solution,

http://orbit.dtu.dk/fedora/objects/o...190785/content

after you can set up an actual real case and compare it against experimental data, or against other already validated model.

i wish i could help you more, but i also have do my own simulations, i have 2 semesters before i finish my masters :) and i have to concentrate on that.

if you have any other questions ask, but it might take me a while to answer,

the best of luck on your research, i know it's not easy

Oscar

drsattar August 20, 2012 08:00

actuator disk (bodyForce)
 
Dear oscar_urri

I am very grateful to you about your answer on my problem, now i will try to use and modify the attachment files ......:)
i wish to be contact with me in the future.....
thanks again

be_inspired July 3, 2014 10:54

Dear oscar_urri,

With your solver, pressure wiggles are not fixed:

http://www.cfd-online.com/Forums/ope...l-wiggles.html

This is quite quite important for me.
The report that you have linked is my reference point but I do not know how to modify simpleFoam and rotorDiskSource to manage body forces without pressure wiggles.

The problem happens when body force is directly applied over the UEqn and velocity and pressure are not coupled.
It seems like you have not implemented the correction proposed by your link

Do you have a modified version of your simpleFoamForce to solve that?


dirklangeoog September 12, 2018 06:45

Hello everybody,
i tried to use the case and the solver from oscar_urr.

When I try to compile the solver simple Foam Force, there comes an error:



simpleFoamForce.C:34:22: fatal error: RASModel.H: No such file or directory
#include "RASModel.H"
^
compilation terminated.
make: *** [/mnt/apps_linux/home/abz860/OpenFOAM-in-Box/OpenFOAM-in-Box-18.06v1/OpenFOAM-dev/platforms/linux64Gcc62DPInt32Opt/applications/solvers/incompressible/simpleFoamForce/simpleFoamForce.o] Error 1



does anybody has an idea how to handle this?


kind Regards
Dirk

mAlletto September 14, 2018 11:12

do you have

-I$(LIB_SRC)/turbulenceModels/incompressible/RAS/lnInclude \

in Make/options ?

This error pops up if the linker does not find the header files.


All times are GMT -4. The time now is 15:38.