ENH: provide field functions with inplace/non-inplace variants
- the field functions use a variety of TFOR_ALL... macros to handle the field loops. However, these all have a __restrict__ keyword buried in the list access functions. This means that any operations with identical input and output violate the __restrict__ contract and this may be responsible for some of odd results seen with particular compiler versions. - updated the macros into inplace and non-inplace versions with an additional rename. For example, previous: TFOR_ALL_F_OP_FUNC_F(typeF1, f1, OP, FUNC, typeF2, f2) updated: TSEQ_FORALL_F_OP_FUNC_F(f1, OP, FUNC, f2) TSEQ_FORALL_F_OP_FUNC_F_inplace(f1, OP, FUNC, f2) The updated versions now start with a 'TSEQ_FORALL_' prefix to indicate that they roughly correspond to a <std::execution::seq> execution policy. The change of name is also useful since they are now also written supplying the parameter data types. The solution is still not necessarily optimal, since it involves a run-time check and more writing. For example, ``` if (result.cdata_bytes() == f1.cdata_bytes()) { // std::for_each TSEQ_FORALL_F_OP_F_FUNC_inplace(result, =, f1, T) } else { // std::transform TSEQ_FORALL_F_OP_F_FUNC(result, =, f1, T) } ``` However, the check is cheap and is only done once (outside of the loop). - possibly related to #2925, #3024, #3091, #3166
parent
dce009ce
Showing
- src/OpenFOAM/fields/DimensionedFields/DimensionedField/DimensionedFieldReuseFunctions.H 65 additions, 1 deletion...dFields/DimensionedField/DimensionedFieldReuseFunctions.H
- src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C 42 additions, 42 deletions...nFOAM/fields/FieldFields/FieldField/FieldFieldFunctions.C
- src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldFunctionsM.C 21 additions, 21 deletions...FOAM/fields/FieldFields/FieldField/FieldFieldFunctionsM.C
- src/OpenFOAM/fields/FieldFields/FieldField/FieldFieldReuseFunctions.H 63 additions, 3 deletions.../fields/FieldFields/FieldField/FieldFieldReuseFunctions.H
- src/OpenFOAM/fields/Fields/Field/Field.C 26 additions, 9 deletionssrc/OpenFOAM/fields/Fields/Field/Field.C
- src/OpenFOAM/fields/Fields/Field/FieldFunctions.C 169 additions, 60 deletionssrc/OpenFOAM/fields/Fields/Field/FieldFunctions.C
- src/OpenFOAM/fields/Fields/Field/FieldFunctionsM.C 95 additions, 19 deletionssrc/OpenFOAM/fields/Fields/Field/FieldFunctionsM.C
- src/OpenFOAM/fields/Fields/Field/FieldM.H 312 additions, 197 deletionssrc/OpenFOAM/fields/Fields/Field/FieldM.H
- src/OpenFOAM/fields/Fields/Field/FieldReuseFunctions.H 59 additions, 1 deletionsrc/OpenFOAM/fields/Fields/Field/FieldReuseFunctions.H
- src/OpenFOAM/fields/Fields/Field/ListLoopM.H 19 additions, 3 deletionssrc/OpenFOAM/fields/Fields/Field/ListLoopM.H
- src/OpenFOAM/fields/Fields/Field/errorCheckFields.H 133 additions, 0 deletionssrc/OpenFOAM/fields/Fields/Field/errorCheckFields.H
- src/OpenFOAM/fields/Fields/boolField/boolField.C 2 additions, 2 deletionssrc/OpenFOAM/fields/Fields/boolField/boolField.C
- src/OpenFOAM/fields/Fields/complex/complexField.C 1 addition, 1 deletionsrc/OpenFOAM/fields/Fields/complex/complexField.C
- src/OpenFOAM/fields/Fields/scalarField/scalarField.C 24 additions, 10 deletionssrc/OpenFOAM/fields/Fields/scalarField/scalarField.C
- src/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C 11 additions, 3 deletionssrc/OpenFOAM/fields/Fields/symmTensorField/symmTensorField.C
- src/OpenFOAM/fields/Fields/symmTransformField/symmTransformField.C 23 additions, 11 deletions...OAM/fields/Fields/symmTransformField/symmTransformField.C
- src/OpenFOAM/fields/Fields/tensorField/tensorField.C 12 additions, 4 deletionssrc/OpenFOAM/fields/Fields/tensorField/tensorField.C
- src/OpenFOAM/fields/Fields/transformField/transformField.C 23 additions, 7 deletionssrc/OpenFOAM/fields/Fields/transformField/transformField.C
- src/OpenFOAM/fields/Fields/transformField/transformFieldTemplates.C 43 additions, 21 deletions...AM/fields/Fields/transformField/transformFieldTemplates.C
- src/OpenFOAM/fields/Fields/transformList/transformList.C 10 additions, 10 deletionssrc/OpenFOAM/fields/Fields/transformList/transformList.C
Please register or sign in to comment