|
[Sponsors] |
Adding new lookup coefficient to fvOptions source error |
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
October 20, 2017, 15:31 |
Adding new lookup coefficient to fvOptions source error
|
#1 |
New Member
Chris Coutinho
Join Date: Jan 2015
Location: Netherlands
Posts: 28
Rep Power: 11 |
I'm creating a new fvOptions source option based on the `meanVelocityForce` derived source in OpenFOAM 4.x. When I added a new scalar to the .H and .C files, I get a compilation error related to an incorrect conversion occurring in the constructor. More specifically, the error message I'm seeing is:
Code:
meanMassSource.C: In constructor ‘Foam::fv::meanMassSource::meanMassSource(const Foam::word&, const Foam::word&, const Foam::dictionary&, const Foam::fvMesh&)’: meanMassSource.C:95:16: error: cannot convert ‘Foam::ITstream’ to ‘Foam::scalar {aka double}’ in initialization rAPtr_(NULL) ^ /home/redclient04/OpenFOAM/OpenFOAM-4.x/wmake/rules/General/transform:8: recipe for target 'Make/linux64GccDPInt32Opt/meanMassSource.o' failed make: *** [Make/linux64GccDPInt32Opt/meanMassSource.o] Error 1 meanMassSource.H: Code:
#ifndef meanMassSource_H #define meanMassSource_H #include "autoPtr.H" #include "topoSetSource.H" #include "cellSet.H" #include "fvMesh.H" #include "volFields.H" #include "cellSetOption.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { namespace fv { /*---------------------------------------------------------------------------*\ Class meanMassSource Declaration \*---------------------------------------------------------------------------*/ class meanMassSource : public cellSetOption { protected: // Protected data vector Ubar_; //- Average velocity scalar gradC0_; //- Concentration gradient before correction scalar dGradC_; //- Change in concentration gradient // vvv molarFlux_ is the new scalar I want to add vvv scalar molarFlux_; //- Molar flux at membrane walls in [mol/m2.s] vector flowDir_; //- Flow direction scalar relaxation_; //- Relaxation factor autoPtr<volScalarField> rAPtr_; //- Matrix 1/A coefficients field pointer . . . And the associated meanMassSource.C file: Code:
#include "meanMassSource.H" #include "fvMatrices.H" #include "DimensionedField.H" #include "IFstream.H" #include "addToRunTimeSelectionTable.H" // * * * * * * * * * * * * * Static Member Functions * * * * * * * * * * * * // namespace Foam { namespace fv { defineTypeNameAndDebug(meanMassSource, 0); addToRunTimeSelectionTable ( option, meanMassSource, dictionary ); } } // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // void Foam::fv::meanMassSource::writeProps ( const scalar gradC ) const { // Only write on output time if (mesh_.time().writeTime()) { IOdictionary propsDict ( IOobject ( name_ + "Properties", mesh_.time().timeName(), "uniform", mesh_, IOobject::NO_READ, IOobject::NO_WRITE ) ); propsDict.add("gradient", gradC); propsDict.regIOobject::write(); } } // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // Foam::fv::meanMassSource::meanMassSource ( const word& sourceName, const word& modelType, const dictionary& dict, const fvMesh& mesh ) : cellSetOption(sourceName, modelType, dict, mesh), Ubar_(coeffs_.lookup("Ubar")), gradC0_(0.0), dGradC_(0.0), molarFlux_(coeffs_.lookup("molarFlux")), // Again, here is where the new scalar is being looked up and put into the dictionary flowDir_(Ubar_/mag(Ubar_)), relaxation_(coeffs_.lookupOrDefault<scalar>("relaxation", 1.0)), rAPtr_(NULL) . . . I've noticed that various derived sources have differing number of entries in their dictionaries, so I didn't think the number of entries is hard-coded somewhere. Since both the header and source files match up (at least to my untrained eyes), I can't tell where the problem is. Can someone tell me where I'm missing something? Last edited by cbcoutinho; October 20, 2017 at 15:32. Reason: Put full error message in |
|
October 20, 2017, 16:02 |
|
#2 |
New Member
Chris Coutinho
Join Date: Jan 2015
Location: Netherlands
Posts: 28
Rep Power: 11 |
I spent a little more time digging around, and I found a fantastic answer to my question by Prof. Jasak - see his post here
Essentially the issue is that the lookup function involves a constructor of a class, but scalars are just doubles, which don't have constructors because doubles are primitive types. You need to wrap the lookup function with a readScalar function: Change the offending line: Code:
molarFlux_(coeffs_.lookup("molarFlux")), Code:
molarFlux_(readScalar(coeffs_.lookup("molarFlux"))), |
|
September 1, 2021, 01:13 |
|
#3 |
Member
Francisco T
Join Date: Nov 2011
Location: Melbourne, Australia
Posts: 64
Blog Entries: 1
Rep Power: 15 |
Thanks Chris
for my case, this would be the solution assuming we are reading the scalar "height" from liquidDict OF7 const scalar height(readScalar(liquidDict.lookup("height"))); OF8 (and onwards) const scalar height(liquidDict.lookup<scalar>("height")); |
|
January 18, 2022, 08:48 |
|
#4 | |
New Member
XieDaxia
Join Date: Oct 2021
Posts: 1
Rep Power: 0 |
Quote:
Hi~ I'm trying to simulating a periodic case with heat transfer. I have tried to use a constant heat sink for the Temperature(scalar) field, but the temperature keep increasing, so I also want to use a method similar to the meanvelocityforce for the scalar field. Could you plase show me the complete code for study? Thanks a lot, whether yes or not. |
||
Tags |
dictionary, fvoptions, itstream |
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
[swak4Foam] funkyDoCalc with OF2.3 massflow | NiFl | OpenFOAM Community Contributions | 14 | November 25, 2020 04:30 |
[blockMesh] blockMesh with double grading. | spwater | OpenFOAM Meshing & Mesh Conversion | 92 | January 12, 2019 10:00 |
[OpenFOAM.org] Error creating ParaView-4.1.0 OpenFOAM 2.3.0 | tlcoons | OpenFOAM Installation | 13 | April 20, 2016 18:34 |
[swak4Foam] GroovyBC the dynamic cousin of funkySetFields that lives on the suburb of the mesh | gschaider | OpenFOAM Community Contributions | 300 | October 29, 2014 19:00 |
Compiling problems with hello worldC | fw407 | OpenFOAM Installation | 21 | January 6, 2008 18:38 |