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(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 isPointVal_(
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")
272 || readChecked<scalar>(
"value",
dict, len,
uniform)
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)
281 if (valType_.empty())
288 <<
"Do not know how to read data type " << valType_
289 << (
uniform ?
" as a single value." :
".") <<
nl
296 <<
"No entry 'value' defined in " <<
dict.name() <<
nl
308 const word resultType
310 dict.getOrDefault<
word>(
"resultType",
"exprResult")
313 if (
dict.getOrDefault(
"unsetValue",
false))
315 auto cstrIter = emptyConstructorTablePtr_->cfind(resultType);
317 if (!cstrIter.found())
323 *emptyConstructorTablePtr_
328 <<
"Creating unset result of type " << resultType <<
nl;
334 auto cstrIter = dictionaryConstructorTablePtr_->cfind(resultType);
336 if (!cstrIter.found())
342 *dictionaryConstructorTablePtr_
347 <<
"Creating result of type " << resultType <<
nl;
373 if (force || !noReset_ || needsReset_)
394 void Foam::expressions::exprResult::uglyDelete()
400 deleteChecked<scalar>()
401 || deleteChecked<vector>()
402 || deleteChecked<tensor>()
403 || deleteChecked<symmTensor>()
404 || deleteChecked<sphericalTensor>()
405 || deleteChecked<bool>()
411 <<
"Unknown type " << valType_
412 <<
" probable memory loss" <<
nl
430 if (fieldPtr_ ==
nullptr)
433 <<
"Not set. Cannot construct uniform value" <<
nl
441 getUniformChecked<scalar>(ret, size, noWarn, parRun)
442 || getUniformChecked<vector>(ret, size, noWarn, parRun)
443 || getUniformChecked<tensor>(ret, size, noWarn, parRun)
444 || getUniformChecked<symmTensor>(ret, size, noWarn, parRun)
445 || getUniformChecked<sphericalTensor>(ret, size, noWarn, parRun)
451 <<
"Cannot get uniform value for type " << valType_ <<
nl
461 if (fieldPtr_ ==
nullptr)
464 <<
"Not set - cannot determine if uniform" <<
nl <<
endl;
470 setAverageValueChecked<scalar>(parRun)
471 || setAverageValueChecked<vector>(parRun)
472 || setAverageValueChecked<tensor>(parRun)
473 || setAverageValueChecked<symmTensor>(parRun)
474 || setAverageValueChecked<sphericalTensor>(parRun)
475 || setAverageValueCheckedBool(parRun)
481 <<
"Unknown type " << valType_ <<
nl <<
endl;
497 valType_ = rhs.valType_;
498 isUniform_ = rhs.isUniform_;
499 isPointVal_ = rhs.isPointVal_;
500 single_ = rhs.single_;
506 duplicateFieldChecked<scalar>(rhs.fieldPtr_)
507 || duplicateFieldChecked<vector>(rhs.fieldPtr_)
508 || duplicateFieldChecked<tensor>(rhs.fieldPtr_)
509 || duplicateFieldChecked<symmTensor>(rhs.fieldPtr_)
510 || duplicateFieldChecked<sphericalTensor>(rhs.fieldPtr_)
511 || duplicateFieldChecked<bool>(rhs.fieldPtr_)
517 <<
" Type " << valType_ <<
" can not be copied" <<
nl
521 else if (objectPtr_.valid())
524 <<
"Assignment with general content not possible" <<
nl
539 valType_ = rhs.valType_;
540 isUniform_ = rhs.isUniform_;
541 isPointVal_ = rhs.isPointVal_;
542 noReset_ = rhs.noReset_;
543 needsReset_ = rhs.needsReset_;
546 single_ = rhs.single_;
547 fieldPtr_ = rhs.fieldPtr_;
549 objectPtr_.reset(rhs.objectPtr_.release());
551 rhs.fieldPtr_ =
nullptr;
564 writeEntryChecked<scalar>(keyword, os)
565 || writeEntryChecked<vector>(keyword, os)
566 || writeEntryChecked<tensor>(keyword, os)
567 || writeEntryChecked<symmTensor>(keyword, os)
568 || writeEntryChecked<sphericalTensor>(keyword, os)
569 || writeEntryChecked<bool>(keyword, os)
575 <<
"Unknown data type " << valType_ <<
endl;
601 if (fieldPtr_ ==
nullptr)
614 writeValueFieldChecked<scalar>(os)
615 || writeValueFieldChecked<vector>(os)
616 || writeValueFieldChecked<tensor>(os)
617 || writeValueFieldChecked<symmTensor>(os)
618 || writeValueFieldChecked<sphericalTensor>(os)
619 || writeValueFieldChecked<bool>(os)
625 <<
"Unknown data type " << valType_ <<
endl;
652 writeSingleValueChecked<scalar>(os)
653 || writeSingleValueChecked<vector>(os)
654 || writeSingleValueChecked<tensor>(os)
655 || writeSingleValueChecked<symmTensor>(os)
656 || writeSingleValueChecked<sphericalTensor>(os)
657 || writeSingleValueChecked<label>(os)
658 || writeSingleValueChecked<bool>(os)
664 <<
"Unknown data type " << valType_ <<
endl;
672 Foam::expressions::exprResult::operator*=
680 <<
"Can only multiply Field-type exprResult. Not "
687 <<
"Can not multiply. Unallocated field of type" << valType_ <<
nl
693 multiplyEqChecked<scalar>(
b)
694 || multiplyEqChecked<vector>(
b)
695 || multiplyEqChecked<tensor>(
b)
696 || multiplyEqChecked<symmTensor>(
b)
697 || multiplyEqChecked<sphericalTensor>(
b)
703 <<
"Can not multiply field of type "
713 Foam::expressions::exprResult::operator+=
721 <<
"Can only add Field-type, not type: "
728 <<
"Can not add. Unallocated field of type " << valType_ <<
nl
732 if (this->size() !=
b.size())
735 <<
"Different sizes " << this->size() <<
" and " <<
b.size() <<
nl
741 plusEqChecked<scalar>(
b)
742 || plusEqChecked<vector>(
b)
743 || plusEqChecked<tensor>(
b)
744 || plusEqChecked<symmTensor>(
b)
745 || plusEqChecked<sphericalTensor>(
b)
751 <<
"Can not add Field-type exprResult of type"
827 #undef defineExpressionMethod
828 #define defineExpressionMethod(Type) \
829 if (isType<Type>()) \
831 return static_cast<Field<Type>*>(fieldPtr_)->cdata(); \
840 #undef defineExpressionMethod
843 <<
"Unsupported type" << valType_ <<
nl