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