View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003558 | OpenFOAM | Bug | public | 2020-09-27 02:46 | 2020-09-29 21:46 |
Reporter | joegi | Assigned To | henry | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Platform | opensuse | OS | Other | OS Version | 15.2 |
Fixed in Version | dev | ||||
Summary | 0003558: cacheTemporaryObjects with complex name | ||||
Description | This was already addresed in one update but I think the fix is not complete. For instance if you try the same cacheTemporaryObjects as in the fix, it won't work if you try to open the field with paraFoam. That is: cacheTemporaryObjects ( "((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)" ); With the regex option off. The fix to this is to erase the parentheses in the header of the output file, as, object interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p)*magSf; I think an easy fit to this is to give the user the ability to save the field with a different name such as: outputName whatever_name; Of course, in the name the user shouldn't use parentheses at the beginning. Currently I have a fix using bash utilities but adding this option could be very useful. By the way, this problem happens with all fields that stars with parentheses or funny characters, eg, "(betaStar*omega)" "(nut+nu)" and so on. | ||||
Steps To Reproduce | I don't add an example because the developers can use the same one as in the fix. | ||||
Additional Information | I dont add an example because the developers can use the same one as in the fix. | ||||
Tags | No tags attached. | ||||
|
I cannot reproduce the problem as you have specified it, for me the "((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)" object is not written: writeObjects writeObjects(regExp=off,((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)) write: --> FOAM Warning : From function virtual Foam::wordList Foam::functionObjects::writeObjectsBase::objectNames() in file db/functionObjects/writeObjectsBase/writeObjectsBase.C at line 65 Object "((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)" not found in database. Available objects: 30 ( ((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf) GAMGAgglomeration MRFProperties . . . In both OpenFOAM-8 and OpenFOAM-dev |
|
That is just a warning in the first iteration. After the first iteration, it should work fine. By the way, that is another issue. But for me it does not matter , it is just a warning that happens at the very beginning. If you still cannot reproduce the case I can prepare an small example. |
|
> That is just a warning in the first iteration. After the first iteration, it should work fine. No, for me the field is never written. |
|
You will be able to reproduce the issue with the attached case. To run the case, type in the terminal: $> sh run_solver.sh It will run simpleFoam only one iteration. In the time directory 1, you will find the following additional fields: kOmegaSST:G (omega*yWall) The only field with issues in paraFoam is (omega*yWall). If you try to open the case with paraFoam, you will get this error: --> FOAM FATAL IO ERROR: wrong token type - expected word, found on line 14 the punctuation token '(' file: /home/joegi/my_files/ofcases/elbow_SIMPLE/1/(omega*yWall)/object at line 14. From function Foam::Istream& Foam::operator>>(Foam::Istream&, Foam::word&) in file primitives/strings/word/wordIO.C at line 74. FOAM exiting To fix the issue, erase the parentheses in the object description of the file (omega*yWall). Now the header should looks like this: FoamFile { version 2.0; format ascii; class volScalarField; location "1"; object omega*yWall; } By the way, for some reason the field (omega*yWall) is also saved in the time directory 0. You will need to modify or erase this file. After doing this simple modification, paraFoam will open the new field. Another issue with paraFoam, is that if you try to apply a filter calculator to the field (omega*yWall), paraFoam will complain. To fix this problem, you will need to rename the file as well. That is, you will need to erase the parentheses in the name of the file. This is why I think adding the option to save the field with a different name will fix these issues. In any-case, I think this is not big of a deal (at least for me) because I do the renaming using bash scripting. Another issue related with this case (but not to the additional fields), is that if you enable the scalarTransport functionObject, the case will crash. I haven't track this issue, maybe is something stupid that I don't see right now. |
|
> This is why I think adding the option to save the field with a different name will fix these issues. Can you fund this development or do you know of any company interested in funding it? |
|
Yes, we might be able to fund this. How much will be? Can we get in contact via private email? In any-case, I was checking nearWallFields, and a way around is doing something similar. In this functionObject, we can save the new field using the name UNear (or whatever). By the way, I checked with OF7 and the case will run with the scalarTransport functionObject. So I think there is something going on there with cacheTemporaryObjects and scalarTransport |
|
While the case you sent writes (omega*yWall) cacheTemporaryObjects ( "((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)" ); with the regex option off still does not write anything, could you send the case setup corresponding to your original report? > Yes, we might be able to fund this. How much will be? Can we get in contact via private email? You can contact the OpenFOAM Foundation: https://openfoam.org/news/funding-2020/ https://openfoam.org/contact/ |
|
Add the following in controlDict: cacheTemporaryObjects ( "kOmegaSST:G" "(omega*yWall)" "((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)" ); Then use the following functionObject, writeObjects2 { type writeObjects; libs ("libutilityFunctionObjects.so"); enabled on; writeControl outputTime; regExp off; objects ( "kOmegaSST:G" "(omega*yWall)" "((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)" ); } And it should work (at least it is working on my computer). I will try to reach the foundation using the links provided. |
|
Find attached my controlDict controlDict (3,615 bytes)
/*--------------------------------*- C++ -*----------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org \\ / A nd | Version: 8 \\/ M anipulation | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; object controlDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // application simpleFoam; startFrom startTime; startTime 0; stopAt endTime; //stopAt writeNow; endTime 1; deltaT 1; writeControl timeStep; writeInterval 1; purgeWrite 0; writeFormat ascii; writePrecision 8; writeCompression off; timeFormat general; timePrecision 6; runTimeModifiable true; cacheTemporaryObjects ( "kOmegaSST:G" "(omega*yWall)" "((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)" ); // ************************************************************************* // functions { /////////////////////////////////////////////////////////////////////////// minmaxdomain { type fieldMinMax; functionObjectLibs ("libfieldFunctionObjects.so"); enabled true; mode component; writeControl timeStep; writeInterval 1; log true; fields (p U s1 s2 k omega nut); } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// scalar1 { type scalarTransport; functionObjectLibs ("libsolverFunctionObjects.so"); enabled off; writeControl outputTime; //writeControl timeStep; //writeInterval 1; log yes; nCorr 1; //difussion coefficient D 0; //name of field field s1; //use the schemes of field, in this case, U //schemesField U; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// scalar2 { type scalarTransport; functionObjectLibs ("libsolverFunctionObjects.so"); enabled off; writeControl outputTime; //writeControl timeStep; //writeInterval 1; log yes; nCorr 2; //difussion coefficient D 0; //name of field field s2; //use the schemes of field, in this case, U //schemesField U; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// yplus { type yPlus; functionObjectLibs ("libutilityFunctionObjects.so"); enabled off; log true; writeControl outputTime; } /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////// writeObjects2 { type writeObjects; libs ("libutilityFunctionObjects.so"); enabled on; writeControl outputTime; //writeControl timeStep; //writeInterval 100; //writeOption anyWrite; //Switch-off to save complex cacheTemporaryObjects names regExp off; objects ( "kOmegaSST:G" "(omega*yWall)" "((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)" ); } /////////////////////////////////////////////////////////////////////////// }; |
|
When I use functions { #includeFunc writeObjects(regExp=off, "((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)") } in the tutorials/incompressible/simpleFoam/pitzDaily case nothing is written. |
|
commit 081f2d57262b4616658f7ea51cc541eff449eeb0 (HEAD -> master, origin/master, origin/HEAD) Author: Henry Weller <http://cfd.direct> Date: Sun Sep 27 20:13:56 2020 +0100 writeObjectsBase: Append explicit names (regExp = false) directly to the list resolves the issue with regExp=off |
|
can you provide an example on how to use it? For instance in this case. |
|
I put cacheTemporaryObjects ( "((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)" ); functions { #includeFunc writeObjects(regExp=off, "((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf)") } in the controlDict of the tutorials/incompressible/simpleFoam/pitzDaily case |
|
OK, I see that the commit fix one issue with the regExp expression but does not fix the issue with the names nor the issue of using cacheTemporaryObjects together with scalarTransport . |
|
No, I didn't intend for it to change the names, just ensure the field is written which previously it wasn't. Adding code to change the field names is not trivial. |
|
The issue you have with scalarTransport appears to be independent of the issue reported here as the case fails with scalarTransport with or without cacheTemporaryObjects. You will need to arrange for some user support. |
|
commit 06af648dc37a10c02531bc8b9d481995fa41ddc6 (HEAD -> master, origin/master, origin/HEAD) Author: Henry Weller <http://cfd.direct> Date: Tue Sep 29 17:21:06 2020 +0100 writeObjects: Prepend field expression names with "expr" for example cacheTemporaryObjects ( "((1|((1|(1|A(U)))-H(1)))-(1|A(U)))" ); functions { #includeFunc writeObjects(regExp=off, "((1|((1|(1|A(U)))-H(1)))-(1|A(U)))") } writes the temporary field with the name "expr((1|((1|(1|A(U)))-H(1)))-(1|A(U)))" so that it can be read by paraFoam and other post-processing tools. |
|
Ok, that seems to be a way around. However, to make it consistent, I think you should add expr to all temporary fields. For example, if you save the field kOmegaSST:G, expr is not preprend to the field. Another comment, in the dev version (at least on my installation), paraFoam does not open the field expr((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf) nor the field kOmegaSST:G. Instead, if I use version 8, it works ok. |
|
> I think you should add expr to all temporary fields. Why? kOmegaSST:G is not an expression, it does not start with '('. > paraFoam does not open the field expr((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf) How should it? it is a surfaceScalarField. How do you open it in OpenFOAM-8? |
|
I can open an visualise kEpsilon:G in paraFoam OpenFOAM-dev and OpenFOAM-8. I can visualise the boundary values of expr((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf) in paraFoam in both OpenFOAM-dev and OpenFOAM-8 because it is a surfaceScalarField and is defined on faces. |
|
Well, technically speaking I think kOmegaSST:G is an expression as you have the colon punctuation mark there (in my opinion). Even the linux bash will let you know that it is a special character. As I said, in my installation (OF DEV) I cannot open the fields expr((interpolate(((1|((1|(1|A(U)))-H(1)))-(1|A(U))))*snGrad(p))*magSf) and kOmegaSST:G (and some other fields that I like to access). To make it clear, the fields are not available to postprocess in paraview. OF8 works fine, maybe is something related to the OF plugin, I need to check my installation. Btw, I am not trying to visualize the surface fields, I am just pointing out that they are not available in the drop-down menu or the fields browser (again, in my OF DEV installation). |
|
kOmegaSST:G is not a mathematical expression it is an identifier. I do not have any problem viewing these fields in OpenFOAM-dev or 8, the paraFoam reader is the same in both versions. |
|
Resolved by commit 06af648dc37a10c02531bc8b9d481995fa41ddc6 |
Date Modified | Username | Field | Change |
---|---|---|---|
2020-09-27 02:46 | joegi | New Issue | |
2020-09-27 10:20 | henry | Note Added: 0011528 | |
2020-09-27 14:25 | joegi | Note Added: 0011529 | |
2020-09-27 14:55 | henry | Note Added: 0011530 | |
2020-09-27 18:37 | joegi | File Added: elbow_SIMPLE.tar.gz | |
2020-09-27 18:37 | joegi | Note Added: 0011531 | |
2020-09-27 18:47 | henry | Note Added: 0011532 | |
2020-09-27 18:55 | joegi | Note Added: 0011533 | |
2020-09-27 19:10 | henry | Note Added: 0011534 | |
2020-09-27 19:23 | joegi | Note Added: 0011535 | |
2020-09-27 19:27 | joegi | File Added: controlDict | |
2020-09-27 19:27 | joegi | Note Added: 0011536 | |
2020-09-27 20:12 | henry | Note Added: 0011537 | |
2020-09-27 20:15 | henry | Note Added: 0011538 | |
2020-09-27 20:31 | joegi | Note Added: 0011539 | |
2020-09-27 20:37 | henry | Note Added: 0011540 | |
2020-09-27 20:38 | henry | Note Edited: 0011540 | |
2020-09-27 21:00 | joegi | Note Added: 0011541 | |
2020-09-27 21:29 | henry | Note Added: 0011542 | |
2020-09-27 21:33 | henry | Note Edited: 0011542 | |
2020-09-27 21:34 | henry | Note Added: 0011543 | |
2020-09-29 17:24 | henry | Note Added: 0011556 | |
2020-09-29 19:39 | joegi | Note Added: 0011557 | |
2020-09-29 20:04 | henry | Note Added: 0011558 | |
2020-09-29 20:53 | henry | Note Added: 0011559 | |
2020-09-29 21:38 | joegi | Note Added: 0011560 | |
2020-09-29 21:45 | henry | Note Added: 0011561 | |
2020-09-29 21:46 | henry | Assigned To | => henry |
2020-09-29 21:46 | henry | Status | new => resolved |
2020-09-29 21:46 | henry | Resolution | open => fixed |
2020-09-29 21:46 | henry | Fixed in Version | => dev |
2020-09-29 21:46 | henry | Note Added: 0011562 |