LCOV - code coverage report
Current view: top level - src/62_ctqmc - m_CtqmcoffdiagComplex.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 1220 0
Test Date: 2026-11-11 18:45:25 Functions: 0.0 % 37 0
Branches: 0.0 % 2194 0

             Branch data     Line data    Source code
       1                 :             : 
       2                 :             : #if defined HAVE_CONFIG_H
       3                 :             : #include "config.h"
       4                 :             : #endif
       5                 :             : !!****m* ABINIT/m_CtqmcoffdiagComplex
       6                 :             : !! NAME
       7                 :             : !!  m_CtqmcoffdiagComplex
       8                 :             : !!
       9                 :             : !! FUNCTION
      10                 :             : !!  Manage and drive all the CTQMC
      11                 :             : !!  Should not be used if you don't know what you do
      12                 :             : !!  Please use CtqmcoffdiagComplexComplexInterface
      13                 :             : !!
      14                 :             : !! COPYRIGHT
      15                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder, B. Amadon, J. Denier)
      16                 :             : !!  This file is distributed under the terms of the
      17                 :             : !!  GNU General Public License, see ~abinit/COPYING
      18                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
      19                 :             : !!
      20                 :             : !! NOTES
      21                 :             : !!
      22                 :             : !! SOURCE
      23                 :             : 
      24                 :             : #include "defs.h"
      25                 :             : #define CTQMC_SLICE1 100
      26                 :             : ! Coupe Sweeps en 100
      27                 :             : #define CTQMC_SLICE2 100
      28                 :             : ! Coupe modNoise1 en 2000
      29                 :             : #define CTQMC_SEGME  1
      30                 :             : #define CTQMC_ANTIS -2
      31                 :             : #define CTQMC_ADDED  3
      32                 :             : #define CTQMC_REMOV  4
      33                 :             : #define CTQMC_DETSI  5
      34                 :             : MODULE m_CtqmcoffdiagComplex
      35                 :             : 
      36                 :             :  USE m_Global
      37                 :             :  USE m_GreenHyboffdiagComplex
      38                 :             :  USE m_BathOperatoroffdiagComplex
      39                 :             :  USE m_ImpurityOperator
      40                 :             :  USE m_Stat
      41                 :             :  USE m_FFTHyb
      42                 :             :  USE m_OurRng
      43                 :             :  use defs_basis
      44                 :             :  use m_abicore
      45                 :             :  use m_io_tools, only : open_file
      46                 :             : 
      47                 :             : #ifdef HAVE_MPI2
      48                 :             :  USE mpi
      49                 :             : #endif
      50                 :             :  IMPLICIT NONE
      51                 :             : 
      52                 :             :  public :: CtqmcoffdiagComplex_init
      53                 :             :  public :: CtqmcoffdiagComplex_setParameters
      54                 :             :  public :: CtqmcoffdiagComplex_setSweeps
      55                 :             :  public :: CtqmcoffdiagComplex_setSeed
      56                 :             :  public :: CtqmcoffdiagComplex_allocateAll
      57                 :             :  public :: CtqmcoffdiagComplex_allocateOpt
      58                 :             :  public :: CtqmcoffdiagComplex_setG0wTab
      59                 :             :  public :: CtqmcoffdiagComplex_setU
      60                 :             :  public :: CtqmcoffdiagComplex_clear
      61                 :             :  public :: CtqmcoffdiagComplex_reset
      62                 :             :  public :: CtqmcoffdiagComplex_setMu
      63                 :             :  public :: CtqmcoffdiagComplex_computeF
      64                 :             :  public :: CtqmcoffdiagComplex_run
      65                 :             :  public :: CtqmcoffdiagComplex_tryAddRemove
      66                 :             :  public :: CtqmcoffdiagComplex_trySwap
      67                 :             :  public :: CtqmcoffdiagComplex_measN
      68                 :             :  public :: CtqmcoffdiagComplex_measCorrelation
      69                 :             :  public :: CtqmcoffdiagComplex_measPerturbation
      70                 :             :  public :: CtqmcoffdiagComplex_getResult
      71                 :             :  public :: CtqmcoffdiagComplex_symmetrizeGreen
      72                 :             :  public :: CtqmcoffdiagComplex_getGreen
      73                 :             :  public :: CtqmcoffdiagComplex_getD
      74                 :             :  public :: CtqmcoffdiagComplex_getE
      75                 :             :  public :: CtqmcoffdiagComplex_printAll
      76                 :             :  public :: CtqmcoffdiagComplex_printQMC
      77                 :             :  public :: CtqmcoffdiagComplex_printGreen
      78                 :             :  public :: CtqmcoffdiagComplex_printD
      79                 :             :  public :: CtqmcoffdiagComplex_printE
      80                 :             :  public :: CtqmcoffdiagComplex_printPerturbation
      81                 :             :  public :: CtqmcoffdiagComplex_printCorrelation
      82                 :             :  public :: CtqmcoffdiagComplex_printSpectra
      83                 :             :  public :: CtqmcoffdiagComplex_destroy
      84                 :             :  public :: CtqmcoffdiagComplex_setMagmom
      85                 :             : 
      86                 :             : !!***
      87                 :             : 
      88                 :             : !!****t* m_CtqmcoffdiagComplex/CtqmcoffdiagComplex
      89                 :             : !! NAME
      90                 :             : !!  CtqmcoffdiagComplex
      91                 :             : !!
      92                 :             : !! FUNCTION
      93                 :             : !!  This structured datatype contains the necessary data
      94                 :             : !!
      95                 :             : !! COPYRIGHT
      96                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
      97                 :             : !!  This file is distributed under the terms of the
      98                 :             : !!  GNU General Public License, see ~abinit/COPYING
      99                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     100                 :             : !!
     101                 :             : !! SOURCE
     102                 :             : 
     103                 :             : TYPE CtqmcoffdiagComplex
     104                 :             : 
     105                 :             :   LOGICAL :: init = .FALSE.
     106                 :             : ! Flag: is MC initialized
     107                 :             : 
     108                 :             :   LOGICAL :: set  = .FALSE.
     109                 :             : ! Flag: ??
     110                 :             : 
     111                 :             :   LOGICAL :: setU = .FALSE.
     112                 :             : ! Flag: is U Set ?
     113                 :             : 
     114                 :             :   LOGICAL :: inF  = .FALSE.
     115                 :             : ! Flag: is hybridization fct in input ?
     116                 :             : 
     117                 :             :   LOGICAL :: done = .FALSE.
     118                 :             : ! Flag: is MC terminated ?
     119                 :             : 
     120                 :             :   LOGICAL :: para = .FALSE.
     121                 :             : ! Flag:  do we have parameters in input
     122                 :             : 
     123                 :             :   LOGICAL :: have_MPI = .FALSE.
     124                 :             : ! Flag:
     125                 :             : 
     126                 :             :   INTEGER :: opt_movie = 0
     127                 :             : !
     128                 :             : 
     129                 :             :   INTEGER :: opt_analysis = 0
     130                 :             : ! correlations
     131                 :             : 
     132                 :             :   INTEGER :: opt_check = 0
     133                 :             : ! various check 0
     134                 :             : ! various check 1 impurity
     135                 :             : ! various check 2 bath
     136                 :             : ! various check 3 both
     137                 :             : 
     138                 :             :   INTEGER :: opt_order = 0
     139                 :             : ! nb of segments max for analysis
     140                 :             : 
     141                 :             :   INTEGER :: opt_histo = 0
     142                 :             : ! Enable histo calc.
     143                 :             : 
     144                 :             :   INTEGER :: opt_noise = 0
     145                 :             : ! compute noise
     146                 :             : 
     147                 :             :   INTEGER :: opt_spectra = 0
     148                 :             : ! markov chain FT (correlation time)
     149                 :             : 
     150                 :             :   INTEGER :: opt_levels = 0
     151                 :             : ! do we have energy levels
     152                 :             : 
     153                 :             :   INTEGER :: opt_hybri_limit = 0
     154                 :             : ! do we have limit of hybridization (yes=1)
     155                 :             : 
     156                 :             :   INTEGER :: opt_nondiag = 0
     157                 :             : ! if opt_nondiag = 1 F is non diagonal.
     158                 :             : 
     159                 :             :   INTEGER :: prtopt = 1
     160                 :             : ! printing
     161                 :             : 
     162                 :             :   INTEGER :: flavors
     163                 :             : ! number of flavors
     164                 :             : 
     165                 :             :   INTEGER :: nspinor
     166                 :             : ! number of spinor
     167                 :             : 
     168                 :             :   INTEGER :: measurements
     169                 :             : !  The modulo used to measure the interaction energy and the number of electrons. Example : 2 means the measure is perform every two sweeps.
     170                 :             : 
     171                 :             :   INTEGER :: samples
     172                 :             : ! nb of L points (dmftqmc_l)
     173                 :             : 
     174                 :             : ! INTEGER :: endDensity
     175                 :             : ! second dimension of density allocatable array
     176                 :             : 
     177                 :             :   INTEGER(8) :: seed
     178                 :             : !
     179                 :             : 
     180                 :             :   INTEGER :: sweeps
     181                 :             : !
     182                 :             : 
     183                 :             :   INTEGER :: thermalization
     184                 :             : !
     185                 :             : 
     186                 :             :   INTEGER :: ostream
     187                 :             : ! output file
     188                 :             : 
     189                 :             :   INTEGER :: istream
     190                 :             : ! input file
     191                 :             : 
     192                 :             :   INTEGER :: modNoise1
     193                 :             : ! measure the noise each modNoise1
     194                 :             : 
     195                 :             :   INTEGER :: modNoise2
     196                 :             : ! measure the noise each modNoise2
     197                 :             : 
     198                 :             :   INTEGER :: activeFlavor
     199                 :             : ! orbital on which one do sth now
     200                 :             : 
     201                 :             :   INTEGER, DIMENSION(1:2) :: modGlobalMove
     202                 :             : ! 1: global move each modglobalmove(1)
     203                 :             : ! 2: we have done modglobalmove(2) for two different orbitals.
     204                 :             : 
     205                 :             :   INTEGER :: Wmax
     206                 :             : ! Max freq for FT
     207                 :             : 
     208                 :             :   DOUBLE PRECISION, DIMENSION(1:6) :: stats
     209                 :             : ! to now how many negative determinant, antisegments,seeme.e.twfs...j
     210                 :             : 
     211                 :             :   DOUBLE PRECISION :: swap
     212                 :             : ! nb of successfull GM
     213                 :             : 
     214                 :             :   DOUBLE PRECISION :: signvalue
     215                 :             : 
     216                 :             :   COMPLEX(KIND=8) :: phasevalue
     217                 :             : 
     218                 :             :   INTEGER :: MY_COMM
     219                 :             : !
     220                 :             : 
     221                 :             :   INTEGER :: rank
     222                 :             : !
     223                 :             : 
     224                 :             :   INTEGER :: size
     225                 :             : ! size of MY_COMM
     226                 :             : 
     227                 :             :   DOUBLE PRECISION :: runTime ! time for the run routine
     228                 :             : !
     229                 :             : 
     230                 :             :   DOUBLE PRECISION :: beta
     231                 :             : !
     232                 :             : 
     233                 :             :   DOUBLE PRECISION :: U
     234                 :             : 
     235                 :             :   COMPLEX(KIND=8), ALLOCATABLE, DIMENSION(:) :: mu
     236                 :             : ! levels
     237                 :             : 
     238                 :             :   COMPLEX(KIND=8), ALLOCATABLE, DIMENSION(:,:) :: hybri_limit
     239                 :             : ! coeff A such that F=-A/(iwn)
     240                 :             : 
     241                 :             :   TYPE(GreenHyboffdiagComplex)                        :: Greens
     242                 :             : ! Green's function
     243                 :             : 
     244                 :             : !  DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: measN
     245                 :             :   COMPLEX(KIND=8), ALLOCATABLE, DIMENSION(:,:) :: measN
     246                 :             : ! measure of occupations (3or4,flavor)
     247                 :             : 
     248                 :             :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:  ) :: measDE
     249                 :             : !  (flavor,flavor) double occupancies
     250                 :             : !  (1,1): total energy of correlation.
     251                 :             : 
     252                 :             :   DOUBLE PRECISION :: a_Noise
     253                 :             : ! Noise a exp (-bx) for the  noise
     254                 :             : 
     255                 :             :   DOUBLE PRECISION :: b_Noise
     256                 :             : ! Noise a exp (-bx) for the  noise
     257                 :             : 
     258                 :             :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:,:) :: abNoiseG   !(ab,tau,flavor)
     259                 :             : ! Noise but for G
     260                 :             : 
     261                 :             :   TYPE(Vector)             , DIMENSION(1:2) :: measNoise
     262                 :             :   TYPE(Vector), ALLOCATABLE, DIMENSION(:,:,:) :: measNoiseG       !(tau,flavor,mod)
     263                 :             : ! accumulate each value relataed to measurenoise 1 2
     264                 :             : 
     265                 :             : !#ifdef CTCtqmcoffdiagComplex_ANALYSIS
     266                 :             : !  INTEGER                                     :: order
     267                 :             :   DOUBLE PRECISION                            :: inv_dt
     268                 :             : ! 1/(beta/L)
     269                 :             : 
     270                 :             :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:  ) :: measPerturbation
     271                 :             : ! opt_order,nflavor
     272                 :             : 
     273                 :             :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:) :: occup_histo_time
     274                 :             : ! nflavor
     275                 :             : 
     276                 :             :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:) :: occupconfig
     277                 :             : ! 2**nflavor
     278                 :             : 
     279                 :             :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: suscep
     280                 :             : ! samples
     281                 :             : 
     282                 :             :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: chi
     283                 :             : ! samples
     284                 :             : 
     285                 :             :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: chicharge
     286                 :             : ! samples
     287                 :             : 
     288                 :             :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:) :: ntot
     289                 :             : ! occupation total, t2g, eg
     290                 :             : 
     291                 :             :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:  ) :: meas_fullemptylines
     292                 :             : ! opt_order,nflavor
     293                 :             : 
     294                 :             :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:,:) :: measCorrelation
     295                 :             : ! segment,antisegment,nflavor,nflavor
     296                 :             : 
     297                 :             : !#endif
     298                 :             : !#ifdef CTCtqmcoffdiagComplex_CHECK
     299                 :             :   DOUBLE PRECISION :: errorImpurity
     300                 :             : ! check
     301                 :             : 
     302                 :             :   DOUBLE PRECISION :: errorBath
     303                 :             : ! for check
     304                 :             : 
     305                 :             : !#endif
     306                 :             :   TYPE(BathOperatoroffdiagComplex)              :: Bath
     307                 :             : 
     308                 :             : 
     309                 :             :   TYPE(ImpurityOperator)          :: Impurity
     310                 :             : 
     311                 :             :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: density
     312                 :             : 
     313                 :             : END TYPE CtqmcoffdiagComplex
     314                 :             : !!***
     315                 :             : 
     316                 :             : !INTERFACE CtqmcoffdiagComplex_setG0w
     317                 :             : !  MODULE PROCEDURE CtqmcoffdiagComplex_setG0wFile, CtqmcoffdiagComplex_setG0wTab
     318                 :             : !END INTERFACE
     319                 :             : 
     320                 :             : CONTAINS
     321                 :             : !!***
     322                 :             : 
     323                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_init
     324                 :             : !! NAME
     325                 :             : !!  CtqmcoffdiagComplex_init
     326                 :             : !!
     327                 :             : !! FUNCTION
     328                 :             : !!  Initialize the type CtqmcoffdiagComplex
     329                 :             : !!  Allocate all the non optional variables
     330                 :             : !!
     331                 :             : !! COPYRIGHT
     332                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
     333                 :             : !!  This file is distributed under the terms of the
     334                 :             : !!  GNU General Public License, see ~abinit/COPYING
     335                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     336                 :             : !!
     337                 :             : !! INPUTS
     338                 :             : !!  op=ctqmc
     339                 :             : !!  ostream=where to write
     340                 :             : !!  istream=where to read the input parameters if so
     341                 :             : !!  bFile=logical argument True if input is read from istream
     342                 :             : !!  MY_COMM=mpi communicator for the CTQMC
     343                 :             : !!  iBuffer=input parameters if bFile is false
     344                 :             : !!
     345                 :             : !! OUTPUT
     346                 :             : !!
     347                 :             : !! SIDE EFFECTS
     348                 :             : !!
     349                 :             : !! NOTES
     350                 :             : !!
     351                 :             : !! SOURCE
     352                 :             : 
     353                 :           0 : SUBROUTINE CtqmcoffdiagComplex_init(op, ostream, istream, bFile, MY_COMM, iBuffer)
     354                 :             : 
     355                 :             : 
     356                 :             : #ifdef HAVE_MPI1
     357                 :             : include 'mpif.h'
     358                 :             : #endif
     359                 :             : !Arguments ------------------------------------
     360                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT)                      :: op
     361                 :             :   INTEGER  , INTENT(IN   )                      :: ostream
     362                 :             :   INTEGER  , INTENT(IN   )                      :: istream
     363                 :             :   LOGICAL  , INTENT(IN   )                      :: bFile
     364                 :             :   DOUBLE PRECISION, DIMENSION(1:11), OPTIONAL, INTENT(IN) :: iBuffer
     365                 :             :   INTEGER  , OPTIONAL, INTENT(IN   )                      :: MY_COMM
     366                 :             : !Local variables ------------------------------
     367                 :             : #ifdef HAVE_MPI
     368                 :             :   INTEGER                                       :: ierr
     369                 :             : #endif
     370                 :             :   !INTEGER                                       :: iflavor
     371                 :             : #ifdef __GFORTRAN__
     372                 :             : !  INTEGER                                       :: pid
     373                 :             : !  CHARACTER(LEN=5)                              :: Cpid
     374                 :             : !
     375                 :             : #endif
     376                 :             :   DOUBLE PRECISION, DIMENSION(1:11)             :: buffer
     377                 :             : 
     378                 :           0 :   op%ostream = ostream
     379                 :           0 :   op%istream = istream
     380                 :             : 
     381                 :             : ! --- RENICE ---
     382                 :             : !#ifdef __GFORTRAN__
     383                 :             : !  pid = GetPid()
     384                 :             : !  WRITE(Cpid,'(I5)') pid
     385                 :             : !  CALL SYSTEM('renice +19 '//TRIM(ADJUSTL(Cpid))//' > /dev/null')
     386                 :             : !#endif
     387                 :             : !! --- RENICE ---
     388                 :             : 
     389         [ #  # ]:           0 :   IF ( PRESENT(MY_COMM)) THEN
     390                 :             : #ifdef HAVE_MPI
     391                 :           0 :     op%have_MPI = .TRUE.
     392                 :           0 :     op%MY_COMM = MY_COMM
     393                 :           0 :     CALL MPI_Comm_rank(op%MY_COMM, op%rank, ierr)
     394                 :           0 :     CALL MPI_Comm_size(op%MY_COMM, op%size, ierr)
     395                 :             : #else
     396                 :             :     CALL WARN("MPI is not used                                    ")
     397                 :             :     op%have_MPI = .FALSE.
     398                 :             :     op%MY_COMM = -1
     399                 :             :     op%rank = 0
     400                 :             :     op%size = 1
     401                 :             : #endif
     402                 :             :   ELSE
     403                 :           0 :     op%have_MPI = .FALSE.
     404                 :           0 :     op%MY_COMM = -1
     405                 :           0 :     op%rank = 0
     406                 :           0 :     op%size = 1
     407                 :             :   END IF
     408                 :             : 
     409                 :             :   !IF ( op%rank .EQ. 0 ) THEN
     410                 :             : !  WRITE(ostream,'(A20)') 'Job reniced with +19'
     411                 :             :     !CALL FLUSH(ostream)
     412                 :             :   !END IF
     413                 :             : 
     414         [ #  # ]:           0 :   IF ( bFile .EQV. .TRUE. ) THEN
     415         [ #  # ]:           0 :     IF ( op%rank .EQ. 0 ) THEN
     416                 :             : 
     417                 :           0 :       READ(istream,*) buffer(1) !iseed
     418                 :           0 :       READ(istream,*) buffer(2) !op%sweeps
     419                 :           0 :       READ(istream,*) buffer(3) !op%thermalization
     420                 :           0 :       READ(istream,*) buffer(4) !op%measurements
     421                 :           0 :       READ(istream,*) buffer(5) !op%flavors
     422                 :           0 :       READ(istream,*) buffer(6) !op%samples
     423                 :           0 :       READ(istream,*) buffer(7) !op%beta
     424                 :           0 :       READ(istream,*) buffer(8) !U
     425                 :           0 :       READ(istream,*) buffer(9) !iTech
     426                 :           0 :       READ(istream,*) buffer(11)!op%nspinor
     427                 :             :       !READ(istream,*) buffer(9) !Wmax
     428                 :             : !#ifdef CTCtqmcoffdiagComplex_ANALYSIS
     429                 :             :       !READ(istream,*) buffer(10) !order
     430                 :             : !#endif
     431                 :             :     END IF
     432                 :             : 
     433                 :             : #ifdef HAVE_MPI
     434         [ #  # ]:           0 :     IF ( op%have_MPI .EQV. .TRUE. ) &
     435                 :             :       CALL MPI_Bcast(buffer, 11, MPI_DOUBLE_PRECISION, 0,    &
     436                 :           0 :                    op%MY_COMM, ierr)
     437                 :             : #endif
     438         [ #  # ]:           0 :   ELSE IF ( PRESENT(iBuffer) ) THEN
     439                 :           0 :     buffer(1:11) = iBuffer(1:11)
     440                 :             :   ELSE
     441                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_init : No input parameters                    ")
     442                 :             :   END IF
     443                 :             : 
     444                 :           0 :   CALL CtqmcoffdiagComplex_setParameters(op, buffer)
     445                 :             : 
     446                 :           0 :   CALL CtqmcoffdiagComplex_allocateAll(op)
     447                 :             : 
     448                 :             :   CALL GreenHyboffdiagComplex_init(op%Greens,op%samples, op%beta,INT(buffer(5)), &
     449                 :           0 :   iTech=INT(buffer(9)),MY_COMM=op%MY_COMM)
     450                 :             : 
     451                 :             : 
     452                 :             : !  op%seg_added    = 0.d0
     453                 :             : !  op%anti_added   = 0.d0
     454                 :             : !  op%seg_removed  = 0.d0
     455                 :             : !  op%anti_removed = 0.d0
     456                 :             : !  op%seg_sign     = 0.d0
     457                 :             : !  op%anti_sign    = 0.d0
     458         [ #  # ]:           0 :   op%stats(:)     = 0.d0
     459                 :             :  ! write(std_out,*) "op%stats",op%stats
     460                 :           0 :   op%signvalue    = 1.d0
     461                 :           0 :   op%phasevalue   = cmplx(1.d0,0.d0,kind=8)
     462                 :             : !  op%signvaluecurrent    = 0.d0
     463                 :             : !  op%signvaluemeas = 0.d0
     464                 :           0 :   op%swap         = 0.d0
     465                 :           0 :   op%runTime      = 0.d0
     466                 :             : 
     467                 :           0 :   CALL Vector_init(op%measNoise(1),op%sweeps/op%modNoise1)
     468                 :           0 :   CALL Vector_init(op%measNoise(2),(op%sweeps/op%modNoise1+1)*CTQMC_SLICE2)
     469                 :             :   !CALL Vector_init(op%measNoise(3),101)
     470                 :             :   !CALL Vector_init(op%measNoise(4),101)
     471                 :             : 
     472   [ #  #  #  # ]:           0 :   op%set  = op%para .AND. op%inF
     473                 :           0 :   op%done = .FALSE.
     474                 :           0 :   op%init = .TRUE.
     475                 :             : 
     476                 :             : !#ifdef CTCtqmcoffdiagComplex_CHECK
     477                 :           0 :   op%errorImpurity = 0.d0
     478                 :           0 :   op%errorBath     = 0.d0
     479                 :             : !#endif
     480                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_init
     481                 :             : !!***
     482                 :             : 
     483                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_setParameters
     484                 :             : !! NAME
     485                 :             : !!  CtqmcoffdiagComplex_setParameters
     486                 :             : !!
     487                 :             : !! FUNCTION
     488                 :             : !!  set all parameters and operators
     489                 :             : !!
     490                 :             : !! COPYRIGHT
     491                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
     492                 :             : !!  This file is distributed under the terms of the
     493                 :             : !!  GNU General Public License, see ~abinit/COPYING
     494                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     495                 :             : !!
     496                 :             : !! INPUTS
     497                 :             : !!  op=ctqmc
     498                 :             : !!  buffer=input parameters
     499                 :             : !!
     500                 :             : !! OUTPUT
     501                 :             : !!
     502                 :             : !! SIDE EFFECTS
     503                 :             : !!
     504                 :             : !! NOTES
     505                 :             : !!
     506                 :             : !! SOURCE
     507                 :             : 
     508                 :           0 : SUBROUTINE CtqmcoffdiagComplex_setParameters(op,buffer)
     509                 :             : 
     510                 :             : !Arguments ------------------------------------
     511                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT)                         :: op
     512                 :             :   DOUBLE PRECISION, DIMENSION(1:11), INTENT(IN   ) :: buffer
     513                 :             : 
     514                 :             : 
     515                 :           0 :   op%thermalization = INT(buffer(3)) !op%thermalization
     516                 :           0 :   CALL CtqmcoffdiagComplex_setSeed(op,INT(buffer(1)))
     517                 :           0 :   CALL CtqmcoffdiagComplex_setSweeps(op,buffer(2))
     518                 :             : 
     519                 :           0 :   op%measurements   = INT(buffer(4)) !op%measurements
     520                 :           0 :   op%flavors        = INT(buffer(5))
     521                 :           0 :   op%samples        = INT(buffer(6)) !op%samples
     522                 :           0 :   op%beta           = buffer(7)      !op%beta
     523                 :           0 :   op%U              = buffer(8)      !U
     524                 :           0 :   op%opt_nondiag    = INT(buffer(10))
     525                 :           0 :   op%nspinor        = INT(buffer(11)) !op%nspinor
     526                 :             : !  op%mu             = buffer(9)      !op%mu
     527                 :             :   !op%Wmax           = INT(buffer(9)) !Freq
     528                 :             : !#ifdef CTCtqmcoffdiagComplex_ANALYSIS
     529                 :             : !  op%order          = INT(buffer(10)) ! order
     530                 :           0 :   op%inv_dt         = op%samples / op%beta
     531                 :             : !#endif
     532                 :             : 
     533                 :             :   !CALL ImpurityOperator_init(op%Impurity,op%flavors,op%beta, op%samples)
     534                 :           0 :   CALL ImpurityOperator_init(op%Impurity,op%flavors,op%beta)
     535         [ #  # ]:           0 :   IF ( op%U .GE. 0.d0 ) THEN
     536                 :           0 :     CALL ImpurityOperator_computeU(op%Impurity,op%U,0.d0)
     537                 :           0 :     op%setU = .TRUE.
     538                 :             :   END IF
     539                 :             : !  op%mu = op%mu + op%Impurity%shift_mu
     540                 :             : !sui!write(std_out,*) "op%opt_nondiag",op%opt_nondiag
     541                 :           0 :   CALL BathOperatoroffdiagComplex_init(op%Bath, op%flavors, op%samples, op%beta, INT(buffer(9)), op%opt_nondiag)
     542                 :             : 
     543                 :           0 :   op%para = .TRUE.
     544                 :             : 
     545                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_setParameters
     546                 :             : !!***
     547                 :             : 
     548                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_setSweeps
     549                 :             : !! NAME
     550                 :             : !!  CtqmcoffdiagComplex_setSweeps
     551                 :             : !!
     552                 :             : !! FUNCTION
     553                 :             : !!  set the number of sweeps
     554                 :             : !!
     555                 :             : !! COPYRIGHT
     556                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
     557                 :             : !!  This file is distributed under the terms of the
     558                 :             : !!  GNU General Public License, see ~abinit/COPYING
     559                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     560                 :             : !!
     561                 :             : !! INPUTS
     562                 :             : !!  op=ctqmc
     563                 :             : !!  sweeps=asked sweeps
     564                 :             : !!
     565                 :             : !! OUTPUT
     566                 :             : !!
     567                 :             : !! SIDE EFFECTS
     568                 :             : !!
     569                 :             : !! NOTES
     570                 :             : !!
     571                 :             : !! SOURCE
     572                 :             : 
     573                 :           0 : SUBROUTINE CtqmcoffdiagComplex_setSweeps(op,sweeps)
     574                 :             : 
     575                 :             : !Arguments ------------------------------------
     576                 :             :   TYPE(CtqmcoffdiagComplex)         , INTENT(INOUT) :: op
     577                 :             :   DOUBLE PRECISION  , INTENT(IN   ) :: sweeps
     578                 :             : 
     579                 :           0 :   op%sweeps = NINT(sweeps / DBLE(op%size))
     580                 :             : !  !write(std_out,*) op%sweeps,NINT(sweeps / DBLE(op%size)),ANINT(sweeps/DBLE(op%size))
     581         [ #  # ]:           0 :   IF ( DBLE(op%sweeps) .NE. ANINT(sweeps/DBLE(op%size)) ) &
     582                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_setSweeps : sweeps is negative or too big     ")
     583         [ #  # ]:           0 :   IF ( op%sweeps .LT. 2*CTQMC_SLICE1 ) THEN  !202
     584                 :           0 :     CALL WARNALL("CtqmcoffdiagComplex_setSweeps : # sweeps automtically changed     ")
     585                 :           0 :     op%sweeps = 2*CTQMC_SLICE1
     586                 :             : !  ELSE IF ( op%sweeps .LT. op%thermalization ) THEN
     587                 :             : !    CALL WARNALL("CtqmcoffdiagComplex_setSweeps : Thermalization > sweeps / cpu -> auto fix")
     588                 :             : !    op%sweeps = op%thermalization
     589                 :             :   END IF
     590                 :           0 :   IF ( DBLE(NINT(DBLE(op%sweeps)*DBLE(op%size)/DBLE(CTQMC_SLICE1))) .NE.  &
     591         [ #  # ]:           0 :   ANINT(DBLE(op%sweeps)*DBLE(op%size)/DBLE(CTQMC_SLICE1)) ) THEN
     592                 :           0 :     op%modNoise1 = op%sweeps
     593                 :             :   ELSE
     594                 :           0 :     op%modNoise1    = MIN(op%sweeps,INT(DBLE(op%sweeps)*DBLE(op%size) / DBLE(CTQMC_SLICE1))) !101
     595                 :             :   END IF
     596                 :           0 :   op%modNoise2    = MAX(op%modNoise1 / CTQMC_SLICE2, 1)   ! 100
     597                 :             : !  op%modGlobalMove(1) = op%thermalization / 10 + 1
     598                 :             : !  op%modGlobalMove(2) = 0
     599                 :             : 
     600                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_setSweeps
     601                 :             : !!***
     602                 :             : 
     603                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_setSeed
     604                 :             : !! NAME
     605                 :             : !!  CtqmcoffdiagComplex_setSeed
     606                 :             : !!
     607                 :             : !! FUNCTION
     608                 :             : !!  initialize random number generator
     609                 :             : !!
     610                 :             : !! COPYRIGHT
     611                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
     612                 :             : !!  This file is distributed under the terms of the
     613                 :             : !!  GNU General Public License, see ~abinit/COPYING
     614                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     615                 :             : !!
     616                 :             : !! INPUTS
     617                 :             : !!  op=ctqmc
     618                 :             : !!  iseed=seed from imput
     619                 :             : !!
     620                 :             : !! OUTPUT
     621                 :             : !!
     622                 :             : !! SIDE EFFECTS
     623                 :             : !!
     624                 :             : !! NOTES
     625                 :             : !!
     626                 :             : !! SOURCE
     627                 :             : 
     628                 :           0 : SUBROUTINE CtqmcoffdiagComplex_setSeed(op,iseed)
     629                 :             : 
     630                 :             : !Arguments ------------------------------------
     631                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT)           :: op
     632                 :             :   INTEGER  , INTENT(IN   )           :: iseed
     633                 :             : !Local variables ------------------------------
     634                 :             :   !INTEGER                            :: n
     635                 :             :   !INTEGER                            :: i
     636                 :             :   !INTEGER, DIMENSION(:), ALLOCATABLE :: seed
     637                 :             : 
     638                 :             : 
     639                 :             :   !CALL RANDOM_SEED(size = n)
     640                 :             :   !MALLOC(seed,(n))
     641                 :             :   !seed =  iseed + (/ (i - 1, i = 1, n) /)
     642                 :             : 
     643                 :             :   !CALL RANDOM_SEED(PUT = seed+op%rank)
     644                 :             : 
     645                 :             :   !FREE(seed)
     646                 :             : 
     647                 :           0 :   op%seed=INT(iseed+op%rank,8)
     648                 :             : 
     649                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_setSeed
     650                 :             : !!***
     651                 :             : 
     652                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_allocateAll
     653                 :             : !! NAME
     654                 :             : !!  CtqmcoffdiagComplex_allocateAll
     655                 :             : !!
     656                 :             : !! FUNCTION
     657                 :             : !!  Allocate all non option variables
     658                 :             : !!
     659                 :             : !! COPYRIGHT
     660                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
     661                 :             : !!  This file is distributed under the terms of the
     662                 :             : !!  GNU General Public License, see ~abinit/COPYING
     663                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     664                 :             : !!
     665                 :             : !! INPUTS
     666                 :             : !!  op=ctqmc
     667                 :             : !!
     668                 :             : !! OUTPUT
     669                 :             : !!
     670                 :             : !! SIDE EFFECTS
     671                 :             : !!
     672                 :             : !! NOTES
     673                 :             : !!
     674                 :             : !! SOURCE
     675                 :             : 
     676                 :           0 : SUBROUTINE CtqmcoffdiagComplex_allocateAll(op)
     677                 :             : 
     678                 :             : !Arguments ------------------------------------
     679                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT) :: op
     680                 :             : !Local variables ------------------------------
     681                 :             :   INTEGER                  :: flavors
     682                 :             : 
     683         [ #  # ]:           0 :   IF ( .NOT. op%para ) &
     684                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_allocateAll : CtqmcoffdiagComplex_setParameters never called  ")
     685                 :             : 
     686                 :           0 :   flavors = op%flavors
     687                 :             : 
     688                 :             : 
     689                 :             : !  number of electrons
     690         [ #  # ]:           0 :   FREEIF(op%measN)
     691   [ #  #  #  #  :           0 :   MALLOC(op%measN,(1:4,1:flavors))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     692   [ #  #  #  # ]:           0 :   op%measN = cmplx(0.d0,0.d0,kind=8)
     693                 :             : 
     694                 :             : !  double occupancies
     695         [ #  # ]:           0 :   FREEIF(op%measDE)
     696   [ #  #  #  #  :           0 :   MALLOC(op%measDE,(1:flavors,1:flavors) )
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
     697   [ #  #  #  # ]:           0 :   op%measDE = real(cmplx(0.d0,0.d0,kind=8))
     698                 :             : 
     699         [ #  # ]:           0 :   FREEIF(op%mu)
     700                 :             : #ifdef FC_LLVM
     701                 :             :   ! LLVM 16 doesn't recognize this macro here
     702                 :             :   MALLOC(op%mu, (1:flavors) )
     703                 :             : #else
     704   [ #  #  #  #  :           0 :   MALLOC(op%mu, (1:flavors))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     705                 :             : #endif
     706         [ #  # ]:           0 :   op%mu = 0.d0
     707         [ #  # ]:           0 :   FREEIF(op%hybri_limit)
     708                 :             : #ifdef FC_LLVM
     709                 :             :   ! LLVM 16 doesn't recognize this macro here
     710                 :             :   MALLOC(op%hybri_limit, (flavors,flavors) )
     711                 :             : #else
     712   [ #  #  #  #  :           0 :   MALLOC(op%hybri_limit, (flavors,flavors))
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
     713                 :             : #endif
     714   [ #  #  #  # ]:           0 :   op%hybri_limit = czero
     715                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_allocateAll
     716                 :             : !!***
     717                 :             : 
     718                 :             : !#ifdef CTCtqmcoffdiagComplex_ANALYSIS
     719                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_allocateOpt
     720                 :             : !! NAME
     721                 :             : !!  CtqmcoffdiagComplex_allocateOpt
     722                 :             : !!
     723                 :             : !! FUNCTION
     724                 :             : !!  allocate all option variables
     725                 :             : !!
     726                 :             : !! COPYRIGHT
     727                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
     728                 :             : !!  This file is distributed under the terms of the
     729                 :             : !!  GNU General Public License, see ~abinit/COPYING
     730                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     731                 :             : !!
     732                 :             : !! INPUTS
     733                 :             : !!  op=ctqmc
     734                 :             : !!
     735                 :             : !! OUTPUT
     736                 :             : !!
     737                 :             : !! SIDE EFFECTS
     738                 :             : !!
     739                 :             : !! NOTES
     740                 :             : !!
     741                 :             : !! SOURCE
     742                 :             : 
     743                 :           0 : SUBROUTINE CtqmcoffdiagComplex_allocateOpt(op)
     744                 :             : 
     745                 :             : !Arguments ------------------------------------
     746                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT) :: op
     747                 :             : !Local variables ------------------------------
     748                 :             :   INTEGER :: i
     749                 :             :   INTEGER :: j
     750                 :             :   INTEGER :: k
     751                 :             : 
     752         [ #  # ]:           0 :   IF ( .NOT. op%para ) &
     753                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_allocateOpt : CtqmcoffdiagComplex_setParameters never called  ")
     754                 :             : 
     755         [ #  # ]:           0 :   IF ( op%opt_analysis .EQ. 1 ) THEN
     756         [ #  # ]:           0 :     FREEIF(op%measCorrelation)
     757   [ #  #  #  #  :           0 :     MALLOC(op%measCorrelation,(1:op%samples+1,1:3,1:op%flavors))
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
     758   [ #  #  #  #  :           0 :     op%measCorrelation = 0.d0
                   #  # ]
     759                 :             :   END IF
     760                 :             : 
     761         [ #  # ]:           0 :   IF ( op%opt_order .GT. 0 ) THEN
     762         [ #  # ]:           0 :     FREEIF(op%measPerturbation)
     763   [ #  #  #  #  :           0 :     MALLOC(op%measPerturbation,(1:op%opt_order,1:op%flavors))
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
     764   [ #  #  #  # ]:           0 :     op%measPerturbation = 0.d0
     765         [ #  # ]:           0 :     FREEIF(op%meas_fullemptylines)
     766   [ #  #  #  #  :           0 :     MALLOC(op%meas_fullemptylines,(2,1:op%flavors))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     767   [ #  #  #  # ]:           0 :     op%meas_fullemptylines = 0.d0
     768                 :             :   END IF
     769                 :             : 
     770         [ #  # ]:           0 :   IF ( op%opt_histo .GT. 0 ) THEN
     771         [ #  # ]:           0 :     FREEIF(op%occup_histo_time)
     772   [ #  #  #  #  :           0 :     MALLOC(op%occup_histo_time,(1:op%flavors+1))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     773         [ #  # ]:           0 :     op%occup_histo_time= 0.d0
     774         [ #  # ]:           0 :     FREEIF(op%occupconfig)
     775   [ #  #  #  #  :           0 :     MALLOC(op%occupconfig,(1:2**op%flavors))
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
     776         [ #  # ]:           0 :     op%occupconfig= 0.d0
     777         [ #  # ]:           0 :     FREEIF(op%suscep)
     778   [ #  #  #  #  :           0 :     MALLOC(op%suscep,(1:3,1:op%samples))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     779   [ #  #  #  # ]:           0 :     op%suscep= 0.d0
     780         [ #  # ]:           0 :     FREEIF(op%chi)
     781   [ #  #  #  #  :           0 :     MALLOC(op%chi,(1:3,1:op%samples))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     782   [ #  #  #  # ]:           0 :     op%chi= 0.d0
     783         [ #  # ]:           0 :     FREEIF(op%chicharge)
     784   [ #  #  #  #  :           0 :     MALLOC(op%chicharge,(1:3,1:op%samples))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
     785   [ #  #  #  # ]:           0 :     op%chicharge= 0.d0
     786         [ #  # ]:           0 :     FREEIF(op%ntot)
     787   [ #  #  #  # ]:           0 :     MALLOC(op%ntot,(1:3))
     788         [ #  # ]:           0 :     op%ntot= 0.d0
     789                 :             :   END IF
     790                 :             : 
     791         [ #  # ]:           0 :   IF ( op%opt_noise .EQ. 1 ) THEN
     792         [ #  # ]:           0 :     IF ( ALLOCATED(op%measNoiseG) ) THEN
     793         [ #  # ]:           0 :       DO i=1,2
     794         [ #  # ]:           0 :         DO j = 1, op%flavors
     795         [ #  # ]:           0 :           DO k= 1, op%samples+1
     796                 :           0 :             CALL Vector_destroy(op%measNoiseG(k,j,i))
     797                 :             :           END DO
     798                 :             :         END DO
     799                 :             :       END DO
     800   [ #  #  #  #  :           0 :       DT_FREE(op%measNoiseG)
             #  #  #  # ]
     801                 :             :     END IF
     802   [ #  #  #  #  :           0 :     DT_MALLOC(op%measNoiseG,(1:op%samples+1,1:op%flavors,1:2))
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
     803                 :             :     !DO i=1,2
     804         [ #  # ]:           0 :       DO j = 1, op%flavors
     805         [ #  # ]:           0 :         DO k= 1, op%samples+1
     806                 :           0 :           CALL Vector_init(op%measNoiseG(k,j,1),CTQMC_SLICE1)
     807                 :             :         END DO
     808                 :             :       END DO
     809         [ #  # ]:           0 :       DO j = 1, op%flavors
     810         [ #  # ]:           0 :         DO k= 1, op%samples+1
     811                 :           0 :           CALL Vector_init(op%measNoiseG(k,j,2),CTQMC_SLICE1*CTQMC_SLICE2+1) ! +1 pour etre remplacer ceil
     812                 :             :         END DO
     813                 :             :       END DO
     814                 :             :     !END DO
     815         [ #  # ]:           0 :     FREEIF(op%abNoiseG)
     816   [ #  #  #  #  :           0 :     MALLOC(op%aBNoiseG,(1:2,1:op%samples+1,op%flavors))
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
     817   [ #  #  #  #  :           0 :     op%abNoiseG = 0.d0
                   #  # ]
     818                 :             :   END IF
     819                 :             : 
     820         [ #  # ]:           0 :   IF (op%opt_spectra .GE. 1 ) THEN
     821         [ #  # ]:           0 :     FREEIF(op%density)
     822                 :             :     !MALLOC(op%density,(1:op%thermalization,1:op%flavors))
     823         [ #  # ]:           0 :     i = CEILING(DBLE(op%thermalization+op%sweeps)/DBLE(op%measurements*op%opt_spectra))
     824   [ #  #  #  #  :           0 :     MALLOC(op%density,(1:op%flavors+1,1:i))
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
     825   [ #  #  #  # ]:           0 :     op%density = 0.d0
     826                 :             : !   op%endDensity=i
     827                 :             : !ENDPROBLEM
     828                 :             : 
     829                 :             :   END IF
     830                 :             : !#endif
     831                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_allocateOpt
     832                 :             : !!***
     833                 :             : 
     834                 :             : !SUBROUTINE CtqmcoffdiagComplex_setG0wFile(op,istream,opt_fk)
     835                 :             : !include 'mpif.h'
     836                 :             : !#endif
     837                 :             : !  TYPE(CtqmcoffdiagComplex), INTENT(INOUT)                      :: op
     838                 :             : !  INTEGER  , INTENT(IN   )                      :: istream
     839                 :             : !  INTEGER                         , INTENT(IN ) :: opt_fk
     840                 :             : !!  DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: F
     841                 :             : !  COMPLEX*16      , DIMENSION(:,:), ALLOCATABLE :: Gomega
     842                 :             : !  INTEGER                                       :: flavors
     843                 :             : !  INTEGER                                       :: iflavor
     844                 :             : !  INTEGER                                       :: iomega
     845                 :             : !  TYPE(GreenHyboffdiag) :: temp
     846                 :             : !#ifdef HAVE_MPI
     847                 :             : !  INTEGER                                       :: ierr
     848                 :             : !#endif
     849                 :             : !
     850                 :             : !  IF ( .NOT. op%para ) &
     851                 :             : !    CALL ERROR("CtqmcoffdiagComplex_setG0wFile : CtqmcoffdiagComplex_setParameters never called   ")
     852                 :             : !
     853                 :             : !  flavors = op%flavors
     854                 :             : !
     855                 :             : !!  MALLOC(F,(1:op%samples+1,1:flavors))
     856                 :             : !  MALLOC(Gomega,(1:op%Wmax,1:flavors))
     857                 :             : !  IF ( op%have_MPI .EQV. .TRUE. ) THEN
     858                 :             : !    CALL GreenHyboffdiag_init(temp, op%samples, op%beta, op%MY_COMM)
     859                 :             : !  ELSE
     860                 :             : !    CALL GreenHyboffdiag_init(temp, op%samples, op%beta)
     861                 :             : !  END IF
     862                 :             : !
     863                 :             : !  DO iflavor = 1, flavors
     864                 :             : !    IF ( op%rank .EQ. 0 ) THEN
     865                 :             : !      DO iomega=1, op%Wmax
     866                 :             : !        READ(istream,*) Gomega(iomega,iflavor)
     867                 :             : !      END DO
     868                 :             : !    END IF
     869                 :             : !  END DO
     870                 :             : !
     871                 :             : !#ifdef HAVE_MPI
     872                 :             : !  CALL MPI_Bcast(Gomega, op%Wmax*flavors, MPI_DOUBLE_COMPLEX, 0,    &
     873                 :             : !                 op%MY_COMM, ierr)
     874                 :             : !#endif
     875                 :             : !
     876                 :             : !!  CALL GreenHyboffdiag_backFourier(temp,Gomega(:,1))
     877                 :             : !!  WRITE(10,*) Gomega(:,1)
     878                 :             : !!  CALL GreenHyboffdiag_print(temp)
     879                 :             : !!  CALL GreenHyboffdiag_forFourier (temp,Gomega(:,1))
     880                 :             : !!  WRITE(11,*) Gomega(:,1)
     881                 :             : !  CALL CtqmcoffdiagComplex_setG0wTab(op,Gomega,opt_fk)
     882                 :             : !!  CALL CtqmcoffdiagComplex_computeF(op,Gomega, op%Wmax, F) ! mu is changed
     883                 :             : !  FREE(Gomega)
     884                 :             : !!  CALL BathOperatoroffdiag_setF(op%Bath, F)
     885                 :             : !!  CALL BathOperatoroffdiag_printF(op%Bath)
     886                 :             : !!  FREE(F)
     887                 :             : !
     888                 :             : !!  stop
     889                 :             : !!  op%inF = .TRUE.
     890                 :             : !!  op%set = .TRUE.
     891                 :             : !
     892                 :             : !END SUBROUTINE CtqmcoffdiagComplex_setG0wFile
     893                 :             : !!***
     894                 :             : 
     895                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_setG0wTab
     896                 :             : !! NAME
     897                 :             : !!  CtqmcoffdiagComplex_setG0wTab
     898                 :             : !!
     899                 :             : !! FUNCTION
     900                 :             : !!  Set Gow from input array
     901                 :             : !!
     902                 :             : !! COPYRIGHT
     903                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
     904                 :             : !!  This file is distributed under the terms of the
     905                 :             : !!  GNU General Public License, see ~abinit/COPYING
     906                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     907                 :             : !!
     908                 :             : !! INPUTS
     909                 :             : !!  op=ctqmc
     910                 :             : !!  Gomega=G0w
     911                 :             : !!  opt_fk=F is already inversed with out iwn
     912                 :             : !!
     913                 :             : !! OUTPUT
     914                 :             : !!
     915                 :             : !! SIDE EFFECTS
     916                 :             : !!
     917                 :             : !! NOTES
     918                 :             : !!
     919                 :             : !! SOURCE
     920                 :             : 
     921         [ #  # ]:           0 : SUBROUTINE CtqmcoffdiagComplex_setG0wTab(op,Gomega,opt_fk,Iatom,fname)
     922                 :             : 
     923                 :             : !Arguments ------------------------------------
     924                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT)       :: op
     925                 :             :   COMPLEX(KIND=8), DIMENSION(:,:,:), INTENT(IN ) :: Gomega
     926                 :             :   INTEGER                         , INTENT(IN )  :: opt_fk
     927                 :             :   INTEGER, INTENT(IN)                            :: Iatom
     928                 :             :   CHARACTER(LEN=fnlen), INTENT(INOUT)            :: fname
     929                 :             : !Local variable -------------------------------
     930                 :             :   COMPLEX(KIND=8), DIMENSION(:,:,:), ALLOCATABLE :: F
     931                 :             : 
     932         [ #  # ]:           0 :   IF ( .NOT. op%para ) &
     933                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_setG0wTab : CtqmcoffdiagComplex_setParameters never called    ")
     934                 :             : 
     935   [ #  #  #  #  :           0 :   MALLOC(F,(1:op%samples+1,1:op%flavors,1:op%flavors))
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                      # ]
     936                 :           0 :   CALL CtqmcoffdiagComplex_computeF(op,Gomega, F, opt_fk,Iatom,fname)  ! mu is changed
     937                 :             :  !write(6,*) "eee111"
     938                 :           0 :   CALL BathOperatoroffdiagComplex_setF(op%Bath, F)
     939                 :             :  ! CALL BathOperatoroffdiag_printF(op%Bath,333)
     940                 :             :  !write(6,*) "eee"
     941         [ #  # ]:           0 :   FREE(F)
     942                 :             : 
     943                 :           0 :   op%inF = .TRUE.
     944                 :           0 :   op%set = .TRUE.
     945                 :             : 
     946                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_setG0wTab
     947                 :             : !!***
     948                 :             : 
     949                 :             : !SUBROUTINE CtqmcoffdiagComplex_setFwK(op,Gomega)
     950                 :             : !  COMPLEX*16      , DIMENSION(:,:), INTENT(IN ) :: Gomega
     951                 :             : !  DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: F
     952                 :             : !
     953                 :             : !  IF ( .NOT. op%para ) &
     954                 :             : !    CALL ERROR("CtqmcoffdiagComplex_setG0wTab : CtqmcoffdiagComplex_setParameters never called    ")
     955                 :             : !
     956                 :             : !  MALLOC(F,(1:op%samples+1,1:op%flavors))
     957                 :             : !  CALL CtqmcoffdiagComplex_computeFK(op,Gomega, op%Wmax, F)  ! mu is changed
     958                 :             : !  CALL BathOperatoroffdiag_setF(op%Bath, F)
     959                 :             : !  CALL BathOperatoroffdiag_printF(op%Bath)
     960                 :             : !  FREE(F)
     961                 :             : !
     962                 :             : !  op%inF = .TRUE.
     963                 :             : !  op%set = .TRUE.
     964                 :             : !
     965                 :             : !END SUBROUTINE CtqmcoffdiagComplex_setFwK
     966                 :             : !!***
     967                 :             : 
     968                 :             : !SUBROUTINE CtqmcoffdiagComplex_setBand(op, mu, U)
     969                 :             : !  DOUBLE PRECISION, INTENT(IN   ) :: mu
     970                 :             : !  DOUBLE PRECISION, INTENT(IN   ) :: U
     971                 :             : !
     972                 :             : !  IF ( .NOT. op%para ) &
     973                 :             : !    CALL ERROR("CtqmcoffdiagComplex_setBand : CtqmcoffdiagComplex_setParameters never called      ")
     974                 :             : !
     975                 :             : !  CALL ImpurityOperator_setU(op%Impurity, U, 0.d0)
     976                 :             : !  !op%mu = mu + op%Impurity%shift_mu
     977                 :             : !END SUBROUTINE CtqmcoffdiagComplex_setBand
     978                 :             : !!***
     979                 :             : 
     980                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_setU
     981                 :             : !! NAME
     982                 :             : !!  CtqmcoffdiagComplex_setU
     983                 :             : !!
     984                 :             : !! FUNCTION
     985                 :             : !!  set the interaction matrix
     986                 :             : !!
     987                 :             : !! COPYRIGHT
     988                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
     989                 :             : !!  This file is distributed under the terms of the
     990                 :             : !!  GNU General Public License, see ~abinit/COPYING
     991                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
     992                 :             : !!
     993                 :             : !! INPUTS
     994                 :             : !!  op=ctqmc
     995                 :             : !!  matU=interaction matrix
     996                 :             : !!
     997                 :             : !! OUTPUT
     998                 :             : !!
     999                 :             : !! SIDE EFFECTS
    1000                 :             : !!
    1001                 :             : !! NOTES
    1002                 :             : !!
    1003                 :             : !! SOURCE
    1004                 :             : 
    1005         [ #  # ]:           0 : SUBROUTINE CtqmcoffdiagComplex_setU(op,matU)
    1006                 :             : 
    1007                 :             : !Arguments ------------------------------------
    1008                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT) ::op
    1009                 :             : !Local variables ------------------------------
    1010                 :             :  COMPLEX(KIND=8), DIMENSION(:,:), INTENT(IN) :: matU
    1011                 :             : 
    1012   [ #  #  #  # ]:           0 :   IF ( SIZE(matU) .NE. op%flavors*op%flavors ) &
    1013                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_setU : Wrong interaction matrix (size)        ")
    1014                 :             : 
    1015                 :           0 :   CALL ImpurityOperator_setUmatComplex(op%Impurity, matU)
    1016                 :           0 :   op%setU = .TRUE.
    1017                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_setU
    1018                 :             : !!***
    1019                 :             : 
    1020                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_clear
    1021                 :             : !! NAME
    1022                 :             : !!  CtqmcoffdiagComplex_clear
    1023                 :             : !!
    1024                 :             : !! FUNCTION
    1025                 :             : !!  clear a ctqmc run
    1026                 :             : !!
    1027                 :             : !! COPYRIGHT
    1028                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    1029                 :             : !!  This file is distributed under the terms of the
    1030                 :             : !!  GNU General Public License, see ~abinit/COPYING
    1031                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    1032                 :             : !!
    1033                 :             : !! INPUTS
    1034                 :             : !!  op=ctqmc
    1035                 :             : !!
    1036                 :             : !! OUTPUT
    1037                 :             : !!
    1038                 :             : !! SIDE EFFECTS
    1039                 :             : !!
    1040                 :             : !! NOTES
    1041                 :             : !!
    1042                 :             : !! SOURCE
    1043                 :             : 
    1044                 :           0 : SUBROUTINE CtqmcoffdiagComplex_clear(op)
    1045                 :             : 
    1046                 :             : !Arguments ------------------------------------
    1047                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT) :: op
    1048                 :             : !Local variables ------------------------------
    1049                 :             :   INTEGER :: i
    1050                 :             :   INTEGER :: j
    1051                 :             :   INTEGER :: k
    1052                 :             : 
    1053         [ #  # ]:           0 :   op%measN(1,:) = cmplx(0.d0,0.d0,kind=8)
    1054         [ #  # ]:           0 :   op%measN(2,:) = cmplx(0.d0,0.d0,kind=8)
    1055                 :             :   !Do not set measN(3,:) to 0 to avoid erasing N between therm and ctqmc
    1056         [ #  # ]:           0 :   op%measN(4,:) = cmplx(0.d0,0.d0,kind=8)
    1057   [ #  #  #  # ]:           0 :   op%measDE = real(cmplx(0.d0,0.d0,kind=8))
    1058                 :             : !  op%seg_added    = 0.d0
    1059                 :             : !  op%anti_added   = 0.d0
    1060                 :             : !  op%seg_removed  = 0.d0
    1061                 :             : !  op%anti_removed = 0.d0
    1062                 :             : !  op%seg_sign     = 0.d0
    1063                 :             : !  op%anti_sign    = 0.d0
    1064         [ #  # ]:           0 :   op%stats(:)     = 0.d0
    1065                 :             : !  op%signvaluecurrent    = 0.d0
    1066                 :             : !  op%signvaluemeas    = 0.d0
    1067                 :           0 :   op%swap         = 0.d0
    1068                 :           0 :   op%runTime      = 0.d0
    1069                 :           0 :   op%modGlobalMove(2) = 0
    1070                 :           0 :   CALL Vector_clear(op%measNoise(1))
    1071                 :           0 :   CALL Vector_clear(op%measNoise(2))
    1072                 :             : !#ifdef CTCtqmcoffdiagComplex_CHECK
    1073                 :           0 :   op%errorImpurity = 0.d0
    1074                 :           0 :   op%errorBath     = 0.d0
    1075                 :             : !#endif
    1076                 :           0 :   CALL GreenHyboffdiagComplex_clear(op%Greens)
    1077                 :             : !#ifdef CTCtqmcoffdiagComplex_ANALYSIS
    1078   [ #  #  #  # ]:           0 :   IF ( op%opt_analysis .EQ. 1 .AND. ALLOCATED(op%measCorrelation) ) &
    1079   [ #  #  #  #  :           0 :     op%measCorrelation = 0.d0
                   #  # ]
    1080   [ #  #  #  # ]:           0 :   IF ( op%opt_order .GT. 0 .AND. ALLOCATED(op%measPerturbation) ) &
    1081   [ #  #  #  # ]:           0 :     op%measPerturbation = 0.d0
    1082   [ #  #  #  # ]:           0 :   IF ( op%opt_order .GT. 0 .AND. ALLOCATED(op%meas_fullemptylines) ) &
    1083   [ #  #  #  # ]:           0 :     op%meas_fullemptylines = 0.d0
    1084   [ #  #  #  # ]:           0 :   IF ( op%opt_noise .EQ. 1 .AND. ALLOCATED(op%measNoiseG) ) THEN
    1085         [ #  # ]:           0 :     DO i=1,2
    1086         [ #  # ]:           0 :       DO j = 1, op%flavors
    1087         [ #  # ]:           0 :         DO k= 1, op%samples+1
    1088                 :           0 :           CALL Vector_clear(op%measNoiseG(k,j,i))
    1089                 :             :         END DO
    1090                 :             :       END DO
    1091                 :             :     END DO
    1092                 :             :     !DO j = 1, op%flavors
    1093                 :             :     !  CALL GreenHyboffdiag_clear(op%Greens(j))
    1094                 :             :     !END DO
    1095                 :             :   END IF
    1096                 :             : !#endif
    1097                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_clear
    1098                 :             : !!***
    1099                 :             : 
    1100                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_reset
    1101                 :             : !! NAME
    1102                 :             : !!  CtqmcoffdiagComplex_reset
    1103                 :             : !!
    1104                 :             : !! FUNCTION
    1105                 :             : !!  reset a ctqmc simulation
    1106                 :             : !!
    1107                 :             : !! COPYRIGHT
    1108                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    1109                 :             : !!  This file is distributed under the terms of the
    1110                 :             : !!  GNU General Public License, see ~abinit/COPYING
    1111                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    1112                 :             : !!
    1113                 :             : !! INPUTS
    1114                 :             : !!  op=ctqmc
    1115                 :             : !!
    1116                 :             : !! OUTPUT
    1117                 :             : !!
    1118                 :             : !! SIDE EFFECTS
    1119                 :             : !!
    1120                 :             : !! NOTES
    1121                 :             : !!
    1122                 :             : !! SOURCE
    1123                 :             : 
    1124                 :           0 : SUBROUTINE CtqmcoffdiagComplex_reset(op)
    1125                 :             : 
    1126                 :             : !Arguments ------------------------------------
    1127                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT) :: op
    1128                 :             : !Local variables ------------------------------
    1129                 :             :   !INTEGER                  :: iflavor
    1130                 :             :   DOUBLE PRECISION         :: sweeps
    1131                 :             : 
    1132                 :           0 :   CALL GreenHyboffdiagComplex_reset(op%Greens)
    1133                 :           0 :   CALL CtqmcoffdiagComplex_clear(op)
    1134                 :           0 :   CALL ImpurityOperator_reset(op%Impurity)
    1135                 :           0 :   CALL BathOperatoroffdiagComplex_reset    (op%Bath)
    1136         [ #  # ]:           0 :   op%measN(3,:) = cmplx(0.d0,0.d0,kind=8)
    1137                 :             :   !complete restart -> measN=0
    1138                 :           0 :   op%done = .FALSE.
    1139                 :           0 :   op%set  = .FALSE.
    1140                 :           0 :   op%inF  = .FALSE.
    1141                 :           0 :   op%opt_movie = 0
    1142                 :           0 :   op%opt_analysis = 0
    1143                 :           0 :   op%opt_order = 0
    1144                 :           0 :   op%opt_check = 0
    1145                 :           0 :   op%opt_noise = 0
    1146                 :           0 :   op%opt_spectra = 0
    1147                 :           0 :   op%opt_levels = 0
    1148                 :           0 :   sweeps = DBLE(op%sweeps)*DBLE(op%size)
    1149                 :           0 :   CALL CtqmcoffdiagComplex_setSweeps(op, sweeps)
    1150                 :             : !#ifdef HAVE_MPI
    1151                 :             : !  CALL MPI_BARRIER(op%MY_COMM,iflavor)
    1152                 :             : !  IF ( op%rank .EQ. 0 ) &
    1153                 :             : !#endif
    1154                 :             : !  WRITE(op%ostream,'(A9)') "QMC reset"
    1155                 :             : !  CALL FLUSH(op%ostream)
    1156                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_reset
    1157                 :             : !!***
    1158                 :             : 
    1159                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_setMu
    1160                 :             : !! NAME
    1161                 :             : !!  CtqmcoffdiagComplex_setMu
    1162                 :             : !!
    1163                 :             : !! FUNCTION
    1164                 :             : !!  impose energy levels
    1165                 :             : !!
    1166                 :             : !! COPYRIGHT
    1167                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    1168                 :             : !!  This file is distributed under the terms of the
    1169                 :             : !!  GNU General Public License, see ~abinit/COPYING
    1170                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    1171                 :             : !!
    1172                 :             : !! INPUTS
    1173                 :             : !!  op=ctqmc
    1174                 :             : !!  levels=energy levels vector
    1175                 :             : !!
    1176                 :             : !! OUTPUT
    1177                 :             : !!  argout(sizeout)=description
    1178                 :             : !!
    1179                 :             : !! SIDE EFFECTS
    1180                 :             : !!
    1181                 :             : !! NOTES
    1182                 :             : !!
    1183                 :             : !! SOURCE
    1184                 :             : 
    1185         [ #  # ]:           0 : SUBROUTINE CtqmcoffdiagComplex_setMu(op, levels)
    1186                 :             : 
    1187                 :             : !Arguments ------------------------------------
    1188                 :             :   TYPE(CtqmcoffdiagComplex)                     , INTENT(INOUT) :: op
    1189                 :             :   COMPLEX(KIND=8), DIMENSION(:), INTENT(IN ) :: levels
    1190                 :             : 
    1191         [ #  # ]:           0 :   IF ( op%flavors .NE. SIZE(levels,1) ) &
    1192                 :           0 :     CALL WARNALL("CtqmcoffdiagComplex_setMu : Taking energy levels from weiss G(iw)")
    1193                 :             : 
    1194         [ #  # ]:           0 :   op%mu(:)=-levels(:)  ! levels = \epsilon_j - \mu
    1195                 :             :   !op%mu =\tilde{\mu} = \mu -\epsilon_j
    1196                 :           0 :   op%opt_levels = 1
    1197                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_setMu
    1198                 :             : !!***
    1199                 :             : 
    1200                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_sethybri_limit
    1201                 :             : !! NAME
    1202                 :             : !!  CtqmcoffdiagComplex_sethybri_limit
    1203                 :             : !!
    1204                 :             : !! FUNCTION
    1205                 :             : !!  use coefficient A such that F=-A/(iwn) given by DMFT code.
    1206                 :             : !!
    1207                 :             : !! COPYRIGHT
    1208                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    1209                 :             : !!  This file is distributed under the terms of the
    1210                 :             : !!  GNU General Public License, see ~abinit/COPYING
    1211                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    1212                 :             : !!
    1213                 :             : !! INPUTS
    1214                 :             : !!  hybri_limit(nflavor,nflavor)=contains the limit for each couple of flavors
    1215                 :             : !!
    1216                 :             : !! OUTPUT
    1217                 :             : !!  argout(sizeout)=description
    1218                 :             : !!
    1219                 :             : !! SIDE EFFECTS
    1220                 :             : !!  op(CtqmcoffdiagComplex_type) = is the ctqmc main variable
    1221                 :             : !!           op&limit is now filled
    1222                 :             : !! NOTES
    1223                 :             : !!
    1224                 :             : !! SOURCE
    1225                 :             : 
    1226         [ #  # ]:           0 : SUBROUTINE CtqmcoffdiagComplex_sethybri_limit(op, hybri_limit,opthybri)
    1227                 :             : 
    1228                 :             : !Arguments ------------------------------------
    1229                 :             :   TYPE(CtqmcoffdiagComplex)                     , INTENT(INOUT) :: op
    1230                 :             :   COMPLEX(KIND=8) , DIMENSION(:,:),  INTENT(IN ) :: hybri_limit
    1231                 :             :   INTEGER, INTENT(IN)   :: opthybri
    1232                 :             : !----------------------------------------------
    1233         [ #  # ]:           0 :   IF ( op%flavors .NE. SIZE(hybri_limit,1) ) &
    1234                 :           0 :     CALL ERROR("Error in sethybri_limit")
    1235                 :             : 
    1236   [ #  #  #  # ]:           0 :   op%hybri_limit(:,:)=hybri_limit(:,:)
    1237                 :           0 :   op%opt_hybri_limit = opthybri
    1238                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_sethybri_limit
    1239                 :             : !!***
    1240                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_computeF
    1241                 :             : !! NAME
    1242                 :             : !!  CtqmcoffdiagComplex_computeF
    1243                 :             : !!
    1244                 :             : !! FUNCTION
    1245                 :             : !!  Compute the hybridization function
    1246                 :             : !!
    1247                 :             : !! COPYRIGHT
    1248                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    1249                 :             : !!  This file is distributed under the terms of the
    1250                 :             : !!  GNU General Public License, see ~abinit/COPYING
    1251                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    1252                 :             : !!
    1253                 :             : !! INPUTS
    1254                 :             : !!  op=ctqmc
    1255                 :             : !!  Gomega=G0 to compute F
    1256                 :             : !!  opt_fk=What is Gomega
    1257                 :             : !!
    1258                 :             : !! OUTPUT
    1259                 :             : !!  F=hybridization function
    1260                 :             : !!
    1261                 :             : !! SIDE EFFECTS
    1262                 :             : !!
    1263                 :             : !! NOTES
    1264                 :             : !!
    1265                 :             : !! SOURCE
    1266                 :             : 
    1267   [ #  #  #  # ]:           0 : SUBROUTINE CtqmcoffdiagComplex_computeF(op, Gomega, F, opt_fk,Iatom,fname)
    1268                 :             : 
    1269                 :             :  use m_hide_lapack,  only : xginv
    1270                 :             : !Arguments ------------------------------------
    1271                 :             :   TYPE(CtqmcoffdiagComplex)        , INTENT(INOUT) :: op
    1272                 :             :   COMPLEX(KIND=8), DIMENSION(:,:,:), INTENT(IN   ) :: Gomega
    1273                 :             :   !INTEGER                         , INTENT(IN   ) :: Wmax
    1274                 :             :   COMPLEX(KIND=8), DIMENSION(:,:,:), INTENT(INOUT) :: F
    1275                 :             :   INTEGER                          , INTENT(IN   ) :: opt_fk
    1276                 :             :   INTEGER, INTENT(IN)                              :: Iatom
    1277                 :             :   CHARACTER(LEN=fnlen), INTENT(INOUT)              :: fname
    1278                 :             : !Local variables ------------------------------
    1279                 :             :   INTEGER                                         :: flavors
    1280                 :             :   INTEGER                                         :: samples
    1281                 :             :   INTEGER                                         :: iflavor
    1282                 :             :   INTEGER                                         :: iflavor2
    1283                 :             :   INTEGER                                         :: iomega
    1284                 :             :   INTEGER                                         :: itau,ioerr,debug
    1285                 :             :   DOUBLE PRECISION                                :: pi_invBeta
    1286                 :             :   COMPLEX(KIND=8)                                 :: K
    1287                 :             :   !DOUBLE PRECISION                                :: re
    1288                 :             :   !DOUBLE PRECISION                                :: im
    1289                 :             :   !DOUBLE PRECISION                                :: det
    1290                 :           0 :   COMPLEX(KIND=8), DIMENSION(:,:,:), ALLOCATABLE   :: F_omega
    1291                 :           0 :   COMPLEX(KIND=8), DIMENSION(:,:), ALLOCATABLE   :: F_omega_inv
    1292                 :           0 :   COMPLEX(KIND=8), DIMENSION(:,:,:), ALLOCATABLE   :: Gomega_tmp
    1293                 :           0 :   TYPE(GreenHyboffdiagComplex)                     :: F_tmp
    1294                 :             :   CHARACTER(LEN=200) :: message
    1295                 :             :   character(len=2) :: atomnb
    1296                 :           0 :   DOUBLE PRECISION, allocatable :: x_r(:,:,:), x_i(:,:,:)
    1297                 :             :   CHARACTER(LEN=256) :: dummy
    1298                 :             :   DOUBLE PRECISION    :: tautemp
    1299                 :             :   !character(len=30) :: tmpfil
    1300                 :             :   !INTEGER :: unitnb
    1301                 :             : 
    1302                 :             :   ABI_UNUSED((/opt_fk/))
    1303                 :             : 
    1304                 :           0 :   flavors    = op%flavors
    1305                 :             : 
    1306                 :           0 :   samples    = op%samples
    1307                 :           0 :   pi_invBeta = ACOS(-1.d0) / op%beta
    1308                 :           0 :   op%Wmax=SIZE(Gomega,1)
    1309                 :             : 
    1310                 :           0 :   debug = 0 !set to one to build G0
    1311                 :             : 
    1312                 :             :   !=================================
    1313                 :             :   ! --- Initialize F_tmp
    1314                 :             :   !=================================
    1315         [ #  # ]:           0 :   IF ( op%have_MPI .EQV. .TRUE. ) THEN
    1316                 :           0 :     CALL GreenHyboffdiagComplex_init(F_tmp,samples,op%beta,flavors,MY_COMM=op%MY_COMM)
    1317                 :             :   ELSE
    1318                 :           0 :     CALL GreenHyboffdiagComplex_init(F_tmp,samples,op%beta,flavors)
    1319                 :             :   END IF
    1320                 :             : !  K = op%mu
    1321                 :             : 
    1322                 :             :   !=================================
    1323                 :             :   ! --- Allocate F_omega
    1324                 :             :   !=================================
    1325   [ #  #  #  #  :           0 :   MALLOC(F_omega,(1:op%Wmax,1:flavors,1:flavors))
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                      # ]
    1326   [ #  #  #  #  :           0 :   MALLOC(F_omega_inv,(1:flavors,1:flavors))
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
    1327   [ #  #  #  #  :           0 :   MALLOC(Gomega_tmp,(1:op%Wmax,1:flavors,1:flavors))
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
    1328   [ #  #  #  #  :           0 :   Gomega_tmp=Gomega
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
    1329                 :             : 
    1330                 :             : 
    1331                 :             :   !This section of the code is not used / Only building G0 so just skip it
    1332                 :             :   if(debug == 1) then
    1333                 :             :     !=============================================================================================
    1334                 :             :     ! --- Compute Bath Green's function from Hybridization function in imaginary time
    1335                 :             :     !=============================================================================================
    1336                 :             :     ! In the following we want to get G_0(iw_n) from F(iw_n).
    1337                 :             :     ! Be careful : G_0 is called F and F is called G_0 (Why ????)
    1338                 :             :     !-----------------------------------------------------------
    1339                 :             :     ! G_0(iw_n)^-1 = iw_n + mu - F(iw_n)
    1340                 :             :     !-----------------------------------
    1341                 :             :     do iomega=1,op%Wmax
    1342                 :             :       do iflavor=1,flavors
    1343                 :             :         do iflavor2=1,flavors
    1344                 :             :           if (iflavor==iflavor2) then
    1345                 :             :             F_omega_inv(iflavor,iflavor2)= (cmplx(0.d0,(2.d0*DBLE(iomega)-1.d0) * pi_invBeta,kind=8) &
    1346                 :             :   &          + op%mu(iflavor)- Gomega_tmp(iomega,iflavor,iflavor2))
    1347                 :             :           else
    1348                 :             :             F_omega_inv(iflavor,iflavor2)= (- Gomega_tmp(iomega,iflavor,iflavor2))
    1349                 :             :           endif
    1350                 :             :         enddo
    1351                 :             :       enddo
    1352                 :             : 
    1353                 :             :       !Inverse of G_0(iw_n)^-1 to get G_0(iw_n)
    1354                 :             :       !--------------------
    1355                 :             :       call xginv(F_omega_inv,flavors)
    1356                 :             : 
    1357                 :             :       do iflavor=1,flavors
    1358                 :             :         do iflavor2=1,flavors
    1359                 :             :           F_omega(iomega,iflavor,iflavor2) = F_omega_inv(iflavor,iflavor2)
    1360                 :             :         enddo
    1361                 :             :       enddo
    1362                 :             :     enddo !iomega
    1363                 :             : 
    1364                 :             :     CALL GreenHyboffdiagComplex_setOperW(F_tmp,F_omega)
    1365                 :             : 
    1366                 :             :     CALL GreenHyboffdiagComplex_backFourier(F_tmp,func="green")
    1367                 :             : 
    1368                 :             :     !Put the result in F(tau) aka G_0(tau).
    1369                 :             :     !--------------------------------------
    1370                 :             :     DO iflavor = 1, flavors
    1371                 :             :       DO iflavor2 = 1, flavors
    1372                 :             :         DO itau=1,samples+1
    1373                 :             :   !     This symetrization is general and valid even with SOC
    1374                 :             :   !     Without SOC, it is useless ?
    1375                 :             :         F(itau,iflavor,iflavor2) = (        F_tmp%oper(itau,iflavor,iflavor2)   +         &
    1376                 :             :    &                                  dconjg(F_tmp%oper(itau,iflavor2,iflavor))   )/2.d0
    1377                 :             :         END DO
    1378                 :             :       END DO
    1379                 :             :     END DO
    1380                 :             : 
    1381                 :             :     !Print G_0(tau) in file
    1382                 :             :     !------------------------
    1383                 :             :     !Real part
    1384                 :             :     open (unit=4367,file='G0tau_fromF_Re',status='unknown',form='formatted')
    1385                 :             :     rewind(4367)
    1386                 :             :     IF ( op%rank .EQ. 0 ) THEN
    1387                 :             :       DO iflavor = 1, flavors
    1388                 :             :         DO iflavor2 = 1, flavors
    1389                 :             :           write(4367,*) "#",iflavor,iflavor2
    1390                 :             :           do  itau=1,op%samples+1
    1391                 :             :             write(4367,*) (itau-1)*op%beta/(op%samples),real(F(itau,iflavor,iflavor2))
    1392                 :             :           enddo
    1393                 :             :           write(4367,*)
    1394                 :             :         END DO
    1395                 :             :       END DO
    1396                 :             :     ENDIF
    1397                 :             :     !call flush(4367) nag compiler problrem
    1398                 :             :     close(4367)
    1399                 :             : 
    1400                 :             :     !Imag part
    1401                 :             :     open (unit=4367,file='G0tau_fromF_Im',status='unknown',form='formatted')
    1402                 :             :     rewind(4367)
    1403                 :             :     IF ( op%rank .EQ. 0 ) THEN
    1404                 :             :       DO iflavor = 1, flavors
    1405                 :             :         DO iflavor2 = 1, flavors
    1406                 :             :           write(4367,*) "#",iflavor,iflavor2
    1407                 :             :           do  itau=1,op%samples+1
    1408                 :             :             write(4367,*) (itau-1)*op%beta/(op%samples),aimag(F(itau,iflavor,iflavor2))
    1409                 :             :           enddo
    1410                 :             :           write(4367,*)
    1411                 :             :         END DO
    1412                 :             :       END DO
    1413                 :             :     ENDIF
    1414                 :             :     !call flush(4367) !nag compiler problem
    1415                 :             :     close(4367)
    1416                 :             : 
    1417                 :             :   endif  ! end of building G0
    1418                 :             : 
    1419                 :           0 :   call xmpi_barrier(op%MY_COMM)
    1420                 :             : 
    1421                 :             :   !=============================================================================================
    1422                 :             :   ! --- Restore Hybridization in F_omega
    1423                 :             :   !=============================================================================================
    1424                 :             : 
    1425                 :             :   ! Restore Hybridization in F_omega for the following operations
    1426   [ #  #  #  #  :           0 :   F_omega = Gomega_tmp
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
    1427                 :             :   ! From now F_omega is actually F(iw_n) calculated in m_forctqmc.f90
    1428                 :             :   ! and corresponding to F(iw_n) = -[G_0(iw_n^-1 - iwn - levels)]
    1429                 :             : 
    1430                 :             :   !==================================================================
    1431                 :             :   ! --- Full double loop on flavors to compute F (remove levels)
    1432                 :             :   !==================================================================
    1433         [ #  # ]:           0 :   DO iflavor = 1, flavors
    1434         [ #  # ]:           0 :     DO iflavor2 = 1, flavors
    1435                 :             : 
    1436                 :             :   ! --- Compute or use the levels for the diagonal hybridization (else K=0)
    1437         [ #  # ]:           0 :       IF(iflavor==iflavor2) THEN
    1438         [ #  # ]:           0 :         IF ( op%opt_levels .EQ. 1 ) THEN
    1439                 :             :           K = op%mu(iflavor)
    1440                 :             :         ELSE
    1441                 :           0 :           K = -(F_omega(op%Wmax,iflavor,iflavor))
    1442                 :           0 :           op%mu(iflavor) = K
    1443                 :             :         END IF
    1444                 :             :       ELSE
    1445                 :             :         K=cmplx(0.d0,0.d0,kind=8)
    1446                 :             :       ENDIF
    1447                 :             : 
    1448                 :             :   ! --- compute residual K (?)
    1449                 :             :   ! K corresponds to the first moment of hybridization (d1 in setMuD1)
    1450                 :             :   ! ------------------------------------------------------------------
    1451                 :           0 :       K = CMPLX(0,(2.d0*DBLE(op%Wmax)-1.d0)*pi_invBeta,8)*F_omega(op%Wmax,iflavor,iflavor2)
    1452                 :           0 :       CALL GreenHyboffdiagComplex_setMuD1(op%Greens,iflavor,iflavor2,op%mu(iflavor),K)
    1453                 :             :     END DO
    1454                 :             :   END DO
    1455                 :             : 
    1456                 :             :   ! --- Creates F_tmp%oper_w
    1457                 :           0 :   CALL GreenHyboffdiagComplex_setOperW(F_tmp,F_omega)
    1458                 :             : 
    1459                 :             :   ! For all iflavor and iflavor2, do the Fourier transformation to have F(tau)
    1460                 :             :   ! ---------------------------------------------
    1461         [ #  # ]:           0 :   if (op%opt_hybri_limit .eq. 0) then
    1462                 :           0 :     write(message,'(a,a)') "   == Not using the asymptotic limit of hybridization to enforce F(iw_n) -> -C_ij/iw_n (dmft_hybri_limit = 0)", ch10
    1463                 :             :   else
    1464                 :             :   ! Take into account asymptotic limit of hybridization function such that F(iw_n) -> -C_ij/iw_n
    1465                 :             :   ! with C_ij calculated in m_forctqmc.f90
    1466                 :             :   ! --------------------------------------
    1467                 :           0 :     write(message,'(a,a)') "   == Use asymptotic limit of hybridization function such that F(iw_n) -> -C_ij/iw_n (dmft_hybri_limit = 1)", ch10
    1468                 :             :   endif
    1469                 :           0 :   CALL wrtout(std_out,message,'COLL')
    1470                 :           0 :   CALL GreenHyboffdiagComplex_backFourierComplex(F_tmp,hybri_limit=op%hybri_limit,opt_hybri_limit=op%opt_hybri_limit)
    1471                 :             : 
    1472                 :             :   ! --- Put the result in F
    1473         [ #  # ]:           0 :   DO iflavor = 1, flavors
    1474         [ #  # ]:           0 :     DO iflavor2 = 1, flavors
    1475         [ #  # ]:           0 :       DO itau=1,samples+1
    1476                 :           0 :       F(itau,iflavor,iflavor2) = -F_tmp%oper(samples+2-itau,iflavor,iflavor2)
    1477                 :             :       END DO
    1478                 :             :     END DO
    1479                 :             :   END DO
    1480                 :             : 
    1481         [ #  # ]:           0 :   DO iflavor = 1, flavors
    1482         [ #  # ]:           0 :     DO iflavor2 = 1, flavors
    1483         [ #  # ]:           0 :       DO itau=1,samples+1
    1484                 :             : !      This symetrization is general and valid even with SOC
    1485                 :             : !      Without SOC, it leads to zero.
    1486                 :             :        F(itau,iflavor,iflavor2) = -(        (F_tmp%oper(samples+2-itau,iflavor,iflavor2))   +         &
    1487                 :           0 :   &                                  dconjg(F_tmp%oper(samples+2-itau,iflavor2,iflavor))   )/2.d0
    1488                 :             :       END DO
    1489                 :             :     END DO
    1490                 :             :   END DO
    1491                 :             : 
    1492                 :             :   !debug
    1493                 :             :   if (3 .eq. 4) then
    1494                 :             :     !== Read Hybridization function from file ==
    1495                 :             :     !reset previous hybridization
    1496                 :             :     write(message,'(a)') "Warning: About to read Hybridization from file!"
    1497                 :             :     call wrtout(std_out,message,'COLL')
    1498                 :             :     DO iflavor = 1, flavors
    1499                 :             :       DO iflavor2 = 1, flavors
    1500                 :             :         DO itau=1,samples+1
    1501                 :             :           F(itau,iflavor,iflavor2) = czero
    1502                 :             :         END DO
    1503                 :             :       END DO
    1504                 :             :     END DO
    1505                 :             : 
    1506                 :             :    if (op%rank .eq. 0 ) then
    1507                 :             :      ABI_MALLOC(x_r,(op%samples+1,flavors,flavors))
    1508                 :             :      ABI_MALLOC(x_i,(op%samples+1,flavors,flavors))
    1509                 :             :      open(unit=735,file='Hybridization.dat',status='old',form='formatted',action='read',iostat=ioerr)
    1510                 :             : 
    1511                 :             :      read(735, '(a)') dummy
    1512                 :             : 
    1513                 :             :      do itau=1, op%samples+1
    1514                 :             :         read(735, '(2x,393(e25.17e3,2x))') tautemp, &
    1515                 :             :                 & ((x_r(itau,iflavor,iflavor2), x_i(itau,iflavor,iflavor2), iflavor=1, flavors), iflavor2=1, flavors)
    1516                 :             :      end do
    1517                 :             : 
    1518                 :             :      close(735)
    1519                 :             : 
    1520                 :             :      ! Now assign to F array (reverse the sign flip and time ordering)
    1521                 :             :      do itau=1, op%samples+1
    1522                 :             :         do iflavor=1, flavors
    1523                 :             :            do iflavor2=1, flavors
    1524                 :             :               F(op%samples+2-itau, iflavor, iflavor2) = &
    1525                 :             :                       CMPLX(-x_r(itau,iflavor,iflavor2), -x_i(itau,iflavor,iflavor2), kind=8)
    1526                 :             :            enddo
    1527                 :             :         enddo
    1528                 :             :      enddo
    1529                 :             :    ABI_FREE(x_r)
    1530                 :             :    ABI_FREE(x_i)
    1531                 :             :    endif
    1532                 :             :   end if ! end reading F from file
    1533                 :             : 
    1534                 :             :   !== Write Hybridization function in file ==
    1535         [ #  # ]:           0 :   If (Iatom .lt. 10) then
    1536                 :           0 :      write(atomnb,'("0",i1)') Iatom
    1537                 :             :   else
    1538                 :           0 :      write(atomnb,'(i2)') Iatom
    1539                 :             :   endif
    1540                 :             : 
    1541         [ #  # ]:           0 :   IF ( op%rank .EQ. 0 ) THEN
    1542                 :           0 :     open (unit=735,file=trim(fname)//'_Hybridization_iatom_'//atomnb//'.dat',status='unknown',form='formatted')
    1543                 :           0 :     write(735,'(6a)') "# Real and Imaginary part of the Hybridization function Delta(tau) in the CTQMC basis"
    1544         [ #  # ]:           0 :     do itau=1,op%samples+1
    1545                 :           0 :       write(735,'(2x,393(e25.17e3,2x))') DBLE(itau-1)*(op%beta/op%samples),&
    1546   [ #  #  #  #  :           0 :               &((-1*real(F(op%samples+2-itau,iflavor,iflavor2)),-1*AIMAG(F(op%samples+2-itau,iflavor,iflavor2)),iflavor=1,flavors),iflavor2=1,flavors)
             #  #  #  # ]
    1547                 :             :     enddo
    1548                 :           0 :     close(735)
    1549                 :             :   ENDIF
    1550                 :             : 
    1551                 :             : 
    1552                 :             :   !   call xmpi_barrier(op%MY_COMM)
    1553                 :             :   !write(6,*) "QQQQ3"
    1554         [ #  # ]:           0 :   FREE(Gomega_tmp)
    1555         [ #  # ]:           0 :   FREE(F_omega)
    1556         [ #  # ]:           0 :   FREE(F_omega_inv)
    1557                 :             :   !write(6,*) "QQQQ4"
    1558                 :           0 :   CALL GreenHyboffdiagComplex_destroy(F_tmp)
    1559                 :             :   !write(6,*) "QQQQ2"
    1560                 :             : 
    1561                 :             : 
    1562   [ #  #  #  #  :           0 : END SUBROUTINE CtqmcoffdiagComplex_computeF
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
    1563                 :             : !!***
    1564                 :             : 
    1565                 :             : !SUBROUTINE CtqmcoffdiagComplex_computeFK(op, Gomega, Wmax, F)
    1566                 :             : !  COMPLEX*16      , DIMENSION(:,:), INTENT(IN   ) :: Gomega
    1567                 :             : !  INTEGER                         , INTENT(IN   ) :: Wmax
    1568                 :             : !  DOUBLE PRECISION, DIMENSION(:,:), INTENT(INOUT) :: F
    1569                 :             : !  INTEGER                                         :: flavors
    1570                 :             : !  INTEGER                                         :: samples
    1571                 :             : !  INTEGER                                         :: iflavor
    1572                 :             : !  INTEGER                                         :: iomega
    1573                 :             : !  INTEGER                                         :: itau
    1574                 :             : !  DOUBLE PRECISION                                :: pi_invBeta
    1575                 :             : !  DOUBLE PRECISION                                :: K
    1576                 :             : !  COMPLEX*16      , DIMENSION(:,:), ALLOCATABLE   :: F_omega
    1577                 :             : !  TYPE(GreenHyboffdiag)                                     :: F_tmp
    1578                 :             : !
    1579                 :             : !  flavors    = op%flavors
    1580                 :             : !
    1581                 :             : !  samples    = op%samples
    1582                 :             : !  pi_invBeta = ACOS(-1.d0) / op%beta
    1583                 :             : !
    1584                 :             : !  IF ( op%have_MPI .EQV. .TRUE. ) THEN
    1585                 :             : !    CALL GreenHyboffdiag_init(F_tmp,samples,op%beta,op%MY_COMM)
    1586                 :             : !  ELSE
    1587                 :             : !    CALL GreenHyboffdiag_init(F_tmp,samples,op%beta)
    1588                 :             : !  END IF
    1589                 :             : !!  K = op%mu
    1590                 :             : !
    1591                 :             : !  MALLOC(F_omega,(1:Wmax,1:flavors))
    1592                 :             : !
    1593                 :             : !  DO iflavor = 1, flavors
    1594                 :             : !    K = REAL(Gomega(Wmax, iflavor))
    1595                 :             : !    WRITE(op%ostream,*) "CTQMC K, op%mu = ",K,op%mu
    1596                 :             : !    WRITE(op%ostream,*) "CTQMC beta     = ",op%beta
    1597                 :             : !    op%mu(iflavor) = K
    1598                 :             : !    DO iomega = 1, Wmax
    1599                 :             : !      F_omega(iomega,iflavor) = Gomega(iomega,iflavor) &
    1600                 :             : !                  - CMPLX(K, 0.d0, 8)
    1601                 :             : !      !if(iflavor==1.and.op%rank==0) then
    1602                 :             : !        !write(224,*) (2.d0*DBLE(iomega)-1.d0) * pi_invBeta, real(F_omega(iomega,iflavor)),imag(F_omega(iomega,iflavor))
    1603                 :             : !        !write(225,*) (2.d0*DBLE(iomega)-1.d0) * pi_invBeta, real(Gomega(iomega, iflavor)),imag(Gomega(iomega, iflavor))
    1604                 :             : !      !end if
    1605                 :             : !    END DO
    1606                 :             : !    CALL GreenHyboffdiag_backFourier(F_tmp,F_omega(:,iflavor))
    1607                 :             : !    F(1:samples+1,iflavor) = (/ (-F_tmp%oper(samples+1-itau),itau=0,samples) /)
    1608                 :             : !  END DO
    1609                 :             : !  FREE(F_omega)
    1610                 :             : !  CALL GreenHyboffdiag_destroy(F_tmp)
    1611                 :             : !END SUBROUTINE CtqmcoffdiagComplex_computeFK
    1612                 :             : !!***
    1613                 :             : 
    1614                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_run
    1615                 :             : !! NAME
    1616                 :             : !!  CtqmcoffdiagComplex_run
    1617                 :             : !!
    1618                 :             : !! FUNCTION
    1619                 :             : !!  set all options and run a simulation
    1620                 :             : !!
    1621                 :             : !! COPYRIGHT
    1622                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    1623                 :             : !!  This file is distributed under the terms of the
    1624                 :             : !!  GNU General Public License, see ~abinit/COPYING
    1625                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    1626                 :             : !!
    1627                 :             : !! INPUTS
    1628                 :             : !!  op=ctqmc
    1629                 :             : !!  opt_order=maximal perturbation order to scope
    1630                 :             : !!  opt_movie=draw a movie of the simulation
    1631                 :             : !!  opt_analysis=compute correlation functions
    1632                 :             : !!  opt_check=check fast calculations
    1633                 :             : !!  opt_noise=compute noise for green function
    1634                 :             : !!  opt_spectra=fourier transform of the time evolution of the number of electrons
    1635                 :             : !!  opt_gMove=steps without global move
    1636                 :             : !!
    1637                 :             : !! OUTPUT
    1638                 :             : !!
    1639                 :             : !! SIDE EFFECTS
    1640                 :             : !!
    1641                 :             : !! NOTES
    1642                 :             : !!
    1643                 :             : !! SOURCE
    1644                 :             : 
    1645                 :           0 : SUBROUTINE CtqmcoffdiagComplex_run(op,opt_order,opt_histo,opt_movie,opt_analysis,opt_check,opt_noise,opt_spectra,opt_gMove)
    1646                 :             : 
    1647                 :             : 
    1648                 :             : #ifdef HAVE_MPI1
    1649                 :             : include 'mpif.h'
    1650                 :             : #endif
    1651                 :             : !Arguments ------------------------------------
    1652                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT)           :: op
    1653                 :             :   INTEGER, OPTIONAL, INTENT(IN   )  :: opt_order
    1654                 :             :   INTEGER, OPTIONAL, INTENT(IN   )  :: opt_histo
    1655                 :             :   INTEGER, OPTIONAL, INTENT(IN   )  :: opt_movie
    1656                 :             :   INTEGER, OPTIONAL, INTENT(IN   )  :: opt_analysis
    1657                 :             :   INTEGER, OPTIONAL, INTENT(IN   )  :: opt_check
    1658                 :             :   INTEGER, OPTIONAL, INTENT(IN   )  :: opt_noise
    1659                 :             :   INTEGER, OPTIONAL, INTENT(IN   )  :: opt_spectra
    1660                 :             :   INTEGER, OPTIONAL, INTENT(IN   )  :: opt_gMove
    1661                 :             : !Local variables ------------------------------
    1662                 :             : #ifdef HAVE_MPI
    1663                 :             :   INTEGER                            :: ierr
    1664                 :             :   DOUBLE PRECISION                   :: rtime(1)
    1665                 :             : #endif
    1666                 :             : !#ifdef CTCtqmcoffdiagComplex_MOVIE
    1667                 :             :   INTEGER                            :: ilatex
    1668                 :             :   CHARACTER(LEN=4)                   :: Cchar
    1669                 :             : !#endif
    1670                 :             :   DOUBLE PRECISION                   :: estimatedTime
    1671                 :             :   CHARACTER(LEN=100) :: message
    1672                 :             : 
    1673         [ #  # ]:           0 :   IF ( .NOT. op%set  ) &
    1674                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_run : QMC not set up                          ")
    1675         [ #  # ]:           0 :   IF ( .NOT. op%setU ) &
    1676                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_run : QMC does not have a U matrix            ")
    1677                 :             : 
    1678                 :             : 
    1679                 :             : ! OPTIONS of the run
    1680         [ #  # ]:           0 :   IF ( PRESENT( opt_check ) ) THEN
    1681                 :           0 :     op%opt_check = opt_check
    1682                 :           0 :     CALL ImpurityOperator_doCheck(op%Impurity,opt_check)
    1683                 :           0 :     CALL BathOperatoroffdiagComplex_doCheck(op%Bath,opt_check)
    1684                 :             :   END IF
    1685         [ #  # ]:           0 :   IF ( PRESENT( opt_movie ) ) &
    1686                 :           0 :     op%opt_movie = opt_movie
    1687         [ #  # ]:           0 :   IF ( PRESENT( opt_analysis ) ) &
    1688                 :           0 :     op%opt_analysis = opt_analysis
    1689         [ #  # ]:           0 :   IF ( PRESENT ( opt_order ) ) &
    1690                 :           0 :     op%opt_order = opt_order
    1691         [ #  # ]:           0 :   IF ( PRESENT ( opt_histo ) ) &
    1692                 :           0 :     op%opt_histo = opt_histo
    1693         [ #  # ]:           0 :   IF ( PRESENT ( opt_noise ) ) THEN
    1694                 :           0 :     op%opt_noise = opt_noise
    1695                 :             :   END IF
    1696         [ #  # ]:           0 :   IF ( PRESENT ( opt_spectra ) ) &
    1697                 :           0 :     op%opt_spectra = opt_spectra
    1698                 :             : 
    1699                 :           0 :   op%modGlobalMove(1) = max(op%sweeps,op%thermalization)+1 ! No Global Move
    1700                 :             : !!sui!write(std_out,*) "op%sweeps",op%thermalization,op%sweeps,opt_gMove
    1701                 :           0 :   op%modGlobalMove(2) = 0
    1702         [ #  # ]:           0 :   IF ( PRESENT ( opt_gMove ) ) THEN
    1703   [ #  #  #  # ]:           0 :     IF ( opt_gMove .LE. 0 .OR. opt_gMove .GT. op%sweeps ) THEN
    1704                 :             :      ! op%modGlobalMove(1) = op%sweeps+1
    1705                 :             :       op%modGlobalMove(1) = max(op%sweeps,op%thermalization)+1 ! No Global Move
    1706                 :             :       !write(std_out,*) "op%sweeps",op%sweeps, op%modGlobalMove(1)
    1707                 :             :       !CALL WARNALL("CtqmcoffdiagComplex_run : global moves option is <= 0 or > sweeps/cpu -> No global Moves")
    1708                 :           0 :       write(message,'(a,a)') "   == No global moves are used in CT-QMC. Make sure it is correct", ch10
    1709                 :           0 :       CALL wrtout(std_out,message,'COLL')
    1710                 :             :     ELSE
    1711                 :           0 :       op%modGlobalMove(1) = opt_gMove
    1712                 :             :     END IF
    1713                 :             :   END IF
    1714                 :             : !sui!write(std_out,*) "op%sweeps",op%thermalization,op%sweeps
    1715                 :             : 
    1716                 :           0 :   CALL CtqmcoffdiagComplex_allocateOpt(op)
    1717                 :             : 
    1718                 :             : !#ifdef CTCtqmcoffdiagComplex_MOVIE
    1719                 :           0 :   ilatex = 0
    1720         [ #  # ]:           0 :   IF ( op%opt_movie .EQ. 1 ) THEN
    1721                 :           0 :     Cchar ="0000"
    1722                 :           0 :     WRITE(Cchar,'(I4)') op%rank
    1723                 :           0 :     ilatex = 87+op%rank
    1724         [ #  # ]:           0 :     OPEN(UNIT=ilatex, FILE="Movie_"//TRIM(ADJUSTL(Cchar))//".tex")
    1725                 :           0 :     WRITE(ilatex,'(A)') "\documentclass{beamer}"
    1726                 :           0 :     WRITE(ilatex,'(A)') "\usepackage{color}"
    1727                 :           0 :     WRITE(ilatex,'(A)') "\setbeamersize{sidebar width left=0pt}"
    1728                 :           0 :     WRITE(ilatex,'(A)') "\setbeamersize{sidebar width right=0pt}"
    1729                 :           0 :     WRITE(ilatex,'(A)') "\setbeamersize{text width left=0pt}"
    1730                 :           0 :     WRITE(ilatex,'(A)') "\setbeamersize{text width right=0pt}"
    1731                 :           0 :     WRITE(ilatex,*)
    1732                 :           0 :     WRITE(ilatex,'(A)') "\begin{document}"
    1733                 :           0 :     WRITE(ilatex,*)
    1734                 :             :   END IF
    1735                 :             : !#endif
    1736                 :             : 
    1737         [ #  # ]:           0 :   IF ( op%rank .EQ. 0 ) THEN
    1738                 :           0 :     WRITE(op%ostream,'(A25)') "== Starting QMC Solver"
    1739                 :             :   END IF
    1740                 :             : 
    1741                 :             :   !=================================
    1742                 :             :   ! STARTING THERMALIZATION
    1743                 :             :   !=================================
    1744                 :             :   !write(std_out,*) "sweeps before thermalization",op%sweeps
    1745                 :             :   !write(std_out,*) "op%stats",op%stats
    1746                 :           0 :   CALL CtqmcoffdiagComplex_loop(op,op%thermalization,ilatex)
    1747                 :             :   !=================================
    1748                 :             :   ! ENDING   THERMALIZATION
    1749                 :             :   !=================================
    1750                 :             : 
    1751                 :           0 :   estimatedTime = op%runTime
    1752                 :             : #ifdef HAVE_MPI
    1753         [ #  # ]:           0 :   CALL MPI_REDUCE([op%runTime], rtime, 1, MPI_DOUBLE_PRECISION, MPI_MAX, 0, op%MY_COMM, ierr)
    1754                 :           0 :   estimatedTime=rtime(1)
    1755                 :             : #endif
    1756                 :             : 
    1757         [ #  # ]:           0 :   IF ( op%rank .EQ. 0 ) THEN
    1758         [ #  # ]:           0 :     WRITE(op%ostream,'(A26,I6,A11)') "Thermalization done in    ", CEILING(estimatedTime), "    seconds"
    1759                 :           0 :     WRITE(op%ostream,'(A25,I7,A15,I5,A5)') "The QMC should run in    ", &
    1760         [ #  # ]:           0 :            CEILING(estimatedTime*DBLE(op%sweeps)/DBLE(op%thermalization)),&
    1761                 :           0 :                         "    seconds on ", op%size, " CPUs"
    1762                 :             :   END IF
    1763                 :             : 
    1764                 :             :   !=================================
    1765                 :             :   ! CLEANING CTQMC
    1766                 :             :   !=================================
    1767                 :           0 :   CALL CtqmcoffdiagComplex_clear(op)
    1768                 :             : 
    1769                 :             :   !=================================
    1770                 :             :   ! STARTING CTQMC
    1771                 :             :   !=================================
    1772                 :             :   !write(std_out,*) "sweeps before loop",op%sweeps
    1773                 :             :   !write(std_out,*) "op%stats",op%stats
    1774                 :           0 :   CALL CtqmcoffdiagComplex_loop(op,op%sweeps,ilatex)
    1775                 :             :   !=================================
    1776                 :             :   ! ENDING   CTQMC
    1777                 :             :   !=================================
    1778                 :             : 
    1779         [ #  # ]:           0 :   IF ( op%opt_movie .EQ. 1 ) THEN
    1780                 :           0 :     WRITE(ilatex,*) ""
    1781                 :           0 :     WRITE(ilatex,'(A14)') "\end{document}"
    1782                 :           0 :     CLOSE(ilatex)
    1783                 :             :   END IF
    1784                 :             : 
    1785                 :           0 :   op%done     = .TRUE.
    1786                 :             : !sui!write(std_out,*) "op%stats en of ctqmc_run",op%stats
    1787                 :             : 
    1788                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_run
    1789                 :             : !!***
    1790                 :             : 
    1791                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_loop
    1792                 :             : !! NAME
    1793                 :             : !!  CtqmcoffdiagComplex_loop
    1794                 :             : !!
    1795                 :             : !! FUNCTION
    1796                 :             : !!  Definition the main loop of the CT-QMC
    1797                 :             : !!
    1798                 :             : !! COPYRIGHT
    1799                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    1800                 :             : !!  This file is distributed under the terms of the
    1801                 :             : !!  GNU General Public License, see ~abinit/COPYING
    1802                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    1803                 :             : !!
    1804                 :             : !! INPUTS
    1805                 :             : !!  op=ctqmc
    1806                 :             : !!  itotal=number of sweeps to perform : thermalization or sweeps
    1807                 :             : !!  ilatex=unit of file to write movie if so
    1808                 :             : !!
    1809                 :             : !! OUTPUT
    1810                 :             : !!
    1811                 :             : !! SIDE EFFECTS
    1812                 :             : !!
    1813                 :             : !! NOTES
    1814                 :             : !!
    1815                 :             : !! SOURCE
    1816                 :             : 
    1817                 :           0 : SUBROUTINE CtqmcoffdiagComplex_loop(op,itotal,ilatex)
    1818                 :             : 
    1819                 :             : !Arguments ------------------------------------
    1820                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT)         :: op
    1821                 :             :   INTEGER    , INTENT(IN   )         :: itotal
    1822                 :             :   INTEGER    , INTENT(IN   )         :: ilatex
    1823                 :             : !Local variables ------------------------------
    1824                 :             :   LOGICAL                            :: updated
    1825                 :             :   LOGICAL                            :: updated_seg
    1826                 :           0 :   LOGICAL, DIMENSION(:), ALLOCATABLE :: updated_swap
    1827                 :             : 
    1828                 :             :   INTEGER                            :: flavors
    1829                 :             :   INTEGER                            :: measurements
    1830                 :             :   INTEGER                            :: modNoise1
    1831                 :             :   INTEGER                            :: modNoise2
    1832                 :             :   INTEGER                            :: modGlobalMove
    1833                 :             :   INTEGER                            :: sp1
    1834                 :             :   INTEGER                            :: itau
    1835                 :             :   INTEGER                            :: ind
    1836                 :             :   INTEGER                            :: endDensity
    1837                 :             :   INTEGER                            :: indDensity
    1838                 :             :   INTEGER                            :: swapUpdate1
    1839                 :             :   INTEGER                            :: swapUpdate2
    1840                 :             :   INTEGER                            :: old_percent
    1841                 :             :   INTEGER                            :: new_percent
    1842                 :             :   INTEGER                            :: ipercent !,ii
    1843                 :             :   INTEGER                            :: iflavor,ifl1,iflavor_d
    1844                 :             :   INTEGER                            :: isweep
    1845                 :             : 
    1846                 :             :   DOUBLE PRECISION                   :: cpu_time1
    1847                 :             :   DOUBLE PRECISION                   :: cpu_time2
    1848                 :             :   DOUBLE PRECISION                   :: NRJ_old1
    1849                 :             :   DOUBLE PRECISION                   :: NRJ_old2
    1850                 :             :   DOUBLE PRECISION                   :: NRJ_new
    1851                 :             :   DOUBLE PRECISION                   :: total
    1852                 :           0 :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: gtmp_old1
    1853                 :           0 :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: gtmp_old2
    1854                 :           0 :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: gtmp_new
    1855                 :             : 
    1856                 :           0 :   CALL CPU_TIME(cpu_time1)
    1857                 :             : 
    1858                 :           0 :   flavors        = op%flavors
    1859                 :           0 :   measurements   = op%measurements
    1860                 :           0 :   modNoise1      = op%modNoise1
    1861                 :           0 :   modNoise2      = op%modNoise2
    1862                 :           0 :   modGlobalMove  = op%modGlobalMove(1)
    1863                 :           0 :   sp1            = op%samples+1
    1864         [ #  # ]:           0 :   IF ( op%opt_histo .GT. 0 ) THEN
    1865         [ #  # ]:           0 :     op%occup_histo_time= 0.d0
    1866         [ #  # ]:           0 :     op%occupconfig= 0.d0
    1867   [ #  #  #  # ]:           0 :     op%suscep= 0.d0
    1868   [ #  #  #  # ]:           0 :     op%chi= 0.d0
    1869   [ #  #  #  # ]:           0 :     op%chicharge= 0.d0
    1870         [ #  # ]:           0 :     op%ntot= 0.d0
    1871                 :             :   END IF
    1872                 :             : 
    1873                 :           0 :   old_percent    = 0
    1874                 :             : 
    1875   [ #  #  #  #  :           0 :   MALLOC(updated_swap,(1:flavors))
          #  #  #  #  #  
                #  #  # ]
    1876         [ #  # ]:           0 :   updated_swap(:) = .FALSE.
    1877                 :             : 
    1878                 :           0 :   NRJ_old1  = 0.d0
    1879                 :           0 :   NRJ_old2  = 0.d0
    1880                 :           0 :   NRJ_new   = 0.d0
    1881                 :             : 
    1882         [ #  # ]:           0 :   MALLOC(gtmp_new,(1,1))
    1883   [ #  #  #  # ]:           0 :   gtmp_new  = 0.d0
    1884         [ #  # ]:           0 :   MALLOC(gtmp_old1,(1,1))
    1885   [ #  #  #  # ]:           0 :   gtmp_old1 = 0.d0
    1886         [ #  # ]:           0 :   MALLOC(gtmp_old2,(1,1))
    1887   [ #  #  #  # ]:           0 :   gtmp_old2 = 0.d0
    1888                 :             : 
    1889                 :             : !PROBLEM eos_gnu_13.2_mpich . %endDensity was introduced throughout
    1890                 :           0 :   endDensity = SIZE(op%density,2)
    1891                 :             : ! endDensity=op%endDensity
    1892                 :             : !ENDPROBLEM
    1893                 :             : 
    1894                 :             : 
    1895         [ #  # ]:           0 :   IF ( op%opt_noise .GT. 0 ) THEN
    1896         [ #  # ]:           0 :     FREEIF(gtmp_new)
    1897   [ #  #  #  #  :           0 :     MALLOC(gtmp_new,(1:sp1,1:flavors))
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
    1898         [ #  # ]:           0 :     FREEIF(gtmp_old1)
    1899   [ #  #  #  #  :           0 :     MALLOC(gtmp_old1,(1:sp1,1:flavors))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
    1900         [ #  # ]:           0 :     FREEIF(gtmp_old2)
    1901   [ #  #  #  #  :           0 :     MALLOC(gtmp_old2,(1:sp1,1:flavors))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
    1902                 :             :   END IF
    1903                 :             : 
    1904         [ #  # ]:           0 :   IF ( op%rank .EQ. 0 ) THEN
    1905                 :             :     WRITE(op%ostream, '(1x,103A)') &
    1906                 :           0 :     "|----------------------------------------------------------------------------------------------------|"
    1907                 :           0 :     WRITE(op%ostream,'(1x,A)', ADVANCE="NO") "|"
    1908                 :             :   END IF
    1909                 :             : 
    1910                 :           0 :   total = DBLE(itotal)
    1911                 :             :   !write(std_out,*) "itotal",itotal
    1912                 :           0 :   indDensity = 1
    1913                 :             :   !write(std_out,*) "op%stats",op%stats
    1914         [ #  # ]:           0 :   DO isweep = 1, itotal
    1915                 :             :   !ii if(op%prtopt==1) write(std_out,*) "======== Isweep = ",isweep
    1916                 :             :     !updated_seg=.FALSE.
    1917         [ #  # ]:           0 :     DO iflavor = 1, flavors
    1918                 :             :      ! if(isweep==itotal) write(std_out,*) "    Iflavor = ",iflavor,op%Impurity%Particles(iflavor)%tail
    1919                 :             :    !ii if(op%prtopt==1)  write(std_out,*) "      ===Iflavor = ",iflavor
    1920                 :           0 :       op%Impurity%activeFlavor=iflavor
    1921                 :           0 :       op%Bath%activeFlavor=iflavor ; op%Bath%MAddFlag= .FALSE. ; op%Bath%MRemoveFlag = .FALSE.
    1922                 :             : 
    1923                 :             :       !write(std_out,*) "before tryaddremove"
    1924                 :             : 
    1925                 :             :       ! For iflavor, Try a move
    1926                 :             :       !==========================
    1927                 :           0 :       CALL CtqmcoffdiagComplex_tryAddRemove(op,updated_seg)
    1928                 :             :     !sui!write(std_out,*) "after tryaddremove",updated_seg
    1929                 :             : 
    1930   [ #  #  #  #  :           0 :       updated = updated_seg .OR.  updated_swap(iflavor).OR.(isweep==1)
                   #  # ]
    1931                 :           0 :       updated_swap(iflavor) = .FALSE.
    1932         [ #  # ]:           0 :       if ( op%opt_nondiag >0 )  iflavor_d=0
    1933         [ #  # ]:           0 :       if ( op%opt_nondiag==0 )  iflavor_d=iflavor
    1934                 :           0 :       CALL GreenHyboffdiagComplex_measHybrid(op%Greens, op%Bath%M, op%Impurity%Particles, updated,op%signvalue,op%phasevalue,iflavor_d)
    1935                 :             : 
    1936                 :           0 :       CALL CtqmcoffdiagComplex_measN        (op, iflavor, updated)
    1937         [ #  # ]:           0 :       IF ( op%opt_analysis .EQ. 1 ) &
    1938                 :           0 :         CALL CtqmcoffdiagComplex_measCorrelation (op, iflavor)
    1939         [ #  # ]:           0 :       IF ( op%opt_order .GT. 0 ) &
    1940                 :           0 :         CALL CtqmcoffdiagComplex_measPerturbation(op, iflavor)
    1941                 :             :     END DO
    1942                 :             :     !CALL GreenHyboffdiag_measHybrid(op%Greens, op%Bath%M, op%Impurity%Particles, updated,op%signvalue,iflavor_d)
    1943                 :             :     !DO iflavor = 1,flavors
    1944                 :             :     !  CALL CtqmcoffdiagComplex_measN        (op, iflavor, updated)
    1945                 :             :     !END DO
    1946                 :             : 
    1947         [ #  # ]:           0 :     IF ( MOD(isweep,modGlobalMove) .EQ. 0 ) THEN
    1948                 :             :   ! !sui!write(std_out,*) "isweep,modGlobalMove,inside",isweep,modGlobalMove
    1949                 :           0 :       CALL CtqmcoffdiagComplex_trySwap(op,swapUpdate1, swapUpdate2)
    1950                 :             :      ! !write(std_out,*) "no global move yet for non diag hybridization"
    1951   [ #  #  #  # ]:           0 :       IF ( swapUpdate1 .NE. 0 .AND. swapUpdate2 .NE. 0 ) THEN
    1952                 :           0 :         updated_swap(swapUpdate1) = .TRUE.
    1953                 :           0 :         updated_swap(swapUpdate2) = .TRUE.
    1954                 :             :       END IF
    1955                 :             :     END IF
    1956                 :             : 
    1957         [ #  # ]:           0 :     IF ( MOD(isweep,measurements) .EQ. 0 ) THEN ! default is always
    1958                 :           0 :       CALL ImpurityOperator_measDE(op%Impurity,op%measDE)
    1959   [ #  #  #  # ]:           0 :       IF ( op%opt_spectra .GE. 1 .AND. MOD(isweep,measurements*op%opt_spectra) .EQ. 0 ) THEN
    1960         [ #  # ]:           0 :         op%density(1:flavors,indDensity) = real(op%measN(3,1:flavors))
    1961                 :           0 :         indDensity = indDensity+1
    1962                 :             :       END IF
    1963                 :             :     END IF
    1964                 :             : 
    1965         [ #  # ]:           0 :     IF ( MOD(isweep,measurements) .EQ. 0 ) THEN
    1966         [ #  # ]:           0 :       IF ( op%opt_histo .GT. 0 ) THEN
    1967                 :             :         CALL ImpurityOperator_occup_histo_time(op%Impurity,op%occup_histo_time,op%occupconfig,op%suscep,op%samples,op%chi,&
    1968                 :           0 : & op%chicharge,op%ntot,op%opt_histo,op%nspinor)
    1969                 :             :       END IF
    1970                 :             :     ENDIF
    1971                 :             : 
    1972         [ #  # ]:           0 :     IF ( MOD(isweep, modNoise1) .EQ. 0 ) THEN
    1973                 :             :       !modNext = isweep + modNoise2
    1974                 :           0 :       NRJ_new = op%measDE(1,1)
    1975                 :           0 :       CALL Vector_pushBack(op%measNoise(1),NRJ_new - NRJ_old1)
    1976                 :           0 :       NRJ_old1 = NRJ_new
    1977                 :             : 
    1978                 :             :       !! Try to limit accumulation error
    1979                 :           0 :       CALL ImpurityOperator_cleanOverlaps(op%Impurity)
    1980                 :             : 
    1981         [ #  # ]:           0 :       IF ( op%opt_noise .EQ. 1 ) THEN
    1982         [ #  # ]:           0 :         DO ifl1 = 1, flavors
    1983         [ #  # ]:           0 :           DO ind = 1, op%Greens%map(ifl1,ifl1)%tail
    1984                 :           0 :             itau = op%Greens%map(ifl1,ifl1)%listINT(ind)
    1985                 :             :             gtmp_new(itau,ifl1) = op%Greens%oper(itau,ifl1,ifl1) &
    1986                 :           0 :                      +op%Greens%map(ifl1,ifl1)%listDBLE(ind)*DBLE(op%Greens%factor)
    1987                 :             :           END DO
    1988         [ #  # ]:           0 :           DO itau = 1, sp1
    1989                 :           0 :            CALL Vector_pushBack(op%measNoiseG(itau,ifl1,1), gtmp_new(itau,ifl1) - gtmp_old1(itau,ifl1))
    1990                 :           0 :            gtmp_old1(itau,ifl1) = gtmp_new(itau,ifl1)
    1991                 :             :           END DO
    1992                 :             :         END DO
    1993                 :             :       END IF
    1994                 :             :     END IF
    1995                 :             : 
    1996         [ #  # ]:           0 :     IF ( MOD(isweep,modNoise2) .EQ. 0 ) THEN
    1997                 :           0 :       NRJ_new = op%measDE(1,1)
    1998                 :           0 :       CALL Vector_pushBack(op%measNoise(2),NRJ_new - NRJ_old2)
    1999                 :           0 :       NRJ_old2 = NRJ_new
    2000         [ #  # ]:           0 :       IF ( op%opt_noise .EQ. 1 ) THEN
    2001         [ #  # ]:           0 :         DO ifl1 = 1, flavors
    2002         [ #  # ]:           0 :           DO ind = 1, op%Greens%map(ifl1,ifl1)%tail
    2003                 :           0 :             itau = op%Greens%map(ifl1,ifl1)%listINT(ind)
    2004                 :             :             gtmp_new(itau,ifl1) = op%Greens%oper(itau,ifl1,ifl1) &
    2005                 :           0 :                   +op%Greens%map(ifl1,ifl1)%listDBLE(ind)*op%Greens%factor
    2006                 :             :           END DO
    2007         [ #  # ]:           0 :           DO itau = 1, sp1
    2008                 :           0 :             CALL Vector_pushBack(op%measNoiseG(itau,ifl1,2), gtmp_new(itau,ifl1) - gtmp_old2(itau,ifl1))
    2009                 :           0 :             gtmp_old2(itau,ifl1) = gtmp_new(itau,ifl1)
    2010                 :             :           END DO
    2011                 :             :         END DO
    2012                 :             :       END IF
    2013                 :             : 
    2014         [ #  # ]:           0 :       IF ( op%rank .EQ. 0 ) THEN
    2015         [ #  # ]:           0 :         new_percent = CEILING(DBLE(isweep)*100.d0/DBLE(itotal))
    2016         [ #  # ]:           0 :         DO ipercent = old_percent+1, new_percent
    2017                 :           0 :           WRITE(op%ostream,'(A)',ADVANCE="NO") "-"
    2018                 :             :         END DO
    2019                 :             :         old_percent = new_percent
    2020                 :             :       END IF
    2021                 :             :     END IF
    2022                 :             : 
    2023         [ #  # ]:           0 :     IF ( op%opt_movie .EQ. 1 ) THEN
    2024                 :           0 :       WRITE(ilatex,'(A11,I9)') "%iteration ", isweep
    2025                 :           0 :       CALL ImpurityOperator_printLatex(op%Impurity,ilatex,isweep)
    2026                 :             :     END IF
    2027                 :             : 
    2028                 :             :   END DO
    2029                 :             : 
    2030         [ #  # ]:           0 :   IF ( op%rank .EQ. 0 ) THEN
    2031         [ #  # ]:           0 :     DO ipercent = old_percent+1, 100
    2032                 :           0 :       WRITE(op%ostream,'(A)',ADVANCE="NO") "-"
    2033                 :             :     END DO
    2034                 :           0 :     WRITE(op%ostream,'(A)') "|"
    2035                 :             :   END IF
    2036                 :             : 
    2037         [ #  # ]:           0 :   FREE(gtmp_new)
    2038         [ #  # ]:           0 :   FREE(gtmp_old1)
    2039         [ #  # ]:           0 :   FREE(gtmp_old2)
    2040         [ #  # ]:           0 :   FREE(updated_swap)
    2041                 :             : 
    2042   [ #  #  #  # ]:           0 :   IF ( op%opt_spectra .GE. 1 .AND. itotal .EQ. op%sweeps ) THEN
    2043         [ #  # ]:           0 :     IF ( endDensity .NE. indDensity-1 ) THEN
    2044         [ #  # ]:           0 :       op%density(:,endDensity) = -1.d0
    2045                 :             :     END IF
    2046                 :             :   END IF
    2047                 :             : 
    2048                 :           0 :   CALL CPU_TIME(cpu_time2)
    2049                 :             : 
    2050                 :           0 :   op%runTime = (cpu_time2 - cpu_time1)*1.05d0 ! facteur arbitraire de correction
    2051                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_loop
    2052                 :             : !!***
    2053                 :             : 
    2054                 :             : 
    2055                 :             : 
    2056                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_tryAddRemove
    2057                 :             : !! NAME
    2058                 :             : !!  CtqmcoffdiagComplex_tryAddRemove
    2059                 :             : !!
    2060                 :             : !! FUNCTION
    2061                 :             : !!  Try to add or remove a segment and an anti-segment
    2062                 :             : !!
    2063                 :             : !! COPYRIGHT
    2064                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    2065                 :             : !!  This file is distributed under the terms of the
    2066                 :             : !!  GNU General Public License, see ~abinit/COPYING
    2067                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    2068                 :             : !!
    2069                 :             : !! INPUTS
    2070                 :             : !!  op=ctqmc
    2071                 :             : !!
    2072                 :             : !! OUTPUT
    2073                 :             : !!  updated=something changed
    2074                 :             : !!
    2075                 :             : !! SIDE EFFECTS
    2076                 :             : !!
    2077                 :             : !! NOTES
    2078                 :             : !!
    2079                 :             : !! SOURCE
    2080                 :             : 
    2081                 :           0 : SUBROUTINE CtqmcoffdiagComplex_tryAddRemove(op,updated)
    2082                 :             : 
    2083                 :             : !Arguments ------------------------------------
    2084                 :             :   TYPE(CtqmcoffdiagComplex)             , INTENT(INOUT) :: op
    2085                 :             : !  TYPE(BathOperatoroffdiag)    , INTENT(INOUT) :: Bath
    2086                 :             : !  TYPE(ImpurityOperator), INTENT(INOUT) :: Impurity
    2087                 :             :   LOGICAL               , INTENT(  OUT) :: updated
    2088                 :             : !Local variables ------------------------------
    2089                 :             :   INTEGER                               :: position
    2090                 :             :   INTEGER         , DIMENSION(1:2)     :: nature ! -2 for antiseg and 1 for seg
    2091                 :             :   INTEGER                               :: i! -2 for antiseg and 1 for seg
    2092                 :             :   !INTEGER                               :: it,it1 !ii,
    2093                 :             :   DOUBLE PRECISION                      :: action
    2094                 :             :   DOUBLE PRECISION                      :: beta
    2095                 :             :   DOUBLE PRECISION                      :: time1
    2096                 :             :   DOUBLE PRECISION                      :: time2
    2097                 :             :   DOUBLE PRECISION                      :: time_avail
    2098                 :             :   COMPLEX(KIND=8)                       :: det_ratio
    2099                 :             :   DOUBLE PRECISION                      :: sign_det_ratio
    2100                 :             :   DOUBLE PRECISION                      :: overlap
    2101                 :             :   DOUBLE PRECISION                      :: length
    2102                 :             :   DOUBLE PRECISION                      :: signe
    2103                 :             :   DOUBLE PRECISION                      :: tail
    2104                 :             :   INTEGER                      :: tailint
    2105                 :             :   DOUBLE PRECISION                      :: signdet, signdetprev
    2106                 :             :   DOUBLE PRECISION, DIMENSION(1:2)      :: CdagC_1
    2107                 :             : 
    2108         [ #  # ]:           0 :   IF ( .NOT. op%set ) &
    2109                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_trySegment : QMC not set                       ")
    2110                 :             : 
    2111                 :             :         !write(std_out,*) "      TryAddRemove start"
    2112                 :           0 :   nature(1) = CTQMC_SEGME
    2113                 :           0 :   nature(2) = CTQMC_ANTIS
    2114                 :           0 :   beta      = op%beta
    2115                 :             : 
    2116                 :           0 :   updated = .FALSE.
    2117                 :             :   !tail is the number of segments for a given flavor
    2118                 :           0 :   tailint  = (op%Impurity%particles(op%Impurity%activeFlavor)%tail)
    2119                 :           0 :   tail  = DBLE(tailint)
    2120                 :             : 
    2121                 :             : 
    2122                 :             :   !=====================================
    2123                 :             :   ! First choose segment or antisegment
    2124                 :             :   !=====================================
    2125         [ #  # ]:           0 :   DO i = 1, 2
    2126                 :           0 :     signe = SIGN(1.d0,DBLE(nature(i)))
    2127                 :             : !      -----  1: segment        signe= 1  ( CTQMC_SEGME =  1 )
    2128                 :             : !      -----  2: antisegment    signe=-1  ( CTQMC_ANTIS = -2 )
    2129                 :             : 
    2130                 :           0 :     tailint  = (op%Impurity%particles(op%Impurity%activeFlavor)%tail)
    2131                 :             : 
    2132                 :             :     !CALL RANDOM_NUMBER(action)
    2133                 :           0 :     CALL OurRng(op%seed,action)
    2134                 :             : 
    2135                 :             :     !==========================
    2136                 :             :     ! Add segment/antisegment
    2137                 :             :     !==========================
    2138         [ #  # ]:           0 :     IF ( action .LT. .5d0 ) THEN ! Add a segment or antisegment
    2139                 :             : 
    2140                 :             :       ! Select time1 (>0) in [0,beta]
    2141                 :             :       !==============================
    2142                 :             :       !CALL RANDOM_NUMBER(time1)
    2143                 :           0 :       CALL OurRng(op%seed,time1)
    2144                 :           0 :       time1 = time1 * beta
    2145                 :             : 
    2146                 :             :       ! time_avail is the distance between between time1 and
    2147                 :             :       !   - the next start of a segment for a segment addition
    2148                 :             :       !   - the next end of a segment for an antisegment addition
    2149                 :             :       ! ImpurityOperator_getAvailableTime > 0 for a segment      (signe>0) -> time_avail>0
    2150                 :             :       ! ImpurityOperator_getAvailableTime < 0 for an antisegment (signe<0) -> time_avail>0
    2151                 :             :       !====================================================================
    2152                 :           0 :       time_avail = ImpurityOperator_getAvailableTime(op%Impurity,time1,position) * signe
    2153                 :             : 
    2154         [ #  # ]:           0 :       IF ( time_avail .GT. 0.d0 ) THEN
    2155                 :             : 
    2156                 :             :         ! Time2 is  the length of the proposed new (anti)segment
    2157                 :             :         !=======================================================
    2158                 :           0 :         CALL OurRng(op%seed,time2)
    2159         [ #  # ]:           0 :         IF ( time2 .EQ. 0.d0 ) CALL OurRng(op%seed,time2) ! Prevent null segment
    2160                 :             : 
    2161                 :             :         ! Now time2 is the time at the end of the proposed new (anti) segment
    2162                 :             :         ! time2 > time1
    2163                 :             :         !====================================================================
    2164                 :           0 :         time2     = time1 + time2 * time_avail
    2165                 :             : 
    2166                 :             :         ! CdagC_1 gives the stard/end times for the proposed new segment/antisegment
    2167                 :             :         ! CdagC1(C_) can  be above beta.
    2168                 :             :         !  For a      segment CdagC_1(Cdag_) = time1 < CdagC_1(C_) = time2, l=time2-time1 > 0
    2169                 :             :         !  For a anti segment CdagC_1(Cdag_) = time2 > CdagC_1(C_) = time1, l=time1-time2 < 0
    2170                 :             :         !  time2 can be above beta and thus for a      segment CdagC_1(C_   ) > beta
    2171                 :             :         !  time2 can be above beta and thus for an antisegment CdagC_1(Cdag_) > beta
    2172                 :             :         !  length > 0 for     segment
    2173                 :             :         !  length < 0 for antisegment
    2174                 :             :         !====================================================================================
    2175                 :           0 :         CdagC_1(Cdag_) = ((1.d0+signe)*time1+(1.d0-signe)*time2)*0.5d0
    2176                 :           0 :         CdagC_1(C_   ) = ((1.d0+signe)*time2+(1.d0-signe)*time1)*0.5d0
    2177                 :           0 :         length    = CdagC_1(C_   ) - CdagC_1(Cdag_)
    2178                 :             : 
    2179                 :             : !      -----  Computes the determinant ratio
    2180                 :           0 :         det_ratio = BathOperatoroffdiagComplex_getDetAdd(op%Bath,CdagC_1,position,op%Impurity%particles)
    2181                 :             : 
    2182                 :             : !      -----  Computes the overlap
    2183                 :           0 :         overlap   = ImpurityOperator_getNewOverlap(op%Impurity,CdagC_1)
    2184                 :           0 :         signdetprev  = ImpurityOperator_getsign(op%Impurity, time2, i, action, position)
    2185                 :             :         !write(std_out,*)"det_ratio",det_ratio,"signdetprev",signdetprev
    2186                 :             : 
    2187                 :             :         !Remove negative sign of det_ration
    2188                 :           0 :         det_ratio=det_ratio*signdetprev
    2189                 :             : 
    2190         [ #  # ]:           0 :         IF ( real(det_ratio) .LT. 0.d0 ) THEN
    2191                 :           0 :           det_ratio   = - det_ratio
    2192                 :           0 :           sign_det_ratio=-1
    2193                 :           0 :           op%stats(nature(i)+CTQMC_DETSI) = op%stats(nature(i)+CTQMC_DETSI) + 1.d0
    2194                 :             :         ELSE
    2195                 :             :           sign_det_ratio=1
    2196                 :             :         END IF
    2197                 :             : 
    2198                 :           0 :         CALL OurRng(op%seed,time1)
    2199                 :             :         !write(std_out,*) "        .................",(time1 * (tail + 1.d0 )),beta * time_avail * abs(det_ratio) * DEXP(real(op%mu(op%Impurity%activeFlavor))*length + overlap)
    2200                 :             :         !write(std_out,*) "        .................",beta , time_avail , op%mu(op%Impurity%activeFlavor),op%Impurity%activeFlavor
    2201                 :             : 
    2202         [ #  # ]:           0 :         IF ( (time1 * (tail + 1.d0 )) &
    2203                 :             :              .LT. (beta * time_avail * abs(det_ratio) * DEXP(real(op%mu(op%Impurity%activeFlavor))*length + overlap) ) ) THEN
    2204                 :           0 :           CALL ImpurityOperator_add(op%Impurity,CdagC_1,position)
    2205                 :             :          ! write(*,*) "after "
    2206                 :             :          ! CALL ListCdagC_print(op%Impurity%particles(op%Impurity%activeFlavor),6)
    2207                 :           0 :           CALL BathOperatoroffdiagComplex_setMAdd(op%bath,op%Impurity%particles)
    2208                 :           0 :           op%stats(nature(i)+CTQMC_ADDED) = op%stats(nature(i)+CTQMC_ADDED)  + 1.d0
    2209                 :           0 :           updated = .TRUE. .OR. updated
    2210                 :           0 :           tail = tail + 1.d0
    2211                 :           0 :           tailint = tailint + 1
    2212                 :             : 
    2213         [ #  # ]:           0 :           IF ( sign_det_ratio .LT. 0.d0 ) op%signvalue=-op%signvalue
    2214                 :           0 :           op%phasevalue=op%phasevalue*det_ratio/abs(det_ratio)*sign_det_ratio
    2215                 :             :         END IF
    2216                 :             : 
    2217                 :             :       END IF ! time_avail > 0
    2218                 :             : 
    2219                 :             :     !========================================
    2220                 :             :     ! Remove segment/antisegment
    2221                 :             :     !========================================
    2222                 :             :     ELSE ! Remove a segment among the segment of the flavor activeflavor
    2223                 :             :       !ii if(op%prtopt==1)  write(6,*) "        =try: Segment removed of type",i
    2224         [ #  # ]:           0 :       IF ( tail .GT. 0.d0 ) THEN
    2225                 :           0 :         CALL OurRng(op%seed,time1)
    2226                 :           0 :         position = INT(((time1 * tail) + 1.d0) * signe )
    2227                 :             :         !prt!if(op%prtopt==1)  write(6,*) "         position",position
    2228                 :           0 :         time_avail = ImpurityOperator_getAvailedTime(op%Impurity,position)
    2229                 :           0 :         det_ratio  = BathOperatoroffdiagComplex_getDetRemove(op%Bath,position)
    2230                 :             :         !write(6,*) "        det_ratio", det_ratio
    2231                 :           0 :         CdagC_1    = ImpurityOperator_getSegment(op%Impurity,position)
    2232                 :             : !        length     = CdagC_length(CdagC_1)
    2233                 :           0 :         length     = CdagC_1(C_) - CdagC_1(Cdag_)
    2234                 :             :         !write(6,*) "        length   ", length
    2235                 :           0 :         overlap    = ImpurityOperator_getNewOverlap(op%Impurity,CdagC_1)
    2236                 :             :         !write(6,*) "        overlap  ", overlap
    2237                 :           0 :         CALL OurRng(op%seed,time1)
    2238                 :             :         !write(6,*) "        Random   ",time1
    2239                 :           0 :         signdetprev = ImpurityOperator_getsign(op%Impurity, time2, i, action, position)
    2240                 :           0 :         det_ratio=det_ratio*signdetprev
    2241                 :           0 :         signdet=1.d0
    2242                 :             : 
    2243         [ #  # ]:           0 :         IF ( real(det_ratio) .LT. 0.d0 ) THEN
    2244                 :             :         !sui!write(6,*) "         NEGATIVE DET",det_ratio,signdetprev
    2245                 :           0 :           det_ratio   = -det_ratio
    2246                 :           0 :           sign_det_ratio=-1
    2247                 :           0 :           op%stats(nature(i)+CTQMC_DETSI) = op%stats(nature(i)+CTQMC_DETSI) + 1.d0
    2248                 :           0 :           signdet=-1.d0
    2249                 :             :         ELSE
    2250                 :             :           sign_det_ratio=1
    2251                 :             :         END IF
    2252                 :             : 
    2253         [ #  # ]:           0 :         IF ( (time1 * beta * time_avail * DEXP(real(op%mu(op%Impurity%activeFlavor))*length+overlap)) &
    2254                 :             :              .LT. (tail * abs(det_ratio) ) ) THEN
    2255                 :           0 :           CALL ImpurityOperator_remove(op%Impurity,position)
    2256                 :           0 :           CALL BathOperatoroffdiagComplex_setMRemove(op%Bath,op%Impurity%particles)
    2257                 :             :           !op%seg_removed = op%seg_removed  + 1.d0
    2258                 :           0 :           op%stats(nature(i)+CTQMC_REMOV) = op%stats(nature(i)+CTQMC_REMOV)  + 1.d0
    2259                 :           0 :           updated = .TRUE. .OR. updated
    2260                 :           0 :           tail = tail -1.d0
    2261                 :           0 :           tailint = tailint -1
    2262                 :             : 
    2263         [ #  # ]:           0 :           IF ( sign_det_ratio .LT. 0.d0 ) op%signvalue=-op%signvalue
    2264                 :           0 :           op%phasevalue=op%phasevalue*det_ratio/abs(det_ratio)*sign_det_ratio
    2265                 :             :         END IF
    2266                 :             :       END IF !tail > O
    2267                 :             :     END IF ! action
    2268                 :             :     !========================================
    2269                 :             :     ! End Add/Remove Antisegment
    2270                 :             :     !========================================
    2271                 :             :   END DO
    2272                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_tryAddRemove
    2273                 :             : !!***
    2274                 :             : 
    2275                 :             : !!SUBROUTINE CtqmcoffdiagComplex_trySegment(op,updated)
    2276                 :             : !!!  TYPE(BathOperatoroffdiag)    , INTENT(INOUT) :: Bath
    2277                 :             : !!!  TYPE(ImpurityOperator), INTENT(INOUT) :: Impurity
    2278                 :             : !!  LOGICAL               , INTENT(INOUT) :: updated
    2279                 :             : !!  INTEGER                               :: position
    2280                 :             : !!  DOUBLE PRECISION                      :: action
    2281                 :             : !!  DOUBLE PRECISION                      :: beta
    2282                 :             : !!  DOUBLE PRECISION                      :: time1
    2283                 :             : !!  DOUBLE PRECISION                      :: time2
    2284                 :             : !!  DOUBLE PRECISION                      :: time_avail
    2285                 :             : !!  DOUBLE PRECISION                      :: det_ratio
    2286                 :             : !!  DOUBLE PRECISION                      :: overlap
    2287                 :             : !!  DOUBLE PRECISION                      :: length
    2288                 :             : !!  DOUBLE PRECISION                      :: tail
    2289                 :             : !!  DOUBLE PRECISION, DIMENSION(1:2)      :: CdagC_1
    2290                 :             : !!
    2291                 :             : !!  IF ( .NOT. op%set ) &
    2292                 :             : !!    CALL ERROR("CtqmcoffdiagComplex_trySegment : QMC not set                       ")
    2293                 :             : !!
    2294                 :             : !!  beta     =  op%beta
    2295                 :             : !!  tail     = DBLE(op%Impurity%particles(op%Impurity%activeFlavor)%tail)
    2296                 :             : !!
    2297                 :             : !!  CALL RANDOM_NUMBER(action)
    2298                 :             : !!
    2299                 :             : !!  updated = .FALSE.
    2300                 :             : !!
    2301                 :             : !!  IF ( action .LT. .5d0 ) THEN ! Ajout de segment
    2302                 :             : !!    CALL RANDOM_NUMBER(time1)
    2303                 :             : !!    time1 = time1 * beta
    2304                 :             : !!    time_avail = ImpurityOperator_getAvailableTime(op%Impurity,time1,position)
    2305                 :             : !!    IF ( time_avail .GT. 0.d0 ) THEN
    2306                 :             : !!      CALL RANDOM_NUMBER(time2)
    2307                 :             : !!      time2     = time1 + time2 * time_avail
    2308                 :             : !!!      CALL CdagC_init(CdagC_1,time1,time2)
    2309                 :             : !!      CdagC_1(Cdag_) = time1
    2310                 :             : !!      CdagC_1(C_   ) = time2
    2311                 :             : !!!      length    = CdagC_length(CdagC_1)
    2312                 :             : !!      length    = time2 - time1
    2313                 :             : !!      det_ratio = BathOperatoroffdiag_getDetAdd(op%Bath,CdagC_1,position,op%Impurity%particles(op%Impurity%activeFlavor))
    2314                 :             : !!      overlap   = ImpurityOperator_getNewOverlap(op%Impurity,CdagC_1)
    2315                 :             : !!      CALL RANDOM_NUMBER(time1)
    2316                 :             : !!      IF ( det_ratio .LT. 0.d0 ) THEN
    2317                 :             : !!        det_ratio   = -det_ratio
    2318                 :             : !!        op%stats(CTQMC_SEGME+CTQMC_DETSI) = op%stats(CTQMC_SEGME+CTQMC_DETSI) + SIGN(1.d0,det_ratio)
    2319                 :             : !!      END IF
    2320                 :             : !!      IF ( (time1 * (tail + 1.d0 )) &
    2321                 :             : !!           .LT. (beta * time_avail * det_ratio * DEXP(op%mu(op%Impurity%activeFlavor)*length + overlap) ) ) THEN
    2322                 :             : !!        write(*,*) position
    2323                 :             : !!        CALL ImpurityOperator_add(op%Impurity,CdagC_1,position)
    2324                 :             : !!        CALL BathOperatoroffdiag_setMAdd(op%bath,op%Impurity%particles(op%Impurity%activeFlavor))
    2325                 :             : !!        op%stats(CTQMC_SEGME+CTQMC_ADDED) = op%stats(CTQMC_SEGME+CTQMC_ADDED)  + 1.d0
    2326                 :             : !!        updated = .TRUE.
    2327                 :             : !!      END IF
    2328                 :             : !!    END IF
    2329                 :             : !!
    2330                 :             : !!  ELSE ! Supprimer un segment
    2331                 :             : !!    IF ( tail .GT. 0.d0 ) THEN
    2332                 :             : !!      CALL RANDOM_NUMBER(time1)
    2333                 :             : !!      position = INT(time1 * tail) + 1
    2334                 :             : !!      time_avail = ImpurityOperator_getAvailedTime(op%Impurity,position)
    2335                 :             : !!      det_ratio  = BathOperatoroffdiag_getDetRemove(op%Bath,position)
    2336                 :             : !!      CdagC_1    = ImpurityOperator_getSegment(op%Impurity,position)
    2337                 :             : !!!      length     = CdagC_length(CdagC_1)
    2338                 :             : !!      length     = CdagC_1(C_) - CdagC_1(Cdag_)
    2339                 :             : !!      overlap    = ImpurityOperator_getNewOverlap(op%Impurity,CdagC_1)
    2340                 :             : !!      CALL RANDOM_NUMBER(time1)
    2341                 :             : !!      IF ( det_ratio .LT. 0.d0 ) THEN
    2342                 :             : !!        det_ratio   = -det_ratio
    2343                 :             : !!!        op%seg_sign = op%seg_sign + 1.d0
    2344                 :             : !!        op%stats(CTQMC_SEGME+CTQMC_DETSI) = op%stats(CTQMC_SEGME+CTQMC_DETSI) + SIGN(1.d0,det_ratio)
    2345                 :             : !!      END IF
    2346                 :             : !!      IF ( (time1 * beta * time_avail * DEXP(op%mu(op%Impurity%activeFlavor)*length+overlap)) &
    2347                 :             : !!           .LT. (tail * det_ratio ) ) THEN
    2348                 :             : !!        write(*,*) position
    2349                 :             : !!        CALL ImpurityOperator_remove(op%Impurity,position)
    2350                 :             : !!        CALL BathOperatoroffdiag_setMRemove(op%Bath,op%Impurity%particles(op%Impurity%activeFlavor))
    2351                 :             : !!        !op%seg_removed = op%seg_removed  + 1.d0
    2352                 :             : !!        op%stats(CTQMC_SEGME+CTQMC_REMOV) = op%stats(CTQMC_SEGME+CTQMC_REMOV)  + 1.d0
    2353                 :             : !!        updated = .TRUE.
    2354                 :             : !!      END IF
    2355                 :             : !!    END IF
    2356                 :             : !!  END IF
    2357                 :             : !!END SUBROUTINE CtqmcoffdiagComplex_trySegment
    2358                 :             : !!***
    2359                 :             : !!
    2360                 :             : !!SUBROUTINE CtqmcoffdiagComplex_tryAntiSeg(op, updated)
    2361                 :             : !!!  TYPE(BathOperatoroffdiag)    , INTENT(INOUT) :: Bath
    2362                 :             : !!!  TYPE(ImpurityOperator), INTENT(INOUT) :: Impurity
    2363                 :             : !!  LOGICAL               , INTENT(INOUT) :: updated
    2364                 :             : !!  INTEGER                               :: position
    2365                 :             : !!  DOUBLE PRECISION                      :: action
    2366                 :             : !!  DOUBLE PRECISION                      :: beta
    2367                 :             : !!  DOUBLE PRECISION                      :: time1
    2368                 :             : !!  DOUBLE PRECISION                      :: time2
    2369                 :             : !!  DOUBLE PRECISION                      :: time_avail
    2370                 :             : !!  DOUBLE PRECISION                      :: det_ratio
    2371                 :             : !!  DOUBLE PRECISION                      :: overlap
    2372                 :             : !!  DOUBLE PRECISION                      :: length
    2373                 :             : !!  DOUBLE PRECISION                      :: tail
    2374                 :             : !!  DOUBLE PRECISION, DIMENSION(1:2)      :: CdagC_1
    2375                 :             : !!
    2376                 :             : !!  IF ( .NOT. op%set ) &
    2377                 :             : !!    CALL ERROR("CtqmcoffdiagComplex_trySegment : QMC not set                       ")
    2378                 :             : !!
    2379                 :             : !!  beta     =  op%beta
    2380                 :             : !!  tail     =  DBLE(op%Impurity%particles(op%Impurity%activeFlavor)%tail)
    2381                 :             : !!
    2382                 :             : !!  CALL RANDOM_NUMBER(action)
    2383                 :             : !!
    2384                 :             : !!  updated = .FALSE.
    2385                 :             : !!
    2386                 :             : !!  IF ( action .LT. .5d0 ) THEN ! Ajout d'un antiseg
    2387                 :             : !!    CALL RANDOM_NUMBER(time1)
    2388                 :             : !!    time1 = time1 * beta
    2389                 :             : !!    time_avail = ImpurityOperator_getAvailableTime(op%Impurity,time1,position)
    2390                 :             : !!    IF ( time_avail .LT. 0.d0 ) THEN
    2391                 :             : !!      CALL RANDOM_NUMBER(time2)
    2392                 :             : !!      time2     = time1 - time2 * time_avail
    2393                 :             : !!!      CALL CdagC_init(CdagC_1,time2,time1)
    2394                 :             : !!      CdagC_1(Cdag_) = time2
    2395                 :             : !!      CdagC_1(C_   ) = time1
    2396                 :             : !!!      length    = CdagC_length(CdagC_1) ! /!\ length is negative
    2397                 :             : !!      length = time1 - time2
    2398                 :             : !!      det_ratio = BathOperatoroffdiag_getDetAdd(op%Bath,CdagC_1,position,op%Impurity%particles(op%Impurity%activeFlavor))
    2399                 :             : !!      overlap   = ImpurityOperator_getNewOverlap(op%Impurity,CdagC_1) ! OK
    2400                 :             : !!      CALL RANDOM_NUMBER(time1)
    2401                 :             : !!      IF ( det_ratio .LT. 0.d0 ) THEN
    2402                 :             : !!        det_ratio    = -det_ratio
    2403                 :             : !!!        op%anti_sign = op%anti_sign + 1.d0
    2404                 :             : !!        op%stats(CTQMC_ANTIS+CTQMC_DETSI) = op%stats(CTQMC_ANTIS+CTQMC_DETSI) + SIGN(1.d0,det_ratio)
    2405                 :             : !!      END IF
    2406                 :             : !!      IF ( (time1 * (tail + 1.d0 )) &
    2407                 :             : !!           .LT. (beta * ABS(time_avail) * det_ratio * DEXP(op%mu(op%Impurity%activeFlavor)*length + overlap) ) ) THEN
    2408                 :             : !!        CALL ImpurityOperator_add(op%Impurity,CdagC_1,position)
    2409                 :             : !!        !write(*,*) position
    2410                 :             : !!        CALL BathOperatoroffdiag_setMAdd(op%bath,op%Impurity%particles(op%Impurity%activeFlavor))
    2411                 :             : !!        !op%anti_added = op%anti_added  + 1.d0
    2412                 :             : !!        op%stats(CTQMC_ANTIS+CTQMC_ADDED) = op%stats(CTQMC_ANTIS+CTQMC_ADDED)  + 1.d0
    2413                 :             : !!        updated = .TRUE.
    2414                 :             : !!      END IF
    2415                 :             : !!    END IF
    2416                 :             : !!  ELSE ! Supprimer un antiseg
    2417                 :             : !!    IF ( tail .GT. 0.d0 ) THEN
    2418                 :             : !!      CALL RANDOM_NUMBER(time1)
    2419                 :             : !!      position = -(INT(time1 * tail) + 1)
    2420                 :             : !!      time_avail = ImpurityOperator_getAvailedTime(op%Impurity,position)!OK
    2421                 :             : !!      det_ratio  = BathOperatoroffdiag_getDetRemove(op%Bath,position)!OK
    2422                 :             : !!      CdagC_1    = ImpurityOperator_getSegment(op%Impurity,position)!OK
    2423                 :             : !!!      length     = CdagC_length(CdagC_1) ! /!\ length is negative
    2424                 :             : !!      length = CdagC_1(C_) - CdagC_1(Cdag_)
    2425                 :             : !!      overlap    = ImpurityOperator_getNewOverlap(op%Impurity,CdagC_1) !OK
    2426                 :             : !!      CALL RANDOM_NUMBER(time1)
    2427                 :             : !!      IF ( det_ratio .LT. 0.d0 ) THEN
    2428                 :             : !!        det_ratio   = -det_ratio
    2429                 :             : !!!        op%anti_sign = op%anti_sign + 1.d0
    2430                 :             : !!        op%stats(CTQMC_ANTIS+CTQMC_DETSI) = op%stats(CTQMC_ANTIS+CTQMC_DETSI) + SIGN(1.d0,det_ratio)
    2431                 :             : !!      END IF
    2432                 :             : !!      IF ( (time1 * beta * time_avail * DEXP(op%mu(op%Impurity%activeFlavor)*length+overlap)) &
    2433                 :             : !!           .LT. (tail * det_ratio ) ) THEN
    2434                 :             : !!        CALL ImpurityOperator_remove(op%Impurity,position)
    2435                 :             : !!        !write(*,*) position
    2436                 :             : !!        CALL BathOperatoroffdiag_setMRemove(op%Bath,op%Impurity%particles(op%Impurity%activeFlavor))
    2437                 :             : !!        !op%anti_removed = op%anti_removed  + 1.d0
    2438                 :             : !!        op%stats(CTQMC_ANTIS+CTQMC_REMOV) = op%stats(CTQMC_ANTIS+CTQMC_REMOV)  + 1.d0
    2439                 :             : !!        updated = .TRUE.
    2440                 :             : !!      END IF
    2441                 :             : !!    END IF
    2442                 :             : !!  END IF
    2443                 :             : !!END SUBROUTINE CtqmcoffdiagComplex_tryAntiSeg
    2444                 :             : !!***
    2445                 :             : 
    2446                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_trySwap
    2447                 :             : !! NAME
    2448                 :             : !!  CtqmcoffdiagComplex_trySwap
    2449                 :             : !!
    2450                 :             : !! FUNCTION
    2451                 :             : !!  try a global move (swap to flavors)
    2452                 :             : !!
    2453                 :             : !! COPYRIGHT
    2454                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    2455                 :             : !!  This file is distributed under the terms of the
    2456                 :             : !!  GNU General Public License, see ~abinit/COPYING
    2457                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    2458                 :             : !!
    2459                 :             : !! INPUTS
    2460                 :             : !!  op=ctqmc
    2461                 :             : !!
    2462                 :             : !! OUTPUT
    2463                 :             : !!  flav_i=first flavor swaped
    2464                 :             : !!  flav_j=second flavor swaped
    2465                 :             : !!
    2466                 :             : !! SIDE EFFECTS
    2467                 :             : !!
    2468                 :             : !! NOTES
    2469                 :             : !!
    2470                 :             : !! SOURCE
    2471                 :             : 
    2472                 :           0 : SUBROUTINE CtqmcoffdiagComplex_trySwap(op,flav_i,flav_j)
    2473                 :             : 
    2474                 :             : !Arguments ------------------------------------
    2475                 :             :   TYPE(CtqmcoffdiagComplex)           , INTENT(INOUT) :: op
    2476                 :             : !  TYPE(BathOperatoroffdiag)    , INTENT(INOUT) :: Bath
    2477                 :             : !  TYPE(ImpurityOperator), INTENT(INOUT) :: Impurity
    2478                 :             :   INTEGER               , INTENT(  OUT) :: flav_i
    2479                 :             :   INTEGER               , INTENT(  OUT) :: flav_j
    2480                 :             : !Local variables ------------------------------
    2481                 :             :   INTEGER :: flavor_i
    2482                 :             :   INTEGER :: flavor_j !,ii,it,it1 !,iflavor
    2483                 :             :   DOUBLE PRECISION :: rnd
    2484                 :             :   DOUBLE PRECISION :: lengthi
    2485                 :             :   DOUBLE PRECISION :: lengthj
    2486                 :             :   DOUBLE PRECISION :: overlapic1
    2487                 :             :   DOUBLE PRECISION :: overlapjc1
    2488                 :             :   DOUBLE PRECISION :: overlapic2
    2489                 :             :   DOUBLE PRECISION :: overlapjc2
    2490                 :             :   !DOUBLE PRECISION :: detic1
    2491                 :             :   !DOUBLE PRECISION :: detjc1
    2492                 :             :   !DOUBLE PRECISION :: detic2
    2493                 :             :   !DOUBLE PRECISION :: detjc2
    2494                 :             :   DOUBLE PRECISION :: det_ratio,detnew,detold
    2495                 :             :   DOUBLE PRECISION :: local_ratio
    2496                 :             :  ! TYPE(BathOperatoroffdiag)  :: Bathnew
    2497                 :             : 
    2498                 :             : 
    2499                 :             :   !CALL RANDOM_NUMBER(rnd)
    2500                 :           0 :   CALL OurRng(op%seed,rnd)
    2501                 :           0 :   flavor_i = NINT(rnd*DBLE(op%flavors-1.d0))+1
    2502                 :             :   !CALL RANDOM_NUMBER(rnd)
    2503                 :           0 :   CALL OurRng(op%seed,rnd)
    2504                 :           0 :   flavor_j = NINT(rnd*DBLE(op%flavors-1.d0))+1
    2505                 :             :   !ii write(6,'(a,2i4)') "--------------- new swap --------------------------------",flavor_i,flavor_j
    2506                 :             : 
    2507                 :           0 :   flav_i = 0
    2508                 :           0 :   flav_j = 0
    2509                 :             :   !ii   do iflavor=1,op%flavors
    2510                 :             :   !ii     write(6,*) "BEFORE  GMOVE For flavor", iflavor,"size is",op%Impurity%particles(iflavor)%tail," and  Conf is :"
    2511                 :             :   !ii     do ii=1, op%Impurity%Particles(iflavor)%tail
    2512                 :             :   !ii       write(6,'(i4,100f12.3)') ii, op%Impurity%Particles(iflavor)%list(ii,1),&
    2513                 :             :   !ii  &                   op%Impurity%Particles(iflavor)%list(ii,2)
    2514                 :             :   !ii     enddo
    2515                 :             :   !ii   enddo
    2516                 :             :   !ii   write(6,*) "        = M Matrix"
    2517                 :             :   !ii   write(6,'(a,2x,100(i12))') "Flavor=",((iflavor,it=1,op%Impurity%particles(iflavor)%tail),iflavor=1,op%flavors)
    2518                 :             :   !ii   write(6,'(i21,100i12)') ((it,it=1,op%Impurity%particles(iflavor)%tail),iflavor=1,op%flavors)
    2519                 :             :   !ii   do it=1,op%Bath%sumtails
    2520                 :             :   !ii     write(6,'(a,100f12.3)') "        M before",(op%Bath%M%mat(it,it1),it1=1,op%Bath%sumtails)
    2521                 :             :   !ii   enddo
    2522                 :             : 
    2523                 :             :   ! todoba this part
    2524         [ #  # ]:           0 :   IF ( flavor_i .NE. flavor_j ) THEN
    2525                 :             :     !CALL BathOperatoroffdiag_init(Bathnew, op%flavors, op%samples, op%beta, 0, op%opt_nondiag)
    2526                 :             :     ! On tente d'intervertir i et j
    2527                 :             :     ! Configuration actuelle :
    2528                 :             : 
    2529                 :           0 :     op%modGlobalMove(2) = op%modGlobalMove(2)+1
    2530                 :             :     ! ===========================================
    2531                 :             :     ! First use M matrix to compute determinant
    2532                 :             :     ! ===========================================
    2533                 :           0 :     detold     = BathOperatoroffdiagComplex_getDetF(op%Bath) ! use op%Bath%M
    2534                 :             : 
    2535                 :             :     ! ===========================================
    2536                 :             :     ! Second build M_update matrix to compute determinant after.
    2537                 :             :     ! ===========================================
    2538                 :             :     !CALL ListCdagCoffdiag_print(particle)
    2539                 :           0 :     call BathOperatoroffdiagComplex_recomputeM(op%Bath,op%impurity%particles,flavor_i,flavor_j) ! compute op%Bath%M_update
    2540                 :           0 :     detnew     = BathOperatoroffdiagComplex_getDetF(op%Bath,option=1) ! use op%Bath%M_update
    2541                 :             : 
    2542                 :           0 :     lengthi    = real(ImpurityOperator_measN(op%Impurity,flavor_i))
    2543                 :           0 :     lengthj    = real(ImpurityOperator_measN(op%Impurity,flavor_j))
    2544                 :           0 :     overlapic1 = ImpurityOperator_overlapFlavor(op%Impurity,flavor_i)
    2545                 :           0 :     overlapjc1 = ImpurityOperator_overlapFlavor(op%Impurity,flavor_j)
    2546                 :             :     ! lengths unchanged
    2547                 :           0 :     overlapic2 = ImpurityOperator_overlapSwap(op%Impurity,flavor_i,flavor_j)
    2548                 :           0 :     overlapjc2 = ImpurityOperator_overlapSwap(op%Impurity,flavor_j,flavor_i)
    2549                 :             : 
    2550                 :             : !    IF ( detic1*detjc1 .EQ. detic2*detjc2 ) THEN
    2551                 :             : !      det_ratio = 1.d0
    2552                 :             : !    ELSE IF ( detic1*detjc1 .EQ. 0.d0 ) THEN
    2553                 :             : !      det_ratio = detic2*detjc2 ! evite de diviser par 0 si pas de segment
    2554                 :             : !    ELSE
    2555                 :             : 
    2556                 :           0 :     det_ratio = detnew/detold ! because the determinant is the determinant of F
    2557                 :             :    !ii  write(6,*) "det_ratio, detold,detnew",det_ratio, detold,detnew, detold/detnew
    2558                 :             : 
    2559                 :             : !    END IF
    2560                 :             :     local_ratio = DEXP(-overlapic2*overlapjc2+overlapic1*overlapjc1 &
    2561                 :           0 :                       +(lengthj-lengthi)*real((op%mu(flavor_i))-real(op%mu(flavor_j))))
    2562                 :             :    !ii  write(6,*) "local_ratio",local_ratio
    2563                 :             : 
    2564                 :             :     ! Wloc = exp(muN-Uo)
    2565                 :             :     !CALL RANDOM_NUMBER(rnd)
    2566                 :           0 :     CALL OurRng(op%seed,rnd)
    2567         [ #  # ]:           0 :     IF ( rnd .LT. local_ratio*det_ratio ) THEN ! swap accepted
    2568                 :             :    !ii    write(6,*) "        = M Matrix before swap"
    2569                 :             :    !ii    write(6,'(a,2x,100(i12))') "Flavor=",((iflavor,it=1,op%Impurity%particles(iflavor)%tail),iflavor=1,op%flavors)
    2570                 :             :    !ii    write(6,'(i21,100i12)') ((it,it=1,op%Impurity%particles(iflavor)%tail),iflavor=1,op%flavors)
    2571                 :             :    !ii    do it=1,op%Bath%sumtails
    2572                 :             :    !ii      write(6,'(a,100f12.3)') "        M after ",(op%Bath%M%mat(it,it1),it1=1,op%Bath%sumtails)
    2573                 :             :    !ii    enddo
    2574                 :             :    !ii    do it=1,op%Bath%sumtails
    2575                 :             :    !ii      write(6,'(a,100f12.3)') " update M after ",(op%Bath%M_update%mat(it,it1),it1=1,op%Bath%sumtails)
    2576                 :             :    !ii    enddo
    2577                 :             :    !ii    write(6,*) "Gmove accepted",rnd,local_ratio*det_ratio
    2578                 :           0 :       CALL ImpurityOperator_swap(op%Impurity, flavor_i,flavor_j)
    2579                 :           0 :       CALL BathOperatoroffdiagComplex_swap    (op%Bath    , flavor_i,flavor_j) !  use op%Bath%M_update to built new op%Bath%M
    2580                 :             : 
    2581                 :           0 :       op%swap = op%swap + 1.d0
    2582                 :           0 :       flav_i = flavor_i
    2583                 :           0 :       flav_j = flavor_j
    2584                 :             :     ELSE
    2585                 :             :    !ii   write(6,*) "Gmove refused",rnd,local_ratio*det_ratio
    2586                 :             : !      CALL WARN("Swap refused")
    2587                 :             : !      WRITE(op%ostream,'(6E24.14)') local_ratio, det_ratio, detic1, detjc1, detic2, detjc2
    2588                 :             :     END IF
    2589                 :             :    ! CALL BathOperatoroffdiag_destroy(Bathnew)
    2590                 :             :   END IF
    2591                 :             :  !ii  do iflavor=1,op%flavors
    2592                 :             :  !ii    write(6,*) "AFTER   GMOVE For flavor", iflavor,"size is",op%Impurity%particles(iflavor)%tail," and  Conf is :"
    2593                 :             :  !ii    do ii=1, op%Impurity%Particles(iflavor)%tail
    2594                 :             :  !ii      write(6,'(15x,i4,100f12.3)') ii, op%Impurity%Particles(iflavor)%list(ii,1),&
    2595                 :             :  !ii &                   op%Impurity%Particles(iflavor)%list(ii,2)
    2596                 :             :  !ii    enddo
    2597                 :             :  !ii  enddo
    2598                 :             :  !ii  write(6,*) "        = M Matrix"
    2599                 :             :  !ii  write(6,'(a,2x,100(i12))') "Flavor=",((iflavor,it=1,op%Impurity%particles(iflavor)%tail),iflavor=1,op%flavors)
    2600                 :             :  !ii  write(6,'(i21,100i12)') ((it,it=1,op%Impurity%particles(iflavor)%tail),iflavor=1,op%flavors)
    2601                 :             :  !ii  do it=1,op%Bath%sumtails
    2602                 :             :  !ii    write(6,'(a,100f12.3)') "        M after ",(op%Bath%M%mat(it,it1),it1=1,op%Bath%sumtails)
    2603                 :             :  !ii  enddo
    2604                 :             :  !ii  do it=1,op%Bath%sumtails
    2605                 :             :  !ii    write(6,'(a,100f12.3)') " update M after ",(op%Bath%M_update%mat(it,it1),it1=1,op%Bath%sumtails)
    2606                 :             :  !ii  enddo
    2607                 :             : 
    2608                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_trySwap
    2609                 :             : !!***
    2610                 :             : 
    2611                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_measN
    2612                 :             : !! NAME
    2613                 :             : !!  CtqmcoffdiagComplex_measN
    2614                 :             : !!
    2615                 :             : !! FUNCTION
    2616                 :             : !!  measures the number of electron
    2617                 :             : !!  by taking into account the value for the move before before this one
    2618                 :             : !!  with the correct weight.
    2619                 :             : !!
    2620                 :             : !! COPYRIGHT
    2621                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    2622                 :             : !!  This file is distributed under the terms of the
    2623                 :             : !!  GNU General Public License, see ~abinit/COPYING
    2624                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    2625                 :             : !!
    2626                 :             : !! INPUTS
    2627                 :             : !!  op=ctqmc
    2628                 :             : !!  iflavor=which flavor to measure
    2629                 :             : !!  updated=something has changed since last time
    2630                 :             : !!
    2631                 :             : !! OUTPUT
    2632                 :             : !!
    2633                 :             : !! SIDE EFFECTS
    2634                 :             : !!
    2635                 :             : !! NOTES
    2636                 :             : !!
    2637                 :             : !! SOURCE
    2638                 :             : 
    2639                 :           0 : SUBROUTINE CtqmcoffdiagComplex_measN(op, iflavor, updated)
    2640                 :             : 
    2641                 :             : !Arguments ------------------------------------
    2642                 :             :   TYPE(CtqmcoffdiagComplex)             , INTENT(INOUT)     :: op
    2643                 :             :   !TYPE(ImpurityOperator), INTENT(IN   )     :: impurity
    2644                 :             :   INTEGER               , INTENT(IN   )     :: iflavor
    2645                 :             :   LOGICAL               , INTENT(IN   )     :: updated
    2646                 :             : 
    2647                 :             : !  IF ( .NOT. op%set ) &
    2648                 :             : !    CALL ERROR("CtqmcoffdiagComplex_measN : QMC not set                           ")
    2649                 :             : 
    2650                 :             : 
    2651         [ #  # ]:           0 :   IF ( updated .EQV. .TRUE. ) THEN
    2652                 :             : !  --- accumulate occupations with values op%measN(3,iflavor) from the last measurements with the corresponding weight
    2653                 :             : !  ---  op*measN(4,iflavor)
    2654                 :           0 :     op%measN(1,iflavor) = op%measN(1,iflavor) + op%measN(3,iflavor)*op%measN(4,iflavor)
    2655                 :             :    ! write(6,*) "Cllll42"
    2656                 :             : 
    2657                 :             : !  --- Compute total number of new measurements
    2658                 :           0 :     op%measN(2,iflavor) = op%measN(2,iflavor) + op%measN(4,iflavor)
    2659                 :             : 
    2660                 :             :    ! write(6,*) "Allll42"
    2661                 :             : !  --- Compute the occupation for this configuration (will be put in
    2662                 :             : !  --- op%measN(1,iflavor) at the next occurence of updated=.true.), with
    2663                 :             : !  --- the corresponding weight  op%measN(4,iflavor) (we do not now it yet)
    2664                 :           0 :     op%measN(3,iflavor) = ImpurityOperator_measN(op%impurity)
    2665                 :             : 
    2666                 :             : !  --- set weight: as update=true, it is a new measurement , so put it to one
    2667                 :           0 :     op%measN(4,iflavor) = 1.d0
    2668                 :             : 
    2669                 :             :   ELSE
    2670                 :             : !  --- increased the count so that at new move, we will be able to update measN(1) correctly.
    2671                 :           0 :     op%measN(4,iflavor) = op%measN(4,iflavor) + 1.d0
    2672                 :             :    ! write(6,*) "Bllll42"
    2673                 :             :   END IF
    2674                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_measN
    2675                 :             : !!***
    2676                 :             : 
    2677                 :             : !#ifdef CTCtqmcoffdiagComplex_ANALYSIS
    2678                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_measCorrelation
    2679                 :             : !! NAME
    2680                 :             : !!  CtqmcoffdiagComplex_measCorrelation
    2681                 :             : !!
    2682                 :             : !! FUNCTION
    2683                 :             : !!  measure all correlations in times for a flavor
    2684                 :             : !!
    2685                 :             : !! COPYRIGHT
    2686                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    2687                 :             : !!  This file is distributed under the terms of the
    2688                 :             : !!  GNU General Public License, see ~abinit/COPYING
    2689                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    2690                 :             : !!
    2691                 :             : !! INPUTS
    2692                 :             : !!  op=ctqmc
    2693                 :             : !!  iflavor=the flavor to measure
    2694                 :             : !!
    2695                 :             : !! OUTPUT
    2696                 :             : !!
    2697                 :             : !! SIDE EFFECTS
    2698                 :             : !!
    2699                 :             : !! NOTES
    2700                 :             : !!
    2701                 :             : !! SOURCE
    2702                 :             : 
    2703                 :           0 : SUBROUTINE CtqmcoffdiagComplex_measCorrelation(op, iflavor)
    2704                 :             : 
    2705                 :             : !Arguments ------------------------------------
    2706                 :             :   TYPE(CtqmcoffdiagComplex)             , INTENT(INOUT)       :: op
    2707                 :             :   !TYPE(ImpurityOperator), INTENT(IN   )       :: impurity
    2708                 :             :   INTEGER               , INTENT(IN   )       :: iflavor
    2709                 :             : !Local variables ------------------------------
    2710                 :             :   INTEGER                                     :: iCdag
    2711                 :             :   INTEGER                                     :: iCdagBeta
    2712                 :             :   INTEGER                                     :: iC
    2713                 :             :   INTEGER                                     :: index
    2714                 :             :   INTEGER                                     :: size
    2715                 :             :   DOUBLE PRECISION                            :: tC
    2716                 :             :   DOUBLE PRECISION                            :: tCdag
    2717                 :             :   !DOUBLE PRECISION                            :: time
    2718                 :             :   DOUBLE PRECISION                            :: inv_dt
    2719                 :             :   DOUBLE PRECISION                            :: beta
    2720                 :             : 
    2721         [ #  # ]:           0 :   IF ( .NOT. op%set ) &
    2722                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_measCorrelation : QMC not set                 ")
    2723                 :             :     !write(6,*) "not available"
    2724                 :           0 :     stop
    2725                 :             : 
    2726                 :             :   size = op%impurity%particles(op%impurity%activeFlavor)%tail
    2727                 :             :   beta = op%beta
    2728                 :             : 
    2729                 :             :   IF ( size .EQ. 0 ) RETURN
    2730                 :             : 
    2731                 :             :   inv_dt = op%inv_dt
    2732                 :             : 
    2733                 :             :   DO iCdag = 1, size ! first segments
    2734                 :             :     tCdag  = op%impurity%particles(op%impurity%activeFlavor)%list(iCdag,Cdag_)
    2735                 :             :     tC     = op%impurity%particles(op%impurity%activeFlavor)%list(iCdag,C_   )
    2736                 :             :     index = INT( ( (tC - tCdag)  * inv_dt ) + .5d0 ) + 1
    2737                 :             :     op%measCorrelation(index,1,iflavor) = op%measCorrelation(index,1,iflavor) + 1.d0
    2738                 :             :     MODCYCLE(iCdag+1,size,iCdagBeta)
    2739                 :             :     index = INT( ( ( &
    2740                 :             :                     op%impurity%particles(op%impurity%activeFlavor)%list(iCdagBeta,Cdag_) - tC &
    2741                 :             :                     + AINT(DBLE(iCdag)/DBLE(size))*beta &
    2742                 :             :                    )  * inv_dt ) + .5d0 ) + 1
    2743                 :             :     IF ( index .LT. 1 .OR. index .GT. op%samples+1 ) THEN
    2744                 :             :       CALL WARN("CtqmcoffdiagComplex_measCorrelation : bad index line 1095         ")
    2745                 :             :     ELSE
    2746                 :             :       op%measCorrelation(index,2,iflavor) = op%measCorrelation(index,2,iflavor) + 1.d0
    2747                 :             :     END IF
    2748                 :             : !    DO iC = 1, size
    2749                 :             : !      tC = impurity%particles(impurity%activeFlavor)%list(C_,iC)
    2750                 :             : !      time = tC - tCdag
    2751                 :             : !      IF ( time .LT. 0.d0 ) time = time + beta
    2752                 :             : !      index = INT( ( time * inv_dt ) + .5d0 ) + 1
    2753                 :             : !      op%measCorrelation(index,3,iflavor) = op%measCorrelation(index,3,iflavor) + 1.d0
    2754                 :             : !    END DO
    2755                 :             :     DO iC = 1, size!  op%Greens(iflavor)%index_old%tail
    2756                 :             : !todoba        op%measCorrelation(op%Greens(iflavor)%map%listINT(iC+(iCdag-1)*size),3,iflavor) = &
    2757                 :             : !todoba        op%measCorrelation(op%Greens(iflavor)%map%listINT(iC+(iCdag-1)*size),3,iflavor) + 1.d0
    2758                 :             :     END DO
    2759                 :             :   END DO
    2760                 :             : 
    2761                 :             : END SUBROUTINE CtqmcoffdiagComplex_measCorrelation
    2762                 :             : !!***
    2763                 :             : 
    2764                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_measPerturbation
    2765                 :             : !! NAME
    2766                 :             : !!  CtqmcoffdiagComplex_measPerturbation
    2767                 :             : !!
    2768                 :             : !! FUNCTION
    2769                 :             : !!  measure perturbation order
    2770                 :             : !!
    2771                 :             : !! COPYRIGHT
    2772                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    2773                 :             : !!  This file is distributed under the terms of the
    2774                 :             : !!  GNU General Public License, see ~abinit/COPYING
    2775                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    2776                 :             : !!
    2777                 :             : !! INPUTS
    2778                 :             : !!  op=ctqmc
    2779                 :             : !!  iflavor=the flavor to measure
    2780                 :             : !!
    2781                 :             : !! OUTPUT
    2782                 :             : !!
    2783                 :             : !! SIDE EFFECTS
    2784                 :             : !!
    2785                 :             : !! NOTES
    2786                 :             : !!
    2787                 :             : !! SOURCE
    2788                 :             : 
    2789                 :           0 : SUBROUTINE CtqmcoffdiagComplex_measPerturbation(op, iflavor)
    2790                 :             : 
    2791                 :             : !Arguments ------------------------------------
    2792                 :             :   TYPE(CtqmcoffdiagComplex)             , INTENT(INOUT)     :: op
    2793                 :             :   !TYPE(ImpurityOperator), INTENT(IN   )     :: impurity
    2794                 :             :   INTEGER               , INTENT(IN   )     :: iflavor
    2795                 :             : !Local variables ------------------------------
    2796                 :             :   INTEGER                                   :: index
    2797                 :             : 
    2798         [ #  # ]:           0 :   IF ( .NOT. op%set ) &
    2799                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_measiPerturbation : QMC not set               ")
    2800                 :             : 
    2801                 :           0 :   index = op%impurity%particles(op%impurity%activeFlavor)%tail + 1
    2802         [ #  # ]:           0 :   IF ( index .LE. op%opt_order ) &
    2803                 :           0 :     op%measPerturbation(index,iflavor) = op%measPerturbation(index,iflavor) + 1.d0
    2804         [ #  # ]:           0 :   IF ( index == 1 ) THEN
    2805         [ #  # ]:           0 :     IF (op%impurity%particles(iflavor)%list(0,C_) < op%impurity%particles(iflavor)%list(0,Cdag_) ) THEN
    2806                 :           0 :       op%meas_fullemptylines(1,iflavor) = op%meas_fullemptylines(1,iflavor) + 1.d0
    2807                 :             :     ELSE
    2808                 :           0 :       op%meas_fullemptylines(2,iflavor) = op%meas_fullemptylines(2,iflavor) + 1.d0
    2809                 :             :     ENDIF
    2810                 :             :   ENDIF
    2811                 :             : 
    2812                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_measPerturbation
    2813                 :             : !!***
    2814                 :             : !#endif
    2815                 :             : 
    2816                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_getResult
    2817                 :             : !! NAME
    2818                 :             : !!  CtqmcoffdiagComplex_getResult
    2819                 :             : !!
    2820                 :             : !! FUNCTION
    2821                 :             : !!  reduce everything to get the result of the simulation
    2822                 :             : !!
    2823                 :             : !! COPYRIGHT
    2824                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder,F. Gendron)
    2825                 :             : !!  This file is distributed under the terms of the
    2826                 :             : !!  GNU General Public License, see ~abinit/COPYING
    2827                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    2828                 :             : !!
    2829                 :             : !! INPUTS
    2830                 :             : !!  op=ctqmc
    2831                 :             : !!
    2832                 :             : !! OUTPUT
    2833                 :             : !!
    2834                 :             : !! SIDE EFFECTS
    2835                 :             : !!
    2836                 :             : !! NOTES
    2837                 :             : !!
    2838                 :             : !! SOURCE
    2839                 :             : 
    2840                 :           0 : SUBROUTINE CtqmcoffdiagComplex_getResult(op,Iatom,fname)
    2841                 :             : 
    2842                 :             : 
    2843                 :             : #ifdef HAVE_MPI1
    2844                 :             : include 'mpif.h'
    2845                 :             : #endif
    2846                 :             : !Arguments ------------------------------------
    2847                 :             :   TYPE(CtqmcoffdiagComplex)  , INTENT(INOUT)                    :: op
    2848                 :             :   INTEGER, INTENT(IN ) :: Iatom
    2849                 :             :   character(len=fnlen), INTENT(INOUT) :: fname
    2850                 :             : !Local variables ------------------------------
    2851                 :             :   INTEGER                                       :: iflavor
    2852                 :             : !  INTEGER                                       :: iflavor1
    2853                 :             : !  INTEGER                                       :: iflavor2
    2854                 :             :   INTEGER                                       :: flavors
    2855                 :             :   INTEGER                                       :: itau
    2856                 :             :   INTEGER                                       :: endDensity
    2857                 :             :   character(len=2)                              :: atomnb
    2858                 :             :   DOUBLE PRECISION                              :: inv_flavors
    2859                 :             :   DOUBLE PRECISION                              :: a
    2860                 :             :   DOUBLE PRECISION                              :: b
    2861                 :             :   DOUBLE PRECISION                              :: r
    2862                 :           0 :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: alpha
    2863                 :           0 :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: beta
    2864                 :           0 :   COMPLEX(kind=8), ALLOCATABLE, DIMENSION(:)   :: measN_1
    2865                 :             :   DOUBLE PRECISION,              DIMENSION(1:2) :: TabX
    2866                 :             :   DOUBLE PRECISION,              DIMENSION(1:2) :: TabY
    2867                 :           0 :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:)   :: freqs
    2868                 :           0 :   INTEGER, ALLOCATABLE, DIMENSION(:)   :: counts
    2869                 :           0 :   INTEGER, ALLOCATABLE, DIMENSION(:)   :: displs
    2870                 :           0 :   INTEGER, ALLOCATABLE, DIMENSION(:)   :: occtot
    2871                 :           0 :   INTEGER, ALLOCATABLE, DIMENSION(:)   :: spintot
    2872                 :           0 :   INTEGER, ALLOCATABLE, DIMENSION(:,:)   :: occ
    2873                 :             :   INTEGER                                       :: sp1,spinmax,spinmin,dspin,nelec,spin
    2874                 :             :   INTEGER                                       :: spAll
    2875                 :             :   INTEGER                                       :: last
    2876                 :             :   INTEGER                                       :: n1
    2877                 :             :   INTEGER                                       :: n2,n3,quotient,remainder,signe
    2878                 :             :   INTEGER                                       :: debut
    2879                 :             :   DOUBLE PRECISION                                       :: signvaluemeassum
    2880                 :             :    COMPLEX(KIND=8)                               :: phasevaluemeassum
    2881                 :             : !  INTEGER                                       :: fin
    2882                 :             : #ifdef HAVE_MPI
    2883                 :             :   INTEGER                                       :: ierr
    2884                 :             :   DOUBLE PRECISION,              DIMENSION(1)   :: arr
    2885                 :             : #endif
    2886                 :             :   INTEGER                                       :: sizeoper,nbprocs,myrank
    2887                 :             :   DOUBLE PRECISION                              :: inv_size,sumh,sumtot
    2888                 :           0 :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: buffer
    2889                 :           0 :   COMPLEX(KIND=8), ALLOCATABLE, DIMENSION(:,:,:) :: buffer2,buffer2s
    2890                 :           0 :   DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: fullempty
    2891                 :           0 :   TYPE(FFTHyb) :: FFTmrka
    2892                 :             : 
    2893                 :             : #if defined HAVE_MPI && !defined HAVE_MPI2_INPLACE
    2894                 :             :    DOUBLE PRECISION, ALLOCATABLE , DIMENSION(:)   :: buffer1_out,freqs_buf
    2895                 :             :    DOUBLE PRECISION, ALLOCATABLE , DIMENSION(:,:) :: buffer2_out
    2896                 :             : #endif
    2897                 :             : 
    2898         [ #  # ]:           0 :   IF ( .NOT. op%done ) &
    2899                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_getResult : Simulation not run                ")
    2900                 :             : 
    2901                 :           0 :   flavors     =  op%flavors
    2902                 :           0 :   inv_flavors = 1.d0 / DBLE(flavors)
    2903                 :             : 
    2904                 :             : 
    2905                 :           0 :   inv_size = 1.d0 / DBLE(op%size)
    2906                 :           0 :   sp1 = 0
    2907                 :           0 :   spAll = 0
    2908                 :             : 
    2909                 :             : !#ifdef CTCtqmcoffdiagComplex_CHECK
    2910         [ #  # ]:           0 :   IF ( op%opt_check .GT. 0 ) THEN
    2911                 :           0 :     op%errorImpurity = ImpurityOperator_getError(op%Impurity) * inv_flavors
    2912                 :           0 :     op%errorBath     = BathOperatoroffdiagComplex_getError(op%Bath) * inv_flavors
    2913                 :             :   END IF
    2914                 :             : !#endif
    2915                 :             : 
    2916         [ #  # ]:           0 :   MALLOC(alpha,(1,1))
    2917         [ #  # ]:           0 :   MALLOC(beta,(1,1))
    2918         [ #  # ]:           0 :   MALLOC(buffer,(1,1))
    2919         [ #  # ]:           0 :   IF ( op%opt_noise .EQ. 1) THEN
    2920         [ #  # ]:           0 :     FREEIF(alpha)
    2921   [ #  #  #  #  :           0 :     MALLOC(alpha,(1:op%samples+1,1:flavors))
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
    2922         [ #  # ]:           0 :     FREEIF(beta)
    2923   [ #  #  #  #  :           0 :     MALLOC(beta,(1:op%samples+1,1:flavors))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
    2924                 :             :   END IF
    2925                 :             : 
    2926         [ #  # ]:           0 :   IF ( op%have_MPI .EQV. .TRUE.) THEN
    2927                 :           0 :     sp1   = 0
    2928                 :           0 :     spAll = sp1 + flavors + 6
    2929                 :             : 
    2930                 :             : !#ifdef CTCtqmcoffdiagComplex_ANALYSIS
    2931                 :             :     IF ( op%opt_analysis .EQ. 1 ) &
    2932                 :             :       spAll = spAll + 3*sp1
    2933         [ #  # ]:           0 :     IF ( op%opt_order .GT. 0 ) &
    2934                 :           0 :       spAll = spAll + op%opt_order
    2935         [ #  # ]:           0 :     IF ( op%opt_noise .EQ. 1 ) &
    2936                 :           0 :       spAll = spAll + 2*(op%samples + 1)
    2937                 :             : !#endif
    2938                 :             : 
    2939         [ #  # ]:           0 :     FREEIF(buffer)
    2940   [ #  #  #  #  :           0 :     MALLOC(buffer,(1:spAll,1:MAX(2,flavors)))
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
    2941                 :             :   END IF
    2942                 :             : 
    2943                 :             : !  op%seg_added    = op%seg_added    * inv_flavors
    2944                 :             : !  op%seg_removed  = op%seg_removed  * inv_flavors
    2945                 :             : !  op%seg_sign     = op%seg_sign     * inv_flavors
    2946                 :             : !  op%anti_added   = op%anti_added   * inv_flavors
    2947                 :             : !  op%anti_removed = op%anti_removed * inv_flavors
    2948                 :             : !  op%anti_sign    = op%anti_sign    * inv_flavors
    2949         [ #  # ]:           0 :   op%stats(:) = op%stats(:) * inv_flavors
    2950                 :             : 
    2951         [ #  # ]:           0 :   DO iflavor = 1, flavors
    2952                 :             :     ! Accumulate last values of  N (see also ctqmc_measn)
    2953                 :           0 :     op%measN(1,iflavor) = op%measN(1,iflavor) + op%measN(3,iflavor)*op%measN(4,iflavor)
    2954                 :           0 :     op%measN(2,iflavor) = op%measN(2,iflavor) + op%measN(4,iflavor)
    2955                 :             :     ! Reduction
    2956                 :           0 :     op%measN(1,iflavor)  = op%measN(1,iflavor) / ( op%measN(2,iflavor) * op%beta )
    2957                 :             :     ! Correction
    2958                 :             : !#ifdef CTCtqmcoffdiagComplex_ANALYSIS
    2959         [ #  # ]:           0 :     IF ( op%opt_order .GT. 0 ) &
    2960                 :             :       op%measPerturbation(:   ,iflavor) = op%measPerturbation(:,iflavor) &
    2961   [ #  #  #  # ]:           0 :                                     / SUM(op%measPerturbation(:,iflavor))
    2962         [ #  # ]:           0 :     IF ( op%opt_order .GT. 0 ) &
    2963                 :             :       op%meas_fullemptylines(:   ,iflavor) = op%meas_fullemptylines(:,iflavor) &
    2964   [ #  #  #  # ]:           0 :                                     / SUM(op%meas_fullemptylines(:,iflavor))
    2965                 :             :     !write(6,*) "sum fullempty",iflavor,op%meas_fullemptylines(:,iflavor)
    2966                 :             : 
    2967         [ #  # ]:           0 :     IF ( op%opt_analysis .EQ. 1 ) THEN
    2968                 :             :       op%measCorrelation (:,1,iflavor) = op%measCorrelation  (:,1,iflavor) &
    2969                 :             :                                     / SUM(op%measCorrelation (:,1,iflavor)) &
    2970   [ #  #  #  # ]:           0 :                                     * op%inv_dt
    2971                 :             :       op%measCorrelation (:,2,iflavor) = op%measCorrelation  (:,2,iflavor) &
    2972                 :             :                                     / SUM(op%measCorrelation (:,2,iflavor)) &
    2973   [ #  #  #  # ]:           0 :                                     * op%inv_dt
    2974                 :             :       op%measCorrelation (:,3,iflavor) = op%measCorrelation  (:,3,iflavor) &
    2975                 :             :                                     / SUM(op%measCorrelation (:,3,iflavor)) &
    2976   [ #  #  #  # ]:           0 :                                     * op%inv_dt
    2977                 :             :     END IF
    2978                 :             : !#endif
    2979         [ #  # ]:           0 :     IF ( op%opt_noise .EQ. 1 ) THEN
    2980                 :           0 :       TabX(1) = DBLE(op%modNoise2)
    2981                 :           0 :       TabX(2) = DBLE(op%modNoise1)
    2982         [ #  # ]:           0 :       DO itau = 1, op%samples+1
    2983                 :             :         op%measNoiseG(itau,iflavor,2)%vec = -op%measNoiseG(itau,iflavor,2)%vec*op%inv_dt &
    2984         [ #  # ]:           0 :                                            /(op%beta*DBLE(op%modNoise2))
    2985                 :             :         op%measNoiseG(itau,iflavor,1)%vec = -op%measNoiseG(itau,iflavor,1)%vec*op%inv_dt &
    2986         [ #  # ]:           0 :                                            /(op%beta*DBLE(op%modNoise1))
    2987                 :           0 :         n2 = op%measNoiseG(itau,iflavor,2)%tail
    2988                 :           0 :         TabY(1) = Stat_deviation(op%measNoiseG(itau,iflavor,2)%vec(1:n2))!*SQRT(n2/(n2-1))
    2989                 :           0 :         n1 = op%measNoiseG(itau,iflavor,1)%tail
    2990                 :           0 :         TabY(2) = Stat_deviation(op%measNoiseG(itau,iflavor,1)%vec(1:n1))!*SQRT(n1/(n1-1))
    2991         [ #  # ]:           0 :         CALL Stat_powerReg(TabX,SQRT(2.d0*LOG(2.d0))*TabY,alpha(itau,iflavor),beta(itau,iflavor),r)
    2992                 :             :         ! ecart type -> 60%
    2993                 :             :         ! largeur a mi-hauteur d'une gaussienne -> sqrt(2*ln(2))*sigma
    2994                 :             :       END DO
    2995                 :             :     END IF
    2996                 :             : 
    2997                 :             :   END DO
    2998                 :             : !sui!write(6,*) "getresults"
    2999                 :           0 :   CALL GreenHyboffdiagComplex_measHybrid(op%Greens, op%Bath%M, op%Impurity%Particles, .TRUE.,op%signvalue,op%phasevalue)
    3000                 :           0 :   CALL GreenHyboffdiagComplex_getHybrid(op%Greens)
    3001                 :             :   !write(6,*) "op%measN",op%measN(1,:)
    3002   [ #  #  #  #  :           0 :   MALLOC(measN_1,(flavors))
          #  #  #  #  #  
                #  #  # ]
    3003         [ #  # ]:           0 :   do iflavor=1,flavors
    3004                 :           0 :     measN_1(iflavor)=op%measN(1,iflavor)
    3005                 :             :   enddo
    3006                 :           0 :   CALL GreenHyboffdiagComplex_setN(op%Greens, measN_1(:))
    3007         [ #  # ]:           0 :   FREE(measN_1)
    3008                 :             : 
    3009                 :             : ! todoab case _nd and _d are not completely described.
    3010                 :             :   FREEIF(buffer2)
    3011                 :             :   FREEIF(buffer2s)
    3012                 :           0 :   sizeoper=size(op%Greens%oper,1)
    3013                 :             :   !write(6,*) "sss",size(op%Greens%oper,1),sizeoper
    3014                 :             :   !write(6,*) "sss",size(op%Greens%oper,2),flavors
    3015                 :             :   !write(6,*) "sss",size(op%Greens%oper,3),flavors
    3016   [ #  #  #  #  :           0 :   MALLOC(buffer2,(1:sizeoper,flavors,flavors))
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                      # ]
    3017   [ #  #  #  #  :           0 :   MALLOC(buffer2s,(1:sizeoper,flavors,flavors))
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
    3018   [ #  #  #  #  :           0 :   MALLOC(fullempty,(2,flavors))
          #  #  #  #  #  
                #  #  # ]
    3019                 :             :       !sui!write(6,*) "greens1"
    3020         [ #  # ]:           0 :   IF ( op%have_MPI .EQV. .TRUE. ) THEN
    3021                 :             :       !sui!write(6,*) "greens2"
    3022   [ #  #  #  # ]:           0 :     fullempty=0.d0
    3023   [ #  #  #  #  :           0 :     buffer2 = op%Greens%oper
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
    3024                 :             :     !write(6,*) "buffer2",(op%Greens%oper(1,n1,n1),n1=1,flavors)
    3025   [ #  #  #  #  :           0 :     buffer2s= 0.d0
                   #  # ]
    3026                 :             :     do iflavor=1,flavors
    3027                 :             :       do itau=1,sizeoper
    3028                 :             :     !sui!write(6,*) "greens",iflavor,itau,op%Greens%oper(itau,iflavor,iflavor)
    3029                 :             :       enddo
    3030                 :             :     enddo
    3031                 :             :    !write(6,*) "beforempi",op%Greens%oper(1,1,1) ,buffer2(1,1,1)
    3032                 :             : #ifdef HAVE_MPI
    3033                 :           0 :    CALL MPI_COMM_SIZE(op%MY_COMM,nbprocs,ierr)
    3034                 :           0 :    CALL MPI_COMM_RANK(op%MY_COMM,myrank,ierr)
    3035                 :             : #endif
    3036                 :             :   !write(6,*) "procs",nbprocs,myrank
    3037                 :             :   END IF
    3038                 :           0 :   last = sp1
    3039                 :             : 
    3040   [ #  #  #  # ]:           0 :   op%measDE(:,:) = op%measDE(:,:) * DBLE(op%measurements) /(DBLE(op%sweeps)*op%beta)
    3041                 :             : 
    3042         [ #  # ]:           0 :   IF ( op%opt_histo .GT. 0 ) THEN
    3043         [ #  # ]:           0 :     op%occup_histo_time(:) = op%occup_histo_time(:) / INT(op%sweeps/op%measurements)
    3044         [ #  # ]:           0 :     op%occupconfig(:) = op%occupconfig(:) / INT(op%sweeps/op%measurements)
    3045   [ #  #  #  # ]:           0 :     op%suscep(:,:) = op%suscep(:,:) / INT(op%sweeps/op%measurements)
    3046   [ #  #  #  # ]:           0 :     op%chi(:,:) = op%chi(:,:) / INT(op%sweeps/op%measurements)
    3047   [ #  #  #  # ]:           0 :     op%chicharge(:,:) = op%chicharge(:,:) / INT(op%sweeps/op%measurements)
    3048         [ #  # ]:           0 :     op%ntot(:) = op%ntot(:) / INT(op%sweeps/op%measurements)
    3049                 :             :   END IF
    3050                 :             : ! HISTO before MPI_SUM
    3051                 :             : !  write(6,*) "=== Histogram of occupations for complete simulation 3 ====",INT(op%sweeps/op%measurements)
    3052                 :             : !  sumh=0
    3053                 :             : !  do n1=1,op%flavors+1
    3054                 :             : !     write(6,'(i4,f10.4)')  n1-1, op%occup_histo_time(n1)
    3055                 :             : !     sumh=sumh+op%occup_histo_time(n1)
    3056                 :             : !  enddo
    3057                 :             : !  write(6,*) "=================================",sumh
    3058                 :             : 
    3059                 :           0 :   n1 = op%measNoise(1)%tail
    3060                 :           0 :   n2 = op%measNoise(2)%tail
    3061                 :             : 
    3062                 :             :   ! On utilise freqs comme tableau de regroupement
    3063                 :             :   ! Gather de Noise1
    3064         [ #  # ]:           0 :   IF ( op%have_MPI .EQV. .TRUE. ) THEN
    3065   [ #  #  #  #  :           0 :     MALLOC(counts,(1:op%size))
          #  #  #  #  #  
                #  #  # ]
    3066   [ #  #  #  #  :           0 :     MALLOC(displs,(1:op%size))
             #  #  #  # ]
    3067                 :             :     FREEIF(freqs)
    3068   [ #  #  #  #  :           0 :     MALLOC(freqs,(1:op%size*n1))
          #  #  #  #  #  
                #  #  # ]
    3069         [ #  # ]:           0 :     freqs = 0.d0
    3070         [ #  # ]:           0 :     counts(:) = n1
    3071   [ #  #  #  #  :           0 :     displs(:) = (/ ( iflavor*n1, iflavor=0, op%size-1 ) /)
                   #  # ]
    3072                 :             : #ifdef HAVE_MPI
    3073                 :             : #if defined HAVE_MPI2_INPLACE
    3074         [ #  # ]:           0 :     freqs(n1*op%rank+1:n1*(op%rank+1)) = op%measNoise(1)%vec(1:n1)
    3075                 :             :     CALL MPI_ALLGATHERV(MPI_IN_PLACE, 0, MPI_DOUBLE_PRECISION, &
    3076                 :             :                         freqs, counts, displs, &
    3077                 :           0 :                         MPI_DOUBLE_PRECISION, op%MY_COMM, ierr)
    3078                 :             : #else
    3079                 :             :     MALLOC(freqs_buf,(n1))
    3080                 :             :     freqs_buf(1:n2)=op%measNoise(2)%vec(1:n1)
    3081                 :             :     CALL MPI_ALLGATHERV(freqs_buf, n1, MPI_DOUBLE_PRECISION, &
    3082                 :             :                         freqs, counts, displs, &
    3083                 :             :                         MPI_DOUBLE_PRECISION, op%MY_COMM, ierr)
    3084                 :             :     FREE(freqs_buf)
    3085                 :             : #endif
    3086                 :             : #endif
    3087                 :           0 :     n1 = op%size*n1
    3088                 :           0 :     CALL Vector_setSize(op%measNoise(1),n1)
    3089         [ #  # ]:           0 :     op%measNoise(1)%vec(1:n1) = freqs(:)
    3090                 :             :     ! Gather de Noise2
    3091         [ #  # ]:           0 :     FREE(freqs)
    3092   [ #  #  #  #  :           0 :     MALLOC(freqs,(1:op%size*n2))
          #  #  #  #  #  
                #  #  # ]
    3093         [ #  # ]:           0 :     freqs = 0.d0
    3094         [ #  # ]:           0 :     counts(:) = n2
    3095   [ #  #  #  # ]:           0 :     displs(:) = (/ ( iflavor*n2, iflavor=0, op%size-1 ) /)
    3096                 :             : #ifdef HAVE_MPI
    3097                 :             : #if defined HAVE_MPI2_INPLACE
    3098         [ #  # ]:           0 :     freqs(n2*op%rank+1:n2*(op%rank+1)) = op%measNoise(2)%vec(1:n2)
    3099                 :             :     CALL MPI_ALLGATHERV(MPI_IN_PLACE, 0, MPI_DOUBLE_PRECISION, &
    3100                 :             :                         freqs, counts, displs, &
    3101                 :           0 :                         MPI_DOUBLE_PRECISION, op%MY_COMM, ierr)
    3102                 :             : #else
    3103                 :             :     MALLOC(freqs_buf,(n2))
    3104                 :             :     freqs_buf(1:n2)=op%measNoise(2)%vec(1:n2)
    3105                 :             :     CALL MPI_ALLGATHERV(freqs_buf, n2, MPI_DOUBLE_PRECISION, &
    3106                 :             :                         freqs, counts, displs, &
    3107                 :             :                         MPI_DOUBLE_PRECISION, op%MY_COMM, ierr)
    3108                 :             :     FREE(freqs_buf)
    3109                 :             : #endif
    3110                 :             : #endif
    3111                 :           0 :     n2 = op%size*n2
    3112                 :           0 :     CALL Vector_setSize(op%measNoise(2),n2)
    3113         [ #  # ]:           0 :     op%measNoise(2)%vec(1:n2) = freqs(:)
    3114         [ #  # ]:           0 :     FREE(counts)
    3115         [ #  # ]:           0 :     FREE(displs)
    3116         [ #  # ]:           0 :     FREE(freqs)
    3117                 :             :   END IF
    3118                 :             :   !n1 = op%measNoise(1)%tail
    3119                 :             :   !n2 = op%measNoise(2)%tail
    3120                 :             : 
    3121                 :             :   ! Transformation des paquets pour que ca fit a CTQMC_SLICE(1|2)
    3122         [ #  # ]:           0 :   IF ( n1 .GT. CTQMC_SLICE1 ) THEN
    3123                 :           0 :     itau = n1/CTQMC_SLICE1
    3124   [ #  #  #  #  :           0 :     MALLOC(freqs,(1:n1/itau))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
    3125         [ #  # ]:           0 :     DO debut=1, n1/itau
    3126         [ #  # ]:           0 :       freqs(debut)=SUM(op%measNoise(1)%vec((debut-1)*itau+1:itau*debut))
    3127                 :             :     END DO
    3128         [ #  # ]:           0 :     freqs(:) = freqs(:)/DBLE(itau)
    3129                 :           0 :     op%modNoise1 = op%modNoise1*itau
    3130                 :           0 :     n1 = n1/itau
    3131                 :           0 :     CALL Vector_setSize(op%measNoise(1),n1)
    3132         [ #  # ]:           0 :     op%measNoise(1)%vec(1:n1) = freqs(:)
    3133         [ #  # ]:           0 :     FREE(freqs)
    3134                 :             :   END IF
    3135         [ #  # ]:           0 :   IF ( n2 .GT. CTQMC_SLICE1*CTQMC_SLICE2 ) THEN
    3136                 :           0 :     itau = n2/(CTQMC_SLICE1*CTQMC_SLICE2)
    3137   [ #  #  #  #  :           0 :     MALLOC(freqs,(1:n2/itau))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
    3138         [ #  # ]:           0 :     DO debut=1, n2/itau
    3139         [ #  # ]:           0 :       freqs(debut)=SUM(op%measNoise(2)%vec((debut-1)*itau+1:itau*debut))
    3140                 :             :     END DO
    3141         [ #  # ]:           0 :     freqs(:) = freqs(:)/DBLE(itau)
    3142                 :           0 :     op%modNoise2 = op%modNoise2*itau
    3143                 :           0 :     n2 = n2/itau
    3144                 :           0 :     CALL Vector_setSize(op%measNoise(2),n2)
    3145         [ #  # ]:           0 :     op%measNoise(2)%vec(1:n2) = freqs(:)
    3146         [ #  # ]:           0 :     FREE(freqs)
    3147                 :             :   END IF
    3148                 :             :   ! On peut s'amuser avec nos valeur d'energies
    3149                 :             :   !MALLOC(TabX,(1:20))
    3150                 :             :   !MALLOC(TabY,(1:20))
    3151                 :             : 
    3152                 :           0 :   TabX(1) = DBLE(op%modNoise2)
    3153                 :           0 :   TabX(2) = DBLE(op%modNoise1)
    3154                 :             : 
    3155                 :             :   ! Il faut calculer pour chaque modulo 10 ecarts type sur les donnes acquises
    3156         [ #  # ]:           0 :   op%measNoise(1)%vec(1:n1) = op%measNoise(1)%vec(1:n1)/(op%beta*DBLE(op%modNoise1))*DBLE(op%measurements)
    3157         [ #  # ]:           0 :   op%measNoise(2)%vec(1:n2) = op%measNoise(2)%vec(1:n2)/(op%beta*DBLE(op%modNoise2))*DBLE(op%measurements)
    3158                 :             : !  CALL Vector_print(op%measNoise(1),op%rank+70)
    3159                 :             : !  CALL Vector_print(op%measNoise(2),op%rank+50)
    3160                 :             : !  DO iflavor=1,10
    3161                 :             : !    debut = (iflavor-1)*n2/10+1
    3162                 :             : !    fin   = iflavor*n2/10
    3163                 :             : !    TabY(iflavor) = Stat_deviation(op%measNoise(2)%vec(debut:fin))
    3164                 :             : !    debut = (iflavor-1)*n1/10+1
    3165                 :             : !    fin   = iflavor*n1/10
    3166                 :             : !    TabY(10+iflavor) = Stat_deviation(op%measNoise(1)%vec(debut:fin))
    3167                 :             : !  END DO
    3168                 :             : !!  TabY(1:n) = (op%measNoise(2)%vec(1:n)   &
    3169                 :             : !!              )
    3170                 :             : !!             !/(op%beta*DBLE(op%modNoise2))*DBLE(op%measurements) &
    3171                 :             : !!             !- op%measDE(1,1))
    3172                 :             : !!  TabY(op%measNoise(2)%tail+1:n+op%measNoise(2)%tail) = (op%measNoise(1)%vec(1:n)   &
    3173                 :             : !!               )
    3174                 :             : !!             ! /(op%beta*DBLE(op%modNoise1))*DBLE(op%measurements) &
    3175                 :             : !!             ! - op%measDE(1,1))
    3176                 :             : !  IF ( op%rank .EQ. 0 ) THEN
    3177                 :             : !    DO iflavor=1,20
    3178                 :             : !      write(45,*) TabX(iflavor), TabY(iflavor)
    3179                 :             : !    END DO
    3180                 :             : !  END IF
    3181                 :             : !
    3182                 :             : 
    3183                 :             : 
    3184                 :           0 :   TabY(1) = Stat_deviation(op%measNoise(2)%vec(1:n2))!*SQRT(n2/(n2-1))
    3185                 :             : !!  write(op%rank+10,*) TabX(2)
    3186                 :             : !!  write(op%rank+40,*) TabX(1)
    3187                 :             : !!  CALL Vector_print(op%measNoise(1),op%rank+10)
    3188                 :             : !!  CALL Vector_print(op%measNoise(2),op%rank+40)
    3189                 :             : !!  CLOSE(op%rank+10)
    3190                 :             : !!  CLOSE(op%rank+40)
    3191                 :           0 :   TabY(2) = Stat_deviation(op%measNoise(1)%vec(1:n1))!*SQRT(n1/(n1-1))
    3192                 :             : !!  ! Ecart carre moyen ~ ecart type mais non biaise. Serait moins precis. Aucun
    3193                 :             :   ! impact sur la pente, juste sur l'ordonnee a l'origine.
    3194                 :             : 
    3195         [ #  # ]:           0 :   CALL Stat_powerReg(TabX,SQRT(2.d0*LOG(2.d0))*TabY,a,b,r)
    3196                 :             : !  FREE(TabX)
    3197                 :             : !  FREE(TabY)
    3198                 :             :   ! ecart type -> 60%
    3199                 :             :   ! largeur a mi-hauteur d'une gaussienne -> sqrt(2*ln(2))*sigma
    3200                 :             : 
    3201                 :             :   !op%measDE(1,1) = SUM(op%measNoise(1)%vec(1:op%measNoise(1)%tail))/(DBLE(op%measNoise(1)%tail*op%modNoise1)*op%beta)
    3202                 :             :   !op%measDE(2:flavors,1:flavors) = op%measDE(2:flavors,1:flavors) /(DBLE(op%sweeps)*op%beta)
    3203                 :           0 :   CALL ImpurityOperator_getErrorOverlap(op%Impurity,op%measDE)
    3204                 :             :   ! Add the difference between true calculation and quick calculation of the
    3205                 :             :   ! last sweep overlap to measDE(2,2)
    3206                 :             :   !op%measDE = op%measDE * DBLE(op%measurements)
    3207         [ #  # ]:           0 :   IF ( op%have_MPI .EQV. .TRUE. ) THEN
    3208         [ #  # ]:           0 :     IF ( op%opt_analysis .EQ. 1 ) THEN
    3209   [ #  #  #  # ]:           0 :       buffer(last+1:last+sp1,:) = op%measCorrelation(:,1,:)
    3210                 :           0 :       last = last + sp1
    3211   [ #  #  #  # ]:           0 :       buffer(last+1:last+sp1,:) = op%measCorrelation(:,2,:)
    3212                 :           0 :       last = last + sp1
    3213   [ #  #  #  # ]:           0 :       buffer(last+1:last+sp1,:) = op%measCorrelation(:,3,:)
    3214                 :             :       last = last + sp1
    3215                 :             :     END IF
    3216         [ #  # ]:           0 :     IF ( op%opt_order .GT. 0 ) THEN
    3217   [ #  #  #  # ]:           0 :       buffer(last+1:last+op%opt_order, :) = op%measPerturbation(:,:)
    3218                 :             :       last = last + op%opt_order
    3219                 :             :     END IF
    3220         [ #  # ]:           0 :     IF ( op%opt_noise .EQ. 1 ) THEN
    3221   [ #  #  #  # ]:           0 :       buffer(last+1:last+op%samples+1,:) = alpha(:,:)
    3222                 :           0 :       last = last + op%samples + 1
    3223   [ #  #  #  # ]:           0 :       buffer(last+1:last+op%samples+1,:) = beta(:,:)
    3224                 :           0 :       last = last + op%samples + 1
    3225                 :             :     END IF
    3226                 :             : !  op%measDE(2,2) = a*EXP(b*LOG(DBLE(op%sweeps*op%size)))
    3227   [ #  #  #  # ]:           0 :     buffer(spall-(flavors+5):spAll-6,:) = op%measDE(:,:)
    3228                 :             : !    buffer(spAll  ,1) = op%seg_added
    3229                 :             : !    buffer(spAll-1,1) = op%seg_removed
    3230                 :             : !    buffer(spAll-2,1) = op%seg_sign
    3231                 :             : !    buffer(spAll  ,2) = op%anti_added
    3232                 :             : !    buffer(spAll-1,2) = op%anti_removed
    3233                 :             : !    buffer(spAll-2,2) = op%anti_sign
    3234                 :           0 :     buffer(spAll  ,1) = op%stats(1)
    3235                 :           0 :     buffer(spAll-1,1) = op%stats(2)
    3236                 :           0 :     buffer(spAll-2,1) = op%stats(3)
    3237                 :           0 :     buffer(spAll  ,2) = op%stats(4)
    3238                 :           0 :     buffer(spAll-1,2) = op%stats(5)
    3239                 :           0 :     buffer(spAll-2,2) = op%stats(6)
    3240                 :           0 :     buffer(spAll-3,1) = op%swap
    3241                 :           0 :     buffer(spAll-3,2) = DBLE(op%modGlobalMove(2))
    3242                 :           0 :     buffer(spAll-4,1) = a
    3243                 :           0 :     buffer(spAll-4,2) = b
    3244                 :             : !#ifdef CTCtqmcoffdiagComplex_CHECK
    3245                 :           0 :     buffer(spAll-5,1) = op%errorImpurity
    3246                 :           0 :     buffer(spAll-5,2) = op%errorBath
    3247                 :           0 :     signvaluemeassum = 0
    3248                 :           0 :     phasevaluemeassum = 0
    3249                 :             : !#endif
    3250                 :             : 
    3251                 :             : #ifdef HAVE_MPI
    3252                 :             : #if defined HAVE_MPI2_INPLACE
    3253                 :             :     CALL MPI_ALLREDUCE(MPI_IN_PLACE, buffer, spAll*flavors, &
    3254                 :           0 :                      MPI_DOUBLE_PRECISION, MPI_SUM, op%MY_COMM, ierr)
    3255                 :             : #else
    3256                 :             :     MALLOC(buffer2_out,(spAll,flavors))
    3257                 :             :     CALL MPI_ALLREDUCE(buffer, buffer2_out, spAll*flavors, &
    3258                 :             :                      MPI_DOUBLE_PRECISION, MPI_SUM, op%MY_COMM, ierr)
    3259                 :             :     buffer(1:spAll,1:flavors)=buffer2_out(1:spAll,1:flavors)
    3260                 :             :     FREE(buffer2_out)
    3261                 :             : #endif
    3262                 :             :     CALL MPI_ALLREDUCE(buffer2, buffer2s, sizeoper*flavors*flavors, &
    3263                 :           0 :                      MPI_DOUBLE_COMPLEX, MPI_SUM, op%MY_COMM, ierr)
    3264         [ #  # ]:           0 :     CALL MPI_ALLREDUCE([op%runtime], arr, 1, MPI_DOUBLE_PRECISION, MPI_MAX, op%MY_COMM, ierr)
    3265                 :           0 :     op%runtime=arr(1)
    3266         [ #  # ]:           0 :     CALL MPI_ALLREDUCE([op%Greens%signvaluemeas], arr, 1, MPI_DOUBLE_PRECISION, MPI_SUM, op%MY_COMM, ierr)
    3267                 :           0 :     signvaluemeassum=arr(1)
    3268         [ #  # ]:           0 :     CALL MPI_ALLREDUCE([op%Greens%phasevaluemeas], arr , 1, MPI_DOUBLE_COMPLEX, MPI_SUM, op%MY_COMM, ierr)
    3269                 :           0 :     phasevaluemeassum=arr(1)
    3270                 :             : #if defined HAVE_MPI2_INPLACE
    3271         [ #  # ]:           0 :     IF ( op%opt_histo .GT. 0 ) THEN
    3272                 :             :       CALL MPI_ALLREDUCE(MPI_IN_PLACE,op%occup_histo_time, flavors+1, MPI_DOUBLE_PRECISION, MPI_SUM, &
    3273                 :           0 :              op%MY_COMM, ierr)
    3274                 :             :       CALL MPI_ALLREDUCE(MPI_IN_PLACE, op%occupconfig, 2**flavors, MPI_DOUBLE_PRECISION, MPI_SUM, &
    3275   [ #  #  #  # ]:           0 :                op%MY_COMM, ierr)
    3276                 :             :       CALL MPI_ALLREDUCE(MPI_IN_PLACE, op%suscep, 3*op%samples, MPI_DOUBLE_PRECISION, MPI_SUM, &
    3277                 :           0 :                op%MY_COMM, ierr)
    3278                 :             :       CALL MPI_ALLREDUCE(MPI_IN_PLACE, op%chi, 3*op%samples, MPI_DOUBLE_PRECISION, MPI_SUM, &
    3279                 :           0 :                op%MY_COMM, ierr)
    3280                 :             :       CALL MPI_ALLREDUCE(MPI_IN_PLACE, op%chicharge, 3*op%samples, MPI_DOUBLE_PRECISION, MPI_SUM, &
    3281                 :           0 :                op%MY_COMM, ierr)
    3282                 :             :       CALL MPI_ALLREDUCE(MPI_IN_PLACE, op%ntot, 3, MPI_DOUBLE_PRECISION, MPI_SUM, &
    3283                 :           0 :                op%MY_COMM, ierr)
    3284                 :             :     END IF
    3285                 :             :     CALL MPI_ALLREDUCE(MPI_IN_PLACE, sumh, 1, MPI_DOUBLE_PRECISION, MPI_SUM, &
    3286                 :           0 :               op%MY_COMM, ierr)
    3287                 :             : #else
    3288                 :             :       MALLOC(buffer1_out,(flavors+1))
    3289                 :             :       CALL MPI_ALLREDUCE(op%occup_histo_time, buffer1_out, flavors+1, MPI_DOUBLE_PRECISION, MPI_SUM, &
    3290                 :             :              op%MY_COMM, ierr)
    3291                 :             :       op%occup_histo_time(1:flavors+1) =buffer1_out(1:flavors+1)
    3292                 :             :       FREE(buffer1_out)
    3293                 :             : #endif
    3294         [ #  # ]:           0 :     CALL MPI_ALLREDUCE([sumh], arr, 1, MPI_DOUBLE_PRECISION, MPI_SUM, op%MY_COMM, ierr)
    3295                 :           0 :     sumh=arr(1)
    3296         [ #  # ]:           0 :     IF ( op%opt_order .GT. 0 ) THEN
    3297                 :             :       CALL MPI_ALLREDUCE(op%meas_fullemptylines, fullempty, 2*flavors, MPI_DOUBLE_PRECISION, MPI_SUM, &
    3298                 :           0 :                op%MY_COMM, ierr)
    3299                 :             :     ENDIF
    3300                 :             : #endif
    3301                 :             : 
    3302                 :             : 
    3303   [ #  #  #  # ]:           0 :     buffer          = buffer * inv_size
    3304   [ #  #  #  # ]:           0 :     op%measDE(:,:)  = buffer(spall-(flavors+5):spAll-6,:)
    3305                 :             : !    op%seg_added    = buffer(spAll  ,1)
    3306                 :             : !    op%seg_removed  = buffer(spAll-1,1)
    3307                 :             : !    op%seg_sign     = buffer(spAll-2,1)
    3308                 :             : !    op%anti_added   = buffer(spAll  ,2)
    3309                 :             : !    op%anti_removed = buffer(spAll-1,2)
    3310                 :             : !    op%anti_sign    = buffer(spAll-2,2)
    3311                 :           0 :     op%stats(1)    = buffer(spAll  ,1)
    3312                 :           0 :     op%stats(2)    = buffer(spAll-1,1)
    3313                 :           0 :     op%stats(3)    = buffer(spAll-2,1)
    3314                 :           0 :     op%stats(4)    = buffer(spAll  ,2)
    3315                 :           0 :     op%stats(5)    = buffer(spAll-1,2)
    3316                 :           0 :     op%stats(6)    = buffer(spAll-2,2)
    3317                 :           0 :     op%swap         = buffer(spAll-3,1)
    3318                 :           0 :     op%modGlobalMove(2) = NINT(buffer(spAll-3,2))
    3319                 :           0 :     a               = buffer(spAll-4,1)
    3320                 :           0 :     b               = buffer(spAll-4,2)
    3321                 :             : !!#ifdef CTCtqmcoffdiagComplex_CHECK
    3322                 :           0 :     op%errorImpurity= buffer(spAll-5,1)
    3323                 :           0 :     op%errorBath    = buffer(spAll-5,2)
    3324                 :             : !#endif
    3325                 :             : 
    3326                 :             :    ! DO iflavor = 1, flavors
    3327                 :             :    !   op%Greens(iflavor)%oper          = buffer(1:sp1          , iflavor)
    3328                 :             :    ! END DO
    3329   [ #  #  #  #  :           0 :     op%Greens%oper = buffer2s/float(nbprocs)
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
    3330                 :             :    ! write(6,*) "buffer2s",(op%Greens%oper(1,n1,n1),n1=1,flavors)
    3331                 :           0 :     op%Greens%signvaluemeas = signvaluemeassum/float(nbprocs)
    3332                 :           0 :     op%Greens%phasevaluemeas = phasevaluemeassum/float(nbprocs)
    3333                 :             :     !sui!write(6,*) "nbprocs",nbprocs,op%Greens%signvaluemeas
    3334   [ #  #  #  #  :           0 :     op%Greens%oper = op%Greens%oper / op%Greens%phasevaluemeas
                   #  # ]
    3335                 :             :    ! write(6,*) "buffer3s",(op%Greens%oper(1,n1,n1),n1=1,flavors)
    3336         [ #  # ]:           0 :     IF ( op%opt_order .GT. 0 ) THEN
    3337   [ #  #  #  #  :           0 :       op%meas_fullemptylines= fullempty/float(nbprocs)
          #  #  #  #  #  
                #  #  # ]
    3338                 :             :     ENDIF
    3339                 :           0 :     do iflavor=1,flavors
    3340                 :             :       do itau=1,sizeoper
    3341                 :             :     !sui!write(6,*) "greens_av",iflavor,itau,op%Greens%oper(itau,iflavor,iflavor)
    3342                 :             :       enddo
    3343                 :             :     enddo
    3344                 :             :    !write(6,*) "aftermpi",op%Greens%oper(1,1,1) ,buffer2s(1,1,1)
    3345                 :           0 :     last = sp1
    3346                 :             :     IF ( op%opt_analysis .EQ. 1 ) THEN
    3347                 :             :       op%measCorrelation(:,1,:) = buffer(last+1:last+sp1,:)
    3348                 :             :       last = last + sp1
    3349                 :             :       op%measCorrelation(:,2,:) = buffer(last+1:last+sp1,:)
    3350                 :             :       last = last + sp1
    3351                 :             :       op%measCorrelation(:,3,:) = buffer(last+1:last+sp1,:)
    3352                 :             :       last = last + sp1
    3353                 :             :     END IF
    3354         [ #  # ]:           0 :     IF ( op%opt_order .GT. 0 ) THEN
    3355   [ #  #  #  # ]:           0 :       op%measPerturbation(:,:) = buffer(last+1:last+op%opt_order, :)
    3356                 :             :       last = last + op%opt_order
    3357                 :             :     END IF
    3358         [ #  # ]:           0 :     IF ( op%opt_noise .EQ. 1 ) THEN
    3359   [ #  #  #  # ]:           0 :       alpha(:,:) = buffer(last+1:last+op%samples+1,:)
    3360                 :           0 :       last = last + op%samples + 1
    3361   [ #  #  #  # ]:           0 :       beta(:,:) = buffer(last+1:last+op%samples+1,:)
    3362                 :           0 :       last = last + op%samples + 1
    3363                 :             :     END IF
    3364                 :             :   END IF
    3365         [ #  # ]:           0 :   DO iflavor = 1, flavors
    3366                 :             :     ! complete DE matrix
    3367         [ #  # ]:           0 :     op%measDE(iflavor, iflavor+1:flavors) = op%measDE(iflavor+1:flavors,iflavor)
    3368                 :             :   END DO
    3369         [ #  # ]:           0 :   FREE(buffer)
    3370         [ #  # ]:           0 :   FREE(buffer2)
    3371         [ #  # ]:           0 :   FREE(buffer2s)
    3372         [ #  # ]:           0 :   FREE(fullempty)
    3373                 :             : 
    3374         [ #  # ]:           0 :   IF ( op%opt_spectra .GE. 1 ) THEN
    3375                 :             : !PROBLEM eos_gnu_13.2_mpich . %endDensity was introduced throughout
    3376                 :           0 :     endDensity = SIZE(op%density,2)
    3377                 :             : !   endDensity=op%endDensity
    3378                 :             : !ENDPROBLEM
    3379                 :             : 
    3380         [ #  # ]:           0 :     IF ( op%density(1,endDensity) .EQ. -1.d0 ) &
    3381                 :           0 :       endDensity = endDensity - 1
    3382                 :           0 :     CALL FFTHyb_init(FFTmrka,endDensity,DBLE(op%thermalization)/DBLE(op%measurements*op%opt_spectra))
    3383                 :             :     ! Not very Beauty
    3384   [ #  #  #  #  :           0 :     MALLOC(freqs,(1:FFTmrka%size/2))
          #  #  #  #  #  
             #  #  #  #  
                      # ]
    3385         [ #  # ]:           0 :     DO iflavor = 1, flavors
    3386                 :             :       ! mean value is removed to supress the continue composent
    3387   [ #  #  #  # ]:           0 :       CALL FFTHyb_setData(FFTmrka,op%density(iflavor,1:endDensity)/op%beta+real(op%Greens%oper(op%samples+1,iflavor,iflavor)))
    3388                 :           0 :       CALL FFTHyb_run(FFTmrka,1)
    3389                 :           0 :       CALL FFTHyb_getData(FFTmrka,endDensity,op%density(iflavor,:),freqs)
    3390                 :             :     END DO
    3391         [ #  # ]:           0 :     op%density(flavors+1,:) = -1.d0
    3392         [ #  # ]:           0 :     op%density(flavors+1,1:FFTmrka%size/2) = freqs
    3393                 :           0 :     CALL FFTHyb_destroy(FFTmrka)
    3394         [ #  # ]:           0 :     FREE(freqs)
    3395                 :             :   END IF
    3396                 :             : 
    3397                 :           0 :   op%a_Noise = a
    3398                 :           0 :   op%b_Noise = b
    3399         [ #  # ]:           0 :   IF ( op%opt_noise .EQ. 1 ) THEN
    3400   [ #  #  #  # ]:           0 :     op%abNoiseG(1,:,:) = alpha
    3401   [ #  #  #  # ]:           0 :     op%abNoiseG(2,:,:) = beta
    3402                 :             :   END IF
    3403         [ #  # ]:           0 :   FREE(alpha)
    3404         [ #  # ]:           0 :   FREE(beta)
    3405         [ #  # ]:           0 :   IF ( op%opt_histo .GT. 0 ) THEN
    3406                 :           0 :     write(op%ostream,*) "=== Histogram of occupations for complete simulation  ===="
    3407                 :             :  !   write(6,*) "sumh over procs", sumh
    3408                 :           0 :     sumh=0
    3409         [ #  # ]:           0 :     do n1=1,op%flavors+1
    3410                 :           0 :        write(op%ostream,'(i4,f10.4)')  n1-1, op%occup_histo_time(n1)/float(nbprocs)
    3411                 :           0 :        sumh=sumh+op%occup_histo_time(n1)/float(nbprocs)
    3412                 :             :     enddo
    3413                 :           0 :        write(op%ostream,'(a,f10.4)') " all" , sumh
    3414                 :           0 :     write(op%ostream,*) "================================="
    3415                 :             : 
    3416   [ #  #  #  #  :           0 :     MALLOC(occ,(2**op%flavors,1:flavors))
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
    3417                 :             : #ifdef FC_LLVM
    3418                 :             :     MALLOC(occtot,(2**op%flavors) )
    3419                 :             :     MALLOC(spintot,(2**op%flavors) )
    3420                 :             : #else
    3421   [ #  #  #  #  :           0 :     MALLOC(occtot,(2**op%flavors))
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
    3422   [ #  #  #  #  :           0 :     MALLOC(spintot,(2**op%flavors))
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
    3423                 :             : #endif
    3424   [ #  #  #  #  :           0 :     do n1=1,2**op%flavors
                   #  # ]
    3425                 :             :       ! Compute occupations of individual Orbitals
    3426                 :           0 :       n3=n1-1
    3427                 :           0 :       occtot(n1)=0
    3428                 :           0 :       spintot(n1)=0
    3429                 :           0 :       signe=1
    3430         [ #  # ]:           0 :       do n2=1,op%flavors
    3431                 :           0 :         remainder=modulo(n3,2)
    3432                 :           0 :         quotient=(n3-remainder)/2
    3433                 :           0 :         occ(n1,n2)=remainder
    3434                 :           0 :         n3=quotient
    3435                 :           0 :         occtot(n1)=occtot(n1)+occ(n1,n2)
    3436         [ #  # ]:           0 :         if(n2>=7) signe =-1
    3437                 :             :         !if(n2>=7) signe =0
    3438                 :           0 :         spintot(n1)=spintot(n1)+occ(n1,n2)*signe
    3439                 :             :       enddo
    3440                 :           0 :       op%occupconfig(n1)=op%occupconfig(n1)/float(nbprocs)
    3441                 :             :     enddo
    3442                 :             : 
    3443                 :           0 :     write(op%ostream,*) "=== Histogram of occupations of configurations for complete simulation  ===="
    3444                 :           0 :     sumh=0
    3445         [ #  # ]:           0 :     if(op%flavors==14) then
    3446         [ #  # ]:           0 :       do n1=1,2**op%flavors
    3447                 :           0 :          write(op%ostream,'(i4,14i2,f20.2)')  n1, (occ(n1,n2),n2=1,op%flavors),op%occupconfig(n1)
    3448                 :           0 :          sumh=sumh+op%occupconfig(n1)
    3449                 :             :       enddo
    3450         [ #  # ]:           0 :     else if(op%flavors==10) then
    3451         [ #  # ]:           0 :       do n1=1,2**op%flavors
    3452                 :           0 :          write(op%ostream,'(i4,10i2,f20.2)')  n1, (occ(n1,n2),n2=1,op%flavors),op%occupconfig(n1)
    3453                 :           0 :          sumh=sumh+op%occupconfig(n1)
    3454                 :             :       enddo
    3455                 :             :     end if
    3456                 :           0 :     write(op%ostream,'(a,f10.4)') " all" , sumh
    3457                 :             : 
    3458                 :           0 :     sumtot=0
    3459         [ #  # ]:           0 :     do nelec=0,10
    3460                 :           0 :       spinmin=modulo(nelec,2)
    3461                 :             :       if(nelec<=5) spinmax=nelec
    3462                 :             :       if(nelec>=6) spinmax=10-nelec
    3463                 :           0 :       spinmax=6
    3464                 :           0 :       dspin=1
    3465                 :           0 :       write(op%ostream,*) "=== Histogram of occupations of configurations for total number of electrons",nelec
    3466         [ #  # ]:           0 :       do spin=spinmin,spinmax,dspin
    3467                 :           0 :         sumh=0
    3468   [ #  #  #  #  :           0 :         do n1=1,2**op%flavors
                   #  # ]
    3469   [ #  #  #  # ]:           0 :           if(occtot(n1)==nelec.and.abs(spintot(n1))==spin) then
    3470                 :           0 :             sumh=sumh+op%occupconfig(n1)
    3471         [ #  # ]:           0 :             if(op%flavors==14) then
    3472                 :           0 :               write(op%ostream,'(i8,14i2,a,i2,i3,f10.4)')  n1,(occ(n1,n2),n2=1,op%flavors),"  ",occtot(n1),spintot(n1),&
    3473                 :           0 : & op%occupconfig(n1)
    3474         [ #  # ]:           0 :             else if(op%flavors==10) then
    3475                 :           0 :               write(op%ostream,'(i8,10i2,a,i2,i3,f10.4)')  n1,(occ(n1,n2),n2=1,op%flavors),"  ",occtot(n1),spintot(n1),&
    3476                 :           0 :  op%occupconfig(n1)
    3477                 :             :             end if
    3478                 :             :           endif
    3479                 :             :         enddo
    3480                 :           0 :         write(op%ostream,'(a,i4,a,i4,a,f10.4)') " === Sum of weights for",nelec," electrons and spin",spin," is ",sumh
    3481         [ #  # ]:           0 :         sumtot=sumtot+sumh
    3482                 :             :       enddo
    3483                 :             :     enddo
    3484                 :           0 :     write(op%ostream,'(a,f10.4)') "Full sum is",sumtot
    3485                 :             : 
    3486         [ #  # ]:           0 :    FREE(occ)
    3487         [ #  # ]:           0 :     FREE(occtot)
    3488         [ #  # ]:           0 :     FREE(spintot)
    3489                 :             :   !END IF
    3490                 :             : 
    3491                 :             :     !==============================
    3492                 :             :     ! Write Susceptibilities
    3493                 :             :     !==============================
    3494         [ #  # ]:           0 :     if(Iatom .lt. 10) then
    3495                 :           0 :        write(atomnb, '("0",i1)') Iatom
    3496                 :             :     else
    3497                 :           0 :        write(atomnb, '(i2)') Iatom
    3498                 :             :     end if
    3499                 :             :     ! Local Magnetic Susceptibility
    3500         [ #  # ]:           0 :     if(op%opt_histo .gt. 1) then
    3501                 :             :       ! Scalar
    3502         [ #  # ]:           0 :       if(op%nspinor .eq. 1) then
    3503                 :           0 :         open (unit=735,file=trim(fname)//'_LocalSpinSuscept_atom_'//atomnb//'.dat',status='unknown',form='formatted')
    3504                 :           0 :         write(735,*) '#Tau Total t2g eg'
    3505         [ #  # ]:           0 :         do n1=1,op%samples
    3506         [ #  # ]:           0 :           op%suscep(:,n1)=op%suscep(:,n1)/float(nbprocs)/float(op%samples)
    3507   [ #  #  #  # ]:           0 :           write(735,'(1x,f14.8,2x,f12.8,2x,f12.8,2x,f12.8)') (n1-1)*op%beta/op%samples,(op%suscep(n2,n1),n2=1,3)
    3508                 :             :         enddo
    3509                 :             :         !add tau=beta
    3510   [ #  #  #  # ]:           0 :         write(735,'(1x,f14.8,2x,f12.8,2x,f12.8,2x,f12.8)') (op%samples)*op%beta/op%samples,(op%suscep(n2,1),n2=1,3)
    3511                 :             : 
    3512                 :             :       else
    3513                 :             :         ! SOC
    3514                 :           0 :         open (unit=735,file=trim(fname)//'_LocalMagnSuscept_atom_'//atomnb//'.dat',status='unknown',form='formatted')
    3515                 :           0 :         write(735,*) '#Tau Total Orbital Spin'
    3516         [ #  # ]:           0 :         do n1=1,op%samples
    3517         [ #  # ]:           0 :           op%chi(:,n1) = op%chi(:,n1)/float(nbprocs)/float(op%samples)
    3518   [ #  #  #  # ]:           0 :           write(735,'(1x,f14.8,2x,f12.8,2x,f12.8,2x,f12.8)') (n1-1)*op%beta/op%samples,(op%chi(n2,n1),n2=1,3)
    3519                 :             :         end do
    3520                 :             :         !add tau=beta
    3521   [ #  #  #  # ]:           0 :         write(735,'(1x,f14.8,2x,f12.8,2x,f12.8,2x,f12.8)') (op%samples)*op%beta/op%samples,(op%chi(n2,1),n2=1,3)
    3522                 :             :       endif
    3523                 :           0 :     close(unit=735)
    3524                 :             :     endif
    3525                 :             : 
    3526                 :             :     ! Local Charge Susceptiblity
    3527         [ #  # ]:           0 :     if(op%opt_histo .gt. 2) then
    3528         [ #  # ]:           0 :       op%ntot(:) = op%ntot(:)/float(nbprocs)/float(op%samples)
    3529                 :           0 :       open (unit=735,file=trim(fname)//'_LocalChargeSuscept_atom_'//atomnb//'.dat',status='unknown',form='formatted')
    3530                 :           0 :       write(735,*) '#Tau Total <ntot>'
    3531         [ #  # ]:           0 :       do n1=1,op%samples
    3532                 :           0 :         op%chicharge(1,n1)=(op%chicharge(1,n1)/float(nbprocs)/float(op%samples))-(op%ntot(1)*op%ntot(1))
    3533                 :             :         !op%chicharge(2,n1)=(op%chicharge(2,n1)/float(nbprocs)/float(op%samples))-(op%ntot(2)*op%ntot(2))
    3534                 :             :         !op%chicharge(3,n1)=(op%chicharge(3,n1)/float(nbprocs)/float(op%samples))-(op%ntot(3)*op%ntot(3))
    3535                 :           0 :         write(735,'(1x,f14.8,2x,f12.8,2x,f12.8,2x,f12.8)') (n1-1)*op%beta/op%samples,(op%chicharge(1,n1)),op%ntot(1)
    3536                 :             :       enddo
    3537                 :             :       !add tau=beta
    3538                 :           0 :       write(735,'(1x,f14.8,2x,f12.8,2x,f12.8,2x,f12.8)') (op%samples)*op%beta/op%samples,(op%chicharge(1,1)),op%ntot(1)
    3539                 :           0 :       close(unit=735)
    3540                 :             :     endif
    3541                 :             : 
    3542                 :             :   END IF
    3543                 :             : 
    3544                 :             : 
    3545   [ #  #  #  #  :           0 : END SUBROUTINE CtqmcoffdiagComplex_getResult
                   #  # ]
    3546                 :             : !!***
    3547                 :             : 
    3548                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_symmetrizeGreen
    3549                 :             : !! NAME
    3550                 :             : !!  CtqmcoffdiagComplex_symmetrizeGreen
    3551                 :             : !!
    3552                 :             : !! FUNCTION
    3553                 :             : !!  optionnaly symmetrize the green functions
    3554                 :             : !!
    3555                 :             : !! COPYRIGHT
    3556                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    3557                 :             : !!  This file is distributed under the terms of the
    3558                 :             : !!  GNU General Public License, see ~abinit/COPYING
    3559                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    3560                 :             : !!
    3561                 :             : !! INPUTS
    3562                 :             : !!  op=ctqmc
    3563                 :             : !!  syms=weight factors
    3564                 :             : !!
    3565                 :             : !! OUTPUT
    3566                 :             : !!  argout(sizeout)=description
    3567                 :             : !!
    3568                 :             : !! SIDE EFFECTS
    3569                 :             : !!
    3570                 :             : !! NOTES
    3571                 :             : !!
    3572                 :             : !! SOURCE
    3573                 :             : 
    3574                 :           0 : SUBROUTINE CtqmcoffdiagComplex_symmetrizeGreen(op, syms)
    3575                 :             : 
    3576                 :             : !Arguments ------------------------------------
    3577                 :             :   TYPE(CtqmcoffdiagComplex)                     , INTENT(INOUT) :: op
    3578                 :             :   DOUBLE PRECISION, DIMENSION(:,:), INTENT(IN   ) :: syms
    3579                 :             : !Local variables ------------------------------
    3580                 :             :   !INTEGER :: iflavor1
    3581                 :             :   !INTEGER :: iflavor2
    3582                 :             :   !INTEGER :: flavors
    3583                 :             :   !DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: green_tmp
    3584                 :             :   !DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:  ) :: n_tmp
    3585                 :             : 
    3586                 :             :   ABI_UNUSED((/syms(1,1), op%swap/))
    3587                 :             : 
    3588                 :             : !  flavors = op%flavors
    3589                 :             : !  IF ( SIZE(syms,1) .NE. flavors .OR. SIZE(syms,2) .NE. flavors ) THEN
    3590                 :             : !    CALL WARNALL("CtqmcoffdiagComplex_symmetrizeGreen : wrong opt_sym -> not symmetrizing")
    3591                 :             : !    RETURN
    3592                 :             : !  END IF
    3593                 :             : !
    3594                 :             : !  MALLOC(green_tmp,(1:op%samples+1,flavors))
    3595                 :             : !  green_tmp(:,:) = 0.d0
    3596                 :             : !  MALLOC(n_tmp,(1:flavors))
    3597                 :             : !  n_tmp(:) = 0.d0
    3598                 :             : !  DO iflavor1=1, flavors
    3599                 :             : !    DO iflavor2=1,flavors
    3600                 :             : !      green_tmp(:,iflavor1) = green_tmp(:,iflavor1) &
    3601                 :             : !                             + syms(iflavor2,iflavor1) * op%Greens(iflavor2)%oper(:)
    3602                 :             : !      n_tmp(iflavor1) = n_tmp(iflavor1) &
    3603                 :             : !                             + syms(iflavor2,iflavor1) * op%measN(1,iflavor2)
    3604                 :             : !    END DO
    3605                 :             : !  END DO
    3606                 :             : !  DO iflavor1=1, flavors
    3607                 :             : !    op%Greens(iflavor1)%oper(:) = green_tmp(:,iflavor1)
    3608                 :             : !    op%measN(1,iflavor1)          = n_tmp(iflavor1)
    3609                 :             : !  END DO
    3610                 :             : !  FREE(green_tmp)
    3611                 :             : !  FREE(n_tmp)
    3612                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_symmetrizeGreen
    3613                 :             : !!***
    3614                 :             : 
    3615                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_getGreen
    3616                 :             : !! NAME
    3617                 :             : !!  CtqmcoffdiagComplex_getGreen
    3618                 :             : !!
    3619                 :             : !! FUNCTION
    3620                 :             : !!  Get the full green functions in time and/or frequency
    3621                 :             : !!
    3622                 :             : !! COPYRIGHT
    3623                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    3624                 :             : !!  This file is distributed under the terms of the
    3625                 :             : !!  GNU General Public License, see ~abinit/COPYING
    3626                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    3627                 :             : !!
    3628                 :             : !! INPUTS
    3629                 :             : !!  op=ctqmc
    3630                 :             : !!
    3631                 :             : !! OUTPUT
    3632                 :             : !!  Gtau=green function in time
    3633                 :             : !!  Gw=green function in frequency
    3634                 :             : !!
    3635                 :             : !! SIDE EFFECTS
    3636                 :             : !!
    3637                 :             : !! NOTES
    3638                 :             : !!
    3639                 :             : !! SOURCE
    3640                 :             : 
    3641   [ #  #  #  #  :           0 : SUBROUTINE CtqmcoffdiagComplex_getGreen(op, Gtau, Gw)
          #  #  #  #  #  
                #  #  # ]
    3642                 :             : 
    3643                 :             : !Arguments ------------------------------------
    3644                 :             :  USE m_GreenHyboffdiagComplex
    3645                 :             :   TYPE(CtqmcoffdiagComplex)          , INTENT(INOUT)    :: op
    3646                 :             :   COMPLEX(KIND=8), DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: Gtau
    3647                 :             :   COMPLEX(KIND=8), DIMENSION(:,:,:), OPTIONAL, INTENT(INOUT) :: Gw
    3648                 :             : !Local variables ------------------------------
    3649                 :             :   !INTEGER                            :: itime
    3650                 :             :   INTEGER                            :: iflavor1
    3651                 :             :   INTEGER                            :: iflavor1b !,iflavor,iflavorbis
    3652                 :             :   INTEGER                            :: iflavor2
    3653                 :             :   INTEGER                            :: iflavor3
    3654                 :             :   INTEGER                            :: flavors,tail
    3655                 :             :   INTEGER                            :: ifreq,itime
    3656                 :             :   COMPLEX(KIND=8) :: u1
    3657                 :             :   COMPLEX(KIND=8) :: u2
    3658                 :             :   COMPLEX(KIND=8) :: u3
    3659                 :             :   COMPLEX(KIND=8) :: Un
    3660                 :             :   COMPLEX(KIND=8) :: UUnn
    3661                 :             :   DOUBLE PRECISION :: iw !omega,
    3662                 :             :   CHARACTER(LEN=4)                   :: cflavors
    3663                 :             :   CHARACTER(LEN=50)                  :: string
    3664                 :           0 :   TYPE(GreenHyboffdiagComplex)       :: F_tmp
    3665                 :             : 
    3666                 :           0 :   flavors = op%flavors
    3667         [ #  # ]:           0 :   DO iflavor1 = 1, flavors
    3668                 :           0 :     u1 = cmplx(0.d0,0.d0,kind=8)
    3669                 :           0 :     u2 = cmplx(0.d0,0.d0,kind=8)
    3670                 :           0 :     u3 = cmplx(0.d0,0.d0,kind=8)
    3671         [ #  # ]:           0 :     DO iflavor2 = 1, flavors
    3672         [ #  # ]:           0 :       IF ( iflavor2 .EQ. iflavor1 ) CYCLE
    3673                 :           0 :       Un = op%Impurity%mat_U(iflavor2,iflavor1) * op%measN(1,iflavor2)
    3674                 :             : !      Un = op%Impurity%mat_U(iflavor2,iflavor1) * (op%Greens%oper(1,iflavor2,iflavor2) + 1.d0)
    3675                 :             :       !write(6,*) "forsetmoments",iflavor1,iflavor2,(op%Greens%oper(1,iflavor2,iflavor2) + 1.d0), Un
    3676                 :           0 :       u1 = u1 + Un
    3677                 :           0 :       u2 = u2 + Un*op%Impurity%mat_U(iflavor2,iflavor1)
    3678         [ #  # ]:           0 :       DO iflavor3 = 1, flavors
    3679         [ #  # ]:           0 :         IF ( iflavor3 .EQ. iflavor2 .OR. iflavor3 .EQ. iflavor1 ) CYCLE
    3680                 :             :         UUnn = (op%Impurity%mat_U(iflavor2,iflavor1)*op%Impurity%mat_U(iflavor3,iflavor1)) * &
    3681                 :           0 : &                                                    op%measDE(iflavor2,iflavor3)
    3682                 :           0 :         u2 = u2 + UUnn
    3683                 :             :       END DO
    3684                 :             :     END DO
    3685                 :             :      ! write(6,*) "u1,u2",u1,u2
    3686                 :             : 
    3687         [ #  # ]:           0 :     DO iflavor1b = 1, flavors
    3688                 :           0 :       u3 =-(op%Impurity%mat_U(iflavor1,iflavor1b))*op%Greens%oper(1,iflavor1,iflavor1b)
    3689                 :             :       ! u3=U_{1,1b}*G_{1,1b}
    3690                 :           0 :       CALL GreenHyboffdiagComplex_setMoments(op%Greens,iflavor1,iflavor1b,u1,u2,u3)
    3691                 :             :     END DO ! iflavor1b
    3692                 :             : 
    3693                 :             :   END DO ! iflavor1
    3694                 :             : 
    3695         [ #  # ]:           0 :   IF ( PRESENT( Gtau ) ) THEN
    3696         [ #  # ]:           0 :     DO iflavor1 = 1, flavors
    3697         [ #  # ]:           0 :       DO iflavor2 = 1, flavors
    3698         [ #  # ]:           0 :         Gtau(1:op%samples,iflavor1,iflavor2) = op%Greens%oper(1:op%samples,iflavor1,iflavor2)
    3699                 :             :       END DO
    3700                 :             :     END DO ! iflavor1
    3701                 :             :   END IF
    3702                 :             : ! !--------- Write Occupation matrix before Gtau
    3703                 :             : !  write(ostream,'(17x,a)') "Occupation matrix"
    3704                 :             : !  write(ostream,'(17x,30i10)') (iflavorbis,iflavorbis=1,op%flavors)
    3705                 :             : !  write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors)
    3706                 :             : !  do iflavor=1, op%flavors
    3707                 :             : !    write(ostream,'(7x,i10,a,30f10.4)') iflavor,"|",(-op%Greens%oper(op%samples,iflavor,iflavorbis),iflavorbis=1,op%flavors)
    3708                 :             : !  enddo
    3709                 :             : !  write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors),ch10
    3710                 :             : ! !------------------------------------------------------------------------------------------
    3711                 :             : ! !--------- Write Occupation matrix Gtau
    3712                 :             : !  write(ostream,'(17x,a)') "Occupation matrix"
    3713                 :             : !  write(ostream,'(17x,30i10)') (iflavorbis,iflavorbis=1,op%flavors)
    3714                 :             : !  write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors)
    3715                 :             : !  do iflavor=1, op%flavors
    3716                 :             : !    write(ostream,'(7x,i10,a,30f10.4)') iflavor,"|",(Gtau(op%samples,iflavor,iflavorbis),iflavorbis=1,op%flavors)
    3717                 :             : !  enddo
    3718                 :             : !  write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors),ch10
    3719                 :             : ! !------------------------------------------------------------------------------------------
    3720                 :             : 
    3721                 :             : !================================================
    3722                 :             :   if(3==4) then
    3723                 :             : !================================================
    3724                 :             :     DO iflavor1 = 1, flavors
    3725                 :             :       DO iflavor1b = 1, flavors
    3726                 :             :        !call nfourier3(op%Greens%oper(1:op%samples,iflavor1,iflavor1b),Gw(1:op%samples,iflavor1,iflavor1b),iflavor1==iflavor1b,op%Greens%samples,op%Greens%samples-1,op%Greens%beta,1.d0,op%Greens%Mk(iflavor1,iflavor1b,1),op%Greens%Mk(iflavor1,iflavor1b,2),op%Greens%Mk(iflavor1,iflavor1b,3))
    3727                 :             :       END DO
    3728                 :             :     END DO ! iflavor1
    3729                 :             : !    ============== write Gomega_nd.dat
    3730                 :             :     if(op%rank==0) then
    3731                 :             :     OPEN(UNIT=44, FILE="Gomega_nd_nfourier2.dat")
    3732                 :             :     WRITE(cflavors,'(I4)') 2*(flavors*flavors+1)
    3733                 :             :     string = '(1x,'//TRIM(ADJUSTL(cflavors))//'E15.5)'
    3734                 :             :     !write(6,*) " op%Greens%Wmax", op%Greens%Wmax
    3735                 :             :     do  iflavor1=1, flavors
    3736                 :             :       do  iflavor1b=1, flavors
    3737                 :             :     write(44,*) "#op%Greens%Mk(iflavor1,iflavor2,1",op%Greens%Mk(iflavor1,iflavor1b,:)
    3738                 :             :         DO ifreq = 1, op%samples
    3739                 :             : !      !write(6,string) (DBLE(ifreq)*2-1)*3.1415/op%Greens%beta, &
    3740                 :             : !      (/ ((real(Gw(ifreq,iflavor1,iflavor1b)),imag(Gw(ifreq,iflavor1,iflavor1b)), iflavor1=1, flavors),iflavor1b=1,flavors) /)
    3741                 :             : !      WRITE(44,string) (DBLE(ifreq)*2.d0-1.d0)*3.1415926/op%Greens%beta, &
    3742                 :             :         iw=aimag(Gw(ifreq,op%flavors,op%flavors+1))
    3743                 :             :          WRITE(44,string) aimag(Gw(ifreq,op%flavors,op%flavors+1)),&
    3744                 :             :          real(Gw(ifreq,iflavor1,iflavor1b)),aimag(Gw(ifreq,iflavor1,iflavor1b)),&
    3745                 :             :             ( -op%Greens%Mk(iflavor1,iflavor1b,2) )/(iw*iw) , (op%Greens%Mk(iflavor1,iflavor1b,1))/iw!-op%Greens%Mk(iflavor1,iflavor1b,3)/(iw*iw))/iw
    3746                 :             :       !   WRITE(102,*) aimag(Gw(ifreq,op%flavors,op%flavors+1)), (op%Greens%Mk(iflavor1,iflavor1b,1))/iw,op%Greens%Mk(iflavor1,iflavor1b,1),iw
    3747                 :             :         END DO
    3748                 :             :          WRITE(44,*)
    3749                 :             :       END DO
    3750                 :             :     END DO
    3751                 :             :     close(44)
    3752                 :             :     endif
    3753                 :             : !================================================
    3754                 :             :   endif
    3755                 :             : !================================================
    3756                 :             :        !!write(6,*) "present gw", present(gw)
    3757         [ #  # ]:           0 :   IF ( PRESENT( Gw ) ) THEN
    3758                 :             :      !!write(6,*) "size gw",SIZE(Gw,DIM=2) ,flavors+1
    3759         [ #  # ]:           0 :     IF ( SIZE(Gw,DIM=3) .EQ. flavors+1 ) THEN
    3760                 :             :      ! CALL GreenHyboffdiag_forFourier(op%Greens, Gomega=Gw, omega=Gw(:,op%flavors,op%flavors+1))
    3761                 :           0 :       CALL GreenHyboffdiagComplex_forFourierComplex(op%Greens, Gomega=Gw, omega=Gw(:,op%flavors,op%flavors+1))
    3762                 :             :       !write(6,*) "1"
    3763                 :             :       !IF ( op%rank .EQ. 0 ) write(20,*) Gw(:,iflavor1)
    3764         [ #  # ]:           0 :     ELSE IF ( SIZE(Gw,DIM=3) .EQ. flavors ) THEN
    3765                 :           0 :       CALL GreenHyboffdiagComplex_forFourierComplex(op%Greens,Gomega=Gw)
    3766                 :             :       !write(6,*) "2"
    3767                 :             :     ELSE
    3768                 :           0 :       CALL WARNALL("CtqmcoffdiagComplex_getGreen : Gw is not valid                    ")
    3769                 :           0 :       CALL GreenHyboffdiagComplex_forFourierComplex(op%Greens,Wmax=op%Wmax)
    3770                 :             :       !write(6,*) "3"
    3771                 :             :     END IF
    3772                 :             :   ELSE
    3773                 :           0 :     CALL GreenHyboffdiagComplex_forFourierComplex(op%Greens,Wmax=op%Wmax)
    3774                 :             :   END IF
    3775                 :             : !  ============== write Gomega_nd.dat
    3776                 :             : !================================================
    3777                 :             : !  if(3==4) then
    3778                 :             : !================================================
    3779                 :             :   if(op%rank==0.and.3==4) then
    3780                 :             :   OPEN(UNIT=44, FILE="Gomega_nd.dat")
    3781                 :             :   WRITE(cflavors,'(I4)') 2*(flavors*flavors+1)
    3782                 :             :   string = '(1x,'//TRIM(ADJUSTL(cflavors))//'E15.5)'
    3783                 :             :   !write(6,*) " op%Greens%Wmax", op%Greens%Wmax
    3784                 :             :   do  iflavor1=1, flavors
    3785                 :             :     do  iflavor1b=1, flavors
    3786                 :             :   write(44,*) "#op%Greens%Mk(iflavor1,iflavor2,1",op%Greens%Mk(iflavor1,iflavor1b,:)
    3787                 :             :       DO ifreq = 1, SIZE(Gw,1)
    3788                 :             : !    !write(6,string) (DBLE(ifreq)*2-1)*3.1415/op%Greens%beta, &
    3789                 :             : !    (/ ((real(Gw(ifreq,iflavor1,iflavor1b)),imag(Gw(ifreq,iflavor1,iflavor1b)), iflavor1=1, flavors),iflavor1b=1,flavors) /)
    3790                 :             : !    WRITE(44,string) (DBLE(ifreq)*2.d0-1.d0)*3.1415926/op%Greens%beta, &
    3791                 :             :       iw=aimag(Gw(ifreq,op%flavors,op%flavors+1))
    3792                 :             :        WRITE(44,string) aimag(Gw(ifreq,op%flavors,op%flavors+1)),&
    3793                 :             :        real(Gw(ifreq,iflavor1,iflavor1b)),aimag(Gw(ifreq,iflavor1,iflavor1b)),&
    3794                 :             :           ( -op%Greens%Mk(iflavor1,iflavor1b,2) )/(iw*iw) , &
    3795                 :             : &          (op%Greens%Mk(iflavor1,iflavor1b,1)-op%Greens%Mk(iflavor1,iflavor1b,3)/(iw*iw))/iw
    3796                 :             :       END DO
    3797                 :             :        WRITE(44,*)
    3798                 :             :     END DO
    3799                 :             :   END DO
    3800                 :             :   endif
    3801                 :             : !================================================
    3802                 :             : !  endif
    3803                 :             : !================================================
    3804                 :             : 
    3805                 :             : 
    3806                 :             : !  ==============================
    3807                 :             :   ! --- Initialize F_tmp
    3808                 :             :   !write(6,*) "10"
    3809                 :             : 
    3810         [ #  # ]:           0 :   IF ( op%have_MPI .EQV. .TRUE. ) THEN
    3811                 :             :     !CALL GreenHyboffdiag_init(F_tmp,op%samples,op%beta,op%flavors,MY_COMM=op%MY_COMM)
    3812                 :           0 :     CALL GreenHyboffdiagComplex_init(F_tmp,op%samples,op%beta,flavors)
    3813                 :             :     !write(6,*) "10a"
    3814                 :             :   ELSE
    3815                 :           0 :     CALL GreenHyboffdiagComplex_init(F_tmp,op%samples,op%beta,flavors)
    3816                 :             :     !write(6,*) "10b"
    3817                 :             :   END IF
    3818                 :             : 
    3819                 :             :   !write(6,*) "11"
    3820                 :             : !  CALL GreenHyboffdiag_setOperW(F_tmp,Gw)
    3821                 :             : 
    3822                 :           0 :   tail = op%samples
    3823                 :           0 :   F_tmp%Wmax=op%samples ! backFourier only works for linear freq: calculation of A and etc..
    3824   [ #  #  #  #  :           0 :   MALLOC(F_tmp%oper_w,(1:tail,op%flavors,op%flavors))
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
    3825   [ #  #  #  #  :           0 :   F_tmp%oper_w(1:tail,1:F_tmp%nflavors,1:F_tmp%nflavors) = Gw(1:tail,1:F_tmp%nflavors,1:F_tmp%nflavors)
                   #  # ]
    3826                 :             :   !write(6,*) "example",F_tmp%oper_w(1,1,1)
    3827                 :             :   !write(6,*) "example",Gw(1,1,1)
    3828                 :           0 :   F_tmp%setW = .TRUE.
    3829                 :             :   !write(6,*) size(F_tmp%oper_w,1)
    3830                 :             :   !write(6,*) size(F_tmp%oper_w,2)
    3831                 :             :   !write(6,*) size(F_tmp%oper_w,3)
    3832                 :             :   !write(6,*) size(Gw,1)
    3833                 :             :   !write(6,*) size(Gw,2)
    3834                 :             :   !write(6,*) size(Gw,3)
    3835                 :             : 
    3836                 :             :   !write(6,*) "eee", (2.d0*DBLE(ifreq)-1.d0) * 3.1415/op%beta,real(F_tmp%oper_w(1,1,1)),imag(F_tmp%oper_w(1,1,1))
    3837                 :             : !================================================
    3838                 :             :   if(3==4) then
    3839                 :             : !================================================
    3840                 :             :     OPEN(UNIT=3337, FILE="Gomega_nd2.dat")
    3841                 :             :     do  iflavor1=1, flavors
    3842                 :             :       do  iflavor1b=1, flavors
    3843                 :             :         do  ifreq=1, tail
    3844                 :             : !         write(3337,*) (2.d0*DBLE(ifreq)-1.d0) * 3.1415/op%beta,real(F_tmp%oper_w(ifreq,iflavor1,iflavor1b)),&
    3845                 :             : !   &     imag(F_tmp%oper_w(ifreq,iflavor1,iflavor1b))
    3846                 :             :           write(3337,*) aimag(Gw(ifreq,op%flavors,op%flavors+1)), real(F_tmp%oper_w(ifreq,iflavor1,iflavor1b)),&
    3847                 :             :  &        aimag(F_tmp%oper_w(ifreq,iflavor1,iflavor1b))
    3848                 :             : 
    3849                 :             :       !    omega=(2.d0*DBLE(ifreq)-1.d0) * 3.1415/op%beta
    3850                 :             :  !        F_tmp%oper_w(ifreq,iflavor1,iflavor1b)=0.1**2/Gw(ifreq,op%flavors,op%flavors+1)
    3851                 :             :         enddo
    3852                 :             :         write(3337,*)
    3853                 :             :       enddo
    3854                 :             :     enddo
    3855                 :             :     close(3337)
    3856                 :             : !================================================
    3857                 :             :   endif
    3858                 :             : !================================================
    3859                 :             : 
    3860                 :             :   !write(6,*) "12",F_tmp%Wmax
    3861                 :             : 
    3862                 :             : !  CALL GreenHyboffdiag_backFourier(F_tmp,func="green")
    3863                 :             : 
    3864                 :             :   !write(6,*) "13"
    3865                 :             : 
    3866                 :             : !================================================
    3867                 :             :   if(3==4) then
    3868                 :             : !================================================
    3869                 :             :     OPEN(UNIT=48, FILE="Gtau_nd_2.dat")
    3870                 :             : !    --- Print full non diagonal Gtau in Gtau_nd.dat
    3871                 :             :     WRITE(cflavors,'(I4)') flavors*flavors+1
    3872                 :             :     string = '(1x,'//TRIM(ADJUSTL(cflavors))//'ES22.14)'
    3873                 :             :     DO itime = 1, op%samples+1
    3874                 :             :       WRITE(48,string) DBLE(itime-1)*op%beta/DBLE(op%samples), &
    3875                 :             :  &    ((F_tmp%oper(itime,iflavor1,iflavor1b), iflavor1=1, flavors),iflavor1b=1,flavors)
    3876                 :             :     END DO
    3877                 :             : !================================================
    3878                 :             :   endif
    3879                 :             : !================================================
    3880                 :             : 
    3881                 :           0 :   CALL GreenHyboffdiagComplex_destroy(F_tmp)
    3882                 :             : 
    3883                 :             :   !FREE(F_tmp%oper_w)
    3884                 :             : !  ==============================
    3885   [ #  #  #  #  :           0 : END SUBROUTINE CtqmcoffdiagComplex_getGreen
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
    3886                 :             : !!***
    3887                 :             : 
    3888                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_getD
    3889                 :             : !! NAME
    3890                 :             : !!  CtqmcoffdiagComplex_getD
    3891                 :             : !!
    3892                 :             : !! FUNCTION
    3893                 :             : !!  get double occupation
    3894                 :             : !!
    3895                 :             : !! COPYRIGHT
    3896                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    3897                 :             : !!  This file is distributed under the terms of the
    3898                 :             : !!  GNU General Public License, see ~abinit/COPYING
    3899                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    3900                 :             : !!
    3901                 :             : !! INPUTS
    3902                 :             : !!  op=ctqmc
    3903                 :             : !!
    3904                 :             : !! OUTPUT
    3905                 :             : !!  D=full double occupation
    3906                 :             : !!
    3907                 :             : !! SIDE EFFECTS
    3908                 :             : !!
    3909                 :             : !! NOTES
    3910                 :             : !!
    3911                 :             : !! SOURCE
    3912                 :             : 
    3913                 :           0 : SUBROUTINE CtqmcoffdiagComplex_getD(op, D)
    3914                 :             : 
    3915                 :             : !Arguments ------------------------------------
    3916                 :             :   TYPE(CtqmcoffdiagComplex)       , INTENT(IN ) :: op
    3917                 :             :   DOUBLE PRECISION, INTENT(OUT) :: D
    3918                 :             : !Local variables ------------------------------
    3919                 :             :   INTEGER                       :: iflavor1
    3920                 :             :   INTEGER                       :: iflavor2
    3921                 :             : 
    3922                 :           0 :   D = 0.d0
    3923                 :             : 
    3924         [ #  # ]:           0 :   DO iflavor1 = 1, op%flavors
    3925         [ #  # ]:           0 :     DO iflavor2 = iflavor1+1, op%flavors
    3926                 :           0 :       D = D + op%measDE(iflavor2,iflavor1)
    3927                 :             :     END DO
    3928                 :             :   END DO
    3929                 :             :   !IF ( op%rank .EQ. 0 ) THEN
    3930                 :             :   !  DO iflavor1 = 1, op%flavors
    3931                 :             :   !    DO iflavor2 = iflavor1+1, op%flavors
    3932                 :             :   !     write(4533,*) op%measDE(iflavor2,iflavor1)k
    3933                 :             :   !     write(4534,*) op%Impurity%mat_U(iflavor2,iflavor1)k
    3934                 :             :   !    END DO
    3935                 :             :   !  END DO
    3936                 :             : 
    3937                 :             :   !ENDIF
    3938                 :             : 
    3939                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_getD
    3940                 :             : !!***
    3941                 :             : 
    3942                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_getE
    3943                 :             : !! NAME
    3944                 :             : !!  CtqmcoffdiagComplex_getE
    3945                 :             : !!
    3946                 :             : !! FUNCTION
    3947                 :             : !!  get interaction energy and noise on it
    3948                 :             : !!
    3949                 :             : !! COPYRIGHT
    3950                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    3951                 :             : !!  This file is distributed under the terms of the
    3952                 :             : !!  GNU General Public License, see ~abinit/COPYING
    3953                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    3954                 :             : !!
    3955                 :             : !! INPUTS
    3956                 :             : !!  op=ctqmc
    3957                 :             : !!
    3958                 :             : !! OUTPUT
    3959                 :             : !!  E=interaction energy
    3960                 :             : !!  noise=noise on this value
    3961                 :             : !!
    3962                 :             : !! SIDE EFFECTS
    3963                 :             : !!
    3964                 :             : !! NOTES
    3965                 :             : !!
    3966                 :             : !! SOURCE
    3967                 :             : 
    3968                 :           0 : SUBROUTINE CtqmcoffdiagComplex_getE(op,E,noise)
    3969                 :             : 
    3970                 :             : !Arguments ------------------------------------
    3971                 :             :   TYPE(CtqmcoffdiagComplex)       , INTENT(IN ) :: op
    3972                 :             :   DOUBLE PRECISION, INTENT(OUT) :: E
    3973                 :             :   DOUBLE PRECISION, INTENT(OUT) :: Noise
    3974                 :             : 
    3975                 :           0 :   E = op%measDE(1,1)
    3976                 :           0 :   Noise = op%a_Noise*(DBLE(op%sweeps)*DBLE(op%size))**op%b_Noise
    3977                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_getE
    3978                 :             : !!***
    3979                 :             : 
    3980                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_printAll
    3981                 :             : !! NAME
    3982                 :             : !!  CtqmcoffdiagComplex_printAll
    3983                 :             : !!
    3984                 :             : !! FUNCTION
    3985                 :             : !!  print different functions computed during the simulation
    3986                 :             : !!
    3987                 :             : !! COPYRIGHT
    3988                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    3989                 :             : !!  This file is distributed under the terms of the
    3990                 :             : !!  GNU General Public License, see ~abinit/COPYING
    3991                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    3992                 :             : !!
    3993                 :             : !! INPUTS
    3994                 :             : !!  op=ctqmc
    3995                 :             : !!
    3996                 :             : !! OUTPUT
    3997                 :             : !!
    3998                 :             : !! SIDE EFFECTS
    3999                 :             : !!
    4000                 :             : !! NOTES
    4001                 :             : !!
    4002                 :             : !! SOURCE
    4003                 :             : 
    4004                 :           0 : SUBROUTINE CtqmcoffdiagComplex_printAll(op)
    4005                 :             : 
    4006                 :             : !Arguments ------------------------------------
    4007                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT) :: op
    4008                 :             : 
    4009         [ #  # ]:           0 :   IF ( .NOT. op%done ) &
    4010                 :           0 :     CALL WARNALL("CtqmcoffdiagComplex_printAll : Simulation not run                 ")
    4011                 :             : 
    4012                 :             : !sui!write(6,*) "op%stats",op%stats
    4013                 :           0 :   CALL CtqmcoffdiagComplex_printQMC(op)
    4014                 :             : 
    4015                 :           0 :   CALL CtqmcoffdiagComplex_printGreen(op)
    4016                 :             : 
    4017                 :           0 :   CALL CtqmcoffdiagComplex_printD(op)
    4018                 :             : 
    4019                 :             : !  CALL CtqmcoffdiagComplex_printE(op)
    4020                 :             : 
    4021                 :             : !#ifdef CTCtqmcoffdiagComplex_ANALYSIS
    4022                 :             : !  CALL CtqmcoffdiagComplex_printPerturbation(op)
    4023                 :             : 
    4024                 :           0 :   CALL CtqmcoffdiagComplex_printCorrelation(op)
    4025                 :             : !#endif
    4026                 :             : 
    4027                 :           0 :   CALL CtqmcoffdiagComplex_printSpectra(op)
    4028                 :             : 
    4029                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_printAll
    4030                 :             : !!***
    4031                 :             : 
    4032                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_printQMC
    4033                 :             : !! NAME
    4034                 :             : !!  CtqmcoffdiagComplex_printQMC
    4035                 :             : !!
    4036                 :             : !! FUNCTION
    4037                 :             : !!  print ctqmc statistics
    4038                 :             : !!
    4039                 :             : !! COPYRIGHT
    4040                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    4041                 :             : !!  This file is distributed under the terms of the
    4042                 :             : !!  GNU General Public License, see ~abinit/COPYING
    4043                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    4044                 :             : !!
    4045                 :             : !! INPUTS
    4046                 :             : !!  op=ctqmc
    4047                 :             : !!
    4048                 :             : !! OUTPUT
    4049                 :             : !!
    4050                 :             : !! SIDE EFFECTS
    4051                 :             : !!
    4052                 :             : !! NOTES
    4053                 :             : !!
    4054                 :             : !! SOURCE
    4055                 :             : 
    4056                 :           0 : SUBROUTINE CtqmcoffdiagComplex_printQMC(op)
    4057                 :             : 
    4058                 :             : !Arguments ------------------------------------
    4059                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT) :: op
    4060                 :             : !Local variables ------------------------------
    4061                 :             :   INTEGER                  :: ostream
    4062                 :             :   INTEGER                  :: iflavor,iflavorbis,iorder
    4063                 :             :   DOUBLE PRECISION         :: sweeps
    4064                 :             :   DOUBLE PRECISION         :: invSweeps
    4065                 :             :   CHARACTER(LEN=2)         :: a
    4066                 :             :   CHARACTER(LEN=15)        :: string
    4067                 :             : 
    4068                 :             :   !IF ( op%rank .NE. 0) RETURN
    4069         [ #  # ]:           0 :   IF ( op%rank .NE. MOD(op%size,op%size)) RETURN
    4070                 :             : 
    4071                 :           0 :   ostream   = op%ostream
    4072                 :           0 :   sweeps    = DBLE(op%sweeps)
    4073                 :           0 :   invSweeps = 1.d0/sweeps
    4074                 :             : 
    4075                 :           0 :   WRITE(ostream,'(a,F13.0,A11,F10.2,A12,I5,A5)') "The QMC Solver did ",sweeps*DBLE(op%size), " sweeps in ", op%runTime, &
    4076                 :           0 :                  " seconds on ", op%size, " CPUs"
    4077                 :           0 :   WRITE(ostream,'(A28,F6.2)') "Segments added        [%] : ", op%stats(4)*invSweeps*100.d0
    4078                 :           0 :   WRITE(ostream,'(A28,F6.2)') "Segments removed      [%] : ", op%stats(5)*invSweeps*100.d0
    4079                 :           0 :   WRITE(ostream,'(A28,F6.2)') "Segments <0 sign      [%] : ", op%stats(6)*invSweeps*100.d0
    4080                 :             :   !WRITE(ostream,'(A28,F12.2)') "Number of meas        [%] : ", op%stats(6)
    4081                 :           0 :   WRITE(ostream,'(A28,F6.2)') "Anti-segments added   [%] : ", op%stats(1)*invSweeps*100.d0
    4082                 :           0 :   WRITE(ostream,'(A28,F6.2)') "Anti-segments removed [%] : ", op%stats(2)*invSweeps*100.d0
    4083                 :           0 :   WRITE(ostream,'(A28,F6.2)') "Anti-segments <0 sign [%] : ", op%stats(3)*invSweeps*100.d0
    4084                 :             :   !WRITE(ostream,'(A28,F12.2)') "Sum of sign       [%] : ", op%stats(3)
    4085                 :           0 :   WRITE(ostream,'(A28,F13.2)') "Signe value               : ", op%Greens%signvaluemeas
    4086                 :           0 :   WRITE(ostream,'(A28,F13.2,F13.2)') "Phase value               : ", op%Greens%phasevaluemeas
    4087         [ #  # ]:           0 :   IF ( op%modGlobalMove(1) .LT. op%sweeps + 1 ) THEN
    4088                 :           0 :     WRITE(ostream,'(A28,F6.2)') "Global Move           [%] : ", op%swap         *invSweeps*100.d0*op%modGlobalMove(1)
    4089                 :           0 :     WRITE(ostream,'(A28,F6.2)') "Global Move Reduced   [%] : ", op%swap         / DBLE(op%modGlobalMove(2))*100.d0
    4090                 :             :   END IF
    4091                 :             : !#ifdef CTCtqmcoffdiagComplex_CHECK
    4092         [ #  # ]:           0 :   IF ( op%opt_check .EQ. 1 .OR. op%opt_check .EQ. 3 ) &
    4093                 :           0 :     WRITE(ostream,'(A28,E22.14)') "Impurity test         [%] : ", op%errorImpurity*100.d0
    4094         [ #  # ]:           0 :   IF ( op%opt_check .GE. 2 ) &
    4095                 :           0 :       WRITE(ostream,'(A28,E22.14)') "Bath     test         [%] : ", op%errorBath    *100.d0
    4096                 :             : !#endif
    4097                 :           0 :   WRITE(ostream,'(A28,ES22.14,A5,ES21.14)') "<Epot>                [U] : ", op%measDE(1,1), " +/- ",&
    4098                 :             : !#ifdef HAVE_MPI
    4099                 :           0 :                                                               op%a_Noise*(sweeps*DBLE(op%size))**op%b_Noise
    4100                 :             : !#else
    4101                 :             : !                                                              op%a_Noise*(sweeps)**op%b_Noise
    4102                 :             : !#endif
    4103                 :             :  !--------- Write double occupation between all pairs of orbitals --------------------------
    4104                 :           0 :   write(ostream,'(17x,a)') "Double occupation between pairs of orbitals"
    4105   [ #  #  #  # ]:           0 :   write(ostream,'(17x,30i10)') (iflavorbis,iflavorbis=1,op%flavors)
    4106   [ #  #  #  # ]:           0 :   write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors)
    4107         [ #  # ]:           0 :   do iflavor=1, op%flavors
    4108   [ #  #  #  # ]:           0 :     write(ostream,'(7x,i10,a,30f10.4)') iflavor,"|",(op%measDE(iflavor,iflavorbis),iflavorbis=1,op%flavors)
    4109                 :             :   enddo
    4110   [ #  #  #  # ]:           0 :   write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors),ch10
    4111                 :             :  !------------------------------------------------------------------------------------------
    4112                 :             : 
    4113                 :             :  !--------- Write number of segments for each orbitals
    4114                 :             :  ! write(ostream,'(a)') "Number of segments for each orbitals"
    4115                 :             :  ! write(ostream,'(17x,30i10)') (iflavorbis,iflavorbis=1,op%flavors)
    4116                 :             :  ! write(ostream,'(17x,30a)') ("----------",iflavorbis=1,op%flavors)
    4117                 :             :  ! do iflavor=1, op%flavors
    4118                 :             :  !   write(ostream,'(i17,a,30f10.4)') iflavor,"|",(op%Impurity%particles(IT)%tail)
    4119                 :             :  ! enddo
    4120                 :             :  ! write(ostream,'(17x,30a)') ("----------",iflavorbis=1,op%flavors)
    4121                 :             :  !------------------------------------------------------------------------------------------
    4122                 :             :  !--------- Write G(L)
    4123                 :           0 :   write(ostream,'(17x,a)') "G(tau = L)"
    4124   [ #  #  #  # ]:           0 :   write(ostream,'(17x,30i10)') (iflavorbis,iflavorbis=1,op%flavors)
    4125   [ #  #  #  # ]:           0 :   write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors)
    4126         [ #  # ]:           0 :   do iflavor=1, op%flavors
    4127   [ #  #  #  # ]:           0 :     write(ostream,'(7x,i10,a,30f10.4)') iflavor,"|",(real(op%Greens%oper(op%samples,iflavor,iflavorbis)),iflavorbis=1,op%flavors)
    4128                 :             :   enddo
    4129   [ #  #  #  # ]:           0 :   write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors),ch10
    4130                 :             :  !------------------------------------------------------------------------------------------
    4131                 :             :  !--------- Write G(1)
    4132                 :           0 :   write(ostream,'(17x,a)') "G(tau = 1)"
    4133   [ #  #  #  # ]:           0 :   write(ostream,'(17x,30i10)') (iflavorbis,iflavorbis=1,op%flavors)
    4134   [ #  #  #  # ]:           0 :   write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors)
    4135         [ #  # ]:           0 :   do iflavor=1, op%flavors
    4136   [ #  #  #  # ]:           0 :     write(ostream,'(7x,i10,a,30f10.4)') iflavor,"|",(real(op%Greens%oper(1,iflavor,iflavorbis)),iflavorbis=1,op%flavors)
    4137                 :             :   enddo
    4138   [ #  #  #  # ]:           0 :   write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors),ch10
    4139                 :             :  !------------------------------------------------------------------------------------------
    4140                 :             : 
    4141                 :           0 :   WRITE(ostream,'(A28,F8.4,A3,F7.4)') "Noise                 [U] : ", op%a_Noise, " x^", op%b_Noise
    4142                 :           0 :   WRITE(ostream,'(A28,E10.2)')  "Niquist puls.     [/beta] : ", ACOS(-1.d0)*op%inv_dt
    4143                 :           0 :   WRITE(ostream,'(A28,E22.14)') "Max Acc. Epot Error   [U] : ", op%measDE(2,2)/(op%beta*op%modNoise1*2.d0)*sweeps
    4144                 :             : 
    4145                 :             :   !WRITE(ostream,'(A28,F7.4,A3,F7.4,A4,E20.14)') "Noise            [G(tau)] : ", op%a_Noise(2), "x^", op%b_Noise(2), " -> ", &
    4146                 :             :                                                               !op%a_Noise(2)*(sweeps*DBLE(op%size))**op%b_Noise(2)
    4147                 :             :  !----- PERTURBATION ORDER------------------------------------------------------------------
    4148         [ #  # ]:           0 :   IF ( op%opt_order .GT. 0 ) THEN
    4149                 :           0 :     write(ostream,*)
    4150                 :           0 :     WRITE(a,'(I2)') op%flavors
    4151   [ #  #  #  # ]:           0 :     string = '(A28,'//TRIM(ADJUSTL(a))//'(1x,I3))'
    4152   [ #  #  #  #  :           0 :     WRITE(ostream,string) "Perturbation orders       : ",(/ (MAXLOC(op%measPerturbation(:, iflavor))-1, iflavor=1, op%flavors) /)
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
    4153                 :           0 :     write(ostream,'(17x,a)') "order of Perturbation for flavors"
    4154   [ #  #  #  # ]:           0 :     write(ostream,'(17x,30i10)') (iflavorbis,iflavorbis=1,op%flavors)
    4155   [ #  #  #  # ]:           0 :     write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors)
    4156   [ #  #  #  #  :           0 :     write(ostream,'(12x,a,30i10)') " max ",(/ (MAXLOC(op%measPerturbation(:, iflavor))-1, iflavor=1, op%flavors) /)
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
    4157   [ #  #  #  # ]:           0 :     write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors)
    4158         [ #  # ]:           0 :     do iorder=0, op%opt_order-1
    4159   [ #  #  #  # ]:           0 :       write(ostream,'(7x,i10,a,30f10.4)') iorder,"|",(op%measPerturbation(iorder+1,iflavor),iflavor=1,op%flavors)
    4160                 :             :     enddo
    4161                 :             :   END IF
    4162                 :             :  !------------------------------------------------------------------------------------------
    4163                 :             :  !----- PERTURBATION ORDER------------------------------------------------------------------
    4164         [ #  # ]:           0 :   IF ( op%opt_order .GT. 0 ) THEN
    4165                 :           0 :     write(ostream,*)
    4166                 :           0 :     write(ostream,'(17x,a)') "Proportion of full and empty orbital for order 0"
    4167   [ #  #  #  # ]:           0 :     write(ostream,'(17x,30i10)') (iflavorbis,iflavorbis=1,op%flavors)
    4168   [ #  #  #  # ]:           0 :     write(ostream,'(18x,30a)') ("----------",iflavorbis=1,op%flavors)
    4169   [ #  #  #  # ]:           0 :     write(ostream,'(2x,a,30f10.4)') " full  orbital |",(op%meas_fullemptylines(1,iflavor),iflavor=1,op%flavors)
    4170   [ #  #  #  # ]:           0 :     write(ostream,'(2x,a,30f10.4)') " empty orbital |",(op%meas_fullemptylines(2,iflavor),iflavor=1,op%flavors)
    4171                 :             :   END IF
    4172                 :             :  !------------------------------------------------------------------------------------------
    4173                 :             :   !CALL FLUSH(op%ostream)
    4174                 :             :   IF ( ABS(((op%stats(4) *invSweeps*100.d0) / (op%stats(5) *invSweeps*100.d0) - 1.d0)) .GE. 0.02d0 &
    4175   [ #  #  #  # ]:           0 :    .OR. ABS(((op%stats(1)*invSweeps*100.d0) / (op%stats(2)*invSweeps*100.d0) - 1.d0)) .GE. 0.02d0 ) &
    4176                 :             :     THEN
    4177                 :           0 :     CALL WARNALL("CtqmcoffdiagComplex_printQMC : bad statistic according to moves. Increase sweeps")
    4178                 :             :   END IF
    4179         [ #  # ]:           0 :   IF ( ABS(op%b_Noise+0.5)/0.5d0 .GE. 0.05d0 ) &
    4180                 :           0 :     CALL WARNALL("CtqmcoffdiagComplex_printQMC : bad statistic according to Noise. Increase sweeps")
    4181                 :             : !  IF ( ISNAN(op%a_Noise) .OR. ISNAN(op%a_Noise) ) &
    4182                 :             : !    CALL WARNALL("CtqmcoffdiagComplex_printQMC : NaN appeared. Increase sweeps    ")
    4183                 :             : 
    4184                 :             : 
    4185                 :             : END SUBROUTINE CtqmcoffdiagComplex_printQMC
    4186                 :             : !!***
    4187                 :             : 
    4188                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_printGreen
    4189                 :             : !! NAME
    4190                 :             : !!  CtqmcoffdiagComplex_printGreen
    4191                 :             : !!
    4192                 :             : !! FUNCTION
    4193                 :             : !!  print green functions
    4194                 :             : !!
    4195                 :             : !! COPYRIGHT
    4196                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    4197                 :             : !!  This file is distributed under the terms of the
    4198                 :             : !!  GNU General Public License, see ~abinit/COPYING
    4199                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    4200                 :             : !!
    4201                 :             : !! INPUTS
    4202                 :             : !!  op=ctqmc
    4203                 :             : !!  oFileIn=file stream
    4204                 :             : !!
    4205                 :             : !! OUTPUT
    4206                 :             : !!
    4207                 :             : !! SIDE EFFECTS
    4208                 :             : !!
    4209                 :             : !! NOTES
    4210                 :             : !!
    4211                 :             : !! SOURCE
    4212                 :             : 
    4213                 :           0 : SUBROUTINE CtqmcoffdiagComplex_printGreen(op, oFileIn)
    4214                 :             : 
    4215                 :             : !Arguments ------------------------------------
    4216                 :             :   use m_io_tools, only : flush_unit
    4217                 :             :   TYPE(CtqmcoffdiagComplex)        , INTENT(IN)    :: op
    4218                 :             :   INTEGER  , OPTIONAL, INTENT(IN)    :: oFileIn
    4219                 :             : !Local variables ------------------------------
    4220                 :             :   INTEGER                            :: oFile
    4221                 :             :   INTEGER                            :: itime
    4222                 :             :   INTEGER                            :: sp1
    4223                 :             :   INTEGER                            :: iflavor,iflavorb
    4224                 :             :   INTEGER                            :: flavors !, iflavor2 !,iflavor1,
    4225                 :             :   CHARACTER(LEN=4)                   :: cflavors,hcflavors
    4226                 :             :   CHARACTER(LEN=50)                  :: string,hstring
    4227                 :             :   DOUBLE PRECISION                   :: dt
    4228                 :             :   DOUBLE PRECISION                   :: sweeps
    4229                 :             : 
    4230                 :             :   !IF ( op%rank .NE. MOD(1,op%size)) RETURN
    4231         [ #  # ]:           0 :   IF ( op%rank .NE. MOD(op%size+1,op%size)) RETURN
    4232                 :             : 
    4233                 :           0 :   oFile = 40
    4234         [ #  # ]:           0 :   IF ( PRESENT(oFileIn) ) THEN
    4235                 :           0 :     oFile = oFileIn
    4236                 :             :   ELSE
    4237                 :           0 :     OPEN(UNIT=oFile, FILE="Gtau.dat")
    4238                 :             :   END IF
    4239                 :           0 :   OPEN(UNIT=43, FILE="Gtau_nd.dat")
    4240                 :           0 :   rewind(43)
    4241                 :           0 :   OPEN(UNIT=143, FILE="Gtau_nd_Re_ctqmc.dat")
    4242                 :           0 :   rewind(143)
    4243                 :           0 :   OPEN(UNIT=243, FILE="Gtau_nd_Im_ctqmc.dat")
    4244                 :           0 :   rewind(243)
    4245                 :           0 :   sp1     =  op%samples
    4246                 :           0 :   dt      =  op%beta / DBLE(sp1)
    4247                 :           0 :   sp1     =  sp1 + 1
    4248                 :           0 :   flavors =  op%flavors
    4249                 :           0 :   sweeps = DBLE(op%sweeps)*DBLE(op%size)
    4250                 :             : 
    4251         [ #  # ]:           0 :   IF ( op%opt_noise .EQ. 1) THEN
    4252                 :           0 :     WRITE(cflavors,'(I4)') (2*flavors+1)*2
    4253   [ #  #  #  # ]:           0 :     string = '(1x,'//TRIM(ADJUSTL(cflavors))//'ES22.14)'
    4254         [ #  # ]:           0 :     DO itime = 1, sp1
    4255                 :           0 :       WRITE(oFile,string) DBLE(itime-1)*dt, &
    4256   [ #  #  #  #  :           0 :       (/ (op%Greens%oper(itime,iflavor,iflavor), iflavor=1, flavors) /), &
                   #  # ]
    4257   [ #  #  #  #  :           0 :       (/ (op%abNoiseG(1,itime,iflavor)*(sweeps)**op%abNoiseG(2,itime,iflavor), iflavor=1, flavors) /)
                   #  # ]
    4258                 :             :     END DO
    4259                 :             :   ELSE
    4260                 :           0 :     WRITE(cflavors,'(I4)') (flavors+1)*2
    4261   [ #  #  #  # ]:           0 :     string = '(1x,'//TRIM(ADJUSTL(cflavors))//'ES22.14)'
    4262         [ #  # ]:           0 :     DO itime = 1, sp1
    4263                 :             : !     WRITE(45,string) DBLE(itime-1)*dt, &
    4264                 :             : !     (/ (op%Greens%oper(itime,iflavor,iflavor), iflavor=1, flavors) /)
    4265                 :           0 :       WRITE(oFile,string) DBLE(itime-1)*dt, &
    4266   [ #  #  #  #  :           0 :       (/ (op%Greens%oper(itime,iflavor,iflavor), iflavor=1, flavors) /)
                   #  # ]
    4267                 :             : !     WRITE(46,*) DBLE(itime-1)*dt, &
    4268                 :             : !     & (/ ((op%Greens%oper(itime,iflavor,iflavorb), iflavor=1, flavors),iflavorb=1,flavors) /)
    4269                 :             :     END DO
    4270                 :             : !   DO itime = 1, sp1
    4271                 :             : !     WRITE(47,*) DBLE(itime-1)*dt, &
    4272                 :             : !     & (/ ((op%Greens%oper(itime,iflavor,iflavorb), iflavor=1, flavors),iflavorb=1,flavors) /)
    4273                 :             : !   END DO
    4274                 :             : !  --- Print full non diagonal Gtau in Gtau_nd.dat
    4275                 :           0 :     WRITE(cflavors,'(I4)') (flavors*flavors+1)
    4276                 :           0 :     WRITE(hcflavors,'(I4)') (flavors*flavors+1)
    4277                 :             : !   write(47,*) "cflavors",cflavors
    4278   [ #  #  #  # ]:           0 :     string = '(1x,'//TRIM(ADJUSTL(cflavors))//'ES22.14)'
    4279   [ #  #  #  # ]:           0 :     hstring = '(1x,'//TRIM(ADJUSTL(hcflavors))//'ES22.14)'
    4280                 :             : !   write(47,*) string
    4281         [ #  # ]:           0 :     DO itime = 1, sp1
    4282                 :           0 :       WRITE(43,string) DBLE(itime-1)*dt, &
    4283   [ #  #  #  #  :           0 :       & (/ ((op%Greens%oper(itime,iflavor,iflavorb), iflavorb=1, flavors),iflavor=1,flavors) /)
             #  #  #  # ]
    4284                 :           0 :       WRITE(143,hstring) DBLE(itime-1)*dt, &
    4285   [ #  #  #  #  :           0 :       & (/ ((real(op%Greens%oper(itime,iflavor,iflavorb)), iflavorb=1, flavors),iflavor=1,flavors) /)
             #  #  #  # ]
    4286                 :           0 :       WRITE(243,hstring) DBLE(itime-1)*dt, &
    4287   [ #  #  #  #  :           0 :       & (/ ((aimag(op%Greens%oper(itime,iflavor,iflavorb)), iflavorb=1, flavors),iflavor=1,flavors) /)
             #  #  #  # ]
    4288                 :             : !     WRITE(44,*) DBLE(itime-1)*dt, &
    4289                 :             : !     & (op%Greens%oper(itime,iflavor,iflavor), iflavor=1, flavors)
    4290                 :             : !     WRITE(44,string) DBLE(itime-1)*dt, &
    4291                 :             : !     & (op%Greens%oper(itime,iflavor,iflavor), iflavor=1, flavors)
    4292                 :             :     END DO
    4293                 :           0 :       WRITE(43,*)
    4294                 :           0 :       WRITE(143,*)
    4295                 :           0 :       WRITE(243,*)
    4296                 :             :   END IF
    4297                 :             : !    DO iflavor = 1, flavors
    4298                 :             : !      DO iflavor2 = 1, flavors
    4299                 :             : !          write(4436,*) "#",iflavor,iflavor2
    4300                 :             : !        do  itime=1,sp1
    4301                 :             : !          write(4436,*) DBLE(itime-1)*dt,real(op%Greens%oper(itime,iflavor,iflavor2))
    4302                 :             : !        enddo
    4303                 :             : !          write(4436,*)
    4304                 :             : !      END DO
    4305                 :             : !    END DO
    4306                 :             : !    close(4436)
    4307                 :             : 
    4308         [ #  # ]:           0 :   IF ( .NOT. PRESENT(oFileIn) ) CLOSE(oFile)
    4309                 :           0 :   CLOSE(43)
    4310                 :           0 :   CLOSE(143)
    4311                 :           0 :   CLOSE(243)
    4312                 :             : ! CLOSE(46)
    4313                 :             : ! CLOSE(47)
    4314                 :             :   !call flush_unit(43)
    4315                 :             : 
    4316                 :             : END SUBROUTINE CtqmcoffdiagComplex_printGreen
    4317                 :             : !!***
    4318                 :             : 
    4319                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_printD
    4320                 :             : !! NAME
    4321                 :             : !!  CtqmcoffdiagComplex_printD
    4322                 :             : !!
    4323                 :             : !! FUNCTION
    4324                 :             : !!  print individual double occupancy
    4325                 :             : !!
    4326                 :             : !! COPYRIGHT
    4327                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    4328                 :             : !!  This file is distributed under the terms of the
    4329                 :             : !!  GNU General Public License, see ~abinit/COPYING
    4330                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    4331                 :             : !!
    4332                 :             : !! INPUTS
    4333                 :             : !!  op=ctqmc
    4334                 :             : !!  oFileIn=file stream
    4335                 :             : !!
    4336                 :             : !! OUTPUT
    4337                 :             : !!
    4338                 :             : !! SIDE EFFECTS
    4339                 :             : !!
    4340                 :             : !! NOTES
    4341                 :             : !!
    4342                 :             : !! SOURCE
    4343                 :             : 
    4344                 :           0 : SUBROUTINE CtqmcoffdiagComplex_printD(op,oFileIn)
    4345                 :             : 
    4346                 :             : !Arguments ------------------------------------
    4347                 :             :   TYPE(CtqmcoffdiagComplex)          , INTENT(IN)    :: op
    4348                 :             :   INTEGER  , OPTIONAL, INTENT(IN)    :: oFileIn
    4349                 :             : !Local variables ------------------------------
    4350                 :             :   INTEGER                            :: oFile
    4351                 :             :   INTEGER                            :: iflavor1
    4352                 :             :   INTEGER                            :: iflavor2
    4353                 :             : 
    4354                 :             :   !IF ( op%rank .NE. MOD(2,op%size)) RETURN
    4355         [ #  # ]:           0 :   IF ( op%rank .NE. MOD(op%size+2,op%size)) RETURN
    4356                 :             : 
    4357                 :           0 :   oFile = 41
    4358         [ #  # ]:           0 :   IF ( PRESENT(oFileIn) ) THEN
    4359                 :           0 :     oFile = oFileIn
    4360                 :             :   ELSE
    4361                 :           0 :     OPEN(UNIT=oFile, FILE="D.dat")
    4362                 :             :   END IF
    4363                 :             : 
    4364         [ #  # ]:           0 :   DO iflavor1 = 1, op%flavors
    4365         [ #  # ]:           0 :     DO iflavor2 = iflavor1+1, op%flavors
    4366                 :           0 :       WRITE(oFile,'(1x,A8,I4,A1,I4,A3,ES21.14)') "Orbitals", iflavor1, "-", iflavor2, " : ", op%measDE(iflavor2,iflavor1)
    4367                 :             :     END DO
    4368                 :             :   END DO
    4369                 :             : 
    4370         [ #  # ]:           0 :   IF ( .NOT. PRESENT(oFileIn) ) CLOSE(oFile)
    4371                 :             : 
    4372                 :             : END SUBROUTINE CtqmcoffdiagComplex_printD
    4373                 :             : !!***
    4374                 :             : 
    4375                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_printE
    4376                 :             : !! NAME
    4377                 :             : !!  CtqmcoffdiagComplex_printE
    4378                 :             : !!
    4379                 :             : !! FUNCTION
    4380                 :             : !!  print energy and noise
    4381                 :             : !!
    4382                 :             : !! COPYRIGHT
    4383                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    4384                 :             : !!  This file is distributed under the terms of the
    4385                 :             : !!  GNU General Public License, see ~abinit/COPYING
    4386                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    4387                 :             : !!
    4388                 :             : !! INPUTS
    4389                 :             : !!  op=ctqmc
    4390                 :             : !!  oFileIn=file stream
    4391                 :             : !!
    4392                 :             : !! OUTPUT
    4393                 :             : !!
    4394                 :             : !! SIDE EFFECTS
    4395                 :             : !!
    4396                 :             : !! NOTES
    4397                 :             : !!
    4398                 :             : !! SOURCE
    4399                 :             : 
    4400                 :           0 : SUBROUTINE CtqmcoffdiagComplex_printE(op,oFileIn)
    4401                 :             : 
    4402                 :             : !Arguments ------------------------------------
    4403                 :             :   TYPE(CtqmcoffdiagComplex)          , INTENT(IN)    :: op
    4404                 :             :   INTEGER  , OPTIONAL, INTENT(IN)    :: oFileIn
    4405                 :             : !Local variables ------------------------------
    4406                 :             :   INTEGER                            :: oFile
    4407                 :             :   DOUBLE PRECISION                   :: E
    4408                 :             :   DOUBLE PRECISION                   :: Noise
    4409                 :             : 
    4410                 :             :   !IF ( op%rank .NE. MOD(3,op%size)) RETURN
    4411         [ #  # ]:           0 :   IF ( op%rank .NE. MOD(op%size+3,op%size)) RETURN
    4412                 :             : 
    4413                 :           0 :   oFile = 42
    4414         [ #  # ]:           0 :   IF ( PRESENT(oFileIn) ) THEN
    4415                 :           0 :     oFile = oFileIn
    4416                 :             :   ELSE
    4417                 :           0 :     OPEN(UNIT=oFile, FILE="BetaENoise.dat")
    4418                 :             :   END IF
    4419                 :             : 
    4420                 :           0 :   CALL CtqmcoffdiagComplex_getE(op,E,Noise)
    4421                 :             : 
    4422                 :           0 :   WRITE(oFile,'(1x,F3.2,A2,ES21.14,A2,ES21.14)') op%beta, "  ", E, "  ",  Noise
    4423                 :             : 
    4424         [ #  # ]:           0 :   IF ( .NOT. PRESENT(oFileIn) ) CLOSE(oFile)
    4425                 :             : 
    4426                 :             : END SUBROUTINE CtqmcoffdiagComplex_printE
    4427                 :             : !!***
    4428                 :             : 
    4429                 :             : !#ifdef CTCtqmcoffdiagComplex_ANALYSIS
    4430                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_printPerturbation
    4431                 :             : !! NAME
    4432                 :             : !!  CtqmcoffdiagComplex_printPerturbation
    4433                 :             : !!
    4434                 :             : !! FUNCTION
    4435                 :             : !!  print perturbation order
    4436                 :             : !!
    4437                 :             : !! COPYRIGHT
    4438                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    4439                 :             : !!  This file is distributed under the terms of the
    4440                 :             : !!  GNU General Public License, see ~abinit/COPYING
    4441                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    4442                 :             : !!
    4443                 :             : !! INPUTS
    4444                 :             : !!  op=ctqmc
    4445                 :             : !!  oFileIn=file stream
    4446                 :             : !!
    4447                 :             : !! OUTPUT
    4448                 :             : !!  argout(sizeout)=description
    4449                 :             : !!
    4450                 :             : !! SIDE EFFECTS
    4451                 :             : !!
    4452                 :             : !! NOTES
    4453                 :             : !!
    4454                 :             : !! SOURCE
    4455                 :             : 
    4456                 :           0 : SUBROUTINE CtqmcoffdiagComplex_printPerturbation(op, oFileIn)
    4457                 :             : 
    4458                 :             : !Arguments ------------------------------------
    4459                 :             :   TYPE(CtqmcoffdiagComplex)          , INTENT(IN)           :: op
    4460                 :             :   INTEGER  , OPTIONAL,  INTENT(IN)          :: oFileIn
    4461                 :             : !Local variables-------------------------------
    4462                 :             :   INTEGER                                   :: oFile
    4463                 :             :   INTEGER                                   :: iorder
    4464                 :             :   INTEGER                                   :: order
    4465                 :             :   INTEGER                                   :: iflavor
    4466                 :             :   INTEGER                                   :: flavors
    4467                 :             :   CHARACTER(LEN=2)                          :: a
    4468                 :             :   CHARACTER(LEN=50)                         :: string
    4469                 :             : 
    4470                 :             :   !IF ( op%rank .NE. MOD(4,op%size)) RETURN
    4471         [ #  # ]:           0 :   IF ( op%rank .NE. MOD(op%size+4,op%size)) RETURN
    4472         [ #  # ]:           0 :   IF ( op%opt_order .LE. 0 ) RETURN
    4473                 :             : 
    4474                 :           0 :   oFile = 43
    4475         [ #  # ]:           0 :   IF ( PRESENT(oFileIn) ) THEN
    4476                 :           0 :     oFile = oFileIn
    4477                 :             :   ELSE
    4478                 :           0 :     OPEN(UNIT=oFile, FILE="Perturbation.dat")
    4479                 :             :   END IF
    4480                 :             : 
    4481                 :           0 :   order        =  op%opt_order
    4482                 :           0 :   flavors      =  op%flavors
    4483                 :             : 
    4484                 :           0 :   WRITE(a,'(I2)') flavors
    4485   [ #  #  #  # ]:           0 :   string = '(I5,'//TRIM(ADJUSTL(a))//'F19.15)'
    4486         [ #  # ]:           0 :   DO iorder = 1, order
    4487                 :           0 :     WRITE(oFile,string) iorder-1, &
    4488   [ #  #  #  #  :           0 :                 (/ (op%measPerturbation(iorder, iflavor), iflavor=1, flavors) /)
                   #  # ]
    4489                 :             :   END DO
    4490                 :             : 
    4491         [ #  # ]:           0 :   IF ( .NOT. PRESENT(oFileIn) ) CLOSE(oFile)
    4492                 :             : END SUBROUTINE CtqmcoffdiagComplex_printPerturbation
    4493                 :             : !!***
    4494                 :             : 
    4495                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_printCorrelation
    4496                 :             : !! NAME
    4497                 :             : !!  CtqmcoffdiagComplex_printCorrelation
    4498                 :             : !!
    4499                 :             : !! FUNCTION
    4500                 :             : !!  print correlation fonctions
    4501                 :             : !!
    4502                 :             : !! COPYRIGHT
    4503                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    4504                 :             : !!  This file is distributed under the terms of the
    4505                 :             : !!  GNU General Public License, see ~abinit/COPYING
    4506                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    4507                 :             : !!
    4508                 :             : !! INPUTS
    4509                 :             : !!  op=ctqmc
    4510                 :             : !!  oFileIn=file stream
    4511                 :             : !!
    4512                 :             : !! OUTPUT
    4513                 :             : !!
    4514                 :             : !! SIDE EFFECTS
    4515                 :             : !!
    4516                 :             : !! NOTES
    4517                 :             : !!
    4518                 :             : !! SOURCE
    4519                 :             : 
    4520                 :           0 : SUBROUTINE CtqmcoffdiagComplex_printCorrelation(op, oFileIn)
    4521                 :             : 
    4522                 :             : !Arguments ------------------------------------
    4523                 :             :   TYPE(CtqmcoffdiagComplex)          , INTENT(IN)             :: op
    4524                 :             :   INTEGER  , OPTIONAL, INTENT(IN)             :: oFileIn
    4525                 :             : !Local variables ------------------------------
    4526                 :             :   INTEGER                                     :: oFile
    4527                 :             :   INTEGER                                     :: itime
    4528                 :             :   INTEGER                                     :: sp1
    4529                 :             :   INTEGER                                     :: iflavor
    4530                 :             :   INTEGER                                     :: i
    4531                 :             :   INTEGER                                     :: flavors
    4532                 :             :   CHARACTER(LEN=2)                            :: a
    4533                 :             :   CHARACTER(LEN=50)                           :: string
    4534                 :             :   DOUBLE PRECISION                            :: dt
    4535                 :             : 
    4536                 :             :   !IF ( op%rank .NE. MOD(5,op%size)) RETURN
    4537         [ #  # ]:           0 :   IF ( op%rank .NE. MOD(op%size+5,op%size)) RETURN
    4538         [ #  # ]:           0 :   IF ( op%opt_analysis .NE. 1 ) RETURN
    4539                 :             : 
    4540                 :           0 :   oFile = 44
    4541         [ #  # ]:           0 :   IF ( PRESENT(oFileIn) ) THEN
    4542                 :           0 :     oFile = oFileIn
    4543                 :             :   ELSE
    4544                 :           0 :     OPEN(UNIT=oFile, FILE="Correlation.dat")
    4545                 :             :   END IF
    4546                 :             : 
    4547                 :           0 :   sp1         =  op%samples
    4548                 :           0 :   dt          =  op%beta / sp1
    4549                 :           0 :   sp1         =  sp1 + 1
    4550                 :           0 :   flavors     =  op%flavors
    4551                 :             : 
    4552                 :           0 :   i = 3*flavors + 1
    4553                 :           0 :   WRITE(a,'(I2)') i
    4554                 :           0 :   WRITE(oFile,*) "# time  (/ (segement, antiseg, correl), i=1, flavor/)"
    4555   [ #  #  #  # ]:           0 :   string = '(1x,'//TRIM(ADJUSTL(a))//'F19.15)'
    4556         [ #  # ]:           0 :   DO itime = 1, sp1
    4557                 :           0 :     WRITE(oFile,string) DBLE(itime-1)*dt, &
    4558                 :             :                    (/ ( &
    4559                 :             :                    (/ ( op%measCorrelation(itime, i, iflavor), i=1,3) /) &
    4560   [ #  #  #  #  :           0 :                    , iflavor=1, flavors) /)
                   #  # ]
    4561                 :             :   END DO
    4562                 :             : 
    4563         [ #  # ]:           0 :   IF ( .NOT. PRESENT(oFileIn) ) CLOSE(oFile)
    4564                 :             : 
    4565                 :             : END SUBROUTINE CtqmcoffdiagComplex_printCorrelation
    4566                 :             : !!***
    4567                 :             : !#endif
    4568                 :             : 
    4569                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_printSpectra
    4570                 :             : !! NAME
    4571                 :             : !!  CtqmcoffdiagComplex_printSpectra
    4572                 :             : !!
    4573                 :             : !! FUNCTION
    4574                 :             : !!  print fourier transform of time evolution of number of electrons
    4575                 :             : !!
    4576                 :             : !! COPYRIGHT
    4577                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    4578                 :             : !!  This file is distributed under the terms of the
    4579                 :             : !!  GNU General Public License, see ~abinit/COPYING
    4580                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    4581                 :             : !!
    4582                 :             : !! INPUTS
    4583                 :             : !!  op=ctqmc
    4584                 :             : !!  oFileIn=file stream
    4585                 :             : !!
    4586                 :             : !! OUTPUT
    4587                 :             : !!
    4588                 :             : !! SIDE EFFECTS
    4589                 :             : !!
    4590                 :             : !! NOTES
    4591                 :             : !!
    4592                 :             : !! SOURCE
    4593                 :             : 
    4594                 :           0 : SUBROUTINE CtqmcoffdiagComplex_printSpectra(op, oFileIn)
    4595                 :             : 
    4596                 :             : !Arguments ------------------------------------
    4597                 :             :   TYPE(CtqmcoffdiagComplex)          , INTENT(IN)             :: op
    4598                 :             :   INTEGER  , OPTIONAL, INTENT(IN)             :: oFileIn
    4599                 :             : !Local variables ------------------------------
    4600                 :             :   INTEGER                                     :: oFile
    4601                 :             :   INTEGER                                     :: flavors
    4602                 :             :   INTEGER                                     :: indDensity
    4603                 :             :   INTEGER                                     :: endDensity
    4604                 :             :   CHARACTER(LEN=4)                            :: a
    4605                 :             :   CHARACTER(LEN=16)                           :: formatSpectra
    4606                 :             : 
    4607                 :             :   !IF ( op%rank .NE. MOD(6,op%size)) RETURN
    4608         [ #  # ]:           0 :   IF ( op%opt_spectra .LT. 1 ) RETURN
    4609                 :             : 
    4610                 :           0 :   oFile = 45+op%rank
    4611                 :           0 :   a ="0000"
    4612                 :           0 :   WRITE(a,'(I4)') op%rank
    4613         [ #  # ]:           0 :   IF ( PRESENT(oFileIn) ) THEN
    4614                 :           0 :     oFile = oFileIn
    4615                 :             :   ELSE
    4616         [ #  # ]:           0 :     OPEN(UNIT=oFile, FILE="Markov_"//TRIM(ADJUSTL(a))//".dat")
    4617                 :             :   END IF
    4618                 :             : 
    4619                 :           0 :   flavors     =  op%flavors
    4620                 :           0 :   WRITE(a,'(I4)') flavors+1
    4621   [ #  #  #  # ]:           0 :   formatSpectra ='(1x,'//TRIM(ADJUSTL(a))//'ES22.14)'
    4622                 :           0 :   WRITE(oFile,*) "# freq[/hermalization] FFT"
    4623                 :             : 
    4624                 :             : !PROBLEM eos_gnu_13.2_mpich . %endDensity was introduced throughout
    4625                 :           0 :   endDensity = SIZE(op%density,2)
    4626                 :             : ! endDensity=op%endDensity
    4627                 :             : !ENDPROBLEM
    4628         [ #  # ]:           0 :   DO WHILE ( op%density(flavors+1,endDensity) .EQ. -1 )
    4629                 :           0 :     endDensity = endDensity -1
    4630                 :             :   END DO
    4631                 :             : 
    4632         [ #  # ]:           0 :   DO indDensity = 1, endDensity
    4633                 :           0 :     WRITE(oFile,formatSpectra) op%density(flavors+1,indDensity), op%density(1:flavors,indDensity)
    4634                 :             :   END DO
    4635                 :             : 
    4636         [ #  # ]:           0 :   IF ( .NOT. PRESENT(oFileIn) ) CLOSE(oFile)
    4637                 :             : 
    4638                 :             : END SUBROUTINE CtqmcoffdiagComplex_printSpectra
    4639                 :             : !!***
    4640                 :             : 
    4641                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_destroy
    4642                 :             : !! NAME
    4643                 :             : !!  CtqmcoffdiagComplex_destroy
    4644                 :             : !!
    4645                 :             : !! FUNCTION
    4646                 :             : !!  destroy and deallocate all variables
    4647                 :             : !!
    4648                 :             : !! COPYRIGHT
    4649                 :             : !!  Copyright (C) 2013-2025 ABINIT group (J. Bieder)
    4650                 :             : !!  This file is distributed under the terms of the
    4651                 :             : !!  GNU General Public License, see ~abinit/COPYING
    4652                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    4653                 :             : !!
    4654                 :             : !! INPUTS
    4655                 :             : !!  op=ctqmc
    4656                 :             : !!
    4657                 :             : !! OUTPUT
    4658                 :             : !!
    4659                 :             : !! SIDE EFFECTS
    4660                 :             : !!
    4661                 :             : !! NOTES
    4662                 :             : !!
    4663                 :             : !! SOURCE
    4664                 :             : 
    4665                 :           0 : SUBROUTINE CtqmcoffdiagComplex_destroy(op)
    4666                 :             : 
    4667                 :             : !Arguments ------------------------------------
    4668                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT) :: op
    4669                 :             : !Local variables ------------------------------
    4670                 :             :   !INTEGER                  :: iflavor
    4671                 :             :   INTEGER                  :: flavors
    4672                 :             :   INTEGER                  :: i
    4673                 :             :   INTEGER                  :: j
    4674                 :             :   INTEGER                  :: k
    4675                 :             : 
    4676                 :           0 :   flavors = op%flavors
    4677                 :             : 
    4678                 :           0 :   CALL ImpurityOperator_destroy(op%Impurity)
    4679                 :           0 :   CALL BathOperatoroffdiagComplex_destroy(op%Bath)
    4680                 :           0 :   CALL Vector_destroy(op%measNoise(1))
    4681                 :           0 :   CALL Vector_destroy(op%measNoise(2))
    4682                 :             : 
    4683                 :             : !sui!write(6,*) "before greenhyb_destroy in ctmqc_destroy"
    4684                 :           0 :   CALL GreenHyboffdiagComplex_destroy(op%Greens)
    4685                 :             : !#ifdef CTCtqmcoffdiagComplex_ANALYSIS
    4686         [ #  # ]:           0 :   FREEIF(op%measCorrelation)
    4687         [ #  # ]:           0 :   FREEIF(op%measPerturbation)
    4688         [ #  # ]:           0 :   FREEIF(op%meas_fullemptylines)
    4689         [ #  # ]:           0 :   FREEIF(op%measN)
    4690         [ #  # ]:           0 :   IF ( op%opt_histo .GT. 0 ) THEN
    4691         [ #  # ]:           0 :     FREEIF(op%occup_histo_time)
    4692         [ #  # ]:           0 :     FREEIF(op%suscep)
    4693         [ #  # ]:           0 :     FREEIF(op%occupconfig)
    4694         [ #  # ]:           0 :     FREEIF(op%chi)
    4695         [ #  # ]:           0 :     FREEIF(op%chicharge)
    4696         [ #  # ]:           0 :     FREEIF(op%ntot)
    4697                 :             :   END IF
    4698         [ #  # ]:           0 :   FREEIF(op%measDE)
    4699         [ #  # ]:           0 :   FREEIF(op%mu)
    4700         [ #  # ]:           0 :   FREEIF(op%hybri_limit)
    4701         [ #  # ]:           0 :   FREEIF(op%abNoiseG)
    4702         [ #  # ]:           0 :   IF ( ALLOCATED(op%measNoiseG) ) THEN
    4703         [ #  # ]:           0 :     DO i=1,2
    4704         [ #  # ]:           0 :       DO j = 1, op%flavors
    4705         [ #  # ]:           0 :         DO k= 1, op%samples+1
    4706                 :           0 :           CALL Vector_destroy(op%measNoiseG(k,j,i))
    4707                 :             :         END DO
    4708                 :             :       END DO
    4709                 :             :     END DO
    4710   [ #  #  #  #  :           0 :     DT_FREE(op%measNoiseG)
             #  #  #  # ]
    4711                 :             :   END IF
    4712         [ #  # ]:           0 :   FREEIF(op%density)
    4713                 :             : !#endif
    4714                 :           0 :   op%ostream        = 0
    4715                 :           0 :   op%istream        = 0
    4716                 :             : 
    4717                 :           0 :   op%sweeps         = 0
    4718                 :           0 :   op%thermalization = 0
    4719                 :           0 :   op%flavors        = 0
    4720                 :             : ! op%endDensity     = 0
    4721                 :           0 :   op%samples        = 0
    4722                 :           0 :   op%beta           = 0.d0
    4723                 :             : !  op%seg_added      = 0.d0
    4724                 :             : !  op%anti_added     = 0.d0
    4725                 :             : !  op%seg_removed    = 0.d0
    4726                 :             : !  op%anti_removed   = 0.d0
    4727                 :             : !  op%seg_sign       = 0.d0
    4728                 :             : !  op%anti_sign      = 0.d0
    4729         [ #  # ]:           0 :   op%stats          = 0.d0
    4730                 :           0 :   op%swap           = 0.d0
    4731                 :             : 
    4732                 :             : 
    4733                 :           0 :   op%set  = .FALSE.
    4734                 :           0 :   op%done = .FALSE.
    4735                 :           0 :   op%init = .FALSE.
    4736                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_destroy
    4737                 :             : !!***
    4738                 :             : 
    4739                 :             : !!****f* ABINIT/m_CtqmcoffdiagComplex/CtqmcoffdiagComplex_setMagmom
    4740                 :             : !! NAME
    4741                 :             : !!  CtqmcoffdiagComplex_setMagmom
    4742                 :             : !!
    4743                 :             : !! FUNCTION
    4744                 :             : !!  set the Magnetic moment matrix for susceptibility
    4745                 :             : !!
    4746                 :             : !! COPYRIGHT
    4747                 :             : !!  Copyright (C) 2013-2025 ABINIT group (F. Gendron)
    4748                 :             : !!  This file is distributed under the terms of the
    4749                 :             : !!  GNU General Public License, see ~abinit/COPYING
    4750                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
    4751                 :             : !!
    4752                 :             : !! INPUTS
    4753                 :             : !!
    4754                 :             : !! OUTPUT
    4755                 :             : !!
    4756                 :             : !! SIDE EFFECTS
    4757                 :             : !!
    4758                 :             : !! NOTES
    4759                 :             : !!
    4760                 :             : !! PARENTS
    4761                 :             : !!  Will be filled automatically by the parent script
    4762                 :             : !!
    4763                 :             : !! CHILDREN
    4764                 :             : !!  Will be filled automatically by the parent script
    4765                 :             : !!
    4766                 :             : !! SOURCE
    4767                 :             : 
    4768   [ #  #  #  #  :           0 : SUBROUTINE CtqmcoffdiagComplex_setMagmom(op,Magmom_orb, Magmom_spin, Magmom_tot)
                   #  # ]
    4769                 :             : 
    4770                 :             : !Arguments ------------------------------------
    4771                 :             :   TYPE(CtqmcoffdiagComplex), INTENT(INOUT) ::op
    4772                 :             :   DOUBLE PRECISION, DIMENSION(:,:), INTENT(IN) :: Magmom_orb
    4773                 :             :   DOUBLE PRECISION, DIMENSION(:,:), INTENT(IN) :: Magmom_spin
    4774                 :             :   DOUBLE PRECISION, DIMENSION(:,:), INTENT(IN) :: Magmom_tot
    4775                 :             : !Local variables ------------------------------
    4776                 :             : !  INTEGER :: iflavor1,iflavor2
    4777                 :             : 
    4778                 :             :  ! do iflavor1=1,10
    4779                 :             :  !   do iflavor2=1,10
    4780                 :             :  !      if(iflavor1==iflavor2) THEN
    4781                 :             :  !        write(6,*) iflavor1, iflavor2, Magmom(iflavor1,iflavor2)
    4782                 :             :  !      end if
    4783                 :             :  !   end do
    4784                 :             :  ! end do
    4785                 :             : 
    4786   [ #  #  #  # ]:           0 :   IF ( SIZE(Magmom_orb) .NE. op%flavors*op%flavors ) &
    4787                 :           0 :     CALL ERROR("CtqmcoffdiagComplex_setU : Wrong Magnetic Moment matrix (size)        ")
    4788                 :             : 
    4789                 :           0 :   CALL ImpurityOperator_setMagmommat(op%Impurity, Magmom_orb, Magmom_spin, Magmom_tot)
    4790                 :             : 
    4791                 :           0 : END SUBROUTINE CtqmcoffdiagComplex_setMagmom
    4792                 :             : !!***
    4793                 :             : 
    4794   [ #  #  #  #  :           0 : END MODULE m_CtqmcoffdiagComplex
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
    4795                 :             : !!***
    4796                 :             : 
    4797                 :             : #undef CTQMC_SLICE1
    4798                 :             : #undef CTQMC_SLICE2
    4799                 :             : #undef CTQMC_SEGME
    4800                 :             : #undef CTQMC_ANTIS
    4801                 :             : #undef CTQMC_ADDED
    4802                 :             : #undef CTQMC_REMOV
    4803                 :             : #undef CTQMC_DETSI
        

Generated by: LCOV version 2.3-1