OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
gravit_imp.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!|| gravit_imp ../engine/source/loads/general/grav/gravit_imp.F
25!||--- called by ------------------------------------------------------
26!|| dyna_ina ../engine/source/implicit/imp_dyna.F
27!|| dyna_wex ../engine/source/implicit/imp_dyna.F
28!|| imp_chkm ../engine/source/implicit/imp_solv.F
29!|| imp_solv ../engine/source/implicit/imp_solv.F
30!||--- calls -----------------------------------------------------
31!|| finter ../engine/source/tools/curve/finter.F
32!|| finter_smooth ../engine/source/tools/curve/finter_smooth.F
33!||--- uses -----------------------------------------------------
34!|| finter_mixed_mod ../engine/source/tools/finter_mixed.F90
35!|| python_funct_mod ../common_source/modules/python_mod.F90
36!|| sensor_mod ../common_source/modules/sensor_mod.F90
37!||====================================================================
38 SUBROUTINE gravit_imp(IGRV ,AGRV ,NPC ,TF ,A ,
39 2 V ,X ,SKEW ,MS,WFEXTT,
40 3 NSENSOR,SENSOR_TAB,WEIGHT,IB,ITASK,
41 4 NRBYAC,IRBYAC,NPBY ,RBY , PYTHON)
42C-----------------------------------------------
43C M o d u l e s
44C-----------------------------------------------
45 USE sensor_mod
46 USE python_funct_mod
47 USE finter_mixed_mod
48C-----------------------------------------------
49C I m p l i c i t T y p e s
50C-----------------------------------------------
51#include "implicit_f.inc"
52#include "comlock.inc"
53C-----------------------------------------------
54C C o m m o n B l o c k s
55C-----------------------------------------------
56#include "com01_c.inc"
57#include "com04_c.inc"
58#include "com08_c.inc"
59#include "task_c.inc"
60#include "param_c.inc"
61C-----------------------------------------------
62C D u m m y A r g u m e n t s
63C-----------------------------------------------
64 INTEGER ,INTENT(IN) :: NSENSOR
65 INTEGER NPC(*)
66 INTEGER IGRV(NIGRV,*),IB(*)
67 INTEGER WEIGHT(*),ITASK,NRBYAC,IRBYAC(*),NPBY(NNPBY,*)
68C REAL
70 . agrv(lfacgrv,*), tf(*), a(3,*), v(3,*), ms(*),
71 . x(3,*), skew(lskew,*), wfextt, rby(nrby,*)
72 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: SENSOR_TAB
73 TYPE(PYTHON_), INTENT(INOUT) :: PYTHON
74C-----------------------------------------------
75C L o c a l V a r i a b l e s
76C-----------------------------------------------
77 INTEGER NL, N1, ISK, N2, IFUNC, K1, K2, K3, ISENS,K,NN, IAD,J, PROC, IADF, IADL, ISMOOTH
78 my_real AXI, A0, AA, VV, DYDX, TS,GAMA, MA
79 my_real MS0(NUMNOD)
80 my_real finter,finter_smooth
81 EXTERNAL finter,finter_smooth
82C-----------------------------------------------
83 wfextt=zero
84 DO nl=1,numnod
85 ms0(nl) = ms(nl)
86 ENDDO
87 DO nl=1,nrbyac
88 k=irbyac(nl)
89 nn=npby(1,k)
90 ms0(nn) = rby(15,k)
91 ENDDO
92
93 DO nl=1,ngrav
94 nn=igrv(1,nl)
95 isk=igrv(2,nl)/10
96 n2=igrv(2,nl)-10*isk
97 ifunc=igrv(3,nl)
98 iad=igrv(4,nl)
99 ismooth = 0
100 IF (ifunc > 0) ismooth = npc(2*nfunct+ifunc+1)
101C-------only for Itask=0 first-----
102 iadf = iad+itask*nn
103 iadl = iad-1+(itask+1)*nn
104 isens=0
105 DO k=1,nsensor
106 IF(igrv(6,nl)== sensor_tab(k)%SENS_ID) isens=k
107 ENDDO
108 IF(isens==0)THEN
109 ts=tt
110 ELSE
111 ts = tt - sensor_tab(isens)%TSTART
112 IF(ts<0.0)cycle
113 ENDIF
114
115 IF (ifunc > 0) THEN
116 IF (ismooth <= 0) THEN
117 a0 = agrv(1,nl)*finter_mixed(python,nfunct,ifunc,(ts-dt1)*agrv(2,nl),npc,tf)
118 gama = agrv(1,nl)*finter_mixed(python,nfunct,ifunc,ts*agrv(2,nl),npc,tf)
119 ELSE
120 a0 = agrv(1,nl)*finter_smooth(ifunc,(ts-dt1)*agrv(2,nl),npc,tf,dydx)
121 gama = agrv(1,nl)*finter_smooth(ifunc,ts*agrv(2,nl),npc,tf,dydx)
122 ENDIF
123 ELSE
124 a0 = agrv(1,nl)
125 gama = agrv(1,nl)
126 ENDIF
127C
128 proc = ispmd + 1
129 aa = gama
130 IF(n2d==1.AND.isk<=1)THEN
131!#include "vectorize.inc"
132 DO j=iad,iad+nn-1
133 n1=iabs(ib(j))
134 axi=x(2,n1)
135 ma=aa*ms0(n1)
136 a(n2,n1)=a(n2,n1)+ma
137 IF(ib(j)>0) wfextt=wfextt+half*(a0+aa)*ms(n1)*v(n2,n1)*axi*weight(n1)
138 ENDDO
139 ELSEIF(n2d==1.AND.isk>1)THEN
140 k1=3*n2-2
141 k2=3*n2-1
142 k3=3*n2
143!#include "vectorize.inc"
144 DO j=iad,iad+nn-1
145 n1=iabs(ib(j))
146 axi=x(2,n1)
147 vv = skew(k1,isk)*v(1,n1)+skew(k2,isk)*v(2,n1)+skew(k3,isk)*v(3,n1)
148 ma=aa*ms0(n1)
149 a(1,n1)=a(1,n1)+skew(k1,isk)*ma
150 a(2,n1)=a(2,n1)+skew(k2,isk)*ma
151 a(3,n1)=a(3,n1)+skew(k3,isk)*ma
152 IF(ib(j)>0) wfextt=wfextt+half*(a0+aa)*ms(n1)*vv*axi*weight(n1)
153 ENDDO
154 ELSEIF(isk<=1)THEN
155!#include "vectorize.inc"
156 DO j=iad,iad+nn-1
157 n1=iabs(ib(j))
158 ma=aa*ms0(n1)
159 a(n2,n1)=a(n2,n1)+ma
160 IF(ib(j)>0) wfextt=wfextt+half*(a0+aa)*ms(n1)*v(n2,n1)*weight(n1)
161 ENDDO
162 ELSE
163 k1=3*n2-2
164 k2=3*n2-1
165 k3=3*n2
166#include "vectorize.inc"
167 DO j=iad,iad+nn-1
168 n1=iabs(ib(j))
169 ma=aa*ms0(n1)
170 vv = skew(k1,isk)*v(1,n1)+skew(k2,isk)*v(2,n1)+skew(k3,isk)*v(3,n1)
171 a(1,n1)=a(1,n1)+skew(k1,isk)*ma
172 a(2,n1)=a(2,n1)+skew(k2,isk)*ma
173 a(3,n1)=a(3,n1)+skew(k3,isk)*ma
174 IF(ib(j)>0) wfextt=wfextt+half*(a0+aa)*ms(n1)*vv*weight(n1)
175 ENDDO
176 ENDIF
177 ENDDO !next NL
178
179 RETURN
180 END
#define my_real
Definition cppsort.cpp:32
subroutine gravit_imp(igrv, agrv, npc, tf, a, v, x, skew, ms, wfextt, nsensor, sensor_tab, weight, ib, itask, nrbyac, irbyac, npby, rby, python)
Definition gravit_imp.F:42