32
33
34
35 USE elbufdef_mod
36 use element_mod , only : nixc
37
38
39
40#include "implicit_f.inc"
41
42
43
44#include "mvsiz_p.inc"
45
46
47
48#include "com04_c.inc"
49
50
51
52 INTEGER, INTENT(IN) :: IXC(NIXC,NUMELC),NEL,JFT,JLT,NFT
53 my_real,
INTENT(IN) :: x(3,numnod)
54 TYPE (ELBUF_STRUCT_), INTENT(INOUT), TARGET :: ELBUF_STR
55
56
57
58 INTEGER I,J,K,N1,N2,N3,N4,POS,POS_B,NEL_L,CORES(MVSIZ+1),FLAG,NODE_CORES_DIR2(4)
60 . dist,distb
61 TYPE(G_BUFEL_) ,POINTER :: GBUF
62
63
64 gbuf => elbuf_str%GBUF
65
66
67
68
69
70 nel_l = 0
71
72#include "vectorize.inc"
73 DO i=jft,jlt
74 flag =
min(1,abs(gbuf%UPDATE(i)))
75 nel_l = nel_l + flag
76 cores(1+nel_l*flag) = i
77 ENDDO
78
79 DO k=1,nel_l
80
81 i = cores(k+1)
82 j = nft + i
83
84
85 IF (gbuf%UPDATE(i) /= zero) THEN
86
87 IF (gbuf%ADD_NODE(i) == ixc(3,j)) THEN
88
89 node_cores_dir2(1) = 4
90 node_cores_dir2(2) = 3
91 node_cores_dir2(3) = 2
92 node_cores_dir2(4) = 1
93 ELSE
94
95 node_cores_dir2(1) = 2
96 node_cores_dir2(2) = 1
97 node_cores_dir2(3) = 4
98 node_cores_dir2(4) = 3
99 ENDIF
100
101 pos = abs(gbuf%UPDATE(i))
102 pos_b = node_cores_dir2(pos)
103 n1 = ixc(1+pos,j)
104 n2 = gbuf%ADD_NODE(nel*pos+i)
105 n3 = ixc(1+pos_b,j)
106 n4 = gbuf%ADD_NODE(nel*pos_b+i)
107
108 dist = sqrt(
max(em20,(x(1,n1)-x(1,n2))**2+(x(2,n1)-x(2,n2))**2+(x(3,n1)-x(3,n2))**2))
109 distb = sqrt(
max(em20,(x(1,n3)-x(1,n4))**2+(x(2,n3)-x(2,n4))**2+(x(3,n3)-x(3,n4))**2))
110 dist =
min(dist,distb)
111 gbuf%INTVAR(i) = log(one + 1.72*dist/gbuf%INTVAR(nel+i))
112 gbuf%INTVAR(i) =
max(zero,gbuf%INTVAR(i))
113 gbuf%INTVAR(i) =
min(one,gbuf%INTVAR(i))
114
115 ENDIF
116
117 ENDDO
118
119 RETURN