42#include "../base/base_uses.f90"
48 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'tmc_file_io'
74 FUNCTION expand_file_name_ending(file_name, extra)
RESULT(result_file_name)
75 CHARACTER(LEN=*) :: file_name, extra
76 CHARACTER(LEN=default_path_length) :: result_file_name
80 cpassert(file_name /=
"")
82 ind = index(file_name,
".", back=.true.)
83 IF (.NOT. ind == 0)
THEN
84 WRITE (result_file_name, *) file_name(1:ind - 1),
".", &
87 WRITE (result_file_name, *) trim(file_name),
".", extra
89 result_file_name = trim(adjustl(result_file_name))
90 cpassert(result_file_name /=
"")
91 END FUNCTION expand_file_name_ending
102 CHARACTER(LEN=*) :: file_name, extra
103 CHARACTER(LEN=default_path_length) :: result_file_name
107 cpassert(file_name /=
"")
109 ind = index(file_name,
".", back=.true.)
110 IF (.NOT. ind == 0)
THEN
111 WRITE (result_file_name, *) file_name(1:ind - 1),
"_", &
112 trim(adjustl(extra)), file_name(ind:len_trim(file_name))
114 WRITE (result_file_name, *) trim(file_name),
"_", extra
116 result_file_name = trim(adjustl(result_file_name))
117 cpassert(result_file_name /=
"")
129 CHARACTER(LEN=*) :: file_name
130 REAL(kind=
dp) :: rvalue
131 CHARACTER(LEN=default_path_length) :: result_file_name
133 CHARACTER(LEN=18) :: rval_to_string
136 cpassert(file_name /=
"")
140 WRITE (rval_to_string,
"(F16.2)") rvalue
141 ind = index(file_name,
".", back=.true.)
142 IF (.NOT. ind == 0)
THEN
143 WRITE (result_file_name, *) file_name(1:ind - 1),
"_T", &
144 trim(adjustl(rval_to_string)), file_name(ind:len_trim(file_name))
146 IF (len(file_name) == 0)
THEN
147 WRITE (result_file_name, *) trim(file_name),
"T", trim(adjustl(rval_to_string)), &
148 file_name(ind:len_trim(file_name))
150 WRITE (result_file_name, *) trim(file_name),
"_T", trim(adjustl(rval_to_string))
153 result_file_name = trim(adjustl(result_file_name))
154 cpassert(result_file_name /=
"")
166 CHARACTER(LEN=*) :: file_name
168 CHARACTER(LEN=default_path_length) :: result_file_name
170 CHARACTER(LEN=18) :: rval_to_string
173 cpassert(file_name /=
"")
177 WRITE (rval_to_string, *) ivalue
178 ind = index(file_name,
".", back=.true.)
179 IF (.NOT. ind == 0)
THEN
180 WRITE (result_file_name, *) file_name(1:ind - 1),
"_", &
181 trim(adjustl(rval_to_string)), file_name(ind:len_trim(file_name))
183 IF (len(file_name) == 0)
THEN
184 WRITE (result_file_name, *) trim(file_name),
"", trim(adjustl(rval_to_string)), &
185 file_name(ind:len_trim(file_name))
187 WRITE (result_file_name, *) trim(file_name),
"_", trim(adjustl(rval_to_string)), &
188 file_name(ind:len_trim(file_name))
191 result_file_name = trim(adjustl(result_file_name))
192 cpassert(result_file_name /=
"")
209 INTEGER,
DIMENSION(:) :: job_counts
212 CHARACTER(LEN=default_path_length) :: c_tmp, file_name
216 cpassert(
ASSOCIATED(tmc_env))
217 cpassert(
ASSOCIATED(tmc_env%m_env))
218 cpassert(
ASSOCIATED(tmc_env%params))
219 cpassert(
ASSOCIATED(tmc_env%m_env%gt_act))
221 WRITE (c_tmp, fmt=
'(I9.9)') tmc_env%m_env%result_count(0)
225 CALL open_file(file_name=file_name, file_status=
"REPLACE", &
226 file_action=
"WRITE", file_form=
"UNFORMATTED", &
228 WRITE (f_unit)
SIZE(tmc_env%params%Temp)
229 WRITE (f_unit) tmc_env%params%Temp(:), &
230 tmc_env%m_env%gt_act%nr, &
231 tmc_env%m_env%gt_act%rng_seed, &
232 tmc_env%m_env%gt_act%rnd_nr, &
233 tmc_env%m_env%gt_act%prob_acc, &
234 tmc_env%m_env%gt_act%mv_conf, &
235 tmc_env%m_env%gt_act%mv_next_conf, &
236 tmc_env%m_env%result_count(0:), &
237 tmc_env%params%move_types%mv_weight, &
238 tmc_env%params%move_types%acc_count, &
239 tmc_env%params%move_types%mv_count, &
240 tmc_env%params%move_types%subbox_acc_count, &
241 tmc_env%params%move_types%subbox_count, &
242 tmc_env%params%cell%hmat, &
245 DO i = 1,
SIZE(tmc_env%params%Temp)
246 WRITE (f_unit) tmc_env%m_env%result_list(i)%elem%nr, &
247 tmc_env%m_env%result_list(i)%elem%rng_seed, &
248 tmc_env%m_env%result_list(i)%elem%pos, &
249 tmc_env%m_env%result_list(i)%elem%vel, &
250 tmc_env%m_env%result_list(i)%elem%box_scale, &
251 tmc_env%m_env%result_list(i)%elem%potential, &
252 tmc_env%m_env%result_list(i)%elem%e_pot_approx, &
253 tmc_env%m_env%result_list(i)%elem%ekin, &
254 tmc_env%m_env%result_list(i)%elem%ekin_before_md, &
255 tmc_env%m_env%result_list(i)%elem%temp_created
260 file_action=
"WRITE", file_status=
"REPLACE", &
262 WRITE (f_unit, *) trim(file_name)
278 INTEGER,
DIMENSION(:) :: job_counts
280 CHARACTER(LEN=*) :: file_name
282 INTEGER :: file_ptr, i, temp_size
284 REAL(kind=
dp),
ALLOCATABLE,
DIMENSION(:) :: tmp_temp
285 REAL(kind=
dp),
DIMENSION(nr_mv_types) :: mv_weight_tmp
287 cpassert(
ASSOCIATED(tmc_env))
288 cpassert(
ASSOCIATED(tmc_env%m_env))
289 cpassert(
ASSOCIATED(tmc_env%params))
290 cpassert(
ASSOCIATED(tmc_env%m_env%gt_act))
296 file_action=
"READ", unit_number=file_ptr)
297 READ (file_ptr, *) file_name
301 CALL open_file(file_name=file_name, file_status=
"OLD", file_form=
"UNFORMATTED", &
302 file_action=
"READ", unit_number=file_ptr)
303 READ (file_ptr) temp_size
304 IF (temp_size /=
SIZE(tmc_env%params%Temp))
THEN
305 CALL cp_abort(__location__, &
306 "the actual specified temperatures does not "// &
307 "fit in amount with the one from restart file ")
309 ALLOCATE (tmp_temp(temp_size))
310 READ (file_ptr) tmp_temp(:), &
311 tmc_env%m_env%gt_act%nr, &
312 tmc_env%m_env%gt_act%rng_seed, &
313 tmc_env%m_env%gt_act%rnd_nr, &
314 tmc_env%m_env%gt_act%prob_acc, &
315 tmc_env%m_env%gt_act%mv_conf, &
316 tmc_env%m_env%gt_act%mv_next_conf, &
317 tmc_env%m_env%result_count(0:), &
319 tmc_env%params%move_types%acc_count, &
320 tmc_env%params%move_types%mv_count, &
321 tmc_env%params%move_types%subbox_acc_count, &
322 tmc_env%params%move_types%subbox_count, &
323 tmc_env%params%cell%hmat, &
327 IF (any(abs(tmc_env%params%Temp(:) - tmp_temp(:)) >= 0.005))
THEN
328 CALL cp_abort(__location__,
"the temperatures differ from the previous calculation. "// &
329 "There were the following temperatures used:")
331 IF (any(mv_weight_tmp(:) /= tmc_env%params%move_types%mv_weight(:)))
THEN
332 cpwarn(
"The amount of mv types differs between the original and the restart run.")
335 DO i = 1,
SIZE(tmc_env%params%Temp)
336 tmc_env%m_env%gt_act%conf(i)%elem => tmc_env%m_env%result_list(i)%elem
337 READ (file_ptr) tmc_env%m_env%result_list(i)%elem%nr, &
338 tmc_env%m_env%result_list(i)%elem%rng_seed, &
339 tmc_env%m_env%result_list(i)%elem%pos, &
340 tmc_env%m_env%result_list(i)%elem%vel, &
341 tmc_env%m_env%result_list(i)%elem%box_scale, &
342 tmc_env%m_env%result_list(i)%elem%potential, &
343 tmc_env%m_env%result_list(i)%elem%e_pot_approx, &
344 tmc_env%m_env%result_list(i)%elem%ekin, &
345 tmc_env%m_env%result_list(i)%elem%ekin_before_md, &
346 tmc_env%m_env%result_list(i)%elem%temp_created
367 accepted, tmc_params)
369 INTEGER,
DIMENSION(:),
POINTER :: result_count
370 INTEGER :: conf_updated
371 LOGICAL,
INTENT(IN) :: accepted
374 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_result_list_element'
376 CHARACTER(LEN=default_path_length) :: file_name
381 cpassert(
ASSOCIATED(result_list))
382 cpassert(
ASSOCIATED(result_count))
383 cpassert(
ASSOCIATED(tmc_params))
384 cpassert(
ASSOCIATED(tmc_params%Temp))
385 cpassert(conf_updated >= 0)
386 cpassert(conf_updated <=
SIZE(tmc_params%Temp))
389 CALL timeset(routinen, handle)
391 IF (conf_updated == 0)
THEN
393 DO i = 1,
SIZE(tmc_params%Temp)
396 tmc_params=tmc_params, conf_nr=result_count(0), &
400 IF ((.NOT. tmc_params%print_only_diff_conf) .OR. &
401 (tmc_params%print_only_diff_conf .AND. accepted))
THEN
403 tmc_params=tmc_params, conf_nr=result_count(conf_updated), &
405 rvalue=tmc_params%Temp(conf_updated)))
409 CALL timestop(handle)
426 INTEGER,
OPTIONAL :: temp_index
427 CHARACTER(LEN=*),
OPTIONAL :: file_name
428 INTEGER,
OPTIONAL :: conf_nr
429 CHARACTER(LEN=*),
OPTIONAL :: conf_info
431 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_element_in_file'
433 CHARACTER(LEN=default_path_length) :: file_name_act, tmp_name
434 CHARACTER(LEN=default_string_length) ::
header
435 INTEGER :: file_ptr, handle, i, nr_atoms
438 REAL(kind=
dp),
DIMENSION(3, 3) :: hmat_scaled
445 cpassert(
ASSOCIATED(elem))
446 cpassert(
ASSOCIATED(tmc_params))
447 cpassert(
ASSOCIATED(tmc_params%atoms))
448 cpassert(
PRESENT(conf_nr) .OR.
PRESENT(conf_info))
452 CALL timeset(routinen, handle)
455 IF (
PRESENT(file_name))
THEN
456 cpassert(file_name /=
"")
457 file_name_act = file_name
459 cpassert(
ASSOCIATED(tmc_params%Temp))
460 cpassert(
PRESENT(temp_index))
462 rvalue=tmc_params%Temp(temp_index))
465 nr_atoms =
SIZE(elem%pos)/tmc_params%dim_per_elem
468 IF (tmc_params%print_trajectory .OR. tmc_params%print_forces)
THEN
469 IF (
PRESENT(conf_info))
THEN
470 WRITE (
header, *) trim(adjustl(conf_info))
473 WRITE (
header, fmt=
"(A,I8,A,F20.10,F20.10,A,I8,I8)")
"i =", conf_nr,
" ,E =", &
474 elem%potential, elem%ekin,
" st elem", elem%sub_tree_nr, elem%nr
479 IF (tmc_params%print_trajectory)
THEN
480 tmp_name = expand_file_name_ending(file_name_act,
"xyz")
481 CALL open_file(file_name=tmp_name, file_status=
"UNKNOWN", &
482 file_action=
"WRITE", file_position=
"APPEND", &
483 unit_number=file_ptr)
484 WRITE (file_ptr, fmt=
"(I8)") nr_atoms
485 WRITE (file_ptr, *) trim(
header)
486 DO i = 1,
SIZE(elem%pos), tmc_params%dim_per_elem
487 WRITE (file_ptr, fmt=
"(A4,1X,1000F20.10)") &
488 trim(tmc_params%atoms((i - 1)/tmc_params%dim_per_elem + 1)%name), &
489 elem%pos(i:i + tmc_params%dim_per_elem - 1)*au2a
495 IF (tmc_params%print_forces)
THEN
496 tmp_name = expand_file_name_ending(file_name_act,
"frc")
497 CALL open_file(file_name=tmp_name, file_status=
"UNKNOWN", &
498 file_action=
"WRITE", file_position=
"APPEND", &
499 unit_number=file_ptr)
500 WRITE (file_ptr, fmt=
"(I8)") nr_atoms
501 WRITE (file_ptr, *) trim(
header)
502 DO i = 1,
SIZE(elem%pos), tmc_params%dim_per_elem
503 WRITE (file_ptr, fmt=
"(A4,1X,1000F20.10)") &
504 trim(tmc_params%atoms((i - 1)/tmc_params%dim_per_elem + 1)%name), &
505 elem%frc(i:i + tmc_params%dim_per_elem - 1)
511 IF (tmc_params%print_dipole)
THEN
513 conf_nr=conf_nr, dip=elem%dipole)
517 IF (tmc_params%print_cell)
THEN
518 tmp_name = expand_file_name_ending(file_name_act,
"cell")
522 CALL open_file(file_name=tmp_name, file_status=
"NEW", &
523 file_action=
"WRITE", unit_number=file_ptr)
524 WRITE (file_ptr, fmt=
'(A,9(7X,A2," [Angstrom]"),6X,A)') &
525 "# MC step ",
"Ax",
"Ay",
"Az",
"Bx",
"By",
"Bz",
"Cx",
"Cy",
"Cz", &
526 "Volume [Angstrom^3]"
528 CALL open_file(file_name=tmp_name, file_status=
"OLD", &
529 file_action=
"WRITE", file_position=
"APPEND", &
530 unit_number=file_ptr)
533 box_scale=elem%box_scale, scaled_hmat=hmat_scaled, &
535 WRITE (file_ptr, fmt=
"(I8,9(1X,F19.10),1X,F24.10)") conf_nr, &
536 hmat_scaled(:, :)*au2a, vol*au2a**3
542 IF (tmc_params%print_energies)
THEN
543 tmp_name = expand_file_name_ending(file_name_act,
"ener")
547 CALL open_file(file_name=tmp_name, file_status=
"NEW", &
548 file_action=
"WRITE", unit_number=file_ptr)
549 WRITE (file_ptr, fmt=
'(A,4A20)') &
550 "# MC step ",
" exact ",
" approx ",
" last SCF ",
" kinetic "
552 CALL open_file(file_name=tmp_name, file_status=
"OLD", &
553 file_action=
"WRITE", file_position=
"APPEND", &
554 unit_number=file_ptr)
556 WRITE (file_ptr, fmt=
"(I8,14F20.10)") conf_nr, elem%potential, elem%e_pot_approx, &
557 elem%scf_energies(mod(elem%scf_energies_count, 4) + 1), elem%ekin
562 CALL timestop(handle)
576 CHARACTER(LEN=default_path_length) :: file_name
578 REAL(kind=
dp),
DIMENSION(:),
POINTER :: dip
579 CHARACTER(LEN=*),
INTENT(in),
OPTIONAL :: file_ext
581 CHARACTER(LEN=default_path_length) :: file_name_tmp
585 cpassert(
ASSOCIATED(dip))
587 IF (
PRESENT(file_ext))
THEN
588 cpassert(file_ext /=
"")
589 file_name_tmp = expand_file_name_ending(file_name, trim(file_ext))
591 file_name_tmp = expand_file_name_ending(file_name,
"dip")
595 CALL open_file(file_name=file_name_tmp, file_status=
"NEW", &
596 file_action=
"WRITE", unit_number=file_ptr)
597 WRITE (file_ptr, fmt=
'(A8,10A20)')
"# conf_nr",
"dip_x [C Angstrom]", &
598 "dip_y [C Angstrom]",
"dip_z [C Angstrom]"
600 CALL open_file(file_name=file_name_tmp, file_status=
"OLD", &
601 file_action=
"WRITE", file_position=
"APPEND", &
602 unit_number=file_ptr)
604 WRITE (file_ptr, fmt=
"(I8,10F20.10)") conf_nr, dip(:)
624 INTEGER :: conf_nr, stat
626 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_element_from_file'
628 INTEGER :: conf_nr_old, handle, i_tmp
629 LOGICAL :: files_conf_missmatch
632 conf_nr_old = conf_nr
633 files_conf_missmatch = .false.
635 cpassert(
ASSOCIATED(elem))
636 cpassert(
ASSOCIATED(tmc_ana))
637 cpassert(
ASSOCIATED(tmc_ana%atoms))
640 CALL timeset(routinen, handle)
643 IF (tmc_ana%id_traj > 0)
THEN
645 CALL read_pos_from_file(elem=elem, tmc_ana=tmc_ana, stat=stat, &
648 CALL cp_warn(__location__, &
649 'end of position file reached at line '// &
650 cp_to_string(real(tmc_ana%lc_traj, kind=
dp))//
", last element "// &
653 cpassert(i_tmp > conf_nr_old)
666 CALL read_dipole_from_file(elem=elem, tmc_ana=tmc_ana, stat=stat, &
669 CALL cp_warn(__location__, &
670 'end of dipole file reached at line'// &
675 IF (tmc_ana%id_traj > 0)
THEN
676 IF (i_tmp == conf_nr)
THEN
677 files_conf_missmatch = .false.
682 files_conf_missmatch = .true.
685 ELSE IF (i_tmp > conf_nr_old)
THEN
690 END DO search_conf_dip
696 CALL read_cell_from_file(elem=elem, tmc_ana=tmc_ana, stat=stat, &
699 CALL cp_warn(__location__, &
700 'end of cell file reached at line at line'// &
702 EXIT search_conf_cell
705 IF (tmc_ana%id_traj > 0)
THEN
706 IF (i_tmp == conf_nr)
THEN
707 files_conf_missmatch = .false.
708 EXIT search_conf_cell
712 files_conf_missmatch = .true.
715 ELSE IF (i_tmp > conf_nr_old)
THEN
718 EXIT search_conf_cell
720 END DO search_conf_cell
727 IF (files_conf_missmatch)
THEN
728 CALL cp_warn(__location__, &
729 'there is a missmatch in the configuration numbering. '// &
730 "Read number of lines (pos|cell|dip)"// &
737 CALL timestop(handle)
750 SUBROUTINE read_pos_from_file(elem, tmc_ana, stat, conf_nr, header_info)
753 INTEGER :: stat, conf_nr
754 CHARACTER(LEN=*),
OPTIONAL :: header_info
756 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_pos_from_file'
758 CHARACTER(LEN=default_string_length) :: c_tmp
759 INTEGER :: handle, i, i_tmp, status
763 cpassert(
ASSOCIATED(elem))
764 cpassert(
ASSOCIATED(elem%pos))
765 cpassert(
ASSOCIATED(tmc_ana))
766 cpassert(tmc_ana%id_traj > 0)
769 CALL timeset(routinen, handle)
773 tmc_ana%lc_traj = tmc_ana%lc_traj + 1
774 READ (tmc_ana%id_traj,
'(A)', iostat=status) c_tmp(:)
776 CALL cp_abort(__location__, &
777 "configuration header read error at line: "// &
782 EXIT search_next_conf
784 IF (index(c_tmp,
"=") > 0)
THEN
785 READ (c_tmp(index(c_tmp,
"=") + 1:), *, iostat=status) i_tmp
786 IF (status /= 0)
THEN
787 CALL cp_abort(__location__, &
788 "configuration header read error (for conf nr) at line: "// &
791 IF (i_tmp > conf_nr)
THEN
794 IF (
PRESENT(header_info)) header_info = c_tmp
796 EXIT search_next_conf
799 END DO search_next_conf
802 pos_loop:
DO i = 1,
SIZE(elem%pos), tmc_ana%dim_per_elem
803 tmc_ana%lc_traj = tmc_ana%lc_traj + 1
804 READ (tmc_ana%id_traj, fmt=
"(A4,1X,1000F20.10)", iostat=status) &
805 c_tmp, elem%pos(i:i + tmc_ana%dim_per_elem - 1)
806 IF (status /= 0)
THEN
807 CALL cp_abort(__location__, &
808 "configuration pos read error at line: "// &
812 elem%pos(:) = elem%pos(:)/au2a
816 CALL timestop(handle)
817 END SUBROUTINE read_pos_from_file
828 SUBROUTINE read_dipole_from_file(elem, tmc_ana, stat, conf_nr)
831 INTEGER :: stat, conf_nr
833 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_dipole_from_file'
835 CHARACTER(LEN=250) :: c_tmp
836 INTEGER :: handle, status
840 cpassert(
ASSOCIATED(elem))
841 cpassert(
ASSOCIATED(elem%dipole))
842 cpassert(
ASSOCIATED(tmc_ana))
843 cpassert(tmc_ana%id_dip > 0)
846 CALL timeset(routinen, handle)
847 tmc_ana%lc_dip = tmc_ana%lc_dip + 1
848 READ (tmc_ana%id_dip, fmt=
"(A)", iostat=status) c_tmp
849 IF (status == 0)
THEN
851 IF (index(c_tmp,
"#") > 0)
THEN
852 tmc_ana%lc_dip = tmc_ana%lc_dip + 1
853 READ (tmc_ana%id_dip, fmt=
"(A)", iostat=status) c_tmp
856 IF (status == 0)
THEN
857 READ (c_tmp, fmt=
"(I8,10F20.10)", iostat=status) &
858 conf_nr, elem%dipole(:)
860 IF (status == 0)
THEN
862 ELSE IF (status < 0)
THEN
865 IF (status /= 0)
THEN
866 cpwarn(
"configuration dipole read error at line: "//
cp_to_string(tmc_ana%lc_dip))
872 CALL timestop(handle)
873 END SUBROUTINE read_dipole_from_file
884 SUBROUTINE read_cell_from_file(elem, tmc_ana, stat, conf_nr)
887 INTEGER :: stat, conf_nr
889 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_cell_from_file'
891 CHARACTER(LEN=250) :: c_tmp
892 INTEGER :: handle, status
893 REAL(kind=
dp) :: r_tmp
894 REAL(kind=
dp),
DIMENSION(3, 3) :: hmat
898 cpassert(
ASSOCIATED(elem))
899 cpassert(
ASSOCIATED(tmc_ana))
900 cpassert(
ASSOCIATED(tmc_ana%cell))
901 cpassert(tmc_ana%id_cell > 0)
904 CALL timeset(routinen, handle)
906 tmc_ana%lc_cell = tmc_ana%lc_cell + 1
907 READ (tmc_ana%id_cell, fmt=
"(A)", iostat=status) c_tmp
908 IF (status == 0)
THEN
910 IF (index(c_tmp,
"#") > 0)
THEN
911 tmc_ana%lc_cell = tmc_ana%lc_cell + 1
912 READ (tmc_ana%id_cell, fmt=
"(A)", iostat=status) c_tmp
915 IF (status == 0)
THEN
916 READ (c_tmp, fmt=
"(I8,9(1X,F19.10),1X,F24.10)", iostat=status) conf_nr, &
921 ELSE IF (status > 0)
THEN
922 IF (status /= 0)
THEN
923 cpabort(
"configuration cell read error at line: "//
cp_to_string(tmc_ana%lc_cell))
927 IF (elem%nr < 0) elem%nr = conf_nr
928 hmat(:, :) = hmat(:, :)/au2a
931 box_scale=elem%box_scale)
935 CALL timestop(handle)
936 END SUBROUTINE read_cell_from_file
953 INTEGER,
OPTIONAL :: dir_ind
955 CHARACTER(LEN=*),
PARAMETER :: routinen =
'analyse_files_open'
957 CHARACTER(LEN=default_path_length) :: dir_name, file_name_act, file_name_temp
961 cpassert(
ASSOCIATED(tmc_ana))
966 CALL timeset(routinen, handle)
968 IF (
PRESENT(dir_ind))
THEN
969 cpassert(
ASSOCIATED(tmc_ana%dirs))
970 cpassert(dir_ind > 0)
971 cpassert(dir_ind <=
SIZE(tmc_ana%dirs))
973 IF (index(tmc_ana%dirs(dir_ind),
"/", back=.true.) == &
974 len_trim(tmc_ana%dirs(dir_ind)))
THEN
975 dir_name = trim(tmc_ana%dirs(dir_ind))
977 dir_name = trim(tmc_ana%dirs(dir_ind))//
"/"
986 rvalue=tmc_ana%temperature)
988 IF (tmc_ana%costum_pos_file_name /=
"")
THEN
989 file_name_act = trim(dir_name)//tmc_ana%costum_pos_file_name
991 file_name_act = trim(dir_name)// &
992 expand_file_name_ending(file_name_temp,
"xyz")
996 CALL open_file(file_name=file_name_act, file_status=
"OLD", &
997 file_action=
"READ", unit_number=tmc_ana%id_traj)
998 WRITE (tmc_ana%io_unit, fmt=
'(T2,A,"| ",A,T41,A40)')
"TMC_ANA", &
999 "read xyz file", trim(file_name_act)
1003 IF (tmc_ana%costum_cell_file_name /=
"")
THEN
1004 file_name_act = trim(dir_name)//tmc_ana%costum_cell_file_name
1006 file_name_act = trim(dir_name)// &
1007 expand_file_name_ending(file_name_temp,
"cell")
1011 CALL open_file(file_name=file_name_act, file_status=
"OLD", &
1012 file_action=
"READ", unit_number=tmc_ana%id_cell)
1013 WRITE (tmc_ana%io_unit, fmt=
'(T2,A,"| ",A,T41,A40)')
"TMC_ANA", &
1014 "read cell file", trim(file_name_act)
1018 IF (tmc_ana%costum_dip_file_name /=
"")
THEN
1019 file_name_act = trim(dir_name)//tmc_ana%costum_dip_file_name
1021 file_name_act = trim(dir_name)// &
1022 expand_file_name_ending(file_name_temp,
"dip")
1026 CALL open_file(file_name=file_name_act, file_status=
"OLD", &
1027 file_action=
"READ", unit_number=tmc_ana%id_dip)
1028 WRITE (tmc_ana%io_unit, fmt=
'(T2,A,"| ",A,T41,A40)')
"TMC_ANA", &
1029 "read dip file", trim(file_name_act)
1032 IF (tmc_ana%id_traj > 0 .OR. tmc_ana%id_cell > 0 .OR. &
1033 tmc_ana%id_dip > 0)
THEN
1036 CALL cp_warn(__location__, &
1037 "There is no file to open for temperature "//
cp_to_string(tmc_ana%temperature)// &
1038 "K in directory "//trim(dir_name))
1041 CALL timestop(handle)
1053 CHARACTER(LEN=*),
PARAMETER :: routinen =
'analyse_files_close'
1057 cpassert(
ASSOCIATED(tmc_ana))
1060 CALL timeset(routinen, handle)
1063 IF (tmc_ana%id_traj > 0)
CALL close_file(unit_number=tmc_ana%id_traj)
1066 IF (tmc_ana%id_cell > 0)
CALL close_file(unit_number=tmc_ana%id_cell)
1069 IF (tmc_ana%id_dip > 0)
CALL close_file(unit_number=tmc_ana%id_dip)
1072 CALL timestop(handle)
Utility routines to open and close files. Tracking of preconnections.
subroutine, public open_file(file_name, file_status, file_form, file_action, file_position, file_pad, unit_number, debug, skip_get_unit_number, file_access)
Opens the requested file using a free unit number.
subroutine, public close_file(unit_number, file_status, keep_preconnection)
Close an open file given by its logical unit number. Optionally, keep the file and unit preconnected.
logical function, public file_exists(file_name)
Checks if file exists, considering also the file discovery mechanism.
various routines to log and control the output. The idea is that decisions about where to log should ...
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
integer, parameter, public default_path_length
Definition of physical constants:
real(kind=dp), parameter, public angstrom
Timing routines for accounting.
module provides variables for the TMC analysis tool
calculation section for TreeMonteCarlo
subroutine, public get_scaled_cell(cell, box_scale, scaled_hmat, scaled_cell, vol, abc, vec)
handles properties and calculations of a scaled cell
subroutine, public get_cell_scaling(cell, scaled_hmat, box_scale)
handles properties and calculations of a scaled cell
writing and printing the files, trajectory (pos, cell, dipoles) as well as restart files
subroutine, public analyse_files_close(tmc_ana)
close the files for reading configurations data to analyze
subroutine, public write_result_list_element(result_list, result_count, conf_updated, accepted, tmc_params)
select the correct configuration to print out the (coordinates, forces, cell ...)
subroutine, public print_restart_file(tmc_env, job_counts, timings)
prints out the TMC restart files with all last configurations and counters etc.
subroutine, public write_dipoles_in_file(file_name, conf_nr, dip, file_ext)
writes the cell dipoles in dipole trajectory file
subroutine, public read_element_from_file(elem, tmc_ana, conf_nr, stat)
read the trajectory element from a file from sub tree element
subroutine, public write_element_in_file(elem, tmc_params, temp_index, file_name, conf_nr, conf_info)
writes the trajectory element in a file from sub tree element
subroutine, public analyse_files_open(tmc_ana, stat, dir_ind)
opens the files for reading configurations data to analyze
character(len=default_path_length) function, public expand_file_name_char(file_name, extra)
placing a character string at the end of a file name (before the file extension)
character(len=default_path_length) function, public expand_file_name_temp(file_name, rvalue)
placing the temperature at the end of a file name (before the file extension)
character(len=default_path_length) function, public expand_file_name_int(file_name, ivalue)
placing an integer at the end of a file name (before the file extension)
subroutine, public read_restart_file(tmc_env, job_counts, timings, file_name)
reads the TMC restart file with all last configurations and counters etc.
tree nodes creation, searching, deallocation, references etc.
integer, parameter, public nr_mv_types
tree nodes creation, searching, deallocation, references etc.
integer, parameter, public tmc_status_failed
character(len= *), parameter, public tmc_default_trajectory_file_name
integer, parameter, public tmc_status_wait_for_new_task
character(len= *), parameter, public tmc_default_restart_in_file_name
character(len= *), parameter, public tmc_default_restart_out_file_name
integer, parameter, public tmc_status_ok
module handles definition of the tree nodes for the global and
module handles definition of the tree nodes for the global and