[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