Skip to content

Commit

Permalink
drop read_mo_set/write_mo_set interface in favour of direct function …
Browse files Browse the repository at this point in the history
…calls

Since the caller has to be aware of whether read/write_mo_set is used to write a restart or to an output unit there is no point in having a common interface.
  • Loading branch information
dev-zero committed Jul 11, 2021
1 parent 9158db1 commit 4542bbc
Show file tree
Hide file tree
Showing 9 changed files with 58 additions and 75 deletions.
6 changes: 3 additions & 3 deletions src/emd/rt_propagation_utils.F
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ MODULE rt_propagation_utils
USE qs_kind_types, ONLY: qs_kind_type
USE qs_ks_types, ONLY: qs_ks_did_change,&
qs_ks_env_type
USE qs_mo_io, ONLY: read_mo_set,&
USE qs_mo_io, ONLY: read_mo_set_from_restart,&
read_rt_mos_from_restart
USE qs_mo_methods, ONLY: calculate_density_matrix
USE qs_mo_types, ONLY: mo_set_p_type
Expand Down Expand Up @@ -267,8 +267,8 @@ SUBROUTINE get_restart_wfn(qs_env)
dft_section => section_vals_get_subs_vals(input, "DFT")
SELECT CASE (dft_control%rtp_control%initial_wfn)
CASE (use_restart_wfn)
CALL read_mo_set(mo_array, atomic_kind_set, qs_kind_set, particle_set, para_env, &
id_nr=id_nr, multiplicity=dft_control%multiplicity, dft_section=dft_section)
CALL read_mo_set_from_restart(mo_array, atomic_kind_set, qs_kind_set, particle_set, para_env, &
id_nr=id_nr, multiplicity=dft_control%multiplicity, dft_section=dft_section)
DO ispin = 1, nspin
CALL calculate_density_matrix(mo_array(ispin)%mo_set, p_rmpv(ispin)%matrix)
ENDDO
Expand Down
12 changes: 6 additions & 6 deletions src/mixed_cdft_methods.F
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ MODULE mixed_cdft_methods
USE qs_environment_types, ONLY: get_qs_env,&
qs_environment_type
USE qs_kind_types, ONLY: qs_kind_type
USE qs_mo_io, ONLY: read_mo_set,&
USE qs_mo_io, ONLY: read_mo_set_from_restart,&
wfn_restart_file_name
USE qs_mo_methods, ONLY: make_basis_simple,&
make_basis_sm
Expand Down Expand Up @@ -2127,11 +2127,11 @@ SUBROUTINE mixed_cdft_wfn_overlap_method(force_env, mixed_cdft, ncol_mo, nrow_mo
TRIM(file_name)//". This file does not exist. Please check the existence of"// &
" the file or change properly the value of the keyword WFN_RESTART_FILE_NAME in"// &
" section FORCE_EVAL\MIXED\MIXED_CDFT.")
CALL read_mo_set(mo_array=mo_set, atomic_kind_set=atomic_kind_set, &
qs_kind_set=mixed_cdft%qs_kind_set, particle_set=particle_set, &
para_env=force_env%para_env, id_nr=0, multiplicity=mixed_cdft%multiplicity, &
dft_section=mixed_cdft_section, natom_mismatch=natom_mismatch, &
cdft=.TRUE.)
CALL read_mo_set_from_restart(mo_array=mo_set, atomic_kind_set=atomic_kind_set, &
qs_kind_set=mixed_cdft%qs_kind_set, particle_set=particle_set, &
para_env=force_env%para_env, id_nr=0, multiplicity=mixed_cdft%multiplicity, &
dft_section=mixed_cdft_section, natom_mismatch=natom_mismatch, &
cdft=.TRUE.)
IF (natom_mismatch) &
CALL cp_abort(__LOCATION__, &
"Restart wfn file has a wrong number of atoms")
Expand Down
9 changes: 4 additions & 5 deletions src/optbas_fenv_manipulation.F
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ MODULE optbas_fenv_manipulation
qs_ks_env_type,&
set_ks_env
USE qs_matrix_pools, ONLY: mpools_get
USE qs_mo_io, ONLY: read_mo_set
USE qs_mo_io, ONLY: read_mo_set_from_restart
USE qs_mo_methods, ONLY: calculate_density_matrix
USE qs_mo_types, ONLY: init_mo_set,&
mo_set_p_type
Expand Down Expand Up @@ -211,9 +211,9 @@ SUBROUTINE allocate_mo_sets(qs_env)
END IF
END DO

