tempoCollaboration / OQuPy

A Python package to efficiently simulate non-Markovian open quantum systems with process tensors.
https://oqupy.readthedocs.io
Apache License 2.0
78 stars 26 forks source link

Precomputed process tensors for performance testing #119

Closed gefux closed 6 months ago

gefux commented 7 months ago

To do performance testing efficiently it would be good to have a library of several precomputed process tensors.

I'd suggest that the generated process tensors should be stored on a public data record, (e.g. Zenodo) such that they can be loaded into /test/data/process_tensors when needed.

For a start we could generate process tensors that are a combination of

I'd imagine that the filenames then have a form like this example: _boson_alpha0.16_zeta3.0_T0.8_gauss_dt0.04step0128.hdf5

What do you think @piperfw ?

piperfw commented 7 months ago

The suggested format seems sensible - I would probably use "gaussian" rather than "gauss" so as to match the named correlations parameter exactly (presumably a cutoff value should also be specified?).

My one question would be about the values of temperature and dt - do you have a reason for choosing those values? I would guess (T=0 and) the two being of similar scales would be reasonable.

gefux commented 7 months ago

My one question would be about the values of temperature and dt - do you have a reason for choosing those values?

Yes, because those are the temperatures we chose for our paper on PT-TEBD (https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.5.033078). But I agree, for a start T=0.0 and T=0.8 would probably suffice.

For dt all I think matters is that it plays well together with the timesteps, such that one has a bunch of different process tensors for the same total time. In the above 0.02*256 = 0.04*128. If we use powers of 2 for the timesteps then maybe powers of 1/2 for 'dt' would be best (?).

piperfw commented 7 months ago
fp = 'boson_alpha0.16_zeta3.0_T0.8_gauss_dt0.04_step0128.hdf5'
params = {key:float(val_str) for key,val_str in dict(re.findall('([a-zA-Z]*)([\d.]+)', os.path.splitext(fp)[0])).items()}
assert params['dt']*params['step'] == target_time # 5.12

:thinking:

Powers of 2 works!

piperfw commented 6 months ago

Remaining discussion point is linking with Zenodo?

gefux commented 6 months ago

As we are currently using the process tensors for performance testing storing on Zenodo doesn't seem necessary to me. Feel free to reopen or create a separate issue on storage!