LCOV - code coverage report
Current view: top level - src/62_ctqmc - m_Stat.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 94.3 % 53 50
Test Date: 2026-09-20 15:27:41 Functions: 100.0 % 6 6

            Line data    Source code
       1              : 
       2              : #if defined HAVE_CONFIG_H
       3              : #include "config.h"
       4              : #endif
       5              : !!****m* ABINIT/m_Stat
       6              : !! NAME
       7              : !!  m_Stat
       8              : !!
       9              : !! FUNCTION
      10              : !!  FIXME: add description.
      11              : !!
      12              : !! COPYRIGHT
      13              : !!  Copyright (C) 2013-2026 ABINIT group (J. Bieder)
      14              : !!  This file is distributed under the terms of the
      15              : !!  GNU General Public License, see ~abinit/COPYING
      16              : !!  or http://www.gnu.org/copyleft/gpl.txt .
      17              : !!
      18              : !! NOTES
      19              : !!
      20              : !! SOURCE
      21              : 
      22              : #include "defs.h"
      23              : MODULE m_Stat
      24              : USE m_global
      25              : IMPLICIT NONE
      26              : 
      27              : PRIVATE
      28              : 
      29              : PUBLIC :: Stat_average
      30              : PUBLIC :: Stat_variance
      31              : PUBLIC :: Stat_coVariance
      32              : PUBLIC :: Stat_deviation
      33              : PUBLIC :: Stat_linearReg
      34              : PUBLIC :: Stat_powerReg
      35              : 
      36              : CONTAINS
      37              : !!***
      38              : 
      39          272 : DOUBLE PRECISION FUNCTION Stat_average(tab)
      40              : 
      41              :   DOUBLE PRECISION, DIMENSION(:), INTENT(IN) :: tab
      42              :   !INTEGER :: sizet
      43              : 
      44              :   !sizet = SIZE(tab)
      45          272 :   Stat_average = 0.d0
      46              :   !IF ( sizet .GT. 0 ) &
      47       344064 :   Stat_average = SUM(tab)/DBLE(SIZE(tab))
      48          272 : END FUNCTION Stat_average
      49              : !!***
      50              : 
      51          136 : DOUBLE PRECISION FUNCTION Stat_variance(tab)
      52              : 
      53              :   DOUBLE PRECISION, DIMENSION(:), INTENT(IN) :: tab
      54              :   INTEGER                                    :: sizet
      55              :   INTEGER                                    :: i
      56              :   DOUBLE PRECISION                           :: average
      57              :   DOUBLE PRECISION                           :: tab2
      58              : 
      59          136 :   sizet = SIZE(tab)
      60          136 :   Stat_variance = 0.d0
      61              : 
      62              :   !IF ( sizet .GT. 0 ) THEN
      63          136 :     average = Stat_average(tab)
      64       343656 :     DO i = 1, sizet
      65       343520 :       tab2 = tab(i)-average
      66       343520 :       tab2 = tab2 * tab2
      67       343656 :       Stat_variance = Stat_variance + tab2
      68              :     END DO
      69          136 :     Stat_variance = Stat_variance / DBLE(sizet)
      70              :   !ELSE
      71              :   !  Stat_variance = 0.d-16
      72              :   !END IF
      73          136 : END FUNCTION Stat_variance
      74              : !!***
      75              : 
      76           34 : DOUBLE PRECISION FUNCTION Stat_coVariance(tab1, tab2)
      77              : 
      78              :   DOUBLE PRECISION, DIMENSION(:), INTENT(IN) :: tab1
      79              :   DOUBLE PRECISION, DIMENSION(:), INTENT(IN) :: tab2
      80              :   INTEGER                                    :: size1
      81              :   INTEGER                                    :: size2
      82              :   INTEGER                                    :: i
      83              :   DOUBLE PRECISION                           :: average1
      84              :   DOUBLE PRECISION                           :: average2
      85              :   DOUBLE PRECISION                           :: tmp
      86              : 
      87           34 :   size1    = SIZE(tab1)
      88           34 :   size2    = SIZE(tab2)
      89              : 
      90           34 :   IF ( size1 .NE. size2 ) &
      91            0 :     CALL ERROR("Stat_coVariance : Array sizes mismatch            ")
      92              : 
      93           34 :   average1 = Stat_average(tab1)
      94           34 :   average2 = Stat_average(tab2)
      95           34 :   Stat_coVariance = 0.d0
      96              : 
      97              :   !IF ( size1 .GT. 0 ) THEN
      98          102 :     DO i = 1, size1
      99           68 :       tmp = (tab1(i)-average1)*(tab2(i)-average2)
     100          102 :       Stat_coVariance = Stat_coVariance + tmp
     101              :     END DO
     102           34 :     Stat_coVariance = Stat_coVariance / DBLE(size1)
     103              :   !ELSE
     104              :   !  Stat_coVariance = 0.d-16
     105              :   !END IF
     106           34 : END FUNCTION Stat_coVariance
     107              : !!***
     108              : 
     109          102 : DOUBLE PRECISION FUNCTION Stat_deviation(tab1)
     110              : 
     111              :   DOUBLE PRECISION, DIMENSION(:), INTENT(IN) :: tab1
     112              : 
     113          102 :   Stat_deviation = SQRT(Stat_variance(tab1))
     114          102 : END FUNCTION Stat_deviation
     115              : !!***
     116              : 
     117              : !!****f* ABINIT/m_Stat/Stat_linearReg
     118              : !! NAME
     119              : !!  Stat_linearReg
     120              : !!
     121              : !! FUNCTION
     122              : !!  FIXME: add description.
     123              : !!
     124              : !! COPYRIGHT
     125              : !!  Copyright (C) 2013-2026 ABINIT group (J. Bieder)
     126              : !!  This file is distributed under the terms of the
     127              : !!  GNU General Public License, see ~abinit/COPYING
     128              : !!  or http://www.gnu.org/copyleft/gpl.txt .
     129              : !!
     130              : !! INPUTS
     131              : !!  argin(sizein)=description
     132              : !!
     133              : !! OUTPUT
     134              : !!  argout(sizeout)=description
     135              : !!
     136              : !! SIDE EFFECTS
     137              : !!
     138              : !! NOTES
     139              : !!
     140              : !! SOURCE
     141              : 
     142           34 : SUBROUTINE Stat_linearReg(tabX, tabY, a, b, R)
     143              : !Arguments ------------------------------------
     144              :   DOUBLE PRECISION, DIMENSION(:), INTENT(IN ) :: tabX
     145              :   DOUBLE PRECISION, DIMENSION(:), INTENT(IN ) :: tabY
     146              :   DOUBLE PRECISION              , INTENT(OUT) :: a
     147              :   DOUBLE PRECISION              , INTENT(OUT) :: b
     148              :   DOUBLE PRECISION              , INTENT(OUT) :: R
     149              :   DOUBLE PRECISION                            :: coVar
     150              :   DOUBLE PRECISION                            :: Var
     151              : 
     152           34 :   coVar = Stat_coVariance(tabX, tabY)
     153           34 :   Var   = Stat_variance(tabX)
     154           34 :   a = coVar / var
     155           34 :   b = Stat_average(tabY) - a* Stat_average(tabX)
     156           34 :   R = ABS(a * SQRT(var) / Stat_deviation(tabY))
     157           34 : END SUBROUTINE Stat_linearReg
     158              : !!***
     159              : 
     160              : !!****f* ABINIT/m_Stat/Stat_powerReg
     161              : !! NAME
     162              : !!  Stat_powerReg
     163              : !!
     164              : !! FUNCTION
     165              : !!  FIXME: add description.
     166              : !!
     167              : !! COPYRIGHT
     168              : !!  Copyright (C) 2013-2026 ABINIT group (J. Bieder)
     169              : !!  This file is distributed under the terms of the
     170              : !!  GNU General Public License, see ~abinit/COPYING
     171              : !!  or http://www.gnu.org/copyleft/gpl.txt .
     172              : !!
     173              : !! INPUTS
     174              : !!  argin(sizein)=description
     175              : !!
     176              : !! OUTPUT
     177              : !!  argout(sizeout)=description
     178              : !!
     179              : !! SIDE EFFECTS
     180              : !!
     181              : !! NOTES
     182              : !!
     183              : !! SOURCE
     184              : 
     185           34 : SUBROUTINE Stat_powerReg(tabX, tabY, a, b, R)
     186              : !Arguments ------------------------------------
     187              :   DOUBLE PRECISION, DIMENSION(:), INTENT(IN ) :: tabX
     188              :   DOUBLE PRECISION, DIMENSION(:), INTENT(IN ) :: tabY
     189              :   DOUBLE PRECISION              , INTENT(OUT) :: a
     190              :   DOUBLE PRECISION              , INTENT(OUT) :: b
     191              :   DOUBLE PRECISION              , INTENT(OUT) :: R
     192              :   INTEGER                                     :: size1
     193              :   DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: tab1
     194              :   DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: tab2
     195              :   INTEGER :: i
     196              : 
     197           34 :   size1 = SIZE(tabX)
     198           34 :   IF ( size1 .NE. SIZE(tabY) ) &
     199            0 :     CALL ERROR("Stat_powerReg : Array sizes mismatch              ")
     200              : 
     201              :   FREEIF(tab1)
     202              :   FREEIF(tab2)
     203          102 :   MALLOC(tab1,(1:size1))
     204           68 :   MALLOC(tab2,(1:size1))
     205              : 
     206              : 
     207              : !  IF ( ISNAN(a) .OR. ISNAN(b) ) THEN
     208          102 :     DO i = 1, size1
     209           68 :       tab1(i) = LOG(tabX(i))
     210          102 :       IF ( tabY(i) .NE. 0.d0 ) THEN
     211           68 :         tab2(i) = LOG(tabY(i))
     212              :       ELSE
     213            0 :         tab2(i) = LOG(1.d-16)
     214              :       END IF
     215              :       !WRITE(92,'(4E22.14)') tabX(i), tab1(i), tabY(i), tab2(i)
     216              :     END DO
     217              :     !WRITE(92,*)
     218              :   !END IF
     219           34 :   CALL Stat_linearReg(tab1, tab2, b, a, R)
     220           34 :   a = EXP(a)
     221           34 :   FREE(tab1)
     222           34 :   FREE(tab2)
     223           34 : END SUBROUTINE Stat_powerReg
     224              : !!***
     225              : 
     226              : DOUBLE PRECISION FUNCTION Stat_simpson(func, a, b, N)
     227              : 
     228              :   DOUBLE PRECISION, DIMENSION(:), POINTER :: func     !vz_i
     229              :   DOUBLE PRECISION                       , INTENT(IN) :: a
     230              :   DOUBLE PRECISION                       , INTENT(IN) :: b
     231              :   INTEGER                                , INTENT(IN) :: N
     232              :   INTEGER :: i
     233              :   INTEGER :: x0
     234              :   INTEGER :: x1
     235              :   INTEGER :: x2
     236              :   DOUBLE PRECISION :: dtau
     237              :   DOUBLE PRECISION :: J
     238              : 
     239              :   dtau = (b-a)/DBLE(N-1)
     240              :   J=0.d0
     241              :   x2 = 1
     242              :   x1 = 0
     243              :   DO i = 1, N-2, 2
     244              :     x0 = x2
     245              :     x1 = x1 + 2
     246              :     x2 = x0 + 2
     247              :     J = J + func(x0) + 4.d0*func(x1) + func(x2)
     248              :   END DO
     249              :   J = J * dtau / 3.d0
     250              :   Stat_simpson = J
     251              : END FUNCTION Stat_simpson
     252              : !!***
     253              : 
     254              : END  MODULE m_Stat
        

Generated by: LCOV version 2.3-1