On Mon, 7 Nov 2005, Guillaume ANCIAUX wrote:
> why do you make the difference with the solution vector ? there is a
> privileged communication process for it ?
Ben Kirk really needs to jump in on this discussion. To the best of
my knowledge there's no longer anything special about the solution
vector with regards to projections and parallel computations, but Ben
did the latter work and I haven't really looked into it.
> nevertheless for that kind of operations (even for solution vector) do you
> need to send the complete vector to your neighbors ? this would be pretty
> much non scalable (my opinion).
That depends on how often you need to do the vector send. It would be
nonscalable for an explicit algorithm, but (assuming you only need to
synchronize once or twice per timestep) not a big problem for an
implicit code.
Even if some of the primary developers were doing explicit
calculations, I don't think this would be a high priority  shape
function caching would make a much bigger improvement in our runtimes.
> Interpolation is not a key operation in the FE programs ? (i'm kind
> of newbie in that).
It depends on what you mean by interpolation. Interpolation between
different grids is important for adaptive (and vital for adaptive
timedependent) problems. Interpolation between grid points is key
for any FE code using better than discontinuous constant elements, but
it's simply what we do by evaluating shape functions at quadrature
points.
> I need to compute a deformation gradient on quadrature points
> (\sum_I \dphi_I(X) u_I) to compute a non linear behavior at each
> explicit step.
That's right.
> i know i can compute dphi and phi shapes functions locally as long
> as they are precomputed from reference element projection... but i
> really need to get the nodes values (u_I) ... if it implies sending
> the complete vector ... :(
I don't think you want to get the nodes' values  what if you're using
higher order elements whose shape functions are determined by more
complicated bases? Let the shape function calculations do the work
for you.
> maybe i didn't get something...
Take a look at example 13. I believe it does what you need to do; at
each quadrature point there's this loop:
for (unsigned int l=0; l<n_u_dofs; l++)
{
u_old += phi[l][qp]*stokes_system.old_solution (dof_indices_u[l]);
v_old += phi[l][qp]*stokes_system.old_solution (dof_indices_v[l]);
grad_u_old.add_scaled (dphi[l][qp],stokes_system.old_solution (dof_indices_u[l]));
grad_v_old.add_scaled (dphi[l][qp],stokes_system.old_solution (dof_indices_v[l]));
u += phi[l][qp]*stokes_system.current_solution (dof_indices_u[l]);
v += phi[l][qp]*stokes_system.current_solution (dof_indices_v[l]);
grad_u.add_scaled (dphi[l][qp],stokes_system.current_solution (dof_indices_u[l]));
grad_v.add_scaled (dphi[l][qp],stokes_system.current_solution (dof_indices_v[l]));
}
This calculates both values and gradients of the last timestep's
velocity and the current timestep's current velocity estimate.
Presumably you can perform the same sort of calculation to get
whatever function of your solution and its derivatives that you need.

Roy Stogner
