コード例 #1
0
def nvtw(num_particles, num_procs, num_equil, num_prod, num_hours, dccb_begin, temperature, mu, steps_per, model):
    mc = fst.MakeMonteCarlo()
    #mc.set(fst.MakeRandomMT19937(fst.args({"seed": "1633373856"})))
    beta = 1./temperature
    if model == "lj":
        mc.add(fst.MakeConfiguration(fst.args({"cubic_box_length": "8",
            "particle_type0": fst.install_dir() + "/forcefield/lj.fstprt"})))
        mc.add(fst.MakePotential(fst.MakeLennardJones()))
        mc.add(fst.MakePotential(fst.MakeLongRangeCorrections()))
    elif model == "sqw":
        config = fst.MakeConfiguration(fst.args({"cubic_box_length": "8", "particle_type0": fst.install_dir() + "/forcefield/atom.fstprt"}))
        config.set_model_param("cutoff", 0, 1.5)
        mc.add(config)
        mc.add(fst.MakePotential(fst.MakeSquareWell()))
    elif model == "spce":
        mc.add(fst.MakeConfiguration(fst.args({"cubic_box_length": "20",
            "particle_type0": fst.install_dir() + "/forcefield/spce.fstprt"})))
        mc.add(fst.MakePotential(fst.MakeEwald(fst.args({"alpha": str(5.6/20),
            "kmax_squared": "38"}))))
        mc.add(fst.MakePotential(fst.MakeModelTwoBodyFactory(fst.MakeLennardJones(), fst.MakeChargeScreened()),
                                          fst.args({"table_size": "1e6"})))
        mc.add(fst.MakePotential(fst.MakeChargeScreenedIntra(), fst.MakeVisitModelBond()))
        mc.add(fst.MakePotential(fst.MakeChargeSelf()))
        mc.add(fst.MakePotential(fst.MakeLongRangeCorrections()))
        beta = 1./fst.kelvin2kJpermol(temperature, mc.configuration())
    else:
        assert(False) # model not recognized

    # fill box with larger temperature and mu
    mc.set(fst.MakeThermoParams(fst.args({"beta": "0.01", "chemical_potential": "10"})))
    mc.set(fst.MakeMetropolis());
    #trial_args = {"particle_type": "0", "site": "0", "reference_index": ref, "num_steps": num_steps}
    mc.add(fst.MakeTrialTranslate(fst.args({"tunable_param": "0.1"})))
    #mc.add(fst.MakeTrialGrow(fst.ArgsVector([dict({"translate": "true", "tunable_param": "0.1"}, **trial_args)])))
    mc.add(fst.MakeTrialAdd(fst.args({"particle_type": "0", "weight": "4"})))
    mc.add(fst.MakeTune(fst.args({"steps_per": steps_per})))
    mc.add(fst.MakeCheckEnergy(fst.args({"steps_per": steps_per, "tolerance": "0.0001"})))
    mc.add(fst.MakeLogAndMovie(fst.args({"steps_per": steps_per,
                                         "file_name": model + str(num_particles)})))
    mc.set(fst.MakeCheckpoint(fst.args({"file_name": "checkpoint" + str(num_particles) + ".fst",
                                        "num_hours": str(0.1*num_procs*num_hours),
                                        "num_hours_terminate": str(0.9*num_procs*num_hours)})))
    mc.run(fst.MakeRun(fst.args({"until_num_particles": str(num_particles)})))
    mc.run(fst.MakeRemoveTrial(fst.args({"name": "TrialAdd"})))
    # nvt equilibration at desired temperature
    mc.set(fst.MakeThermoParams(fst.args({"beta": str(beta),
                                          "chemical_potential": str(mu)})))
    mc.attempt(int((num_particles+1)*num_equil))
    mc.run(fst.MakeRemoveModify(fst.args({"name": "Tune"})))
    mc.add(fst.MakeTrialTransfer(fst.args({"particle_type": "0", "weight": "4"})))
    #mc.add(fst.MakeTrialGrow(fst.ArgsVector([dict({"transfer": "true", "weight": "4"}, **trial_args)])))
    mc.set(fst.MakeFlatHistogram(fst.args({
        "Macrostate": "MacrostateNumParticles", "width": "1", "max": str(num_particles), "min": str(num_particles),
        "Bias": "TransitionMatrix", "min_sweeps": "1"})))
    mc.add(fst.MakeEnergy(fst.args({"steps_per_write": steps_per,
                                    "file_name": "en" + str(num_particles) + ".txt"})))
    mc.add(fst.MakeCriteriaWriter(fst.args({"steps_per": steps_per,
                                            "file_name": "crit" + str(num_particles) + ".txt"})))
    mc.attempt(int((num_particles+1)*num_prod))
コード例 #2
0
def lj_system(box_length):
    system = feasst.System()
    config = feasst.Configuration(
        feasst.Domain(feasst.args({"cubic_box_length": str(box_length)})),
        feasst.args({"particle_type": feasst.install_dir() + "/forcefield/lj.fstprt"}))
    config.set_model_param("cutoff", 0, args.cutoff)
    system.add(config)
    system.add(feasst.Potential(feasst.MakeLennardJones()))
    return system
