Hi all, 

I was testing my code, with method of manufactured solution. 

I have a source term, which is vector value, defined as .. 


  template <int dim>

  class RightHandSide : public Function<dim>

  {

  public:

    RightHandSide () : Function<dim>(dim+1) {}


    virtual void vector_value (const Point<dim> &p,

                               Vector<double>   &value) const;


  };


  template <int dim>

  void

  RightHandSide<dim>::vector_value (const Point<dim> &p,

                                    Vector<double>   &values) const

  {

      

      double n = 0.5 ;

      

      double x =p[0]; double y=p[1];

      

      double f_x=2*x + 7*y - 4*Power(E,3*(Power(-0.5 + x,2) + Power(-0.5 + 
y,2)))*(-0.5 + n)*

      (1 + 2*Power(-0.5 + x,2))*(-0.5 + x)*

      (240. - 320.*x + 448.*Power(x,2) - 256.*Power(x,3) + 128.*Power(x,4) 
- 192.*y +

       320.*Power(y,2) - 256.*Power(y,3) + 128.*Power(y,4))*

      Power(1 + (Power(E,2*(Power(-0.5 + x,2) + Power(-0.5 + y,2)))*

                 (64.*Power(0.75 - 1.*x + Power(x,2),2) + 64.*Power(0.75 - 
1.*y + Power(y,2),2)))

            /2.,-1.5 + n) - 16.*Power(E,Power(-0.5 + x,2) + Power(-0.5 + y,2
))*(-0.5 + x)*

      Power(1 + (Power(E,2*(Power(-0.5 + x,2) + Power(-0.5 + y,2)))*

                 (64.*Power(0.75 - 1.*x + Power(x,2),2) + 64.*Power(0.75 - 
1.*y + Power(y,2),2)))

            /2.,-0.5 + n) - 8*Power(E,Power(-0.5 + x,2) + Power(-0.5 + y,2
))*

      (1 + 2*Power(-0.5 + x,2))*(-0.5 + x)*

      Power(1 + (Power(E,2*(Power(-0.5 + x,2) + Power(-0.5 + y,2)))*

                 (64.*Power(0.75 - 1.*x + Power(x,2),2) + 64.*Power(0.75 - 
1.*y + Power(y,2),2)))

            /2.,-0.5 + n);

      

      double f_y=7*x + 8.*Power(E,3*(Power(-0.5 + x,2) + Power(-0.5 + y,2
)))*(-0.5 + n)*(-0.5 + y)*

      (0.75 - 1.*y + Power(y,2))*(240. - 192.*x + 320.*Power(x,2) - 256.
*Power(x,3) +

                                  128.*Power(x,4) - 320.*y + 448.*Power(y,2) 
- 256.*Power(y,3) + 128.*Power(y,4))*

      Power(1 + (Power(E,2*(Power(-0.5 + x,2) + Power(-0.5 + y,2)))*

                 (64.*Power(0.75 - 1.*x + Power(x,2),2) + 64.*Power(0.75 - 
1.*y + Power(y,2),2)))

            /2.,-1.5 + n) + 16.*Power(E,Power(-0.5 + x,2) + Power(-0.5 + y,2
))*(-0.5 + y)*

      Power(1 + (Power(E,2*(Power(-0.5 + x,2) + Power(-0.5 + y,2)))*

                 (64.*Power(0.75 - 1.*x + Power(x,2),2) + 64.*Power(0.75 - 
1.*y + Power(y,2),2)))

            /2.,-0.5 + n) + 16.*Power(E,Power(-0.5 + x,2) + Power(-0.5 + y,2
))*(-0.5 + y)*

      (0.75 - 1.*y + Power(y,2))*Power(1 +

                                       (Power(E,2*(Power(-0.5 + x,2) + 
Power(-0.5 + y,2)))*

                                        (64.*Power(0.75 - 1.*x + Power(x,2),
2) + 64.*Power(0.75 - 1.*y + Power(y,2),2)))

                                       /2.,-0.5 + n);

      

      

      values(0) =  f_x;

      values(1) =  f_y;

      values(2) =  0;

  }
 


