7 subroutine ims_odrv(n, nja, nsp, ia, ja, p, ip, isp, flag)
145 integer(I4B),
intent(in) :: n
146 integer(I4B),
intent(in) :: nja
147 integer(I4B),
intent(in) :: nsp
148 integer(I4B),
dimension(n + 1),
intent(in) :: ia
149 integer(I4B),
dimension(nja),
intent(in) :: ja
150 integer(I4B),
dimension(n),
intent(inout) :: p
151 integer(I4B),
dimension(n),
intent(inout) :: ip
152 integer(I4B),
dimension(nsp),
intent(inout) :: isp
153 integer(I4B),
intent(inout) :: flag
170 if (path < 1 .or. 5 < path)
go to 111
178 if (mmax < n)
go to 110
180 call ims_md(n, nja, ia, ja, mmax, isp(v), isp(l), isp(head), p, &
182 if (flag .ne. 0)
go to 100
191 110 flag = 10 * n + 1
194 111 flag = 11 * n + 1
198 subroutine ims_md(n, nja, ia, ja, mmax, v, l, head, last, next, &
287 integer(I4B),
intent(in) :: n
288 integer(I4B),
intent(in) :: nja
289 integer(I4B),
dimension(n + 1),
intent(in) :: ia
290 integer(I4B),
dimension(nja),
intent(in) :: ja
291 integer(I4B),
intent(in) :: mmax
292 integer(I4B),
dimension(mmax),
intent(inout) :: v
293 integer(I4B),
dimension(mmax),
intent(inout) :: l
294 integer(I4B),
dimension(n),
intent(inout) :: head
295 integer(I4B),
dimension(n),
intent(inout) :: last
296 integer(I4B),
dimension(n),
intent(inout) :: next
297 integer(I4B),
dimension(n),
intent(inout) :: mark
298 integer(I4B),
intent(inout) :: flag
303 integer(I4B),
pointer :: vk
304 integer(I4B),
pointer :: ek
313 call ims_mdi(n, nja, ia, ja, mmax, v, l, head, last, next, &
315 if (flag .ne. 0)
return
321 1
if (k >= n)
go to 4
324 2
if (head(dmin) > 0)
go to 3
330 head(dmin) = next(vk)
331 if (head(dmin) > 0) last(head(dmin)) = -dmin
341 call ims_mdm(n, mmax, vk, tail, v, l, last, next, mark)
344 call ims_mdp(n, mmax, k, ek, tail, v, l, head, last, next, mark)
347 call ims_mdu(n, mmax, ek, dmin, v, l, head, last, next, mark)
362 subroutine ims_mdi(n, nja, ia, ja, mmax, v, l, head, last, next, &
371 integer(I4B),
intent(in) :: n
372 integer(I4B),
intent(in) :: nja
373 integer(I4B),
dimension(n + 1),
intent(in) :: ia
374 integer(I4B),
dimension(nja),
intent(in) :: ja
375 integer(I4B),
intent(in) :: mmax
376 integer(I4B),
dimension(mmax),
intent(inout) :: v
377 integer(I4B),
dimension(mmax),
intent(inout) :: l
378 integer(I4B),
dimension(n),
intent(inout) :: head
379 integer(I4B),
dimension(n),
intent(inout) :: last
380 integer(I4B),
dimension(n),
intent(inout) :: next
381 integer(I4B),
dimension(n),
intent(inout) :: mark
382 integer(I4B),
intent(in) :: tag
383 integer(I4B),
intent(inout) :: flag
396 integer(I4B) :: nextvi
397 integer(I4B) :: ieval
411 jmax = ia(vi + 1) - 1
412 if (jmin > jmax) cycle louter
413 linner1:
do j = jmin, jmax
417 if (ieval == 0) cycle linner1
418 if (ieval > 0)
go to 4
424 if (kmax == 0)
go to 4
425 linner2:
do k = 1, kmax
427 if (v(lvk) == vj) cycle linner1
430 4
if (sfs >= mmax)
go to 101
433 mark(vi) = mark(vi) + 1
440 mark(vj) = mark(vj) + 1
455 if (nextvi > 0) last(nextvi) = vi
462 101 flag = 9 * n + vi
466 subroutine ims_mdm(n, mmax, vk, tail, v, l, last, next, mark)
474 integer(I4B),
intent(in) :: n
475 integer(I4B),
intent(in) :: mmax
476 integer(I4B),
intent(in) :: vk
477 integer(I4B),
intent(inout) :: tail
478 integer(I4B),
dimension(mmax),
intent(inout) :: v
479 integer(I4B),
dimension(mmax),
intent(inout) :: l
480 integer(I4B),
dimension(n),
intent(inout) :: last
481 integer(I4B),
dimension(n),
intent(inout) :: next
482 integer(I4B),
dimension(n),
intent(inout) :: mark
488 integer(I4B),
pointer :: vs
489 integer(I4B),
pointer :: es
494 integer(I4B) :: blpmax
509 if (next(vs) < 0)
go to 2
522 louter:
do blp = 1, blpmax
529 if (mark(vb) >= tag) cycle louter
548 subroutine ims_mdp(n, mmax, k, ek, tail, v, l, head, last, next, mark)
556 integer(I4B),
intent(in) :: n
557 integer(I4B),
intent(in) :: mmax
558 integer(I4B),
intent(inout) :: k
559 integer(I4B),
intent(in) :: ek
560 integer(I4B),
intent(inout) :: tail
561 integer(I4B),
dimension(mmax),
intent(inout) :: v
562 integer(I4B),
dimension(mmax),
intent(inout) :: l
563 integer(I4B),
dimension(n),
intent(inout) :: head
564 integer(I4B),
dimension(n),
intent(inout) :: last
565 integer(I4B),
dimension(n),
intent(inout) :: next
566 integer(I4B),
dimension(n),
intent(inout) :: mark
579 integer(I4B) :: ilpmax
588 if (ilpmax <= 0)
go to 12
589 louter:
do ilp = 1, ilpmax
595 if (last(vi) == 0)
go to 3
596 if (last(vi) > 0)
go to 1
597 head(-last(vi)) = next(vi)
599 1 next(last(vi)) = next(vi)
600 2
if (next(vi) > 0) last(next(vi)) = last(vi)
608 if (mark(es) < tag)
go to 5
617 if (lvi .ne. 0)
go to 7
623 last(ek) = last(ek) - 1
628 7
if (l(lvi) .ne. 0)
go to 9
630 if (next(evi) >= 0)
go to 9
631 if (mark(evi) < 0)
go to 8
647 mark(evi) = mark(evi) - 1
665 subroutine ims_mdu(n, mmax, ek, dmin, v, l, head, last, next, mark)
673 integer(I4B),
intent(in) :: n
674 integer(I4B),
intent(in) :: mmax
675 integer(I4B),
intent(in) :: ek
676 integer(I4B),
intent(inout) :: dmin
677 integer(I4B),
dimension(mmax),
intent(inout) :: v
678 integer(I4B),
dimension(mmax),
intent(inout) :: l
679 integer(I4B),
dimension(n),
intent(inout) :: head
680 integer(I4B),
dimension(n),
intent(inout) :: last
681 integer(I4B),
dimension(n),
intent(inout) :: next
682 integer(I4B),
dimension(n),
intent(inout) :: mark
690 integer(I4B),
pointer :: vs
691 integer(I4B),
pointer :: es
695 integer(I4B) :: ilpmax
697 integer(I4B) :: blpmax
704 tag = mark(ek) - last(ek)
709 if (ilpmax <= 0)
go to 11
710 louter:
do ilp = 1, ilpmax
714 if (last(vi) == 0) cycle louter
715 if (last(vi) > 0)
goto 8
727 if (next(vs) < 0)
go to 3
736 3
if (mark(es) < 0)
go to 6
741 linner:
do blp = 1, blpmax
746 if (mark(vb) >= tag) cycle linner
756 mark(es) = mark(es) - 1
758 if (s == 0) cycle louter
760 if (mark(es) < 0) mark(es) = mark(es) - 1
766 dvi = last(ek) + last(evi) + mark(evi)
770 9 next(vi) = head(dvi)
773 if (next(vi) > 0) last(next(vi)) = vi
774 if (dvi < dmin) dmin = dvi
subroutine ims_mdm(n, mmax, vk, tail, v, l, last, next, mark)
subroutine ims_mdu(n, mmax, ek, dmin, v, l, head, last, next, mark)
subroutine ims_md(n, nja, ia, ja, mmax, v, l, head, last, next, mark, flag)
subroutine ims_mdi(n, nja, ia, ja, mmax, v, l, head, last, next, mark, tag, flag)
subroutine ims_mdp(n, mmax, k, ek, tail, v, l, head, last, next, mark)
subroutine, public ims_odrv(n, nja, nsp, ia, ja, p, ip, isp, flag)
This module defines variable data types.