OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
kine_seatbelt_force.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!|| kine_seatbelt_force ../engine/source/tools/seatbelts/kine_seatbelt_force.F
25!||--- called by ------------------------------------------------------
26!|| resol ../engine/source/engine/resol.F
27!||--- calls -----------------------------------------------------
28!|| spmd_exch_a_seatbelt ../engine/source/mpi/seatbelts/spmd_exch_a_seatbelt.F
29!||--- uses -----------------------------------------------------
30!|| elbufdef_mod ../common_source/modules/mat_elem/elbufdef_mod.F90
31!|| seatbelt_mod ../common_source/modules/seatbelt_mod.F
32!||====================================================================
33 SUBROUTINE kine_seatbelt_force(A,STIFN,FLAG_SLIPRING_UPDATE,FLAG_RETRACTOR_UPDATE)
34C-----------------------------------------------
35C M o d u l e s
36C-----------------------------------------------
37 USE elbufdef_mod
38 USE seatbelt_mod
39C-----------------------------------------------
40C I m p l i c i t T y p e s
41C-----------------------------------------------
42#include "implicit_f.inc"
43C-----------------------------------------------
44C C o m m o n B l o c k s
45C-----------------------------------------------
46#include "com01_c.inc"
47#include "param_c.inc"
48C-----------------------------------------------------------------
49C D u m m y A r g u m e n t s
50C-----------------------------------------------
51 INTEGER FLAG_SLIPRING_UPDATE,FLAG_RETRACTOR_UPDATE
52 my_real a(3,*),stifn(*)
53C-----------------------------------------------
54C L o c a l V a r i a b l e s
55C-----------------------------------------------
56 INTEGER I,J,L,NODE2,ANCHOR_NODE
57 my_real buf_exch(n_anchor_remote_send,4)
58C---------------------------------------------------------
59C
60 l = 1
61C
62C----------------------------------------------------------
63C- KINEMATIC CONDITION OF SLIPRING - FORCE TRANSFER
64C----------------------------------------------------------
65C
66
67 DO i=1,nslipring
68 DO j=1,slipring(i)%NFRAM
69 slipring(i)%FRAM(j)%MATERIAL_FLOW_OLD = slipring(i)%FRAM(j)%MATERIAL_FLOW
70 IF (abs(slipring(i)%FRAM(j)%UPDATE)==2) flag_slipring_update = flag_slipring_update + 2
71 anchor_node = slipring(i)%FRAM(j)%ANCHOR_NODE
72 node2 = slipring(i)%FRAM(j)%NODE(2)
73 a(1,anchor_node)=a(1,anchor_node)+a(1,node2)
74 a(2,anchor_node)=a(2,anchor_node)+a(2,node2)
75 a(3,anchor_node)=a(3,anchor_node)+a(3,node2)
76 stifn(anchor_node)=stifn(anchor_node)+stifn(node2)
77 IF (slipring(i)%FRAM(j)%N_REMOTE_PROC > 0) THEN
78C-- Contribution stored to be exchanged to remote anchor node
79 buf_exch(l,1) = a(1,node2)
80 buf_exch(l,2) = a(2,node2)
81 buf_exch(l,3) = a(3,node2)
82 buf_exch(l,4) = stifn(node2)
83 l = l + 1
84 ENDIF
85 a(1,node2)=zero
86 a(2,node2)=zero
87 a(3,node2)=zero
88 ENDDO
89 ENDDO
90
91C----------------------------------------------------------
92C- KINEMATIC CONDITION OF RETRACTOR - FORCE TRANSFER
93C----------------------------------------------------------
94
95 DO i=1,nretractor
96 IF (abs(retractor(i)%UPDATE)==2) flag_retractor_update = flag_retractor_update + 2
97 anchor_node = retractor(i)%ANCHOR_NODE
98 node2 = retractor(i)%NODE(2)
99 a(1,anchor_node)=a(1,anchor_node)+a(1,node2)
100 a(2,anchor_node)=a(2,anchor_node)+a(2,node2)
101 a(3,anchor_node)=a(3,anchor_node)+a(3,node2)
102 stifn(anchor_node)=stifn(anchor_node)+stifn(node2)
103 IF (retractor(i)%N_REMOTE_PROC > 0) THEN
104C-- Contribution stored to be exchanged to remote anchor node
105 buf_exch(l,1) = a(1,node2)
106 buf_exch(l,2) = a(2,node2)
107 buf_exch(l,3) = a(3,node2)
108 buf_exch(l,4) = stifn(node2)
109 l = l + 1
110 ENDIF
111 a(1,node2)=zero
112 a(2,node2)=zero
113 a(3,node2)=zero
114 ENDDO
115
116C----------------------------------------------------------
117C- EXCHANGE OF CONTRIBUTION FOR REMOTE ANCHOR NODES
118C----------------------------------------------------------
119C
120C-- PARITH/ON is ensured because anchor node can only be on one slipring or retractor
121C
122 IF (nspmd > 1) THEN
123 CALL spmd_exch_a_seatbelt(a,stifn,buf_exch)
124 ENDIF
125
126C----------------------------------------------------------
127C
128
129C----------------------------------------------------------
130C
131 RETURN
132
133 END
#define my_real
Definition cppsort.cpp:32
subroutine kine_seatbelt_force(a, stifn, flag_slipring_update, flag_retractor_update)
type(retractor_struct), dimension(:), allocatable retractor
type(slipring_struct), dimension(:), allocatable slipring
subroutine spmd_exch_a_seatbelt(a, stifn, buf_exch)