Hello,

I think your approach is basically correct, but issue is that by default
the code skips assembly on internal sides for the sake of efficiency (since
usually we do not need to do assembly on internal sides). In order to not
skip internal sides you can set "impose_internal_fluxes = true" on your
RBConstruction object. That is false by default and if you look
at RBConstruction::add_scaled_matrix_and_vector() you will see that you
have to set it to true in order to loop over non-boundary sides.

Let me know if that works for you.

Best,
David

On Tue, Oct 8, 2019 at 6:57 AM Shinseong Kang <ss.k...@pusan.ac.kr> wrote:

> Hello, all.
>
>
>
> I tried to define an output in a simply supported 3-D beam problem.
>
> My output is an average displacement in the middle of the beam.
>
> For simplicity, I only used two brick elements, i.e, ■|■, where "■" is an
> element, and "|" is a location I want to compute the average output.
>
>
> To do this, I utilized the codes in RB example 5.
>
> First, I declared "ThetaOutput" (parameter-dependent term) and
> also declared "AssemblyOutput" (parameter-independent term) as follows:
>
> =======================================
>
> void  AssemblyOutput::boundary_assembly(FEMContext & c)
>
> {
>
>   if (rb_sys.get_mesh().get_boundary_info().has_boundary_id
>
>       (&c.get_elem(), c.side, BOUNDARY_ID_MID))
>
>     {
>
>       const unsigned int u_var = 0;
>
>       const unsigned int v_var = 1;
>
>
>       FEBase * side_fe = libmesh_nullptr;
>
>       c.get_side_fe(v_var, side_fe);
>
>
>       const std::vector<Real> & JxW_side = side_fe->get_JxW();
>
>
>       const std::vector<std::vector<Real> > & phi_side =
> side_fe->get_phi();
>
>
>       const unsigned int n_v_dofs = c.get_dof_indices(v_var).size();
>
>
>       unsigned int n_qpoints = c.get_side_qrule().n_points();
>
>       DenseSubVector<Number> & output = c.get_elem_residual(v_var);
>
>
>       for (unsigned int qp=0; qp < n_qpoints; qp++)
>
>         for (unsigned int i=0; i < n_v_dofs; i++)
>
>           output(i) += JxW_side[qp] * (1. * phi_side[i][qp]);
>
>     }
>
> }
>
> =======================================
> As you can see, The above code is very similar to "Assemblyp1" in
> "assembly.C" of RB example 5.
>
> However, I could not obtain the correct output because the above code
> cannot deal with interior side between elements.
> In other words, the boundary information of FEMContext only include outer
> side.
>
> I tried to find another way, but I could not find the right solution.
> Therefore, I'd like your help.
>
> To summarize my questions are as follows:
> 1. Is there any way to assemble an interior (neighbor) side between
> elements?
> 2. How to compute an average displacement for the middle of a beam in
> terms of the RB codes?
>
>
> Thank you.
>
>
>
> Best regards,
>
> Kang
>
>
> ------------------------------------------------------------
>
> Shinseong Kang
> Graduate Student
> Pusan National University, South Korea
>
> Tel.: +82-051-510-3052
> H.P.: +82-010-9770-6595
> E-mail: ss.k...@pusan.ac.kr
>
> ------------------------------------------------------------
>

_______________________________________________
Libmesh-users mailing list
Libmesh-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-users

Reply via email to