Ejemplo n.º 1
0
            anneal_func(t, 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

    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()))
Ejemplo n.º 2
0
                    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.")
            dt.chop()
            info_blue("New timestep is: dt = {}".format(dt.get()))

        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 > 0.0:
            dt.chop()
            converged = False

    initial_step = False

    # Update time with final dt value
    t += dt.get()
Ejemplo n.º 3
0
    u_1.vector()[:] += np.random.normal(
        0, initial_noise/(1+0.02*t),
        len(u_1.vector().get_local()))  # Annealing noise
    solver.solve()

    if tstep % 1 == 0:
        # ts.dump(tstep)
        ts.dump(t)
        E_0 = (2*nu_**2 - 2 * geo_map.gab[i, j]*psi_.dx(i)*psi_.dx(j)
               + w(psi_, tau))
        E_nonK = df.assemble(geo_map.form(E_0))
        E_K = df.assemble(geo_map.form((h**2/12)*(
            2*(4*nuhat_**2 + 4*H*nuhat_*nu_ - 5*K*nu_**2)
            - 2 * (2*H*nuhat_ - 2*K*gab[i, j]*psi_.dx(i)*psi_.dx(j))
            + (tau/2)*K*psi_**2 + (1/4)*K*psi_**4)))
        # Double checked for correctness
        E_tot = E_nonK+E_K
        grad_mu = ts.get_function("abs_grad_mu")
        grad_mu_max = mpi_max(grad_mu.vector().get_local())
        # Assigning timestep size according to grad_mu_max:
        dt.assign(max(0.01, 0.5/grad_mu_max))
        info_blue("t = {}".format(t))
        info_blue("dt = {}".format(float(dt.values())))
        info_blue("noise = {}".format(initial_noise))
        ts.dump_stats(t, [grad_mu_max, float(
            dt.values()), float(h.values()), E_nonK, E_K, E_tot], "data")

    if tstep % parameters["checkpoint_intv"] == 0 or t >= T:
        save_checkpoint(tstep, t, geo_map.ref_mesh,
                        u_, u_1, ts.folder, parameters)