pparams['u0'] = 1 # Fill description dictionary for easy hierarchy creation description = {} description['problem_class'] = swfw_scalar description['problem_params'] = pparams description['dtype_u'] = mesh description['dtype_f'] = rhs_imex_mesh description['collocation_class'] = collclass.CollGaussLobatto description['num_nodes'] = [3] description['do_LU'] = False description['sweeper_class'] = imex_1st_order description['level_params'] = lparams # quickly generate block of steps MS = mp.generate_steps(num_procs, sparams, description) # setup parameters "in time" t0 = 0 dt = 1.0 Tend = 1.0 P = MS[0].levels[0].prob uinit = P.u_exact(t0) print('Init:', uinit.values) # call main function to get things done... uend, stats = mp.run_pfasst(MS, u0=uinit, t0=t0, dt=dt, Tend=Tend) uex = P.u_exact(Tend)
description['num_nodes'] = 3 elif order == 5: description['num_nodes'] = 3 sparams['maxiter'] = order for ii in range(0, np.shape(nsteps)[1]): ns = nsteps[order - 3, ii] if ((order == 3) or (order == 4)): pparams['nvars'] = [(2, 2 * ns)] elif order == 5: pparams['nvars'] = [(2, 2 * ns)] # quickly generate block of steps MS = mp.generate_steps(num_procs, sparams, description) dt = Tend / float(ns) # get initial values on finest level P = MS[0].levels[0].prob rkimex = rk_imex(P.A.astype('complex'), P.Dx.astype('complex'), order) uinit = P.u_exact(t0) y0 = np.concatenate((uinit.values[0, :], uinit.values[1, :])) y0 = y0.astype('complex') if ii == 0: print("Time step: %4.2f" % dt) print("Fast CFL number: %4.2f" % (pparams['cs'] * dt / P.dx)) print("Slow CFL number: %4.2f" % (pparams['cadv'] * dt / P.dx))