OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
cfield_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!|| cfield_imp ../engine/source/loads/general/load_centri/cfield_imp.F
25!||--- called by ------------------------------------------------------
26!|| imp_chkm ../engine/source/implicit/imp_solv.F
27!|| imp_solv ../engine/source/implicit/imp_solv.F
28!||--- calls -----------------------------------------------------
29!|| finter ../engine/source/tools/curve/finter.F
30!|| relfram_m1 ../engine/source/tools/skew/relfram_m1.F
31!||--- uses -----------------------------------------------------
32!|| finter_mixed_mod ../engine/source/tools/finter_mixed.F90
33!|| python_funct_mod ../common_source/modules/python_mod.F90
34!|| sensor_mod ../common_source/modules/sensor_mod.F90
35!||====================================================================
36 SUBROUTINE cfield_imp(ICFIELD ,FAC ,NPC ,TF ,A ,
37 2 V ,X ,XFRAME ,MS,WFEXTT,
38 3 NSENSOR,SENSOR_TAB,WEIGHT,IFRAME,
39 4 IB,ITASK,
40 5 NRBYAC,IRBYAC,NPBY ,RBY,ISKN, PYTHON )
41C-----------------------------------------------
42C M o d u l e s
43C-----------------------------------------------
44 USE sensor_mod
45 USE python_funct_mod
46 USE finter_mixed_mod
47C-----------------------------------------------
48C I m p l i c i t T y p e s
49C-----------------------------------------------
50#include "implicit_f.inc"
51#include "comlock.inc"
52C-----------------------------------------------
53C C o m m o n B l o c k s
54C-----------------------------------------------
55#include "com04_c.inc"
56#include "com08_c.inc"
57#include "param_c.inc"
58C-----------------------------------------------
59C D u m m y A r g u m e n t s
60C-----------------------------------------------
61 INTEGER,INTENT(IN) :: NSENSOR
62 TYPE(PYTHON_), INTENT(INOUT) :: PYTHON
63 INTEGER NPC(*)
64 INTEGER ICFIELD(SIZFIELD,*),IB(*)
65 INTEGER WEIGHT(*),ITASK,NRBYAC,IRBYAC(*),NPBY(NNPBY,*),IFRAME(LISKN,*),ISKN(LISKN,*)
66 my_real fac(lfacload,*), tf(*), a(3,*), v(3,*), ms(*),x(3,*), xframe(nxframe,*),wfextt, rby(nrby,*)
67 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: SENSOR_TAB
68C-----------------------------------------------
69C L o c a l V a r i a b l e s
70C-----------------------------------------------
71 INTEGER NL, N1, IFRA, N2, IFUNC, K1, K2, K3, ISENS,K,NN, IAD,J, PROC, IADF, IADL,IDIR,IFLAG,N1FRAM,IUN,JJ,IMOVFRAM
72 my_real NX, NY, NZ, AXI, A0, AA, VV, FX, FY, FZ, AX, TS,
73 . GAMA, MA, VROT, X0, Y0, Z0, X1, Y1, Z1, X2, Y2, Z2, VROTM1
74 my_real DIST(3),AREL(3),VN1FRAM(3),AN1FRAM(3),DW(3)
75 my_real finter
76C-----------------------------------------------
77 EXTERNAL finter
78 DATA iun/1/
79C-----------------------------------------------
80C
81 DO nl=1,nloadc
82 nn=icfield(1,nl)
83 idir=icfield(2,nl)
84 ifunc=icfield(3,nl)
85 iad=icfield(4,nl)
86C-------only for Itask=0 first-----
87 iadf = iad+itask*nn
88 iadl = iad-1+(itask+1)*nn
89C
90 ifra=icfield(7,nl)
91 n1fram = 0
92 IF(ifra /= 0) n1fram = iframe(1,ifra)
93 imovfram = 0
94 IF (n1fram /= 0) THEN
95 vn1fram(1) = v(1,n1fram)
96 vn1fram(2) = v(2,n1fram)
97 vn1fram(3) = v(3,n1fram)
98 an1fram(1) = a(1,n1fram)
99 an1fram(2) = a(2,n1fram)
100 an1fram(3) = a(3,n1fram)
101 imovfram = 1
102 ELSE
103 vn1fram(1) = zero
104 vn1fram(2) = zero
105 vn1fram(3) = zero
106 an1fram(1) = zero
107 an1fram(2) = zero
108 an1fram(3) = zero
109 ENDIF
110 iflag=icfield(8,nl)
111 IF (ifra == 0) THEN
112c If no frame defined rotation /X axis of global reference system
113 x0 = 0
114 y0 = 0
115 z0 = 0
116 x2 = 1
117 y2 = 0
118 z2 = 0
119 ENDIF
120C
121 isens=icfield(6,nl)
122 IF(isens==0)THEN
123 ts=tt
124 ELSE
125 ts = tt-sensor_tab(isens)%TSTART
126 IF(ts<0.0)RETURN
127 ENDIF
128C
129 vrot = fac(1,nl)*finter_mixed(python,nfunct,ifunc,ts*fac(2,nl),npc,tf)
130 vrotm1=vrot
131 IF (dt2 > zero .AND. iflag == 2) vrotm1 = fac(1,nl)*finter_mixed(python,nfunct,ifunc,(ts-dt2)*fac(2,nl),npc,tf)
132 x0 = xframe(10,ifra+1)
133 y0 = xframe(11,ifra+1)
134 z0 = xframe(12,ifra+1)
135 IF(idir == 4) THEN
136 x2 = xframe(1,ifra+1)
137 y2 = xframe(2,ifra+1)
138 z2 = xframe(3,ifra+1)
139 ELSEIF(idir == 5) THEN
140 x2 = xframe(4,ifra+1)
141 y2 = xframe(5,ifra+1)
142 z2 = xframe(6,ifra+1)
143 ELSEIF(idir == 6) THEN
144 x2 = xframe(7,ifra+1)
145 y2 = xframe(8,ifra+1)
146 z2 = xframe(9,ifra+1)
147 ENDIF
148C
149#include "vectorize.inc"
150 DO j=iadf,iadl
151 n1=iabs(ib(j))
152 x1 = x(1,n1)-x0
153 y1 = x(2,n1)-y0
154 z1 = x(3,n1)-z0
155 dist(1)=x1-(x1*x2+y1*y2+z1*z2)*x2
156 dist(2)=y1-(x1*x2+y1*y2+z1*z2)*y2
157 dist(3)=z1-(x1*x2+y1*y2+z1*z2)*z2
158 IF (dt2 > 0 .AND. iflag == 2) THEN
159 dw(1) = ((vrot-vrotm1)/dt2)*x2
160 dw(2) = ((vrot-vrotm1)/dt2)*y2
161 dw(3) = ((vrot-vrotm1)/dt2)*z2
162 arel(1) = dist(1)*vrot*vrot + dist(2) * dw(3) - dist(3) * dw(2)
163 arel(2) = dist(2)*vrot*vrot + dist(3) * dw(1) - dist(1) * dw(3)
164 arel(3) = dist(3)*vrot*vrot + dist(1) * dw(2) - dist(2) * dw(1)
165 ELSE
166 arel(1) = dist(1)*vrot*vrot
167 arel(2) = dist(2)*vrot*vrot
168 arel(3) = dist(3)*vrot*vrot
169 ENDIF
170 IF (imovfram == 1)
171 . CALL relfram_m1(x(1,n1) ,v(1,n1), arel , xframe, vn1fram , an1fram )
172 a(1,n1)=a(1,n1)+arel(1)*ms(n1)
173 a(2,n1)=a(2,n1)+arel(2)*ms(n1)
174 a(3,n1)=a(3,n1)+arel(3)*ms(n1)
175 IF(ib(j)>0)
176 . wfextt=wfextt + half*ms(n1)*x1*x1*(vrot-vrotm1)*(vrot-vrotm1)
177 ENDDO
178C
179 ENDDO
180C
181 RETURN
182 END
subroutine cfield_imp(icfield, fac, npc, tf, a, v, x, xframe, ms, wfextt, nsensor, sensor_tab, weight, iframe, ib, itask, nrbyac, irbyac, npby, rby, iskn, python)
Definition cfield_imp.F:41
#define my_real
Definition cppsort.cpp:32
subroutine relfram_m1(xg, vg, arel, xframe, vo, ao)
Definition relfram_m1.F:31