31
32
33
34
35
36
37
38
39
40
41
42 USE intbufdef_mod
43
44
45
46#include "implicit_f.inc"
47
48
49
50#include "i25edge_c.inc"
51
52
53
54 INTEGER, INTENT(in) :: NLEDGE
55 INTEGER, INTENT(in) :: NINTER
56 INTEGER, INTENT(in) :: NPARI
57 INTEGER, DIMENSION(NPARI,NINTER), INTENT(in) :: IPARI
58 TYPE(INTBUF_STRUCT_), DIMENSION(NINTER), INTENT(inout) :: INTBUF_TAB
59
60
61
62 INTEGER :: I,J
63 INTEGER :: INTERFACE_TYPE
64 INTEGER :: SOL_EDGE,SH_EDGE,IEDGE,NEDGE
65 INTEGER, DIMENSION(:), ALLOCATABLE :: TMP_ARRAY
66
67
68
69
70 DO i=1,ninter
71 intbuf_tab(i)%NUMBER_EDGE_TYPE1 = 0
72 intbuf_tab(i)%NUMBER_EDGE_TYPE1_0 = 0
73 interface_type = ipari(7,i)
74 iedge = ipari(58,i)
75
76
77 IF(interface_type==25.AND.iedge/=0) THEN
78 nedge = ipari(68,i)
79 ALLOCATE (tmp_array(nedge) )
80
81
82 DO j=1,nedge
83 IF(intbuf_tab(i)%LEDGE((j-1)*nledge+ledge_type)==1) THEN
84 intbuf_tab(i)%NUMBER_EDGE_TYPE1 = intbuf_tab(i)%NUMBER_EDGE_TYPE1 + 1
85 tmp_array(intbuf_tab(i)%NUMBER_EDGE_TYPE1) = j
86 ENDIF
87 ENDDO
88 ALLOCATE( intbuf_tab(i)%EDGE_TYPE1(intbuf_tab(i)%NUMBER_EDGE_TYPE1) )
89 intbuf_tab(i)%EDGE_TYPE1(1:intbuf_tab(i)%NUMBER_EDGE_TYPE1) = tmp_array(1:intbuf_tab(i)%NUMBER_EDGE_TYPE1)
90
91
92
93
94 sol_edge = iedge/10
95 sh_edge = iedge-10*sol_edge
96 DO j=1,nedge
97 IF(intbuf_tab(i)%LEDGE((j-1)*nledge+ledge_type)>=0.AND.
98 . (intbuf_tab(i)%LEDGE((j-1)*nledge+ledge_type)==1.OR.sh_edge==0) ) THEN
99 intbuf_tab(i)%NUMBER_EDGE_TYPE1_0 = intbuf_tab(i
100 tmp_array(intbuf_tab(i)%NUMBER_EDGE_TYPE1_0) = j
101 ENDIF
102 ENDDO
103 ALLOCATE( intbuf_tab(i)%EDGE_TYPE1_0(intbuf_tab(i)%NUMBER_EDGE_TYPE1_0) )
104 intbuf_tab(i)%EDGE_TYPE1_0(1:intbuf_tab(i
105
106
107 DEALLOCATE( tmp_array )
108 ELSE
109 ALLOCATE( intbuf_tab(i)%EDGE_TYPE1(intbuf_tab(i)%NUMBER_EDGE_TYPE1) )
110 ALLOCATE( intbuf_tab(i)%EDGE_TYPE1_0(intbuf_tab(i)%NUMBER_EDGE_TYPE1_0) )
111 ENDIF
112
113 ENDDO
114
115
116 RETURN