30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 USE loads_mod
45
46
47
48#include "implicit_f.inc"
49
50
51
52
53#include "com01_c.inc"
54
55
56
57 INTEGER, INTENT(IN) :: TOTAL_NUMBER_PCYL
58 TYPE(LOADS_),INTENT(INOUT) :: LOADS
59 TYPE(LOADS_),DIMENSION(NSPMD), INTENT(INOUT) :: LOADS_PER_PROC
60
61
62
63 INTEGER :: I,J,K
64 INTEGER :: IJK,OFFSET
65 INTEGER :: NODE_ID
66 INTEGER :: PCYL_ID
67 INTEGER :: LOCAL_NUMBER_CYL
68 INTEGER :: LOCAL_SEGMENT_NUMBER
69 INTEGER :: SEGMENT_ID
70 INTEGER, DIMENSION(TOTAL_NUMBER_PCYL) :: OFFSET_CYL
71
72
73
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
77 ENDDO
78 ALLOCATE( loads%GLOBAL_SEGMENT_ID(loads%S_GLOBAL_SEGMENT_ID,3) )
79 offset = 0
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
84 ENDDO
85 offset_cyl(i) = offset
86 offset = offset + loads%LOAD_CYL(i)%NSEG
87 ENDDO
88
89 DO j=1,nspmd
90 local_number_cyl = 0
91
92
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
100 ELSE
101 loads_per_proc(j)%INDEX_LOAD(i,2) = 0
102 ENDIF
103 ENDDO
104
105
106 loads_per_proc(j)%NLOAD_CYL = local_number_cyl
107 ALLOCATE( loads_per_proc(j)%LOAD_CYL( local_number_cyl ) )
108
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(pcyl_id)%IFRAME
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
117
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
121
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) )
125
126 DO k=1,local_segment_number
127 segment_id = loads%CYL_RESTART(pcyl_id)%PROC(j)%LOCAL_SEGMENT(k)
128 loads%GLOBAL_SEGMENT_ID(segment_id+offset,2) = k
129 DO ijk=1,4
130 node_id = loads%LOAD_CYL(pcyl_id)%SEGNOD(segment_id,ijk)
131 loads_per_proc(j)%LOAD_CYL(i)%SEGNOD(k,ijk) = node_id
132 ENDDO
133 ENDDO
134
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
138 ENDDO
139
140 ENDIF
141
142 ENDDO
143
144
145 RETURN