42 const Type& defaultValue,
56 const Type& defaultValue,
89 dimensions_(dt.dimensions_),
106 template <
class Type>
119 template <
class Type>
135 template <
class Type>
141 template <
class Type>
148 template <
class Type>
154 template <
class Type>
161 template <
class Type>
167 template <
class Type>
174 template <
class Type>
189 template <
class Type>
196 dimensions_ = dc.dimensions();
197 value_.replace(d, dc.value());
201 template <
class Type>
210 template <
class Type>
220 template <
class Type>
226 dimensions_ += dt.dimensions_;
231 template <
class Type>
237 dimensions_ -= dt.dimensions_;
242 template <
class Type>
252 template <
class Type>
264 template<
class Type,
int r>
270 "pow(" + dt.
name() +
',' +
name(r) +
')',
282 "sqr(" + dt.
name() +
')',
293 "magSqr(" + dt.
name() +
')',
304 "mag(" + dt.
name() +
')',
311 template <
class Type>
312 dimensioned<Type>
max
320 FatalErrorIn(
"max(const dimensioned<Type>&, const dimensioned<Type>&)")
321 <<
"dimensions of arguments are not equal"
327 "max(" + dt1.
name() +
',' + dt2.
name() +
')',
334 template <
class Type>
335 dimensioned<Type>
min
343 FatalErrorIn(
"min(const dimensioned<Type>&, const dimensioned<Type>&)")
344 <<
"dimensions of arguments are not equal"
350 "min(" + dt1.
name() +
',' + dt2.
name() +
')',
359 template <
class Type>
363 is >> dt.name_ >> dt.dimensions_ >> dt.value_;
366 is.
check(
"Istream& operator>>(Istream&, dimensioned<Type>&)");
372 template <
class Type>
373 Ostream& operator<<(Ostream& os, const dimensioned<Type>& dt)
381 os.check(
"Ostream& operator<<(Ostream&, const dimensioned<Type>&)");
389 template <
class Type>
400 template <
class Type>
411 template <
class Type>
412 dimensioned<Type>
operator+
420 '(' + dt1.
name() +
'+' + dt2.
name() +
')',
427 template <
class Type>
439 template <
class Type>
440 dimensioned<Type>
operator-
448 '(' + dt1.
name() +
'-' + dt2.
name() +
')',
455 template <
class Type>
456 dimensioned<Type>
operator*
464 '(' + ds.name() +
'*' + dt.
name() +
')',
466 ds.value() * dt.
value()
471 template <
class Type>
472 dimensioned<Type>
operator/
480 '(' + dt.
name() +
'|' + ds.name() +
')',
482 dt.
value()/ds.value()
490 #define PRODUCT_OPERATOR(product, op, opFunc) \
492 template<class Type1, class Type2> \
493 dimensioned<typename product<Type1, Type2>::type> \
494 operator op(const dimensioned<Type1>& dt1, const dimensioned<Type2>& dt2) \
496 return dimensioned<typename product<Type1, Type2>::type> \
498 '(' + dt1.name() + #op + dt2.name() + ')', \
499 dt1.dimensions() op dt2.dimensions(), \
500 dt1.value() op dt2.value() \
504 template<class Type, class Form, class Cmpt, int nCmpt> \
505 dimensioned<typename product<Type, Form>::type> \
508 const dimensioned<Type>& dt1, \
509 const VectorSpace<Form,Cmpt,nCmpt>& t2 \
512 return dimensioned<typename product<Type, Form>::type> \
514 '(' + dt1.name() + #op + name(t2) + ')', \
516 dt1.value() op static_cast<const Form&>(t2) \
520 template<class Type, class Form, class Cmpt, int nCmpt> \
521 dimensioned<typename product<Form, Type>::type> \
524 const VectorSpace<Form,Cmpt,nCmpt>& t1, \
525 const dimensioned<Type>& dt2 \
528 return dimensioned<typename product<Form, Type>::type> \
530 '(' + name(t1) + #op + dt2.name() + ')', \
532 static_cast<const Form&>(t1) op dt2.value() \
542 #undef PRODUCT_OPERATOR