コード例 #3
0
def system(config=None,
           box_length=8.109613,
           alphaL=6.870983963962610000,
           kmax_squared=38,
           rcut=4.891304347826090):
    if not config:
        config = feasst.Configuration(
            feasst.MakeDomain(
                feasst.args({"cubic_box_length": str(box_length)})),
            feasst.args({
                "particle_type0":
                feasst.install_dir() +
                "/plugin/ewald/forcefield/data.rpm_plus",
                "particle_type1":
                feasst.install_dir() +
                "/plugin/ewald/forcefield/data.rpm_minus"
            }))
    config.set_model_param("cutoff", 0, rcut)
    config.set_model_param("cutoff", 1, rcut)
    system = feasst.System()
    system.add(config)
    system.add(
        feasst.Potential(
            feasst.MakeEwald(
                feasst.args({
                    "kmax_squared":
                    str(kmax_squared),
                    "alpha":
                    str(alphaL /
                        system.configuration().domain().min_side_length())
                }))))
    # Unfortunatley, swig isn't accepting the below method of constructing a two body factory
    #    system.add(feasst.Potential(feasst.MakeModelTwoBodyFactory(
    #        feasst.ModelTwoBodyVector([feasst.MakeLennardJones(), feasst.MakeChargeScreened()]))))
    two = feasst.MakeModelTwoBodyFactory()
    two.add(feasst.MakeHardSphere())
    two.add(feasst.MakeChargeScreened())
    system.add(feasst.Potential(two))
    system.add(feasst.Potential(feasst.MakeChargeSelf()))
    # system.precompute()
    return system
コード例 #4
0
def lj_system(box_length, cutoff):
    system = feasst.System()
    config = feasst.Configuration(
        feasst.MakeDomain(feasst.args({"cubic_box_length": str(box_length)})),
        feasst.args(
            {"particle_type": feasst.install_dir() + "/forcefield/lj.fstprt"}))
    config.set_model_param("cutoff", 0, cutoff)
    system.add(config)
    system.add(feasst.Potential(feasst.MakeLennardJones()))
    if system.configuration().domain().is_cell_enabled():
        #system.add_to_optimized(feasst.Potential(feasst.MakeLennardJones(), feasst.MakeVisitModelCell()))
        system.add_to_reference(
            feasst.Potential(feasst.MakeHardSphere(),
                             feasst.MakeVisitModelCell()))
    return system
コード例 #5
0
ファイル: launch.py プロジェクト: dwsideriusNIST/feasst
def run_fst(params):
    with open("launch.txt", "w") as myfile:
        myfile.write("""
Configuration {config_params}
Potential Model LennardJones
Potential VisitModel LongRangeCorrections
ThermoParams
Metropolis
Checkpoint file_name checkpoint.fst
WriteCheckpoint
""".format(**params))
    syscode = subprocess.call(fst.install_dir() +
                              "/build/bin/fst < launch.txt > launch.log",
                              shell=True,
                              executable='/bin/bash')
    if syscode > 0: sys.exit(1)
コード例 #6
0
def configuration(box_length=8, forcefield='data.lj', num=0):
    """Return an LJ configuration with cubic box and (optionally) cell list.

    box_length -- the length of the cubic peroidic boundary conditions
    forcefield -- the file describing the particle
    num -- the number of particles of the first type to add.
    """
    config = feasst.Configuration(
        feasst.MakeDomain(
            feasst.args({
                "cubic_box_length": str(box_length),
                "init_cells": "3"
            })),  # optionally attempt to create a cell list
        feasst.args({
            "particle_type":
            feasst.install_dir() + '/forcefield/' + forcefield
        }))
    for _ in range(num):
        config.add_particle_of_type(0)
    return config
コード例 #7
0
import sys
import feasst
sys.path.insert(0, feasst.install_dir() + '/plugin/system/tutorial/')
import lj_system
sys.path.insert(0, feasst.install_dir() + '/plugin/monte_carlo/tutorial/')
import analyze
sys.path.insert(0, feasst.install_dir() + '/plugin/flat_histogram/tutorial/')
import fh

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--nopara", help="disable prefetch", dest='nopara', action='store_true')
parser.set_defaults(nopara=False)
parser.add_argument("--nofh", help="disable fh", dest='nofh', action='store_true')
parser.set_defaults(nofh=False)
parser.add_argument("--nobalance", help="disable load_balance", dest='nobalance', action='store_true')
parser.set_defaults(nobalance=False)
parser.add_argument("--cutoff", type=float, default=4.)
parser.add_argument("--target_prob", type=float, default=0.2)
parser.add_argument("--rel_disp_prob", type=float, default=5)
parser.add_argument("--max_move", type=float, default=0.185)
parser.add_argument("--density", type=float, default=0.85)
parser.add_argument("--temperature", type=float, default=0.88)
parser.add_argument("--chemical_potential", type=float, default=-2.35)
parser.add_argument("--window_half_width", type=int, default=10)
parser.add_argument("--iterations", type=int, default=20)
args = parser.parse_args()
print(args)

print(feasst.install_dir())
assert(feasst.install_dir() == '/home/hwh/gcfetch/feasst')
コード例 #8
0
import sys
import feasst as fst
sys.path.insert(0, fst.install_dir() + '/plugin/system/tutorial/')
import lj_system
sys.path.insert(0, fst.install_dir() + '/plugin/monte_carlo/tutorial/')
import analyze


