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 .NE.
"")
82 ind = index(file_name,
".", back=.true.)
83 IF (.NOT. ind .EQ. 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 .NE.
"")
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 .NE.
"")
109 ind = index(file_name,
".", back=.true.)
110 IF (.NOT. ind .EQ. 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 .NE.
"")
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 .NE.
"")
140 WRITE (rval_to_string,
"(F16.2)") rvalue
141 ind = index(file_name,
".", back=.true.)
142 IF (.NOT. ind .EQ. 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) .EQ. 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 .NE.
"")
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 .NE.
"")
177 WRITE (rval_to_string, *) ivalue
178 ind = index(file_name,
".", back=.true.)
179 IF (.NOT. ind .EQ. 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) .EQ. 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 .NE.
"")
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 .NE.
SIZE(tmc_env%params%Temp)) &
305 CALL cp_abort(__location__, &
306 "the actual specified temperatures does not "// &
307 "fit in amount with the one from restart file ")
308 ALLOCATE (tmp_temp(temp_size))
309 READ (file_ptr) tmp_temp(:), &
310 tmc_env%m_env%gt_act%nr, &
311 tmc_env%m_env%gt_act%rng_seed, &
312 tmc_env%m_env%gt_act%rnd_nr, &
313 tmc_env%m_env%gt_act%prob_acc, &
314 tmc_env%m_env%gt_act%mv_conf, &
315 tmc_env%m_env%gt_act%mv_next_conf, &
316 tmc_env%m_env%result_count(0:), &
318 tmc_env%params%move_types%acc_count, &
319 tmc_env%params%move_types%mv_count, &
320 tmc_env%params%move_types%subbox_acc_count, &
321 tmc_env%params%move_types%subbox_count, &
322 tmc_env%params%cell%hmat, &
326 IF (any(abs(tmc_env%params%Temp(:) - tmp_temp(:)) .GE. 0.005)) &
327 CALL cp_abort(__location__,
"the temperatures differ from the previous calculation. "// &
328 "There were the following temperatures used:")
329 IF (any(mv_weight_tmp(:) .NE. tmc_env%params%move_types%mv_weight(:)))
THEN
330 cpwarn(
"The amount of mv types differs between the original and the restart run.")
333 DO i = 1,
SIZE(tmc_env%params%Temp)
334 tmc_env%m_env%gt_act%conf(i)%elem => tmc_env%m_env%result_list(i)%elem
335 READ (file_ptr) tmc_env%m_env%result_list(i)%elem%nr, &
336 tmc_env%m_env%result_list(i)%elem%rng_seed, &
337 tmc_env%m_env%result_list(i)%elem%pos, &
338 tmc_env%m_env%result_list(i)%elem%vel, &
339 tmc_env%m_env%result_list(i)%elem%box_scale, &
340 tmc_env%m_env%result_list(i)%elem%potential, &
341 tmc_env%m_env%result_list(i)%elem%e_pot_approx, &
342 tmc_env%m_env%result_list(i)%elem%ekin, &
343 tmc_env%m_env%result_list(i)%elem%ekin_before_md, &
344 tmc_env%m_env%result_list(i)%elem%temp_created
365 accepted, tmc_params)
367 INTEGER,
DIMENSION(:),
POINTER :: result_count
368 INTEGER :: conf_updated
369 LOGICAL,
INTENT(IN) :: accepted
372 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_result_list_element'
374 CHARACTER(LEN=default_path_length) :: file_name
379 cpassert(
ASSOCIATED(result_list))
380 cpassert(
ASSOCIATED(result_count))
381 cpassert(
ASSOCIATED(tmc_params))
382 cpassert(
ASSOCIATED(tmc_params%Temp))
383 cpassert(conf_updated .GE. 0)
384 cpassert(conf_updated .LE.
SIZE(tmc_params%Temp))
387 CALL timeset(routinen, handle)
389 IF (conf_updated .EQ. 0)
THEN
391 DO i = 1,
SIZE(tmc_params%Temp)
394 tmc_params=tmc_params, conf_nr=result_count(0), &
398 IF ((.NOT. tmc_params%print_only_diff_conf) .OR. &
399 (tmc_params%print_only_diff_conf .AND. accepted))
THEN
401 tmc_params=tmc_params, conf_nr=result_count(conf_updated), &
403 rvalue=tmc_params%Temp(conf_updated)))
407 CALL timestop(handle)
424 INTEGER,
OPTIONAL :: temp_index
425 CHARACTER(LEN=*),
OPTIONAL :: file_name
426 INTEGER,
OPTIONAL :: conf_nr
427 CHARACTER(LEN=*),
OPTIONAL :: conf_info
429 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_element_in_file'
431 CHARACTER(LEN=default_path_length) :: file_name_act, tmp_name
432 CHARACTER(LEN=default_string_length) ::
header
433 INTEGER :: file_ptr, handle, i, nr_atoms
436 REAL(kind=
dp),
DIMENSION(3, 3) :: hmat_scaled
443 cpassert(
ASSOCIATED(elem))
444 cpassert(
ASSOCIATED(tmc_params))
445 cpassert(
ASSOCIATED(tmc_params%atoms))
446 cpassert(
PRESENT(conf_nr) .OR.
PRESENT(conf_info))
450 CALL timeset(routinen, handle)
453 IF (
PRESENT(file_name))
THEN
454 cpassert(file_name .NE.
"")
455 file_name_act = file_name
457 cpassert(
ASSOCIATED(tmc_params%Temp))
458 cpassert(
PRESENT(temp_index))
460 rvalue=tmc_params%Temp(temp_index))
463 nr_atoms =
SIZE(elem%pos)/tmc_params%dim_per_elem
466 IF (tmc_params%print_trajectory .OR. tmc_params%print_forces)
THEN
467 IF (
PRESENT(conf_info))
THEN
468 WRITE (
header, *) trim(adjustl(conf_info))
471 WRITE (
header, fmt=
"(A,I8,A,F20.10,F20.10,A,I8,I8)")
"i =", conf_nr,
" ,E =", &
472 elem%potential, elem%ekin,
" st elem", elem%sub_tree_nr, elem%nr
477 IF (tmc_params%print_trajectory)
THEN
478 tmp_name = expand_file_name_ending(file_name_act,
"xyz")
479 CALL open_file(file_name=tmp_name, file_status=
"UNKNOWN", &
480 file_action=
"WRITE", file_position=
"APPEND", &
481 unit_number=file_ptr)
482 WRITE (file_ptr, fmt=
"(I8)") nr_atoms
483 WRITE (file_ptr, *) trim(
header)
484 DO i = 1,
SIZE(elem%pos), tmc_params%dim_per_elem
485 WRITE (file_ptr, fmt=
"(A4,1X,1000F20.10)") &
486 trim(tmc_params%atoms((i - 1)/tmc_params%dim_per_elem + 1)%name), &
487 elem%pos(i:i + tmc_params%dim_per_elem - 1)*au2a
493 IF (tmc_params%print_forces)
THEN
494 tmp_name = expand_file_name_ending(file_name_act,
"frc")
495 CALL open_file(file_name=tmp_name, file_status=
"UNKNOWN", &
496 file_action=
"WRITE", file_position=
"APPEND", &
497 unit_number=file_ptr)
498 WRITE (file_ptr, fmt=
"(I8)") nr_atoms
499 WRITE (file_ptr, *) trim(
header)
500 DO i = 1,
SIZE(elem%pos), tmc_params%dim_per_elem
501 WRITE (file_ptr, fmt=
"(A4,1X,1000F20.10)") &
502 trim(tmc_params%atoms((i - 1)/tmc_params%dim_per_elem + 1)%name), &
503 elem%frc(i:i + tmc_params%dim_per_elem - 1)
509 IF (tmc_params%print_dipole)
THEN
511 conf_nr=conf_nr, dip=elem%dipole)
515 IF (tmc_params%print_cell)
THEN
516 tmp_name = expand_file_name_ending(file_name_act,
"cell")
520 CALL open_file(file_name=tmp_name, file_status=
"NEW", &
521 file_action=
"WRITE", unit_number=file_ptr)
522 WRITE (file_ptr, fmt=
'(A,9(7X,A2," [Angstrom]"),6X,A)') &
523 "# MC step ",
"Ax",
"Ay",
"Az",
"Bx",
"By",
"Bz",
"Cx",
"Cy",
"Cz", &
524 "Volume [Angstrom^3]"
526 CALL open_file(file_name=tmp_name, file_status=
"OLD", &
527 file_action=
"WRITE", file_position=
"APPEND", &
528 unit_number=file_ptr)
531 box_scale=elem%box_scale, scaled_hmat=hmat_scaled, &
533 WRITE (file_ptr, fmt=
"(I8,9(1X,F19.10),1X,F24.10)") conf_nr, &
534 hmat_scaled(:, :)*au2a, vol*au2a**3
540 IF (tmc_params%print_energies)
THEN
541 tmp_name = expand_file_name_ending(file_name_act,
"ener")
545 CALL open_file(file_name=tmp_name, file_status=
"NEW", &
546 file_action=
"WRITE", unit_number=file_ptr)
547 WRITE (file_ptr, fmt=
'(A,4A20)') &
548 "# MC step ",
" exact ",
" approx ",
" last SCF ",
" kinetic "
550 CALL open_file(file_name=tmp_name, file_status=
"OLD", &
551 file_action=
"WRITE", file_position=
"APPEND", &
552 unit_number=file_ptr)
554 WRITE (file_ptr, fmt=
"(I8,14F20.10)") conf_nr, elem%potential, elem%e_pot_approx, &
555 elem%scf_energies(mod(elem%scf_energies_count, 4) + 1), elem%ekin
560 CALL timestop(handle)
574 CHARACTER(LEN=default_path_length) :: file_name
576 REAL(kind=
dp),
DIMENSION(:),
POINTER :: dip
577 CHARACTER(LEN=*),
INTENT(in),
OPTIONAL :: file_ext
579 CHARACTER(LEN=default_path_length) :: file_name_tmp
583 cpassert(
ASSOCIATED(dip))
585 IF (
PRESENT(file_ext))
THEN
586 cpassert(file_ext .NE.
"")
587 file_name_tmp = expand_file_name_ending(file_name, trim(file_ext))
589 file_name_tmp = expand_file_name_ending(file_name,
"dip")
593 CALL open_file(file_name=file_name_tmp, file_status=
"NEW", &
594 file_action=
"WRITE", unit_number=file_ptr)
595 WRITE (file_ptr, fmt=
'(A8,10A20)')
"# conf_nr",
"dip_x [C Angstrom]", &
596 "dip_y [C Angstrom]",
"dip_z [C Angstrom]"
598 CALL open_file(file_name=file_name_tmp, file_status=
"OLD", &
599 file_action=
"WRITE", file_position=
"APPEND", &
600 unit_number=file_ptr)
602 WRITE (file_ptr, fmt=
"(I8,10F20.10)") conf_nr, dip(:)
622 INTEGER :: conf_nr, stat
624 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_element_from_file'
626 INTEGER :: conf_nr_old, handle, i_tmp
627 LOGICAL :: files_conf_missmatch
630 conf_nr_old = conf_nr
631 files_conf_missmatch = .false.
633 cpassert(
ASSOCIATED(elem))
634 cpassert(
ASSOCIATED(tmc_ana))
635 cpassert(
ASSOCIATED(tmc_ana%atoms))
638 CALL timeset(routinen, handle)
641 IF (tmc_ana%id_traj .GT. 0)
THEN
643 CALL read_pos_from_file(elem=elem, tmc_ana=tmc_ana, stat=stat, &
646 CALL cp_warn(__location__, &
647 'end of position file reached at line '// &
648 cp_to_string(real(tmc_ana%lc_traj, kind=
dp))//
", last element "// &
651 cpassert(i_tmp .GT. conf_nr_old)
661 IF (tmc_ana%id_dip .GT. 0 .AND. stat .EQ.
tmc_status_ok)
THEN
664 CALL read_dipole_from_file(elem=elem, tmc_ana=tmc_ana, stat=stat, &
667 CALL cp_warn(__location__, &
668 'end of dipole file reached at line'// &
673 IF (tmc_ana%id_traj .GT. 0)
THEN
674 IF (i_tmp .EQ. conf_nr)
THEN
675 files_conf_missmatch = .false.
680 files_conf_missmatch = .true.
683 ELSE IF (i_tmp .GT. conf_nr_old)
THEN
688 END DO search_conf_dip
692 IF (tmc_ana%id_cell .GT. 0 .AND. stat .EQ.
tmc_status_ok)
THEN
694 CALL read_cell_from_file(elem=elem, tmc_ana=tmc_ana, stat=stat, &
697 CALL cp_warn(__location__, &
698 'end of cell file reached at line at line'// &
700 EXIT search_conf_cell
703 IF (tmc_ana%id_traj .GT. 0)
THEN
704 IF (i_tmp .EQ. conf_nr)
THEN
705 files_conf_missmatch = .false.
706 EXIT search_conf_cell
710 files_conf_missmatch = .true.
713 ELSE IF (i_tmp .GT. conf_nr_old)
THEN
716 EXIT search_conf_cell
718 END DO search_conf_cell
725 IF (files_conf_missmatch) &
726 CALL cp_warn(__location__, &
727 'there is a missmatch in the configuration numbering. '// &
728 "Read number of lines (pos|cell|dip)"// &
734 CALL timestop(handle)
747 SUBROUTINE read_pos_from_file(elem, tmc_ana, stat, conf_nr, header_info)
750 INTEGER :: stat, conf_nr
751 CHARACTER(LEN=*),
OPTIONAL :: header_info
753 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_pos_from_file'
755 CHARACTER(LEN=default_string_length) :: c_tmp
756 INTEGER :: handle, i, i_tmp, status
760 cpassert(
ASSOCIATED(elem))
761 cpassert(
ASSOCIATED(elem%pos))
762 cpassert(
ASSOCIATED(tmc_ana))
763 cpassert(tmc_ana%id_traj .GT. 0)
766 CALL timeset(routinen, handle)
770 tmc_ana%lc_traj = tmc_ana%lc_traj + 1
771 READ (tmc_ana%id_traj,
'(A)', iostat=status) c_tmp(:)
773 CALL cp_abort(__location__, &
774 "configuration header read error at line: "// &
776 IF (status .LT. 0)
THEN
778 EXIT search_next_conf
780 IF (index(c_tmp,
"=") .GT. 0)
THEN
781 READ (c_tmp(index(c_tmp,
"=") + 1:), *, iostat=status) i_tmp
783 CALL cp_abort(__location__, &
784 "configuration header read error (for conf nr) at line: "// &
786 IF (i_tmp .GT. conf_nr)
THEN
789 IF (
PRESENT(header_info)) header_info = c_tmp
791 EXIT search_next_conf
794 END DO search_next_conf
797 pos_loop:
DO i = 1,
SIZE(elem%pos), tmc_ana%dim_per_elem
798 tmc_ana%lc_traj = tmc_ana%lc_traj + 1
799 READ (tmc_ana%id_traj, fmt=
"(A4,1X,1000F20.10)", iostat=status) &
800 c_tmp, elem%pos(i:i + tmc_ana%dim_per_elem - 1)
801 IF (status .NE. 0)
THEN
802 CALL cp_abort(__location__, &
803 "configuration pos read error at line: "// &
807 elem%pos(:) = elem%pos(:)/au2a
811 CALL timestop(handle)
812 END SUBROUTINE read_pos_from_file
823 SUBROUTINE read_dipole_from_file(elem, tmc_ana, stat, conf_nr)
826 INTEGER :: stat, conf_nr
828 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_dipole_from_file'
830 CHARACTER(LEN=250) :: c_tmp
831 INTEGER :: handle, status
835 cpassert(
ASSOCIATED(elem))
836 cpassert(
ASSOCIATED(elem%dipole))
837 cpassert(
ASSOCIATED(tmc_ana))
838 cpassert(tmc_ana%id_dip .GT. 0)
841 CALL timeset(routinen, handle)
842 tmc_ana%lc_dip = tmc_ana%lc_dip + 1
843 READ (tmc_ana%id_dip, fmt=
"(A)", iostat=status) c_tmp
844 IF (status .EQ. 0)
THEN
846 IF (index(c_tmp,
"#") .GT. 0)
THEN
847 tmc_ana%lc_dip = tmc_ana%lc_dip + 1
848 READ (tmc_ana%id_dip, fmt=
"(A)", iostat=status) c_tmp
851 IF (status .EQ. 0)
THEN
852 READ (c_tmp, fmt=
"(I8,10F20.10)", iostat=status) &
853 conf_nr, elem%dipole(:)
855 IF (status .EQ. 0)
THEN
857 ELSE IF (status .LT. 0)
THEN
860 IF (status .NE. 0)
THEN
861 cpwarn(
"configuration dipole read error at line: "//
cp_to_string(tmc_ana%lc_dip))
867 CALL timestop(handle)
868 END SUBROUTINE read_dipole_from_file
879 SUBROUTINE read_cell_from_file(elem, tmc_ana, stat, conf_nr)
882 INTEGER :: stat, conf_nr
884 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_cell_from_file'
886 CHARACTER(LEN=250) :: c_tmp
887 INTEGER :: handle, status
888 REAL(kind=
dp) :: r_tmp
889 REAL(kind=
dp),
DIMENSION(3, 3) :: hmat
893 cpassert(
ASSOCIATED(elem))
894 cpassert(
ASSOCIATED(tmc_ana))
895 cpassert(
ASSOCIATED(tmc_ana%cell))
896 cpassert(tmc_ana%id_cell .GT. 0)
899 CALL timeset(routinen, handle)
901 tmc_ana%lc_cell = tmc_ana%lc_cell + 1
902 READ (tmc_ana%id_cell, fmt=
"(A)", iostat=status) c_tmp
903 IF (status .EQ. 0)
THEN
905 IF (index(c_tmp,
"#") .GT. 0)
THEN
906 tmc_ana%lc_cell = tmc_ana%lc_cell + 1
907 READ (tmc_ana%id_cell, fmt=
"(A)", iostat=status) c_tmp
910 IF (status .EQ. 0)
THEN
911 READ (c_tmp, fmt=
"(I8,9(1X,F19.10),1X,F24.10)", iostat=status) conf_nr, &
914 IF (status .LT. 0)
THEN
916 ELSE IF (status .GT. 0)
THEN
918 cpabort(
"configuration cell read error at line: "//
cp_to_string(tmc_ana%lc_cell))
921 IF (elem%nr .LT. 0) elem%nr = conf_nr
922 hmat(:, :) = hmat(:, :)/au2a
925 box_scale=elem%box_scale)
929 CALL timestop(handle)
930 END SUBROUTINE read_cell_from_file
947 INTEGER,
OPTIONAL :: dir_ind
949 CHARACTER(LEN=*),
PARAMETER :: routinen =
'analyse_files_open'
951 CHARACTER(LEN=default_path_length) :: dir_name, file_name_act, file_name_temp
955 cpassert(
ASSOCIATED(tmc_ana))
960 CALL timeset(routinen, handle)
962 IF (
PRESENT(dir_ind))
THEN
963 cpassert(
ASSOCIATED(tmc_ana%dirs))
964 cpassert(dir_ind .GT. 0)
965 cpassert(dir_ind .LE.
SIZE(tmc_ana%dirs))
967 IF (index(tmc_ana%dirs(dir_ind),
"/", back=.true.) .EQ. &
968 len_trim(tmc_ana%dirs(dir_ind)))
THEN
969 dir_name = trim(tmc_ana%dirs(dir_ind))
971 dir_name = trim(tmc_ana%dirs(dir_ind))//
"/"
980 rvalue=tmc_ana%temperature)
982 IF (tmc_ana%costum_pos_file_name .NE.
"")
THEN
983 file_name_act = trim(dir_name)//tmc_ana%costum_pos_file_name
985 file_name_act = trim(dir_name)// &
986 expand_file_name_ending(file_name_temp,
"xyz")
990 CALL open_file(file_name=file_name_act, file_status=
"OLD", &
991 file_action=
"READ", unit_number=tmc_ana%id_traj)
992 WRITE (tmc_ana%io_unit, fmt=
'(T2,A,"| ",A,T41,A40)')
"TMC_ANA", &
993 "read xyz file", trim(file_name_act)
997 IF (tmc_ana%costum_cell_file_name .NE.
"")
THEN
998 file_name_act = trim(dir_name)//tmc_ana%costum_cell_file_name
1000 file_name_act = trim(dir_name)// &
1001 expand_file_name_ending(file_name_temp,
"cell")
1005 CALL open_file(file_name=file_name_act, file_status=
"OLD", &
1006 file_action=
"READ", unit_number=tmc_ana%id_cell)
1007 WRITE (tmc_ana%io_unit, fmt=
'(T2,A,"| ",A,T41,A40)')
"TMC_ANA", &
1008 "read cell file", trim(file_name_act)
1012 IF (tmc_ana%costum_dip_file_name .NE.
"")
THEN
1013 file_name_act = trim(dir_name)//tmc_ana%costum_dip_file_name
1015 file_name_act = trim(dir_name)// &
1016 expand_file_name_ending(file_name_temp,
"dip")
1020 CALL open_file(file_name=file_name_act, file_status=
"OLD", &
1021 file_action=
"READ", unit_number=tmc_ana%id_dip)
1022 WRITE (tmc_ana%io_unit, fmt=
'(T2,A,"| ",A,T41,A40)')
"TMC_ANA", &
1023 "read dip file", trim(file_name_act)
1026 IF (tmc_ana%id_traj .GT. 0 .OR. tmc_ana%id_cell .GT. 0 .OR. &
1027 tmc_ana%id_dip .GT. 0)
THEN
1030 CALL cp_warn(__location__, &
1031 "There is no file to open for temperature "//
cp_to_string(tmc_ana%temperature)// &
1032 "K in directory "//trim(dir_name))
1035 CALL timestop(handle)
1047 CHARACTER(LEN=*),
PARAMETER :: routinen =
'analyse_files_close'
1051 cpassert(
ASSOCIATED(tmc_ana))
1054 CALL timeset(routinen, handle)
1057 IF (tmc_ana%id_traj .GT. 0)
CALL close_file(unit_number=tmc_ana%id_traj)
1060 IF (tmc_ana%id_cell .GT. 0)
CALL close_file(unit_number=tmc_ana%id_cell)
1063 IF (tmc_ana%id_dip .GT. 0)
CALL close_file(unit_number=tmc_ana%id_dip)
1066 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 the subtrees binary tree parent elemen...
module handles definition of the tree nodes for the global and the subtrees binary tree parent elemen...