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.0epsVoid,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.0epsVoid,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.0epsVoid,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.0epsVoid,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. 
All times are GMT 4. The time now is 16:38. 