Main Page   Class Hierarchy   Data Structures   File List   Data Fields   Globals  

frlnfnc.f

Go to the documentation of this file.
00001 
00002 c
00003 c       Copyright (c) 1986,1987,1988,1989,1990,1991,1992,1993,
00004 c       by Steve McMillan, Drexel University, Philadelphia, PA.
00005 c
00006 c       All rights reserved.
00007 c
00008 c       Redistribution and use in source and binary forms are permitted
00009 c       provided that the above copyright notice and this paragraph are
00010 c       duplicated in all such forms and that any documentation,
00011 c       advertising materials, and other materials related to such
00012 c       distribution and use acknowledge that the software was developed
00013 c       by the author named above.
00014 c
00015 c       THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
00016 c       IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
00017 c       WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
00018 c
00019 
00020       subroutine fr lnfnc(x1, x2, dx, mode, first, npost)
00021       save
00022       data eps/0.001/
00023 
00024 c     mode = 1:  Establish fenceposts between x1 and x2, at interval dx
00025 c     mode = 2:  Move posts out to contain x1 and x2
00026 
00027       if (x2.lt.x1) then
00028          small = x2
00029          big = x1
00030       else
00031          small = x1
00032          big = x2
00033       end if
00034 
00035 c     Note attempts to deal with real to integer conversion!
00036 
00037       dxg = abs(dx)
00038       fs = small/dxg
00039       if (fs .gt. 0) then
00040          ns = fs + eps
00041       else
00042          ns = fs - eps
00043       endif
00044 
00045       if (abs(fs-ns).gt.eps) then
00046          if (small.gt.0.) ns = ns + 1
00047          if (mode.eq.2) ns = ns - 1
00048       end if
00049 
00050       fb = big/dxg
00051       if (fb .gt. 0) then
00052          nb = fb + eps
00053       else
00054          nb = fb - eps
00055       endif
00056 
00057       if (abs(fb-nb).gt.eps) then
00058          if (big.lt.0.) nb = nb - 1
00059          if (mode.eq.2) nb = nb + 1
00060       end if
00061 
00062       if (x2.le.x1) then
00063          i = nb
00064          nb = ns
00065          ns = i
00066       end if
00067 
00068       first = ns*dxg
00069       npost = abs(nb-ns) + 1
00070 
00071       if (mode.eq.2) then
00072          x1 = first
00073          x2 = nb*dxg
00074       end if
00075 
00076       end

Generated at Sun Feb 24 09:57:00 2002 for STARLAB by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001