> El 1 nov 2016, a las 20:42, Peetz, Darin T <[email protected]> escribió: > > Thank you for providing the example. I have managed to get it working > properly; however, after looking at the example, I have one more question. > > First, let me provide a little background on how the code is set up. I have > one function that takes care of solving the linear system of equations, and a > separate one that takes care of the eigenvalue problem. The KSP object for > the linear system is passed between both functions, and kept for the duration > of the program to save some of the cost of factorizing the matrix each time. > I have been keeping the EPS object local to the function that takes care of > the eigenvalue problem since it is only relevant within that function, and I > haven't seen a need to reuse the same EPS object in every iteration (I'm > assuming the cost of creating the EPS object itself is relatively small). > The reason for the extra symbolic factorizations seems to have been that when > I destroyed the EPS object before it goes out of scope, it also destroys the > underlying KSP object that I provided. > > Basically, I'm wondering if my assumption about the cost of creating the EPS > object is correct. Is it okay to recreate the EPS object every time the > eigenvalue function is called, or does this create a significant overhead? > It seems that if I try to reuse the same EPS object I have to make sure I'm > reusing the same A-matrix as well, or else the ST object redoes both the > symbolic and numeric factorizations (so the same K matrix is numerically > factorized twice in each iteration) each time. Thus I would be able to save > a significant amount of memory if I could let the EPS object and A-matrix > exist in a local scope. > > As a side note, I worked around the KSP destruction issue by providing an > empty (uninitialized) KSP object to the EPS object after calling EPSSolve and > extracting the eigenvalues/eigenvectors. This is functional but seems like a > bad/crude approach. Is there a more elegant way to "free" the KSP object > from the EPS object once it is no longer needed, or should I stick with this > approach? > > Thanks a lot for your help, > Darin
STSetKSP() increases the reference count of the KSP object, so when EPS is destroyed, the KSP object remains. I don't understand why you need to provide an empty KSP. Regarding your question about recreating EPS, yes the cost can be considered small. Jose
