Commit 4c432f77 authored by Matthias Redies's avatar Matthias Redies

checkout develop

parent 5a88c24c
......@@ -310,30 +310,12 @@ CONTAINS
!write (*,*) "shape(grad%sigma) = ", shape(transpose(grad%sigma))
!write (*,*) "shape(grad%lapl) = ", shape(grad%laplace)
!kinEnergyDen_libXC = 0.3 * (3.0*pi_const**2)**(2./3.) * rh**(5./3.) &
!+ 1.0/72.0 * transpose(abs(grad%sigma))/rh &
!+ 1.0/6.0 * grad%laplace
!pkzb_zaehler = (1./8. * transpose(abs(grad%sigma))/rh)**2
!pkzb_nenner = kinEnergyDen_libxc**2
!pkzb_ratio = pkzb_zaehler/pkzb_nenner
!write (*,*) "pkzb ratio:"
!write (*,*) "min = ", minval(pkzb_ratio)
!write (*,*) "max = ", maxval(pkzb_ratio)
write (filename, '("kED_libxc_", I0.6, ".npy")') size(kinEnergyDen_libxc, dim=2)
call save_npy(filename, transpose(kinEnergyDen_libxc))
write (filename, '("sigma_", I0.6, ".npy")') size(grad%sigma, dim=2)
call save_npy(filename, grad%sigma)
!write (filename, '("pkzb_zaehler_", I0.6, ".npy")') size(kinEnergyDen_libxc, dim=1)
!call save_npy(filename, transpose(pkzb_zaehler))
!write (filename, '("pkzb_nenner_", I0.6, ".npy")') size(kinEnergyDen_libxc, dim=1)
!call save_npy(filename, transpose(pkzb_nenner))
!write (filename, '("pkzb_ratio_", I0.6, ".npy")') size(kinEnergyDen_libxc, dim=1)
!call save_npy(filename, transpose(pkzb_ratio))
exc = 0.0
excc = 0.0
call xc_f03_mgga_exc(xcpot%exc_func_x, SIZE(rh,1), TRANSPOSE(rh), grad%sigma, &
......
!--------------------------------------------------------------------------------
! Copyright (c) 2016 Peter Grünberg Institut, Forschungszentrum Jülich, Germany
! This file is part of FLEUR and available as free software under the conditions
! of the MIT license as expressed in the LICENSE file in more detail.
!--------------------------------------------------------------------------------
MODULE m_vmt_xc
USE m_judft
!.....------------------------------------------------------------------
! Calculate the GGA xc-potential in the MT-spheres
!.....------------------------------------------------------------------
! instead of vmtxcor.f: the different exchange-correlation
! potentials defined through the key icorr are called through
! the driver subroutine vxcallg.f, subroutines vectorized
! ** r.pentcheva 22.01.96
! *********************************************************
! angular mesh calculated on speacial gauss-legendre points
! in order to use orthogonality of lattice harmonics and
! avoid a least square fit
! ** r.pentcheva 04.03.96
! *********************************************************
! MPI and OpenMP parallelization
! U.Alekseeva, February 2017
! *********************************************************
CONTAINS
SUBROUTINE vmt_xc(DIMENSION,mpi,sphhar,atoms,&
den,xcpot,input,sym, obsolete,EnergyDen,vTot,vx,exc)
use m_npy
!--------------------------------------------------------------------------------
! Copyright (c) 2016 Peter Grünberg Institut, Forschungszentrum Jülich, Germany
! This file is part of FLEUR and available as free software under the conditions
! of the MIT license as expressed in the LICENSE file in more detail.
!--------------------------------------------------------------------------------
MODULE m_vmt_xc
USE m_judft
!.....------------------------------------------------------------------
! Calculate the GGA xc-potential in the MT-spheres
!.....------------------------------------------------------------------
! instead of vmtxcor.f: the different exchange-correlation
! potentials defined through the key icorr are called through
! the driver subroutine vxcallg.f, subroutines vectorized
! ** r.pentcheva 22.01.96
! *********************************************************
! angular mesh calculated on speacial gauss-legendre points
! in order to use orthogonality of lattice harmonics and
! avoid a least square fit
! ** r.pentcheva 04.03.96
! *********************************************************
! MPI and OpenMP parallelization
! U.Alekseeva, February 2017
! *********************************************************
CONTAINS
SUBROUTINE vmt_xc(DIMENSION,mpi,sphhar,atoms,&
den,xcpot,input,sym, obsolete,EnergyDen,vTot,vx,exc)
use m_npy
#include"cpp_double.h"
use m_libxc_postprocess_gga
USE m_mt_tofrom_grid
USE m_types_xcpot_inbuild
USE m_types
USE m_metagga
USE m_juDFT_string
IMPLICIT NONE
CLASS(t_xcpot),INTENT(INOUT) :: xcpot
TYPE(t_dimension),INTENT(IN) :: dimension
TYPE(t_mpi),INTENT(IN) :: mpi
TYPE(t_obsolete),INTENT(IN) :: obsolete
TYPE(t_input),INTENT(IN) :: input
TYPE(t_sym),INTENT(IN) :: sym
TYPE(t_sphhar),INTENT(IN) :: sphhar
TYPE(t_atoms),INTENT(IN) :: atoms
TYPE(t_potden),INTENT(IN) :: den,EnergyDen
TYPE(t_potden),INTENT(INOUT) :: vTot,vx,exc
use m_libxc_postprocess_gga
USE m_mt_tofrom_grid
USE m_types_xcpot_inbuild
USE m_types
USE m_metagga
USE m_juDFT_string
IMPLICIT NONE
CLASS(t_xcpot),INTENT(INOUT) :: xcpot
TYPE(t_dimension),INTENT(IN) :: dimension
TYPE(t_mpi),INTENT(IN) :: mpi
TYPE(t_obsolete),INTENT(IN) :: obsolete
TYPE(t_input),INTENT(IN) :: input
TYPE(t_sym),INTENT(IN) :: sym
TYPE(t_sphhar),INTENT(IN) :: sphhar
TYPE(t_atoms),INTENT(IN) :: atoms
TYPE(t_potden),INTENT(IN) :: den,EnergyDen
TYPE(t_potden),INTENT(INOUT) :: vTot,vx,exc
#ifdef CPP_MPI
include "mpif.h"
include "mpif.h"
#endif
! ..
! .. Local Scalars ..
TYPE(t_gradients) :: grad, tmp_grad
TYPE(t_xcpot_inbuild) :: xcpot_tmp
TYPE(t_potden) :: vTot_tmp
REAL, ALLOCATABLE :: ch(:,:), ED_rs(:,:), vTot_rs(:,:), kinED_rs(:,:)
INTEGER :: n,nsp,nt,jr
REAL :: divi
! ..
!locals for mpi
integer :: ierr
integer:: n_start,n_stride
REAL:: v_x((atoms%lmaxd+1+MOD(atoms%lmaxd+1,2))*(2*atoms%lmaxd+1)*atoms%jmtd,input%jspins)
REAL:: v_xc((atoms%lmaxd+1+MOD(atoms%lmaxd+1,2))*(2*atoms%lmaxd+1)*atoms%jmtd,input%jspins)
REAL:: e_xc((atoms%lmaxd+1+MOD(atoms%lmaxd+1,2))*(2*atoms%lmaxd+1)*atoms%jmtd,1)
REAL,ALLOCATABLE:: xcl(:,:)
LOGICAL :: lda_atom(atoms%ntype),l_libxc, perform_MetaGGA
!.....------------------------------------------------------------------
perform_MetaGGA = ALLOCATED(EnergyDen%mt) .AND. xcpot%exc_is_MetaGGA()
lda_atom=.FALSE.; l_libxc=.FALSE.
SELECT TYPE(xcpot)
TYPE IS(t_xcpot_inbuild)
lda_atom=xcpot%lda_atom
IF (ANY(lda_atom)) THEN
IF((.NOT.xcpot%is_name("pw91"))) &
CALL judft_warn("Using locally LDA only possible with pw91 functional")
CALL xcpot_tmp%init("l91",.FALSE.,atoms%ntype)
ALLOCATE(xcl(SIZE(v_xc,1),SIZE(v_xc,2)))
! ..
! .. Local Scalars ..
TYPE(t_gradients) :: grad, tmp_grad
TYPE(t_xcpot_inbuild) :: xcpot_tmp
TYPE(t_potden) :: vTot_tmp
REAL, ALLOCATABLE :: ch(:,:), ED_rs(:,:), vTot_rs(:,:), kinED_rs(:,:)
INTEGER :: n,nsp,nt,jr
INTEGER :: i, j, idx
REAL :: divi
REAL, PARAMETER :: cut_ratio = 0.1
LOGICAL, allocatable :: cut_mask(:)
! ..
!locals for mpi
integer :: ierr
integer:: n_start,n_stride
REAL:: v_x((atoms%lmaxd+1+MOD(atoms%lmaxd+1,2))*(2*atoms%lmaxd+1)*atoms%jmtd,input%jspins)
REAL:: v_xc((atoms%lmaxd+1+MOD(atoms%lmaxd+1,2))*(2*atoms%lmaxd+1)*atoms%jmtd,input%jspins)
REAL:: e_xc((atoms%lmaxd+1+MOD(atoms%lmaxd+1,2))*(2*atoms%lmaxd+1)*atoms%jmtd,1)
REAL,ALLOCATABLE:: xcl(:,:)
LOGICAL :: lda_atom(atoms%ntype),l_libxc, perform_MetaGGA
!.....------------------------------------------------------------------
perform_MetaGGA = ALLOCATED(EnergyDen%mt) .AND. xcpot%exc_is_MetaGGA()
lda_atom=.FALSE.; l_libxc=.FALSE.
SELECT TYPE(xcpot)
TYPE IS(t_xcpot_inbuild)
lda_atom=xcpot%lda_atom
IF (ANY(lda_atom)) THEN
IF((.NOT.xcpot%is_name("pw91"))) &
CALL judft_warn("Using locally LDA only possible with pw91 functional")
CALL xcpot_tmp%init("l91",.FALSE.,atoms%ntype)
ALLOCATE(xcl(SIZE(v_xc,1),SIZE(v_xc,2)))
ENDIF
CLASS DEFAULT
l_libxc=.true. !libxc!!
END SELECT
nsp=atoms%nsp()
ALLOCATE(ch(nsp*atoms%jmtd,input%jspins))
IF (xcpot%needs_grad()) CALL xcpot%alloc_gradients(SIZE(ch,1),input%jspins,grad)
IF (perform_MetaGGA) THEN
IF (xcpot%needs_grad()) CALL xcpot%alloc_gradients(SIZE(ch,1),input%jspins,tmp_grad)
ALLOCATE(ED_rs, mold=ch)
ALLOCATE(vTot_rs, mold=ch)
ALLOCATE(kinED_RS, mold=ch)
if(.not. allocated(xcpot%mt_kED_schr)) allocate(xcpot%mt_kED_schr(atoms%ntype))
ENDIF
CLASS DEFAULT
l_libxc=.true. !libxc!!
END SELECT
nsp=atoms%nsp()
ALLOCATE(ch(nsp*atoms%jmtd,input%jspins))
IF (xcpot%needs_grad()) CALL xcpot%alloc_gradients(SIZE(ch,1),input%jspins,grad)
IF (perform_MetaGGA) THEN
IF (xcpot%needs_grad()) CALL xcpot%alloc_gradients(SIZE(ch,1),input%jspins,tmp_grad)
ALLOCATE(ED_rs, mold=ch)
ALLOCATE(vTot_rs, mold=ch)
ALLOCATE(kinED_RS, mold=ch)
if(.not. allocated(xcpot%mt_kED_schr)) allocate(xcpot%mt_kED_schr(atoms%ntype))
ENDIF
CALL init_mt_grid(input%jspins,atoms,sphhar,xcpot,sym)
CALL init_mt_grid(input%jspins,atoms,sphhar,xcpot,sym)
#ifdef CPP_MPI
n_start=mpi%irank+1
n_stride=mpi%isize
IF (mpi%irank>0) THEN
vTot%mt=0.0
vx%mt=0.0
exc%mt=0.0
ENDIF
n_start=mpi%irank+1
n_stride=mpi%isize
IF (mpi%irank>0) THEN
vTot%mt=0.0
vx%mt=0.0
exc%mt=0.0
ENDIF
#else
n_start=1
n_stride=1
n_start=1
n_stride=1
#endif
call save_npy("rmsh.npy", atoms%rmsh)
if(.not. allocated(xcpot%mt_lapl)) allocate(xcpot%mt_lapl(atoms%ntype))
DO n = n_start,atoms%ntype,n_stride
CALL mt_to_grid(xcpot, input%jspins, atoms,sphhar,den%mt(:,0:,n,:),n,grad,ch)
call save_npy("rmsh.npy", atoms%rmsh)
if(allocated(grad%laplace)) xcpot%mt_lapl(n)%grid = grad%laplace
if(.not. allocated(xcpot%mt_lapl)) allocate(xcpot%mt_lapl(atoms%ntype))
DO n = n_start,atoms%ntype,n_stride
CALL mt_to_grid(xcpot, input%jspins, atoms,sphhar,den%mt(:,0:,n,:),n,grad,ch)
!
! calculate the ex.-cor. potential
CALL xcpot%get_vxc(input%jspins,ch(:nsp*atoms%jri(n),:),v_xc(:nsp*atoms%jri(n),:),v_x(:nsp*atoms%jri(n),:),grad)
IF (lda_atom(n)) THEN
! Use local part of pw91 for this atom
CALL xcpot_tmp%get_vxc(input%jspins,ch(:nsp*atoms%jri(n),:),xcl(:nsp*atoms%jri(n),:),v_x(:nsp*atoms%jri(n),:),grad)
!Mix the potentials
divi = 1.0 / (atoms%rmsh(atoms%jri(n),n) - atoms%rmsh(1,n))
nt=0
DO jr=1,atoms%jri(n)
v_xc(nt+1:nt+nsp,:) = ( xcl(nt+1:nt+nsp,:) * ( atoms%rmsh(atoms%jri(n),n) &
- atoms%rmsh(jr,n) ) &
+ v_xc(nt+1:nt+nsp,:) * ( atoms%rmsh(jr,n) &
- atoms%rmsh(1,n) ) &
) * divi
nt=nt+nsp
ENDDO
ENDIF
!Add postprocessing for libxc
IF (l_libxc.AND.xcpot%needs_grad()) CALL libxc_postprocess_gga_mt(xcpot,atoms,sphhar,n,v_xc,grad, atom_num=n)
CALL mt_from_grid(atoms,sphhar,n,input%jspins,v_xc,vTot%mt(:,0:,n,:))
CALL mt_from_grid(atoms,sphhar,n,input%jspins,v_x,vx%mt(:,0:,n,:))
! use updated vTot for exc calculation
IF(perform_MetaGGA) THEN
CALL mt_to_grid(xcpot, input%jspins, atoms, sphhar, EnergyDen%mt(:,0:,n,:), &
n, tmp_grad, ED_rs)
! multiply potentials with r^2, because mt_to_grid is made for densities,
! which are stored with a factor r^2
vTot_tmp = vTot
DO jr=1,atoms%jri(n)
vTot_tmp%mt(jr,0:,n,:) = vTot_tmp%mt(jr,0:,n,:) * atoms%rmsh(jr,n)**2
ENDDO
CALL mt_to_grid(xcpot, input%jspins, atoms, sphhar, vTot_tmp%mt(:,0:,n,:), &
n, tmp_grad, vTot_rs)
CALL calc_kinEnergyDen(ED_rs, vTot_rs, ch, kinED_rs, is_pw=.False., nsp=nsp, atm_idx=n)
ENDIF
if(allocated(grad%laplace)) xcpot%mt_lapl(n)%grid = grad%laplace
IF (ALLOCATED(exc%mt)) THEN
!
! calculate the ex.-cor energy density
!
IF(perform_MetaGGA) THEN
CALL xcpot%get_exc(input%jspins,ch(:nsp*atoms%jri(n),:),e_xc(:nsp*atoms%jri(n),1),grad, kinED_rs)
xcpot%mt_kED_schr(n)%grid = kinED_rs
call save_npy("exc_mt.npy", e_xc(:,1))
ELSE
CALL xcpot%get_exc(input%jspins,ch(:nsp*atoms%jri(n),:),e_xc(:nsp*atoms%jri(n),1),grad)
ENDIF
! calculate the ex.-cor. potential
CALL xcpot%get_vxc(input%jspins,ch(:nsp*atoms%jri(n),:),v_xc(:nsp*atoms%jri(n),:),v_x(:nsp*atoms%jri(n),:),grad)
IF (lda_atom(n)) THEN
! Use local part of pw91 for this atom
CALL xcpot_tmp%get_exc(input%jspins,ch(:nsp*atoms%jri(n),:),xcl(:nsp*atoms%jri(n),1),grad)
CALL xcpot_tmp%get_vxc(input%jspins,ch(:nsp*atoms%jri(n),:),xcl(:nsp*atoms%jri(n),:),v_x(:nsp*atoms%jri(n),:),grad)
!Mix the potentials
divi = 1.0 / (atoms%rmsh(atoms%jri(n),n) - atoms%rmsh(1,n))
nt=0
DO jr=1,atoms%jri(n)
e_xc(nt+1:nt+nsp,1) = ( xcl(nt+1:nt+nsp,1) * ( atoms%rmsh(atoms%jri(n),n) - atoms%rmsh(jr,n) ) +&
e_xc(nt+1:nt+nsp,1) * ( atoms%rmsh(jr,n) - atoms%rmsh(1,n) ) ) * divi
v_xc(nt+1:nt+nsp,:) = ( xcl(nt+1:nt+nsp,:) * ( atoms%rmsh(atoms%jri(n),n) &
- atoms%rmsh(jr,n) ) &
+ v_xc(nt+1:nt+nsp,:) * ( atoms%rmsh(jr,n) &
- atoms%rmsh(1,n) ) &
) * divi
nt=nt+nsp
END DO
ENDDO
ENDIF
CALL mt_from_grid(atoms,sphhar,n,1,e_xc,exc%mt(:,0:,n,:))
ENDIF
ENDDO
CALL finish_mt_grid()
!Add postprocessing for libxc
IF (l_libxc.AND.xcpot%needs_grad()) CALL libxc_postprocess_gga_mt(xcpot,atoms,sphhar,n,v_xc,grad, atom_num=n)
CALL mt_from_grid(atoms,sphhar,n,input%jspins,v_xc,vTot%mt(:,0:,n,:))
CALL mt_from_grid(atoms,sphhar,n,input%jspins,v_x,vx%mt(:,0:,n,:))
! use updated vTot for exc calculation
IF(perform_MetaGGA) THEN
cut_mask = [(.False., i=1,size(atoms%rmsh,dim=1)*nsp)]
idx = 1
do i = 1, floor(size(atoms%rmsh, dim=1)*cut_ratio)
do j = 1,nsp
cut_mask(idx) = .True.
idx = idx +1
enddo
enddo
CALL mt_to_grid(xcpot, input%jspins, atoms, sphhar, EnergyDen%mt(:,0:,n,:), &
n, tmp_grad, ED_rs)
! multiply potentials with r^2, because mt_to_grid is made for densities,
! which are stored with a factor r^2
vTot_tmp = vTot
DO jr=1,atoms%jri(n)
vTot_tmp%mt(jr,0:,n,:) = vTot_tmp%mt(jr,0:,n,:) * atoms%rmsh(jr,n)**2
ENDDO
CALL mt_to_grid(xcpot, input%jspins, atoms, sphhar, vTot_tmp%mt(:,0:,n,:), &
n, tmp_grad, vTot_rs)
CALL calc_kinEnergyDen(ED_rs, vTot_rs, ch, kinED_rs, is_pw=.False., nsp=nsp, atm_idx=n)
ENDIF
IF (ALLOCATED(exc%mt)) THEN
!
! calculate the ex.-cor energy density
!
IF(perform_MetaGGA) THEN
CALL xcpot%get_exc(input%jspins,ch(:nsp*atoms%jri(n),:),e_xc(:nsp*atoms%jri(n),1),grad, kinED_rs)
xcpot%mt_kED_schr(n)%grid = kinED_rs
ELSE
CALL xcpot%get_exc(input%jspins,ch(:nsp*atoms%jri(n),:),e_xc(:nsp*atoms%jri(n),1),grad)
ENDIF
IF (lda_atom(n)) THEN
! Use local part of pw91 for this atom
CALL xcpot_tmp%get_exc(input%jspins,ch(:nsp*atoms%jri(n),:),xcl(:nsp*atoms%jri(n),1),grad)
!Mix the potentials
nt=0
DO jr=1,atoms%jri(n)
e_xc(nt+1:nt+nsp,1) = ( xcl(nt+1:nt+nsp,1) * ( atoms%rmsh(atoms%jri(n),n) - atoms%rmsh(jr,n) ) +&
e_xc(nt+1:nt+nsp,1) * ( atoms%rmsh(jr,n) - atoms%rmsh(1,n) ) ) * divi
nt=nt+nsp
END DO
ENDIF
CALL mt_from_grid(atoms,sphhar,n,1,e_xc,exc%mt(:,0:,n,:))
ENDIF
ENDDO
CALL finish_mt_grid()
#ifdef CPP_MPI
CALL MPI_ALLREDUCE(MPI_IN_PLACE,vx%mt,SIZE(vx%mt),CPP_MPI_REAL,MPI_SUM,mpi%mpi_comm,ierr)
CALL MPI_ALLREDUCE(MPI_IN_PLACE,vTot%mt,SIZE(vTot%mt),CPP_MPI_REAL,MPI_SUM,mpi%mpi_comm,ierr)
CALL MPI_ALLREDUCE(MPI_IN_PLACE,exc%mt,SIZE(exc%mt),CPP_MPI_REAL,MPI_SUM,mpi%mpi_comm,ierr)
CALL MPI_ALLREDUCE(MPI_IN_PLACE,vx%mt,SIZE(vx%mt),CPP_MPI_REAL,MPI_SUM,mpi%mpi_comm,ierr)
CALL MPI_ALLREDUCE(MPI_IN_PLACE,vTot%mt,SIZE(vTot%mt),CPP_MPI_REAL,MPI_SUM,mpi%mpi_comm,ierr)
CALL MPI_ALLREDUCE(MPI_IN_PLACE,exc%mt,SIZE(exc%mt),CPP_MPI_REAL,MPI_SUM,mpi%mpi_comm,ierr)
#endif
!
RETURN
END SUBROUTINE vmt_xc
END MODULE m_vmt_xc
!
RETURN
END SUBROUTINE vmt_xc
END MODULE m_vmt_xc
......@@ -27,29 +27,29 @@ CONTAINS
kinEnergyDen_RS = EnergyDen_RS - vTot_RS * den_RS
!if(is_pw) then
!call save_npy("pw_EnergyDen_RS.npy", EnergyDen_RS)
!call save_npy("pw_vTot_RS.npy", vTot_RS)
!call save_npy("pw_den_RS.npy", den_RS)
!call save_npy("pw_vTot_RSxdenRS.npy", vtot_RS*den_RS)
!call save_npy("pw_kinED_pw_schroeway.npy",kinEnergyDen_RS)
!else
!if(present(nsp) .and. present(atm_idx)) then
!!call save_npy("mt=" // int2str(atm_idx) // "_EnergyDen_RS.npy", &
!!get_radial_line(EnergyDen_RS,1,nsp))
!!call save_npy("mt=" // int2str(atm_idx) // "_vTot_RS.npy", &
!!get_radial_line(vTot_RS,1,nsp))
!!call save_npy("mt=" // int2str(atm_idx) // "_den_RS.npy", &
!!get_radial_line(den_RS,1,nsp))
!!call save_npy("mt=" // int2str(atm_idx) // "_vTot_RSxdenRS.npy", &
!!get_radial_line(vtot_RS*den_RS,1,nsp))
!!call save_npy("mt=" // int2str(atm_idx) // "_kinED_schroeway.npy", &
!!get_radial_line(kinEnergyDen_RS,1,nsp))
!call save_npy("mt=" // int2str(atm_idx) // "_den_RS.npy", den_RS)
!else
!write (*,*) "something not present"
!endif
!endif
if(is_pw) then
call save_npy("pw_EnergyDen_RS.npy", EnergyDen_RS)
call save_npy("pw_vTot_RS.npy", vTot_RS)
call save_npy("pw_den_RS.npy", den_RS)
call save_npy("pw_vTot_RSxdenRS.npy", vtot_RS*den_RS)
call save_npy("pw_kinED_pw_schroeway.npy",kinEnergyDen_RS)
else
if(present(nsp) .and. present(atm_idx)) then
call save_npy("mt=" // int2str(atm_idx) // "_EnergyDen_RS.npy", &
get_radial_line(EnergyDen_RS,1,nsp))
call save_npy("mt=" // int2str(atm_idx) // "_vTot_RS.npy", &
get_radial_line(vTot_RS,1,nsp))
call save_npy("mt=" // int2str(atm_idx) // "_den_RS.npy", &
get_radial_line(den_RS,1,nsp))
call save_npy("mt=" // int2str(atm_idx) // "_vTot_RSxdenRS.npy", &
get_radial_line(vtot_RS*den_RS,1,nsp))
call save_npy("mt=" // int2str(atm_idx) // "_kinED_schroeway.npy", &
get_radial_line(kinEnergyDen_RS,1,nsp))
call save_npy("mt=" // int2str(atm_idx) // "_den_RS.npy", den_RS)
else
write (*,*) "something not present"
endif
endif
#else
CALL juDFT_error("MetaGGA require LibXC",hint="compile Fleur with LibXC (e.g. by giving '-external libxc' to ./configure")
#endif
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment