demo_perturb.f90 Source File


Contents

Source Code


Source Code

     program demo_perturb
     ! generate a random perturbation of an array
     use M_orderpack, only : perturb
     implicit none
     character(len=*),parameter :: g='(*(g0,1x))'
     integer,allocatable :: xout(:,:)
     integer          :: isz, i
     isz=200
        ! randomly perturb location of values
        !
        ! make an array with three initially identical rows of
        ! values perturbed by different amounts
        if(allocated(xout))deallocate(xout)
        allocate(xout(3,isz))
        xout(1,:)=[(i,i=isz,1,-1)]*10
        xout(2,:)=xout(1,:)
        xout(3,:)=xout(1,:)
        ! perturb each row a different amount
        call perturb(xout(1,:),0.0)
        call perturb(xout(2,:),0.1)
        call perturb(xout(3,:),1.0)
        ! show values
        write(*,'(a)')'count    unchanged  perturbed  random'
        do i=1,size(xout,dim=2)
           write(*,'(*(i8,1x))')i,xout(:,i)
        enddo
     char: block
     character(len=:),allocatable :: cdont(:)
        cdont=[character(len=20) :: 'a', 'be', 'car', 'dam','fan','gas','egg']
        isz=size(cdont)
        write(*,g)'Original.................:',(trim(cdont(i)),i=1,isz)
        call perturb(cdont,1.0)
        write(*,g)'Perturbed ...............:',(trim(cdont(i)),i=1,isz)
        write(*,g)
     endblock char

     end program demo_perturb