error: no match for ‘operator>’
Hi Guys
I want to add a if condition in the following form to my code if (hStar > TLSTar) { gl = 1; } but when I compile it the following error is being produced "error: no match for ‘operator>’ in ‘hStar > TLStar’" hStar is a VolScalarField and TLStar is dimensioned scalar field. I would appreciate if you help me fix it! |
Quote:
try this: (hStar.value()) > (TLSTar.value()) |
Hi AMIR
Thanks for your comment. I tried (hStar.value()) > (TLSTar.value()) but it gives another error error: ‘struct Foam::volScalarField’ has no member named ‘Value’ |
Quote:
if (hStar[celli] > TLSTar.value()) { gl[celli] = 1.0; } } gl is volScalarField ? |
Thanks NIMA, Yep gl is volScalarField!
I will try that right away! |
Nima and Amir Thanks!
The problem has been fixed and the code sounds good now!! |
thanx guys, this helped. i had the same error.
|
error: no match for 'operator=='
Hi guys
I am trying solve the following: forAll(mAbsorbed, celli) { if(mAbsorbed[celli] <= rhoSs.value()) { solve(fvm::ddt(1.0-epsVoid,rhoS) == mAbsorbed[celli]); } } else { Info<< "\nrhoS - MHydride density = " << max(rhoS).value(); Info<< " has reached saturation density of " << rhoSs.value(); Info<< " kg/m^3.\n"<< endl; } so that if the value of mAbsorbed (a volScalrField) exceeds or equals the value of rhoSs a dimensionedScalar the program should a statement as above. but I get the following error: error: no match for 'operator==' in 'Foam::fvm::ddt(const Foam::dimensionedScalar&, Foam::GeometricField<Type, Foam::fvPatchField, Foam::volMesh>&) [with Type = double](((Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>&)(& rhoS))) == mAbsorbed.Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>::<anonymous>.Foam::DimensionedField <double, Foam::volMesh>::<anonymous>.Foam::Field<double>::< anonymous>.Foam::List<double>::<anonymous>.Foam::U List<T>::operator[] [with T = double](celli)' ... please help me fix this error. thank u. |
you are going to import a strange format in openFOAM structure, it cant resolve ur data type, you are going to solve different variable from dimensionedScalar, UList and volScalarField :) its impossible in this way!
|
hi nimasam
Thanks, I tried it and I get: error: 'deltatime' was not declared in this scope. and i tried deltaTime and i get same error. how do i declare deltatime? |
hi dear Sibusiso
could you explain what you are going to solve? send ur equation here. what are these variables ? |
http://ywang.eng.uci.edu/Publication...age%20beds.pdf
from the article above. i am trying to solve these equations: equation 1, 2, 9, 10 and 11. where: rhoS is the solid density in equation 9 mAbsorbed is the hydrogen reaction rate (source term) from equation 10 rhoSs is the saturated solid density constant from equation 10 too. hope this is clear enough, i really need help. |
:) dear Sibusiso
let me ask more clear what variable should be solved among these variables? rhoS , mAbsorbed or rhoSs |
hello nima
rhoS is the variable to be solved in my first post. forAll(mAbsorbed, celli) { if(mAbsorbed[celli] <= rhoSs.value()) { solve(fvm::ddt(1.0-epsVoid,rhoS) == mAbsorbed[celli]); } } else { Info<< "\nrhoS - MHydride density = " << max(rhoS).value(); Info<< " has reached saturation density of " << rhoSs.value(); Info<< " kg/m^3.\n"<< endl; } thank you. |
dear sibusiso
why dont you combine equations 9 and 10, then finally your equation will be A*ddt(rhoS) - B* rhoS + B*rhoSS =0 which is a linear ode and have definte solution as a function of : rhos = f (rhoSS, time) then implement rhos equation in your code! |
1 Attachment(s)
Dear Nima
equation 9 calculates the reaction rate (Sm) which I also need to for equation 1 and 6 and need to track how fast does the source term (mAdsorbed) changes. mAbsorbed = max(Sm) - min(Sm); so i think i need equation 10. just realised that I had made a mistake in the following code (bolded) instead of the source term there should be the density of the solid rhoS. sorry about that. forAll(mAbsorbed, celli) { if(mAbsorbed[celli] <= rhoSs.value()) { solve(fvm::ddt(1.0-epsVoid,rhoS) == mAbsorbed[celli]); } else { Info<< "\nrhoS - MHydride density = " << max(rhoS).value(); Info<< " has reached saturation density of " << rhoSs.value(); Info<< " kg/m^3.\n"<< endl; } } I fixed it as follows: forAll(mAbsorbed, celli) { if(rhoS[celli] <= rhoSs.value()) { solve(fvm::ddt(1.0-epsVoid,rhoS) == mAbsorbed); } else { Info<< "\nrhoS - MHydride density = " << max(rhoS).value(); Info<< " has reached saturation density of " << rhoSs.value(); Info<< " kg/m^3.\n"<< endl; } } and it compiles and runs but it does not get out I have to manually terminate it, please check attached txt file. |
its some how obvious it iterates over ur grids so! it solves your equations on the numbers of your grids! as i said before this combination does not work for you:) you should solve rhoS manually! and implement rhoS function!
|
thank you Nima
let me try it |
Quote:
First i added this code in the CreatField.H, volScalarField Rrate ( IOobject ( "Rrate", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::AUTO_WRITE ), mesh, dimensionedScalar("Rrate", dimMass/dimVolume/dimTime, 0.0) ); Then, i added this code in YEqn, forAll(Y, i) { if (Y[i].name() != "CH4") Rrate = reaction->R(Yi); } After wmake, it shows YEqn.H:26:14: error: no match for ‘operator=’ (operand types are ‘Foam::volScalarField {aka Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>}’ and ‘Foam::tmp<Foam::fvMatrix<double> >’) Rrate = reaction->R(Yi); Can you tell me how to do that? Thank you very much. |
no match for ‘operator<’ (operand types are ‘Foam::volScalarField {aka Foam::Geometri
Hi everyone
I am a beginner of openfoam.I want to add a if condition in the following form to my turbulence model code volScalarField::Internal rek ( this->rho_*sqrt(k_)*y_/this->nu() ); if(rek > 10) ... but when I compile it the following error is being produced "no match for ‘operator<’ (operand types are ‘Foam::volScalarField {aka Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh>}’ and ‘int’)" I would appreciate if you help me:) |
All times are GMT -4. The time now is 05:05. |