5454
5555# ===================== HEOM output ====================
5656
57- def init_heom_data (saver , hdf5_output_level , _nsteps , _nquant ):
57+ def init_heom_data (saver , hdf5_output_level , _nsteps , _nquant , _nn_tot ):
5858
5959 if hdf5_output_level >= 1 :
6060 # Time axis (integer steps)
@@ -67,8 +67,13 @@ def init_heom_data(saver, hdf5_output_level, _nsteps, _nquant):
6767 # System's density matrix
6868 saver .add_dataset ("denmat" , (_nsteps , _nquant , _nquant ), "C" )
6969
70+ if hdf5_output_level >= 4 :
71+ # Auxiliary density matrices
72+ saver .add_dataset ("auxdenmat" , (_nsteps , _nn_tot - 1 , _nquant , _nquant ), "C" )
7073
71- def init_heom_savers (params , nquant ):
74+
75+ #def init_heom_savers(params, nquant):
76+ def init_heom_savers (params , nquant , nn_tot ):
7277
7378 # ================ Create savers ==================
7479 prefix = params ["prefix" ]
@@ -87,7 +92,8 @@ def init_heom_savers(params, nquant):
8792 if hdf5_output_level > 0 :
8893 _savers ["hdf5_saver" ] = data_savers .hdf5_saver (F"{ prefix } /data.hdf" , properties_to_save )
8994 _savers ["hdf5_saver" ].set_compression_level (params ["use_compression" ], params ["compression_level" ])
90- init_heom_data (_savers ["hdf5_saver" ], hdf5_output_level , params ["nsteps" ], nquant )
95+ #init_heom_data(_savers["hdf5_saver"], hdf5_output_level, params["nsteps"], nquant)
96+ init_heom_data (_savers ["hdf5_saver" ], hdf5_output_level , math .ceil (params ["nsteps" ] / params ["nprint" ]), nquant , nn_tot )
9197
9298 # ====== TXT ========
9399 if params ["txt_output_level" ] > 0 :
@@ -98,26 +104,40 @@ def init_heom_savers(params, nquant):
98104
99105 if mem_output_level > 0 :
100106 _savers ["mem_saver" ] = data_savers .mem_saver (properties_to_save )
101- init_heom_data (_savers ["mem_saver" ], mem_output_level , params ["nsteps" ], nquant )
107+ #init_heom_data(_savers["mem_saver"], mem_output_level, params["nsteps"], nquant)
108+ init_heom_data (_savers ["mem_saver" ], mem_output_level , math .ceil (params ["nsteps" ] / params ["nprint" ]), nquant , nn_tot )
102109
103110 return _savers
104111
105112
106- def save_heom_hdf5 (step , saver , params , denmat ):
113+ #def save_heom_hdf5(step, saver, params, denmat):
114+ def save_heom_hdf5 (step , saver , params , rho_unpacked ):
107115
108116 dt = params ["dt" ]
117+ nprint = params ["nprint" ]
109118 hdf5_output_level = params ["hdf5_output_level" ]
110119
120+ if step % nprint == 0 :
121+ step = int (step / nprint )
122+ else :
123+ return None
124+
111125 if hdf5_output_level >= 1 :
112126 # Timestep
113- saver .save_scalar (step , "timestep" , step )
127+ saver .save_scalar (step , "timestep" , nprint * step )
114128
115129 # Actual time
116- saver .save_scalar (step , "time" , step * dt )
130+ saver .save_scalar (step , "time" , nprint * step * dt )
117131
118132 if hdf5_output_level >= 3 :
119133 # Average adiabatic density matrices
120- saver .save_matrix (step , "denmat" , denmat )
134+ #saver.save_matrix(step, "denmat", denmat)
135+ saver .save_matrix (step , "denmat" , rho_unpacked [0 ])
136+
137+ if hdf5_output_level >= 4 :
138+ nn_tot = len (rho_unpacked )
139+ for n in range (1 ,nn_tot ):
140+ saver .save_multi_matrix (step , n - 1 , "auxdenmat" , rho_unpacked [n ])
121141
122142
123143def save_heom_data (_savers , step , print_freq , params , rho_unpacked ):
@@ -129,12 +149,14 @@ def save_heom_data(_savers, step, print_freq, params, rho_unpacked):
129149
130150 # Save properties
131151 if _savers ["hdf5_saver" ] is not None :
132- save_heom_hdf5 (step , _savers ["hdf5_saver" ], params , rho_unpacked [0 ])
152+ #save_heom_hdf5(step, _savers["hdf5_saver"], params, rho_unpacked[0])
153+ save_heom_hdf5 (step , _savers ["hdf5_saver" ], params , rho_unpacked )
133154
134155 if _savers ["txt_saver" ] is not None :
135156 pass
136157
137158 if _savers ["mem_saver" ] is not None :
138159 prms = dict (params )
139160 prms ["hdf5_output_level" ] = prms ["mem_output_level" ]
140- save_heom_hdf5 (step , _savers ["mem_saver" ], prms , rho_unpacked [0 ])
161+ #save_heom_hdf5(step, _savers["mem_saver"], prms, rho_unpacked[0])
162+ save_heom_hdf5 (step , _savers ["mem_saver" ], prms , rho_unpacked )
0 commit comments