OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
split_skew.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| split_skew ../starter/source/restart/ddsplit/split_skew.F
25!||--- called by ------------------------------------------------------
26!|| ddsplit ../starter/source/restart/ddsplit/ddsplit.F
27!||--- uses -----------------------------------------------------
28!||====================================================================
29 SUBROUTINE split_skew(CURR_PROC,ISKWP_L,ISKWP,TAG_SKN,MULTIPLE_SKEW)
30C-----------------------------------------------
31C M o d u l e s
32C-----------------------------------------------
33 USE skew_mod
34C-----------------------------------------------
35C I m p l i c i t T y p e s
36C-----------------------------------------------
37#include "implicit_f.inc"
38C-----------------------------------------------
39C C o m m o n B l o c k s
40C-----------------------------------------------
41#include "com04_c.inc"
42C-----------------------------------------------
43C D u m m y A r g u m e n t s
44C-----------------------------------------------
45 INTEGER, INTENT(IN) :: CURR_PROC
46 INTEGER, DIMENSION(NUMSKW+1), INTENT(IN) :: TAG_SKN
47 INTEGER, DIMENSION(NUMSKW+1), INTENT(IN) :: ISKWP
48 INTEGER, DIMENSION(NUMSKW+1), INTENT(INOUT) :: ISKWP_L
49 TYPE(plist_skew_), DIMENSION(NUMSKW+1), INTENT(IN) :: MULTIPLE_SKEW
50! -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*
51! CURR_PROC : integer
52! current ID processor
53! TAG_SKN : integer ; dimension=NUMSKW+1
54! tag array --> tag the i SKEW if a SPRING uses it
55! tag array=0 --> the SKEW is not used by a SPRING
56! tag array=1 --> the SKEW is used by one SPRING
57! tag array>1 --> the SKEW is used by several SPRING
58! ISKWP : integer ; dimension=NUMSKW+1
59! gives the ID processir of the current i SKEW
60! ISKWP < 0 --> the SKEW is local on a processor
61! and we don't need to communicate the data
62! ISKWP > 0 --> the SKEW is global and the data must be
63! ISKWP_L : integer ; dimension=NUMSKW+1
64! index of SKEW on the current processor, used in the engine
65! MULTIPLE_SKEW : SKEW_TYPE ; dimension=NUMSKW+1
66! MULTIPLE_SKEW(I)%PLIST(:) is a list of processor
67! where the SKEW is stuck
68! -*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-**-*-*-*-*-*-*-*-*-*-*-*-*
69
70C-----------------------------------------------
71C L o c a l V a r i a b l e s
72C-----------------------------------------------
73 INTEGER :: I,J,NN
74 INTEGER :: SIZE_SKEW,ISKEW
75C-----------------------------------------------
76C S o u r c e L i n e s
77C-----------------------------------------------
78!$COMMENT
79! SPLIT_SKEW description
80! SPLIT_SKEW initializes the SKEW index ISKWP_L used in the engine
81!
82! SPLIT_SKEW organization :
83! - loop over the NUMSKW and check if the SKEW is on the current
84! processor
85!$ENDCOMMENT
86
87 nn = 0
88 DO i=1,numskw
89 size_skew = tag_skn(i+1)
90 IF(size_skew>1) THEN
91 iskew = 0
92 DO j=1,size_skew
93 IF(multiple_skew(i+1)%PLIST(j)==curr_proc) iskew = iskew + 1
94 ENDDO
95 IF(iskew>0) THEN
96 nn = nn + 1
97 iskwp_l( nn ) = i
98 ENDIF
99 ELSE
100 IF(abs(iskwp(i+1))==curr_proc) THEN
101 nn = nn + 1
102 iskwp_l( nn ) = i
103 ENDIF
104 ENDIF
105 ENDDO
106
107 RETURN
108 END SUBROUTINE split_skew
109
110
111
112
113
114
115
116
117
118
119
120
121!||====================================================================
122!|| split_skew_save ../starter/source/restart/ddsplit/split_skew.F
123!||--- uses -----------------------------------------------------
124!||====================================================================
125 SUBROUTINE split_skew_save(CURR_PROC,ISKWP_L,ISKWP,TAG_SKN,MULTIPLE_SKEW,NSKWP)
126C-----------------------------------------------
127 USE skew_mod
128C-----------------------------------------------
129C I m p l i c i t T y p e s
130C-----------------------------------------------
131#include "implicit_f.inc"
132C-----------------------------------------------
133C C o m m o n B l o c k s
134C-----------------------------------------------
135#include "com04_c.inc"
136C-----------------------------------------------
137C D u m m y A r g u m e n t s
138C-----------------------------------------------
139 INTEGER, INTENT(IN) :: CURR_PROC
140 INTEGER, DIMENSION(NUMSKW+1), INTENT(IN) :: TAG_SKN
141 INTEGER, DIMENSION(NUMSKW+1), INTENT(IN) :: ISKWP
142 INTEGER, DIMENSION(NUMSKW+1), INTENT(INOUT) :: ISKWP_L
143 TYPE(plist_skew_), DIMENSION(NUMSKW+1), INTENT(IN) :: MULTIPLE_SKEW
144
145
146 integer, dimension(*) :: NSKWP
147C-----------------------------------------------
148C L o c a l V a r i a b l e s
149C-----------------------------------------------
150 INTEGER :: I,J,NN
151 INTEGER :: SIZE_SKEW,ISKEW
152C-----------------------------------------------
153C S o u r c e L i n e s
154C-----------------------------------------------
155 nn = 0
156 DO i=1,numskw
157 size_skew = tag_skn(i+1)
158 IF(size_skew>1) THEN
159 iskew = 0
160 DO j=1,size_skew
161 IF(multiple_skew(i+1)%PLIST(j)==curr_proc) iskew = iskew + 1
162 ENDDO
163 IF(iskew>0) THEN
164 nn = nn + 1
165 iskwp_l( nn ) = i
166 ENDIF
167 ELSE
168 IF(abs(iskwp(i+1))==curr_proc) THEN
169 nn = nn + 1
170 iskwp_l( nn ) = i
171 ENDIF
172 ENDIF
173 ENDDO
174
175 j = 0
176 do i =1,numskw+1
177 if(abs(iskwp(i))==curr_proc) j = j + 1
178 enddo
179
180 if(j/=nn) then
181 print*,' '
182 print*,' *********************** '
183 print*,' CURR PROC=',curr_proc
184 DO i =1,nn
185 print*,iskwp_l( i)
186 enddo
187 print*,' '
188 do i =1,numskw
189 if(abs(iskwp(i+1))==curr_proc) print*,i+1
190 enddo
191 print*,' *********************** '
192 endif
193
194 IF(nn/=nskwp(curr_proc)) then
195 print*,curr_proc,'pb sur taille nskwp !',nn,nskwp(curr_proc)
196 endif
197
198
199 RETURN
200 END SUBROUTINE split_skew_save
subroutine split_skew(curr_proc, iskwp_l, iskwp, tag_skn, multiple_skew)
Definition split_skew.F:30
subroutine split_skew_save(curr_proc, iskwp_l, iskwp, tag_skn, multiple_skew, nskwp)
Definition split_skew.F:126