# Compute energy # u_.assign(u_1) Eout_0 = df.assemble(geo_map.form(E_0)) Eout_2 = df.assemble(geo_map.form(E_2)) E_before = Eout_0 + Eout_2 converged = False while not converged: try: solver.solve() converged = True except: info_blue("Did not converge. Chopping timestep.") dt.chop() info_blue("New timestep is: dt = {}".format(dt.get())) if converged: Eout_0 = df.assemble(geo_map.form(E_0)) Eout_2 = df.assemble(geo_map.form(E_2)) E_after = Eout_0 + Eout_2 dE = E_after - E_before if not initial_step and dE > 1e-1 and False: info_blue( "Converged, but energy increased. Chopping timestep.") info_blue("E_before = {}".format(E_before)) info_blue("E_after = {}".format(E_after)) info_blue("dE = {}".format(dE)) info_blue("dt = {}".format(dt.get())) dt.chop() converged = False
# Step in time ts.dump(tstep) initial_step = bool(parameters["restart_folder"] is None) while t < T: tstep += 1 info_cyan("tstep = {}, time = {}".format(tstep, t)) u_1.assign(u_) converged = False while not converged: if parameters["anneal"]: tau.assign( anneal_func( t+dt.get(), parameters["tau"], parameters["tau_ramp"], parameters["t_ramp"])) # Compute energy u_.assign(u_1) Eout_0 = df.assemble(geo_map.form(E_0)) Eout_2 = df.assemble(geo_map.form(E_2)) E_before = Eout_0 + Eout_2 try: solver.solve() converged = True except: info_blue("Did not converge. Chopping timestep.")
# Step in time ts.dump(tstep) while t < T: tstep += 1 info_cyan("tstep = {}, time = {}".format(tstep, t)) u_1.assign(u_) converged = False while not converged: if parameters["anneal"]: tau.assign( anneal_func(t + dt.get(), parameters["tau"], parameters["tau_ramp"], parameters["t_ramp"])) try: solver.solve() converged = True except: info_blue("Did not converge. Chopping timestep.") dt.chop() info_blue("New timestep is: dt = {}".format(dt.get())) # Update time with final dt value t += dt.get() if tstep % 1 == 0: ts.dump(t) Eout_0 = df.assemble(geo_map.form(E_0)) Eout_2 = df.assemble(geo_map.form(E_2))