LCOV - code coverage report
Current view: top level - src/98_main - conducti.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 86.4 % 44 38
Test Date: 2026-11-12 07:43:35 Functions: 100.0 % 2 2
Branches: 45.0 % 20 9

             Branch data     Line data    Source code
       1                 :             : !!****p* ABINIT/conducti
       2                 :             : !! NAME
       3                 :             : !! conducti
       4                 :             : !!
       5                 :             : !! FUNCTION
       6                 :             : !! This program computes the elements of the optical frequency dependent
       7                 :             : !! conductivity tensor and the conductivity along the three principal axes
       8                 :             : !! from the Kubo-Greenwood formula.
       9                 :             : !!
      10                 :             : !! COPYRIGHT
      11                 :             : !! Copyright (C) 2006-2026 ABINIT group (FJ,SMazevet)
      12                 :             : !! This file is distributed under the terms of the
      13                 :             : !! GNU General Public License, see ~abinit/COPYING
      14                 :             : !! or http://www.gnu.org/copyleft/gpl.txt .
      15                 :             : !! For the initials of contributors, see ~abinit/doc/developers/contributors.txt .
      16                 :             : !!
      17                 :             : !! SOURCE
      18                 :             : 
      19                 :             : #if defined HAVE_CONFIG_H
      20                 :             : #include "config.h"
      21                 :             : #endif
      22                 :             : 
      23                 :             : #include "abi_common.h"
      24                 :             : 
      25                 :          10 : program conducti
      26                 :             : 
      27                 :          10 :  use defs_basis
      28                 :             :  USE_MPI
      29                 :             :  use m_xmpi
      30                 :             :  use m_errors
      31                 :             : #ifdef HAVE_MEM_PROFILING
      32                 :             :  use m_abicore
      33                 :             : #endif
      34                 :             :  use m_conducti
      35                 :             : 
      36                 :             :  use m_io_tools,  only : open_file
      37                 :             :  use m_time,      only : timein
      38                 :             :  use m_fstrings,  only : sjoin, itoa
      39                 :             :  use m_nctk,      only : nctk_test_mpiio
      40                 :             :  use m_paw_optics,only : linear_optics_paw
      41                 :             : 
      42                 :             :  implicit none
      43                 :             : 
      44                 :             : !Local variables-------------------------------
      45                 :             : !scalars
      46                 :             :  integer,parameter :: master=0
      47                 :             :  integer :: incpaw,nproc,comm,inunt,my_rank,mpierr
      48                 :             :  real(dp) :: tcpu,tcpui,twall,twalli
      49                 :             :  character(len=fnlen) :: filnam,filnam_out
      50                 :             :  character(len=500) :: msg
      51                 :             : !arrays
      52                 :             :  real(dp) :: tsec(2)
      53                 :             : ! *********************************************************************************
      54                 :             : 
      55                 :             : !Change communicator for I/O (mandatory!)
      56                 :          10 :  call abi_io_redirect(new_io_comm=xmpi_world)
      57                 :             : 
      58                 :             : !Start, MPI init, ...
      59                 :          10 :  call xmpi_init()
      60                 :          10 :  call timein(tcpui,twalli)
      61                 :             : 
      62                 :             : !Initialize memory profiling if it is activated
      63                 :             : !if a full abimem.mocc report is desired, set the argument of abimem_init to "2" instead of "0"
      64                 :             : !note that abimem.mocc files can easily be multiple GB in size so don't use this option normally
      65                 :             : #ifdef HAVE_MEM_PROFILING
      66                 :             :  call abimem_init(0)
      67                 :             : #endif
      68                 :             : 
      69                 :             : !Test if the netcdf library supports MPI-IO
      70                 :          10 :  call nctk_test_mpiio(print_warning=.false.)
      71                 :             : 
      72                 :             : !Extract MPI parallelization data
      73                 :          10 :  comm = xmpi_world
      74                 :          10 :  nproc = xmpi_comm_size(comm)
      75                 :          10 :  my_rank = xmpi_comm_rank(comm)
      76                 :             : 
      77                 :             : #if defined FC_NVHPC
      78                 :             :  if (nproc == -1) write(std_out, *)"NVHPC raises an internal compiler error that is fixed by this print statement."
      79                 :             : #endif
      80                 :             : 
      81                 :             : !Read some input data
      82         [ +  - ]:          10 :  if (my_rank==master) then
      83                 :             : 
      84                 :             : !  Read data file name
      85                 :          10 :    write(std_out,'(a)')' Please, give the name of the data file ...'
      86                 :          10 :    read(std_in, '(a)') filnam
      87         [ +  - ]:          10 :    write(std_out,'(2a)')' The name of the data file is: ',trim(filnam)
      88                 :             : 
      89                 :             : #if defined FC_NVHPC
      90                 :             :    if (nproc == -1) write(std_out, *)"NVHPC raises an internal compiler error that is fixed by this print statement."
      91                 :             : #endif
      92                 :             : 
      93                 :             : !  Read type of calculation
      94         [ +  - ]:          10 :    if (open_file(filnam,msg,newunit=inunt,form='formatted')==0) then
      95                 :          10 :      rewind(inunt)
      96                 :          10 :      read(inunt,*) incpaw
      97                 :          10 :      close(inunt)
      98                 :             :    else
      99                 :           0 :      ABI_ERROR('Error opening data file!')
     100                 :             :    end if
     101                 :             : 
     102                 :             : !  Read output file name
     103                 :          10 :    write(std_out,'(a)')' Give the name of the output file ...'
     104                 :          10 :    read(std_in, '(a)') filnam_out
     105                 :          10 :    write(std_out,'(2a)')' The name of the output file is: ',filnam_out
     106                 :             :  end if
     107                 :             : 
     108                 :             : !Broadcast input data
     109                 :          10 :  call xmpi_bcast(incpaw,master,comm,mpierr)
     110                 :          10 :  call xmpi_bcast(filnam,master,comm,mpierr)
     111                 :          10 :  call xmpi_bcast(filnam_out,master,comm,mpierr)
     112                 :             : 
     113                 :             :  !Call main routine
     114                 :           2 :  select case (incpaw)
     115                 :             :  case (1)
     116         [ +  - ]:           4 :    if (my_rank==master) then
     117                 :           2 :      call conducti_nc(filnam,filnam_out)
     118                 :             :    end if
     119                 :             :  case (2)
     120                 :           2 :    call conducti_paw(filnam,filnam_out)
     121                 :             :  case (3)
     122         [ #  # ]:           0 :    if (my_rank==master) then
     123                 :           0 :      call linear_optics_paw(filnam,filnam_out)
     124                 :             :    end if
     125                 :             :  case (4)
     126                 :           2 :    call conducti_paw(filnam,filnam_out)
     127                 :           2 :    call conducti_paw_core(filnam,filnam_out,with_absorption=.true.,with_emissivity=.true.)
     128                 :             :  case (5)
     129                 :           4 :    call conducti_paw_core(filnam,filnam_out,with_absorption=.true.)
     130                 :             :  case (6)
     131                 :           0 :    call conducti_paw_core(filnam,filnam_out,with_absorption=.true.,with_emissivity=.true.)
     132                 :             :  case (42)
     133                 :           0 :    call conducti_paw(filnam,filnam_out,varocc=1)
     134                 :             :  case default
     135   [ +  +  -  +  :          10 :    ABI_ERROR(sjoin("Wrong incpaw:", itoa(incpaw)))
             +  -  -  - ]
     136                 :             :  end select
     137                 :             : 
     138                 :             : !End, memory cleaning
     139                 :          10 :  call timein(tcpu,twall)
     140                 :          10 :  tsec(1)=tcpu-tcpui
     141                 :          10 :  tsec(2)=twall-twalli
     142         [ +  - ]:          10 :  if (my_rank==0) then
     143                 :             :    write(std_out, '(a,a,a,f13.1,a,f13.1)' ) &
     144                 :          10 :     '-',ch10,'- Proc.   0 individual time (sec): cpu=',tsec(1),'  wall=',tsec(2)
     145                 :             :  end if
     146                 :             : 
     147                 :          10 :  call abinit_doctor("__conducti")
     148                 :          10 :  call xmpi_end()
     149                 :             : 
     150                 :           0 :  end program conducti
     151                 :             : !!***
        

Generated by: LCOV version 2.3-1