30
31
32
33#include "implicit_f.inc"
34
35
36
37#include "com04_c.inc"
38
39
40
41
42 INTEGER,INTENT(IN) :: ADDCNEL(*)
43
44 INTEGER,INTENT(IN) :: CNEL(*)
45
46 INTEGER,INTENT(IN) :: INDX(*)
47
48 INTEGER,INTENT(IN) :: SUBSIZE
49
50 INTEGER,INTENT(IN) :: ADDCNEL_SUB(*)
51
52 INTEGER,INTENT(INOUT) :: CNEL_SUB(*)
53
54
55
56 INTEGER NS
57 INTEGER NG
58 INTEGER NEL
59 INTEGER NEL_SUB
60 INTEGER NUMG
61 INTEGER I,K
62
63
64
65
66
67 DO ns = 1,subsize
68
69 ng = indx(ns)
70
71 nel = addcnel(ng+2) - addcnel(ng+1)
72
73 nel_sub = addcnel_sub(ns+2) - addcnel_sub(ns+1)
74
75 k = 1
76
77 DO i = 1,nel
78
79 numg = cnel(addcnel(ng+1)+i-1)
80
81 IF (numg<=numels) THEN
82 cnel_sub(addcnel_sub(ns+1)+k-1) = numg
83 k = k + 1
84 ELSEIF (numg<=numels+numelq) THEN
85 CONTINUE
86 ELSEIF (numg<=numels+numelq+numelc) THEN
87 cnel_sub(addcnel_sub(ns+1)+k-1) = numg
88 k = k + 1
89 ELSEIF (numg<=numels+numelq+numelc+numelt) THEN
90 CONTINUE
91 ELSEIF (numg<=numels+numelq+numelc+numelt+numelp) THEN
92 CONTINUE
93 ELSEIF (numg<=numels+numelq+numelc+numelt+numelp+ !
If the element is a triangle shell
94 . numelr) THEN
95 CONTINUE
96 ELSEIF (numg<=numels+numelq+numelc+numelt+numelp+
97 . numelr+numeltg) THEN
98 cnel_sub(addcnel_sub(ns+1)+k-1) = numg
99 k = k + 1
100 ELSE
101 CONTINUE
102 ENDIF
103 ENDDO
104 IF ((k-1)/=nel_sub) THEN
105 WRITE(*,*) "WRONG NUMBER OF NON-LOCAL ELEMENTS COUNTED"
106 WRITE(*,*) "SEE BUILD_CNEL_SUB.F"
107 stop
108 ENDIF
109 ENDDO
110
111 RETURN
end diagonal values have been computed in the(sparse) matrix id.SOL