Commit 3fb9ce80 authored by Matthias Redies's avatar Matthias Redies

some develop changes tbd

parent afa78cc7
...@@ -11,7 +11,7 @@ CONTAINS ...@@ -11,7 +11,7 @@ CONTAINS
SUBROUTINE cdngen(eig_id,mpi,input,banddos,sliceplot,vacuum,& SUBROUTINE cdngen(eig_id,mpi,input,banddos,sliceplot,vacuum,&
dimension,kpts,atoms,sphhar,stars,sym,& dimension,kpts,atoms,sphhar,stars,sym,&
enpara,cell,noco,vTot,results,oneD,coreSpecInput,& enpara,cell,noco,vTot,results,oneD,coreSpecInput,&
xcpot, archiveType,outDen, kinEnergyDen) archiveType, xcpot,outDen,EnergyDen)
!***************************************************** !*****************************************************
! Charge density generator ! Charge density generator
...@@ -37,6 +37,7 @@ SUBROUTINE cdngen(eig_id,mpi,input,banddos,sliceplot,vacuum,& ...@@ -37,6 +37,7 @@ SUBROUTINE cdngen(eig_id,mpi,input,banddos,sliceplot,vacuum,&
USE m_doswrite USE m_doswrite
USE m_Ekwritesl USE m_Ekwritesl
USE m_banddos_io USE m_banddos_io
USE m_metagga
#ifdef CPP_MPI #ifdef CPP_MPI
USE m_mpi_bc_potden USE m_mpi_bc_potden
#endif #endif
...@@ -62,8 +63,8 @@ SUBROUTINE cdngen(eig_id,mpi,input,banddos,sliceplot,vacuum,& ...@@ -62,8 +63,8 @@ SUBROUTINE cdngen(eig_id,mpi,input,banddos,sliceplot,vacuum,&
TYPE(t_atoms),INTENT(IN) :: atoms TYPE(t_atoms),INTENT(IN) :: atoms
TYPE(t_coreSpecInput),INTENT(IN) :: coreSpecInput TYPE(t_coreSpecInput),INTENT(IN) :: coreSpecInput
TYPE(t_potden),INTENT(IN) :: vTot TYPE(t_potden),INTENT(IN) :: vTot
CLASS(t_xcpot),INTENT(IN) :: xcpot CLASS(t_xcpot),INTENT(INOUT) :: xcpot
TYPE(t_potden),INTENT(INOUT) :: outDen, kinEnergyDen TYPE(t_potden),INTENT(INOUT) :: outDen, EnergyDen
!Scalar Arguments !Scalar Arguments
INTEGER, INTENT (IN) :: eig_id, archiveType INTEGER, INTENT (IN) :: eig_id, archiveType
...@@ -92,7 +93,9 @@ SUBROUTINE cdngen(eig_id,mpi,input,banddos,sliceplot,vacuum,& ...@@ -92,7 +93,9 @@ SUBROUTINE cdngen(eig_id,mpi,input,banddos,sliceplot,vacuum,&
CALL mcd%init1(banddos,dimension,input,atoms,kpts) CALL mcd%init1(banddos,dimension,input,atoms,kpts)
CALL slab%init(banddos,dimension,atoms,cell,input,kpts) CALL slab%init(banddos,dimension,atoms,cell,input,kpts)
CALL orbcomp%init(input,banddos,dimension,atoms,kpts) CALL orbcomp%init(input,banddos,dimension,atoms,kpts)
CALL outDen%init(stars,atoms,sphhar,vacuum,input%jspins,noco%l_noco,POTDEN_TYPE_DEN)
CALL outDen%init(stars, atoms, sphhar, vacuum, input%jspins, noco%l_noco, POTDEN_TYPE_DEN)
CALL EnergyDen%init(stars, atoms, sphhar, vacuum, input%jspins, noco%l_noco, POTDEN_TYPE_kinEnergyDen)
IF (mpi%irank == 0) CALL openXMLElementNoAttributes('valenceDensity') IF (mpi%irank == 0) CALL openXMLElementNoAttributes('valenceDensity')
...@@ -106,12 +109,14 @@ SUBROUTINE cdngen(eig_id,mpi,input,banddos,sliceplot,vacuum,& ...@@ -106,12 +109,14 @@ SUBROUTINE cdngen(eig_id,mpi,input,banddos,sliceplot,vacuum,&
CALL cdnvalJob%init(mpi,input,kpts,noco,results,jspin,sliceplot,banddos) CALL cdnvalJob%init(mpi,input,kpts,noco,results,jspin,sliceplot,banddos)
CALL cdnval(eig_id,mpi,kpts,jspin,noco,input,banddos,cell,atoms,enpara,stars,vacuum,dimension,& CALL cdnval(eig_id,mpi,kpts,jspin,noco,input,banddos,cell,atoms,enpara,stars,vacuum,dimension,&
sphhar,sym,vTot,oneD,cdnvalJob,outDen,regCharges,dos,results,moments,coreSpecInput,mcd,slab,orbcomp) sphhar,sym,vTot,oneD,cdnvalJob,outDen,regCharges,dos,results,moments,coreSpecInput,mcd,slab,orbcomp)
!IF(xcpot%is_MetaGGA()) THEN
!CALL bla
!ENDIF
END DO END DO
! calculate kinetic energy density for MetaGGAs
if(xcpot%exc_is_metagga()) then
CALL calc_kinEnergyDen(eig_id, mpi, kpts, noco, input, banddos, cell, outDen, atoms, enpara, stars,&
vacuum, DIMENSION, sphhar, sym, vTot, oneD, results, xcpot%kinEnergyDen)
endif
IF (mpi%irank == 0) THEN IF (mpi%irank == 0) THEN
IF (banddos%dos.or.banddos%vacdos.or.input%cdinf) THEN IF (banddos%dos.or.banddos%vacdos.or.input%cdinf) THEN
#ifdef CPP_HDF #ifdef CPP_HDF
......
...@@ -64,6 +64,7 @@ CONTAINS ...@@ -64,6 +64,7 @@ CONTAINS
USE m_gen_map USE m_gen_map
USE m_dwigner USE m_dwigner
USE m_ylm USE m_ylm
USE m_metagga
#ifdef CPP_MPI #ifdef CPP_MPI
USE m_mpi_bc_potden USE m_mpi_bc_potden
#endif #endif
...@@ -95,7 +96,7 @@ CONTAINS ...@@ -95,7 +96,7 @@ CONTAINS
TYPE(t_coreSpecInput) :: coreSpecInput TYPE(t_coreSpecInput) :: coreSpecInput
TYPE(t_wann) :: wann TYPE(t_wann) :: wann
TYPE(t_potden) :: vTot, vx, vCoul, vTemp TYPE(t_potden) :: vTot, vx, vCoul, vTemp
TYPE(t_potden) :: inDen, outDen, kinEnergyDen TYPE(t_potden) :: inDen, outDen, EnergyDen
CLASS(t_xcpot), ALLOCATABLE :: xcpot CLASS(t_xcpot), ALLOCATABLE :: xcpot
CLASS(t_forcetheo), ALLOCATABLE :: forcetheo CLASS(t_forcetheo), ALLOCATABLE :: forcetheo
...@@ -234,7 +235,7 @@ CONTAINS ...@@ -234,7 +235,7 @@ CONTAINS
CALL timestart("generation of potential") CALL timestart("generation of potential")
CALL vgen(hybrid,field,input,xcpot,DIMENSION,atoms,sphhar,stars,vacuum,sym,& CALL vgen(hybrid,field,input,xcpot,DIMENSION,atoms,sphhar,stars,vacuum,sym,&
obsolete,cell,oneD,sliceplot,mpi,results,noco,inDen,vTot,vx,vCoul) obsolete,cell,oneD,sliceplot,mpi,results,noco,EnergyDen,inDen,vTot,vx,vCoul)
CALL timestop("generation of potential") CALL timestop("generation of potential")
#ifdef CPP_MPI #ifdef CPP_MPI
...@@ -343,8 +344,10 @@ CONTAINS ...@@ -343,8 +344,10 @@ CONTAINS
! charge density generation ! charge density generation
CALL timestart("generation of new charge density (total)") CALL timestart("generation of new charge density (total)")
CALL cdngen(eig_id,mpi,input,banddos,sliceplot,vacuum,DIMENSION,kpts,atoms,sphhar,stars,sym,& CALL cdngen(eig_id,mpi,input,banddos,sliceplot,vacuum,&
enpara,cell,noco,vTot,results,oneD,coreSpecInput,xcpot,archiveType,outDen,kinEnergyDen) DIMENSION,kpts,atoms,sphhar,stars,sym,&
enpara,cell,noco,vTot,results,oneD,coreSpecInput,&
archiveType,xcpot,outDen,EnergyDen)
outDen%iter = inDen%iter outDen%iter = inDen%iter
IF (.FALSE.) CALL rdmft(eig_id,mpi,input,kpts,banddos,cell,atoms,enpara,stars,vacuum,dimension,& IF (.FALSE.) CALL rdmft(eig_id,mpi,input,kpts,banddos,cell,atoms,enpara,stars,vacuum,dimension,&
......
...@@ -14,10 +14,15 @@ ...@@ -14,10 +14,15 @@
MODULE m_types_xcpot MODULE m_types_xcpot
IMPLICIT NONE IMPLICIT NONE
PRIVATE PRIVATE
PUBLIC :: t_xcpot,t_gradients PUBLIC :: t_xcpot,t_gradients,t_RS_potden
TYPE t_RS_potden
REAL, ALLOCATABLE :: is(:,:), mt(:,:)
END TYPE t_RS_potden
TYPE,ABSTRACT :: t_xcpot TYPE,ABSTRACT :: t_xcpot
REAL :: gmaxxc REAL :: gmaxxc
TYPE(t_RS_potden) :: kinEnergyDen
CONTAINS CONTAINS
PROCEDURE :: vxc_is_LDA=>xcpot_vxc_is_LDA PROCEDURE :: vxc_is_LDA=>xcpot_vxc_is_LDA
PROCEDURE :: exc_is_LDA=>xcpot_exc_is_LDA PROCEDURE :: exc_is_LDA=>xcpot_exc_is_LDA
...@@ -48,7 +53,7 @@ MODULE m_types_xcpot ...@@ -48,7 +53,7 @@ MODULE m_types_xcpot
REAL,ALLOCATABLE :: gr(:,:,:) REAL,ALLOCATABLE :: gr(:,:,:)
REAL,ALLOCATABLE :: laplace(:,:) REAL,ALLOCATABLE :: laplace(:,:)
END TYPE t_gradients END TYPE t_gradients
CONTAINS CONTAINS
! LDA ! LDA
LOGICAL FUNCTION xcpot_vxc_is_LDA(xcpot) LOGICAL FUNCTION xcpot_vxc_is_LDA(xcpot)
...@@ -104,6 +109,8 @@ CONTAINS ...@@ -104,6 +109,8 @@ CONTAINS
END FUNCTION xcpot_get_exchange_weight END FUNCTION xcpot_get_exchange_weight
SUBROUTINE xcpot_get_vxc(xcpot,jspins,rh,vxc,vx,grad) SUBROUTINE xcpot_get_vxc(xcpot,jspins,rh,vxc,vx,grad)
IMPLICIT NONE
CLASS(t_xcpot),INTENT(IN) :: xcpot CLASS(t_xcpot),INTENT(IN) :: xcpot
INTEGER, INTENT (IN) :: jspins INTEGER, INTENT (IN) :: jspins
!--> charge density !--> charge density
...@@ -114,16 +121,22 @@ CONTAINS ...@@ -114,16 +121,22 @@ CONTAINS
END SUBROUTINE xcpot_get_vxc END SUBROUTINE xcpot_get_vxc
SUBROUTINE xcpot_get_exc(xcpot,jspins,rh,exc,grad) SUBROUTINE xcpot_get_exc(xcpot,jspins,rh,exc,grad)
USE m_types_misc
IMPLICIT NONE
CLASS(t_xcpot),INTENT(IN) :: xcpot CLASS(t_xcpot),INTENT(IN) :: xcpot
INTEGER, INTENT (IN) :: jspins INTEGER, INTENT (IN) :: jspins
!--> charge density !--> charge density
REAL,INTENT (IN) :: rh(:,:) REAL,INTENT (IN) :: rh(:,:)
!--> kinetic energy density
!---> xc energy density !---> xc energy density
REAL, INTENT (OUT) :: exc (:) REAL, INTENT (OUT) :: exc (:)
TYPE(t_gradients),OPTIONAL,INTENT(IN)::grad TYPE(t_gradients),OPTIONAL,INTENT(IN)::grad
END SUBROUTINE xcpot_get_exc END SUBROUTINE xcpot_get_exc
SUBROUTINE xcpot_alloc_gradients(ngrid,jspins,grad) SUBROUTINE xcpot_alloc_gradients(ngrid,jspins,grad)
IMPLICIT NONE
INTEGER, INTENT (IN) :: jspins,ngrid INTEGER, INTENT (IN) :: jspins,ngrid
TYPE(t_gradients),INTENT(INOUT):: grad TYPE(t_gradients),INTENT(INOUT):: grad
......
...@@ -265,7 +265,7 @@ CONTAINS ...@@ -265,7 +265,7 @@ CONTAINS
END SUBROUTINE xcpot_get_vxc END SUBROUTINE xcpot_get_vxc
!*********************************************************************** !***********************************************************************
SUBROUTINE xcpot_get_exc(xcpot,jspins,rh, exc,grad) SUBROUTINE xcpot_get_exc(xcpot,jspins,rh,exc,grad)
!*********************************************************************** !***********************************************************************
USE m_xcxal, ONLY : excxal USE m_xcxal, ONLY : excxal
USE m_xcwgn, ONLY : excwgn USE m_xcwgn, ONLY : excwgn
...@@ -286,6 +286,7 @@ CONTAINS ...@@ -286,6 +286,7 @@ CONTAINS
!c---> charge density !c---> charge density
!c !c
REAL,INTENT (IN) :: rh(:,:) REAL,INTENT (IN) :: rh(:,:)
!c !c
!c---> xc energy density !c---> xc energy density
!c !c
......
...@@ -11,6 +11,7 @@ MODULE m_types_xcpot_libxc ...@@ -11,6 +11,7 @@ MODULE m_types_xcpot_libxc
#endif #endif
USE m_types_xcpot USE m_types_xcpot
USE m_judft USE m_judft
use m_types_misc
IMPLICIT NONE IMPLICIT NONE
...@@ -23,9 +24,11 @@ MODULE m_types_xcpot_libxc ...@@ -23,9 +24,11 @@ MODULE m_types_xcpot_libxc
TYPE(xc_f03_func_t) :: vxc_func_x, vxc_func_c TYPE(xc_f03_func_t) :: vxc_func_x, vxc_func_c
TYPE(xc_f03_func_t) :: exc_func_x, exc_func_c TYPE(xc_f03_func_t) :: exc_func_x, exc_func_c
#endif #endif
INTEGER :: func_vxc_id_c, func_vxc_id_x !> functionals to be used for potential & density convergence INTEGER :: func_vxc_id_c, func_vxc_id_x !> functionals to be used for potential & density convergence
INTEGER :: func_exc_id_c, func_exc_id_x !> functionals to be used in exc- & totale-calculations INTEGER :: func_exc_id_c, func_exc_id_x !> functionals to be used in exc- & totale-calculations
INTEGER :: jspins INTEGER :: jspins
CONTAINS CONTAINS
PROCEDURE :: vxc_is_LDA => xcpot_vxc_is_LDA PROCEDURE :: vxc_is_LDA => xcpot_vxc_is_LDA
PROCEDURE :: exc_is_LDA => xcpot_exc_is_LDA PROCEDURE :: exc_is_LDA => xcpot_exc_is_LDA
...@@ -256,14 +259,15 @@ CONTAINS ...@@ -256,14 +259,15 @@ CONTAINS
END SUBROUTINE xcpot_get_vxc END SUBROUTINE xcpot_get_vxc
SUBROUTINE xcpot_get_exc(xcpot,jspins,rh,exc,grad) SUBROUTINE xcpot_get_exc(xcpot,jspins,rh,exc,grad,kinEnergyDen)
IMPLICIT NONE IMPLICIT NONE
CLASS(t_xcpot_libxc),INTENT(IN) :: xcpot CLASS(t_xcpot_libxc),INTENT(IN) :: xcpot
INTEGER, INTENT (IN) :: jspins INTEGER, INTENT (IN) :: jspins
REAL,INTENT (IN) :: rh(:,:) !points,spin REAL,INTENT (IN) :: rh(:,:) !points,spin
REAL, INTENT (OUT) :: exc(:) !points REAL, INTENT (OUT) :: exc(:) !points
! optional arguments for GGA ! optional arguments for GGA
TYPE(t_gradients),OPTIONAL,INTENT(IN)::grad TYPE(t_gradients),OPTIONAL,INTENT(IN)::grad
REAL, INTENT(IN), OPTIONAL :: kinEnergyDen(:,:)
REAL :: excc(SIZE(exc)) REAL :: excc(SIZE(exc))
#ifdef CPP_LIBXC #ifdef CPP_LIBXC
...@@ -281,8 +285,17 @@ CONTAINS ...@@ -281,8 +285,17 @@ CONTAINS
exc=exc+excc exc=exc+excc
END IF END IF
ELSEIF(xcpot%exc_is_MetaGGA()) THEN ELSEIF(xcpot%exc_is_MetaGGA()) THEN
!call xc_f03_mgga_exc(xcpot%exc_func_x, SIZE(rh,1), TRANSPOSE(rh), grad%sigma, transpose(grad%laplace) IF(PRESENT(kinEnergyDen)) THEN ! patch till vacuum can do LibXC
write (*,*) "have to implement that" call xc_f03_mgga_exc(xcpot%exc_func_x, SIZE(rh,1), TRANSPOSE(rh), grad%sigma, &
transpose(grad%laplace), transpose(kinEnergyDen), exc)
IF (xcpot%func_exc_id_c>0) THEN
CALL xc_f03_mgga_exc(xcpot%exc_func_c, SIZE(rh,1), TRANSPOSE(rh), grad%sigma, &
transpose(grad%laplace), transpose(kinEnergyDen), excc)
exc=exc+excc
END IF
ELSE
call juDFT_error("MetaGGAs need kinetic energy density", hint="maybe you used vacuum with LibXC")
ENDIF
ELSE ELSE
call juDFT_error("exc is part of a known Family", calledby="xcpot_get_exc@libxc") call juDFT_error("exc is part of a known Family", calledby="xcpot_get_exc@libxc")
ENDIF ENDIF
......
...@@ -3,15 +3,9 @@ ...@@ -3,15 +3,9 @@
! This file is part of FLEUR and available as free software under the conditions ! 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. ! of the MIT license as expressed in the LICENSE file in more detail.
!-------------------------------------------------------------------------------- !--------------------------------------------------------------------------------
MODULE m_metagga MODULE m_metagga
PUBLIC :: calc_EnergyDen, t_RS_potden
TYPE t_realspace_potden PRIVATE :: calc_EnergyDen_auxillary_weights, subtract_RS, multiply_RS
REAL, ALLOCATABLE :: is(:,:), mt(:,:)
END TYPE t_realspace_potden
PUBLIC :: calc_EnergyDen
PRIVATE :: calc_EnergyDen_auxillary_weights, t_realspace_potden, subtract_RS, multiply_RS
INTERFACE OPERATOR (-) INTERFACE OPERATOR (-)
PROCEDURE subtract_RS PROCEDURE subtract_RS
...@@ -33,35 +27,36 @@ CONTAINS ...@@ -33,35 +27,36 @@ CONTAINS
USE m_types_regionCharges USE m_types_regionCharges
USE m_types_dos USE m_types_dos
USE m_types_cdnval USE m_types_cdnval
USE m_types_xcpot
USE m_cdnval USE m_cdnval
IMPLICIT NONE IMPLICIT NONE
INTEGER, INTENT(in) :: eig_id INTEGER, INTENT(in) :: eig_id
TYPE(t_mpi), INTENT(in) :: mpi TYPE(t_mpi), INTENT(in) :: mpi
TYPE(t_kpts), INTENT(in) :: kpts TYPE(t_kpts), INTENT(in) :: kpts
TYPE(t_noco), INTENT(in) :: noco TYPE(t_noco), INTENT(in) :: noco
TYPE(t_input), INTENT(in) :: input TYPE(t_input), INTENT(in) :: input
TYPE(t_banddos), INTENT(in) :: banddos TYPE(t_banddos), INTENT(in) :: banddos
TYPE(t_cell), INTENT(in) :: cell TYPE(t_cell), INTENT(in) :: cell
TYPE(t_potden), INTENT(in) :: den TYPE(t_potden), INTENT(in) :: den
TYPE(t_atoms), INTENT(in) :: atoms TYPE(t_atoms), INTENT(in) :: atoms
TYPE(t_enpara), INTENT(in) :: enpara TYPE(t_enpara), INTENT(in) :: enpara
TYPE(t_stars), INTENT(in) :: stars TYPE(t_stars), INTENT(in) :: stars
TYPE(t_vacuum), INTENT(in) :: vacuum TYPE(t_vacuum), INTENT(in) :: vacuum
TYPE(t_dimension), INTENT(in) :: DIMENSION TYPE(t_dimension), INTENT(in) :: DIMENSION
TYPE(t_sphhar), INTENT(in) :: sphhar TYPE(t_sphhar), INTENT(in) :: sphhar
TYPE(t_sym), INTENT(in) :: sym TYPE(t_sym), INTENT(in) :: sym
TYPE(t_potden), INTENT(in) :: vTot TYPE(t_potden), INTENT(in) :: vTot
TYPE(t_oneD), INTENT(in) :: oneD TYPE(t_oneD), INTENT(in) :: oneD
TYPE(t_results), INTENT(in) :: results TYPE(t_results), INTENT(in) :: results
TYPE(t_realspace_potden), INTENT(inout) :: kinEnergyDen TYPE(t_RS_potden), INTENT(inout) :: kinEnergyDen
! local vars ! local vars
TYPE(t_potden) :: EnergyDen TYPE(t_potden) :: EnergyDen
TYPE(t_realspace_potden) :: den_RS, EnergyDen_RS, vTot_RS TYPE(t_RS_potden) :: den_RS, EnergyDen_RS, vTot_RS
CALL calc_EnergyDen(eig_id, mpi, kpts, noco, input, banddos, cell, atoms, enpara, stars, & CALL calc_EnergyDen(eig_id, mpi, kpts, noco, input, banddos, cell, atoms, enpara, stars, &
...@@ -183,15 +178,15 @@ CONTAINS ...@@ -183,15 +178,15 @@ CONTAINS
IMPLICIT NONE IMPLICIT NONE
TYPE(t_potden), INTENT(in) :: den, EnergyDen, vTot TYPE(t_potden), INTENT(in) :: den, EnergyDen, vTot
TYPE(t_input), INTENT(in) :: input TYPE(t_input), INTENT(in) :: input
TYPE(t_noco), INTENT(in) :: noco TYPE(t_noco), INTENT(in) :: noco
TYPE(t_sym), INTENT(in) :: sym TYPE(t_sym), INTENT(in) :: sym
TYPE(t_stars), INTENT(in) :: stars TYPE(t_stars), INTENT(in) :: stars
TYPE(t_cell), INTENT(in) :: cell TYPE(t_cell), INTENT(in) :: cell
TYPE(t_atoms), INTENT(in) :: atoms TYPE(t_atoms), INTENT(in) :: atoms
TYPE(t_sphhar), INTENT(in) :: sphhar TYPE(t_sphhar), INTENT(in) :: sphhar
TYPE(t_realspace_potden), INTENT(out) :: den_RS, EnergyDen_RS, vTot_RS ! could be changed to a real-space type TYPE(t_RS_potden), INTENT(out) :: den_RS, EnergyDen_RS, vTot_RS ! could be changed to a real-space type
!local vars !local vars
TYPE(t_xcpot_libxc) ::aux_xcpot TYPE(t_xcpot_libxc) ::aux_xcpot
...@@ -232,25 +227,25 @@ CONTAINS ...@@ -232,25 +227,25 @@ CONTAINS
END SUBROUTINE transform_to_grid END SUBROUTINE transform_to_grid
FUNCTION subtract_RS(rs1, rs2) RESULT(rs_out) FUNCTION subtract_RS(rs1, rs2) RESULT(rs_out)
USE m_types_xcpot
IMPLICIT NONE IMPLICIT NONE
TYPE(t_realspace_potden), INTENT(in) :: rs1, rs2 TYPE(t_RS_potden), INTENT(in) :: rs1, rs2
TYPE(t_realspace_potden) :: rs_out TYPE(t_RS_potden) :: rs_out
WRITE (*,*) "MT subtraction not implemented"
rs_out%is = rs1%is - rs2%is rs_out%is = rs1%is - rs2%is
rs_out%mt = rs1%mt - rs2%mt
END FUNCTION subtract_RS END FUNCTION subtract_RS
FUNCTION multiply_RS(rs1, rs2) RESULT(rs_out) FUNCTION multiply_RS(rs1, rs2) RESULT(rs_out)
USE m_types_xcpot
IMPLICIT NONE IMPLICIT NONE
TYPE(t_realspace_potden), INTENT(in) :: rs1, rs2 TYPE(t_RS_potden), INTENT(in) :: rs1, rs2
TYPE(t_realspace_potden) :: rs_out TYPE(t_RS_potden) :: rs_out
WRITE (*,*) "MT multiplication not implemented"
rs_out%is = rs1%is * rs2%is rs_out%is = rs1%is * rs2%is
rs_out%mt = rs1%mt * rs2%mt
END FUNCTION multiply_RS END FUNCTION multiply_RS
END MODULE m_metagga END MODULE m_metagga
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