33 const List<scalar>& indices,
42 for (
int j = i + 1; j < dim_.size(); j++)
51 max(label((indices[i] - min_[i])/delta_[i]), 0),
58 label iLastdim = dim_.size() - 1;
63 label((indices[iLastdim] - min_[iLastdim])/delta_[iLastdim]),
86 label((indice - min_[i])/delta_[i]),
99 const scalar lookUpValue,
100 const label interfield
103 if (lookUpValue >= min_[interfield] && lookUpValue <= max_[interfield])
119 const scalar lookUpValue,
121 const label interfield
126 List<scalarField>::operator[](interfield).
operator[](hi)
127 != List<scalarField>::operator[](interfield).
operator[](lo)
132 List<scalarField>::operator[](ofield).
operator[](lo)
134 List<scalarField>::operator[](ofield).
operator[](hi)
135 - List<scalarField>::operator[](ofield).
operator[](lo)
139 - List<scalarField>::operator[](interfield).
operator[](lo)
142 List<scalarField>::operator[](interfield).
operator[](hi)
143 - List<scalarField>::operator[](interfield).
operator[](lo)
150 return List<scalarField>::operator[](ofield).operator[](lo);
159 dim_.setSize(entries_.size());
160 delta_.setSize(entries_.size());
161 max_.setSize(entries_.size());
162 entryIndices_.setSize(entries_.size());
163 outputIndices_.setSize(output_.size());
169 dim_[i] = readLabel(entries_[i].lookup(
"N"));
170 max_[i] =
readScalar(entries_[i].lookup(
"max"));
171 min_[i] =
readScalar(entries_[i].lookup(
"min"));
172 delta_[i] = (max_[i] - min_[i])/dim_[i];
173 tableDim *= dim_[i] + 1;
174 fieldIndices_.insert(entries_[i].lookup(
"name"), index);
175 entryIndices_[i] = index;
181 fieldIndices_.insert(output_[i].lookup(
"name"), index);
182 outputIndices_[i] = index;
186 List<scalarField>&
internal = *
this;
188 internal.setSize(entries_.size() + output_.size());
190 interpOutput_.setSize(entries_.size() + output_.size());
194 internal[i].setSize(tableDim);
202 const word& instance,
218 control.lookup(
"fields") >> entries_;
219 control.lookup(
"output") >> output_;
220 control.lookup(
"values") >> *
this;
226 if (this->size() == 0)
230 "Foam::interpolationLookUpTable<Type>::readTable()"
242 fileName_(
"fileNameIsUndefined")
264 readTable(instance, mesh);
275 fileName_(interpTable.fileName_),
276 entryIndices_(interpTable.entryIndices_),
277 outputIndices_(interpTable.outputIndices_),
278 dim_(interpTable.dim_),
279 min_(interpTable.min_),
280 delta_(interpTable.delta_),
281 max_(interpTable.max_),
284 interpOutput_(interpTable.interpOutput_)
300 entries_(dict.
lookup(
"fields")),
301 output_(dict.
lookup(
"output")),
319 for (
int j = 1; j < dim_.size(); j++)
324 for (label i = 1; i < dim_[0]; i++)
327 const scalar currValue =
331 if (currValue <= prevValue)
335 "Foam::interpolationLookUpTable<Type>::checkOrder() const"
336 ) <<
"out-of-order value: " << currValue
339 prevValue = currValue;
349 const word& instance,
373 if (this->size() == 0)
377 "Foam::interpolationTable<Type>::write()"
392 label n = this->size();
398 "Foam::interpolationLookUpTable<Type>::operator[](const label)"
405 "Foam::interpolationLookUpTable<Type>::operator[](const label)"
412 "Foam::interpolationLookUpTable<Type>::operator[](const label)"
425 label n = this->size();
431 "Foam::interpolationLookUpTable<Type>::operator[]"
432 "(const label) const"
439 "Foam::interpolationLookUpTable<Type>::operator[]"
440 "(const label) const"
448 "Foam::interpolationLookUpTable<Type>::operator[]"
449 "(const label) const"
450 ) <<
"index (" << ii <<
") overflow" <<
nl
461 return fieldIndices_.
found(fieldName);
469 const label lo = index(retvals);
471 return interpOutput_;
485 label ofield = outputIndices_[j];
490 if (checkRange(retvals, entryIndices_[i]))
494 label hi =
Foam::min(lo + dim, (*
this)[0].size() - 1);
496 tmp +=
interpolate(lo, hi, retvals, ofield, entryIndices_[i])
499 interpOutput_[entryIndices_[i]] = retvals;
503 interpOutput_[outputIndices_[j]] = tmp;