1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
subroutine mdm
* (vk,tail, v,l, last,next, mark)
clll. optimize
c***********************************************************************
c mdm -- form element from uneliminated neighbors of vk
c***********************************************************************
integer vk, tail, v(1), l(1), last(1), next(1), mark(1),
* tag, s,ls,vs,es, b,lb,vb, blp,blpmax
equivalence (vs, es)
c
c----initialize tag and list of uneliminated neighbors
tag = mark(vk)
tail = vk
c
c----for each vertex/element vs/es in element list of vk
ls = l(vk)
1 s = ls
if (s.eq.0) go to 5
ls = l(s)
vs = v(s)
if (next(vs).lt.0) go to 2
c
c------if vs is uneliminated vertex, then tag and append to list of
c------uneliminated neighbors
mark(vs) = tag
l(tail) = s
tail = s
go to 4
c
c------if es is active element, then ...
c--------for each vertex vb in boundary list of element es
2 lb = l(es)
blpmax = last(es)
do 3 blp=1,blpmax
b = lb
lb = l(b)
vb = v(b)
c
c----------if vb is untagged vertex, then tag and append to list of
c----------uneliminated neighbors
if (mark(vb).ge.tag) go to 3
mark(vb) = tag
l(tail) = b
tail = b
3 continue
c
c--------mark es inactive
mark(es) = tag
c
4 go to 1
c
c----terminate list of uneliminated neighbors
5 l(tail) = 0
c
return
end
|