The TELEMAC-MASCARET system  trunk
sd_mdm.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE sd_mdm
3 ! *****************
4 !
5  &(vk,tail,v,l,last,next,mark)
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/07/2011
9 !***********************************************************************
10 !
11 !brief FORMS ELEMENT FROM UNELIMINATED NEIGHBOURS OF VK.
12 !
13 !note IMPORTANT : INSPIRED FROM PACKAGE CMLIB3 - YALE UNIVERSITE-YSMP
14 !
15 !history E. RAZAFINDRAKOTO (LNH)
16 !+ 20/11/06
17 !+ V5P7
18 !+
19 !
20 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
21 !+ 13/07/2010
22 !+ V6P0
23 !+ Translation of French comments within the FORTRAN sources into
24 !+ English comments
25 !
26 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
27 !+ 21/08/2010
28 !+ V6P0
29 !+ Creation of DOXYGEN tags for automated documentation and
30 !+ cross-referencing of the FORTRAN sources
31 !
32 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
33 !| L |---| INTEGER ONE-DIMENSIONAL WORK ARRAY;DIMENSION=MAX
34 !| LAST |-->| INTEGER ONE-DIMENSIONAL ARRAY USED TO RETURN THE
35 !| | | PERMUTATION OF THE ROWS AND COLUMNS OF M
36 !| | | CORRESPONDING TO THE MINIMUM DEGREE ORDERING;
37 !| | | DIMENSION = N
38 !| MARK |---| INTEGER ONE-DIMENSIONAL WORK ARRAY;DIMENSION=N
39 !| NEXT |-->| INVERSE OF THE PERMUTATION RETURNED IN LAST
40 !| | | DIMENSION = N
41 !| TAIL |<--| UNELIMINATED NEIGHBOURS OF VERTEX VK
42 !| V |-->| INTEGER ONE-DIMENSIONAL WORK ARRAY;DIMENSION=MAX
43 !| VK |-->| VERTEX NUMBER
44 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45 !
46  USE bief, ex_sd_mdm => sd_mdm
47 !
49  IMPLICIT NONE
50 !
51 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
52 !
53  INTEGER, INTENT(IN) :: VK,LAST(*),NEXT(*),V(*)
54  INTEGER, INTENT(INOUT) :: TAIL,L(*),MARK(*)
55 !
56 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
57 !
58  INTEGER TAG,S,LS,VS,ES,B,LB,VB,BLP,BLPMAX
59  equivalence(vs,es)
60 !
61 !----INITIALISES TAG AND LIST OF UNELIMINATED NEIGHBOURS
62 !
63  tag = mark(vk)
64  tail = vk
65 !
66 !----FOR EACH VERTEX/ELEMENT VS/ES IN ELEMENT LIST OF VK
67 !
68  ls = l(vk)
69 1 s = ls
70  IF(s.EQ.0) GO TO 5
71  ls = l(s)
72  vs = v(s)
73  IF(next(vs).LT.0) GO TO 2
74 !
75 !------IF VS IS UNELIMINATED VERTEX, THEN TAGS AND APPENDS TO LIST OF
76 !------UNELIMINATED NEIGHBOURS
77 !
78  mark(vs) = tag
79  l(tail) = s
80  tail = s
81  GO TO 4
82 !
83 !------IF ES IS ACTIVE ELEMENT, THEN ...
84 !--------FOR EACH VERTEX VB IN BOUNDARY LIST OF ELEMENT ES
85 !
86 2 lb = l(es)
87  blpmax = last(es)
88  DO blp=1,blpmax
89  b = lb
90  lb = l(b)
91  vb = v(b)
92 !
93 !----------IF VB IS UNTAGGED VERTEX, THEN TAGS AND APPENDS TO LIST OF
94 !----------UNELIMINATED NEIGHBOURS
95 !
96  IF(mark(vb).GE.tag) cycle
97  mark(vb) = tag
98  l(tail) = b
99  tail = b
100  ENDDO ! BLP
101 !
102 !--------MARKS ES INACTIVE
103 !
104  mark(es) = tag
105 !
106 4 GO TO 1
107 !
108 !----TERMINATES LIST OF UNELIMINATED NEIGHBOURS
109 !
110 5 l(tail) = 0
111 !
112 !-----------------------------------------------------------------------
113 !
114  RETURN
115  END
integer function next(ICOL, LIGNE)
Definition: next.f:7
subroutine sd_mdm(VK, TAIL, V, L, LAST, NEXT, MARK)
Definition: sd_mdm.f:7
Definition: bief.f:3