30
31
32
33
34
35
36
37
38
39! * add
the weight to
the m node
40
41
42
43
44
45 USE intbufdef_mod
46
47
48
49#include "implicit_f.inc"
50
51
52
53 INTEGER, INTENT(in) :: NLEDGE
54 INTEGER, INTENT(in) :: NUMNOD
55 INTEGER, INTENT(in) :: NSN
56 INTEGER, INTENT(in) :: NMN
57 INTEGER, INTENT(in) :: IEDGE
58 INTEGER, INTENT(in) :: NRTM
59 INTEGER, INTENT(in) :: NEDGE
60 INTEGER, DIMENSION(NSN), INTENT(in) :: NSV
61 INTEGER, DIMENSION(NMN), INTENT(in) :: MSR
62 INTEGER, DIMENSION(4,NRTM), INTENT(in) :: IRECT
63 INTEGER, DIMENSION(5,NUMNOD), INTENT(inout) :: IWCONT
64 INTEGER, INTENT(inout) :: NSNT
65 INTEGER, INTENT(inout) :: NMNT
66 TYPE(INTBUF_STRUCT_), INTENT(in) :: INTBUF_TAB
67
68
69
70 INTEGER :: I
71 INTEGER :: S_NODE_ID,M_NODE_ID,S_NODE_ID_2
72 INTEGER :: NODE_ID_1,NODE_ID_2,NODE_ID_3,NODE_ID_4
73 INTEGER, DIMENSION(:), ALLOCATABLE :: TAG_NODE
74
75
76
77
78 DO i = 1,nsn
79 s_node_id = nsv(i)
80 iwcont(1,s_node_id) = iwcont(1,s_node_id)+1
81 nsnt = nsnt + 1
82 ENDDO
83
84
85
86
87 DO i = 1,nmn
88 m_node_id = msr(i)
89 iwcont(2,m_node_id) = iwcont(2,m_node_id)+1
90 nmnt = nmnt + 1
91 ENDDO
92
93
94
95
96 ! special treatment
for edge to edge
97 IF(iedge/=0) THEN
98 ALLOCATE(tag_node(numnod))
99 tag_node(1:numnod) = 0
100
101
102 DO i=1,nedge
103 node_id_1 = intbuf_tab%LEDGE((i-1)*nledge+5)
104 node_id_2 = intbuf_tab%LEDGE((i-1)*nledge+6)
105 IF(intbuf_tab%LEDGE((i-1)*nledge+7)<0) cycle
106 IF(tag_node(node_id_1)==0) THEN
107 iwcont(1,node_id_1) = iwcont(1,node_id_1)+1
108 tag_node(node_id_1) = 1
109 nsnt = nsnt + 1
110 ENDIF
111 IF(tag_node(node_id_2)==0) THEN
112 iwcont(1,node_id_2) = iwcont(1,node_id_2)+1
113 tag_node(node_id_2) = 1
114 nsnt = nsnt + 1
115 ENDIF
116 ENDDO
117
118 tag_node(1:numnod) = 0
119
120
121 DO i=1,nedge
122 IF(iabs(intbuf_tab%LEDGE((i-1)*nledge+7))==1) cycle
123 node_id_1 = intbuf_tab%LEDGE((i-1)*nledge+5)
124 node_id_2 = intbuf_tab%LEDGE((i-1)*nledge+6)
125 IF(tag_node(node_id_1)==0) THEN
126 iwcont(2,node_id_1) = iwcont(2,node_id_1)+1
127 tag_node(node_id_1) = 1
128 nmnt = nmnt + 1
129 ENDIF
130 IF(tag_node(node_id_2)==0) THEN
131 iwcont(2,node_id_2) = iwcont(2,node_id_2)+1
132 tag_node(node_id_2) = 1
133 nmnt = nmnt + 1
134 ENDIF
135 ENDDO
136
137 tag_node(1:numnod) = 0
138
139
140 DO i=1,nrtm
141 IF(intbuf_tab%MSEGTYP24(i)/=0) cycle
142 node_id_1 = irect(1,i)
143 node_id_2 = irect(2,i)
144 node_id_3 = irect(3,i)
145 node_id_4 = irect(4,i)
146
147 IF(tag_node(node_id_1)==0) THEN
148 iwcont(2,node_id_1) = iwcont(2,node_id_1)+1
149 tag_node(node_id_1) = 1
150 nmnt = nmnt + 1
151 ENDIF
152 IF(tag_node(node_id_2)==0) THEN
153 iwcont(2,node_id_2) = iwcont(2,node_id_2)+1
154 tag_node(node_id_2) = 1
155 nmnt = nmnt + 1
156 ENDIF
157 IF(tag_node(node_id_3)==0) THEN
158 iwcont(2,node_id_3) = iwcont(2,node_id_3)+1
159 tag_node(node_id_3) = 1
160 nmnt = nmnt + 1
161 ENDIF
162 IF(tag_node(node_id_4)==0) THEN
163 iwcont(2,node_id_4) = iwcont(2,node_id_4)+1
164 tag_node(node_id_4) = 1
165 nmnt = nmnt + 1
166 ENDIF
167 ENDDO
168
169 DEALLOCATE(tag_node)
170 ENDIF
171
172
173 RETURN
end diagonal values have been computed in the(sparse) matrix id.SOL
for(i8=*sizetab-1;i8 >=0;i8--)