revdep/library/silicate/deldir/SavedRatfor/locn.r

subroutine locn(i,j,kj,nadj,madj,x,y,ntot,eps)

# Find the appropriate location for j in the adjacency list
# of i.  This is the index which j ***will*** have when
# it is inserted into the adjacency list of i in the
# appropriate place.  Called by insrt.

implicit double precision(a-h,o-z)
dimension nadj(-3:ntot,0:madj), x(-3:ntot), y(-3:ntot)
logical before

n = nadj(i,0)

# If there is nothing already adjacent to i, then j will have place 1.
if(n==0) {
        kj = 1
        return
}

# Run through i's list, checking if j should come before each element
# of that list.  (I.e. if i, j, and k are in anti-clockwise order.)
# If j comes before the kj-th item, but not before the (kj-1)-st, then
# j should have place kj.
do ks = 1,n {
	kj = ks
        k = nadj(i,kj)
        call acchk(i,j,k,before,x,y,ntot,eps)
        if(before) {
                km = kj-1
                if(km==0) km = n
                k = nadj(i,km)
                call acchk(i,j,k,before,x,y,ntot,eps)
                if(before) next
                # If j is before 1 and after n, then it should
                # have place n+1.
                if(kj==1) kj = n+1
                return
        }
}

# We've gone right through the list and haven't been before
# the kj-th item ***and*** after the (kj-1)-st on any occasion.
# Therefore j is before everything (==> place 1) or after
# everything (==> place n+1).
if(before) kj = 1
else kj = n+1

return
end
mdsumner/gibble documentation built on May 25, 2020, 10:31 a.m.