38
39
40
41
42
43
44
45
46
47! example : convert
the global element
id to local element
id
48
49
50
51
52
56 USE multi_fvm_mod
62 USE ebcs_mod
64
65
66
67#include "implicit_f.inc"
68
69
70
71#include "com04_c.inc"
72
73
74
75 INTEGER, INTENT(IN) :: LOCAL_NEBCS
76 INTEGER, INTENT(IN) :: NUMEL
77 INTEGER, INTENT(IN) :: PROC_ID
78 INTEGER, DIMENSION(LOCAL_NEBCS), INTENT(IN) :: LIST_OTHER_EBCS
79 INTEGER, DIMENSION(NUMEL), INTENT(IN) :: CEP
80 INTEGER, DIMENSION(NUMEL), INTENT(IN) :: LOCAL_ELEMENT_ID
81 TYPE (SURF_), DIMENSION(NSURF), TARGET, INTENT(IN) :: IGRSURF
82 TYPE(T_EBCS_TAB), INTENT(INOUT) :: EBCS_TAB,
83
84
85
86 INTEGER :: I,J,IJK
87 INTEGER :: GLOBAL_INDEX,EBCS_ID,SURF_ID,NSEG
88 INTEGER :: ELEM_ID,LOCAL_SEG
89 INTEGER, DIMENSION(:,:), ALLOCATABLE :: LIST_NODE,LIST_NODE_2
90
91
92
93
94 global_index
95 ! ---------------------------
96
97 DO i=1,local_nebcs
98 ebcs_id = list_other_ebcs(i)
99
100 IF(ebcs_tab_loc_2%tab(i)%poly%surf_id > 0) THEN
101 surf_id = ebcs_tab_loc_2%tab(i)%poly%surf_id
102 nseg = igrsurf(surf_id)%NSEG
103
104
105 IF(.NOT.ALLOCATED(ebcs_tab_loc_2%tab(i)%poly%global_ielem)) THEN
106 ALLOCATE( ebcs_tab_loc_2%tab(i)%poly%global_ielem(nseg) )
107 ENDIF
108
109 ALLOCATE( list_node(nseg,4) )
110 local_seg = 0
111
112
113 DO j = 1,nseg
114 elem_id = ebcs_tab%tab(ebcs_id)%poly%ielem(j)
115
116
117
118 IF( cep(elem_id)+1 == proc_id) THEN
119 local_seg = local_seg + 1
120 global_index = global_index + 1
121 DO ijk = 1,4
122 list_node(local_seg,ijk) = igrsurf(surf_id)%NODES(j,ijk)
123 ENDDO
124 ebcs_tab_loc_2%tab(i)%poly%iseg(local_seg) = sign(ebcs_tab%tab(ebcs_id)%poly%iseg(j),global_index)
125
126 ebcs_tab_loc_2%tab(i)%poly%ielem(local_seg) = local_element_id(ebcs_tab%tab(ebcs_id)%poly%ielem(j))
127 ebcs_tab_loc_2%tab(i)%poly%itype(local_seg) = ebcs_tab%tab(ebcs_id)%poly%itype(j)
128
129 ebcs_tab_loc_2%tab(i)%poly%global_ielem(local_seg) = ebcs_tab%tab(ebcs_id)%poly%ielem(j)
130 ENDIF
131
132 ENDDO
133
134 ALLOCATE( list_node_2(local_seg,4) )
135 list_node_2(1:local_seg,1:4) = list_node(1:local_seg,1:4)
136 CALL ebcs_tab_loc_2%tab(i)%poly%set_nodes_elems(local_seg, numnod, list_node_2)
137 DEALLOCATE( list_node,list_node_2 )
138 ENDIF
139 ENDDO
140
141 RETURN
142
end diagonal values have been computed in the(sparse) matrix id.SOL