def criteria_flathist(
    temperature=1.5,
    chemical_potential=-2.352321,
    macro_min=0,  # minimum macrostate
    macro_max=370,  # maximum macrostate
    tmmc=True,  # use Transition-Matrix (TM) if true, else Wang-Landau (WL)
    iterations=20):  # number of sweeps (TM) or flatness (WL)
    """Return a flat histogram acceptance criteria with number of particles as the macrostate"""
    if tmmc:
        bias = fst.MakeTransitionMatrix(
            fst.args({"min_sweeps": str(iterations)}))
    else:
        bias = fst.MakeWangLandau(fst.args({"min_flatness": str(iterations)}))
    return fst.MakeFlatHistogram(
        fst.MakeMacrostateNumParticles(
            fst.Histogram(
                fst.args({
                    "width": "1",
                    "min": str(macro_min),
                    "max": str(macro_max)
                }))), bias,
        fst.args({
            "beta": str(1. / temperature),
コード例 #9
0
                    type=int,
                    help="SLURM job array index",
                    default=0)
parser.add_argument("--seed",
                    type=str,
                    help="random number generator seed",
                    default="time")
parser.add_argument("--density",
                    type=float,
                    help="number density, num/volume",
                    default=0.776)
parser.add_argument("--num", type=int, help="number of particles", default=500)
parser.add_argument("--data",
                    type=str,
                    help="LMP forcefield data file",
                    default=fst.install_dir() + "/forcefield/lj.fstprt")
parser.add_argument("--beta",
                    type=float,
                    help="inverse temperature",
                    default=1 / 0.9)
parser.add_argument("--equilibration_trials",
                    type=int,
                    help="number of trials for equilibration",
                    default=int(5e7))
parser.add_argument(
    "--trials",
    type=int,
    help="total number of trials (equilibration and production)",
    default=int(3e8))
parser.add_argument("--num_hours",
                    type=float,
コード例 #10
0
    def test_srsw_alt(self,
                      num_particles=500,
                      density=0.001,
                      steps_per=1e5,
                      beta=1. / 0.9,
                      fstprt=fst.install_dir() + "/forcefield/lj.fstprt",
                      num_equil=1e7,
                      num_prod=1e7):
        """Compare with the reported average energy from the NIST SRSW.
        https://mmlapps.nist.gov/srs/LJ_PURE/mc.htm
        https://www.nist.gov/programs-projects/nist-standard-reference-simulation-website

        num_particles -- number of LJ particles
        density -- number density
        steps_per -- steps between each Anaylze/Modify
        """
        params = {"box_length": (num_particles / density)**(1. / 3.)}
        params = dict(locals(), **params)
        with open('tutorial_1_lj_nvt.txt', 'w') as fsttxt:
            fsttxt.write("""
Checkpoint file_name checkpoint.fst
RandomMT19937 seed time
Configuration cubic_box_length {box_length} particle_type {fstprt}
Potential Model LennardJones
Potential VisitModel LongRangeCorrections
ThermoParams beta 0.1 chemical_potential 10
Metropolis
TrialTranslate tunable_param 2. tunable_target_acceptance 0.2
TrialAdd particle_type 0
Run until_num_particles {num_particles}
RemoveTrial name TrialAdd
ThermoParams beta {beta}
Tune steps_per {steps_per}
CheckEnergy steps_per {steps_per} tolerance 1e-8

# equilibrate
Run num_attempts {num_equil}
RemoveModify name Tune

# production analysis and output
Log steps_per {steps_per} file_name lj.txt
Energy steps_per_write {steps_per} file_name en.txt
# Run num_attempts {num_prod} # optionally run production here instead of python
WriteCheckpoint
""".format(**params))
        import pyfeasst
        syscode = subprocess.call(
            fst.install_dir() +
            "/build/bin/fst < tutorial_1_lj_nvt.txt >> launch.log",
            shell=True,
            executable='/bin/bash')
        if syscode > 0: sys.exit(1)
        mc = fst.MonteCarlo().deserialize(
            pyfeasst.read_checkpoint('checkpoint.fst'))

        # run production trials with an alternative running average of the energy
        # this demonstrates custom on-the-fly analysis in python scripts.
        energy_alt = fst.Accumulator()
        for _ in range(int(params["num_prod"])):
            mc.attempt(1)
            energy_alt.accumulate(mc.criteria().current_energy())
        energy = fst.SeekAnalyze().reference("Energy", mc).accumulator()

        # test that the two methods for computing the energy give the same result
        self.assertAlmostEqual(energy.average(),
                               energy_alt.average(),
                               delta=1e-6)

        # test the average against the NIST SRSW
        stdev = (energy.block_stdev()**2 + (1.89E-05)**2)**(1. / 2.)
        self.assertAlmostEqual(-9.9165E-03 * num_particles,
                               energy.average(),
                               delta=2.576 * stdev)
コード例 #11
0
parser.add_argument("--max_particles",
                    type=int,
                    help="maximum number of particles",
                    default=270)
parser.add_argument("--cubic_box_length",
                    type=float,
                    help="cubic_box_length",
                    default=8)
parser.add_argument("--temperature",
                    type=float,
                    help="temperature",
                    default=0.3)
parser.add_argument("--particle",
                    type=str,
                    help="fstprt file that describes trimer",
                    default=fst.install_dir() +
                    "/forcefield/trimer_0.4L.fstprt")
parser.add_argument("--mu", type=float, help="chemical potential", default=-1)
parser.add_argument("--min_sweeps",
                    type=int,
                    help="minimum number of TM sweeps before termination",
                    default=100)
args = parser.parse_args()
print("args:", args)


def config():
    config = fst.MakeConfiguration(
        fst.args({
            "cubic_box_length": str(args.cubic_box_length),
            "particle_type": args.particle
コード例 #12
0
def mc(thread, mn, mx):
    steps_per = str(int(1e6))
    mc = fst.MakeMonteCarlo()
    mc.add(
        fst.MakeConfiguration(
            fst.args({
                "cubic_box_length":
                str(args.cubic_box_length),
                "particle_type0":
                fst.install_dir() + "/forcefield/hard_sphere.fstprt"
            })))
    mc.add(fst.MakePotential(fst.MakeHardSphere()))
    #    mc.add_to_optimized(fst.MakePotential(fst.MakeHardSphere(), fst.MakeVisitModelCell(fst.args({"min_length": "1"}))))
    mc.set(
        fst.MakeThermoParams(
            fst.args({
                "beta": "1",
                "chemical_potential": str(args.mu)
            })))
    mc.set(
        fst.MakeFlatHistogram(
            fst.MakeMacrostateNumParticles(
                fst.Histogram(
                    fst.args({
                        "width": "1",
                        "max": str(mx),
                        "min": str(mn)
                    }))),
            # fst.MakeTransitionMatrix(fst.args({"min_sweeps": str(args.min_sweeps)})),
            fst.MakeWLTM(
                fst.args({
                    "collect_flatness": "18",
                    "min_flatness": "22",
                    "min_sweeps": str(args.min_sweeps)
                }))))
    mc.add(
        fst.MakeTrialTranslate(
            fst.args({
                "new_only": "true",
                "weight": "1.",
                "tunable_param": "1."
            })))
    mc.add(
        fst.MakeTrialTransfer(fst.args({
            "weight": "4",
            "particle_type": "0"
        })))
    mc.add(
        fst.MakeCheckEnergy(
            fst.args({
                "steps_per": steps_per,
                "tolerance": "0.0001"
            })))
    mc.add(
        fst.MakeTune(
            fst.args({
                "steps_per": steps_per,
                "stop_after_phase": "0"
            })))
    mc.add(
        fst.MakeLogAndMovie(
            fst.args({
                "steps_per": steps_per,
                "file_name": "clones" + str(thread),
                "file_name_append_phase": "True"
            })))
    mc.add(
        fst.MakePairDistribution(
            fst.args({
                "steps_per_update": "1000",
                "steps_per_write": steps_per,
                "dr": "0.025",
                "file_name": "gr" + str(thread) + ".txt",
                "file_name_append_phase": "True",
                "start_after_phase": "0",
                "multistate": "True",
                "multistate_aggregate": "False"
            })))
    mc.add(fst.MakeCriteriaUpdater(fst.args({"steps_per": steps_per})))
    mc.add(
        fst.MakeCriteriaWriter(
            fst.args({
                "steps_per": steps_per,
                "file_name": "clones" + str(thread) + "_crit.txt",
                "file_name_append_phase": "True"
            })))
    mc.set(
        fst.MakeCheckpoint(
            fst.args({
                "file_name":
                "checkpoint" + str(thread) + ".fst",
                "num_hours":
                str(0.1 * args.num_procs * args.num_hours),
                "num_hours_terminate":
                str(0.9 * args.num_procs * args.num_hours)
            })))
    return mc
コード例 #13
0
def mc(thread, mn, mx):
    steps_per = int(1e4)
    mc = fst.MakeMonteCarlo()
    mc.add(
        fst.MakeConfiguration(
            fst.args({
                "cubic_box_length":
                "12",
                "particle_type0":
                fst.install_dir() +
                "/plugin/charge/forcefield/rpm_plus.fstprt",
                "particle_type1":
                fst.install_dir() +
                "/plugin/charge/forcefield/rpm_minus.fstprt",
                "cutoff":
                "4.891304347826090",
                "charge0":
                str(1. / math.sqrt(fst.CODATA2018().charge_conversion())),
                "charge1":
                str(-1. / math.sqrt(fst.CODATA2018().charge_conversion()))
            })))
    mc.add(
        fst.MakePotential(
            fst.MakeEwald(
                fst.args({
                    "alpha": str(6.87098396396261 / 12),
                    "kmax_squared": "38"
                }))))
    mc.add(
        fst.MakePotential(
            fst.MakeModelTwoBodyFactory(fst.MakeHardSphere(),
                                        fst.MakeChargeScreened()),
            fst.args({"table_size": "1e6"})))
    mc.add(fst.MakePotential(fst.MakeChargeSelf()))
    num_steps = "1"
    ref = "-1"
    if mx >= args.dccb_begin:
        mc.run(
            fst.MakeAddReference(
                fst.args({
                    "potential_index": "1",
                    "cutoff": "1",
                    "use_cell": "true"
                })))
        ref = "0"
        num_steps = "4"
    beta = 1. / args.temperature
    mc.set(
        fst.MakeThermoParams(
            fst.args({
                "beta": str(beta),
                "chemical_potential0": str(args.beta_mu / beta),
                "chemical_potential1": str(args.beta_mu / beta)
            })))
    mc.set(
        fst.MakeFlatHistogram(
            fst.MakeMacrostateNumParticles(
                fst.Histogram(
                    fst.args({
                        "width": "1",
                        "max": str(mx),
                        "min": str(mn)
                    }))),
            # fst.MakeTransitionMatrix(fst.args({"min_sweeps": str(args.min_sweeps)})),
            fst.MakeWLTM(
                fst.args({
                    "collect_flatness": "18",
                    "min_flatness": "22",
                    "min_sweeps": str(args.min_sweeps)
                })),
            fst.MakeAEqualB(fst.args({"extra_A": "1"}))))
    mc.add(
        fst.MakeTrialTranslate(
            fst.args({
                "weight": "1.",
                "tunable_param": "1."
            })))
    for particle_type in range(mc.configuration().num_particle_types()):
        mc.add(
            fst.MakeTrialTransfer(
                fst.args({
                    "weight": "4",
                    "particle_type": str(particle_type),
                    "reference_index": ref,
                    "num_steps": num_steps
                })))
    mc.add(
        fst.MakeCheckEnergy(
            fst.args({
                "steps_per": str(steps_per),
                "tolerance": "0.0001"
            })))
    mc.add(
        fst.MakeTune(
            fst.args({
                "steps_per": str(steps_per),
                "stop_after_phase": "0"
            })))
    mc.add(
        fst.MakeLogAndMovie(
            fst.args({
                "steps_per": str(steps_per),
                "file_name": "clones" + str(thread),
                "file_name_append_phase": "True"
            })))
    mc.add(
        fst.MakeEnergy(
            fst.args({
                "steps_per_write": str(steps_per),
                "file_name": "en" + str(thread) + ".txt.",
                "file_name_append_phase": "True",
                "start_after_phase": "0",
                "multistate": "True"
            })))
    mc.add(fst.MakeCriteriaUpdater(fst.args({"steps_per": str(steps_per)})))
    mc.add(
        fst.MakeCriteriaWriter(
            fst.args({
                "steps_per": str(steps_per),
                "file_name": "clones" + str(thread) + "_crit.txt",
                "file_name_append_phase": "True"
            })))
    mc.set(
        fst.MakeCheckpoint(
            fst.args({
                "file_name":
                "checkpoint" + str(thread) + ".fst",
                "num_hours":
                str(0.1 * args.num_procs * args.num_hours),
                "num_hours_terminate":
                str(0.9 * args.num_procs * args.num_hours)
            })))
    return mc
コード例 #14
0
def mc(thread, mn, mx):
    steps_per = str(int(1e5))
    mc = fst.MakeMonteCarlo()
    #mc.set(fst.MakeRandomMT19937(fst.args({"seed": "12345"})))
    #mc.set(fst.MakeRandomMT19937(fst.args({"seed": "1634926410"})))
    chi = 0.7  # patch coverage
    patch_angle = 2 * math.asin(math.sqrt(chi / 2)) * 180 / math.pi
    print('patch_angle', patch_angle)
    mc = fst.MonteCarlo()
    config = fst.MakeConfiguration(
        fst.args({
            "cubic_box_length":
            "8",
            "particle_type0":
            fst.install_dir() +
            "/plugin/patch/forcefield/two_patch_linear.fstprt"
        }))
    config.add(fst.MakeGroup(fst.args({"site_type0": "0"})))
    mc.add(config)
    mc.add(
        fst.MakePotential(
            fst.MakeHardSphere(),
            fst.MakeVisitModelCell(
                fst.args({
                    "min_length": "1",
                    "cell_group": "1"
                })), fst.args({"group_index": "1"})))
    patch = fst.MakeVisitModelInnerPatch(
        fst.args({"patch_degrees_of_type1": str(patch_angle)}))
    mc.add(
        fst.MakePotential(
            fst.MakeSquareWell(),
            fst.MakeVisitModel(patch),
            #fst.MakeVisitModelCell(patch, fst.args({"min_length": "1.5", "cell_group": "1"})),
            fst.args({"group_index": "1"})))
    mc.set(
        fst.MakeThermoParams(
            fst.args({
                "beta": str(1. / args.temperature),
                "chemical_potential": str(args.mu)
            })))
    mc.set(
        fst.MakeFlatHistogram(
            fst.MakeMacrostateNumParticles(
                fst.Histogram(
                    fst.args({
                        "width": "1",
                        "max": str(mx),
                        "min": str(mn)
                    }))),
            # fst.MakeTransitionMatrix(fst.args({"min_sweeps": str(args.min_sweeps)})),
            fst.MakeWLTM(
                fst.args({
                    "collect_flatness": "18",
                    "min_flatness": "22",
                    "min_sweeps": str(args.min_sweeps)
                }))))
    mc.add(
        fst.MakeTrialTranslate(
            fst.args({
                "weight": "0.5",
                "tunable_param": "0.1"
            })))
    mc.add(
        fst.MakeTrialRotate(fst.args({
            "weight": "0.5",
            "tunable_param": "20."
        })))
    mc.add(
        fst.MakeTrialTransfer(fst.args({
            "weight": "4",
            "particle_type": "0"
        })))
    #    mc.add(fst.MakeTrialGrow(fst.ArgsVector([{"translate": "true", "site": "0", "tunable_param": "1"}]),
    #        {"reference_index": ref, "num_steps": num_steps}))
    #    mc.add(fst.MakeTrialGrow(fst.ArgsVector([{"transfer": "true", "site": "0", "weight": "4"}]),
    #        {"reference_index": ref, "num_steps": num_steps}))
    mc.add(
        fst.MakeCheckEnergy(
            fst.args({
                "steps_per": steps_per,
                "tolerance": "0.0001"
            })))
    mc.add(
        fst.MakeTune(
            fst.args({
                "steps_per": steps_per,
                "stop_after_phase": "0"
            })))
    mc.add(
        fst.MakeLog(
            fst.args({
                "steps_per": steps_per,
                "file_name": "clones" + str(thread) + ".txt",
                "file_name_append_phase": "True"
            })))
    mc.add(
        fst.MakeMoviePatch(
            fst.args({
                "steps_per": steps_per,
                "file_name": "clones" + str(thread) + ".xyz",
                "file_name_append_phase": "True"
            })))
    mc.add(
        fst.MakeEnergy(
            fst.args({
                "steps_per_write": steps_per,
                "file_name": "en" + str(thread) + ".txt",
                "file_name_append_phase": "True",
                "start_after_phase": "0",
                "multistate": "True"
            })))
    mc.add(fst.MakeCriteriaUpdater(fst.args({"steps_per": steps_per})))
    mc.add(
        fst.MakeCriteriaWriter(
            fst.args({
                "steps_per": steps_per,
                "file_name": "clones" + str(thread) + "_crit.txt",
                "file_name_append_phase": "True"
            })))
    mc.set(
        fst.MakeCheckpoint(
            fst.args({
                "file_name":
                "checkpoint" + str(thread) + ".fst",
                "num_hours":
                str(0.1 * args.num_procs * args.num_hours),
                "num_hours_terminate":
                str(0.9 * args.num_procs * args.num_hours)
            })))
    return mc
コード例 #15
0
ファイル: run_tutorials.py プロジェクト: hhatch/feasst
import feasst
import pyfeasst


def run_file(filename):
    if 'checkpoint' not in filename.name:
        if 'build' not in str(filename.parent):
            with pyfeasst.cd(filename.parent):
                print("Running:", filename, "in", filename.parent)
                pyfeasst.bash_command(
                    "rm tutorial_failures.txt tutorial_log.txt")
                pyfeasst.bash_command(
                    "jupyter nbconvert --to notebook --inplace --ExecutePreprocessor.timeout=10000 --execute "
                    + str(filename) +
                    " > tutorial_log.txt 2>&1; grep \"Error\|Assertion\" tutorial_log.txt >> tutorial_failures.txt"
                )
                pyfeasst.bash_command("grep \"FAILED (fa\" " + str(filename) +
                                      " >> tutorial_failures.txt")
                pyfeasst.bash_command("grep \"Error\" " + str(filename) +
                                      " >> tutorial_failures.txt")
                pyfeasst.bash_command("grep \"ERROR\" " + str(filename) +
                                      " >> tutorial_failures.txt")
                pyfeasst.bash_command("grep \"feasst::CustomException\" " +
                                      str(filename) +
                                      " >> tutorial_failures.txt")


#for filename in Path(feasst.install_dir()).rglob('*.ipynb'): run_file(filename)
pool = multiprocessing.Pool(4)
zip(pool.map(run_file, Path(feasst.install_dir()).rglob('*.ipynb')))
コード例 #16
0
import sys
import feasst
sys.path.insert(0, feasst.install_dir() + '/plugin/system/tutorial/')
import lj_system
sys.path.insert(0, feasst.install_dir() + '/plugin/monte_carlo/tutorial/')
import analyze

import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--nopipe",
                    help="disable pipeline",
                    dest='nopipe',
                    action='store_true')
parser.set_defaults(nopipe=False)
parser.add_argument("--cutoff", type=float)
parser.add_argument("--target_prob", type=float)
parser.add_argument("--max_move", type=float)
args = parser.parse_args()
print(args)

# assert(feasst.install_dir() == '/home/local/NIST/hwh/feasst1.0')
# assert(feasst.install_dir() == '/home/local/NIST/hwh/msd2/feasst')
assert (feasst.install_dir() == '/home/hwh/msd4/feasst')

#accept_to_param={
#  #0.75: 0.04,
#  #0.5: 0.085,
#  #0.45: 0.099,
#  #0.4: 0.111,
#  0.35: 0.125,
#  #0.3: 0.14,
コード例 #17
0
import feasst

monte_carlo = feasst.MonteCarlo()
monte_carlo.set(feasst.MakeRandomMT19937(feasst.args({"seed": "time"})))
monte_carlo.add(
    feasst.Configuration(
        feasst.MakeDomain(feasst.args({"cubic_box_length": "8"})),
        feasst.args(
            {"particle_type": feasst.install_dir() + "/forcefield/data.lj"})))
monte_carlo.add(feasst.Potential(feasst.MakeLennardJones()))
monte_carlo.add(feasst.Potential(feasst.MakeLongRangeCorrections()))
monte_carlo.add(feasst.MakeMetropolis(feasst.args({"beta": "1.5"})))
monte_carlo.add(
    feasst.MakeTrialTranslate(
        feasst.args({
            "tunable_param": "2.",
            "tunable_target_acceptance": "0.2"
        })))
steps_per = int(1e3)
monte_carlo.add(feasst.MakeTuner(feasst.args({"steps_per": str(steps_per)})))
feasst.SeekNumParticles(50)\
    .with_metropolis(feasst.args({"beta": "0.1", "chemical_potential": "10"}))\
    .with_trial_add().run(monte_carlo)
monte_carlo.add(feasst.MakeLog(feasst.args({"steps_per": str(steps_per)})))
monte_carlo.add(
    feasst.MakeMovie(
        feasst.args({
            "steps_per": str(steps_per),
            "file_name": "movie.xyz"
        })))
monte_carlo.add(
コード例 #18
0
from pathlib import Path
import feasst
import pyfeasst

pyfeasst.bash_command("rm tutorial_failures.txt")
for filename in Path(feasst.install_dir()).rglob('*.ipynb'):
    if 'checkpoint' not in filename.name:
        with pyfeasst.cd(filename.parent):
            print("Running:", filename, "in", filename.parent)
            pyfeasst.bash_command(
                "jupyter nbconvert --to notebook --inplace --ExecutePreprocessor.timeout=10000 --execute "
                + str(filename))
            pyfeasst.bash_command("grep \"FAILED (fa\" " + str(filename) +
                                  " >> tutorial_failures.txt")
            pyfeasst.bash_command("grep \"Error\" " + str(filename) +
                                  " >> tutorial_failures.txt")
コード例 #19
0
def mc(thread, mn, mx):
    steps_per = int(1e5)
    avb, dccb = avb_or_dccb(mx)
    mc = fst.MakeMonteCarlo()
    mc.add(
        fst.MakeConfiguration(
            fst.args({
                "cubic_box_length":
                "20",
                "physical_constants":
                "CODATA2010",
                "particle_type0":
                fst.install_dir() + "/forcefield/spce.fstprt"
            })))
    mc.add(
        fst.MakePotential(
            fst.MakeEwald(
                fst.args({
                    "alpha": str(5.6 / 20),
                    "kmax_squared": "38"
                }))))
    mc.add(
        fst.MakePotential(
            fst.MakeModelTwoBodyFactory(fst.MakeLennardJones(),
                                        fst.MakeChargeScreened()),
            fst.args({"table_size": "1e6"})))
    mc.add(
        fst.MakePotential(fst.MakeChargeScreenedIntra(),
                          fst.MakeVisitModelBond()))
    mc.add(fst.MakePotential(fst.MakeChargeSelf()))
    mc.add(fst.MakePotential(fst.MakeLongRangeCorrections()))
    if dccb or avb:
        mc.run(
            fst.MakeAddReference(
                fst.args({
                    "potential_index": "1",
                    "cutoff": "3.16555789",
                    "use_cell": "true"
                })))
    if avb:
        initialize_neighbor_list(mc)
    beta = 1. / fst.kelvin2kJpermol(525, mc.configuration())
    mc.set(
        fst.MakeThermoParams(
            fst.args({
                "beta": str(beta),
                "chemical_potential": str(-8.14 / beta)
            })))
    mc.set(
        fst.MakeFlatHistogram(
            fst.MakeMacrostateNumParticles(
                fst.Histogram(
                    fst.args({
                        "width": "1",
                        "max": str(mx),
                        "min": str(mn)
                    }))),
            fst.MakeTransitionMatrix(fst.args({"min_sweeps": "10"}))))
    mc.add(
        fst.MakeTrialTranslate(
            fst.args({
                "weight": "1.",
                "tunable_param": "1.",
            })))
    mc.add(
        fst.MakeTrialRotate(fst.args({
            "weight": "1.",
            "tunable_param": "1."
        })))
    mc.add(
        fst.MakeTrialTransfer(fst.args({
            "particle_type": "0",
            "weight": "4"
        })))
    regrow1 = [{
        "angle": "true",
        "mobile_site": "1",
        "anchor_site": "0",
        "anchor_site2": "2"
    }]
    regrow2 = [{
        "angle": "true",
        "mobile_site": "2",
        "anchor_site": "0",
        "anchor_site2": "1"
    }]
    regrow12 = [{
        "bond": "true",
        "mobile_site": "1",
        "anchor_site": "0"
    }] + copy.deepcopy(regrow2)
    regrow21 = [{
        "bond": "true",
        "mobile_site": "2",
        "anchor_site": "0"
    }] + copy.deepcopy(regrow1)
    if dccb:
        grow012 = [{
            "transfer": "true",
            "site": "0",
            "weight": "4"
        }] + copy.deepcopy(regrow12)
        grow021 = [{
            "transfer": "true",
            "site": "0",
            "weight": "4"
        }] + copy.deepcopy(regrow21)
        for grow in [regrow1, regrow2]:
            grow[0]["weight"] = "0.3"
        for grow in [regrow12, regrow21]:
            grow[0]["weight"] = "0.2"
        for grow in [grow012, grow021, regrow12, regrow21, regrow1, regrow2]:
            grow[0]["particle_type"] = "0"
            mc.add(
                fst.MakeTrialGrow(
                    fst.ArgsVector(grow),
                    fst.args({
                        "reference_index": "0",
                        "num_steps": "4"
                    })))
    if avb:
        for avbtype in ["transfer_avb", "regrow_avb2", "regrow_avb4"]:
            avb = [{
                avbtype: "true",
                "site": "0",
                "neighbor_index": "0",
                "target_particle_type": "0",
                "target_site": "0"
            }]
            avb_012 = copy.deepcopy(avb) + copy.deepcopy(regrow12)
            avb_021 = copy.deepcopy(avb) + copy.deepcopy(regrow21)
            for grow in [avb_012, avb_021]:
                grow[0]["weight"] = "0.5"
                grow[0]["particle_type"] = "0"
                mc.add(
                    fst.MakeTrialGrow(
                        fst.ArgsVector(grow),
                        fst.args({
                            "num_steps": "4",
                            "reference_index": "0"
                        })))
    mc.add(
        fst.MakeCheckEnergyAndTune(
            fst.args({
                "steps_per": str(steps_per),
                "tolerance": "0.0001"
            })))
    mc.add(
        fst.MakeLogAndMovie(
            fst.args({
                "steps_per": str(steps_per),
                "file_name": "clones" + str(thread)
            })))
    mc.add(fst.MakeCriteriaUpdater(fst.args({"steps_per": str(steps_per)})))
    mc.add(
        fst.MakeCriteriaWriter(
            fst.args({
                "steps_per": str(steps_per),
                "file_name": "clones" + str(thread) + "_crit.txt"
            })))
    mc.add(
        fst.MakeEnergy(
            fst.args({
                "steps_per_write": str(steps_per),
                "file_name": "en" + str(thread),
                "multistate": "true"
            })))
    mc.set(
        fst.MakeCheckpoint(
            fst.args({
                "file_name":
                "checkpoint" + str(thread) + ".fst",
                "num_hours_terminate":
                str(0.9 * args.num_procs * args.num_hours)
            })))
    return mc
コード例 #20
0
def mc(thread, mn, mx):
    steps_per = str(int(1e6))
    mc = fst.MakeMonteCarlo()
    mc.add(
        fst.MakeConfiguration(
            fst.args({
                "cubic_box_length":
                "8",
                "particle_type0":
                fst.install_dir() + "/forcefield/lj.fstprt"
            })))
    mc.add(fst.MakePotential(fst.MakeLennardJones()))
    mc.add(fst.MakePotential(fst.MakeLongRangeCorrections()))
    trial_args = {"particle_type": "0", "site": "0"}
    if mx >= args.dccb_begin:
        mc.run(
            fst.MakeAddReference(fst.args({
                "cutoff": "1",
                "use_cell": "true"
            })))
        trial_args["reference_index"] = "0"
        trial_args["num_steps"] = "4"
    mc.set(
        fst.MakeThermoParams(
            fst.args({
                "beta": str(1. / args.temperature),
                "chemical_potential": str(args.mu)
            })))
    mc.set(
        fst.MakeFlatHistogram(
            fst.MakeMacrostateNumParticles(
                fst.Histogram(
                    fst.args({
                        "width": "1",
                        "max": str(mx),
                        "min": str(mn)
                    }))),
            # fst.MakeTransitionMatrix(fst.args({"min_sweeps": str(args.min_sweeps)})),
            fst.MakeWLTM(
                fst.args({
                    "collect_flatness": "18",
                    "min_flatness": "22",
                    "min_sweeps": str(args.min_sweeps)
                }))))
    #mc.add(fst.MakeTrialTranslate(fst.args({"weight": "1.", "tunable_param": "1."})))
    #mc.add(fst.MakeTrialTransfer(fst.args({"weight": "4", "particle_type": "0",
    mc.add(
        fst.MakeTrialGrow(
            fst.ArgsVector([
                dict({
                    "translate": "true",
                    "tunable_param": "1"
                }, **trial_args)
            ])))
    mc.add(
        fst.MakeTrialGrow(
            fst.ArgsVector(
                [dict({
                    "transfer": "true",
                    "weight": "4"
                }, **trial_args)])))
    mc.add(
        fst.MakeCheckEnergy(
            fst.args({
                "steps_per": steps_per,
                "tolerance": "0.0001"
            })))
    mc.add(
        fst.MakeTune(
            fst.args({
                "steps_per": steps_per,
                "stop_after_phase": "0"
            })))
    mc.add(
        fst.MakeLogAndMovie(
            fst.args({
                "steps_per": steps_per,
                "file_name": "clones" + str(thread),
                "file_name_append_phase": "True"
            })))
    mc.add(
        fst.MakeEnergy(
            fst.args({
                "steps_per_write": steps_per,
                "file_name": "en" + str(thread) + ".txt",
                "file_name_append_phase": "True",
                "start_after_phase": "0",
                "multistate": "True"
            })))
    mc.add(fst.MakeCriteriaUpdater(fst.args({"steps_per": steps_per})))
    mc.add(
        fst.MakeCriteriaWriter(
            fst.args({
                "steps_per": steps_per,
                "file_name": "clones" + str(thread) + "_crit.txt",
                "file_name_append_phase": "True"
            })))
    mc.set(
        fst.MakeCheckpoint(
            fst.args({
                "file_name":
                "checkpoint" + str(thread) + ".fst",
                "num_hours":
                str(0.1 * args.num_procs * args.num_hours),
                "num_hours_terminate":
                str(0.9 * args.num_procs * args.num_hours)
            })))
    return mc
コード例 #21
0
import sys
import math
import unittest
import argparse
import feasst
sys.path.insert(0, feasst.install_dir() + '/plugin/monte_carlo/py')
import lj
import pyfeasst
sys.path.insert(0, feasst.install_dir() + '/plugin/flat_histogram/py')
import fh

class TestLJ_FH_benchmark(unittest.TestCase):
    def test(self):
        #return

        serial = False
        serial = True
        if serial:
            criteria = feasst.MakeFlatHistogram(feasst.args(
                {"beta": str(1./1.5),
                 "chemical_potential": "-2.35231"}
            ))
            criteria.set(feasst.MakeMacrostateGrowthExpanded(
                feasst.Histogram(feasst.args({"width": "0.5", "max": "10"})),
                #feasst.args({"soft_max": "10"})
            ))
            criteria.set(feasst.MakeTransitionMatrix(feasst.args({"min_sweeps": "10"})))
                , "num_steps_to_update": str(int(1e6))}
            mc2 = fh.monte_carlo(criteria=criteria, forcefield='data.dimer', run=False)
            mc2.add(feasst.MakeCriteriaWriter(feasst.args({"steps_per": str(int(1e6))})))
            mc2.run_until_complete()