From 6874edb32480064e54afd00e0d27930e6af6e409 Mon Sep 17 00:00:00 2001 From: Augustin Lu Date: Fri, 7 Aug 2026 19:56:41 +0900 Subject: [PATCH 1/3] Modified cell volume print format. --- src/control.f90 | 6 ++++-- src/io_module.f90 | 6 +++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/control.f90 b/src/control.f90 index a39f48f7e..9a996c1f5 100644 --- a/src/control.f90 +++ b/src/control.f90 @@ -2582,7 +2582,8 @@ subroutine cell_sqnm(fixed_potential, vary_mu, total_energy) iter, max_stress*volume, enthalpy1, en_conv*dH if (iprint_MD > 1) then write(io_lun,'(4x,"Maximum stress ",e14.6," Ha/Bohr**3")') max_stress - write(io_lun,'(4x,"Simulation cell volume ",e14.6," Bohr**3")') volume + write(io_lun,'(4x,"Simulation cell volume ",f18.6,1x,a2,a3)') & + volume*dist_conv**3, d_units(dist_units), '**3' write(io_lun,'(4x,"Maximum stress ",f14.6," GPa")') & max_stress*HaBohr3ToGPa write(io_lun,'(4x,"Stress tolerance: ",f14.6," GPa")') & @@ -4059,7 +4060,8 @@ subroutine full_cg_run_double_loop_alt(fixed_potential, vary_mu, total_energy) write(io_lun,'(4x,"Force tolerance: ",f19.8)') MDcgtol write(io_lun,'(4x,"Maximum stress ",e14.6," Ha/Bohr**3")') & max_stress - write(io_lun,'(4x,"Simulation cell volume ",e14.6," Bohr**3")') volume + write(io_lun,'(4x,"Simulation cell volume ",f18.6,1x,a2,a3)') & + volume*dist_conv**3, d_units(dist_units), '**3' write(io_lun,'(4x,"Maximum stress ",f14.6," GPa")') & max_stress*HaBohr3ToGPa write(io_lun,'(4x,"Stress tolerance: ",f14.6," GPa")') & diff --git a/src/io_module.f90 b/src/io_module.f90 index 003f83ffd..0067413d0 100644 --- a/src/io_module.f90 +++ b/src/io_module.f90 @@ -3287,11 +3287,11 @@ subroutine print_atomic_positions integer :: i - if(inode==ionode) then - write(io_lun,fmt='(/4x,"Simulation cell dimensions: ",f10.4,a3," x ",f10.4,a3," x ",f10.4,a3)') & + if(inode==ionode) then + write(io_lun,fmt='(/4x,"Simulation cell dimensions: ",f18.4,1x,a2," x ",f18.4,1x,a2," x ",f18.4,1x,a2)') & r_super_x*dist_conv, d_units(dist_units), r_super_y*dist_conv, d_units(dist_units), & r_super_z*dist_conv, d_units(dist_units) - write(io_lun,fmt='(/4x,"Simulation cell volume: ",f10.4,a3,a3)') & + write(io_lun,fmt='(/4x,"Simulation cell volume: ",f18.6,1x,a2,a3)') & volume*dist_conv*dist_conv*dist_conv, d_units(dist_units),'**3' if(flag_coords_xyz) then write(io_lun,fmt='(6x," X Y Z")') From 77c4148567531d2f1407ea1f8b79d53d477c762e Mon Sep 17 00:00:00 2001 From: Augustin Lu Date: Thu, 13 Aug 2026 14:31:45 +0900 Subject: [PATCH 2/3] Fix atomic coordinate unit conversion in output. --- src/io_module.f90 | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/src/io_module.f90 b/src/io_module.f90 index 0067413d0..31472c2f3 100644 --- a/src/io_module.f90 +++ b/src/io_module.f90 @@ -3289,29 +3289,32 @@ subroutine print_atomic_positions if(inode==ionode) then write(io_lun,fmt='(/4x,"Simulation cell dimensions: ",f18.4,1x,a2," x ",f18.4,1x,a2," x ",f18.4,1x,a2)') & - r_super_x*dist_conv, d_units(dist_units), r_super_y*dist_conv, d_units(dist_units), & - r_super_z*dist_conv, d_units(dist_units) + r_super_x * dist_conv, d_units(dist_units), r_super_y * dist_conv, d_units(dist_units), & + r_super_z * dist_conv, d_units(dist_units) write(io_lun,fmt='(/4x,"Simulation cell volume: ",f18.6,1x,a2,a3)') & - volume*dist_conv*dist_conv*dist_conv, d_units(dist_units),'**3' + volume * dist_conv * dist_conv * dist_conv, d_units(dist_units),'**3' if(flag_coords_xyz) then write(io_lun,fmt='(6x," X Y Z")') if(dist_units==bohr) then write(io_lun,fmt='(/6x,"Atomic coordinates in XYZ format (",a2,")")') "A " do i = 1, ni_in_cell - write (io_lun,fmt='(4x, a2, 3f10.4)') pte(atomicnum(species_glob(i))), atom_coord(1:3,i)*BohrToAng + write (io_lun,fmt='(4x, a2, 3f10.4)') pte(atomicnum(species_glob(i))), & + atom_coord(1:3,i) * BohrToAng end do write(io_lun,fmt='(8x,"N.B. units above converted to Angstroms for xyz output")') else write(io_lun,fmt='(/6x,"Atomic coordinates (",a2,")")') d_units(dist_units) do i = 1, ni_in_cell - write (io_lun,fmt='(4x, a2, 3f10.4)') pte(atomicnum(species_glob(i))), atom_coord(1:3,i) + write (io_lun,fmt='(4x, a2, 3f10.4)') pte(atomicnum(species_glob(i))), & + atom_coord(1:3,i) * dist_conv end do end if else write(io_lun,fmt='(/6x,"Atomic coordinates (",a2,")")') d_units(dist_units) write(io_lun,fmt='(6x," Atom X Y Z Species")') do i = 1, ni_in_cell - write (io_lun,fmt='(6x, i7, 3f10.4, 6x, i3)') i,atom_coord(1:3,i), species_glob(i) + write (io_lun,fmt='(6x, i7, 3f10.4, 6x, i3)') i, atom_coord(1:3,i) * dist_conv, & + species_glob(i) end do end if end if From 0f06fa543fdd2c32b4a0d540ed8bbd08549c6ba1 Mon Sep 17 00:00:00 2001 From: Augustin Lu Date: Thu, 13 Aug 2026 15:08:51 +0900 Subject: [PATCH 3/3] Removed flag_coords_xyz and related keyword IO.AtomCoordsXYZ. --- src/control.f90 | 8 +++++-- src/initial_read_module.f90 | 5 ++-- src/io_module.f90 | 46 +++++++++++++------------------------ 3 files changed, 25 insertions(+), 34 deletions(-) diff --git a/src/control.f90 b/src/control.f90 index 9a996c1f5..ca209ac6f 100644 --- a/src/control.f90 +++ b/src/control.f90 @@ -2243,6 +2243,8 @@ end subroutine sqnm !! MODIFICATION HISTORY !! 2022/08/17 15:18 dave !! Introduced scaling to improve conditioning in arxiv/2206.07339 + !! 2026/08/13 Augustin Lu + !! Set a wider format and user-selected units for simulation cell volume output. !! SOURCE !! subroutine cell_sqnm(fixed_potential, vary_mu, total_energy) @@ -2583,7 +2585,7 @@ subroutine cell_sqnm(fixed_potential, vary_mu, total_energy) if (iprint_MD > 1) then write(io_lun,'(4x,"Maximum stress ",e14.6," Ha/Bohr**3")') max_stress write(io_lun,'(4x,"Simulation cell volume ",f18.6,1x,a2,a3)') & - volume*dist_conv**3, d_units(dist_units), '**3' + volume * dist_conv**3, d_units(dist_units), '**3' write(io_lun,'(4x,"Maximum stress ",f14.6," GPa")') & max_stress*HaBohr3ToGPa write(io_lun,'(4x,"Stress tolerance: ",f14.6," GPa")') & @@ -3765,6 +3767,8 @@ end subroutine full_double_loop ! alternating full ionic and full cell optimisation (full_cg_run_double_loop) ! and full ionic with single line minimisation cell optimisation (this routine) ! Use cell optimisation method 4 for this + ! 2026/08/13 Augustin Lu + ! Set a wider format and user-selected units for simulation cell volume output. subroutine full_cg_run_double_loop_alt(fixed_potential, vary_mu, total_energy) ! Module usage @@ -4061,7 +4065,7 @@ subroutine full_cg_run_double_loop_alt(fixed_potential, vary_mu, total_energy) write(io_lun,'(4x,"Maximum stress ",e14.6," Ha/Bohr**3")') & max_stress write(io_lun,'(4x,"Simulation cell volume ",f18.6,1x,a2,a3)') & - volume*dist_conv**3, d_units(dist_units), '**3' + volume * dist_conv**3, d_units(dist_units), '**3' write(io_lun,'(4x,"Maximum stress ",f14.6," GPa")') & max_stress*HaBohr3ToGPa write(io_lun,'(4x,"Stress tolerance: ",f14.6," GPa")') & diff --git a/src/initial_read_module.f90 b/src/initial_read_module.f90 index 08b6065ec..6c99002a7 100644 --- a/src/initial_read_module.f90 +++ b/src/initial_read_module.f90 @@ -874,6 +874,8 @@ end subroutine read_and_write !! Set flag_out_wf = .true. expricitly when flag_write_projected_DOS is .true. !! 2026/07/03 09:47 dave !! Turn off WF and/or pDOS output except for static, diagonalisation runs + !! 2026/08/13 Augustin Lu + !! Remove the obsolete IO.AtomCoordsXYZ input option. !! TODO !! SOURCE !! @@ -995,7 +997,7 @@ subroutine read_input(start, start_L, titles, vary_mu,& pdb_output, banner, get_file_name, time_max, & flag_MatrixFile_RankFromZero, flag_MatrixFile_BinaryFormat, & flag_MatrixFile_BinaryFormat_Grab, flag_MatrixFile_BinaryFormat_Dump, & - flag_MatrixFile_BinaryFormat_Dump_END, atom_output_threshold, flag_coords_xyz + flag_MatrixFile_BinaryFormat_Dump_END, atom_output_threshold use group_module, only: part_method, HILBERT, PYTHON use H_matrix_module, only: flag_write_locps, flag_dump_locps, & @@ -1253,7 +1255,6 @@ subroutine read_input(start, start_L, titles, vary_mu,& InitAtomicDistance_min = fdf_double('IO.InitAtomicDistance_min', 0.5_double) end if atom_output_threshold = fdf_integer('IO.AtomOutputThreshold',200) - flag_coords_xyz = fdf_boolean('IO.AtomCoordsXYZ',.false.) call my_barrier() ! ! diff --git a/src/io_module.f90 b/src/io_module.f90 index 31472c2f3..f69f81033 100644 --- a/src/io_module.f90 +++ b/src/io_module.f90 @@ -78,6 +78,8 @@ !! they don't exist !! 2019/11/04 11:36 dave !! Removed redundant code (old SFC routines) +!! 2026/08/13 Augstin Lu +!! Removed unused flag_coords_xyz module io_module use datatypes, only: double @@ -114,7 +116,6 @@ module io_module ! Moved here from read_and_write so that it can be used for extended XYZ output ! Moved here from initial_read_module to slove the dependence problem character(len=80), save :: titles - logical :: flag_coords_xyz !!*** @@ -3271,17 +3272,19 @@ end subroutine print_process_info !! CREATION DATE !! 2020/03/11 !! MODIFICATION HISTORY + !! 2026/08/13 Augustin Lu + !! Set a wider format and user-selected units for cell output + !! Convert printed atomic coordinates to the selected distance units + !! Remove the obsolete IO.AtomCoordsXYZ output mode. !! !! SOURCE !! subroutine print_atomic_positions - use global_module, only: atom_coord, iprint_MD, ni_in_cell, species_glob - use dimens, only: r_super_x, r_super_y, r_super_z, atomicnum, volume + use global_module, only: atom_coord, ni_in_cell, species_glob + use dimens, only: r_super_x, r_super_y, r_super_z, volume use GenComms, only: inode, ionode - use units, only: dist_conv, d_units, dist_units, BohrToAng, bohr - use periodic_table, only: pte - use pseudo_tm_info, only: pseudo + use units, only: dist_conv, d_units, dist_units implicit none @@ -3293,31 +3296,14 @@ subroutine print_atomic_positions r_super_z * dist_conv, d_units(dist_units) write(io_lun,fmt='(/4x,"Simulation cell volume: ",f18.6,1x,a2,a3)') & volume * dist_conv * dist_conv * dist_conv, d_units(dist_units),'**3' - if(flag_coords_xyz) then - write(io_lun,fmt='(6x," X Y Z")') - if(dist_units==bohr) then - write(io_lun,fmt='(/6x,"Atomic coordinates in XYZ format (",a2,")")') "A " - do i = 1, ni_in_cell - write (io_lun,fmt='(4x, a2, 3f10.4)') pte(atomicnum(species_glob(i))), & - atom_coord(1:3,i) * BohrToAng - end do - write(io_lun,fmt='(8x,"N.B. units above converted to Angstroms for xyz output")') - else - write(io_lun,fmt='(/6x,"Atomic coordinates (",a2,")")') d_units(dist_units) - do i = 1, ni_in_cell - write (io_lun,fmt='(4x, a2, 3f10.4)') pte(atomicnum(species_glob(i))), & - atom_coord(1:3,i) * dist_conv - end do - end if - else - write(io_lun,fmt='(/6x,"Atomic coordinates (",a2,")")') d_units(dist_units) - write(io_lun,fmt='(6x," Atom X Y Z Species")') - do i = 1, ni_in_cell - write (io_lun,fmt='(6x, i7, 3f10.4, 6x, i3)') i, atom_coord(1:3,i) * dist_conv, & - species_glob(i) - end do - end if + write(io_lun,fmt='(/6x,"Atomic coordinates (",a2,")")') d_units(dist_units) + write(io_lun,fmt='(6x," Atom X Y Z Species")') + do i = 1, ni_in_cell + write (io_lun,fmt='(6x, i7, 3f10.4, 6x, i3)') i, atom_coord(1:3,i) * dist_conv, & + species_glob(i) + end do end if + return end subroutine print_atomic_positions