LCOV - code coverage report
Current view: top level - num/private - estrad.dek (source / functions) Coverage Total Hit
Test: coverage.info Lines: 0.0 % 175 0
Test Date: 2025-05-08 18:23:42 Functions: 0.0 % 1 0

            Line data    Source code
       1            0 :       subroutine estrad(n,nerror,fjac,ldjac,mljac,mujac,fmas,ldmas,mlmas,mumas,
       2            0 :      &          h,dd1,dd2,dd3,fcn,nfcn,y0,y,ijob,x,m1,m2,nm1,
       3            0 :      &          e1_1D,lde1,z1,z2,z3,cont,f1,f2,ip1,iphes,scal,err,
       4              :      &          first,reject,fac1,lrpar,rpar,lipar,ipar,ier,
       5              :      &          mle,mue,mbjac,mbb,mdiag,mdiff,mbdiag,
       6            0 :      &          decsol,decsols,nzmax,isparse,ia,ja,sa,
       7              :      &          lrd,rpar_decsol,lid,ipar_decsol)
       8              :       implicit none
       9              :       interface
      10              : #include "num_fcn.dek"
      11              : #include "mtx_decsol.dek"
      12              : #include "mtx_decsols.dek"
      13              :       end interface
      14              :       integer, pointer :: ip1(:) ! (nm1)
      15              :       integer :: n, iphes(n), nerror, ldjac, mljac, mujac, ldmas, mlmas, mumas
      16              :       integer :: nfcn, ijob, m1, m2, nm1, lde1, lrpar, lipar, ier, mle, mue
      17              :       integer :: mbjac, mbb, mdiag, mdiff, mbdiag, nzmax, isparse, lrd, lid
      18              :       integer :: ia(:) ! (n+1)
      19              :       integer :: ja(:) ! (nzmax)
      20              :       double precision :: sa(nzmax)
      21              :       real(dp), intent(inout), pointer :: rpar_decsol(:) ! (lrd)
      22              :       integer, intent(inout), pointer :: ipar_decsol(:) ! (lid)
      23              :       integer, intent(inout), pointer :: ipar(:) ! (lipar)
      24              :       real(dp), intent(inout), pointer :: rpar(:) ! (lrpar)
      25              : 
      26              :       double precision :: fjac(ldjac,n), fmas(ldmas,nm1)
      27              :       double precision, pointer :: e1_1D(:)
      28              :       double precision :: x, scal(n), y0(n), y(n)
      29              :       double precision, pointer, dimension(:) :: cont, z1, z2, z3, f1, f2
      30              :       double precision :: dd1, dd2, dd3, h, fac1, err
      31              :       logical :: first, reject
      32              : 
      33              :       ! LOCALS
      34            0 :       double precision :: hee1, hee2, hee3, sum, sum1
      35              :       integer :: i, mm, j, k, im1
      36              :       real(dp), pointer :: e1(:,:)
      37              :       real(dp), pointer, dimension(:) :: p1
      38              : 
      39            0 :       e1(1:lde1,1:nm1) => e1_1D(1:lde1*nm1)
      40            0 :       p1(1:n) => cont(m1+1:m1+n)
      41              : 
      42            0 :       ier = 0
      43            0 :       hee1=dd1/h
      44            0 :       hee2=dd2/h
      45            0 :       hee3=dd3/h
      46              : 
      47            0 :       mm=m1/m2
      48            0 :       GOTO (1,2,3,4,5,6,55,8,9,55,11,12,13,14,15), ijob
      49              : !
      50              :    1  continue
      51              : ! ------  b=identity, jacobian a full matrix
      52            0 :       do  i=1,n
      53            0 :          f2(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
      54            0 :          cont(i)=f2(i)+y0(i)
      55              :       end do
      56            0 :       call decsol(1,n,lde1,e1_1D,n,n,cont,ip1,lrd,rpar_decsol,lid,ipar_decsol,ier)
      57            0 :       GOTO 77
      58              : !
      59              :    8  continue
      60              : ! ------  b=identity, jacobian a sparse matrix
      61            0 :       do  i=1,n
      62            0 :          f2(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
      63            0 :          cont(i)=f2(i)+y0(i)
      64              :       end do
      65            0 :       call decsols(1,n,nzmax,ia,ja,sa,cont,lrd,rpar_decsol,lid,ipar_decsol,ier)
      66            0 :       GOTO 77
      67              : !
      68              :   11  continue
      69              : ! ------  b=identity, jacobian a full matrix, second order
      70            0 :       do i=1,n
      71            0 :          f2(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
      72            0 :          cont(i)=f2(i)+y0(i)
      73              :       end do
      74              :   48  continue
      75            0 :       do j=1,m2
      76            0 :          sum1=0.d0
      77            0 :          do k=mm-1,0,-1
      78            0 :             sum1=(cont(j+k*m2)+sum1)/fac1
      79            0 :             do i=1,nm1
      80            0 :                im1=i+m1
      81            0 :                cont(im1)=cont(im1)+fjac(i,j+k*m2)*sum1
      82              :             end do
      83              :          end do
      84              :       end do
      85            0 :       call decsol(1,nm1,lde1,e1_1D,nm1,nm1,p1,ip1,lrd,rpar_decsol,lid,ipar_decsol,ier)
      86            0 :       do i=m1,1,-1
      87            0 :          cont(i)=(cont(i)+cont(m2+i))/fac1
      88              :       end do
      89              :       GOTO 77
      90              : !
      91              :    2  continue
      92              : ! ------  b=identity, jacobian a banded matrix
      93            0 :       do i=1,n
      94            0 :          f2(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
      95            0 :          cont(i)=f2(i)+y0(i)
      96              :       end do
      97            0 :       call decsol(1,n,lde1,e1_1D,mle,mue,cont,ip1,lrd,rpar_decsol,lid,ipar_decsol,ier)
      98            0 :       GOTO 77
      99              : !
     100              :   12  continue
     101              : ! ------  b=identity, jacobian a banded matrix, second order
     102            0 :       do i=1,n
     103            0 :          f2(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
     104            0 :          cont(i)=f2(i)+y0(i)
     105              :       end do
     106              :   45  continue
     107            0 :       do j=1,m2
     108            0 :          sum1=0.d0
     109            0 :          do k=mm-1,0,-1
     110            0 :             sum1=(cont(j+k*m2)+sum1)/fac1
     111            0 :             do i=max(1,j-mujac),min(nm1,j+mljac)
     112            0 :                im1=i+m1
     113            0 :                cont(im1)=cont(im1)+fjac(i+mujac+1-j,j+k*m2)*sum1
     114              :             end do
     115              :          end do
     116              :       end do
     117            0 :       call decsol(1,nm1,lde1,e1_1D,mle,mue,p1,ip1,lrd,rpar_decsol,lid,ipar_decsol,ier)
     118            0 :       do i=m1,1,-1
     119            0 :          cont(i)=(cont(i)+cont(m2+i))/fac1
     120              :       end do
     121              :       GOTO 77
     122              : !
     123              :    3  continue
     124              : ! ------  b is a banded matrix, jacobian a full matrix
     125            0 :       do i=1,n
     126            0 :          f1(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
     127              :       end do
     128            0 :       do i=1,n
     129            0 :          sum=0.d0
     130            0 :          do j=max(1,i-mlmas),min(n,i+mumas)
     131            0 :             sum=sum+fmas(i-j+mbdiag,j)*f1(j)
     132              :          end do
     133            0 :          f2(i)=sum
     134            0 :          cont(i)=sum+y0(i)
     135              :       end do
     136            0 :       call decsol(1,n,lde1,e1_1D,n,n,cont,ip1,lrd,rpar_decsol,lid,ipar_decsol,ier)
     137            0 :       GOTO 77
     138              : !
     139              :    9  continue
     140              : ! ------  b is a banded matrix, jacobian a sparse matrix
     141            0 :       do i=1,n
     142            0 :          f1(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
     143              :       end do
     144            0 :       do i=1,n
     145            0 :          sum=0.d0
     146            0 :          do j=max(1,i-mlmas),min(n,i+mumas)
     147            0 :             sum=sum+fmas(i-j+mbdiag,j)*f1(j)
     148              :          end do
     149            0 :          f2(i)=sum
     150            0 :          cont(i)=sum+y0(i)
     151              :       end do
     152            0 :       call decsols(1,n,nzmax,ia,ja,sa,z1,lrd,rpar_decsol,lid,ipar_decsol,ier)
     153            0 :       GOTO 77
     154              : !
     155              :   13  continue
     156              : ! ------  b is a banded matrix, jacobian a full matrix, second order
     157            0 :       do i=1,m1
     158            0 :          f2(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
     159            0 :          cont(i)=f2(i)+y0(i)
     160              :       end do
     161            0 :       do i=m1+1,n
     162            0 :          f1(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
     163              :       end do
     164            0 :       do i=1,nm1
     165            0 :          sum=0.d0
     166            0 :          do j=max(1,i-mlmas),min(nm1,i+mumas)
     167            0 :             sum=sum+fmas(i-j+mbdiag,j)*f1(j+m1)
     168              :          end do
     169            0 :          im1=i+m1
     170            0 :          f2(im1)=sum
     171            0 :          cont(im1)=sum+y0(im1)
     172              :       end do
     173              :       GOTO 48
     174              : !
     175              :    4  continue
     176              : ! ------  b is a banded matrix, jacobian a banded matrix
     177            0 :       do i=1,n
     178            0 :          f1(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
     179              :       end do
     180            0 :       do i=1,n
     181            0 :          sum=0.d0
     182            0 :          do j=max(1,i-mlmas),min(n,i+mumas)
     183            0 :             sum=sum+fmas(i-j+mbdiag,j)*f1(j)
     184              :          end do
     185            0 :          f2(i)=sum
     186            0 :          cont(i)=sum+y0(i)
     187              :       end do
     188            0 :       call decsol(1,n,lde1,e1_1D,mle,mue,cont,ip1,lrd,rpar_decsol,lid,ipar_decsol,ier)
     189            0 :       GOTO 77
     190              : !
     191              :   14  continue
     192              : ! ------  b is a banded matrix, jacobian a banded matrix, second order
     193            0 :       do i=1,m1
     194            0 :          f2(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
     195            0 :          cont(i)=f2(i)+y0(i)
     196              :       end do
     197            0 :       do i=m1+1,n
     198            0 :          f1(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
     199              :       end do
     200            0 :       do i=1,nm1
     201            0 :          sum=0.d0
     202            0 :          do j=max(1,i-mlmas),min(nm1,i+mumas)
     203            0 :             sum=sum+fmas(i-j+mbdiag,j)*f1(j+m1)
     204              :          end do
     205            0 :          im1=i+m1
     206            0 :          f2(im1)=sum
     207            0 :          cont(im1)=sum+y0(im1)
     208              :       end do
     209              :       GOTO 45
     210              : !
     211              :    5  continue
     212              : ! ------  b is a full matrix, jacobian a full matrix
     213            0 :       do i=1,n
     214            0 :          f1(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
     215              :       end do
     216            0 :       do i=1,n
     217              :          sum=0.d0
     218            0 :          do j=1,n
     219            0 :             sum=sum+fmas(i,j)*f1(j)
     220              :          end do
     221            0 :          f2(i)=sum
     222            0 :          cont(i)=sum+y0(i)
     223              :       end do
     224            0 :       call decsol(1,n,lde1,e1_1D,n,n,cont,ip1,lrd,rpar_decsol,lid,ipar_decsol,ier)
     225            0 :       GOTO 77
     226              : !
     227              :   15  continue
     228              : ! ------  b is a banded matrix, jacobian a full matrix, second order
     229            0 :       do i=1,m1
     230            0 :          f2(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
     231            0 :          cont(i)=f2(i)+y0(i)
     232              :       end do
     233            0 :       do i=m1+1,n
     234            0 :          f1(i)=hee1*z1(i)+hee2*z2(i)+hee3*z3(i)
     235              :       end do
     236            0 :       do i=1,nm1
     237              :          sum=0.d0
     238            0 :          do j=1,nm1
     239            0 :             sum=sum+fmas(i,j)*f1(j+m1)
     240              :          end do
     241            0 :          im1=i+m1
     242            0 :          f2(im1)=sum
     243            0 :          cont(im1)=sum+y0(im1)
     244              :       end do
     245              :       GOTO 48
     246              : !
     247              :    6  continue
     248              : ! ------  b is a full matrix, jacobian a banded matrix
     249              : ! ------  this option is not provided
     250            0 :       return
     251              : !
     252              : ! --------------------------------------
     253              : !
     254              :   77  continue
     255            0 :       err=0.d0
     256            0 :       do  i=1,n
     257            0 :          err=err+(cont(i)/scal(i))**2
     258              :       end do
     259            0 :       err=max(sqrt(err/n),1.d-10)
     260              : !
     261            0 :       if (err<1.d0) return
     262            0 :       if (first.or.reject) then
     263            0 :           do i=1,n
     264            0 :              cont(i)=y(i)+cont(i)
     265              :           end do
     266            0 :           call fcn(n,x,h,cont,f1,lrpar,rpar,lipar,ipar,ier)
     267            0 :           if (ier /= 0) return
     268            0 :           nfcn=nfcn+1
     269            0 :           do i=1,n
     270            0 :              cont(i)=f1(i)+f2(i)
     271              :           end do
     272            0 :           GOTO (31,32,31,32,31,32,55,55,33,55,41,42,41,42,41), ijob
     273              : ! ------ full matrix option
     274              :   31      continue
     275            0 :           call decsol(1,n,lde1,e1_1D,n,n,cont,ip1,lrd,rpar_decsol,lid,ipar_decsol,ier)
     276            0 :           GOTO 88
     277              : ! ------ full matrix option, second order
     278              :  41      continue
     279            0 :          do j=1,m2
     280            0 :             sum1=0.d0
     281            0 :             do k=mm-1,0,-1
     282            0 :                sum1=(cont(j+k*m2)+sum1)/fac1
     283            0 :                do i=1,nm1
     284            0 :                   im1=i+m1
     285            0 :                   cont(im1)=cont(im1)+fjac(i,j+k*m2)*sum1
     286              :                end do
     287              :             end do
     288              :          end do
     289            0 :          call decsol(1,nm1,lde1,e1_1D,nm1,nm1,p1,ip1,lrd,rpar_decsol,lid,ipar_decsol,ier)
     290            0 :          do i=m1,1,-1
     291            0 :             cont(i)=(cont(i)+cont(m2+i))/fac1
     292              :          end do
     293              :          GOTO 88
     294              : ! ------ banded matrix option
     295              :  32      continue
     296            0 :          call decsol(1,n,lde1,e1_1D,mle,mue,cont,ip1,lrd,rpar_decsol,lid,ipar_decsol,ier)
     297            0 :          GOTO 88
     298              : ! ------ banded matrix option, second order
     299              :  42      continue
     300            0 :          do j=1,m2
     301            0 :             sum1=0.d0
     302            0 :             do k=mm-1,0,-1
     303            0 :                sum1=(cont(j+k*m2)+sum1)/fac1
     304            0 :                do i=max(1,j-mujac),min(nm1,j+mljac)
     305            0 :                   im1=i+m1
     306            0 :                   cont(im1)=cont(im1)+fjac(i+mujac+1-j,j+k*m2)*sum1
     307              :                end do
     308              :             end do
     309              :          end do
     310            0 :          call decsol(1,nm1,lde1,e1_1D,mle,mue,p1,ip1,lrd,rpar_decsol,lid,ipar_decsol,ier)
     311            0 :          do i=m1,1,-1
     312            0 :             cont(i)=(cont(i)+cont(m2+i))/fac1
     313              :          end do
     314              :           GOTO 88
     315              : ! ------ sparse matrix option
     316              :   33      continue
     317            0 :           call decsols(1,n,nzmax,ia,ja,sa,cont,lrd,rpar_decsol,lid,ipar_decsol,ier)
     318            0 :           GOTO 88
     319              : ! -----------------------------------
     320              :    88     continue
     321            0 :           err=0.d0
     322            0 :           do i=1,nerror
     323            0 :              err=err+(cont(i)/scal(i))**2
     324              :           end do
     325            0 :           err=max(sqrt(err/nerror),1.d-10)
     326              :        end if
     327              :        return
     328              : ! -----------------------------------------------------------
     329              :   55   continue
     330            0 :        write(*,*) 'estrad: invalid ijob', ijob
     331            0 :        call mesa_error(__FILE__,__LINE__) ! estrad
     332              :        end subroutine estrad
        

Generated by: LCOV version 2.0-1