example3 Program

Uses

  • program~~example3~~UsesGraph program~example3 example3 module~example3_model example3_model program~example3->module~example3_model module~odrpack odrpack program~example3->module~odrpack module~odrpack_kinds odrpack_kinds program~example3->module~odrpack_kinds module~example3_model->module~odrpack_kinds module~odrpack->module~odrpack_kinds iso_fortran_env iso_fortran_env module~odrpack->iso_fortran_env module~odrpack_kinds->iso_fortran_env

Explicit ODR job, with parameter bounds, weights, delta initialized by user, and central difference derivatives.


Calls

program~~example3~~CallsGraph program~example3 example3 proc~odr odr program~example3->proc~odr proc~dodcnt dodcnt proc~odr->proc~dodcnt proc~dodpe1 dodpe1 proc~odr->proc~dodpe1 proc~dodphd dodphd proc~odr->proc~dodphd proc~workspace_dimensions workspace_dimensions proc~odr->proc~workspace_dimensions proc~doddrv doddrv proc~dodcnt->proc~doddrv interface~dcopy dcopy proc~doddrv->interface~dcopy interface~ddot ddot proc~doddrv->interface~ddot interface~dnrm2 dnrm2 proc~doddrv->interface~dnrm2 proc~derstep derstep proc~doddrv->proc~derstep proc~detaf detaf proc~doddrv->proc~detaf proc~dfctrw dfctrw proc~doddrv->proc~dfctrw proc~dflags dflags proc~doddrv->proc~dflags proc~diniwk diniwk proc~doddrv->proc~diniwk proc~diwinf diwinf proc~doddrv->proc~diwinf proc~djck djck proc~doddrv->proc~djck proc~dodchk dodchk proc~doddrv->proc~dodchk proc~dodmn dodmn proc~doddrv->proc~dodmn proc~dodper dodper proc~doddrv->proc~dodper proc~dpack dpack proc~doddrv->proc~dpack proc~dsetn dsetn proc~doddrv->proc~dsetn proc~dunpac dunpac proc~doddrv->proc~dunpac proc~dwght dwght proc~doddrv->proc~dwght proc~dwinf dwinf proc~doddrv->proc~dwinf proc~mbfb mbfb proc~doddrv->proc~mbfb proc~dhstep dhstep proc~derstep->proc~dhstep proc~dfctr dfctr proc~dfctrw->proc~dfctr proc~diniwk->interface~dcopy proc~diniwk->proc~dflags proc~dsclb dsclb proc~diniwk->proc~dsclb proc~dscld dscld proc~diniwk->proc~dscld proc~djck->proc~dhstep proc~djckm djckm proc~djck->proc~djckm proc~dodmn->interface~dcopy proc~dodmn->interface~ddot proc~dodmn->interface~dnrm2 proc~dodmn->proc~dflags proc~dodmn->proc~dpack proc~dodmn->proc~dunpac proc~dodmn->proc~dwght proc~dacces dacces proc~dodmn->proc~dacces proc~devjac devjac proc~dodmn->proc~devjac proc~dodlm dodlm proc~dodmn->proc~dodlm proc~dodpcr dodpcr proc~dodmn->proc~dodpcr proc~dodvcv dodvcv proc~dodmn->proc~dodvcv proc~dodper->proc~dodpe1 proc~dodper->proc~dodphd proc~dodpe2 dodpe2 proc~dodper->proc~dodpe2 proc~dodpe3 dodpe3 proc~dodper->proc~dodpe3 proc~dpack->interface~dcopy proc~dunpac->interface~dcopy proc~mbfb->proc~dhstep proc~dacces->proc~diwinf proc~dacces->proc~dwinf proc~devjac->interface~ddot proc~devjac->proc~dunpac proc~devjac->proc~dwght proc~difix difix proc~devjac->proc~difix proc~djaccd djaccd proc~devjac->proc~djaccd proc~djacfd djacfd proc~devjac->proc~djacfd proc~dfctr->interface~ddot proc~djckc djckc proc~djckm->proc~djckc proc~djckz djckz proc~djckm->proc~djckz proc~dpvb dpvb proc~djckm->proc~dpvb proc~dpvd dpvd proc~djckm->proc~dpvd proc~dodlm->interface~ddot proc~dodlm->interface~dnrm2 proc~dodlm->proc~dwght proc~dodstp dodstp proc~dodlm->proc~dodstp proc~dscale dscale proc~dodlm->proc~dscale proc~dodpcr->proc~dodphd proc~dodpcr->proc~dflags proc~dodpc1 dodpc1 proc~dodpcr->proc~dodpc1 proc~dodpc2 dodpc2 proc~dodpcr->proc~dodpc2 proc~dodpc3 dodpc3 proc~dodpcr->proc~dodpc3 dpodi dpodi proc~dodvcv->dpodi proc~dodvcv->proc~dodstp proc~djaccd->proc~derstep proc~djaccd->proc~dhstep proc~djacfd->proc~derstep proc~djacfd->proc~dhstep proc~djckc->proc~dpvb proc~djckc->proc~dpvd proc~djckf djckf proc~djckc->proc~djckf proc~djckz->proc~dpvb proc~djckz->proc~dpvd proc~dodpc1->proc~dhstep proc~dppt dppt proc~dodpc3->proc~dppt proc~dodstp->interface~dnrm2 proc~dodstp->proc~dwght proc~dodstp->proc~dfctr dchex dchex proc~dodstp->dchex dqrdc dqrdc proc~dodstp->dqrdc dqrsl dqrsl proc~dodstp->dqrsl dtrco dtrco proc~dodstp->dtrco dtrsl dtrsl proc~dodstp->dtrsl interface~drot drot proc~dodstp->interface~drot interface~drotg drotg proc~dodstp->interface~drotg interface~idamax idamax proc~dodstp->interface~idamax proc~desubi desubi proc~dodstp->proc~desubi proc~dsolve dsolve proc~dodstp->proc~dsolve proc~dvevtr dvevtr proc~dodstp->proc~dvevtr proc~djckf->proc~dpvb proc~djckf->proc~dpvd proc~dppnml dppnml proc~dppt->proc~dppnml proc~dsolve->interface~ddot interface~daxpy daxpy proc~dsolve->interface~daxpy proc~dvevtr->proc~dsolve

