ranlibExF.f90

!  @file      ranlibExF.f90
!  @Author    Mitch Richling<http://www.mitchr.me/>
!  @Copyright Copyright 1994 by Mitch Richling.  All rights reserved.
!  @breif     Example of RANLIB@EOL
!  @Keywords  example of ranlib
!  @Std       F90
!  @Notes     We demonstrate the basic use of RANLIB with a simple example..
!
!             RANLIB has been around for a long time, and has a well understood
!             track record.  The package has 32 random number generators that
!             may be independently seeded and reseeded.  An easy way is
!             provided to simultaneously seed all generators to provide 32
!             independent, non-overlapping sequences of random numbers.  Each
!             generator sequence can be advanced a power of two forward to
!             provide many parallel, smaller modulus, streams if 32 isn't
!             enough.
!
!             The library also provides functions to generate random 
!             variates from common distributions:  
!                 GENBET  GeNerate BETa random deviate                             
!                 GENCHI  Generate random value of CHIsquare variable             
!                 GENEXP  GENerate EXPonential random deviate                 
!                 GENF    GENerate random deviate from the F distribution         
!                 GENGAM  GENerates random deviates from GAMma distribution            
!                 GENMN   GENerate Multivariate Normal random deviate              
!                 GENMUL  GENerate an observation from the MULtinomial distribution
!                 GENNCH  Generate random value of Noncentral CHIsquare variable       
!                 GENNF   GENerate random deviate from the Noncentral F distribution   
!                 GENNOR  GENerate random deviate from a NORmal distribution
!                 GENUNF  GeNerate Uniform Real between LOW and HIGH               
!                 IGNBIN  GENerate BINomial random deviate                    
!                 IGNNBN  GENerate Negative BiNomial random deviate
!                 IGNPOI  GENerate POIsson random deviate                     
!                 IGNUIN  GeNerate Uniform INteger                                
!             
!             Even a few kooky, buy handy functions are provided:
!                 PHRTSD  PHRase To SeeDs                                          
!                 GENPRM  GENerate random PeRMutation of iarray                    
!             
!             RANLIB is available from NetLib.  A C version exists
!             too.  I have a partial F90 style interface avaiable with
!             this code.
!             

program ranlibEx
  USE ranlibM

  implicit none

  integer        :: j, genNum, seed1, seed2
  integer        :: ranInt1, ranInt2, ranInt3
  real           :: ranReal

  ! This is a handy way to call INITGN and INRGCM for all generators,
  ! set the current generator to the first one, set the first generator
  ! to the given seeds, and the rest of the generators to seeds that
  ! will "continue" the sequence.  In simple applications, this is
  ! generally used instead of SETSD.  First arg in [1, 2147483562], and
  ! second arg in [1, 214748339]
  call SETALL(11, 9)

  ! Set current generator to 2 (it is 1 by default) -- arg in [1,32]
  call SETCGN(2)

  ! Query to see what generator we are using
  call GETCGN(genNum)
  write(*,*) 'Using generator number ', genNum

  ! Query to see what the seed is for current generator
  call GETSD(seed1, seed2)
  write (*,*) 'Seed after SETALL: ', seed1, seed2

  ! Set the seed for the current generator
  ! First arg in [1, 2147483562], and second arg in [1, 214748339]
  call SETSD(11, 9)

  ! Query to see what the seed is for current generator
  call GETSD(seed1, seed2)
  write (*,*) 'Seed after SETSD: ', seed1, seed2

  ! Note gen 1 and 2 have the same seq -- we set the seeds the same.
  write (*,*) 'Five random integers in U[1, 2147483562] from first three generators:'
  do j=1,5
     call SETCGN(1)
     ranInt1 = IGNLGI()
     call SETCGN(2)
     ranInt2 = IGNLGI()
     call SETCGN(3)
     ranInt3 = IGNLGI()     
     write (*,*) j, ranInt1, ranInt2, ranInt3
  end do

  ! Now get some uniform random reals
  call SETCGN(1)
  write (*,*) 'Five random reals in U(0,1) from generator 1:'
  do j=1,5
     ranReal = RANF()
     write (*,*) j, ranReal
  end do

  ! Lastly, we get some ranom reals from a normal distribution
  call SETCGN(1)
  write (*,*) 'Five random reals in N(1,0.0001) from generator 1:'
  do j=1,5
     ranReal = GENNOR(1.0, 0.0001)
     write (*,*) j, ranReal
  end do

end program ranlibEx

Generated by GNU enscript 1.6.4.