304 TYPE(dbcsr_type),
POINTER :: matrix_s
306 INTEGER,
OPTIONAL :: ortho_k
308 INTEGER :: i, k, m_diis, my_ortho_k, n, ncoef
314 NULLIFY (qs_ot_env%preconditioner)
315 NULLIFY (qs_ot_env%matrix_psc0)
316 NULLIFY (qs_ot_env%para_env)
317 NULLIFY (qs_ot_env%blacs_env)
320 para_env=para_env, context=context)
322 qs_ot_env%para_env => para_env
323 qs_ot_env%blacs_env => context
324 CALL para_env%retain()
325 CALL context%retain()
327 IF (
PRESENT(ortho_k))
THEN
333 m_diis = qs_ot_env%settings%diis_m
335 qs_ot_env%use_gx_old = .false.
336 qs_ot_env%use_dx = .false.
338 SELECT CASE (qs_ot_env%settings%ot_method)
342 qs_ot_env%use_gx_old = .true.
343 qs_ot_env%use_dx = .true.
344 CASE (
"DIIS",
"BROY")
345 IF (m_diis .LT. 1) cpabort(
"m_diis less than one")
347 cpabort(
"Unknown option")
350 IF (qs_ot_env%settings%ot_method .EQ.
"DIIS" .OR. &
351 qs_ot_env%settings%ot_method .EQ.
"BROY")
THEN
352 ALLOCATE (qs_ot_env%ls_diis(m_diis + 1, m_diis + 1))
353 qs_ot_env%ls_diis = 0.0_dp
354 ALLOCATE (qs_ot_env%lss_diis(m_diis + 1, m_diis + 1))
355 ALLOCATE (qs_ot_env%c_diis(m_diis + 1))
356 ALLOCATE (qs_ot_env%c_broy(m_diis))
357 ALLOCATE (qs_ot_env%energy_h(m_diis))
358 ALLOCATE (qs_ot_env%ipivot(m_diis + 1))
361 ALLOCATE (qs_ot_env%evals(k))
362 ALLOCATE (qs_ot_env%dum(k))
364 NULLIFY (qs_ot_env%matrix_os)
365 NULLIFY (qs_ot_env%matrix_buf1_ortho)
366 NULLIFY (qs_ot_env%matrix_buf2_ortho)
367 NULLIFY (qs_ot_env%matrix_p)
368 NULLIFY (qs_ot_env%matrix_r)
369 NULLIFY (qs_ot_env%matrix_sinp)
370 NULLIFY (qs_ot_env%matrix_cosp)
371 NULLIFY (qs_ot_env%matrix_sinp_b)
372 NULLIFY (qs_ot_env%matrix_cosp_b)
373 NULLIFY (qs_ot_env%matrix_buf1)
374 NULLIFY (qs_ot_env%matrix_buf2)
375 NULLIFY (qs_ot_env%matrix_buf3)
376 NULLIFY (qs_ot_env%matrix_buf4)
377 NULLIFY (qs_ot_env%matrix_c0)
378 NULLIFY (qs_ot_env%matrix_sc0)
379 NULLIFY (qs_ot_env%matrix_x)
380 NULLIFY (qs_ot_env%matrix_sx)
381 NULLIFY (qs_ot_env%matrix_gx)
382 NULLIFY (qs_ot_env%matrix_gx_old)
383 NULLIFY (qs_ot_env%matrix_dx)
384 NULLIFY (qs_ot_env%buf1_k_k_nosym)
385 NULLIFY (qs_ot_env%buf2_k_k_nosym)
386 NULLIFY (qs_ot_env%buf3_k_k_nosym)
387 NULLIFY (qs_ot_env%buf4_k_k_nosym)
388 NULLIFY (qs_ot_env%buf1_k_k_sym)
389 NULLIFY (qs_ot_env%buf2_k_k_sym)
390 NULLIFY (qs_ot_env%buf3_k_k_sym)
391 NULLIFY (qs_ot_env%buf4_k_k_sym)
392 NULLIFY (qs_ot_env%buf1_n_k)
393 NULLIFY (qs_ot_env%buf1_n_k_dp)
394 NULLIFY (qs_ot_env%p_k_k_sym)
397 CALL dbcsr_init_p(qs_ot_env%matrix_c0)
399 sym=dbcsr_type_no_symmetry)
401 CALL dbcsr_init_p(qs_ot_env%matrix_sc0)
403 sym=dbcsr_type_no_symmetry)
405 CALL dbcsr_init_p(qs_ot_env%matrix_x)
407 sym=dbcsr_type_no_symmetry)
409 CALL dbcsr_init_p(qs_ot_env%matrix_sx)
411 sym=dbcsr_type_no_symmetry)
413 CALL dbcsr_init_p(qs_ot_env%matrix_gx)
415 sym=dbcsr_type_no_symmetry, data_type=dbcsr_type_real_8)
417 IF (qs_ot_env%use_dx)
THEN
418 CALL dbcsr_init_p(qs_ot_env%matrix_dx)
420 sym=dbcsr_type_no_symmetry, data_type=dbcsr_type_real_8)
423 IF (qs_ot_env%use_gx_old)
THEN
424 CALL dbcsr_init_p(qs_ot_env%matrix_gx_old)
426 sym=dbcsr_type_no_symmetry, data_type=dbcsr_type_real_8)
429 SELECT CASE (qs_ot_env%settings%ot_algorithm)
431 CALL dbcsr_init_p(qs_ot_env%matrix_p)
433 sym=dbcsr_type_no_symmetry)
435 CALL dbcsr_init_p(qs_ot_env%matrix_r)
437 sym=dbcsr_type_no_symmetry)
439 CALL dbcsr_init_p(qs_ot_env%matrix_sinp)
441 sym=dbcsr_type_no_symmetry)
443 CALL dbcsr_init_p(qs_ot_env%matrix_cosp)
445 sym=dbcsr_type_no_symmetry)
447 CALL dbcsr_init_p(qs_ot_env%matrix_sinp_b)
449 sym=dbcsr_type_no_symmetry)
451 CALL dbcsr_init_p(qs_ot_env%matrix_cosp_b)
453 sym=dbcsr_type_no_symmetry)
455 CALL dbcsr_init_p(qs_ot_env%matrix_buf1)
457 sym=dbcsr_type_no_symmetry)
459 CALL dbcsr_init_p(qs_ot_env%matrix_buf2)
461 sym=dbcsr_type_no_symmetry)
463 CALL dbcsr_init_p(qs_ot_env%matrix_buf3)
465 sym=dbcsr_type_no_symmetry)
467 CALL dbcsr_init_p(qs_ot_env%matrix_buf4)
469 sym=dbcsr_type_no_symmetry)
471 CALL dbcsr_init_p(qs_ot_env%matrix_os)
473 sym=dbcsr_type_no_symmetry)
475 CALL dbcsr_init_p(qs_ot_env%matrix_buf1_ortho)
477 sym=dbcsr_type_no_symmetry)
479 CALL dbcsr_init_p(qs_ot_env%matrix_buf2_ortho)
481 sym=dbcsr_type_no_symmetry)
484 CALL dbcsr_init_p(qs_ot_env%buf1_k_k_nosym)
486 sym=dbcsr_type_no_symmetry)
488 CALL dbcsr_init_p(qs_ot_env%buf2_k_k_nosym)
490 sym=dbcsr_type_no_symmetry)
492 CALL dbcsr_init_p(qs_ot_env%buf3_k_k_nosym)
494 sym=dbcsr_type_no_symmetry)
496 CALL dbcsr_init_p(qs_ot_env%buf4_k_k_nosym)
498 sym=dbcsr_type_no_symmetry)
501 CALL dbcsr_init_p(qs_ot_env%buf1_k_k_sym)
503 sym=dbcsr_type_no_symmetry)
505 CALL dbcsr_init_p(qs_ot_env%buf2_k_k_sym)
507 sym=dbcsr_type_no_symmetry)
509 CALL dbcsr_init_p(qs_ot_env%buf3_k_k_sym)
511 sym=dbcsr_type_no_symmetry)
513 CALL dbcsr_init_p(qs_ot_env%buf4_k_k_sym)
515 sym=dbcsr_type_no_symmetry)
517 CALL dbcsr_init_p(qs_ot_env%p_k_k_sym)
519 sym=dbcsr_type_no_symmetry)
521 CALL dbcsr_init_p(qs_ot_env%buf1_n_k)
523 sym=dbcsr_type_no_symmetry)
525 CALL dbcsr_init_p(qs_ot_env%matrix_buf1)
527 sym=dbcsr_type_no_symmetry)
531 IF (qs_ot_env%settings%ot_method .EQ.
"DIIS" .OR. &
532 qs_ot_env%settings%ot_method .EQ.
"BROY")
THEN
533 NULLIFY (qs_ot_env%matrix_h_e)
534 NULLIFY (qs_ot_env%matrix_h_x)
538 CALL dbcsr_init_p(qs_ot_env%matrix_h_x(i)%matrix)
540 sym=dbcsr_type_no_symmetry, data_type=dbcsr_type_real_8)
542 CALL dbcsr_init_p(qs_ot_env%matrix_h_e(i)%matrix)
544 sym=dbcsr_type_no_symmetry, data_type=dbcsr_type_real_8)
548 NULLIFY (qs_ot_env%rot_mat_u, qs_ot_env%rot_mat_x, qs_ot_env%rot_mat_h_e, qs_ot_env%rot_mat_h_x, &
549 qs_ot_env%rot_mat_gx, qs_ot_env%rot_mat_gx_old, qs_ot_env%rot_mat_dx, &
550 qs_ot_env%rot_mat_evals, qs_ot_env%rot_mat_evec, qs_ot_env%rot_mat_dedu, qs_ot_env%rot_mat_chc)
552 IF (qs_ot_env%settings%do_rotation)
THEN
553 CALL dbcsr_init_p(qs_ot_env%rot_mat_u)
555 sym=dbcsr_type_no_symmetry)
557 CALL dbcsr_init_p(qs_ot_env%rot_mat_x)
559 sym=dbcsr_type_no_symmetry)
561 CALL dbcsr_init_p(qs_ot_env%rot_mat_dedu)
563 sym=dbcsr_type_no_symmetry)
565 CALL dbcsr_init_p(qs_ot_env%rot_mat_chc)
567 sym=dbcsr_type_no_symmetry)
569 IF (qs_ot_env%settings%ot_method .EQ.
"DIIS")
THEN
573 CALL dbcsr_init_p(qs_ot_env%rot_mat_h_e(i)%matrix)
575 sym=dbcsr_type_no_symmetry)
577 CALL dbcsr_init_p(qs_ot_env%rot_mat_h_x(i)%matrix)
579 sym=dbcsr_type_no_symmetry)
583 ALLOCATE (qs_ot_env%rot_mat_evals(k))
585 CALL dbcsr_init_p(qs_ot_env%rot_mat_evec)
587 sym=dbcsr_type_no_symmetry, data_type=dbcsr_type_complex_default)
589 CALL dbcsr_init_p(qs_ot_env%rot_mat_gx)
591 sym=dbcsr_type_no_symmetry)
593 IF (qs_ot_env%use_gx_old)
THEN
594 CALL dbcsr_init_p(qs_ot_env%rot_mat_gx_old)
596 sym=dbcsr_type_no_symmetry)
599 IF (qs_ot_env%use_dx)
THEN
600 CALL dbcsr_init_p(qs_ot_env%rot_mat_dx)
602 sym=dbcsr_type_no_symmetry)
607 IF (qs_ot_env%settings%do_ener)
THEN
609 ALLOCATE (qs_ot_env%ener_x(ncoef))
611 IF (qs_ot_env%settings%ot_method .EQ.
"DIIS")
THEN
612 ALLOCATE (qs_ot_env%ener_h_e(m_diis, ncoef))
613 ALLOCATE (qs_ot_env%ener_h_x(m_diis, ncoef))
616 ALLOCATE (qs_ot_env%ener_gx(ncoef))
618 IF (qs_ot_env%use_gx_old)
THEN
619 ALLOCATE (qs_ot_env%ener_gx_old(ncoef))
622 IF (qs_ot_env%use_dx)
THEN
623 ALLOCATE (qs_ot_env%ener_dx(ncoef))
624 qs_ot_env%ener_dx = 0.0_dp
641 DEALLOCATE (qs_ot_env%evals)
642 DEALLOCATE (qs_ot_env%dum)
644 IF (
ASSOCIATED(qs_ot_env%matrix_os))
CALL dbcsr_release_p(qs_ot_env%matrix_os)
645 IF (
ASSOCIATED(qs_ot_env%matrix_p))
CALL dbcsr_release_p(qs_ot_env%matrix_p)
646 IF (
ASSOCIATED(qs_ot_env%matrix_cosp))
CALL dbcsr_release_p(qs_ot_env%matrix_cosp)
647 IF (
ASSOCIATED(qs_ot_env%matrix_sinp))
CALL dbcsr_release_p(qs_ot_env%matrix_sinp)
648 IF (
ASSOCIATED(qs_ot_env%matrix_r))
CALL dbcsr_release_p(qs_ot_env%matrix_r)
649 IF (
ASSOCIATED(qs_ot_env%matrix_cosp_b))
CALL dbcsr_release_p(qs_ot_env%matrix_cosp_b)
650 IF (
ASSOCIATED(qs_ot_env%matrix_sinp_b))
CALL dbcsr_release_p(qs_ot_env%matrix_sinp_b)
651 IF (
ASSOCIATED(qs_ot_env%matrix_buf1))
CALL dbcsr_release_p(qs_ot_env%matrix_buf1)
652 IF (
ASSOCIATED(qs_ot_env%matrix_buf2))
CALL dbcsr_release_p(qs_ot_env%matrix_buf2)
653 IF (
ASSOCIATED(qs_ot_env%matrix_buf3))
CALL dbcsr_release_p(qs_ot_env%matrix_buf3)
654 IF (
ASSOCIATED(qs_ot_env%matrix_buf4))
CALL dbcsr_release_p(qs_ot_env%matrix_buf4)
655 IF (
ASSOCIATED(qs_ot_env%matrix_buf1_ortho))
CALL dbcsr_release_p(qs_ot_env%matrix_buf1_ortho)
656 IF (
ASSOCIATED(qs_ot_env%matrix_buf2_ortho))
CALL dbcsr_release_p(qs_ot_env%matrix_buf2_ortho)
657 IF (
ASSOCIATED(qs_ot_env%matrix_c0))
CALL dbcsr_release_p(qs_ot_env%matrix_c0)
658 IF (
ASSOCIATED(qs_ot_env%matrix_sc0))
CALL dbcsr_release_p(qs_ot_env%matrix_sc0)
659 IF (
ASSOCIATED(qs_ot_env%matrix_psc0))
CALL dbcsr_release_p(qs_ot_env%matrix_psc0)
660 IF (
ASSOCIATED(qs_ot_env%matrix_x))
CALL dbcsr_release_p(qs_ot_env%matrix_x)
661 IF (
ASSOCIATED(qs_ot_env%matrix_sx))
CALL dbcsr_release_p(qs_ot_env%matrix_sx)
662 IF (
ASSOCIATED(qs_ot_env%matrix_gx))
CALL dbcsr_release_p(qs_ot_env%matrix_gx)
663 IF (
ASSOCIATED(qs_ot_env%matrix_dx))
CALL dbcsr_release_p(qs_ot_env%matrix_dx)
664 IF (
ASSOCIATED(qs_ot_env%matrix_gx_old))
CALL dbcsr_release_p(qs_ot_env%matrix_gx_old)
665 IF (
ASSOCIATED(qs_ot_env%buf1_k_k_nosym))
CALL dbcsr_release_p(qs_ot_env%buf1_k_k_nosym)
666 IF (
ASSOCIATED(qs_ot_env%buf2_k_k_nosym))
CALL dbcsr_release_p(qs_ot_env%buf2_k_k_nosym)
667 IF (
ASSOCIATED(qs_ot_env%buf3_k_k_nosym))
CALL dbcsr_release_p(qs_ot_env%buf3_k_k_nosym)
668 IF (
ASSOCIATED(qs_ot_env%buf4_k_k_nosym))
CALL dbcsr_release_p(qs_ot_env%buf4_k_k_nosym)
669 IF (
ASSOCIATED(qs_ot_env%p_k_k_sym))
CALL dbcsr_release_p(qs_ot_env%p_k_k_sym)
670 IF (
ASSOCIATED(qs_ot_env%buf1_k_k_sym))
CALL dbcsr_release_p(qs_ot_env%buf1_k_k_sym)
671 IF (
ASSOCIATED(qs_ot_env%buf2_k_k_sym))
CALL dbcsr_release_p(qs_ot_env%buf2_k_k_sym)
672 IF (
ASSOCIATED(qs_ot_env%buf3_k_k_sym))
CALL dbcsr_release_p(qs_ot_env%buf3_k_k_sym)
673 IF (
ASSOCIATED(qs_ot_env%buf4_k_k_sym))
CALL dbcsr_release_p(qs_ot_env%buf4_k_k_sym)
674 IF (
ASSOCIATED(qs_ot_env%buf1_n_k))
CALL dbcsr_release_p(qs_ot_env%buf1_n_k)
675 IF (
ASSOCIATED(qs_ot_env%buf1_n_k_dp))
CALL dbcsr_release_p(qs_ot_env%buf1_n_k_dp)
677 IF (qs_ot_env%settings%ot_method .EQ.
"DIIS" .OR. &
678 qs_ot_env%settings%ot_method .EQ.
"BROY")
THEN
681 DEALLOCATE (qs_ot_env%ls_diis)
682 DEALLOCATE (qs_ot_env%lss_diis)
683 DEALLOCATE (qs_ot_env%c_diis)
684 DEALLOCATE (qs_ot_env%c_broy)
685 DEALLOCATE (qs_ot_env%energy_h)
686 DEALLOCATE (qs_ot_env%ipivot)
689 IF (qs_ot_env%settings%do_rotation)
THEN
691 IF (
ASSOCIATED(qs_ot_env%rot_mat_u))
CALL dbcsr_release_p(qs_ot_env%rot_mat_u)
692 IF (
ASSOCIATED(qs_ot_env%rot_mat_x))
CALL dbcsr_release_p(qs_ot_env%rot_mat_x)
693 IF (
ASSOCIATED(qs_ot_env%rot_mat_dedu))
CALL dbcsr_release_p(qs_ot_env%rot_mat_dedu)
694 IF (
ASSOCIATED(qs_ot_env%rot_mat_chc))
CALL dbcsr_release_p(qs_ot_env%rot_mat_chc)
696 IF (qs_ot_env%settings%ot_method .EQ.
"DIIS")
THEN
701 DEALLOCATE (qs_ot_env%rot_mat_evals)
703 IF (
ASSOCIATED(qs_ot_env%rot_mat_evec))
CALL dbcsr_release_p(qs_ot_env%rot_mat_evec)
704 IF (
ASSOCIATED(qs_ot_env%rot_mat_gx))
CALL dbcsr_release_p(qs_ot_env%rot_mat_gx)
705 IF (
ASSOCIATED(qs_ot_env%rot_mat_gx_old))
CALL dbcsr_release_p(qs_ot_env%rot_mat_gx_old)
706 IF (
ASSOCIATED(qs_ot_env%rot_mat_dx))
CALL dbcsr_release_p(qs_ot_env%rot_mat_dx)
709 IF (qs_ot_env%settings%do_ener)
THEN
710 DEALLOCATE (qs_ot_env%ener_x)
711 DEALLOCATE (qs_ot_env%ener_gx)
712 IF (qs_ot_env%settings%ot_method .EQ.
"DIIS")
THEN
713 DEALLOCATE (qs_ot_env%ener_h_x)
714 DEALLOCATE (qs_ot_env%ener_h_e)
716 IF (qs_ot_env%use_dx)
THEN
717 DEALLOCATE (qs_ot_env%ener_dx)
719 IF (qs_ot_env%use_gx_old)
THEN
720 DEALLOCATE (qs_ot_env%ener_gx_old)
735 INTEGER,
INTENT(IN) :: output_unit
737 CHARACTER(len=*),
PARAMETER :: routinen =
'ot_readwrite_input'
739 INTEGER :: handle, ls_method, ot_algorithm, &
740 ot_method, ot_ortho_irac
742 CALL timeset(routinen, handle)
746 SELECT CASE (ot_algorithm)
748 settings%ot_algorithm =
"TOD"
751 settings%ot_algorithm =
"REF"
753 cpabort(
"Value unknown")
758 IF (settings%irac_degree < 2 .OR. settings%irac_degree > 4)
THEN
759 cpabort(
"READ OT IRAC_DEGREE: Value unknown")
762 IF (settings%max_irac < 1)
THEN
763 cpabort(
"READ OT MAX_IRAC: VALUE MUST BE GREATER THAN ZERO")
765 CALL section_vals_val_get(ot_section,
"EPS_IRAC_FILTER_MATRIX", r_val=settings%eps_irac_filter_matrix)
767 IF (settings%eps_irac < 0.0_dp)
THEN
768 cpabort(
"READ OT EPS_IRAC: VALUE MUST BE GREATER THAN ZERO")
770 CALL section_vals_val_get(ot_section,
"EPS_IRAC_QUICK_EXIT", r_val=settings%eps_irac_quick_exit)
771 IF (settings%eps_irac_quick_exit < 0.0_dp)
THEN
772 cpabort(
"READ OT EPS_IRAC_QUICK_EXIT: VALUE MUST BE GREATER THAN ZERO")
776 IF (settings%eps_irac_switch < 0.0_dp)
THEN
777 cpabort(
"READ OT EPS_IRAC_SWITCH: VALUE MUST BE GREATER THAN ZERO")
781 SELECT CASE (ot_ortho_irac)
783 settings%ortho_irac =
"CHOL"
785 settings%ortho_irac =
"POLY"
787 settings%ortho_irac =
"LWDN"
789 cpabort(
"READ OT ORTHO_IRAC: Value unknown")
796 SELECT CASE (ot_method)
798 settings%ot_method =
"SD"
800 settings%ot_method =
"CG"
802 settings%ot_method =
"DIIS"
811 CALL section_vals_val_get(ot_section,
"BROYDEN_SIGMA_DECREASE", r_val=settings%broyden_sigma_decrease)
813 CALL section_vals_val_get(ot_section,
"BROYDEN_FORGET_HISTORY", l_val=settings%broyden_forget_history)
814 CALL section_vals_val_get(ot_section,
"BROYDEN_ADAPTIVE_SIGMA", l_val=settings%broyden_adaptive_sigma)
815 CALL section_vals_val_get(ot_section,
"BROYDEN_ENABLE_FLIP", l_val=settings%broyden_enable_flip)
816 settings%ot_method =
"BROY"
818 cpabort(
"READ OTSCF MINIMIZER: Value unknown")
822 SELECT CASE (ls_method)
824 settings%line_search_method =
"NONE"
826 settings%line_search_method =
"2PNT"
828 settings%line_search_method =
"3PNT"
830 settings%line_search_method =
"GOLD"
833 cpabort(
"READ OTSCF LS: Value unknown")
837 SELECT CASE (settings%precond_solver_type)
839 settings%precond_solver_name =
"DEFAULT"
841 settings%precond_solver_name =
"INVERSE_CHOLESKY"
843 settings%precond_solver_name =
"DIRECT"
845 settings%precond_solver_name =
"INVERSE_UPDATE"
847 cpabort(
"READ OTSCF SOLVER: Value unknown")
855 SELECT CASE (settings%preconditioner_type)
857 settings%preconditioner_name =
"NONE"
858 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.15_dp
859 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.2_dp
861 settings%preconditioner_name =
"FULL_SINGLE"
862 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.15_dp
863 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.2_dp
865 settings%preconditioner_name =
"FULL_SINGLE_INVERSE"
866 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.08_dp
867 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.08_dp
869 settings%preconditioner_name =
"FULL_ALL"
870 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.15_dp
871 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.08_dp
873 settings%preconditioner_name =
"FULL_KINETIC"
874 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.15_dp
875 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.2_dp
877 settings%preconditioner_name =
"FULL_S_INVERSE"
878 IF (settings%ds_min < 0.0_dp) settings%ds_min = 0.15_dp
879 IF (settings%energy_gap < 0.0_dp) settings%energy_gap = 0.2_dp
881 cpabort(
"READ OTSCF PRECONDITIONER: Value unknown")
889 l_val=settings%occupation_preconditioner)
892 r_val=settings%nondiag_energy_strength)
894 cpassert(.NOT. settings%do_ener)
898 IF (output_unit > 0)
THEN
899 WRITE (output_unit,
'(/,A)')
" ----------------------------------- OT ---------------------------------------"
900 IF (settings%do_rotation)
THEN
901 WRITE (output_unit,
'(A)')
" Allowing for rotations "
903 IF (settings%do_ener)
THEN
904 WRITE (output_unit,
'(A,L2)')
" Optimizing orbital energies "
906 SELECT CASE (settings%OT_METHOD)
908 WRITE (output_unit,
'(A)')
" Minimizer : SD : steepest descent"
910 WRITE (output_unit,
'(A)')
" Minimizer : CG : conjugate gradient"
912 WRITE (output_unit,
'(A)')
" Minimizer : DIIS : direct inversion"
913 WRITE (output_unit,
'(A)')
" in the iterative subspace"
914 WRITE (output_unit,
'(A,I3,A)')
" using ", settings%diis_m,
" DIIS vectors"
915 IF (settings%safer_diis)
THEN
916 WRITE (output_unit,
'(A,I3,A)')
" safer DIIS on"
918 WRITE (output_unit,
'(A,I3,A)')
" safer DIIS off"
921 WRITE (output_unit,
'(A)')
" Minimizer : BROYDEN : Broyden "
922 WRITE (output_unit,
'(A,F16.8)')
" BETA : ", settings%broyden_beta
923 WRITE (output_unit,
'(A,F16.8)')
" GAMMA : ", settings%broyden_gamma
924 WRITE (output_unit,
'(A,F16.8)')
" SIGMA : ", settings%broyden_sigma
925 WRITE (output_unit,
'(A,I3,A)')
" using : - ", &
926 settings%diis_m,
" BROYDEN vectors"
928 WRITE (output_unit,
'(3A)')
" Minimizer : ", settings%OT_METHOD,
" : UNKNOWN"
930 SELECT CASE (settings%preconditioner_name)
932 WRITE (output_unit,
'(A)')
" Preconditioner : FULL_SINGLE : diagonalization based"
933 CASE (
"FULL_SINGLE_INVERSE")
934 WRITE (output_unit,
'(A,/,A)')
" Preconditioner : FULL_SINGLE_INVERSE : inversion of ", &
935 " H + eS - 2*(Sc)(c^T*H*c+const)(Sc)^T"
937 WRITE (output_unit,
'(A)')
" Preconditioner : FULL_ALL : diagonalization, state selective"
938 CASE (
"FULL_KINETIC")
939 WRITE (output_unit,
'(A)')
" Preconditioner : FULL_KINETIC : inversion of T + eS"
940 CASE (
"FULL_S_INVERSE")
941 WRITE (output_unit,
'(A)')
" Preconditioner : FULL_S_INVERSE : cholesky inversion of S"
943 WRITE (output_unit,
'(A)') &
944 " Preconditioner : SPARSE_DIAG : diagonal atomic block diagonalization"
945 CASE (
"SPARSE_KINETIC")
946 WRITE (output_unit,
'(A)')
" Preconditioner : SPARSE_KINETIC : sparse linear solver for T + eS"
948 WRITE (output_unit,
'(A)')
" Preconditioner : NONE"
950 WRITE (output_unit,
'(3A)')
" Preconditioner : ", settings%preconditioner_name,
" : UNKNOWN"
953 WRITE (output_unit,
'(A)')
" Precond_solver : "//trim(settings%precond_solver_name)
955 IF (settings%OT_METHOD .EQ.
"SD" .OR. settings%OT_METHOD .EQ.
"CG")
THEN
956 SELECT CASE (settings%line_search_method)
958 WRITE (output_unit,
'(A)')
" Line search : 2PNT : 2 energies, one gradient"
960 WRITE (output_unit,
'(A)')
" Line search : 3PNT : 3 energies"
962 WRITE (output_unit,
'(A)')
" Line search : GOLD : bracketing and golden section search"
963 WRITE (output_unit,
'(A,F14.8)')
" target rel accuracy : ", settings%gold_target
965 WRITE (output_unit,
'(A)')
" Line search : NONE"
967 WRITE (output_unit,
'(3A)')
" Line search : ", settings%line_search_method,
" : UNKNOWN"
970 WRITE (output_unit,
'(A,F14.8,T49,A,F14.8)')
" stepsize :", settings%ds_min, &
971 " energy_gap :", settings%energy_gap
972 IF (settings%ot_algorithm .EQ.
'TOD')
THEN
973 WRITE (output_unit,
'(A,E14.5,T49,A,I14)')
" eps_taylor :", settings%eps_taylor, &
974 " max_taylor :", settings%max_taylor
976 IF (settings%ot_algorithm .EQ.
'REF')
THEN
977 WRITE (output_unit,
'(A,1X,A,T49,A,I14)')
" ortho_irac :", settings%ortho_irac, &
978 " irac_degree :", settings%irac_degree
979 WRITE (output_unit,
'(A,I14,T49,A,E14.5)')
" max_irac :", settings%max_irac, &
980 " eps_irac :", settings%eps_irac
981 WRITE (output_unit,
'(A,E14.5,T49,A,E10.3)')
" eps_irac_switch:", settings%eps_irac_switch, &
982 " eps_irac_quick_exit:", settings%eps_irac_quick_exit
983 WRITE (output_unit,
'(A,L2)')
" on_the_fly_loc :", settings%on_the_fly_loc
985 WRITE (output_unit,
'(A)')
" ----------------------------------- OT ---------------------------------------"
986 WRITE (unit=output_unit, &
987 fmt=
"(/,T3,A,T12,A,T31,A,T39,A,T59,A,T75,A,/,T3,A)") &
988 "Step",
"Update method",
"Time",
"Convergence",
"Total energy",
"Change", &
992 CALL timestop(handle)