-
Notifications
You must be signed in to change notification settings - Fork 46
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PARMS for sea ice VP solver #78
Comments
@rakowsk fesom2/lib/parms/src/parms_ilu_vcsr.c Line 1632 in 7a0b034
|
I skip this writing bit am sure it is not the final solution :) |
Hi Dima, My very first guess is: The matrix structure of the ILU preconditioner is reused (which saves a lot of setup time), but computing new values would result in fill-in in a position that is not available, thus it has to be neglected. This is not critical - just the convergence would be slightly better with the non-zero value. Fingers crossed that ignoring / commenting the print is sufficient... Cheers, Natalja |
About the new values, I am wrong. It is just a copy. How can it fail? What does the programmer want to tell us? |
Yes, for the ice model, I expect that
|
yes, it is about sea ice and we need a new preconditioner every ice time step. is it not possible with PARMs? |
Ok, found the culprit: pARMS does not like matrix coefficients with value 0. It is not a problem when initially setting up the preconditioner (0 entries are ignored or removed - I did not check), but when re-using the ILU-structure, it fails with the cryptic "jw-1" message. I do not see a simple solution, but I will check if we can make pARMS digest zero off-diagonals, or if divide by zero have to be excluded. A hack to keep on working: Choose a very small off-diagonal value in VPbc - and check if the result is still meaningful or results in ice at the equator: Two minor bug fixes to follow, but they do not solve the problem, it's pure cosmetics. |
Remark on the hack above: Please choose a "small" value from your ice modeling expertise, the 1.e-6 is just a guess! And I have not checked in this hack - all on your own risk! ;-) Plus a fix to make it compile with gfortran. Problem: Fortran standard does not allow to have a self-referencing interface. |
Less hacky intermediate solution: Skip the preconditioner. pARMS is now augmented by BiCGstab w/o preconditioner. |
Added a bug fix: There were no halo exchanges at all in ice_VP.F90 |
Next issue: the values for u_ice, v_ice on no-ice-nodes, with rhs=0 and local identity matrix explicitly set in VPbc, may leave parms with u_ice, v_ice /=0. |
@rakowsk
Hi Natalja,
fesom2/src/ice_VP.F90
Line 372 in cd5e1af
setting new_values=2 (provided reuse=1) for new preconditioner results in an enorm output containing "jw -1" from PARMs side. Do you have an idea what is going wrong?
Thank You,
Dima
The text was updated successfully, but these errors were encountered: