Thread Previous • Date Previous • Date Next • Thread Next |
Anders Logg wrote:
On Thu, Feb 14, 2008 at 12:00:38PM +0100, Dag Lindbo wrote:The searching part has been sorted out. How do I get the ufc::finite_element from the function and/or the form? E.g.Then I suggest first finding out which cells those points lie in, then then for each cell with a point get the expansion coefficients within that cell, then multiply those coefficients with the values of the basis functions at the points. The basis functions are available from the ufc::finite_element.Function f(mesh, 0.0); StokesTHBilinearForm a; StokesTHLinearForm L(f); LinearPDE pde(a, L, mesh, bcs); pde.set("PDE linear solver", "direct"); pde.solve(u, p); ufc::form frm = a.form(); // form() is virtual ufc::finite_element fe = frm.create_finite_element();You should be able to do this: // Create element (the '0' means create it for the space used for the // first argument in the form, '1' for second etc) ufc::finite_element* element = a.form().create_finite_element(0);
Thanks! In my case element->space_dimension() return 15 (dofs) which makes sense, since I have a Taylor-Hood element (but will problably switch later). However, I only want to pick out the velocity components. How should a mixed element be handled?
I have(u is a Function): Cell cell(mesh,cell_nr); UFCCell ufc_cell(cell); ufc::finite_element* fe = a->form().create_finite_element(0); ufc::dof_map* ufc_dof_map = a->form().create_dof_map(0); DofMap* dof_map = new DofMap(*ufc_dof_map, mesh); unsigned int* dofs = new unsigned int[dof_map->local_dimension()]; real* basis_values = new real[fe->space_dimension()]; real* dof_values = new real[fe->space_dimension()]; Vector vec = u.vector(); dof_map->tabulate_dofs(dofs,ufc_cell); vec.get(dof_values, dof_map->local_dimension(), dofs);
// Use it for a while element->tabulate_basis(...); ... // Then delete it delete element;
Thread Previous • Date Previous • Date Next • Thread Next |