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-11-10 11:05:29 Functions: 100.0 % 6 6
Branches: 57.1 % 56 32

             Branch data     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