LCOV - code coverage report
Current view: top level - src/67_common - m_vtorhotf.F90 (source / functions) Coverage Total Hit
Test: coverage.info Lines: 84.5 % 103 87
Test Date: 2026-11-11 12:21:01 Functions: 100.0 % 5 5
Branches: 58.3 % 96 56

             Branch data     Line data    Source code
       1                 :             : !!****m* ABINIT/m_vtorhotf
       2                 :             : !! NAME
       3                 :             : !!  m_vtorhotf
       4                 :             : !!
       5                 :             : !! FUNCTION
       6                 :             : !! Computes the new density from a fixed potential (vtrial) using the Thomas-Fermi functional
       7                 :             : !!
       8                 :             : !! COPYRIGHT
       9                 :             : !!  Copyright (C) 1998-2026 ABINIT group (DCA, XG, GMR, MF, AR, MM)
      10                 :             : !!  This file is distributed under the terms of the
      11                 :             : !!  GNU General Public License, see ~abinit/COPYING
      12                 :             : !!  or http://www.gnu.org/copyleft/gpl.txt .
      13                 :             : !!
      14                 :             : !! SOURCE
      15                 :             : 
      16                 :             : #if defined HAVE_CONFIG_H
      17                 :             : #include "config.h"
      18                 :             : #endif
      19                 :             : 
      20                 :             : #include "abi_common.h"
      21                 :             : 
      22                 :             : module m_vtorhotf
      23                 :             : 
      24                 :             :  use defs_basis
      25                 :             :  use m_abicore
      26                 :             :  use m_errors
      27                 :             :  use m_xmpi
      28                 :             :  use m_dtset
      29                 :             : 
      30                 :             :  use defs_abitypes, only : MPI_type
      31                 :             :  use m_time,     only : timab
      32                 :             :  use m_spacepar,  only : symrhg
      33                 :             : 
      34                 :             :  implicit none
      35                 :             : 
      36                 :             :  private
      37                 :             : !!***
      38                 :             : 
      39                 :             :  public :: vtorhotf
      40                 :             : !!***
      41                 :             : 
      42                 :             : contains
      43                 :             : !!***
      44                 :             : 
      45                 :             : !!****f* ABINIT/vtorhotf
      46                 :             : !! NAME
      47                 :             : !! vtorhotf
      48                 :             : !!
      49                 :             : !! FUNCTION
      50                 :             : !! This routine computes the new density from a fixed potential (vtrial)
      51                 :             : !! using the Thomas-Fermi functional
      52                 :             : !!
      53                 :             : !! INPUTS
      54                 :             : !!  dtset <type(dataset_type)>=all input variables for this dataset
      55                 :             : !!  gprimd(3,3)=dimensional reciprocal space primitive translations
      56                 :             : !!  irrzon(nfft**(1-1/nsym),2,(nspden/nsppol)-3*(nspden/4))=irreducible zone data
      57                 :             : !!  mpi_enreg=information about MPI parallelization
      58                 :             : !!  natom=number of atoms in cell.
      59                 :             : !!  nfft=number of fft grid points
      60                 :             : !!  nspden=number of spin-density components
      61                 :             : !!  nsppol=1 for unpolarized, 2 for spin-polarized
      62                 :             : !!  nsym=number of symmetry elements in space group
      63                 :             : !!  phnons(2,nfft**(1-1/nsym),(nspden/nsppol)-3*(nspden/4))=nonsymmorphic translation phases
      64                 :             : !!  gprimd(3,3)=dimensional real space primitive translations
      65                 :             : !!  ucvol=unit cell volume in bohr**3.
      66                 :             : !!  vtrial(nfft,nspden)=INPUT Vtrial(r).
      67                 :             : !!
      68                 :             : !! OUTPUT
      69                 :             : !!  ek=kinetic energy part of total energy.
      70                 :             : !!  enlx=nonlocal psp + potential Fock ACE part of total energy.
      71                 :             : !!  entropy=entropy due to the occupation number smearing (if metal)
      72                 :             : !!  fermie=fermi energy (Hartree)
      73                 :             : !!  grnl(3*natom)=stores grads of nonlocal energy wrt length scales
      74                 :             : !!   (3x3 tensor) and grads wrt atomic coordinates (3*natom)
      75                 :             : !!
      76                 :             : !! SIDE EFFECTS
      77                 :             : !!  rhog(2,nfft)=array for Fourier transform of electron density
      78                 :             : !!  rhor(nfft,nspden)=array for electron density in electrons/bohr**3.
      79                 :             : !!
      80                 :             : !! SOURCE
      81                 :             : 
      82                 :         277 : subroutine vtorhotf(dtset,ek,enlx,entropy,fermie,gprimd,grnl,&
      83                 :         277 : &  irrzon,mpi_enreg,natom,nfft,nspden,nsppol,nsym,phnons,rhog,rhor,rprimd,ucvol,vtrial)
      84                 :             : 
      85                 :             : !Arguments ------------------------------------
      86                 :             : !scalars
      87                 :             :  integer,intent(in) :: natom,nfft,nspden,nsppol,nsym
      88                 :             :  real(dp),intent(in) :: ucvol
      89                 :             :  real(dp),intent(out) :: ek,enlx,entropy,fermie
      90                 :             :  type(MPI_type),intent(in) :: mpi_enreg
      91                 :             :  type(dataset_type),intent(in) :: dtset
      92                 :             : !arrays
      93                 :             :  integer,intent(in) :: irrzon((dtset%ngfft(1)*dtset%ngfft(1)*dtset%ngfft(1))**(1-1/nsym),2,(nspden/nsppol)-3*(nspden/4))
      94                 :             :  real(dp),intent(in) :: gprimd(3,3)
      95                 :             :  real(dp),intent(in) :: phnons(2,(dtset%ngfft(1)*dtset%ngfft(1)*dtset%ngfft(1))**(1-1/nsym),(nspden/nsppol)-3*(nspden/4))
      96                 :             :  real(dp),intent(in) :: rprimd(3,3),vtrial(nfft,nspden)
      97                 :             :  real(dp),intent(inout) :: rhog(2,nfft),rhor(nfft,nspden)
      98                 :             :  real(dp),intent(out) :: grnl(3*natom)
      99                 :             : 
     100                 :             : !Local variables-------------------------------
     101                 :             : !scalars
     102                 :             :  integer,parameter :: jdichomax=20,level=111
     103                 :             :  integer :: i1,i2,i3,ierr,ifft,ii,ir,iscf,jdicho
     104                 :             :  integer :: me_fft,n1,n2,n3,nfftot,nproc_fft,prtvol
     105                 :             :  real(dp),save :: cktf,fermie_tol,nelect_mid
     106                 :             :  real(dp) :: dnelect_mid_dx,dxrtnewt,eektemp,eektf,feektemp,feektf
     107                 :             :  real(dp) :: rtnewt,sum_rhor_mid,sum_rhor_middx
     108                 :             :  logical,save :: lfirst_time_tf=.true.
     109                 :             :  logical :: lnewtonraphson
     110                 :             :  character(len=500) :: message
     111                 :             : !arrays
     112                 :             :  real(dp) :: tsec(2)
     113                 :         277 :  real(dp),allocatable :: betamumoinsV(:),rhor_mid(:),rhor_middx(:)
     114                 :             : 
     115                 :             : ! *************************************************************************
     116                 :             : 
     117                 :             : !Keep track of total time spent in vtorho
     118                 :         277 :  call timab(21,1,tsec)
     119                 :             : 
     120                 :             : !Structured debugging if prtvol==-level
     121                 :         277 :  prtvol=dtset%prtvol
     122         [ -  + ]:         277 :  if(prtvol==-level)then
     123   [ #  #  #  # ]:           0 :    write(message,'(80a,a,a)') ('=',ii=1,80),ch10,' vtorho : enter '
     124                 :           0 :    call wrtout(std_out,message,'COLL')
     125                 :             :  end if
     126                 :             : 
     127                 :         277 :  n1=dtset%ngfft(1) ; n2=dtset%ngfft(2) ; n3=dtset%ngfft(3)
     128                 :         277 :  me_fft=dtset%ngfft(11) ; nproc_fft=dtset%ngfft(10)
     129                 :         277 :  iscf=dtset%iscf
     130                 :             : !Debugging : print vtrial and rhor
     131         [ -  + ]:         277 :  if(prtvol==-level)then
     132                 :           0 :    write(message,'(a)') '   ir              vtrial(ir)     rhor(ir) '
     133                 :           0 :    call wrtout(std_out,message,'COLL')
     134         [ #  # ]:           0 :    do ir=1,nfft
     135                 :             : !    if(ir<=11 .or. mod(ir,301)==0 )then
     136                 :           0 :      i3=(ir-1)/n1/(n2/nproc_fft)
     137                 :           0 :      i2=(ir-1-i3*n1*n2/nproc_fft)/n1
     138                 :           0 :      i1=ir-1-i3*n1*n2/nproc_fft-(i2-me_fft)*n1
     139                 :           0 :      write(message,'(i5,3i3,a,2d13.6)')ir,i1,i2,i3,' ',vtrial(ir,1),rhor(ir,1)
     140                 :           0 :      call wrtout(std_out,message,'COLL')
     141         [ #  # ]:           0 :      if(nspden>=2)then
     142                 :           0 :        write(message,'(a,2d13.6)')'               ',vtrial(ir,2),rhor(ir,2)
     143                 :           0 :        call wrtout(std_out,message,'COLL')
     144                 :             :      end if
     145                 :             : !    end if
     146                 :             :    end do
     147                 :             :  end if
     148                 :             : 
     149                 :         277 :  ek=zero
     150                 :         277 :  enlx=zero
     151         [ +  + ]:       26869 :  grnl(:)=zero
     152                 :             : 
     153                 :             : !Initialize rhor if needed
     154   [ +  -  +  +  :    12255962 :  if(iscf>0) rhor(:,:)=zero
                   +  + ]
     155                 :             : 
     156                 :             : !call Thomas-Fermi for the density
     157                 :         277 :  call tf
     158                 :             : !Compute energy terms
     159                 :         277 :  call tfek
     160                 :             : 
     161   [ -  +  -  +  :         277 :  call timab(21,2,tsec)
                   -  + ]
     162                 :             : !End thomas fermi
     163                 :             : 
     164                 :             :  contains
     165                 :             : !!***
     166                 :             : 
     167                 :             : !!****f* vtorhotf/tf
     168                 :             : !! NAME
     169                 :             : !! tf
     170                 :             : !!
     171                 :             : !! FUNCTION
     172                 :             : !!
     173                 :             : !! INPUTS
     174                 :             : !!
     175                 :             : !! OUTPUT
     176                 :             : !!
     177                 :             : !! SOURCE
     178                 :         277 :   subroutine tf()
     179                 :             : 
     180                 :             : ! *************************************************************************
     181                 :             : 
     182   [ -  +  +  -  :         831 :    ABI_MALLOC(rhor_mid,(nfft))
          +  -  +  -  -  
             +  -  +  -  
                      + ]
     183   [ -  +  +  -  :         831 :    ABI_MALLOC(rhor_middx,(nfft))
          +  -  +  -  -  
             +  -  +  -  
                      + ]
     184                 :         277 :    fermie_tol=1.e-10_dp
     185                 :         277 :    cktf=one/two/pi**2*(two*dtset%tphysel)**1.5_dp
     186                 :             : 
     187                 :             : !  Should be made an input variable, if TF really needed for production
     188                 :             : !  rtnewt=dtset%userra
     189                 :         277 :    rtnewt=zero
     190                 :             : 
     191                 :             : !  Newton Raphson
     192         [ +  + ]:         277 :    if (lfirst_time_tf) then
     193                 :           4 :      lfirst_time_tf=.false.
     194                 :             :    end if
     195                 :         277 :    jdicho=0
     196                 :         277 :    lnewtonraphson=.false.
     197         [ +  + ]:        4641 :    do while (.not.lnewtonraphson)
     198                 :        2182 :      jdicho=jdicho+1
     199                 :             : !    do ifft=1,nfft
     200                 :             : !    rhor_mid(ifft)=cktf*zfermi12((rtnewt-vtrial(ifft,1))/dtset%tphysel)
     201                 :             : !    rhor_middx(ifft)=cktf*zfermim12((rtnewt-vtrial(ifft,1))/dtset%tphysel)
     202                 :             : !    end do
     203                 :             :      call fm12a1t(cktf,rtnewt,dtset%tphysel,vtrial(:,1),rhor_middx,rhor_mid,&
     204                 :        2182 : &     nfft)
     205         [ +  + ]:    97127446 :      sum_rhor_mid=sum(rhor_mid(:))
     206         [ +  + ]:    97127446 :      sum_rhor_middx=sum(rhor_middx(:))
     207                 :             :      call xmpi_sum(sum_rhor_mid,mpi_enreg%comm_fft ,ierr)
     208                 :             :      call xmpi_sum(sum_rhor_middx,mpi_enreg%comm_fft ,ierr)
     209                 :        2182 :      nelect_mid=sum_rhor_mid*ucvol/(nfft*nproc_fft)-dtset%nelect
     210                 :        2182 :      dnelect_mid_dx=sum_rhor_middx*ucvol/(nfft*nproc_fft)/dtset%tphysel/two
     211                 :        2182 :      dxrtnewt=nelect_mid/dnelect_mid_dx
     212                 :        2182 :      rtnewt=rtnewt-dxrtnewt
     213         [ +  + ]:        2182 :      if (abs(nelect_mid) < fermie_tol/2._dp) then
     214                 :         277 :        lnewtonraphson=.true.
     215                 :             :      end if
     216         [ +  - ]:        2459 :      if (jdicho > jdichomax) then
     217                 :           0 :        ABI_ERROR('NEWTON RAPHSON NOT CONVERGED')
     218                 :             :      end if
     219                 :             :    end do
     220                 :         277 :    fermie=rtnewt
     221         [ +  + ]:    12255685 :    rhor(:,1)=rhor_mid(:)
     222         [ -  + ]:         277 :    ABI_FREE(rhor_mid)
     223         [ -  + ]:         277 :    ABI_FREE(rhor_middx)
     224                 :             : 
     225                 :             : !  DEBUG
     226                 :             : !  write(std_out,*)'fmid,nmid,jdicho',fermie,nelect_mid,jdicho
     227                 :             : !  ENDDEBUG
     228                 :             : 
     229                 :             : !  Compute rhog
     230                 :         277 :    call timab(70,1,tsec)
     231                 :             : 
     232                 :         277 :    nfftot=dtset%ngfft(1)*dtset%ngfft(2)*dtset%ngfft(3)
     233                 :             :    call symrhg(1,gprimd,irrzon,mpi_enreg,nfft,nfftot,dtset%ngfft,nspden,nsppol,nsym,phnons,&
     234                 :         277 : &   rhog,rhor,rprimd,dtset%symafm,dtset%symrel,dtset%tnons)
     235                 :             : 
     236                 :             : !  We now have both rho(r) and rho(G), symmetrized, and if nsppol=2
     237                 :             : !  we also have the spin-up density, symmetrized, in rhor(:,2).
     238                 :             : 
     239                 :         277 :    call timab(70,2,tsec)
     240                 :             : 
     241                 :         277 : end subroutine tf
     242                 :             : !!***
     243                 :             : 
     244                 :             : !!****f* vtorhotf/tfek
     245                 :             : !! NAME
     246                 :             : !! tfek
     247                 :             : !!
     248                 :             : !! FUNCTION
     249                 :             : !! This is the calculation of the kinetic energy for Thomas Fermi
     250                 :             : !! Energy and free energy must be distinguished
     251                 :             : !!
     252                 :             : !! INPUTS
     253                 :             : !!
     254                 :             : !! OUTPUT
     255                 :             : !!
     256                 :             : !! SOURCE
     257                 :             : 
     258                 :         277 :   subroutine tfek()
     259                 :             : 
     260                 :             : ! *************************************************************************
     261                 :             : 
     262   [ -  +  +  -  :         831 :    ABI_MALLOC(betamumoinsV,(nfft))
          +  -  +  -  -  
             +  -  +  -  
                      + ]
     263                 :         277 :    cktf=one/two/pi**2*(two*dtset%tphysel)**1.5_dp
     264                 :         277 :    eektf=zero
     265                 :         277 :    feektf=zero
     266         [ +  + ]:    12255685 :    do ifft=1,nfft
     267                 :             : 
     268                 :             : !    betamumoinsv(ifft)=ifermi12(rhor(ifft,1)/cktf)
     269                 :    12255408 :      betamumoinsv(ifft)=(rtnewt-vtrial(ifft,1))/dtset%tphysel
     270                 :             : !    eektemp=zfermi32(betamumoinsV(ifft))/zfermi12(betamumoinsV(ifft))
     271                 :    12255408 :      eektemp=fp32a1(betamumoinsV(ifft))/rhor(ifft,1)*cktf
     272                 :    12255408 :      feektemp=betamumoinsV(ifft)-two/three*eektemp
     273                 :    12255408 :      feektf=feektf+feektemp*rhor(ifft,1)
     274                 :    12255685 :      eektf=eektf+eektemp*rhor(ifft,1)
     275                 :             :    end do
     276                 :             : !  Init mpi_comm
     277                 :         277 :    call timab(48,1,tsec)
     278                 :             :    call xmpi_sum(eektf,mpi_enreg%comm_fft ,ierr)
     279                 :             :    call xmpi_sum(feektf,mpi_enreg%comm_fft ,ierr)
     280                 :         277 :    call timab(48,2,tsec)
     281                 :         277 :    eektf=eektf*dtset%tphysel
     282                 :         277 :    eektf=eektf*ucvol/dble(nfft*nproc_fft)
     283                 :         277 :    feektf=feektf*dtset%tphysel
     284                 :         277 :    feektf=feektf*ucvol/dble(nfft*nproc_fft)
     285                 :             : !  DEBUG
     286                 :             : !  write(std_out,*)'eektf',eektf
     287                 :             : !  stop ('vtorhotf')
     288                 :             : !  ENDDEBUG
     289                 :         277 :    ek=eektf
     290                 :         277 :    entropy=(eektf-feektf)/dtset%tphysel
     291         [ -  + ]:         277 :    ABI_FREE(betamumoinsV)
     292                 :         277 :  end subroutine tfek
     293                 :             : !!***
     294                 :             : 
     295                 :             : !!****f* ABINIT/zfermim12
     296                 :             : !! NAME
     297                 :             : !! zfermim12
     298                 :             : !!
     299                 :             : !! FUNCTION
     300                 :             : !!..file contains fermi-dirac integral routines:
     301                 :             : !!..
     302                 :             : !!..function zfermim12 does a rational function fit for the order -1/2 integral
     303                 :             : !!..function zfermi12 does a rational function fit for the order 1/2 integral
     304                 :             : !!..function zfermi1 does a rational function fit for the order 1 integral
     305                 :             : !!..function zfermi32 does a rational function fit for the order 3/2 integral
     306                 :             : !!..function zfermi2 does a rational function fit for the order 2 integral
     307                 :             : !!..function zfermi52 does a rational function fit for the order 5/2 integral
     308                 :             : !!..function zfermi3 does a rational function fit for the order 3 integral
     309                 :             : !!..
     310                 :             : !!..function ifermim12 is a rational function fit for the inverse of order -1/2
     311                 :             : !!..function ifermi12 is a rational function fit for the inverse of order 1/2
     312                 :             : !!..function ifermi32 is a rational function fit for the inverse of order 3/2
     313                 :             : !!..function ifermi52 is a rational function fit for the inverse of order 5/2
     314                 :             : !!
     315                 :             : !!..this routine applies a rational function expansion to get the fermi-dirac
     316                 :             : !!..integral of order -1/2 evaluated at x. maximum error is 1.23d-12.
     317                 :             : !!..reference: antia apjs 84,101 1993
     318                 :             : !!
     319                 :             : !! INPUTS
     320                 :             : !!
     321                 :             : !! OUTPUT
     322                 :             : !!
     323                 :             : !! SOURCE
     324                 :             : 
     325                 :             :  function zfermim12(xx)
     326                 :             : 
     327                 :             : !Arguments -------------------------------
     328                 :             :  real(dp), intent(in) :: xx
     329                 :             :  real(dp) :: zfermim12
     330                 :             : 
     331                 :             : !Local variables-------------------------------
     332                 :             :  integer ::  ii,m1,k1,m2,k2
     333                 :             :  real(dp) :: an,a1(12),b1(12),a2(12),b2(12),rn,den,xx1
     334                 :             : !..load the coefficients of the expansion
     335                 :             :  data  an,m1,k1,m2,k2 /-0.5e0_dp, 7, 7, 11, 11/
     336                 :             :  data  (a1(ii),ii=1,8)/ 1.71446374704454e7_dp,    3.88148302324068e7_dp,&
     337                 :             : & 3.16743385304962e7_dp,    1.14587609192151e7_dp,&
     338                 :             : & 1.83696370756153E6_dp,    1.14980998186874e5_dp,&
     339                 :             : & 1.98276889924768e3_dp,    1.0e0_dp/
     340                 :             :  data  (b1(ii),ii=1,8)/ 9.67282587452899e6_dp,    2.87386436731785e7_dp,&
     341                 :             : & 3.26070130734158e7_dp,    1.77657027846367e7_dp,&
     342                 :             : & 4.81648022267831e6_dp,    6.13709569333207e5_dp,&
     343                 :             : & 3.13595854332114e4_dp,    4.35061725080755e2_dp/
     344                 :             :  data (a2(ii),ii=1,12)/-4.46620341924942e-15_dp, -1.58654991146236e-12_dp,&
     345                 :             : & -4.44467627042232e-10_dp, -6.84738791621745e-8_dp,&
     346                 :             : & -6.64932238528105e-6_dp,  -3.69976170193942e-4_dp,&
     347                 :             : & -1.12295393687006e-2_dp,  -1.60926102124442e-1_dp,&
     348                 :             : & -8.52408612877447e-1_dp,  -7.45519953763928e-1_dp,&
     349                 :             : & 2.98435207466372e0_dp,    1.0e0_dp/
     350                 :             :  data (b2(ii),ii=1,12)/-2.23310170962369e-15_dp, -7.94193282071464e-13_dp,&
     351                 :             : & -2.22564376956228e-10_dp, -3.43299431079845e-8_dp,&
     352                 :             : & -3.33919612678907e-6_dp,  -1.86432212187088e-4_dp,&
     353                 :             : & -5.69764436880529e-3_dp,  -8.34904593067194e-2_dp,&
     354                 :             : & -4.78770844009440e-1_dp,  -4.99759250374148e-1_dp,&
     355                 :             : & 1.86795964993052e0_dp,    4.16485970495288e-1_dp/
     356                 :             : 
     357                 :             : ! *************************************************************************
     358                 :             : 
     359                 :             :  if (xx .lt. 2.0e0_dp) then
     360                 :             :    xx1 = exp(xx)
     361                 :             :    rn = xx1 + a1(m1)
     362                 :             :    do ii=m1-1,1,-1
     363                 :             :      rn = rn*xx1 + a1(ii)
     364                 :             :    end do
     365                 :             :    den = b1(k1+1)
     366                 :             :    do ii=k1,1,-1
     367                 :             :      den = den*xx1 + b1(ii)
     368                 :             :    end do
     369                 :             :    zfermim12 = xx1 * rn/den
     370                 :             : !  ..
     371                 :             :  else
     372                 :             :    xx1 = one/(xx*xx)
     373                 :             :    rn = xx1 + a2(m2)
     374                 :             :    do ii=m2-1,1,-1
     375                 :             :      rn = rn*xx1 + a2(ii)
     376                 :             :    end do
     377                 :             :    den = b2(k2+1)
     378                 :             :    do ii=k2,1,-1
     379                 :             :      den = den*xx1 + b2(ii)
     380                 :             :    end do
     381                 :             :    zfermim12 = sqrt(xx)*rn/den
     382                 :             :  end if
     383                 :             : 
     384                 :             : end function zfermim12
     385                 :             : !!***
     386                 :             : 
     387                 :             : !!****f* ABINIT/zfermi12
     388                 :             : !! NAME
     389                 :             : !! zfermi12
     390                 :             : !!
     391                 :             : !! FUNCTION
     392                 :             : !!
     393                 :             : !! INPUTS
     394                 :             : !!
     395                 :             : !! OUTPUT
     396                 :             : !!
     397                 :             : !! SOURCE
     398                 :             : 
     399                 :             :  function zfermi12(xx)
     400                 :             : !..
     401                 :             : !..this routine applies a rational function expansion to get the fermi-dirac
     402                 :             : !..integral of order 1/2 evaluated at x. maximum error is 5.47d-13.
     403                 :             : !..reference: antia apjs 84,101 1993
     404                 :             : !..
     405                 :             : !..declare
     406                 :             : 
     407                 :             : !Arguments -------------------------------
     408                 :             :  real(dp), intent(in) :: xx
     409                 :             :  real(dp):: zfermi12
     410                 :             : 
     411                 :             : !Local variables-------------------------------
     412                 :             :  integer ::         ii,m1,k1,m2,k2
     413                 :             :  real(dp) :: an,a1(12),b1(12),a2(12),b2(12),rn,den,xx1
     414                 :             : 
     415                 :             : !..load the coefficients of the expansion
     416                 :             :  data  an,m1,k1,m2,k2 /0.5e0_dp, 7, 7, 10, 11/
     417                 :             :  data  (a1(ii),ii=1,8)/5.75834152995465e6_dp,   1.30964880355883e7_dp,&
     418                 :             : & 1.07608632249013e7_dp,   3.93536421893014e6_dp,&
     419                 :             : & 6.42493233715640e5_dp,   4.16031909245777e4_dp,&
     420                 :             : & 7.77238678539648e2_dp,   1.0e0_dp/
     421                 :             :  data  (b1(ii),ii=1,8)/6.49759261942269e6_dp,   1.70750501625775e7_dp,&
     422                 :             : & 1.69288134856160e7_dp,   7.95192647756086e6_dp,&
     423                 :             : & 1.83167424554505e6_dp,   1.95155948326832e5_dp,&
     424                 :             : & 8.17922106644547e3_dp,   9.02129136642157e1_dp/
     425                 :             :  data (a2(ii),ii=1,11)/4.85378381173415e-14_dp, 1.64429113030738e-11_dp,&
     426                 :             : & 3.76794942277806e-9_dp,  4.69233883900644e-7_dp,&
     427                 :             : & 3.40679845803144e-5_dp,  1.32212995937796e-3_dp,&
     428                 :             : & 2.60768398973913e-2_dp,  2.48653216266227e-1_dp,&
     429                 :             : & 1.08037861921488e0_dp,   1.91247528779676e0_dp,&
     430                 :             : & 1.0e0_dp/
     431                 :             :  data (b2(ii),ii=1,12)/7.28067571760518e-14_dp, 2.45745452167585e-11_dp,&
     432                 :             : & 5.62152894375277e-9_dp,  6.96888634549649e-7_dp,&
     433                 :             : & 5.02360015186394e-5_dp,  1.92040136756592e-3_dp,&
     434                 :             : & 3.66887808002874e-2_dp,  3.24095226486468e-1_dp,&
     435                 :             : & 1.16434871200131e0_dp,   1.34981244060549e0_dp,&
     436                 :             : & 2.01311836975930e-1_dp, -2.14562434782759e-2_dp/
     437                 :             : 
     438                 :             : ! *************************************************************************
     439                 :             : 
     440                 :             :  if (xx .lt. two) then
     441                 :             :    xx1 = exp(xx)
     442                 :             :    rn = xx1 + a1(m1)
     443                 :             :    do ii=m1-1,1,-1
     444                 :             :      rn = rn*xx1 + a1(ii)
     445                 :             :    end do
     446                 :             :    den = b1(k1+1)
     447                 :             :    do ii=k1,1,-1
     448                 :             :      den = den*xx1 + b1(ii)
     449                 :             :    end do
     450                 :             :    zfermi12 = xx1 * rn/den
     451                 :             : 
     452                 :             :  else
     453                 :             :    xx1 = one/(xx*xx)
     454                 :             :    rn = xx1 + a2(m2)
     455                 :             :    do ii=m2-1,1,-1
     456                 :             :      rn = rn*xx1 + a2(ii)
     457                 :             :    end do
     458                 :             :    den = b2(k2+1)
     459                 :             :    do ii=k2,1,-1
     460                 :             :      den = den*xx1 + b2(ii)
     461                 :             :    end do
     462                 :             :    zfermi12 = xx*sqrt(xx)*rn/den
     463                 :             :  end if
     464                 :             : 
     465                 :             : end function zfermi12
     466                 :             : !!***
     467                 :             : 
     468                 :             : !!****f* ABINIT/zfermi1
     469                 :             : !! NAME
     470                 :             : !! zfermi1
     471                 :             : !!
     472                 :             : !! FUNCTION
     473                 :             : !!
     474                 :             : !! INPUTS
     475                 :             : !!
     476                 :             : !! OUTPUT
     477                 :             : !!
     478                 :             : !! SOURCE
     479                 :             : 
     480                 :             :  function zfermi1(xx)
     481                 :             : !..
     482                 :             : !..this routine applies a rational function expansion to get the fermi-dirac
     483                 :             : !..integral of order 1 evaluated at x. maximum error is 1.0e-8.
     484                 :             : !..reference: antia  priv comm. 11sep94
     485                 :             : !..
     486                 :             : !..declare
     487                 :             : 
     488                 :             : !Arguments -------------------------------
     489                 :             :  real(dp), intent(in) :: xx
     490                 :             :  real(dp):: zfermi1
     491                 :             : !Local variables-------------------------------
     492                 :             :  integer ::  ii,m1,k1,m2,k2
     493                 :             :  real(dp) :: an,a1(12),b1(12),a2(12),b2(12),rn,den,xx1
     494                 :             : 
     495                 :             : !..load the coefficients of the expansion
     496                 :             :  data  an,m1,k1,m2,k2 /1.0_dp, 7, 4, 9, 5/
     497                 :             :  data  (a1(ii),ii=1,8)/-7.606458638543e7_dp,  -1.143519707857e8_dp,&
     498                 :             : & -5.167289383236e7_dp,  -7.304766495775e6_dp,&
     499                 :             : & -1.630563622280e5_dp,   3.145920924780e3_dp,&
     500                 :             : & -7.156354090495e1_dp,   1.0_dp/
     501                 :             :  data  (b1(ii),ii=1,5)/-7.606458639561e7_dp,  -1.333681162517e8_dp,&
     502                 :             : & -7.656332234147e7_dp,  -1.638081306504e7_dp,&
     503                 :             : & -1.044683266663e6_dp/
     504                 :             :  data (a2(ii),ii=1,10)/-3.493105157219e-7_dp, -5.628286279892e-5_dp,&
     505                 :             : & -5.188757767899e-3_dp, -2.097205947730e-1_dp,&
     506                 :             : & -3.353243201574_dp,    -1.682094530855e1_dp,&
     507                 :             : & -2.042542575231e1_dp,   3.551366939795_dp,&
     508                 :             : & -2.400826804233_dp,     1.0_dp/
     509                 :             :  data  (b2(ii),ii=1,6)/-6.986210315105e-7_dp, -1.102673536040e-4_dp,&
     510                 :             : & -1.001475250797e-2_dp, -3.864923270059e-1_dp,&
     511                 :             : & -5.435619477378_dp,    -1.563274262745e1_dp/
     512                 :             : 
     513                 :             : ! *************************************************************************
     514                 :             : 
     515                 :             :  if (xx .lt. 2.0_dp) then
     516                 :             :    xx1 = exp(xx)
     517                 :             :    rn = xx1 + a1(m1)
     518                 :             :    do ii=m1-1,1,-1
     519                 :             :      rn = rn*xx1 + a1(ii)
     520                 :             :    end do
     521                 :             :    den = b1(k1+1)
     522                 :             :    do ii=k1,1,-1
     523                 :             :      den = den*xx1 + b1(ii)
     524                 :             :    end do
     525                 :             :    zfermi1 = xx1 * rn/den
     526                 :             : 
     527                 :             :  else
     528                 :             :    xx1 = 1.0_dp/(xx*xx)
     529                 :             :    rn = xx1 + a2(m2)
     530                 :             :    do ii=m2-1,1,-1
     531                 :             :      rn = rn*xx1 + a2(ii)
     532                 :             :    end do
     533                 :             :    den = b2(k2+1)
     534                 :             :    do ii=k2,1,-1
     535                 :             :      den = den*xx1 + b2(ii)
     536                 :             :    end do
     537                 :             :    zfermi1 = xx*xx*rn/den
     538                 :             :  end if
     539                 :             : 
     540                 :             : end function zfermi1
     541                 :             : !!***
     542                 :             : 
     543                 :             : !!****f* ABINIT/zfermi32
     544                 :             : !! NAME
     545                 :             : !! zfermi32
     546                 :             : !!
     547                 :             : !! FUNCTION
     548                 :             : !!  this routine applies a rational function expansion to get the fermi-dirac
     549                 :             : !!  integral of order 3/2 evaluated at x. maximum error is 5.07d-13.
     550                 :             : !!  reference: antia apjs 84,101 1993
     551                 :             : !!
     552                 :             : !! INPUTS
     553                 :             : !!
     554                 :             : !! OUTPUT
     555                 :             : !!
     556                 :             : !! SOURCE
     557                 :             : 
     558                 :             :  function zfermi32(xx)
     559                 :             : 
     560                 :             : !Arguments -------------------------------
     561                 :             :  real(dp), intent(in) :: xx
     562                 :             :  real(dp) :: zfermi32
     563                 :             : 
     564                 :             : !Local variables-------------------------------
     565                 :             :  integer :: ii,m1,k1,m2,k2
     566                 :             :  real(dp) :: an,a1(12),b1(12),a2(12),b2(12),rn,den,xx1
     567                 :             : 
     568                 :             : !..load the coefficients of the expansion
     569                 :             :  data  an,m1,k1,m2,k2 /1.5e0_dp, 6, 7, 9, 10/
     570                 :             :  data  (a1(ii),ii=1,7)/4.32326386604283e4_dp,   8.55472308218786e4_dp,&
     571                 :             : & 5.95275291210962e4_dp,   1.77294861572005e4_dp,&
     572                 :             : & 2.21876607796460e3_dp,   9.90562948053193e1_dp,&
     573                 :             : & 1.0e0_dp/
     574                 :             :  data  (b1(ii),ii=1,8)/3.25218725353467e4_dp,   7.01022511904373e4_dp,&
     575                 :             : & 5.50859144223638e4_dp,   1.95942074576400e4_dp,&
     576                 :             : & 3.20803912586318e3_dp,   2.20853967067789e2_dp,&
     577                 :             : & 5.05580641737527e0_dp,   1.99507945223266e-2_dp/
     578                 :             :  data (a2(ii),ii=1,10)/2.80452693148553e-13_dp, 8.60096863656367e-11_dp,&
     579                 :             : & 1.62974620742993e-8_dp,  1.63598843752050e-6_dp,&
     580                 :             : & 9.12915407846722e-5_dp,  2.62988766922117e-3_dp,&
     581                 :             : & 3.85682997219346e-2_dp,  2.78383256609605e-1_dp,&
     582                 :             : & 9.02250179334496e-1_dp,  1.0e0_dp/
     583                 :             :  data (b2(ii),ii=1,11)/7.01131732871184e-13_dp, 2.10699282897576e-10_dp,&
     584                 :             : & 3.94452010378723e-8_dp,  3.84703231868724e-6_dp,&
     585                 :             : & 2.04569943213216e-4_dp,  5.31999109566385e-3_dp,&
     586                 :             : & 6.39899717779153e-2_dp,  3.14236143831882e-1_dp,&
     587                 :             : & 4.70252591891375e-1_dp, -2.15540156936373e-2_dp,&
     588                 :             : & 2.34829436438087e-3_dp/
     589                 :             : 
     590                 :             : ! *************************************************************************
     591                 :             : 
     592                 :             :  if (xx .lt. 2.0e0_dp) then
     593                 :             :    xx1 = exp(xx)
     594                 :             :    rn = xx1 + a1(m1)
     595                 :             :    do ii=m1-1,1,-1
     596                 :             :      rn = rn*xx1 + a1(ii)
     597                 :             :    end do
     598                 :             :    den = b1(k1+1)
     599                 :             :    do ii=k1,1,-1
     600                 :             :      den = den*xx1 + b1(ii)
     601                 :             :    end do
     602                 :             :    zfermi32 = xx1 * rn/den
     603                 :             : 
     604                 :             :  else
     605                 :             :    xx1 = one/(xx*xx)
     606                 :             :    rn = xx1 + a2(m2)
     607                 :             :    do ii=m2-1,1,-1
     608                 :             :      rn = rn*xx1 + a2(ii)
     609                 :             :    end do
     610                 :             :    den = b2(k2+1)
     611                 :             :    do ii=k2,1,-1
     612                 :             :      den = den*xx1 + b2(ii)
     613                 :             :    end do
     614                 :             :    zfermi32 = xx*xx*sqrt(xx)*rn/den
     615                 :             :  end if
     616                 :             : 
     617                 :             : end function zfermi32
     618                 :             : !!***
     619                 :             : 
     620                 :             : !!****f* ABINIT/zfermi2
     621                 :             : !! NAME
     622                 :             : !! zfermi2
     623                 :             : !!
     624                 :             : !! FUNCTION
     625                 :             : !!
     626                 :             : !!  this routine applies a rational function expansion to get the fermi-dirac
     627                 :             : !!  integral of order 2 evaluated at x. maximum error is 1.0e-8.
     628                 :             : !!  reference: antia  priv comm. 11sep94
     629                 :             : !!
     630                 :             : !! INPUTS
     631                 :             : !!
     632                 :             : !! OUTPUT
     633                 :             : !!
     634                 :             : !! SOURCE
     635                 :             : 
     636                 :             :  function zfermi2(xx)
     637                 :             : 
     638                 :             : !Arguments -------------------------------
     639                 :             :  real(dp), intent(in) :: xx
     640                 :             :  real(dp) :: zfermi2
     641                 :             : !Local variables-------------------------------
     642                 :             :  integer ::  ii,m1,k1,m2,k2
     643                 :             :  real(dp) :: an,a1(12),b1(12),a2(12),b2(12),rn,den,xx1
     644                 :             : 
     645                 :             : !..load the coefficients of the expansion
     646                 :             :  data  an,m1,k1,m2,k2 /2.0_dp, 7, 4, 5, 9/
     647                 :             :  data  (a1(ii),ii=1,8)/-1.434885992395e8_dp,  -2.001711155617e8_dp,&
     648                 :             : & -8.507067153428e7_dp,  -1.175118281976e7_dp,&
     649                 :             : & -3.145120854293e5_dp,   4.275771034579e3_dp,&
     650                 :             : & -8.069902926891e1_dp,   1.0e0_dp/
     651                 :             :  data  (b1(ii),ii=1,5)/-7.174429962316e7_dp,  -1.090535948744e8_dp,&
     652                 :             : & -5.350984486022e7_dp,  -9.646265123816e6_dp,&
     653                 :             : & -5.113415562845e5_dp/
     654                 :             :  data  (a2(ii),ii=1,6)/ 6.919705180051e-8_dp,  1.134026972699e-5_dp,&
     655                 :             : & 7.967092675369e-4_dp,  2.432500578301e-2_dp,&
     656                 :             : & 2.784751844942e-1_dp,  1.0e0_dp/
     657                 :             :  data (b2(ii),ii=1,10)/ 2.075911553728e-7_dp,  3.197196691324e-5_dp,&
     658                 :             : & 2.074576609543e-3_dp,  5.250009686722e-2_dp,&
     659                 :             : & 3.171705130118e-1_dp, -1.147237720706e-1_dp,&
     660                 :             : & 6.638430718056e-2_dp, -1.356814647640e-2_dp,&
     661                 :             : & -3.648576227388e-2_dp,  3.621098757460e-2_dp/
     662                 :             : 
     663                 :             : ! *************************************************************************
     664                 :             : 
     665                 :             :  if (xx .lt. 2.0e0_dp) then
     666                 :             :    xx1 = exp(xx)
     667                 :             :    rn = xx1 + a1(m1)
     668                 :             :    do ii=m1-1,1,-1
     669                 :             :      rn = rn*xx1 + a1(ii)
     670                 :             :    end do
     671                 :             :    den = b1(k1+1)
     672                 :             :    do ii=k1,1,-1
     673                 :             :      den = den*xx1 + b1(ii)
     674                 :             :    end do
     675                 :             :    zfermi2 = xx1 * rn/den
     676                 :             : 
     677                 :             :  else
     678                 :             :    xx1 = one/(xx*xx)
     679                 :             :    rn = xx1 + a2(m2)
     680                 :             :    do ii=m2-1,1,-1
     681                 :             :      rn = rn*xx1 + a2(ii)
     682                 :             :    end do
     683                 :             :    den = b2(k2+1)
     684                 :             :    do ii=k2,1,-1
     685                 :             :      den = den*xx1 + b2(ii)
     686                 :             :    end do
     687                 :             :    zfermi2 = xx*xx*xx*rn/den
     688                 :             :  end if
     689                 :             : 
     690                 :             : end function zfermi2
     691                 :             : !!***
     692                 :             : 
     693                 :             : !!****f* ABINIT/zfermi52
     694                 :             : !! NAME
     695                 :             : !! zfermi52
     696                 :             : !!
     697                 :             : !! FUNCTION
     698                 :             : !!  this routine applies a rational function expansion to get the fermi-dirac
     699                 :             : !!  integral of order 5/2 evaluated at x. maximum error is 2.47d-13.
     700                 :             : !!  reference: antia apjs 84,101 1993
     701                 :             : !!
     702                 :             : !! INPUTS
     703                 :             : !!
     704                 :             : !! OUTPUT
     705                 :             : !!
     706                 :             : !! SOURCE
     707                 :             : 
     708                 :             :  function zfermi52(xx)
     709                 :             : 
     710                 :             : !Arguments -------------------------------
     711                 :             :  real(dp), intent(in) :: xx
     712                 :             :  real(dp) :: zfermi52
     713                 :             : 
     714                 :             : !Local variables-------------------------------
     715                 :             :  integer :: ii,m1,k1,m2,k2
     716                 :             :  real(dp) :: an,a1(12),b1(12),a2(12),b2(12),rn,den,xx1
     717                 :             : 
     718                 :             : !..load the coefficients of the expansion
     719                 :             :  data  an,m1,k1,m2,k2 /2.5e0_dp, 6, 7, 10, 9/
     720                 :             :  data  (a1(ii),ii=1,7)/6.61606300631656e4_dp,   1.20132462801652e5_dp,&
     721                 :             : & 7.67255995316812e4_dp,   2.10427138842443e4_dp,&
     722                 :             : & 2.44325236813275e3_dp,   1.02589947781696e2_dp,&
     723                 :             : & 1.0e0_dp/
     724                 :             :  data  (b1(ii),ii=1,8)/1.99078071053871e4_dp,   3.79076097261066e4_dp,&
     725                 :             : & 2.60117136841197e4_dp,   7.97584657659364e3_dp,&
     726                 :             : & 1.10886130159658e3_dp,   6.35483623268093e1_dp,&
     727                 :             : & 1.16951072617142e0_dp,   3.31482978240026e-3_dp/
     728                 :             :  data (a2(ii),ii=1,11)/8.42667076131315e-12_dp, 2.31618876821567e-9_dp,&
     729                 :             : & 3.54323824923987e-7_dp,  2.77981736000034e-5_dp,&
     730                 :             : & 1.14008027400645e-3_dp,  2.32779790773633e-2_dp,&
     731                 :             : & 2.39564845938301e-1_dp,  1.24415366126179e0_dp,&
     732                 :             : & 3.18831203950106e0_dp,   3.42040216997894e0_dp,&
     733                 :             : & 1.0e0_dp/
     734                 :             :  data (b2(ii),ii=1,10)/2.94933476646033e-11_dp, 7.68215783076936e-9_dp,&
     735                 :             : & 1.12919616415947e-6_dp,  8.09451165406274e-5_dp,&
     736                 :             : & 2.81111224925648e-3_dp,  3.99937801931919e-2_dp,&
     737                 :             : & 2.27132567866839e-1_dp,  5.31886045222680e-1_dp,&
     738                 :             : & 3.70866321410385e-1_dp,  2.27326643192516e-2_dp/
     739                 :             : 
     740                 :             : ! *************************************************************************
     741                 :             : 
     742                 :             :  if (xx .lt. two) then
     743                 :             :    xx1 = exp(xx)
     744                 :             :    rn = xx1 + a1(m1)
     745                 :             :    do ii=m1-1,1,-1
     746                 :             :      rn = rn*xx1 + a1(ii)
     747                 :             :    end do
     748                 :             :    den = b1(k1+1)
     749                 :             :    do ii=k1,1,-1
     750                 :             :      den = den*xx1 + b1(ii)
     751                 :             :    end do
     752                 :             :    zfermi52 = xx1 * rn/den
     753                 :             : 
     754                 :             :  else
     755                 :             :    xx1 = one/(xx*xx)
     756                 :             :    rn = xx1 + a2(m2)
     757                 :             :    do ii=m2-1,1,-1
     758                 :             :      rn = rn*xx1 + a2(ii)
     759                 :             :    end do
     760                 :             :    den = b2(k2+1)
     761                 :             :    do ii=k2,1,-1
     762                 :             :      den = den*xx1 + b2(ii)
     763                 :             :    end do
     764                 :             :    zfermi52 = xx*xx*xx*sqrt(xx)*rn/den
     765                 :             :  end if
     766                 :             : 
     767                 :             : end function zfermi52
     768                 :             : !!***
     769                 :             : 
     770                 :             : !!****f* ABINIT/zfermi3
     771                 :             : !! NAME
     772                 :             : !! zfermi3
     773                 :             : !!
     774                 :             : !! FUNCTION
     775                 :             : !!  this routine applies a rational function expansion to get the fermi-dirac
     776                 :             : !!  integral of order 3 evaluated at x. maximum error is 1.0e-8.
     777                 :             : !!  reference: antia  priv comm. 11sep94
     778                 :             : !!
     779                 :             : !! INPUTS
     780                 :             : !!
     781                 :             : !! OUTPUT
     782                 :             : !!
     783                 :             : !! SOURCE
     784                 :             : 
     785                 :             :  function zfermi3(xx)
     786                 :             : 
     787                 :             : !Arguments -------------------------------
     788                 :             :  real(dp), intent(in) :: xx
     789                 :             :  real(dp):: zfermi3
     790                 :             : 
     791                 :             : !Local variables-------------------------------
     792                 :             :  integer :: ii,m1,k1,m2,k2
     793                 :             :  real(dp) :: an,a1(12),b1(12),a2(12),b2(12),rn,den,xx1
     794                 :             : 
     795                 :             : !..load the coefficients of the expansion
     796                 :             :  data  an,m1,k1,m2,k2 /3.0, 4, 6, 7, 7/
     797                 :             :  data  (a1(ii),ii=1,5)/ 6.317036716422e2_dp,    7.514163924637e2_dp,&
     798                 :             : & 2.711961035750e2_dp,    3.274540902317e1_dp,&
     799                 :             : & 1.0_dp/
     800                 :             :  data  (b1(ii),ii=1,7)/ 1.052839452797e2_dp,    1.318163114785e2_dp,&
     801                 :             : & 5.213807524405e1_dp,    7.500064111991_dp,&
     802                 :             : & 3.383020205492e-1_dp,   2.342176749453e-3_dp,&
     803                 :             : & -8.445226098359e-6_dp/
     804                 :             :  data  (a2(ii),ii=1,8)/ 1.360999428425e-8_dp,   1.651419468084e-6_dp,&
     805                 :             : & 1.021455604288e-4_dp,   3.041270709839e-3_dp,&
     806                 :             : & 4.584298418374e-2_dp,   3.440523212512e-1_dp,&
     807                 :             : & 1.077505444383_dp,    1.0_dp/
     808                 :             :  data  (b2(ii),ii=1,8)/ 5.443997714076e-8_dp,   5.531075760054e-6_dp,&
     809                 :             : & 2.969285281294e-4_dp,   6.052488134435e-3_dp,&
     810                 :             : & 5.041144894964e-2_dp,   1.048282487684e-1_dp,&
     811                 :             : & 1.280969214096e-2_dp,  -2.851555446444e-3_dp/
     812                 :             : 
     813                 :             : ! *************************************************************************
     814                 :             : 
     815                 :             :  if (xx .lt. two) then
     816                 :             :    xx1 = exp(xx)
     817                 :             :    rn = xx1 + a1(m1)
     818                 :             :    do ii=m1-1,1,-1
     819                 :             :      rn = rn*xx1 + a1(ii)
     820                 :             :    end do
     821                 :             :    den = b1(k1+1)
     822                 :             :    do ii=k1,1,-1
     823                 :             :      den = den*xx1 + b1(ii)
     824                 :             :    end do
     825                 :             :    zfermi3 = xx1 * rn/den
     826                 :             : 
     827                 :             :  else
     828                 :             :    xx1 = one/(xx*xx)
     829                 :             :    rn = xx1 + a2(m2)
     830                 :             :    do ii=m2-1,1,-1
     831                 :             :      rn = rn*xx1 + a2(ii)
     832                 :             :    end do
     833                 :             :    den = b2(k2+1)
     834                 :             :    do ii=k2,1,-1
     835                 :             :      den = den*xx1 + b2(ii)
     836                 :             :    end do
     837                 :             :    zfermi3 = xx*xx*xx*xx*rn/den
     838                 :             :  end if
     839                 :             : 
     840                 :             : end function zfermi3
     841                 :             : !!***
     842                 :             : 
     843                 :             : !!****f* ABINIT/ifermim12
     844                 :             : !! NAME
     845                 :             : !! ifermim12
     846                 :             : !!
     847                 :             : !! FUNCTION
     848                 :             : !!  this routine applies a rational function expansion to get the inverse
     849                 :             : !!  fermi-dirac integral of order -1/2 when it is equal to f.
     850                 :             : !!  maximum error is 3.03d-9.   reference: antia apjs 84,101 1993
     851                 :             : !!
     852                 :             : !! INPUTS
     853                 :             : !!
     854                 :             : !! OUTPUT
     855                 :             : !!
     856                 :             : !! SOURCE
     857                 :             : 
     858                 :             :  function ifermim12(ff)
     859                 :             : 
     860                 :             : !Arguments -------------------------------
     861                 :             :  real(dp), intent(in) :: ff
     862                 :             :  real(dp) :: ifermim12
     863                 :             : !Local variables-------------------------------
     864                 :             :  integer :: ii,m1,k1,m2,k2
     865                 :             :  real(dp) :: an,a1(12),b1(12),a2(12),b2(12),rn,den,ff1
     866                 :             : 
     867                 :             : !..load the coefficients of the expansion
     868                 :             :  data  an,m1,k1,m2,k2 /-0.5e0_dp, 5, 6, 6, 6/
     869                 :             :  data  (a1(ii),ii=1,6)/-1.570044577033e4_dp,   1.001958278442e4_dp,&
     870                 :             : & -2.805343454951e3_dp,   4.121170498099e2_dp,&
     871                 :             : & -3.174780572961e1_dp,   1.0e0_dp/
     872                 :             :  data  (b1(ii),ii=1,7)/-2.782831558471e4_dp,   2.886114034012e4_dp,&
     873                 :             : & -1.274243093149e4_dp,   3.063252215963e3_dp,&
     874                 :             : & -4.225615045074e2_dp,   3.168918168284e1_dp,&
     875                 :             : & -1.008561571363e0_dp/
     876                 :             :  data  (a2(ii),ii=1,7)/ 2.206779160034e-8_dp,  -1.437701234283e-6_dp,&
     877                 :             : & 6.103116850636e-5_dp,  -1.169411057416e-3_dp,&
     878                 :             : & 1.814141021608e-2_dp,  -9.588603457639e-2_dp,&
     879                 :             : & 1.0e0_dp/
     880                 :             :  data  (b2(ii),ii=1,7)/ 8.827116613576e-8_dp,  -5.750804196059e-6_dp,&
     881                 :             : & 2.429627688357e-4_dp,  -4.601959491394e-3_dp,&
     882                 :             : & 6.932122275919e-2_dp,  -3.217372489776e-1_dp,&
     883                 :             : & 3.124344749296e0_dp/
     884                 :             : 
     885                 :             : ! *************************************************************************
     886                 :             : 
     887                 :             :  if (ff .lt. 4.0e0_dp) then
     888                 :             :    rn = ff + a1(m1)
     889                 :             :    do ii=m1-1,1,-1
     890                 :             :      rn = rn*ff + a1(ii)
     891                 :             :    end do
     892                 :             :    den = b1(k1+1)
     893                 :             :    do ii=k1,1,-1
     894                 :             :      den = den*ff + b1(ii)
     895                 :             :    end do
     896                 :             :    ifermim12 = log(ff * rn/den)
     897                 :             : 
     898                 :             :  else
     899                 :             :    ff1 = one/ff**(one/(one + an))
     900                 :             :    rn = ff1 + a2(m2)
     901                 :             :    do ii=m2-1,1,-1
     902                 :             :      rn = rn*ff1 + a2(ii)
     903                 :             :    end do
     904                 :             :    den = b2(k2+1)
     905                 :             :    do ii=k2,1,-1
     906                 :             :      den = den*ff1 + b2(ii)
     907                 :             :    end do
     908                 :             :    ifermim12 = rn/(den*ff1)
     909                 :             :  end if
     910                 :             : 
     911                 :             : end function ifermim12
     912                 :             : !!***
     913                 :             : 
     914                 :             : !!****f* ABINIT/ifermi12
     915                 :             : !! NAME
     916                 :             : !! ifermi12
     917                 :             : !!
     918                 :             : !! FUNCTION
     919                 :             : !!   this routine applies a rational function expansion to get the inverse
     920                 :             : !!   fermi-dirac integral of order 1/2 when it is equal to f.
     921                 :             : !!   maximum error is 4.19d-9.   reference: antia apjs 84,101 1993
     922                 :             : !!
     923                 :             : !! INPUTS
     924                 :             : !!
     925                 :             : !! OUTPUT
     926                 :             : !!
     927                 :             : !! SOURCE
     928                 :             : 
     929                 :             :  function ifermi12(ff)
     930                 :             : 
     931                 :             : !Arguments -------------------------------
     932                 :             :  real(dp), intent(in) :: ff
     933                 :             :  real(dp) :: ifermi12
     934                 :             : !Local variables-------------------------------
     935                 :             :  integer :: ii,m1,k1,m2,k2
     936                 :             :  real(dp) :: an,a1(12),b1(12),a2(12),b2(12),rn,den,ff1
     937                 :             : 
     938                 :             : !..load the coefficients of the expansion
     939                 :             :  data  an,m1,k1,m2,k2 /0.5e0_dp, 4, 3, 6, 5/
     940                 :             :  data  (a1(ii),ii=1,5)/ 1.999266880833e4_dp,   5.702479099336e3_dp,&
     941                 :             : & 6.610132843877e2_dp,   3.818838129486e1_dp,&
     942                 :             : & 1.0e0_dp/
     943                 :             :  data  (b1(ii),ii=1,4)/ 1.771804140488e4_dp,  -2.014785161019e3_dp,&
     944                 :             : & 9.130355392717e1_dp,  -1.670718177489e0_dp/
     945                 :             :  data  (a2(ii),ii=1,7)/-1.277060388085e-2_dp,  7.187946804945e-2_dp,&
     946                 :             : & -4.262314235106e-1_dp,  4.997559426872e-1_dp,&
     947                 :             : & -1.285579118012e0_dp,  -3.930805454272e-1_dp,&
     948                 :             : & 1.0e0_dp/
     949                 :             :  data  (b2(ii),ii=1,6)/-9.745794806288e-3_dp,  5.485432756838e-2_dp,&
     950                 :             : & -3.299466243260e-1_dp,  4.077841975923e-1_dp,&
     951                 :             : & -1.145531476975e0_dp,  -6.067091689181e-2_dp/
     952                 :             : 
     953                 :             : ! *************************************************************************
     954                 :             : 
     955                 :             :  if (ff .lt. 4.0e0_dp) then
     956                 :             :    rn = ff + a1(m1)
     957                 :             :    do ii=m1-1,1,-1
     958                 :             :      rn = rn*ff + a1(ii)
     959                 :             :    end do
     960                 :             :    den = b1(k1+1)
     961                 :             :    do ii=k1,1,-1
     962                 :             :      den = den*ff + b1(ii)
     963                 :             :    end do
     964                 :             :    ifermi12 = log(ff * rn/den)
     965                 :             : 
     966                 :             :  else
     967                 :             :    ff1 = one/ff**(one/(one + an))
     968                 :             :    rn = ff1 + a2(m2)
     969                 :             :    do ii=m2-1,1,-1
     970                 :             :      rn = rn*ff1 + a2(ii)
     971                 :             :    end do
     972                 :             :    den = b2(k2+1)
     973                 :             :    do ii=k2,1,-1
     974                 :             :      den = den*ff1 + b2(ii)
     975                 :             :    end do
     976                 :             :    ifermi12 = rn/(den*ff1)
     977                 :             :  end if
     978                 :             : 
     979                 :             : end function ifermi12
     980                 :             : !!***
     981                 :             : 
     982                 :             : !!****f* ABINIT/ifermi32
     983                 :             : !! NAME
     984                 :             : !! ifermi32
     985                 :             : !!
     986                 :             : !! FUNCTION
     987                 :             : !!   this routine applies a rational function expansion to get the inverse
     988                 :             : !!   fermi-dirac integral of order 3/2 when it is equal to f.
     989                 :             : !!   maximum error is 2.26d-9.   reference: antia apjs 84,101 1993
     990                 :             : !!
     991                 :             : !! INPUTS
     992                 :             : !!
     993                 :             : !! OUTPUT
     994                 :             : !!
     995                 :             : !! SOURCE
     996                 :             : 
     997                 :             :  function ifermi32(ff)
     998                 :             : 
     999                 :             : !Arguments -------------------------------
    1000                 :             :  real(dp), intent(in) :: ff
    1001                 :             :  real(dp) :: ifermi32
    1002                 :             : !Local variables-------------------------------
    1003                 :             :  integer :: ii,m1,k1,m2,k2
    1004                 :             :  real(dp) :: an,a1(12),b1(12),a2(12),b2(12),rn,den,ff1
    1005                 :             : 
    1006                 :             : !..load the coefficients of the expansion
    1007                 :             :  data  an,m1,k1,m2,k2 /1.5e0_dp, 3, 4, 6, 5/
    1008                 :             :  data  (a1(ii),ii=1,4)/ 1.715627994191e2_dp,   1.125926232897e2_dp,&
    1009                 :             : & 2.056296753055e1_dp,   1.0e0_dp/
    1010                 :             :  data  (b1(ii),ii=1,5)/ 2.280653583157e2_dp,   1.193456203021e2_dp,&
    1011                 :             : & 1.167743113540e1_dp,  -3.226808804038e-1_dp,&
    1012                 :             : & 3.519268762788e-3_dp/
    1013                 :             :  data  (a2(ii),ii=1,7)/-6.321828169799e-3_dp, -2.183147266896e-2_dp,&
    1014                 :             : & -1.057562799320e-1_dp, -4.657944387545e-1_dp,&
    1015                 :             : & -5.951932864088e-1_dp,  3.684471177100e-1_dp,&
    1016                 :             : & 1.0e0_dp/
    1017                 :             :  data  (b2(ii),ii=1,6)/-4.381942605018e-3_dp, -1.513236504100e-2_dp,&
    1018                 :             : & -7.850001283886e-2_dp, -3.407561772612e-1_dp,&
    1019                 :             : & -5.074812565486e-1_dp, -1.387107009074e-1_dp/
    1020                 :             : 
    1021                 :             : ! *************************************************************************
    1022                 :             : 
    1023                 :             :  if (ff .lt. 4.0e0_dp) then
    1024                 :             :    rn = ff + a1(m1)
    1025                 :             :    do ii=m1-1,1,-1
    1026                 :             :      rn = rn*ff + a1(ii)
    1027                 :             :    end do
    1028                 :             :    den = b1(k1+1)
    1029                 :             :    do ii=k1,1,-1
    1030                 :             :      den = den*ff + b1(ii)
    1031                 :             :    end do
    1032                 :             :    ifermi32 = log(ff * rn/den)
    1033                 :             : 
    1034                 :             :  else
    1035                 :             :    ff1 = one/ff**(one/(one + an))
    1036                 :             :    rn = ff1 + a2(m2)
    1037                 :             :    do ii=m2-1,1,-1
    1038                 :             :      rn = rn*ff1 + a2(ii)
    1039                 :             :    end do
    1040                 :             :    den = b2(k2+1)
    1041                 :             :    do ii=k2,1,-1
    1042                 :             :      den = den*ff1 + b2(ii)
    1043                 :             :    end do
    1044                 :             :    ifermi32 = rn/(den*ff1)
    1045                 :             :  end if
    1046                 :             : 
    1047                 :             : end function ifermi32
    1048                 :             : !!***
    1049                 :             : 
    1050                 :             : !!****f* ABINIT/ifermi52
    1051                 :             : !! NAME
    1052                 :             : !! ifermi52
    1053                 :             : !!
    1054                 :             : !! FUNCTION
    1055                 :             : !!   this routine applies a rational function expansion to get the inverse
    1056                 :             : !!   fermi-dirac integral of order 5/2 when it is equal to f.
    1057                 :             : !!   maximum error is 6.17d-9.   reference: antia apjs 84,101 1993
    1058                 :             : !!
    1059                 :             : !! INPUTS
    1060                 :             : !!
    1061                 :             : !! OUTPUT
    1062                 :             : !!
    1063                 :             : !! SOURCE
    1064                 :             : 
    1065                 :             :  function ifermi52(ff)
    1066                 :             : 
    1067                 :             : !Arguments -------------------------------
    1068                 :             :  real(dp), intent(in) :: ff
    1069                 :             :  real(dp) :: ifermi52
    1070                 :             : 
    1071                 :             : !Local variables-------------------------------
    1072                 :             :  integer :: ii,m1,k1,m2,k2
    1073                 :             :  real(dp) :: an,a1(12),b1(12),a2(12),b2(12),rn,den,ff1
    1074                 :             : 
    1075                 :             : !..load the coefficients of the expansion
    1076                 :             :  data  an,m1,k1,m2,k2 /2.5e0_dp, 2, 3, 6, 6/
    1077                 :             :  data  (a1(ii),ii=1,3)/ 2.138969250409e2_dp,   3.539903493971e1_dp,&
    1078                 :             : & 1.0e0_dp/
    1079                 :             :  data  (b1(ii),ii=1,4)/ 7.108545512710e2_dp,   9.873746988121e1_dp,&
    1080                 :             : & 1.067755522895e0_dp,  -1.182798726503e-2_dp/
    1081                 :             :  data  (a2(ii),ii=1,7)/-3.312041011227e-2_dp,  1.315763372315e-1_dp,&
    1082                 :             : & -4.820942898296e-1_dp,  5.099038074944e-1_dp,&
    1083                 :             : & 5.495613498630e-1_dp, -1.498867562255e0_dp,&
    1084                 :             : & 1.0e0_dp/
    1085                 :             :  data  (b2(ii),ii=1,7)/-2.315515517515e-2_dp,  9.198776585252e-2_dp,&
    1086                 :             : & -3.835879295548e-1_dp,  5.415026856351e-1_dp,&
    1087                 :             : & -3.847241692193e-1_dp,  3.739781456585e-2_dp,&
    1088                 :             : & -3.008504449098e-2_dp/
    1089                 :             : 
    1090                 :             : ! *************************************************************************
    1091                 :             : 
    1092                 :             :  if (ff .lt. 4.0e0_dp) then
    1093                 :             :    rn = ff + a1(m1)
    1094                 :             :    do ii=m1-1,1,-1
    1095                 :             :      rn = rn*ff + a1(ii)
    1096                 :             :    end do
    1097                 :             :    den = b1(k1+1)
    1098                 :             :    do ii=k1,1,-1
    1099                 :             :      den = den*ff + b1(ii)
    1100                 :             :    end do
    1101                 :             :    ifermi52 = log(ff * rn/den)
    1102                 :             : 
    1103                 :             :  else
    1104                 :             :    ff1 = one/ff**(one/(one + an))
    1105                 :             :    rn = ff1 + a2(m2)
    1106                 :             :    do ii=m2-1,1,-1
    1107                 :             :      rn = rn*ff1 + a2(ii)
    1108                 :             :    end do
    1109                 :             :    den = b2(k2+1)
    1110                 :             :    do ii=k2,1,-1
    1111                 :             :      den = den*ff1 + b2(ii)
    1112                 :             :    end do
    1113                 :             :    ifermi52 = rn/(den*ff1)
    1114                 :             :  end if
    1115                 :             : 
    1116                 :             : end function ifermi52
    1117                 :             : !!***
    1118                 :             : 
    1119                 :             : !!****f* ABINIT/fp12a1
    1120                 :             : !! NAME
    1121                 :             : !! fp12a1
    1122                 :             : !!
    1123                 :             : !! FUNCTION
    1124                 :             : !!
    1125                 :             : !! INPUTS
    1126                 :             : !!
    1127                 :             : !! OUTPUT
    1128                 :             : !!
    1129                 :             : !! SOURCE
    1130                 :             : 
    1131                 :             :  function fp12a1 (x)
    1132                 :             : 
    1133                 :             : ! Arguments -------------------------------
    1134                 :             :  real(dp),intent(in) :: x
    1135                 :             :  real(dp) :: fp12a1
    1136                 :             : 
    1137                 :             :  real(dp) :: y
    1138                 :             : 
    1139                 :             : !**********************************************************************
    1140                 :             : !*                                                                    *
    1141                 :             : !*               Integrale de Fermi d'ordre 1/2                       *
    1142                 :             : !*    Fp12(x) = somme de 0 a l'infini de (dt*t**1/2)/(1+exp(t-x))     *
    1143                 :             : !*                                                                    *
    1144                 :             : !**********************************************************************
    1145                 :             : !
    1146                 :             : !H. M. Antia, Astrophys. J. Suppl. 84, 101 (1993)
    1147                 :             : !Erreur relative maximum annoncee 5.54 e-5
    1148                 :             : !Erreur relative maximum constatee : -5.53e-5 pour eta = 2
    1149                 :             : !
    1150                 :             :  if (x.lt.2._dp) then
    1151                 :             :    y=exp(x)
    1152                 :             :    fp12a1=y*(21.8168_dp+y*(13.1693_dp+y))&
    1153                 :             : &   /(24.6180_dp+y*(23.5546_dp+y*(4.76290_dp+y*0.134481_dp)))
    1154                 :             :  else
    1155                 :             :    y=one/(x*x)
    1156                 :             :    fp12a1=x*sqrt(x)*(0.0473011_dp+y*(0.548433_dp+y))&
    1157                 :             : &   /(0.0709478_dp+y*(0.737041_dp+y*0.382065_dp))
    1158                 :             :  end if
    1159                 :             : !
    1160                 :             : !**********************************************************************
    1161                 :             :  end function fp12a1
    1162                 :             : !!***
    1163                 :             : 
    1164                 :             : !!****f* ABINIT/fp32a1
    1165                 :             : !! NAME
    1166                 :             : !! fp32a1
    1167                 :             : !!
    1168                 :             : !! FUNCTION
    1169                 :             : !!
    1170                 :             : !! INPUTS
    1171                 :             : !!
    1172                 :             : !! OUTPUT
    1173                 :             : !!
    1174                 :             : !! SOURCE
    1175                 :             : 
    1176                 :    12255408 :  function fp32a1 (x)
    1177                 :             : 
    1178                 :             : !Arguments -------------------------------
    1179                 :             :  real(dp),intent(in) :: x
    1180                 :             :  real(dp) :: fp32a1
    1181                 :             : 
    1182                 :             :  real(dp) :: y,x2
    1183                 :             : 
    1184                 :             : !
    1185                 :             : !**********************************************************************
    1186                 :             : !*                                                                    *
    1187                 :             : !*               Integrale de Fermi d'ordre 3/2                       *
    1188                 :             : !*    Fp32(x) = somme de 0 a l'infini de (dt*t**3/2)/(1+exp(t-x))     *
    1189                 :             : !*                                                                    *
    1190                 :             : !**********************************************************************
    1191                 :             : !
    1192                 :             : !H. M. Antia, Astrophys. J. Suppl. 84, 101 (1993)
    1193                 :             : !Erreur relative maximum annoncee 6.54 e-5
    1194                 :             : !Erreur relative maximum constatee : -5.84e-5 pour eta = -5
    1195                 :             : !
    1196         [ -  + ]:    12255408 :  if (x.lt.two) then
    1197                 :           0 :    y=exp(x)
    1198                 :           0 :    fp32a1=y*(135.863_dp+y*(49.2764_dp+y))/(102.210_dp+y*(55.0312_dp+y*4.23365_dp))
    1199                 :             :  else
    1200                 :    12255408 :    x2=x*x
    1201                 :    12255408 :    y=1._dp/x2
    1202                 :             :    fp32a1=x2*sqrt(x)*(0.154699_dp+y*(1.20037_dp+y))&
    1203                 :    12255408 : &   /(0.386765_dp+y*(0.608119_dp-y*0.165665_dp))
    1204                 :             :  end if
    1205                 :             : !
    1206                 :             : !**********************************************************************
    1207                 :    12255408 :  end function fp32a1
    1208                 :             : !!***
    1209                 :             : 
    1210                 :             : !!****f* ABINIT/xp12a1
    1211                 :             : !! NAME
    1212                 :             : !! xp12a1
    1213                 :             : !!
    1214                 :             : !! FUNCTION
    1215                 :             : !!
    1216                 :             : !! INPUTS
    1217                 :             : !!
    1218                 :             : !! OUTPUT
    1219                 :             : !!
    1220                 :             : !! SOURCE
    1221                 :             : 
    1222                 :             :  function xp12a1 (y)
    1223                 :             : 
    1224                 :             : !Arguments -------------------------------
    1225                 :             :  real(dp) :: xp12a1
    1226                 :             :  real(dp),intent(in) :: y
    1227                 :             : 
    1228                 :             :  real(dp),parameter :: deux=2._dp,deuxs3=deux/3._dp
    1229                 :             :  real(dp) :: top,den,z
    1230                 :             : 
    1231                 :             : !
    1232                 :             : !**********************************************************************
    1233                 :             : !*                                                                    *
    1234                 :             : !*              Calcul de eta tel que fp12 (eta) = y                  *
    1235                 :             : !*          ou fp12 est l'integrale de Fermi d'ordre +1/2             *
    1236                 :             : !*                                                                    *
    1237                 :             : !**********************************************************************
    1238                 :             : !
    1239                 :             : !H. M. Antia, Astrophys. J. Suppl. 84, 101 (1993)
    1240                 :             : !Erreur relative maximum annoncee sur exp(eta) : 3.02 e-5
    1241                 :             : !
    1242                 :             :  if (y.lt.4._dp) then
    1243                 :             :    top=44.593646_dp+y*(11.288764_dp+y)
    1244                 :             :    den=39.519346_dp+y*(-5.7517464_dp+y*0.26594291_dp)
    1245                 :             :    xp12a1=log(y*top/den)
    1246                 :             :  else
    1247                 :             :    z=y**(-deuxs3)
    1248                 :             :    top=34.873722_dp+z*(-26.922515_dp+z)
    1249                 :             :    den=26.612832_dp+z*(-20.452930_dp+z*11.808945_dp)
    1250                 :             :    xp12a1=top/(z*den)
    1251                 :             :  end if
    1252                 :             : !
    1253                 :             : !**********************************************************************
    1254                 :             :  end function xp12a1
    1255                 :             : !!***
    1256                 :             : 
    1257                 :             : !!****f* ABINIT/fm12a1
    1258                 :             : !! NAME
    1259                 :             : !! fm12a1
    1260                 :             : !!
    1261                 :             : !! FUNCTION
    1262                 :             : !!
    1263                 :             : !! INPUTS
    1264                 :             : !!
    1265                 :             : !! OUTPUT
    1266                 :             : !!
    1267                 :             : !! SOURCE
    1268                 :             : 
    1269                 :             :  function fm12a1 (x)
    1270                 :             : 
    1271                 :             : !Arguments -------------------------------
    1272                 :             :  real(dp),intent(in) :: x
    1273                 :             :  real(dp) :: fm12a1
    1274                 :             : 
    1275                 :             :  real(dp) :: y
    1276                 :             : 
    1277                 :             : !
    1278                 :             : !**********************************************************************
    1279                 :             : !*                                                                    *
    1280                 :             : !*               Integrale de Fermi d'ordre -1/2                      *
    1281                 :             : !*    Fm12(x) = somme de 0 a l'infini de (dt*t**-1/2)/(1+exp(t-x))    *
    1282                 :             : !*                                                                    *
    1283                 :             : !**********************************************************************
    1284                 :             : !
    1285                 :             : !H. M. Antia, Astrophys. J. Suppl. 84, 101 (1993)
    1286                 :             : !Erreur relative maximum annoncee 4.75 e-5
    1287                 :             : !
    1288                 :             :  if (x.lt.2._dp) then
    1289                 :             :    y=exp(x)
    1290                 :             :    fm12a1=y*(23.1456_dp+y*(13.7820_dp+y))&
    1291                 :             : &   /(13.0586_dp+y*(17.0048_dp+y*(5.07527_dp+y*0.236620_dp)))
    1292                 :             :  else
    1293                 :             :    y=1./(x*x)
    1294                 :             :    fm12a1=sqrt(x)*(0.0153602_dp+y*(0.146815_dp+y))&
    1295                 :             : &   /(0.00768015_dp+y*(0.0763700_dp+y*0.570485_dp))
    1296                 :             :  end if
    1297                 :             : !
    1298                 :             : !**********************************************************************
    1299                 :             :  end function fm12a1
    1300                 :             : !!***
    1301                 :             : 
    1302                 :             : !!****f* ABINIT/fm12a1t
    1303                 :             : !! NAME
    1304                 :             : !! fm12a1t
    1305                 :             : !!
    1306                 :             : !! FUNCTION
    1307                 :             : !!
    1308                 :             : !! INPUTS
    1309                 :             : !!
    1310                 :             : !! OUTPUT
    1311                 :             : !!
    1312                 :             : !! SOURCE
    1313                 :             : 
    1314                 :        2182 :  subroutine fm12a1t (cktf,rtnewt,tphysel,vtrial,rhor_middx,rhor_mid,nfft)
    1315                 :             : 
    1316                 :             :  integer,intent(in) :: nfft
    1317                 :             :  real(dp),intent(in) :: tphysel,rtnewt,cktf
    1318                 :             :  real(dp),intent(in) :: vtrial(nfft)
    1319                 :             :  real(dp),intent(out) :: rhor_middx(nfft),rhor_mid(nfft)
    1320                 :             : 
    1321                 :             :  !intrinsic exp,sqrt
    1322                 :             :  integer :: ifft
    1323                 :             :  real(dp) :: x,y,sqrtx
    1324                 :             : 
    1325                 :             : !
    1326                 :             : !**********************************************************************
    1327                 :             : !*                                                                    *
    1328                 :             : !*               Integrale de Fermi d'ordre -1/2                      *
    1329                 :             : !*    Fm12(x) = somme de 0 a l'infini de (dt*t**-1/2)/(1+exp(t-x))    *
    1330                 :             : !*                      ....                                              *
    1331                 :             : !**********************************************************************
    1332                 :             : !
    1333                 :             : !H. M. Antia, Astrophys. J. Suppl. 84, 101 (1993)
    1334                 :             : !Erreur relative maximum annoncee 4.75 e-5
    1335                 :             : !
    1336         [ +  + ]:    97127446 :  do ifft=1,nfft
    1337                 :    97125264 :    x=(rtnewt-vtrial(ifft))/tphysel
    1338         [ +  + ]:    97127446 :    if (x.lt.2._dp) then
    1339                 :     9875783 :      y=exp(x)
    1340                 :             :      rhor_middx(ifft)=cktf*y*(23.1456e0_dp+y*(13.7820e0_dp+y))&
    1341                 :     9875783 : &     /(13.0586e0_dp+y*(17.0048e0_dp+y*(5.07527e0_dp+y*0.236620e0_dp)))
    1342                 :             :      rhor_mid(ifft)=cktf*y*(21.8168_dp+y*(13.1693_dp+y))&
    1343                 :     9875783 : &     /(24.6180+y*(23.5546_dp+y*(4.76290_dp+y*0.134481_dp)))
    1344                 :             :    else
    1345                 :    87249481 :      y=1._dp/(x*x)
    1346                 :    87249481 :      sqrtx=sqrt(x)
    1347                 :             :      rhor_middx(ifft)=cktf*sqrtx*(0.0153602e0_dp+y*(0.146815e0_dp+y))&
    1348                 :    87249481 : &     /(0.00768015e0_dp+y*(0.0763700e0_dp+y*0.570485e0_dp))
    1349                 :             :      rhor_mid(ifft)=cktf*x*sqrtx*(0.0473011_dp+y*(0.548433_dp+y))&
    1350                 :    87249481 : &     /(0.0709478_dp+y*(0.737041_dp+y*0.382065_dp))
    1351                 :             :    end if
    1352                 :             :  end do
    1353                 :             : !
    1354                 :             : !**********************************************************************
    1355                 :        2182 :  end subroutine fm12a1t
    1356                 :             : !!***
    1357                 :             : 
    1358                 :             : end subroutine vtorhotf
    1359                 :             : !!***
    1360                 :             : 
    1361                 :             : end module m_vtorhotf
    1362                 :             : !!***
        

Generated by: LCOV version 2.3-1