CALL read_mo_set(mos, atomic_kind_set, qs_kind_set, particle_set, para_env, &
id_nr=0, multiplicity=dft_control%multiplicity, dft_section=dft_section, &
natom_mismatch=natom_mismatch)
CALL read_mo_set_from_restart(mos, atomic_kind_set, qs_kind_set, particle_set, para_env, &
id_nr=0, multiplicity=dft_control%multiplicity, dft_section=dft_section, &
natom_mismatch=natom_mismatch)

CALL mpools_get(qs_env%mpools_aux_fit, ao_mo_fm_pools=ao_mo_fm_pools_aux_fit)
DO ispin = 1, dft_control%nspins
Expand Down Expand Up @@ -428,4 +428,3 @@ SUBROUTINE transfer_data_to_gto(gto_basis, basis)
END SUBROUTINE transfer_data_to_gto

END MODULE optbas_fenv_manipulation

16 changes: 8 additions & 8 deletions src/qs_initial_guess.F
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ MODULE qs_initial_guess
USE qs_kind_types, ONLY: get_qs_kind,&
get_qs_kind_set,&
qs_kind_type
USE qs_mo_io, ONLY: read_mo_set,&
USE qs_mo_io, ONLY: read_mo_set_from_restart,&
wfn_restart_file_name
USE qs_mo_methods, ONLY: calculate_density_matrix,&
make_basis_lowdin,&
Expand Down Expand Up @@ -288,7 +288,7 @@ SUBROUTINE calculate_first_density_matrix(scf_env, qs_env)

! if a restart was requested, check that the file exists,
! if not we fall back to an atomic guess. No kidding, the file name should remain
! in sync with read_mo_set
! in sync with read_mo_set_from_restart
id_nr = 0
IF (density_guess == restart_guess) THEN
! only check existence on I/O node, otherwise if file exists there but
Expand Down Expand Up @@ -378,9 +378,9 @@ SUBROUTINE calculate_first_density_matrix(scf_env, qs_env)
IF (natom_mismatch) density_guess = safe_density_guess
ELSE
CALL get_atomic_kind_set(atomic_kind_set=atomic_kind_set)
CALL read_mo_set(mo_array, atomic_kind_set, qs_kind_set, particle_set, para_env, &
id_nr=id_nr, multiplicity=dft_control%multiplicity, dft_section=dft_section, &
natom_mismatch=natom_mismatch)
CALL read_mo_set_from_restart(mo_array, atomic_kind_set, qs_kind_set, particle_set, para_env, &
id_nr=id_nr, multiplicity=dft_control%multiplicity, dft_section=dft_section, &
natom_mismatch=natom_mismatch)

IF (natom_mismatch) THEN
density_guess = safe_density_guess
Expand Down Expand Up @@ -448,9 +448,9 @@ SUBROUTINE calculate_first_density_matrix(scf_env, qs_env)
IF (not_read > 1) THEN
DO i = 1, last_read
j = last_read - i
CALL read_mo_set(mo_array, atomic_kind_set, qs_kind_set, particle_set, para_env, &
id_nr=j, multiplicity=dft_control%multiplicity, &
dft_section=dft_section)
CALL read_mo_set_from_restart(mo_array, atomic_kind_set, qs_kind_set, particle_set, para_env, &
id_nr=j, multiplicity=dft_control%multiplicity, &
dft_section=dft_section)

DO ispin = 1, nspin
IF (scf_control%level_shift /= 0.0_dp) THEN
Expand Down
48 changes: 16 additions & 32 deletions src/qs_mo_io.F
Original file line number Diff line number Diff line change
Expand Up @@ -86,19 +86,12 @@ MODULE qs_mo_io
CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'qs_mo_io'

PUBLIC :: wfn_restart_file_name, &
read_mo_set, &
write_mo_set, &
write_rt_mos_to_restart, &
read_rt_mos_from_restart, &
write_dm_binary_restart

INTERFACE read_mo_set
MODULE PROCEDURE read_mo_set_from_restart
END INTERFACE

INTERFACE write_mo_set
MODULE PROCEDURE write_mo_set_to_output_unit, write_mo_set_to_restart
END INTERFACE
write_dm_binary_restart, &
write_mo_set_to_output_unit, &
write_mo_set_to_restart, &
read_mo_set_from_restart

CONTAINS

