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