09: Fix fix fix

This commit is contained in:
2022-11-22 20:24:41 +01:00
parent 641bdf75a4
commit 02b95c4c8c

View File

@ -5,8 +5,6 @@ import argparse
import time
import h5py
starttime = time.asctime()
rng = np.random.default_rng()
def potential_v(x,lamb):
@ -68,13 +66,13 @@ def main():
# perform sanity checks on the arguments
if args.w is None or args.w < 1:
parser.error("Please specify a positive lattice size!")
parser.error("Please specify a positive lattice size!")
if args.k is None or args.k <= 0.0:
parser.error("Please specify a positive kappa!")
parser.error("Please specify a positive kappa!")
if args.e < 10:
parser.error("Need at least 10 equilibration sweeps to determine the average cluster size")
parser.error("Need at least 10 equilibration sweeps to determine the average cluster size")
if args.d < 1:
parser.error("Delta should be >= 1.")
parser.error("Delta should be >= 1.")
# fix parameters
lamb = args.l
@ -84,17 +82,27 @@ def main():
delta = args.d
equil_sweeps = args.e
measure_sweeps = args.m
measurements = args.n
measurements = args.n or 0
if args.f is None:
# construct a filename from the parameters plus a timestamp (to avoid overwriting)
output_filename = "data_l{}_k{}_w{}_d{}_{}.hdf5".format(lamb,kappa,width,delta,time.strftime("%Y%m%d%H%M%S"))
# construct a filename from the parameters plus a timestamp (to avoid overwriting)
output_filename = "data_l{}_k{}_w{}_d{}_{}.hdf5".format(lamb,kappa,width,delta,time.strftime("%Y%m%d%H%M%S"))
else:
output_filename = args.f
output_filename = args.f
# Equilibration
phi_state = np.zeros((width,width,width,width))
run_scalar_MH(phi_state,lamb,kappa,delta,equil_sweeps * num_sites)
# Last things before we go-go
measurements_done = 0
starttime = time.time()
last_output_time = time.time()
# Prepare file
last_output_time = time.time()
with h5py.File(output_filename,'a') as f:
if not "mean-magn" in f:
dataset = f.create_dataset("mean-magn", chunks=True, data=mean_magn)
dataset = f.create_dataset("magnetizations", (0,), maxshape=(None,), chunks=True)
# store some information as metadata for the data set
dataset.attrs["lamb"] = lamb
dataset.attrs["kappa"] = kappa
@ -105,19 +113,31 @@ def main():
dataset.attrs["measure_sweeps"] = measure_sweeps
dataset.attrs["measurements"] = measurements
dataset.attrs["start time"] = starttime
dataset.attrs["stop time"] = time.asctime()
# Measure
# TODO: Does mean_magn need to be a list?
mean_magn = []
phi_state = np.zeros((width,width,width,width))
run_scalar_MH(phi_state,lamb,kappa,delta,equil_sweeps * num_sites)
magnetizations = np.empty(measurements)
for i in range(measurements):
magnetizations = []
while True:
run_scalar_MH(phi_state,lamb,kappa,delta,measure_sweeps * num_sites)
magnetizations[i] = np.mean(phi_state)
mean, err = batch_estimate(np.abs(magnetizations),lambda x:np.mean(x),10)
mean_magn.append([mean,err])
magnetizations.append(np.mean(phi_state))
measurements_done += 1
if measurements == 0 or measurements_done == measurements or time.time() - last_output_time > args.o:
# time to output data again
with h5py.File(output_filename,'a') as f:
# enlarge the data set
f["magnetizations"].resize(measurements, axis=0)
# copy the data to the new space at the end of the dataset
f["magnetizations"][-len(magnetizations):] = magnetizations
f["magnetizations"].attrs["current_time"] = time.asctime()
magnetizations.clear()
if measurements_done == measurements:
break
else:
last_output_time = time.time()
# TODO: Store stoptime if any.
#dataset.attrs["stop time"] = time.asctime()
# TODO: Save if n is unset, m is set.
if __name__ == "__main__":
main()