Expand Down Expand Up @@ -564,8 +557,8 @@ SUBROUTINE read_mo_set_from_restart(mo_array, atomic_kind_set, qs_kind_set, part
! CDFT has no real dft_section and does not need to print
IF (.NOT. my_cdft) THEN
DO ispin = 1, nspin
CALL write_mo_set(mo_array(ispin)%mo_set, atomic_kind_set, qs_kind_set, &
particle_set, dft_section, 4, 0, final_mos=.FALSE.)
CALL write_mo_set_to_output_unit(mo_array(ispin)%mo_set, atomic_kind_set, qs_kind_set, &
particle_set, dft_section, 4, 0, final_mos=.FALSE.)
END DO
END IF

Expand Down Expand Up @@ -639,8 +632,8 @@ SUBROUTINE read_rt_mos_from_restart(mo_array, rt_mos, atomic_kind_set, qs_kind_s
IF (para_env%ionode) CALL close_file(unit_number=restart_unit)

DO ispin = 1, nspin
CALL write_mo_set(mo_array(ispin)%mo_set, atomic_kind_set, qs_kind_set, &
particle_set, dft_section, 4, 0, final_mos=.FALSE.)
CALL write_mo_set_to_output_unit(mo_array(ispin)%mo_set, atomic_kind_set, qs_kind_set, &
particle_set, dft_section, 4, 0, final_mos=.FALSE.)
END DO

CALL timestop(handle)
Expand Down Expand Up @@ -1168,26 +1161,17 @@ SUBROUTINE write_mo_set_to_output_unit(mo_set, atomic_kind_set, qs_kind_set, par
END IF ! print_cartesian
IF (my_final) THEN
name = TRIM(energy_str)//", OCCUPATION NUMBERS, AND "// &
TRIM(orbital_str)//" "//TRIM(vector_str)
ELSE
WRITE (UNIT=name, FMT="(A,1X,I0)") &
TRIM(energy_str)//", OCCUPATION NUMBERS, AND "// &
TRIM(orbital_str)//" "//TRIM(vector_str)//" AFTER SCF STEP", &
scf_step
END IF
name = TRIM(energy_str)//", OCCUPATION NUMBERS, AND "// &
TRIM(orbital_str)//" "//TRIM(vector_str)
ELSE IF (print_occup .OR. print_eigvals) THEN
IF (.NOT. my_final) &
WRITE (UNIT=name, FMT="(A,1X,I0)") TRIM(name)//" AFTER SCF STEP", scf_step
IF (my_final) THEN
name = TRIM(energy_str)//" AND OCCUPATION NUMBERS"
ELSE
WRITE (UNIT=name, FMT="(A,1X,I0)") &
TRIM(energy_str)//" AND OCCUPATION NUMBERS "// &
"AFTER SCF STEP", scf_step
END IF
ELSE IF (print_occup .OR. print_eigvals) THEN
name = TRIM(energy_str)//" AND OCCUPATION NUMBERS"
IF (.NOT. my_final) &
WRITE (UNIT=name, FMT="(A,1X,I0)") TRIM(name)//" AFTER SCF STEP", scf_step
END IF ! print_eigvecs
! Print headline
Expand Down
4 changes: 2 additions & 2 deletions src/qs_scf.F
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ MODULE qs_scf
USE qs_ks_methods, ONLY: qs_ks_update_qs_env
USE qs_ks_types, ONLY: qs_ks_did_change,&
qs_ks_env_type
USE qs_mo_io, ONLY: write_mo_set
USE qs_mo_io, ONLY: write_mo_set_to_restart
USE qs_mo_methods, ONLY: calculate_density_matrix,&
make_basis_simple,&
make_basis_sm
Expand Down Expand Up @@ -529,7 +529,7 @@ SUBROUTINE scf_env_do_scf(scf_env, scf_control, qs_env, converged, should_stop,
CALL write_kpoints_restart(rho_ao_kp, kpoints, scf_env, dft_section, particle_set, qs_kind_set)
ELSE
! Write Wavefunction restart file
CALL write_mo_set(mos, particle_set, dft_section=dft_section, qs_kind_set=qs_kind_set)
CALL write_mo_set_to_restart(mos, particle_set, dft_section=dft_section, qs_kind_set=qs_kind_set)
END IF
! Exit if we have finished with the SCF inner loop
Expand Down
20 changes: 10 additions & 10 deletions src/qs_scf_output.F
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ MODULE qs_scf_output
USE qs_environment_types, ONLY: get_qs_env,&
qs_environment_type
USE qs_kind_types, ONLY: qs_kind_type
USE qs_mo_io, ONLY: write_mo_set
USE qs_mo_io, ONLY: write_mo_set_to_output_unit
USE qs_mo_methods, ONLY: calculate_magnitude,&
calculate_orthonormality,&
calculate_subspace_eigenvalues
Expand Down Expand Up @@ -386,20 +386,20 @@ SUBROUTINE qs_scf_write_mos(qs_env, scf_env, final_mos)
IF (SIZE(mos) > 1) THEN
SELECT CASE (ispin)
CASE (1)
CALL write_mo_set(mo_set_tmp, atomic_kind_set, qs_kind_set, particle_set, &
dft_section, 4, kpoint, final_mos=final_mos, spin="ALPHA", &
solver_method=solver_method)
CALL write_mo_set_to_output_unit(mo_set_tmp, atomic_kind_set, qs_kind_set, particle_set, &
dft_section, 4, kpoint, final_mos=final_mos, spin="ALPHA", &
solver_method=solver_method)
CASE (2)
CALL write_mo_set(mo_set_tmp, atomic_kind_set, qs_kind_set, particle_set, &
dft_section, 4, kpoint, final_mos=final_mos, spin="BETA", &
solver_method=solver_method)
CALL write_mo_set_to_output_unit(mo_set_tmp, atomic_kind_set, qs_kind_set, particle_set, &
dft_section, 4, kpoint, final_mos=final_mos, spin="BETA", &
solver_method=solver_method)
CASE DEFAULT
CPABORT("Invalid spin")
END SELECT
ELSE
CALL write_mo_set(mo_set_tmp, atomic_kind_set, qs_kind_set, particle_set, &
dft_section, 4, kpoint, final_mos=final_mos, &
solver_method=solver_method)
CALL write_mo_set_to_output_unit(mo_set_tmp, atomic_kind_set, qs_kind_set, particle_set, &
dft_section, 4, kpoint, final_mos=final_mos, &
solver_method=solver_method)
END IF

! Deallocate temporary objects needed for OT
Expand Down
4 changes: 2 additions & 2 deletions src/qs_scf_wfn_mix.F
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ MODULE qs_scf_wfn_mix
USE kinds, ONLY: dp
USE particle_types, ONLY: particle_type
USE qs_kind_types, ONLY: qs_kind_type
USE qs_mo_io, ONLY: write_mo_set
USE qs_mo_io, ONLY: write_mo_set_to_restart
USE qs_mo_methods, ONLY: calculate_orthonormality
USE qs_mo_types, ONLY: deallocate_mo_set,&
duplicate_mo_set,&
Expand Down Expand Up @@ -184,7 +184,7 @@ SUBROUTINE wfn_mix(mos, particle_set, dft_section, qs_kind_set, &
IF (mos(1)%mo_set%use_mo_coeff_b) &
CALL copy_fm_to_dbcsr(mos_new(ispin)%mo_set%mo_coeff, mos(ispin)%mo_set%mo_coeff_b)
END DO
CALL write_mo_set(mos_new, particle_set, dft_section=dft_section, qs_kind_set=qs_kind_set)
CALL write_mo_set_to_restart(mos_new, particle_set, dft_section=dft_section, qs_kind_set=qs_kind_set)

DO ispin = 1, SIZE(mos_new)
CALL deallocate_mo_set(mos_new(ispin)%mo_set)
Expand Down
14 changes: 7 additions & 7 deletions src/xas_methods.F
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ MODULE xas_methods
set_loc_wfn_lists
USE qs_matrix_pools, ONLY: mpools_get,&
qs_matrix_pools_type
USE qs_mo_io, ONLY: write_mo_set
USE qs_mo_io, ONLY: write_mo_set_to_output_unit
USE qs_mo_methods, ONLY: calculate_subspace_eigenvalues
USE qs_mo_types, ONLY: get_mo_set,&
mo_set_p_type,&
Expand Down Expand Up @@ -506,13 +506,13 @@ SUBROUTINE xas(qs_env, dft_control)

! Write last wavefunction to screen
IF (SIZE(mos) > 1) THEN
CALL write_mo_set(mos(1)%mo_set, atomic_kind_set, qs_kind_set, particle_set, &
dft_section, 4, 0, final_mos=.FALSE., spin="XAS ALPHA")
CALL write_mo_set(mos(2)%mo_set, atomic_kind_set, qs_kind_set, particle_set, &
dft_section, 4, 0, final_mos=.FALSE., spin="XAS BETA")
CALL write_mo_set_to_output_unit(mos(1)%mo_set, atomic_kind_set, qs_kind_set, particle_set, &
dft_section, 4, 0, final_mos=.FALSE., spin="XAS ALPHA")
CALL write_mo_set_to_output_unit(mos(2)%mo_set, atomic_kind_set, qs_kind_set, particle_set, &
dft_section, 4, 0, final_mos=.FALSE., spin="XAS BETA")
ELSE
CALL write_mo_set(mos(1)%mo_set, atomic_kind_set, qs_kind_set, particle_set, &
dft_section, 4, 0, final_mos=.FALSE., spin="XAS")
CALL write_mo_set_to_output_unit(mos(1)%mo_set, atomic_kind_set, qs_kind_set, particle_set, &
dft_section, 4, 0, final_mos=.FALSE., spin="XAS")
END IF

ELSE
Expand Down

0 comments on commit 4542bbc

Please sign in to comment.