def add(monte_carlo, steps_per, proc="", log="log.txt", tolerance=1e-8): """Add Log, Movie, CheckEnergy and Tuner to monte_carlo steps_per -- perform analysis every this many steps proc -- append movie file name with proc log -- set the log file (default empty: standard output) """ monte_carlo.add( feasst.MakeLog( feasst.args({ "steps_per": str(steps_per), "file_name": str(log), "clear_file": "true" }))) monte_carlo.add( feasst.MakeMovie( feasst.args({ "steps_per": str(steps_per), "file_name": "movie" + str(proc) + ".xyz" }))) monte_carlo.add( feasst.MakeCheckEnergy( feasst.args({ "steps_per": str(steps_per), "tolerance": str(tolerance) }))) monte_carlo.add( feasst.MakeTuner(feasst.args({"steps_per": str(steps_per)})))
def mc( target_acceptance=0.25, tunable_param=0.1, density=0.85, cutoff=4, temperature=0.88, steps_per=int(1e6), ): box_length = 2 * cutoff file_app = "_a" + str(target_acceptance) + "_r" + str(cutoff) num_particles = int(density * box_length**3) print('num_particles', num_particles) print('target_acceptance', target_acceptance) print('tunable_param', tunable_param) monte_carlo = feasst.Prefetch(feasst.args({"steps_per_check": "10000000"})) monte_carlo.activate_prefetch(False) monte_carlo.set(lj_system(box_length=box_length, cutoff=cutoff)) monte_carlo.set( feasst.MakeMetropolis( feasst.args({ "beta": str(1. / temperature), "chemical_potential": "1.", }))) monte_carlo.add( feasst.MakeTrialTranslate( feasst.args({ "weight": "1.", "tunable_param": str(tunable_param), "tunable_target_acceptance": str(target_acceptance), "tunable_percent_change": "0.01", # "num_steps": "4", # "reference_index": "0", }))) feasst.SeekNumParticles(num_particles).with_trial_add().run(monte_carlo) monte_carlo.add( feasst.MakeLog( feasst.args({ "steps_per": str(steps_per), "file_name": "log" + file_app + ".txt", "clear_file": "true" }))) monte_carlo.add( feasst.MakeCheckEnergy( feasst.args({ "steps_per": str(steps_per), "tolerance": str(1e-8) }))) monte_carlo.add(feasst.MakeTune(feasst.args({"steps_per": str(steps_per)}))) #equilibrate monte_carlo.attempt(int(1e7)) if not args.nopipe: monte_carlo.activate_prefetch(True) monte_carlo.add( feasst.MakeMeanSquaredDisplacement( feasst.args({ "steps_per_update": "10000", "updates_per_origin": "1000", "file_name": "msd" + file_app + ".txt", "steps_per_write": str(int(1e5)) }))) monte_carlo.add( feasst.MakeCPUTime( feasst.args({ "steps_per_update": str(steps_per), "steps_per_write": str(steps_per), "file_name": "cpu" + file_app + ".txt", }))) #h0 = feasst.cpu_hours() monte_carlo.attempt(int(1e8))
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( feasst.MakeCheckEnergy( feasst.args({ "steps_per": str(steps_per), "tolerance": "1e-8" }))) monte_carlo.attempt(int(1e5))
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