29 SUBROUTINE split_pcyl(TOTAL_NUMBER_PCYL,LOADS,LOADS_PER_PROC)
36! * compute an index global load
id --> local load
id(local to
the processor p)
48#include "implicit_f.inc"
57 INTEGER,
INTENT(IN) :: TOTAL_NUMBER_PCYL
58 TYPE(loads_),
INTENT(INOUT) :: LOADS
59 TYPE(loads_),
DIMENSION(NSPMD),
INTENT(INOUT) :: LOADS_PER_PROC
67 INTEGER :: LOCAL_NUMBER_CYL
68 INTEGER :: LOCAL_SEGMENT_NUMBER
70 INTEGER,
DIMENSION(TOTAL_NUMBER_PCYL) :: OFFSET_CYL
74 loads%S_GLOBAL_SEGMENT_ID = 0
75 DO i=1,total_number_pcyl
76 loads%S_GLOBAL_SEGMENT_ID = loads%S_GLOBAL_SEGMENT_ID + loads%LOAD_CYL(i)%NSEG
78 ALLOCATE( loads%GLOBAL_SEGMENT_ID(loads%S_GLOBAL_SEGMENT_ID,3) )
80 DO i=1,total_number_pcyl
81 DO j=1,loads%LOAD_CYL(i)%NSEG
82 loads%GLOBAL_SEGMENT_ID(j+offset,1) = loads%CYL_RESTART(i)%SEGMENT_TO_PROC(j)
83 loads%GLOBAL_SEGMENT_ID(j+offset,3) = i
85 offset_cyl(i) = offset
86 offset = offset + loads%LOAD_CYL(i)%NSEG
93 ALLOCATE( loads_per_proc(j)%INDEX_LOAD( loads%NLOAD_CYL,2 ) )
94 DO i=1,loads%NLOAD_CYL
95 local_segment_number = loads%CYL_RESTART(i)%PROC(j)%LOCAL_SEGMENT_NUMBER
96 IF(local_segment_number>0)
THEN
97 local_number_cyl = local_number_cyl + 1
98 loads_per_proc(j)%INDEX_LOAD(local_number_cyl,1) = i
99 loads_per_proc(j)%INDEX_LOAD(i,2) = local_number_cyl
101 loads_per_proc(j)%INDEX_LOAD
106 loads_per_proc(j)%NLOAD_CYL = local_number_cyl
107 ALLOCATE( loads_per_proc(j)%LOAD_CYL( local_number_cyl ) )
109 IF(local_number_cyl>0)
THEN
110 DO i=1,local_number_cyl
111 pcyl_id = loads_per_proc(j)%INDEX_LOAD(i,1)
112 offset = offset_cyl(pcyl_id)
113 loads_per_proc(j)%LOAD_CYL(i)%ID = loads%LOAD_CYL(pcyl_id)%ID
114 loads_per_proc(j)%LOAD_CYL(i)%IFRAME = loads%LOAD_CYL
115 loads_per_proc(j)%LOAD_CYL(i)%ISENS = loads%LOAD_CYL(pcyl_id)%ISENS
116 loads_per_proc(j)%LOAD_CYL(i)%ITABLE = loads%LOAD_CYL(pcyl_id)%ITABLE
118 loads_per_proc(j)%LOAD_CYL(i)%XSCALE_R = loads%LOAD_CYL(pcyl_id)%XSCALE_R
119 loads_per_proc(j)%LOAD_CYL(i)%XSCALE_T = loads%LOAD_CYL(pcyl_id)%XSCALE_T
120 loads_per_proc(j)%LOAD_CYL(i)%YSCALE = loads%LOAD_CYL(pcyl_id)%YSCALE
122 loads_per_proc(j)%LOAD_CYL(i)%NSEG = loads%CYL_RESTART(pcyl_id)%PROC(j)%LOCAL_SEGMENT_NUMBER
123 local_segment_number = loads%CYL_RESTART(pcyl_id)%PROC(j)%LOCAL_SEGMENT_NUMBER
124 ALLOCATE( loads_per_proc(j)%LOAD_CYL(i)%SEGNOD(local_segment_number,4) )
126 DO k=1,local_segment_number
127 segment_id = loads%CYL_RESTART(pcyl_id)%PROC(j)%LOCAL_SEGMENT
128 loads%GLOBAL_SEGMENT_ID(segment_id+offset,2) = k
130 node_id = loads%LOAD_CYL(pcyl_id)%SEGNOD(segment_id,ijk) ! get
the node
id of
the segment
id on
the processor j
131 loads_per_proc(j)%LOAD_CYL(i)%SEGNOD(k,ijk) = node_id
135 loads_per_proc(j)%LOAD_CYL(i)%S_SEGMENT_ADRESS = local_segment_number
136 ALLOCATE( loads_per_proc(j)%LOAD_CYL(i)%SEGMENT_ADRESS(4,local_segment_number) )
137 loads_per_proc(j)%LOAD_CYL(i)%SEGMENT_ADRESS(1:4,1:local_segment_number) = 0