1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 2! Copyright 2010. Los Alamos National Security, LLC. This material was ! 3! produced under U.S. Government contract DE-AC52-06NA25396 for Los Alamos ! 4! National Laboratory (LANL), which is operated by Los Alamos National ! 5! Security, LLC for the U.S. Department of Energy. The U.S. Government has ! 6! rights to use, reproduce, and distribute this software. NEITHER THE ! 7! GOVERNMENT NOR LOS ALAMOS NATIONAL SECURITY, LLC MAKES ANY WARRANTY, ! 8! EXPRESS OR IMPLIED, OR ASSUMES ANY LIABILITY FOR THE USE OF THIS ! 9! SOFTWARE. If software is modified to produce derivative works, such ! 10! modified software should be clearly marked, so as not to confuse it ! 11! with the version available from LANL. ! 12! ! 13! Additionally, this program is free software; you can redistribute it ! 14! and/or modify it under the terms of the GNU General Public License as ! 15! published by the Free Software Foundation; version 2.0 of the License. ! 16! Accordingly, this program is distributed in the hope that it will be ! 17! useful, but WITHOUT ANY WARRANTY; without even the implied warranty of ! 18! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General ! 19! Public License for more details. ! 20!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 21 22!> To produce a matrix \f$Z\f$ which is needed to orthogonalize \f$H\f$. 23!! 24!! \f$ H_{orth} = Z^{\dagger}HZ \f$ 25!! See Negre 2016 \cite Negre2016 26!! 27MODULE GENXPROGRESS 28 29#ifdef PROGRESSON 30 31 USE BML 32 USE PRG_GENZ_MOD 33 34 USE CONSTANTS_MOD 35 USE NONOARRAY 36 USE MYPRECISION 37 38 PRIVATE 39 40 PUBLIC :: GENXBML 41 42 TYPE(BML_MATRIX_T), PUBLIC :: OVER_BML !FOR STORING S IN BML FORMAT 43 TYPE(BML_MATRIX_T), PUBLIC :: ZK1_BML, ZK2_BML, ZK3_BML 44 TYPE(BML_MATRIX_T), PUBLIC :: ZK4_BML, ZK5_BML, ZK6_BML, ZMAT_BML 45 INTEGER, PUBLIC :: IGENX = 0!COUTER TO KEEP TRACK OF THE TIMES ZMAT IS COMPUTED. 46 TYPE(GENZSPINP), PUBLIC :: ZSP 47 48CONTAINS 49 50 SUBROUTINE GENXBML 51 52 IMPLICIT NONE 53 54 !> Parsing Z sparse propagation and build. 55 IF(IGENX == 0)THEN 56 CALL PRG_PARSE_ZSP(ZSP,LATTEINNAME) 57 IF(ZSP%BML_TYPE == BML_MATRIX_DENSE .AND. SPARSEON == 1) STOP 'If CONTROL{ SPARSEON= 1 } then ZSP{ BMLType= Ellpack }' 58 IF(ZSP%BML_TYPE .EQ. BML_MATRIX_ELLPACK)THEN 59 IF(ZSP%ZSP .EQV. .FALSE.)STOP 'If ZSP{ ZSP= F } then ZSP{ BMLType= Dense }' 60 IF(SPARSEON == 0) STOP 'If CONTROL{ SPARSEON= 0 } then ZSP{ BMLType= Dense }' 61 ENDIF 62 ENDIF 63 64 IF(bml_allocated(OVER_BML)) CALL BML_DEALLOCATE(OVER_BML) 65 66 IF(ZSP%VERBOSE.GE.1)WRITE(*,*)"Inside genx ..." 67 68 IF(ZSP%MDIM < 0) ZSP%MDIM = HDIM 69 70 71 IGENX = IGENX + 1 !Counter to keep track of the iterations (md and optimization) 72 73 IF(VERBOSE >= 1) WRITE(*,*)"IGENX =",IGENX 74 75 CALL BML_ZERO_MATRIX(ZSP%BML_TYPE,BML_ELEMENT_REAL,LATTEPREC,HDIM,ZSP%MDIM,OVER_BML) 76 77 CALL BML_IMPORT_FROM_DENSE(ZSP%BML_TYPE, & 78 SMAT, OVER_BML, ZERO, ZSP%MDIM) 79 80 ! CALL BML_PRINT_MATRIX("OVER_BML",OVER_BML,1,10,1,10) 81 82 IF(ZSP%ZSP)THEN !Congruence transformation. 83 84 IF(IGENX == 0) THEN 85 CALL PRG_INIT_ZSPMAT(IGENX,ZK1_BML,ZK2_BML,ZK3_BML& 86 ,ZK4_BML,ZK5_BML,ZK6_BML,ZSP%MDIM,ZSP%BML_TYPE) 87 ENDIF 88 89 CALL PRG_BUILDZSPARSE(OVER_BML,ZMAT_BML,IGENX,ZSP%MDIM,& 90 ZSP%BML_TYPE, ZK1_BML,ZK2_BML,ZK3_BML& 91 ,ZK4_BML,ZK5_BML,ZK6_BML,ZSP%NFIRST,ZSP%NREFI,ZSP%NREFF,& 92 ZSP%NUMTHRESI,ZSP%NUMTHRESF,ZSP%INTEGRATION,ZSP%VERBOSE) 93 94 ELSE 95 96 !Build z matrix using diagonalization (usual method). 97 CALL PRG_BUILDZDIAG(OVER_BML,ZMAT_BML,ZSP%NUMTHRESF,ZSP%MDIM,ZSP%BML_TYPE) 98 99 ENDIF 100 101 CALL FLUSH(6) 102 103 CALL BML_EXPORT_TO_DENSE(ZMAT_BML, XMAT) 104 105 IF(ZSP%VERBOSE.GE.1)WRITE(*,*)"Out of genx ..." 106 107 END SUBROUTINE GENXBML 108 109#endif 110 111END MODULE GENXPROGRESS 112