]> https://gitweb.dealii.org/ - dealii.git/commitdiff
Generalized conversions between DerivativeForm<rank,dim,spacedim> and 1389/head
authorMaien Hamed <tomaien@hotmail.com>
Wed, 19 Aug 2015 14:29:23 +0000 (16:29 +0200)
committerMaien Hamed <tomaien@hotmail.com>
Wed, 19 Aug 2015 14:29:23 +0000 (16:29 +0200)
Tensor<rank,spacedim> to general ranks.

doc/news/changes.h
include/deal.II/base/derivative_form.h

index 73000a826a8423549c445f2729ff16eb7c96beb0..2f5981370500d3b8e9169b2678270e622e909dd3 100644 (file)
@@ -134,6 +134,13 @@ inconvenience this causes.
 
 
 <ol>
+  <li> Improved: Generalized conversion between Tensor<order+1,dim> and
+  DerivativeForm<order,dim,dim> to general order using converting constructor
+  and assignment operator.
+  <br>
+  (Maien Hamed, 2015/08/01-2015/08/09)
+  </li>
+
   <li> Changed: The function Vector::add() that adds a scalar number to all
   elements of a vector has been deprecated. The same is true for the
   Vector::ratio() function, and for the corresponding functions in other
index 961e900ef111b1d5a28d0b371f0e8e7802601e72..a93c8436303cedc8d180514b1cf44281c1613201 100644 (file)
@@ -63,9 +63,9 @@ public:
   DerivativeForm ();
 
   /**
-   * Constructor from a second order tensor.
+   * Constructor from a tensor.
    */
-  DerivativeForm (const Tensor<2,dim,Number> &);
+  DerivativeForm (const Tensor<order+1,dim,Number> &);
 
   /**
    * Read-Write access operator.
@@ -86,7 +86,7 @@ public:
   /**
    * Assignment operator.
    */
-  DerivativeForm   &operator = (const Tensor<2,dim, Number> &);
+  DerivativeForm   &operator = (const Tensor<order+1,dim, Number> &);
 
   /**
    * Assignment operator.
@@ -94,10 +94,11 @@ public:
   DerivativeForm   &operator = (const Tensor<1,dim, Number> &);
 
   /**
-   * Converts a DerivativeForm <1,dim, dim> to Tensor<2,dim,Number>. If the
-   * derivative is the Jacobian of F, then Tensor[i] = grad(F^i).
+   * Converts a DerivativeForm <order,dim,dim> to Tensor<order+1,dim,Number>.
+   * In particular, if order==1 and the derivative is the Jacobian of F, then
+   * Tensor[i] = grad(F^i).
    */
-  operator Tensor<2,dim,Number>() const;
+  operator Tensor<order+1,dim,Number>() const;
 
   /**
    * Converts a DerivativeForm <1, dim, 1> to Tensor<1,dim,Number>.
@@ -180,11 +181,11 @@ DerivativeForm<order, dim, spacedim, Number>::DerivativeForm  ()
 
 template <int order, int dim, int spacedim, typename Number>
 inline
-DerivativeForm<order, dim, spacedim, Number>::DerivativeForm(const Tensor<2,dim,Number> &T)
+DerivativeForm<order, dim, spacedim, Number>::DerivativeForm(const Tensor<order+1,dim,Number> &T)
 {
-  Assert( (dim == spacedim) && (order==1),
-          ExcMessage("Only allowed for square tensors."));
-  if ((dim == spacedim) && (order==1))
+  Assert( (dim == spacedim),
+          ExcMessage("Only allowed for forms with dim==spacedim."));
+  if (dim == spacedim)
     for (unsigned int j=0; j<dim; ++j)
       (*this)[j] = T[j];
 }
@@ -207,12 +208,12 @@ operator = (const DerivativeForm<order, dim, spacedim, Number> &ta)
 template <int order, int dim, int spacedim, typename Number>
 inline
 DerivativeForm<order, dim, spacedim, Number> &DerivativeForm<order, dim, spacedim, Number>::
-operator = (const Tensor<2,dim,Number> &ta)
+operator = (const Tensor<order+1,dim,Number> &ta)
 {
-  Assert( (dim == spacedim) && (order==1),
-          ExcMessage("Only allowed for square tensors."));
+  Assert( (dim == spacedim),
+          ExcMessage("Only allowed when dim==spacedim."));
 
-  if ((dim == spacedim) && (order==1))
+  if (dim == spacedim)
     for (unsigned int j=0; j<dim; ++j)
       (*this)[j] = ta[j];
   return *this;
@@ -276,14 +277,14 @@ DerivativeForm<order, dim, spacedim, Number>::operator Tensor<1,dim,Number>() co
 
 template <int order, int dim, int spacedim, typename Number>
 inline
-DerivativeForm<order, dim, spacedim, Number>::operator Tensor<2,dim,Number>() const
+DerivativeForm<order, dim, spacedim, Number>::operator Tensor<order+1,dim,Number>() const
 {
-  Assert( (dim == spacedim) && (order==1),
-          ExcMessage("Only allowed for square tensors."));
+  Assert( (dim == spacedim),
+          ExcMessage("Only allowed when dim==spacedim."));
 
-  Tensor<2,dim,Number> t;
+  Tensor<order+1,dim,Number> t;
 
-  if ((dim == spacedim) && (order==1))
+  if (dim == spacedim)
     for (unsigned int j=0; j<dim; ++j)
       t[j] = (*this)[j];
 

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.