[petsc-users] a question about DAE Function

Jin, Shuangshuang Shuangshuang.Jin at pnnl.gov
Tue Jun 4 14:13:00 CDT 2013


Hello, I have a question regarding how to set up the IFunction for TSSetIFunction. Please see the detailed illustration below:

Inside my IFunction, I have one of the f equations defined as:

if (i >= xstart && i < xstart+xlen) {
      f[i+2] = sin(x[i])*x[i+2] + cos(x[i])*x[i+3];
      for (k = 0; k < n; k++) {
          f[i+2] += -(cos(x[k])*a[k])*b) - (sin(x[k])*c[k])*d);               (1)
      }
}

Where x is an distributed array, a and c are constant arrays, b and d are constants. n is the length of the global length of x.

The problem is, since x is distributed across all the processes, each process only owns a piece of items of x, when I do (1) as written above, no matter which processor f[i+2] is on, it has to grab all the x array data from other processors, which means I have to do a scattering of x array in advance to make the x[k] value available. This is quite an inefficient way given the scattering of vector would happen in each iteration when the IFuntion is called.

I am wondering if this is the only way I have to deal with this problem, or am I trapped in a wrong direction?

Your comments are highly appreciated!

Thanks,
Shuangshuang


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20130604/071a4bc5/attachment.html>


More information about the petsc-users mailing list