59 bool Foam::expressions::exprResult::setAverageValueCheckedBool
71 const Field<Type>&
fld = *
static_cast<const Field<Type>*
>(fieldPtr_);
72 label len =
fld.size();
77 for (
const Type val :
fld)
87 reduce(nTrue, sumOp<label>());
99 reduce(len, sumOp<label>());
125 bool Foam::expressions::exprResult::getUniformCheckedBool
142 const Field<Type>&
fld = *
static_cast<const Field<Type>*
>(fieldPtr_);
143 label len =
fld.size();
148 for (
const Type val :
fld)
158 reduce(nTrue, sumOp<label>());
159 reduce(len, sumOp<label>());
162 const Type avg = (nTrue > len/2);
169 result.setResult<Type>(avg, size);
177 Foam::expressions::exprResult::singleValue::singleValue()
179 std::memset(
static_cast<void*
>(
this),
'\0',
sizeof(*
this));
183 Foam::expressions::exprResult::singleValue::singleValue
185 const singleValue& val
188 std::memcpy(
static_cast<void*
>(
this), &val,
sizeof(*
this));
192 void Foam::expressions::exprResult::singleValue::operator=
194 const singleValue& val
200 std::memcpy(
static_cast<void*
>(
this), &val,
sizeof(*
this));
246 valType_(
dict.getOrDefault<
word>(
"valueType",
"")),
247 isUniform_(
dict.getOrDefault(
"isSingleValue",
uniform)),
248 isPointData_(
dict.getOrDefault(
"isPointValue",
false)),
249 noReset_(
dict.getOrDefault(
"noReset",
false)),
258 if (
dict.found(
"value"))
260 const bool uniform = isUniform_;
265 ?
dict.getOrDefault<label>(
"fieldSize", 1)
266 :
dict.get<label>(
"fieldSize")
273 || readChecked<vector>(
"value",
dict, len,
uniform)
274 || readChecked<tensor>(
"value",
dict, len,
uniform)
275 || readChecked<symmTensor>(
"value",
dict, len,
uniform)
276 || readChecked<sphericalTensor>(
"value",
dict, len,
uniform)
282 if (valType_.empty())
289 <<
"Do not know how to read data type " << valType_
290 << (
uniform ?
" as a single value." :
".") <<
nl
297 <<
"No entry 'value' defined in " <<
dict.name() <<
nl
309 const word resultType
311 dict.getOrDefault<
word>(
"resultType",
"exprResult")
314 if (
dict.getOrDefault(
"unsetValue",
false))
316 auto cstrIter = emptyConstructorTablePtr_->cfind(resultType);
318 if (!cstrIter.found())
325 *emptyConstructorTablePtr_
330 <<
"Creating unset result of type " << resultType <<
nl;
336 auto cstrIter = dictionaryConstructorTablePtr_->cfind(resultType);
338 if (!cstrIter.found())
345 *dictionaryConstructorTablePtr_
350 <<
"Creating result of type " << resultType <<
nl;
376 if (force || !noReset_ || needsReset_)
390 objectPtr_.reset(
nullptr);
397 void Foam::expressions::exprResult::uglyDelete()
403 deleteChecked<scalar>()
404 || deleteChecked<vector>()
405 || deleteChecked<tensor>()
406 || deleteChecked<symmTensor>()
407 || deleteChecked<sphericalTensor>()
408 || deleteChecked<bool>()
414 <<
"Unknown type " << valType_
415 <<
" probable memory loss" <<
nl
433 if (fieldPtr_ ==
nullptr)
436 <<
"Not set. Cannot construct uniform value" <<
nl
444 getUniformChecked<scalar>(ret, size, noWarn, parRun)
445 || getUniformChecked<vector>(ret, size, noWarn, parRun)
446 || getUniformChecked<tensor>(ret, size, noWarn, parRun)
447 || getUniformChecked<symmTensor>(ret, size, noWarn, parRun)
448 || getUniformChecked<sphericalTensor>(ret, size, noWarn, parRun)
454 <<
"Cannot get uniform value for type " << valType_ <<
nl
464 if (fieldPtr_ ==
nullptr)
467 <<
"Not set - cannot determine if uniform" <<
nl <<
endl;
473 setAverageValueChecked<scalar>(parRun)
474 || setAverageValueChecked<vector>(parRun)
475 || setAverageValueChecked<tensor>(parRun)
476 || setAverageValueChecked<symmTensor>(parRun)
477 || setAverageValueChecked<sphericalTensor>(parRun)
478 || setAverageValueCheckedBool(parRun)
484 <<
"Unknown type " << valType_ <<
nl <<
endl;
500 valType_ = rhs.valType_;
501 isUniform_ = rhs.isUniform_;
502 isPointData_ = rhs.isPointData_;
503 single_ = rhs.single_;
509 duplicateFieldChecked<scalar>(rhs.fieldPtr_)
510 || duplicateFieldChecked<vector>(rhs.fieldPtr_)
511 || duplicateFieldChecked<tensor>(rhs.fieldPtr_)
512 || duplicateFieldChecked<symmTensor>(rhs.fieldPtr_)
513 || duplicateFieldChecked<sphericalTensor>(rhs.fieldPtr_)
514 || duplicateFieldChecked<bool>(rhs.fieldPtr_)
520 <<
" Type " << valType_ <<
" can not be copied" <<
nl
527 <<
"Assignment with general content not possible" <<
nl
542 valType_ = rhs.valType_;
543 isUniform_ = rhs.isUniform_;
544 isPointData_ = rhs.isPointData_;
545 noReset_ = rhs.noReset_;
546 needsReset_ = rhs.needsReset_;
549 single_ = rhs.single_;
550 fieldPtr_ = rhs.fieldPtr_;
552 objectPtr_.reset(rhs.objectPtr_.release());
554 rhs.fieldPtr_ =
nullptr;
567 writeEntryChecked<scalar>(keyword, os)
568 || writeEntryChecked<vector>(keyword, os)
569 || writeEntryChecked<tensor>(keyword, os)
570 || writeEntryChecked<symmTensor>(keyword, os)
571 || writeEntryChecked<sphericalTensor>(keyword, os)
572 || writeEntryChecked<bool>(keyword, os)
578 <<
"Unknown data type " << valType_ <<
endl;
604 if (fieldPtr_ ==
nullptr)
617 writeValueFieldChecked<scalar>(os)
618 || writeValueFieldChecked<vector>(os)
619 || writeValueFieldChecked<tensor>(os)
620 || writeValueFieldChecked<symmTensor>(os)
621 || writeValueFieldChecked<sphericalTensor>(os)
622 || writeValueFieldChecked<bool>(os)
628 <<
"Unknown data type " << valType_ <<
endl;
655 writeSingleValueChecked<scalar>(os)
656 || writeSingleValueChecked<vector>(os)
657 || writeSingleValueChecked<tensor>(os)
658 || writeSingleValueChecked<symmTensor>(os)
659 || writeSingleValueChecked<sphericalTensor>(os)
660 || writeSingleValueChecked<label>(os)
661 || writeSingleValueChecked<bool>(os)
667 <<
"Unknown data type " << valType_ <<
endl;
675 Foam::expressions::exprResult::operator*=
683 <<
"Can only multiply Field-type exprResult. Not "
690 <<
"Can not multiply. Unallocated field of type" << valType_ <<
nl
696 multiplyEqChecked<scalar>(
b)
697 || multiplyEqChecked<vector>(
b)
698 || multiplyEqChecked<tensor>(
b)
699 || multiplyEqChecked<symmTensor>(
b)
700 || multiplyEqChecked<sphericalTensor>(
b)
706 <<
"Can not multiply field of type "
716 Foam::expressions::exprResult::operator+=
724 <<
"Can only add Field-type, not type: "
731 <<
"Can not add. Unallocated field of type " << valType_ <<
nl
735 if (this->size() !=
b.size())
738 <<
"Different sizes " << this->size() <<
" and " <<
b.size() <<
nl
744 plusEqChecked<scalar>(
b)
745 || plusEqChecked<vector>(
b)
746 || plusEqChecked<tensor>(
b)
747 || plusEqChecked<symmTensor>(
b)
748 || plusEqChecked<sphericalTensor>(
b)
754 <<
"Can not add Field-type exprResult of type"
830 #undef defineExpressionMethod
831 #define defineExpressionMethod(Type) \
832 if (isType<Type>()) \
834 return static_cast<Field<Type>*>(fieldPtr_)->cdata(); \
843 #undef defineExpressionMethod
846 <<
"Unsupported type" << valType_ <<
nl