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.
"")
208 TYPE(tmc_env_type),
POINTER :: tmc_env
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)
277 TYPE(tmc_env_type),
POINTER :: tmc_env
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(:))) &
330 cpwarn(
"The amount of mv types differs between the original and the restart run.")
332 DO i = 1,
SIZE(tmc_env%params%Temp)
333 tmc_env%m_env%gt_act%conf(i)%elem => tmc_env%m_env%result_list(i)%elem
334 READ (file_ptr) tmc_env%m_env%result_list(i)%elem%nr, &
335 tmc_env%m_env%result_list(i)%elem%rng_seed, &
336 tmc_env%m_env%result_list(i)%elem%pos, &
337 tmc_env%m_env%result_list(i)%elem%vel, &
338 tmc_env%m_env%result_list(i)%elem%box_scale, &
339 tmc_env%m_env%result_list(i)%elem%potential, &
340 tmc_env%m_env%result_list(i)%elem%e_pot_approx, &
341 tmc_env%m_env%result_list(i)%elem%ekin, &
342 tmc_env%m_env%result_list(i)%elem%ekin_before_md, &
343 tmc_env%m_env%result_list(i)%elem%temp_created
364 accepted, tmc_params)
365 TYPE(elem_array_type),
DIMENSION(:),
POINTER :: result_list
366 INTEGER,
DIMENSION(:),
POINTER :: result_count
367 INTEGER :: conf_updated
368 LOGICAL,
INTENT(IN) :: accepted
369 TYPE(tmc_param_type),
POINTER :: tmc_params
371 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_result_list_element'
373 CHARACTER(LEN=default_path_length) :: file_name
378 cpassert(
ASSOCIATED(result_list))
379 cpassert(
ASSOCIATED(result_count))
380 cpassert(
ASSOCIATED(tmc_params))
381 cpassert(
ASSOCIATED(tmc_params%Temp))
382 cpassert(conf_updated .GE. 0)
383 cpassert(conf_updated .LE.
SIZE(tmc_params%Temp))
386 CALL timeset(routinen, handle)
388 IF (conf_updated .EQ. 0)
THEN
390 DO i = 1,
SIZE(tmc_params%Temp)
393 tmc_params=tmc_params, conf_nr=result_count(0), &
397 IF ((.NOT. tmc_params%print_only_diff_conf) .OR. &
398 (tmc_params%print_only_diff_conf .AND. accepted))
THEN
400 tmc_params=tmc_params, conf_nr=result_count(conf_updated), &
402 rvalue=tmc_params%Temp(conf_updated)))
406 CALL timestop(handle)
421 TYPE(tree_type),
POINTER :: elem
422 TYPE(tmc_param_type),
POINTER :: tmc_params
423 INTEGER,
OPTIONAL :: temp_index
424 CHARACTER(LEN=*),
OPTIONAL :: file_name
425 INTEGER,
OPTIONAL :: conf_nr
426 CHARACTER(LEN=*),
OPTIONAL :: conf_info
428 CHARACTER(LEN=*),
PARAMETER :: routinen =
'write_element_in_file'
430 CHARACTER(LEN=default_path_length) :: file_name_act, tmp_name
431 CHARACTER(LEN=default_string_length) ::
header
432 INTEGER :: file_ptr, handle, i, nr_atoms
433 LOGICAL :: file_exists, print_it
435 REAL(kind=
dp),
DIMENSION(3, 3) :: hmat_scaled
442 cpassert(
ASSOCIATED(elem))
443 cpassert(
ASSOCIATED(tmc_params))
444 cpassert(
ASSOCIATED(tmc_params%atoms))
445 cpassert(
PRESENT(conf_nr) .OR.
PRESENT(conf_info))
449 CALL timeset(routinen, handle)
452 IF (
PRESENT(file_name))
THEN
453 cpassert(file_name .NE.
"")
454 file_name_act = file_name
456 cpassert(
ASSOCIATED(tmc_params%Temp))
457 cpassert(
PRESENT(temp_index))
459 rvalue=tmc_params%Temp(temp_index))
462 nr_atoms =
SIZE(elem%pos)/tmc_params%dim_per_elem
465 IF (tmc_params%print_trajectory .OR. tmc_params%print_forces)
THEN
466 IF (
PRESENT(conf_info))
THEN
467 WRITE (
header, *) trim(adjustl(conf_info))
470 WRITE (
header, fmt=
"(A,I8,A,F20.10,F20.10,A,I8,I8)")
"i =", conf_nr,
" ,E =", &
471 elem%potential, elem%ekin,
" st elem", elem%sub_tree_nr, elem%nr
476 IF (tmc_params%print_trajectory)
THEN
477 tmp_name = expand_file_name_ending(file_name_act,
"xyz")
478 CALL open_file(file_name=tmp_name, file_status=
"UNKNOWN", &
479 file_action=
"WRITE", file_position=
"APPEND", &
480 unit_number=file_ptr)
481 WRITE (file_ptr, fmt=
"(I8)") nr_atoms
482 WRITE (file_ptr, *) trim(
header)
483 DO i = 1,
SIZE(elem%pos), tmc_params%dim_per_elem
484 WRITE (file_ptr, fmt=
"(A4,1X,1000F20.10)") &
485 trim(tmc_params%atoms((i - 1)/tmc_params%dim_per_elem + 1)%name), &
486 elem%pos(i:i + tmc_params%dim_per_elem - 1)*au2a
492 IF (tmc_params%print_forces)
THEN
493 tmp_name = expand_file_name_ending(file_name_act,
"frc")
494 CALL open_file(file_name=tmp_name, file_status=
"UNKNOWN", &
495 file_action=
"WRITE", file_position=
"APPEND", &
496 unit_number=file_ptr)
497 WRITE (file_ptr, fmt=
"(I8)") nr_atoms
498 WRITE (file_ptr, *) trim(
header)
499 DO i = 1,
SIZE(elem%pos), tmc_params%dim_per_elem
500 WRITE (file_ptr, fmt=
"(A4,1X,1000F20.10)") &
501 trim(tmc_params%atoms((i - 1)/tmc_params%dim_per_elem + 1)%name), &
502 elem%frc(i:i + tmc_params%dim_per_elem - 1)
508 IF (tmc_params%print_dipole)
THEN
510 conf_nr=conf_nr, dip=elem%dipole)
514 IF (tmc_params%print_cell)
THEN
515 tmp_name = expand_file_name_ending(file_name_act,
"cell")
517 INQUIRE (file=tmp_name, exist=file_exists)
518 IF (.NOT. file_exists)
THEN
519 CALL open_file(file_name=tmp_name, file_status=
"NEW", &
520 file_action=
"WRITE", unit_number=file_ptr)
521 WRITE (file_ptr, fmt=
'(A,9(7X,A2," [Angstrom]"),6X,A)') &
522 "# MC step ",
"Ax",
"Ay",
"Az",
"Bx",
"By",
"Bz",
"Cx",
"Cy",
"Cz", &
523 "Volume [Angstrom^3]"
525 CALL open_file(file_name=tmp_name, file_status=
"OLD", &
526 file_action=
"WRITE", file_position=
"APPEND", &
527 unit_number=file_ptr)
530 box_scale=elem%box_scale, scaled_hmat=hmat_scaled, &
532 WRITE (file_ptr, fmt=
"(I8,9(1X,F19.10),1X,F24.10)") conf_nr, &
533 hmat_scaled(:, :)*au2a, vol*au2a**3
539 IF (tmc_params%print_energies)
THEN
540 tmp_name = expand_file_name_ending(file_name_act,
"ener")
542 INQUIRE (file=tmp_name, exist=file_exists)
543 IF (.NOT. file_exists)
THEN
544 CALL open_file(file_name=tmp_name, file_status=
"NEW", &
545 file_action=
"WRITE", unit_number=file_ptr)
546 WRITE (file_ptr, fmt=
'(A,4A20)') &
547 "# MC step ",
" exact ",
" approx ",
" last SCF ",
" kinetic "
549 CALL open_file(file_name=tmp_name, file_status=
"OLD", &
550 file_action=
"WRITE", file_position=
"APPEND", &
551 unit_number=file_ptr)
553 WRITE (file_ptr, fmt=
"(I8,14F20.10)") conf_nr, elem%potential, elem%e_pot_approx, &
554 elem%scf_energies(mod(elem%scf_energies_count, 4) + 1), elem%ekin
559 CALL timestop(handle)
573 CHARACTER(LEN=default_path_length) :: file_name
575 REAL(kind=
dp),
DIMENSION(:),
POINTER :: dip
576 CHARACTER(LEN=*),
INTENT(in),
OPTIONAL :: file_ext
578 CHARACTER(LEN=default_path_length) :: file_name_tmp
580 LOGICAL :: file_exists
582 cpassert(
ASSOCIATED(dip))
584 IF (
PRESENT(file_ext))
THEN
585 cpassert(file_ext .NE.
"")
586 file_name_tmp = expand_file_name_ending(file_name, trim(file_ext))
588 file_name_tmp = expand_file_name_ending(file_name,
"dip")
590 INQUIRE (file=file_name_tmp, exist=file_exists)
591 IF (.NOT. file_exists)
THEN
592 CALL open_file(file_name=file_name_tmp, file_status=
"NEW", &
593 file_action=
"WRITE", unit_number=file_ptr)
594 WRITE (file_ptr, fmt=
'(A8,10A20)')
"# conf_nr",
"dip_x [C Angstrom]", &
595 "dip_y [C Angstrom]",
"dip_z [C Angstrom]"
597 CALL open_file(file_name=file_name_tmp, file_status=
"OLD", &
598 file_action=
"WRITE", file_position=
"APPEND", &
599 unit_number=file_ptr)
601 WRITE (file_ptr, fmt=
"(I8,10F20.10)") conf_nr, dip(:)
619 TYPE(tree_type),
POINTER :: elem
620 TYPE(tmc_analysis_env),
POINTER :: tmc_ana
621 INTEGER :: conf_nr, stat
623 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_element_from_file'
625 INTEGER :: conf_nr_old, handle, i_tmp
626 LOGICAL :: files_conf_missmatch
629 conf_nr_old = conf_nr
630 files_conf_missmatch = .false.
632 cpassert(
ASSOCIATED(elem))
633 cpassert(
ASSOCIATED(tmc_ana))
634 cpassert(
ASSOCIATED(tmc_ana%atoms))
637 CALL timeset(routinen, handle)
640 IF (tmc_ana%id_traj .GT. 0)
THEN
642 CALL read_pos_from_file(elem=elem, tmc_ana=tmc_ana, stat=stat, &
645 CALL cp_warn(__location__, &
646 'end of position file reached at line '// &
647 cp_to_string(real(tmc_ana%lc_traj, kind=
dp))//
", last element "// &
648 cp_to_string(tmc_ana%last_elem%nr))
650 cpassert(i_tmp .GT. conf_nr_old)
660 IF (tmc_ana%id_dip .GT. 0 .AND. stat .EQ.
tmc_status_ok)
THEN
663 CALL read_dipole_from_file(elem=elem, tmc_ana=tmc_ana, stat=stat, &
666 CALL cp_warn(__location__, &
667 'end of dipole file reached at line'// &
668 cp_to_string(real(tmc_ana%lc_dip, kind=
dp)))
672 IF (tmc_ana%id_traj .GT. 0)
THEN
673 IF (i_tmp .EQ. conf_nr)
THEN
674 files_conf_missmatch = .false.
679 files_conf_missmatch = .true.
682 ELSE IF (i_tmp .GT. conf_nr_old)
THEN
687 END DO search_conf_dip
691 IF (tmc_ana%id_cell .GT. 0 .AND. stat .EQ.
tmc_status_ok)
THEN
693 CALL read_cell_from_file(elem=elem, tmc_ana=tmc_ana, stat=stat, &
696 CALL cp_warn(__location__, &
697 'end of cell file reached at line at line'// &
698 cp_to_string(real(tmc_ana%lc_cell, kind=
dp)))
699 EXIT search_conf_cell
702 IF (tmc_ana%id_traj .GT. 0)
THEN
703 IF (i_tmp .EQ. conf_nr)
THEN
704 files_conf_missmatch = .false.
705 EXIT search_conf_cell
709 files_conf_missmatch = .true.
712 ELSE IF (i_tmp .GT. conf_nr_old)
THEN
715 EXIT search_conf_cell
717 END DO search_conf_cell
724 IF (files_conf_missmatch) &
725 CALL cp_warn(__location__, &
726 'there is a missmatch in the configuration numbering. '// &
727 "Read number of lines (pos|cell|dip)"// &
728 cp_to_string(tmc_ana%lc_traj)//
"|"// &
729 cp_to_string(tmc_ana%lc_cell)//
"|"// &
730 cp_to_string(tmc_ana%lc_dip))
733 CALL timestop(handle)
746 SUBROUTINE read_pos_from_file(elem, tmc_ana, stat, conf_nr, header_info)
747 TYPE(tree_type),
POINTER :: elem
748 TYPE(tmc_analysis_env),
POINTER :: tmc_ana
749 INTEGER :: stat, conf_nr
750 CHARACTER(LEN=*),
OPTIONAL :: header_info
752 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_pos_from_file'
754 CHARACTER(LEN=default_string_length) :: c_tmp
755 INTEGER :: handle, i, i_tmp, status
759 cpassert(
ASSOCIATED(elem))
760 cpassert(
ASSOCIATED(elem%pos))
761 cpassert(
ASSOCIATED(tmc_ana))
762 cpassert(tmc_ana%id_traj .GT. 0)
765 CALL timeset(routinen, handle)
769 tmc_ana%lc_traj = tmc_ana%lc_traj + 1
770 READ (tmc_ana%id_traj,
'(A)', iostat=status) c_tmp(:)
772 CALL cp_abort(__location__, &
773 "configuration header read error at line: "// &
774 cp_to_string(tmc_ana%lc_traj)//
": "//c_tmp)
775 IF (status .LT. 0)
THEN
777 EXIT search_next_conf
779 IF (index(c_tmp,
"=") .GT. 0)
THEN
780 READ (c_tmp(index(c_tmp,
"=") + 1:), *, iostat=status) i_tmp
782 CALL cp_abort(__location__, &
783 "configuration header read error (for conf nr) at line: "// &
784 cp_to_string(tmc_ana%lc_traj))
785 IF (i_tmp .GT. conf_nr)
THEN
788 IF (
PRESENT(header_info)) header_info = c_tmp
790 EXIT search_next_conf
793 END DO search_next_conf
796 pos_loop:
DO i = 1,
SIZE(elem%pos), tmc_ana%dim_per_elem
797 tmc_ana%lc_traj = tmc_ana%lc_traj + 1
798 READ (tmc_ana%id_traj, fmt=
"(A4,1X,1000F20.10)", iostat=status) &
799 c_tmp, elem%pos(i:i + tmc_ana%dim_per_elem - 1)
800 IF (status .NE. 0)
THEN
801 CALL cp_abort(__location__, &
802 "configuration pos read error at line: "// &
803 cp_to_string(tmc_ana%lc_traj))
806 elem%pos(:) = elem%pos(:)/au2a
810 CALL timestop(handle)
811 END SUBROUTINE read_pos_from_file
822 SUBROUTINE read_dipole_from_file(elem, tmc_ana, stat, conf_nr)
823 TYPE(tree_type),
POINTER :: elem
824 TYPE(tmc_analysis_env),
POINTER :: tmc_ana
825 INTEGER :: stat, conf_nr
827 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_dipole_from_file'
829 CHARACTER(LEN=250) :: c_tmp
830 INTEGER :: handle, status
834 cpassert(
ASSOCIATED(elem))
835 cpassert(
ASSOCIATED(elem%dipole))
836 cpassert(
ASSOCIATED(tmc_ana))
837 cpassert(tmc_ana%id_dip .GT. 0)
840 CALL timeset(routinen, handle)
841 tmc_ana%lc_dip = tmc_ana%lc_dip + 1
842 READ (tmc_ana%id_dip, fmt=
"(A)", iostat=status) c_tmp
843 IF (status .EQ. 0)
THEN
845 IF (index(c_tmp,
"#") .GT. 0)
THEN
846 tmc_ana%lc_dip = tmc_ana%lc_dip + 1
847 READ (tmc_ana%id_dip, fmt=
"(A)", iostat=status) c_tmp
850 IF (status .EQ. 0)
THEN
851 READ (c_tmp, fmt=
"(I8,10F20.10)", iostat=status) &
852 conf_nr, elem%dipole(:)
854 IF (status .EQ. 0)
THEN
856 ELSE IF (status .LT. 0)
THEN
860 cpwarn(
"configuration dipole read error at line: "//cp_to_string(tmc_ana%lc_dip))
865 CALL timestop(handle)
866 END SUBROUTINE read_dipole_from_file
877 SUBROUTINE read_cell_from_file(elem, tmc_ana, stat, conf_nr)
878 TYPE(tree_type),
POINTER :: elem
879 TYPE(tmc_analysis_env),
POINTER :: tmc_ana
880 INTEGER :: stat, conf_nr
882 CHARACTER(LEN=*),
PARAMETER :: routinen =
'read_cell_from_file'
884 CHARACTER(LEN=250) :: c_tmp
885 INTEGER :: handle, status
886 REAL(kind=
dp) :: r_tmp
887 REAL(kind=
dp),
DIMENSION(3, 3) :: hmat
891 cpassert(
ASSOCIATED(elem))
892 cpassert(
ASSOCIATED(tmc_ana))
893 cpassert(
ASSOCIATED(tmc_ana%cell))
894 cpassert(tmc_ana%id_cell .GT. 0)
897 CALL timeset(routinen, handle)
899 tmc_ana%lc_cell = tmc_ana%lc_cell + 1
900 READ (tmc_ana%id_cell, fmt=
"(A)", iostat=status) c_tmp
901 IF (status .EQ. 0)
THEN
903 IF (index(c_tmp,
"#") .GT. 0)
THEN
904 tmc_ana%lc_cell = tmc_ana%lc_cell + 1
905 READ (tmc_ana%id_cell, fmt=
"(A)", iostat=status) c_tmp
908 IF (status .EQ. 0)
THEN
909 READ (c_tmp, fmt=
"(I8,9(1X,F19.10),1X,F24.10)", iostat=status) conf_nr, &
912 IF (status .LT. 0)
THEN
914 ELSE IF (status .GT. 0)
THEN
916 cpabort(
"configuration cell read error at line: "//cp_to_string(tmc_ana%lc_cell))
919 IF (elem%nr .LT. 0) elem%nr = conf_nr
920 hmat(:, :) = hmat(:, :)/au2a
923 box_scale=elem%box_scale)
927 CALL timestop(handle)
928 END SUBROUTINE read_cell_from_file
943 TYPE(tmc_analysis_env),
POINTER :: tmc_ana
945 INTEGER,
OPTIONAL :: dir_ind
947 CHARACTER(LEN=*),
PARAMETER :: routinen =
'analyse_files_open'
949 CHARACTER(LEN=default_path_length) :: dir_name, file_name_act, file_name_temp
951 LOGICAL :: file_exists
953 cpassert(
ASSOCIATED(tmc_ana))
958 CALL timeset(routinen, handle)
960 IF (
PRESENT(dir_ind))
THEN
961 cpassert(
ASSOCIATED(tmc_ana%dirs))
962 cpassert(dir_ind .GT. 0)
963 cpassert(dir_ind .LE.
SIZE(tmc_ana%dirs))
965 IF (index(tmc_ana%dirs(dir_ind),
"/", back=.true.) .EQ. &
966 len_trim(tmc_ana%dirs(dir_ind)))
THEN
967 dir_name = trim(tmc_ana%dirs(dir_ind))
969 dir_name = trim(tmc_ana%dirs(dir_ind))//
"/"
978 rvalue=tmc_ana%temperature)
980 IF (tmc_ana%costum_pos_file_name .NE.
"")
THEN
981 file_name_act = trim(dir_name)//tmc_ana%costum_pos_file_name
983 file_name_act = trim(dir_name)// &
984 expand_file_name_ending(file_name_temp,
"xyz")
986 INQUIRE (file=file_name_act, exist=file_exists)
987 IF (file_exists)
THEN
988 CALL open_file(file_name=file_name_act, file_status=
"OLD", &
989 file_action=
"READ", unit_number=tmc_ana%id_traj)
990 WRITE (tmc_ana%io_unit, fmt=
'(T2,A,"| ",A,T41,A40)')
"TMC_ANA", &
991 "read xyz file", trim(file_name_act)
995 IF (tmc_ana%costum_cell_file_name .NE.
"")
THEN
996 file_name_act = trim(dir_name)//tmc_ana%costum_cell_file_name
998 file_name_act = trim(dir_name)// &
999 expand_file_name_ending(file_name_temp,
"cell")
1001 INQUIRE (file=file_name_act, exist=file_exists)
1002 IF (file_exists)
THEN
1003 CALL open_file(file_name=file_name_act, file_status=
"OLD", &
1004 file_action=
"READ", unit_number=tmc_ana%id_cell)
1005 WRITE (tmc_ana%io_unit, fmt=
'(T2,A,"| ",A,T41,A40)')
"TMC_ANA", &
1006 "read cell file", trim(file_name_act)
1010 IF (tmc_ana%costum_dip_file_name .NE.
"")
THEN
1011 file_name_act = trim(dir_name)//tmc_ana%costum_dip_file_name
1013 file_name_act = trim(dir_name)// &
1014 expand_file_name_ending(file_name_temp,
"dip")
1016 INQUIRE (file=file_name_act, exist=file_exists)
1017 IF (file_exists)
THEN
1018 CALL open_file(file_name=file_name_act, file_status=
"OLD", &
1019 file_action=
"READ", unit_number=tmc_ana%id_dip)
1020 WRITE (tmc_ana%io_unit, fmt=
'(T2,A,"| ",A,T41,A40)')
"TMC_ANA", &
1021 "read dip file", trim(file_name_act)
1024 IF (tmc_ana%id_traj .GT. 0 .OR. tmc_ana%id_cell .GT. 0 .OR. &
1025 tmc_ana%id_dip .GT. 0)
THEN
1028 CALL cp_warn(__location__, &
1029 "There is no file to open for temperature "//cp_to_string(tmc_ana%temperature)// &
1030 "K in directory "//trim(dir_name))
1033 CALL timestop(handle)
1043 TYPE(tmc_analysis_env),
POINTER :: tmc_ana
1045 CHARACTER(LEN=*),
PARAMETER :: routinen =
'analyse_files_close'
1049 cpassert(
ASSOCIATED(tmc_ana))
1052 CALL timeset(routinen, handle)
1055 IF (tmc_ana%id_traj .GT. 0)
CALL close_file(unit_number=tmc_ana%id_traj)
1058 IF (tmc_ana%id_cell .GT. 0)
CALL close_file(unit_number=tmc_ana%id_cell)
1061 IF (tmc_ana%id_dip .GT. 0)
CALL close_file(unit_number=tmc_ana%id_dip)
1064 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.
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...