PISM, A Parallel Ice Sheet Model
stable v2.1-1-g6902d5502 committed by Ed Bueler on 2023-12-20 08:38:27 -0800
|
◆ solve()
Compute the vertically-averaged horizontal velocity from the shallow shelf approximation. This is the main procedure in the SSAFD. It manages the nonlinear solve process and the Picard iteration. The outer loop (over index Specifically, we call the PETSc procedure KSPSolve() to solve the linear system. Solving the linear system is also a loop, an iteration, but it occurs inside KSPSolve(). The user has full control of the KSP solve through the PETSc interface. The default choicess for KSP type The preconditioner will behave differently on different numbers of processors. If the user wants the results of SSA calculations to be independent of the number of processors, then If you want to test different KSP methods, it may be helpful to see how many iterations were necessary. Use The outer loop terminates when the effective viscosity times thickness is no longer changing much, according to the tolerance set by the option In truth there is an "outer outer" loop (over index (An alternative for recovery in the KSP diverged case, suggested by Jed, is to revert to a direct linear solve, either for the whole domain (not scalable) or on the subdomains. This recovery alternative requires a more nontrivial choice but it may be worthwhile. Note the user can already do FIXME: update this doxygen comment Implements pism::stressbalance::SSA. Definition at line 940 of file SSAFD.cc. References assemble_rhs(), pism::Geometry::cell_type, compute_hardav_staggered(), pism::array::Array2D< T >::copy_from(), pism::stressbalance::SSA::extrapolate_velocity(), pism::stressbalance::Inputs::geometry, pism::k, pism::Component::m_config, pism::Component::m_log, pism::stressbalance::ShallowStressBalance::m_velocity, m_velocity_old, picard_iteration(), picard_strategy_regularization(), PISM_ERROR_LOCATION, pism::array::Array::scale(), pism::array::Array::update_ghosts(), and write_system_petsc(). |