LCOV - code coverage report
Current view: top level - src/78_effpot - m_lattice_lwf_mover.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 53 0
Test Date: 2026-11-10 11:05:29 Functions: 0.0 % 4 0
Branches: 0.0 % 34 0

             Branch data     Line data    Source code
       1                 :             : !!****m* ABINIT/m_lattice_lwf_mover
       2                 :             : !! NAME
       3                 :             : !! m_lattice_lwf_mover
       4                 :             : !!
       5                 :             : !! FUNCTION
       6                 :             : !! This module contains the mover for coupled lattice lwf dynamics
       7                 :             : !!
       8                 :             : !!
       9                 :             : !! COPYRIGHT
      10                 :             : !! Copyright (C) 2001-2026 ABINIT group (hexu)
      11                 :             : !! This file is distributed under the terms of the
      12                 :             : !! GNU General Public License, see ~abinit/COPYING
      13                 :             : !! or http://www.gnu.org/copyleft/gpl.txt .
      14                 :             : !! For the initials of contributors, see ~abinit/doc/developers/contributors.txt .
      15                 :             : !!
      16                 :             : !! SOURCE
      17                 :             : 
      18                 :             : #if defined HAVE_CONFIG_H
      19                 :             : #include "config.h"
      20                 :             : #endif
      21                 :             : #include "abi_common.h"
      22                 :             : 
      23                 :             : module  m_lattice_lwf_mover
      24                 :             : 
      25                 :             :   use defs_basis
      26                 :             :   use m_errors
      27                 :             :   use m_abicore
      28                 :             :   use m_xmpi
      29                 :             :   use m_io_tools, only : get_unit, open_file, close_unit
      30                 :             :   use m_mpi_scheduler, only: mpi_scheduler_t, init_mpi_info
      31                 :             : 
      32                 :             : 
      33                 :             :   use m_abstract_potential, only: abstract_potential_t
      34                 :             :   use m_abstract_mover, only: abstract_mover_t
      35                 :             :   use m_lattice_mover, only: lattice_mover_t
      36                 :             :   use m_lwf_mover, only: lwf_mover_t
      37                 :             :   use m_hashtable_strval, only: hash_table_t
      38                 :             : 
      39                 :             :   implicit none
      40                 :             : 
      41                 :             :   private
      42                 :             : 
      43                 :             : !!***
      44                 :             : 
      45                 :             :   type, public, extends(abstract_mover_t) :: lattice_lwf_mover_t
      46                 :             :     class(lattice_mover_t), pointer :: lattice_mover => null()
      47                 :             :     class(lwf_mover_t),    pointer :: lwf_mover => null()
      48                 :             :   CONTAINS
      49                 :             :     procedure :: initialize
      50                 :             :     procedure :: finalize
      51                 :             :     procedure :: run_time
      52                 :             : 
      53                 :             :  end type lattice_lwf_mover_t
      54                 :             : 
      55                 :             : contains
      56                 :           0 :   subroutine initialize(self, lattice_mover, lwf_mover)
      57                 :             :     class(lattice_lwf_mover_t),intent(inout) :: self
      58                 :             :     class(lattice_mover_t), target:: lattice_mover
      59                 :             :     class(lwf_mover_t), target:: lwf_mover
      60                 :           0 :     self%lattice_mover=>lattice_mover
      61                 :           0 :     self%lwf_mover=>lwf_mover
      62                 :           0 :     self%dt=self%lattice_mover%dt
      63                 :           0 :     self%thermal_time=self%lattice_mover%thermal_time
      64                 :           0 :   end subroutine initialize
      65                 :             : 
      66                 :           0 :   subroutine finalize(self)
      67                 :             :     class(lattice_lwf_mover_t),intent(inout) :: self
      68                 :           0 :     nullify(self%lattice_mover)
      69                 :           0 :     nullify(self%lwf_mover)
      70                 :           0 :   end subroutine finalize
      71                 :             : 
      72   [ #  #  #  #  :           0 :   subroutine run_time(self, effpot, displacement, strain, spin, lwf, energy_table)
          #  #  #  #  #  
             #  #  #  #  
                      # ]
      73                 :             :     class(lattice_lwf_mover_t),intent(inout) :: self
      74                 :             :     ! array of effective potentials so that there can be multiple of them.
      75                 :             :     class(abstract_potential_t), intent(inout) :: effpot
      76                 :             :     real(dp), optional, intent(inout) :: displacement(:,:), strain(:,:), spin(:,:), lwf(:)
      77                 :             :     type(hash_table_t), optional, intent(inout) :: energy_table
      78                 :             :     integer :: i, nstep
      79                 :             :     character(len=90) :: msg
      80         [ #  # ]:           0 :     if(present(displacement) .or. present(strain)) then
      81                 :           0 :        ABI_ERROR("displacement and strain should not be input for lattice mover")
      82                 :             :     end if
      83                 :           0 :     ABI_UNUSED_A(effpot)
      84                 :           0 :     ABI_UNUSED_A(spin)
      85                 :           0 :     ABI_UNUSED_A(lwf)
      86                 :           0 :     ABI_UNUSED_A(energy_table)
      87                 :             : 
      88                 :             : 
      89                 :           0 :     msg=repeat("=", 90)
      90                 :           0 :     call wrtout(std_out,msg,'COLL')
      91                 :           0 :     call wrtout(ab_out, msg, 'COLL')
      92                 :           0 :     write(msg, '(A22)') "Lattice dynamic steps:"
      93                 :           0 :     call wrtout(std_out,msg,'COLL')
      94                 :           0 :     call wrtout(ab_out, msg, 'COLL')
      95                 :           0 :     msg=repeat("=", 90)
      96                 :           0 :     call wrtout(std_out,msg,'COLL')
      97                 :           0 :     call wrtout(ab_out, msg, 'COLL')
      98                 :             : 
      99                 :             :     write(msg, "(A13, 4X, A15, 4X, A15, 4X, A15, 4X, A15)") &
     100                 :           0 :             &  "Iteration", "temperature(K)", "Ekin(Ha/uc)", &
     101                 :           0 :             & "Epot(Ha/uc)", "ETOT(Ha/uc)"
     102                 :           0 :     call wrtout(std_out,msg,'COLL')
     103                 :           0 :     call wrtout(ab_out, msg, 'COLL')
     104                 :             : 
     105         [ #  # ]:           0 :     nstep=floor(self%lattice_mover%thermal_time/self%lattice_mover%dt)
     106         [ #  # ]:           0 :     do i =1, nstep
     107                 :             :        call self%lattice_mover%run_one_step(effpot=effpot, displacement=self%lattice_mover%displacement, &
     108   [ #  #  #  # ]:           0 :             & strain=strain, spin=spin, lwf=self%lwf_mover%lwf, energy_table=energy_table)
     109                 :             :        !call self%lwf_mover%run_one_step(effpot=effpot, displacement=self%lattice_mover%displacement, strain=strain, spin=spin, &
     110                 :             :        !     & lwf=lwf, energy_table=energy_table)
     111                 :           0 :        call self%lwf_mover%hist%set_hist(lwf=self%lwf_mover%lwf, energy=self%lattice_mover%energy )
     112                 :             :     end do
     113                 :             : 
     114         [ #  # ]:           0 :     nstep=floor(self%lattice_mover%total_time/self%lattice_mover%dt)
     115         [ #  # ]:           0 :     do i =1, nstep
     116                 :             :        call self%lattice_mover%run_one_step(effpot=effpot, displacement=self%lattice_mover%displacement, &
     117                 :           0 :                                 & lwf=self%lwf_mover%lwf, energy_table=energy_table)
     118                 :           0 :        call self%lwf_mover%hist%set_hist(lwf=self%lwf_mover%lwf, energy=self%lattice_mover%energy )
     119                 :             : 
     120         [ #  # ]:           0 :        if(modulo(i, self%lattice_mover%params%nctime)==0) then
     121                 :           0 :           write(msg, "(I13, 4X, F15.5, 4X, ES15.5, 4X, ES15.5, 4X, ES15.5)")  i, self%lattice_mover%T_ob*Ha_K, &
     122                 :           0 :                & self%lattice_mover%Ek/self%lattice_mover%supercell%ncell, &
     123                 :           0 :                & self%lattice_mover%energy/self%lattice_mover%supercell%ncell, &
     124                 :           0 :                & (self%lattice_mover%Ek+self%lattice_mover%energy)/self%lattice_mover%supercell%ncell
     125                 :           0 :           call wrtout(std_out,msg,'COLL')
     126                 :           0 :           call wrtout(ab_out, msg, 'COLL')
     127                 :             : 
     128   [ #  #  #  # ]:           0 :           self%lattice_mover%current_xcart(:, :) = self%lattice_mover%supercell%lattice%xcart(:,:)+self%lattice_mover%displacement
     129                 :             :           call self%lattice_mover%ncfile%write_one_step(self%lattice_mover%current_xcart, &
     130                 :           0 :                & self%lattice_mover%current_vcart, self%lattice_mover%energy, self%lattice_mover%Ek)
     131                 :             : 
     132                 :           0 :           call self%lwf_mover%ncfile%write_one_step(self%lwf_mover%hist)
     133                 :             : 
     134                 :             :        end if
     135                 :             :     end do
     136                 :             : 
     137                 :           0 :     msg=repeat("=", 90)
     138                 :           0 :     call wrtout(std_out,msg,'COLL')
     139                 :           0 :     call wrtout(ab_out, msg, 'COLL')
     140                 :           0 :   end subroutine run_time
     141                 :             : 
     142                 :           0 : end module m_lattice_lwf_mover
        

Generated by: LCOV version 2.3-1