def report(self): """Compares computed and exact solution values and displays a summary report.""" grid = self.grid ssa_stdout = self.ssa.stdout_report() PISM.verbPrintf(3, grid.com, ssa_stdout) maxvecerr = 0.0 avvecerr = 0.0 avuerr = 0.0 avverr = 0.0 maxuerr = 0.0 maxverr = 0.0 if (self.config.get_boolean("basal_resistance.pseudo_plastic.enabled") and self.config.get_double("basal_resistance.pseudo_plastic.q") != 1.0): PISM.verbPrintf( 1, grid.com, "WARNING: numerical errors not valid for pseudo-plastic till\n" ) PISM.verbPrintf( 1, grid.com, "NUMERICAL ERRORS in velocity relative to exact solution:\n") vel_ssa = self.ssa.velocity() vel_ssa.begin_access() exactvelmax = 0 gexactvelmax = 0 for (i, j) in self.grid.points(): x = grid.x(i) y = grid.y(j) (uexact, vexact) = self.exactSolution(i, j, x, y) exactnormsq = math.sqrt(uexact * uexact + vexact * vexact) exactvelmax = max(exactnormsq, exactvelmax) solution = vel_ssa[i, j] uerr = abs(solution.u - uexact) verr = abs(solution.v - vexact) avuerr += uerr avverr += verr maxuerr = max(maxuerr, uerr) maxverr = max(maxverr, verr) vecerr = math.sqrt(uerr * uerr + verr * verr) maxvecerr = max(maxvecerr, vecerr) avvecerr = avvecerr + vecerr vel_ssa.end_access() N = grid.Mx() * grid.My() gexactvelmax = PISM.GlobalMax(grid.com, exactvelmax) gmaxuerr = PISM.GlobalMax(grid.com, maxuerr) gmaxverr = PISM.GlobalMax(grid.com, maxverr) gavuerr = PISM.GlobalSum(grid.com, avuerr) / N gavverr = PISM.GlobalSum(grid.com, avverr) / N gmaxvecerr = PISM.GlobalMax(grid.com, maxvecerr) gavvecerr = PISM.GlobalSum(grid.com, avvecerr) / N sys = grid.ctx().unit_system() m_year = PISM.UnitConverter(sys, "m / second", "m / year") if abs(gexactvelmax) > 0.0: relative_vel_error = (gavvecerr / gexactvelmax) * 100.0 else: relative_vel_error = 0.0 PISM.verbPrintf( 1, grid.com, "velocity : maxvector prcntavvec maxu maxv avu avv\n" ) PISM.verbPrintf(1, grid.com, " %11.4f%13.5f%10.4f%10.4f%10.4f%10.4f\n", m_year(gmaxvecerr), relative_vel_error, m_year(gmaxuerr), m_year(gmaxverr), m_year(gavuerr), m_year(gavverr)) PISM.verbPrintf(1, grid.com, "NUM ERRORS DONE\n")