43 integer,
intent(in) :: ierr
44 if (ierr /= nf90_noerr)
then
45 print*, trim(nf90_strerror(ierr))
74 QHO, accept_rate, alpha)
76 real(real64),
intent(in),
dimension(:) :: position_array, energy_array
77 character(len=*),
intent(in) :: filename
79 real(real64),
intent(in) :: accept_rate, alpha
83 integer,
parameter :: ndims=1
84 integer,
parameter :: n_arrays = 2
85 integer,
dimension(ndims) :: dim_id
86 character(len=1),
dimension(ndims) :: dims=(/
"t"/)
87 integer,
dimension(n_arrays) :: var_id
88 integer :: ierr, file_id, i
92 ierr = nf90_create(filename, nf90_clobber, file_id)
97 ierr = nf90_def_dim(file_id, dims(i), nf90_unlimited, dim_id(i))
103 ierr = nf90_put_att(file_id, nf90_global,
"rcut", qho%rcut)
105 ierr = nf90_put_att(file_id, nf90_global,
"sigma", qho%sigma)
107 ierr = nf90_put_att(file_id, nf90_global,
"accept_rate", accept_rate)
109 ierr = nf90_put_att(file_id, nf90_global,
"alpha", alpha)
111 ierr = nf90_put_att(file_id, nf90_global,
"system",
"QHO")
116 ierr = nf90_def_var(file_id,
"positions", nf90_double, dim_id, var_id(1))
119 ierr = nf90_def_var(file_id,
"energies", nf90_double, dim_id, var_id(2))
123 ierr = nf90_enddef(file_id)
127 ierr = nf90_put_var(file_id, var_id(1), position_array)
130 ierr = nf90_put_var(file_id, var_id(2), energy_array)
134 ierr = nf90_close(file_id)
159 ierr, H2plus, accept_rate, c, bond_length)
161 real(real64),
intent(in),
dimension(:, :) :: position_array
162 real(real64),
intent(in),
dimension(:) :: energy_array
163 character(len=*),
intent(in) :: filename
165 real(real64),
intent(in) :: accept_rate
166 real(real64),
intent(in) :: c
167 real(real64),
intent(in) :: bond_length
171 integer,
parameter :: ndims=2
172 integer,
parameter :: n_arrays = 2
173 integer,
dimension(ndims) :: dim_id
174 character(len=1),
dimension(ndims) :: dims=(/
"y",
"t"/)
175 integer,
dimension(ndims) :: dim_lengths=(/3, nf90_unlimited/)
176 integer,
dimension(n_arrays) :: var_id
177 integer :: ierr, file_id, i
182 ierr = nf90_create(filename, nf90_clobber, file_id)
187 ierr = nf90_def_dim(file_id, dims(i), dim_lengths(i), dim_id(i))
193 ierr = nf90_put_att(file_id, nf90_global,
"rcut", h2plus%rcut)
195 ierr = nf90_put_att(file_id, nf90_global,
"sigma", h2plus%sigma)
197 ierr = nf90_put_att(file_id, nf90_global,
"accept_rate", accept_rate)
199 ierr = nf90_put_att(file_id, nf90_global,
"parameter_c", c)
201 ierr = nf90_put_att(file_id, nf90_global,
"bond_length", bond_length)
203 ierr = nf90_put_att(file_id, nf90_global,
"system",
"H2plus")
208 ierr = nf90_def_var(file_id,
"positions", nf90_double, dim_id, var_id(1))
212 ierr = nf90_def_var(file_id,
"energies", nf90_double, dim_id(2), var_id(2))
216 ierr = nf90_enddef(file_id)
220 ierr = nf90_put_var(file_id, var_id(1), position_array)
223 ierr = nf90_put_var(file_id, var_id(2), energy_array)
227 ierr = nf90_close(file_id)
252 ierr, H2, accept_rate, beta, bond_length)
254 real(real64),
intent(in),
dimension(:, :) :: position_array
255 real(real64),
intent(in),
dimension(:) :: energy_array
256 character(len=*),
intent(in) :: filename
257 type(
h2_type),
intent(in) :: H2
258 real(real64),
intent(in) :: accept_rate
259 real(real64),
intent(in) :: beta
260 real(real64),
intent(in) :: bond_length
264 integer,
parameter :: ndims=2
265 integer,
parameter :: n_arrays = 2
266 integer,
dimension(ndims) :: dim_id
267 character(len=1),
dimension(ndims) :: dims=(/
"y",
"t"/)
268 integer,
dimension(ndims) :: dim_lengths=(/3, nf90_unlimited/)
269 integer,
dimension(n_arrays) :: var_id
270 integer :: ierr, file_id, i
274 ierr = nf90_create(filename, nf90_clobber, file_id)
279 ierr = nf90_def_dim(file_id, dims(i), dim_lengths(i), dim_id(i))
285 ierr = nf90_put_att(file_id, nf90_global,
"rcut", h2%rcut)
287 ierr = nf90_put_att(file_id, nf90_global,
"sigma", h2%sigma)
289 ierr = nf90_put_att(file_id, nf90_global,
"accept_rate", accept_rate)
291 ierr = nf90_put_att(file_id, nf90_global,
"beta", beta)
293 ierr = nf90_put_att(file_id, nf90_global,
"bond_length", bond_length)
295 ierr = nf90_put_att(file_id, nf90_global,
"system",
"H2")
300 ierr = nf90_def_var(file_id,
"positions", nf90_double, dim_id, var_id(1))
304 ierr = nf90_def_var(file_id,
"energies", nf90_double, dim_id(2), var_id(2))
308 ierr = nf90_enddef(file_id)
312 ierr = nf90_put_var(file_id, var_id(1), position_array)
315 ierr = nf90_put_var(file_id, var_id(2), energy_array)
319 ierr = nf90_close(file_id)
347 subroutine write_qho_main(alpha_array,energy_array,uncertainty_array,filename,ierr,QHO,accept_rate)
349 real(real64),
intent(in),
dimension(:) :: alpha_array, energy_array, uncertainty_array
350 character(len=*),
intent(in) :: filename
352 real(real64),
intent(in),
dimension(:) :: accept_rate
356 integer,
parameter :: ndims=1
357 integer,
dimension(ndims) :: dim_id
358 character(len=1),
dimension(ndims) :: dims=(/
"t"/)
359 integer :: ierr, file_id, var_id, var_id_, var_id__, i
364 ierr = nf90_create(filename, nf90_clobber, file_id)
369 ierr = nf90_def_dim(file_id, dims(i), nf90_unlimited, dim_id(i))
375 ierr = nf90_put_att(file_id, nf90_global,
"burn_step", qho%burn_step)
377 ierr = nf90_put_att(file_id, nf90_global,
"thin_step", qho%thin_step)
379 ierr = nf90_put_att(file_id, nf90_global,
"rcut", qho%rcut)
381 ierr = nf90_put_att(file_id, nf90_global,
"sigma", qho%sigma)
383 ierr = nf90_put_att(file_id, nf90_global,
"accept_rate", accept_rate)
385 ierr = nf90_put_att(file_id, nf90_global,
"system",
"QHO")
389 ierr = nf90_def_var(file_id,
"Alpha_array", nf90_double, dim_id, var_id)
392 ierr = nf90_def_var(file_id,
"total_energies", nf90_double, dim_id, var_id_)
395 ierr = nf90_def_var(file_id,
"Uncertainties", nf90_double, dim_id, var_id__)
399 ierr = nf90_enddef(file_id)
403 ierr = nf90_put_var(file_id, var_id, alpha_array)
406 ierr = nf90_put_var(file_id, var_id_, energy_array)
409 ierr = nf90_put_var(file_id, var_id__, uncertainty_array)
413 ierr = nf90_close(file_id)
438 uncertainty_array, filename, ierr, H2plus, accept_rate)
441 real(real64),
intent(in),
dimension(:) :: param_array, bondlength_array
442 real(real64),
intent(in),
dimension(:) :: energy_array, uncertainty_array
443 character(len=*),
intent(in) :: filename
445 real(real64),
intent(in),
dimension(:) :: accept_rate
449 integer,
parameter :: ndims=1
450 integer,
parameter :: n_arrays = 4
451 integer,
dimension(ndims) :: dim_id
452 character(len=1),
dimension(ndims) :: dims=(/
"t"/)
453 integer,
dimension(n_arrays) :: var_id
454 integer :: ierr, file_id, i
459 ierr = nf90_create(filename, nf90_clobber, file_id)
464 ierr = nf90_def_dim(file_id, dims(i), nf90_unlimited, dim_id(i))
470 ierr = nf90_put_att(file_id, nf90_global,
"burn_step", h2plus%burn_step)
472 ierr = nf90_put_att(file_id, nf90_global,
"thin_step", h2plus%thin_step)
474 ierr = nf90_put_att(file_id, nf90_global,
"rcut", h2plus%rcut)
476 ierr = nf90_put_att(file_id, nf90_global,
"sigma", h2plus%sigma)
478 ierr = nf90_put_att(file_id, nf90_global,
"c_grid", h2plus%c_grid)
480 ierr = nf90_put_att(file_id, nf90_global,
"accept_rate", accept_rate)
482 ierr = nf90_put_att(file_id, nf90_global,
"system",
"H2plus")
487 ierr = nf90_def_var(file_id,
"Parameter_array", nf90_double, dim_id, var_id(1))
490 ierr = nf90_def_var(file_id,
"Bondlength_array", nf90_double, dim_id, var_id(2))
493 ierr = nf90_def_var(file_id,
"total_energies", nf90_double, dim_id, var_id(3))
496 ierr = nf90_def_var(file_id,
"Uncertainties", nf90_double, dim_id, var_id(4))
500 ierr = nf90_enddef(file_id)
504 ierr = nf90_put_var(file_id, var_id(1), param_array)
507 ierr = nf90_put_var(file_id, var_id(2), bondlength_array)
510 ierr = nf90_put_var(file_id, var_id(3), energy_array)
513 ierr = nf90_put_var(file_id, var_id(4), uncertainty_array)
517 ierr = nf90_close(file_id)
542 subroutine write_h2_main(param_a_array, param_beta_array, bondlength_array, &
543 energy_array, uncertainty_array, filename, ierr, H2, accept_rate)
545 real(real64),
intent(in),
dimension(:) :: param_a_array, param_beta_array
546 real(real64),
intent(in),
dimension(:) :: bondlength_array, energy_array
547 real(real64),
intent(in),
dimension(:) :: uncertainty_array
548 character(len=*),
intent(in) :: filename
549 type(
h2_type),
intent(in) :: H2
550 real(real64),
intent(in),
dimension(:) :: accept_rate
554 integer,
parameter :: ndims=1
555 integer,
parameter :: n_arrays = 5
556 integer,
dimension(ndims) :: dim_id
557 character(len=1),
dimension(ndims) :: dims=(/
"t"/)
558 integer,
dimension(n_arrays) :: var_id
559 integer :: ierr, file_id, i
564 ierr = nf90_create(filename, nf90_clobber, file_id)
569 ierr = nf90_def_dim(file_id, dims(i), nf90_unlimited, dim_id(i))
575 ierr = nf90_put_att(file_id, nf90_global,
"burn_step", h2%burn_step)
577 ierr = nf90_put_att(file_id, nf90_global,
"thin_step", h2%thin_step)
579 ierr = nf90_put_att(file_id, nf90_global,
"rcut", h2%rcut)
581 ierr = nf90_put_att(file_id, nf90_global,
"sigma", h2%sigma)
583 ierr = nf90_put_att(file_id, nf90_global,
"beta_grid", h2%beta_grid)
585 ierr = nf90_put_att(file_id, nf90_global,
"accept_rate", accept_rate)
587 ierr = nf90_put_att(file_id, nf90_global,
"system",
"H2")
592 ierr = nf90_def_var(file_id,
"Parameter_a_array", nf90_double, dim_id, var_id(1))
595 ierr = nf90_def_var(file_id,
"Parameter_beta_array", nf90_double, dim_id, var_id(2))
598 ierr = nf90_def_var(file_id,
"Bondlength_array", nf90_double, dim_id, var_id(3))
601 ierr = nf90_def_var(file_id,
"total_energies", nf90_double, dim_id, var_id(4))
604 ierr = nf90_def_var(file_id,
"Uncertainties", nf90_double, dim_id, var_id(5))
608 ierr = nf90_enddef(file_id)
612 ierr = nf90_put_var(file_id, var_id(1), param_a_array)
615 ierr = nf90_put_var(file_id, var_id(2), param_beta_array)
618 ierr = nf90_put_var(file_id, var_id(3), bondlength_array)
621 ierr = nf90_put_var(file_id, var_id(4), energy_array)
624 ierr = nf90_put_var(file_id, var_id(5), uncertainty_array)
628 ierr = nf90_close(file_id)
648 real(real64),
intent(in),
dimension(:) :: position_array, energy_array
649 character(len=*),
intent(in) :: filename
652 integer,
parameter :: ndims=1
653 integer,
parameter :: n_arrays = 2
654 integer,
dimension(ndims) :: dim_id
655 character(len=1),
dimension(ndims) :: dims=(/
"t"/)
656 integer,
dimension(n_arrays) :: var_id
657 integer :: ierr, file_id, i
660 ierr = nf90_create(filename, nf90_clobber, file_id)
665 ierr = nf90_def_dim(file_id, dims(i), nf90_unlimited, dim_id(i))
673 ierr = nf90_def_var(file_id,
"Positions", nf90_double, dim_id, var_id(1))
676 ierr = nf90_def_var(file_id,
"Energies", nf90_double, dim_id, var_id(2))
680 ierr = nf90_enddef(file_id)
684 ierr = nf90_put_var(file_id, var_id(1), position_array)
687 ierr = nf90_put_var(file_id, var_id(2), energy_array)
691 ierr = nf90_close(file_id)
711 real(real64),
intent(in),
dimension(:,:) :: position_array_3d
712 real(real64),
intent(in),
dimension(:) :: energy_array
713 character(len=*),
intent(in) :: filename
716 integer,
parameter :: ndims=2
717 integer,
parameter :: n_arrays = 2
718 integer,
dimension(ndims) :: dim_id
719 character(len=1),
dimension(ndims) :: dims=(/
"y",
"t"/)
720 integer,
dimension(ndims) :: dim_lengths=(/3, nf90_unlimited/)
721 integer,
dimension(n_arrays) :: var_id
722 integer :: ierr, file_id, i
725 ierr = nf90_create(filename, nf90_clobber, file_id)
730 ierr = nf90_def_dim(file_id, dims(i), dim_lengths(i), dim_id(i))
738 ierr = nf90_def_var(file_id,
"3D Positions", nf90_double, dim_id, var_id(1))
741 ierr = nf90_def_var(file_id,
"Energies", nf90_double, dim_id(2), var_id(2))
745 ierr = nf90_enddef(file_id)
749 ierr = nf90_put_var(file_id, var_id(1), position_array_3d)
752 ierr = nf90_put_var(file_id, var_id(2), energy_array)
756 ierr = nf90_close(file_id)
775 real,
intent(in),
dimension(:) :: array
776 character(len=*),
intent(in) :: filename
779 integer,
parameter :: ndims=1
780 integer,
dimension(ndims) :: dim_id
781 character(len=1),
dimension(ndims) :: dims=(/
"t"/)
782 integer :: ierr, file_id, var_id, i, array_length
783 integer,
dimension(1) :: start_array
787 ierr = nf90_open(filename, nf90_write, file_id)
791 ierr = nf90_inq_varid(file_id,
"Trace", var_id)
796 ierr = nf90_inq_dimid(file_id, dims(i), dim_id(i))
801 ierr = nf90_inquire_dimension(file_id, dim_id(1), dims(1), array_length)
804 start_array(1) = array_length
807 ierr = nf90_put_var(file_id, var_id, array, start=start_array)
811 ierr = nf90_close(file_id)
816 end module write_netcdf
Contains derived types, and global variables to store input values of simulation parameters.
Contains NetCDF output functions for different problem main & equilibration runs.
subroutine write_h2plus_main(param_array, bondlength_array, energy_array, uncertainty_array, filename, ierr, H2plus, accept_rate)
Output results of H2plus MCMC run.
subroutine write_qho_main(alpha_array, energy_array, uncertainty_array, filename, ierr, QHO, accept_rate)
Output results of QHO MCMC run.
subroutine chain_output_3d(position_array_3d, energy_array, filename, ierr)
Output 3d position and 1d energy arrays of MCMC run to NetCDF file [UNUSED].
subroutine append_to_array(array, filename, ierr)
Appends array to a 1d NetCDF array in file [UNUSED].
subroutine write_qho_equilibration(position_array, energy_array, filename, ierr, QHO, accept_rate, alpha)
Output QHO system traces for equilibration.
subroutine write_h2_equilibration(position_array, energy_array, filename, ierr, H2, accept_rate, beta, bond_length)
Output H2 system trace for equilibration.
subroutine write_h2_main(param_a_array, param_beta_array, bondlength_array, energy_array, uncertainty_array, filename, ierr, H2, accept_rate)
Output results of H2 MCMC run.
subroutine error_check(ierr)
Checks error status at each point of NetCDF file build.
subroutine chain_output_1d(position_array, energy_array, filename, ierr)
Output 1d position and energy arrays of MCMC run to NetCDF file [UNUSED].
subroutine write_h2plus_equilibration(position_array, energy_array, filename, ierr, H2plus, accept_rate, c, bond_length)
Output H2_plus system trace for equilibration.
Derived Type for Hydrogen Molecule, including VQMC defaults.
Derived Type for Hydrogen Ion, including VQMC defaults.
Derived Type for Quantum Harmonic Oscillator, including VQMC defaults.