OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
intmass_update.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!|| intmass_update ../engine/source/interfaces/interf/intmass_update.F
25!||--- called by ------------------------------------------------------
26!|| inttri ../engine/source/interfaces/intsort/inttri.F
27!||--- uses -----------------------------------------------------
28!|| intbufdef_mod ../common_source/modules/interfaces/intbufdef_mod.F90
29!|| message_mod ../engine/share/message_module/message_mod.F
30!|| tri25ebox ../engine/share/modules/tri25ebox.F
31!|| tri7box ../engine/share/modules/tri7box.F
32!||====================================================================
33 SUBROUTINE intmass_update(NIN , IPARI, INTBUF_TAB, MS )
34C-----------------------------------------------
35C M o d u l e s
36C-----------------------------------------------
37 USE message_mod
38 USE intbufdef_mod
39 USE tri25ebox
40 USE tri7box
41C-----------------------------------------------
42C I m p l i c i t T y p e s
43C-----------------------------------------------
44#include "implicit_f.inc"
45C-----------------------------------------------
46C C o m m o n B l o c k s
47C-----------------------------------------------
48#include "com04_c.inc"
49#include "param_c.inc"
50#include "com01_c.inc"
51C-----------------------------------------------------------------
52C D u m m y A r g u m e n t s
53C-----------------------------------------------
54 INTEGER , INTENT(IN ) :: NIN
55 INTEGER , INTENT(IN ) :: IPARI(NPARI)
56 my_real , INTENT(IN ) :: ms(numnod)
57 TYPE(intbuf_struct_) , INTENT(INOUT ) :: INTBUF_TAB
58C-----------------------------------------------
59C L o c a l V a r i a b l e s
60C-----------------------------------------------
61 INTEGER
62 . NS ,N1, N2, N3 ,N4 ,I ,NTY ,NRTM ,NSN ,NSNR ,NEDGE ,NEDGR
63 my_real
64 . stfacm ,ms1 ,ms2 ,ms3 ,ms4
65C----------------------------------------------------------
66C Main and secondary masses needed for contact stiffness computation
67C----------------------------------------------------------
68
69 nrtm = ipari(4)
70 nsn = ipari(5)
71 stfacm = intbuf_tab%VARIABLES(47)
72 DO i=1,nsn
73 ns = intbuf_tab%NSV(i)
74 intbuf_tab%STIFMSDT_S(i) = stfacm*ms(ns)
75 ENDDO
76 DO i=1,nrtm
77 n1=intbuf_tab%IRECTM(4*(i-1)+1)
78 ms1 = ms(n1)
79 n2=intbuf_tab%IRECTM(4*(i-1)+2)
80 ms2 = ms(n2)
81 n3=intbuf_tab%IRECTM(4*(i-1)+3)
82 ms3 = ms(n3)
83 n4=intbuf_tab%IRECTM(4*(i-1)+4)
84 IF (n3 /= n4) THEN
85 ms4 = ms(n4)
86 intbuf_tab%STIFMSDT_M(i) = stfacm*fourth*(ms1+ms2+ms3+ms4)
87 ELSE
88 intbuf_tab%STIFMSDT_M(i) = stfacm*third*(ms1+ms2+ms3)
89 ENDIF
90 ENDDO
91
92 IF(ipari(7)==25.AND.ipari(58)>0) THEN ! case of edges
93 nedge = ipari(68)
94 DO i=1,nedge
95 n1= intbuf_tab%LEDGE(nledge*(i-1)+5)
96 n2= intbuf_tab%LEDGE(nledge*(i-1)+6)
97 ms1 = ms(n1)
98 ms2 = ms(n2)
99 intbuf_tab%STIFMSDT_EDG(i) = half*stfacm*(ms1+ms2)
100 ENDDO
101 ENDIF
102
103
104 IF(nspmd > 1) THEN
105 nsnr = ipari(24)
106 DO i=1,nsnr
107 stif_msdt_fi(nin)%P(i) = stfacm*msfi(nin)%P(i)
108 ENDDO
109 IF(ipari(7)==25.AND.ipari(58)>0) THEN ! case of edges
110 nedgr = ipari(69)
111 DO i=1,nedgr
112 n1 =2*(i-1)+1
113 n2 =2*i
114 ms1 = msfie(nin)%P(n1)
115 ms2 = msfie(nin)%P(n2)
116 stife_msdt_fi(nin)%P(i) = half*stfacm*(ms1+ms2)
117 ENDDO
118 ENDIF
119 ENDIF
120
121 RETURN
122 END SUBROUTINE intmass_update
#define my_real
Definition cppsort.cpp:32
subroutine intmass_update(nin, ipari, intbuf_tab, ms)
type(real_pointer), dimension(:), allocatable stif_msdt_fi
Definition tri7box.F:552
type(real_pointer), dimension(:), allocatable msfi
Definition tri7box.F:449
type(real_pointer), dimension(:), allocatable stife_msdt_fi
Definition tri7box.F:553
type(real_pointer), dimension(:), allocatable msfie
Definition tri7box.F:449