Variables

Type Attributes Name Initial
integer :: i
integer :: info
integer :: iprint
integer :: j
integer :: job
integer :: lunerr
integer :: lunrpt
integer :: m
integer :: n
integer :: np
integer :: nq
integer, allocatable :: ifixx(:,:)
real(kind=wp), allocatable :: beta(:)
real(kind=wp), allocatable :: x(:,:)
real(kind=wp), allocatable :: y(:,:)
real(kind=wp), allocatable :: wd(:,:,:)
real(kind=wp), allocatable :: we(:,:,:)
real(kind=wp), allocatable :: delta(:,:)

Source Code

program example3
!! Explicit ODR job, with parameter bounds, weights, `delta` initialized by user, and central
!! difference derivatives.

   use odrpack_kinds, only: wp
   use odrpack, only: odr
   use example3_model, only: fcn
   implicit none

   ! Variable declarations
   integer :: i, info, iprint, j, job, lunerr, lunrpt, m, n, np, nq
   integer, allocatable :: ifixx(:, :)
   real(kind=wp), allocatable :: beta(:), x(:, :), y(:, :), wd(:, :, :), we(:, :, :), &
                                 delta(:, :)

   ! Set up report files
   open (newunit=lunrpt, file='./example/report3.dat')
   lunerr = lunrpt

   ! Read problem dimensions
   open (unit=5, file='./example/data3.dat')
   read (5, fmt=*) n, m, np, nq

   ! Allocate arrays
   allocate (beta(np), x(n, m), y(n, nq), delta(n, m), we(n, nq, nq), wd(n, m, m), ifixx(n, m))

   ! Read problem data
   read (5, fmt=*) (beta(i), i=1, np)
   do i = 1, n
      read (5, fmt=*) (x(i, j), j=1, m), (y(i, j), j=1, nq)
   end do
   close (5)

   ! Specify task as explicit orthogonal distance regression
   !       With central difference derivatives
   !       Covariance matrix constructed with recomputed derivatives
   !       `delta` initialized by user
   !       Not a restart
   ! And indicate long initial report
   !       No iteration reports
   !       Long final report
   job = 01010
   iprint = 2002

   ! Initialize `delta`, and specify first decade of frequencies as fixed
   do i = 1, n
      if (x(i, 1) .lt. 100.0E0_wp) then
         delta(i, 1) = 0.0E0_wp
         ifixx(i, 1) = 0
      elseif (x(i, 1) .le. 150.0E0_wp) then
         delta(i, 1) = 0.0E0_wp
         ifixx(i, 1) = 1
      elseif (x(i, 1) .le. 1000.0E0_wp) then
         delta(i, 1) = 25.0E0_wp
         ifixx(i, 1) = 1
      elseif (x(i, 1) .le. 10000.0E0_wp) then
         delta(i, 1) = 560.0E0_wp
         ifixx(i, 1) = 1
      elseif (x(i, 1) .le. 100000.0E0_wp) then
         delta(i, 1) = 9500.0E0_wp
         ifixx(i, 1) = 1
      else
         delta(i, 1) = 144000.0E0_wp
         ifixx(i, 1) = 1
      end if
   end do

   ! Set weights
   do i = 1, n
      if (x(i, 1) .eq. 100.0E0_wp .or. x(i, 1) .eq. 150.0E0_wp) then
         we(i, 1, 1) = 0.0E0_wp
         we(i, 1, 2) = 0.0E0_wp
         we(i, 2, 1) = 0.0E0_wp
         we(i, 2, 2) = 0.0E0_wp
      else
         we(i, 1, 1) = 559.6E0_wp
         we(i, 1, 2) = -1634.0E0_wp
         we(i, 2, 1) = -1634.0E0_wp
         we(i, 2, 2) = 8397.0E0_wp
      end if
      wd(i, 1, 1) = (1.0E-4_wp)/(x(i, 1)**2)
   end do

   ! Compute solution
   call odr(fcn=fcn, &
            n=n, m=m, np=np, nq=nq, &
            beta=beta, &
            y=y, x=x, &
            delta=delta, &
            we=we, wd=wd, &
            ifixx=ifixx, &
            job=job, &
            iprint=iprint, lunerr=lunerr, lunrpt=lunrpt, &
            info=info)

end program example3