and I wanted to assemble RHS in assemble_system function


 template <int dim>  // Described in Cartesian Coordinate

  void ShearProblem<dim>::assemble_system ()

  {

    system_matrix=0;

    system_rhs=0;

    

      

      // Variable Coefficient

    double shear_rate;

    double viscosity;

    

    const MappingQ<dim> mapping (degree);

    QGauss<dim>   quadrature_formula(4*degree+1);


    FEValues<dim> fe_values (mapping, fe, quadrature_formula,

                             update_values    |

                             update_quadrature_points  |

                             update_JxW_values |

                             update_gradients);


    const unsigned int   dofs_per_cell   = fe.dofs_per_cell;

    const unsigned int   n_q_points      = quadrature_formula.size();


    FullMatrix<double>   local_matrix (dofs_per_cell, dofs_per_cell);

    Vector<double>       local_rhs (dofs_per_cell);


    std::vector<types::global_dof_index> local_dof_indices (dofs_per_cell);


    const RightHandSide<dim>          right_hand_side;

      

    std::vector<Vector<double> >      rhs_values (n_q_points, Vector<double
>(dim+1));


    const FEValuesExtractors::Vector velocities (0);

    const FEValuesExtractors::Scalar xvel (0);

    const FEValuesExtractors::Scalar pressure (dim);


   

    std::vector<SymmetricTensor<2,dim> > symgrad_phi_u (dofs_per_cell);

    std::vector<double>                  div_phi_u   (dofs_per_cell);

    std::vector<double>                  phi_p       (dofs_per_cell);


      

    std::vector<SymmetricTensor<2,dim> > local_previous_symgrad_phi_u 
(n_q_points);

    std::vector<double>  local_previous_solution (n_q_points);



    typename DoFHandler<dim>::active_cell_iterator

    cell = dof_handler.begin_active(),

    endc = dof_handler.end();

    for (; cell!=endc; ++cell)

      {

        fe_values.reinit (cell);

        local_matrix = 0;

        local_rhs = 0;


        
right_hand_side.vector_value_list(fe_values.get_quadrature_points(),rhs_values);

        fe_values[velocities].get_function_symmetric_gradients 
(previous_solution, local_previous_symgrad_phi_u);

          

          

        for (unsigned int q=0; q<n_q_points; ++q)

          {

              

              // AT Each Quadrature Point, Viscosity is calcualted from 
previous solution

              

              shear_rate = std::sqrt( local_previous_symgrad_phi_u[q]* 
local_previous_symgrad_phi_u[q] *2 );

              

              //HB model

              viscosity = std::pow( 1+pow(shear_rate,2) , (power_n-1)/2);

              

              

              

            for (unsigned int k=0; k<dofs_per_cell; ++k)

              {

                symgrad_phi_u[k] = fe_values[velocities].symmetric_gradient 
(k, q);

                div_phi_u[k]     = fe_values[velocities].divergence (k, q);

                phi_p[k]         = fe_values[pressure].value (k, q);

              }


            for (unsigned int i=0; i<dofs_per_cell; ++i)

              {

                for (unsigned int j=0; j<dofs_per_cell; ++j)

                  {

                      local_matrix(i,j) += (2 * viscosity * 
(symgrad_phi_u[i] * symgrad_phi_u[j])

                                            - div_phi_u[i] * phi_p[j]

                                            - phi_p[i] * div_phi_u[j]

                                            + phi_p[i] * phi_p[j]) * 
fe_values.JxW(q);


                  }

              }

              for (unsigned int i=0; i<dofs_per_cell; ++i)

              {

                  

               * local_rhs(i) += fe_values.shape_value(i,q) **

*                                rhs_values[q] **

*                                fe_values.JxW(q);*

              }

          }




        cell->get_dof_indices (local_dof_indices);

        constraints.distribute_local_to_global (local_matrix, local_rhs,

                                                local_dof_indices,

                                                system_matrix, system_rhs);

      }




but I have compile error when I tried to run the code.

which is like ...

*/Users/jaekwangjk/repos/simpleshear/shear.cc:609:60: **error: **invalid 
operands to*

*      binary expression ('double' and 'value_type' (aka*

*      'dealii::Vector<double>'))*

                local_rhs(i) += fe_values.shape_value(i,q) *

*                                ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^*

*/Users/jaekwangjk/repos/simpleshear/shear.cc:879:9: note: *in 
instantiation of

      member function 'MyStokes::ShearProblem<2>::assemble_system' requested

      here

        assemble_system ();

*        ^*

*/Users/jaekwangjk/repos/simpleshear/shear.cc:1054:22: note: *in 
instantiation of

      member function 'MyStokes::ShearProblem<2>::run' requested here

        simple_shear.run ();

*                     ^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/complex_overloads.h:39:1:
 
note: *

      candidate template ignored: could not match 
'complex<type-parameter-0-0>'

      against 'const double'

operator*(const std::complex<T> &left, const std::complex<U> &right)

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/complex_overloads.h:57:1:
 
note: *

      candidate template ignored: could not match 
'complex<type-parameter-0-0>'

      against 'const double'

operator*(const std::complex<T> &left, const U &right)

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/complex_overloads.h:75:1:
 
note: *

      candidate template ignored: could not match 'complex' against 'Vector'

operator*(const T &left, const std::complex<U> &right)

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/tensor.h:1232:1: 
note: *

      candidate template ignored: could not match 'Tensor' against 'Vector'

operator * (const Other                 object,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/tensor.h:1250:1: 
note: *

      candidate template ignored: could not match 'Tensor<0, dim,

      type-parameter-0-1>' against 'const double'

operator * (const Tensor<0,dim,Number> &t,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/tensor.h:1269:1: 
note: *

      candidate template ignored: could not match 'Tensor<0, dim,

      type-parameter-0-1>' against 'const double'

operator * (const Tensor<0, dim, Number>      &src1,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/tensor.h:1335:1: 
note: *

      candidate template ignored: could not match 'Tensor<rank, dim,

      type-parameter-0-2>' against 'const double'

operator * (const Tensor<rank,dim,Number> &t,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/tensor.h:1361:1: 
note: *

      candidate template ignored: could not match 'Tensor' against 'Vector'

operator * (const Number                        factor,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/tensor.h:1468:1: 
note: *

      candidate template ignored: could not match 'Tensor<rank_1, dim,

      type-parameter-0-3>' against 'const double'

operator * (const Tensor<rank_1, dim, Number> &src1,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/point.h:482:1: 
note: *

      candidate template ignored: could not match 'Point' against 'Vector'

operator * (const OtherNumber        factor,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/symmetric_tensor.h:2635:1:
 
note: *

      candidate template ignored: could not match 'SymmetricTensor<rank, 
dim,

      type-parameter-0-2>' against 'const double'

operator * (const SymmetricTensor<rank,dim,Number> &t,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/symmetric_tensor.h:2655:1:
 
note: *

      candidate template ignored: could not match 'SymmetricTensor' against

      'Vector'

operator * (const Number                            factor,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/symmetric_tensor.h:2709:1:
 
note: *

      candidate template ignored: could not match 'SymmetricTensor<rank, 
dim,

      type-parameter-0-2>' against 'const double'

operator * (const SymmetricTensor<rank,dim,Number> &t,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/symmetric_tensor.h:2736:1:
 
note: *

      candidate template ignored: could not match 'SymmetricTensor' against

      'Vector'

operator * (const Number                     factor,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/symmetric_tensor.h:2772:1:
 
note: *

      candidate template ignored: could not match 'SymmetricTensor<rank, 
dim,

      double>' against 'const double'

operator * (const SymmetricTensor<rank,dim> &t,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/symmetric_tensor.h:2791:1:
 
note: *

      candidate template ignored: could not match 'SymmetricTensor' against

      'Vector'

operator * (const double                     factor,

*^*

*/Users/jaekwangjk/Programs/dealii/include/deal.II/base/symmetric_tensor.h:3086:1:
 
note: *

      candidate template ignored: could not match 'SymmetricTensor<2, dim,

      type-parameter-0-1>' against 'const double'

operator * (const SymmetricTensor<2,dim,Number> &src1,

*^*

1 error generated.



I would appreciate if someone tells me what I am doing wrong...

Thank you !

Jaekwang Kim 

-- 
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dealii+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to