|
|
@ -36,10 +36,6 @@ |
|
|
|
# system/validationDict |
|
|
|
# system/validationDict |
|
|
|
Idea for a Foam-formated file for Verify |
|
|
|
Idea for a Foam-formated file for Verify |
|
|
|
```c++ |
|
|
|
```c++ |
|
|
|
// List of variables to be checked; optional, since MD5 validation does not |
|
|
|
|
|
|
|
// use any variables. |
|
|
|
|
|
|
|
variables ("phi" "meanT"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Execution is run in sequence: If the first run ("quick") fails, then the |
|
|
|
// Execution is run in sequence: If the first run ("quick") fails, then the |
|
|
|
// second run ("short") is run, and if that fails, the third is run ("long"), |
|
|
|
// second run ("short") is run, and if that fails, the third is run ("long"), |
|
|
|
// and so on. On the other hand, the execution of the runs stops on the first |
|
|
|
// and so on. On the other hand, the execution of the runs stops on the first |
|
|
@ -59,16 +55,15 @@ variables ("phi" "meanT"); |
|
|
|
// so on. |
|
|
|
// so on. |
|
|
|
|
|
|
|
|
|
|
|
runs |
|
|
|
runs |
|
|
|
( |
|
|
|
( |
|
|
|
// This is a quick test: The example is reduced to just 2 timesteps, and |
|
|
|
// This is a quick test: The example is reduced to just 2 timesteps, and |
|
|
|
// we check the resulting file against its MD5 hash. |
|
|
|
// we check the resulting file against its MD5 hash. |
|
|
|
quick { |
|
|
|
quick { |
|
|
|
steps 2; |
|
|
|
steps 2; |
|
|
|
generatedFile "postProcessing/2/blah"; |
|
|
|
// Any other key name that it is not reserved ("steps", "continuations") |
|
|
|
// because the validation is in MD5 format, there is no need to have |
|
|
|
// represents a file to be compared. |
|
|
|
// a referenceFile |
|
|
|
"postProcessing/2/qux" { |
|
|
|
failIf { |
|
|
|
md5 "123123"; |
|
|
|
md5Differs "123123"; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -78,10 +73,6 @@ runs |
|
|
|
// will fail if relative or absolute differences are above 0. |
|
|
|
// will fail if relative or absolute differences are above 0. |
|
|
|
short { |
|
|
|
short { |
|
|
|
steps 10; |
|
|
|
steps 10; |
|
|
|
generatedFile "postProcessing/10/blah"; |
|
|
|
|
|
|
|
referenceFile "verification/10/blah"; |
|
|
|
|
|
|
|
// No tolerances mean "it will warn if the values are not the same" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// This makes the continuations explicit, by specificing files that |
|
|
|
// This makes the continuations explicit, by specificing files that |
|
|
|
// form a single run. |
|
|
|
// form a single run. |
|
|
|
continuations ( |
|
|
|
continuations ( |
|
|
@ -89,6 +80,17 @@ runs |
|
|
|
"system/caseSetupDict.continuation1" |
|
|
|
"system/caseSetupDict.continuation1" |
|
|
|
"system/caseSetupDict.continuation2" |
|
|
|
"system/caseSetupDict.continuation2" |
|
|
|
); |
|
|
|
); |
|
|
|
|
|
|
|
"postProcessing/10/foo" { |
|
|
|
|
|
|
|
reference "verification/10/foo"; |
|
|
|
|
|
|
|
variables "phi" "Tmean"; |
|
|
|
|
|
|
|
// No tolerances mean "it will fail if the values are not the same". |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// This is a completely different file from the above, with different |
|
|
|
|
|
|
|
// keys |
|
|
|
|
|
|
|
"postProcessing/10/bar" { |
|
|
|
|
|
|
|
reference "verification/10/bar"; |
|
|
|
|
|
|
|
variables "Tmin" "Tmax"; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// If in 10 timestemps the values do not match the reference file, a 100 |
|
|
|
// If in 10 timestemps the values do not match the reference file, a 100 |
|
|
@ -97,31 +99,32 @@ runs |
|
|
|
// threshold. |
|
|
|
// threshold. |
|
|
|
long { |
|
|
|
long { |
|
|
|
steps 100; |
|
|
|
steps 100; |
|
|
|
generatedFile "postProcessing/100/blah"; |
|
|
|
// This file only appears in the 100 runs, so we can't have a global |
|
|
|
referenceFile "verification/100/blah"; |
|
|
|
// list of files not attached to steps (although it is the same "foo" |
|
|
|
failIf { |
|
|
|
// from 10 steps). |
|
|
|
absolute 10; |
|
|
|
"postProcessing/100/foo" { |
|
|
|
relative 10; |
|
|
|
reference "verification/100/foo"; |
|
|
|
// will fail is the absolute difference is above 10 AND the |
|
|
|
variables "phi" "Tmean"; |
|
|
|
// relative difference is above 10; |
|
|
|
} |
|
|
|
operator and; |
|
|
|
"postProcessing/100/bar" { |
|
|
|
|
|
|
|
reference "verification/100/bar"; |
|
|
|
|
|
|
|
variables "Tmin" "Tmax"; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// If the 100 timesteps fails, then we run the example a 4th time, this |
|
|
|
// If the 100 timesteps fails, then we run the example a 4th time, this |
|
|
|
// time without any reductions (the "steps" property is not set in this |
|
|
|
// time without any reductions (the "steps" property is not set in this |
|
|
|
// run). There are no continations either. |
|
|
|
// run). There are no continations either. |
|
|
|
infinite { |
|
|
|
"run till completion" { |
|
|
|
// With no steps, there is no reduction. |
|
|
|
// With no steps, there is no reduction. |
|
|
|
// (maybe we need something to tell that there is no reduction |
|
|
|
"postProcessing/20000/baz" { |
|
|
|
// explicitly?) |
|
|
|
reference "verification/20000/baz"; |
|
|
|
generatedFile "postProcessing/20000/blah;" |
|
|
|
variables "integral"; |
|
|
|
referenceFile "verification/20000/blah"; |
|
|
|
|
|
|
|
failIf { |
|
|
|
|
|
|
|
absolute 20; |
|
|
|
absolute 20; |
|
|
|
relative 20; |
|
|
|
relative 20; |
|
|
|
// no operator means OR, so example will fail if the absolute |
|
|
|
// no operator means OR, so example will fail if the |
|
|
|
// different is above 20 OR the relative difference is above 20 |
|
|
|
// absolute different is above 20 OR the relative |
|
|
|
|
|
|
|
// difference is above 20. |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
); |
|
|
|
); |
|
|
@ -345,3 +348,25 @@ loop { |
|
|
|
- DictEnd: This dictionary is complete, return it |
|
|
|
- DictEnd: This dictionary is complete, return it |
|
|
|
- Anything else: |
|
|
|
- Anything else: |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Post lexer work |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- [ ] grep filter on expansion |
|
|
|
|
|
|
|
- [ ] Runner with comparer |
|
|
|
|
|
|
|
- Spawn tasks? How to join? |
|
|
|
|
|
|
|
- Also, since the executor follows one run, and the comparer follow that run, does it matter using tasks? |
|
|
|
|
|
|
|
- [x] Build "rundir" when loading Verification |
|
|
|
|
|
|
|
- [ ] Variations?!?! |
|
|
|
|
|
|
|
- Expand the whole case at the start. |
|
|
|
|
|
|
|
- Load verification from expanded dirs. |
|
|
|
|
|
|
|
- This is what the "Loader" was doing before, which I inadvertently merged with the verification loader. |
|
|
|
|
|
|
|
- Order is mixed: The whole example can be expanded into their runs, but the execution is per non-expanded content (default, variations) |
|
|
|
|
|
|
|
- Need to send, into the pipeline, the default, variations and the replicated Verification for each. |
|
|
|
|
|
|
|
- Problem: The variation may contain different steps, anyway. So need to "expand" without having the verification info beforehand. |
|
|
|
|
|
|
|
- What if: |
|
|
|
|
|
|
|
- Expand default run into `.run-default` |
|
|
|
|
|
|
|
- Expand variations into `.run-[variationname]` |
|
|
|
|
|
|
|
- Inside each of those, expand the case (default won't expand, but still....) |
|
|
|
|
|
|
|
- We could say it is not possible to add a new verificationDict into variations, but I do like the idea of having a different content for it. |
|
|
|
|
|
|
|
- Ok, ignoring this for now 'cause it fucks up my thinking. |
|
|
|
|
|
|
|
- Expand by run on default, send variations down the pipeline |