OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
fxbyfor.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!|| fxbyfor ../engine/source/constraints/fxbody/fxbyfor.F
25!||--- called by ------------------------------------------------------
26!|| resol ../engine/source/engine/resol.F
27!||--- calls -----------------------------------------------------
28!|| fxbodfp1 ../engine/source/constraints/fxbody/fxbodfp.F
29!|| fxbodfp2 ../engine/source/constraints/fxbody/fxbodfp.F
30!|| spmd_fxb_for ../engine/source/mpi/kinematic_conditions/spmd_fxb_for.F
31!|| spmd_fxb_for_pon ../engine/source/mpi/kinematic_conditions/spmd_fxb_for_pon.F
32!||--- uses -----------------------------------------------------
33!|| anim_mod ../common_source/modules/output/anim_mod.F
34!|| elbufdef_mod ../common_source/modules/mat_elem/elbufdef_mod.f90
35!|| python_funct_mod ../common_source/modules/python_mod.F90
36!|| sensor_mod ../common_source/modules/sensor_mod.F90
37!||====================================================================
38 SUBROUTINE fxbyfor(FXBIPM, FXBRPM, FXBNOD , FXBMOD , FXBGLM ,
39 . FXBCPM, FXBCPS, FXBLM , FXBFLS , FXBDLS ,
40 . FXBDEP, FXBVIT, FXBACC , A , AR ,
41 . X , FXBMVN, FXBMCD , FXBSE , FXBSV ,
42 . FXBELM, FXBSIG, ELBUF , PARTSAV , ELBUF_TAB,
43 . FSAV , FXBFP , FXBEFW , FXBFC , D ,
44 . DT2T , ITYPTST, NELTST , FXBGRVI , FXBGRVR,
45 . IGRV , NPC , TF , FXBGRP , FXBGRW ,
46 . IPARG , NSENSOR,SENSOR_TAB, IAD_ELEM, FR_ELEM,
47 . AGRV , PYTHON)
48C-----------------------------------------------
49C M o d u l e s
50C-----------------------------------------------
51 USE python_funct_mod, ONLY : python_
52 USE elbufdef_mod
53 USE sensor_mod
54 USE anim_mod
55C-----------------------------------------------
56C I m p l i c i t T y p e s
57C-----------------------------------------------
58#include "implicit_f.inc"
59C-----------------------------------------------
60C C o m m o n B l o c k s
61C-----------------------------------------------
62#include "com01_c.inc"
63#include "com04_c.inc"
64#include "com08_c.inc"
65#include "scr03_c.inc"
66#include "scr07_c.inc"
67#include "scr18_c.inc"
68#include "param_c.inc"
69#include "fxbcom.inc"
70#include "task_c.inc"
71#include "parit_c.inc"
72C-----------------------------------------------
73C D u m m y A r g u m e n t s
74C-----------------------------------------------
75 INTEGER ,INTENT(IN) :: NSENSOR
76 INTEGER FXBIPM(NBIPM,*), FXBNOD(*), FXBELM(*), ITYPTST, NELTST,
77 . FXBGRVI(*), IGRV(NIGRV,*), NPC(*), IPARG(NPARG,*),
78 . IAD_ELEM(2,*), FR_ELEM(*)
79 my_real
80 . FXBRPM(*), FXBMOD(*), FXBGLM(*), FXBCPM(*), FXBCPS(*),
81 . FXBLM(*), FXBFLS(*), FXBDLS(*), FXBDEP(*), FXBVIT(*),
82 . FXBACC(*), A(3,*), AR(3,*), X(3,*), FXBMVN(*),
83 . FXBMCD(*), FXBSE(*), FXBSV(*), FXBSIG(*), ELBUF(*) ,
84 . partsav(*),fsav(nthvki,*), fxbfp(*),fxbefw(*),
85 . fxbfc(*), d(3,*), dt2t, fxbgrvr(*), tf(*), fxbgrp(*),
86 . fxbgrw(*), agrv(lfacgrv,*)
87 TYPE (ELBUF_STRUCT_), DIMENSION (NGROUP) :: ELBUF_TAB
88 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) :: SENSOR_TAB
89 TYPE(python_) :: python
90C-----------------------------------------------
91C L o c a l V a r i a b l e s
92C-----------------------------------------------
93 INTEGER NFX,ANOD,AMOD,AGLM,ACP,ALM,AFLS,ADLS,AVAR,ARPM,
94 . NME,NMOD,AMCD,ASE,ITN,NCYCLP1,AELM,ASIG,N2,NN2,
95 . AGRVI,AGRVR,NLGRAV,NSN,I,PMAIN
96 my_real mfextp(lenvar)
97 INTEGER NSNT, NMMAX, IAD(NFXBODY), ANOD2, J
98 my_real, DIMENSION(:,:), ALLOCATABLE :: fskyfxb
99C=======================================================================
100 n2=ninter+nrwall+nrbody+nsect+njoint+nrbag+nvolu
101 itn=0
102 IF(tt<tanim) itn=1
103 ncyclp1=ncycle+1
104 IF((ncyclp1/ncrst)*ncrst==ncyclp1.OR.mrest/=0) itn=0
105 DO i=1,lenvar
106 mfextp(i)=zero
107 ENDDO
108 IF (iparit/=0) THEN
109 nsnt=0
110 nmmax=0
111 DO nfx=1,nfxbody
112 nmod=fxbipm(4,nfx)
113 nme=fxbipm(17,nfx)
114 nsn=fxbipm(18,nfx)
115 nmmax=max(nmmax,nme+nmod)
116 iad(nfx)=nsnt
117 nsnt=nsnt+nsn
118 ENDDO
119 ALLOCATE(fskyfxb(nsnt,1+nmmax))
120 DO i=1,nsnt
121 DO j=1,nmmax
122 fskyfxb(i,j)=zero
123 ENDDO
124 ENDDO
125 ELSE
126 ALLOCATE(fskyfxb(0,0))
127 ENDIF
128 DO nfx=1,nfxbody
129 nmod=fxbipm(4,nfx)
130 anod=fxbipm(6,nfx)
131 amod=fxbipm(7,nfx)
132 avar=fxbipm(13,nfx)
133 arpm=fxbipm(14,nfx)
134 nme=fxbipm(17,nfx)
135 aelm=fxbipm(19,nfx)
136 asig=fxbipm(20,nfx)
137 nsn=fxbipm(18,nfx)
138 anod2=anod+fxbipm(3,nfx)
139 IF (nsn+fxbipm(3,nfx)>0)
140 .CALL fxbodfp1(
141 .fxbipm(1,nfx),fxbrpm(arpm),fxbnod(anod),fxbmod(amod),fxbdep(avar),
142 .fxbvit(avar) ,fxbacc(avar),a ,ar ,nme ,
143 .nmod ,itn ,fxbelm ,fxbsig ,elbuf ,
144 .partsav ,x ,d ,iparg ,nfx ,
145 .nsn ,mfextp(avar),iad_elem ,fr_elem ,nsnt ,
146 .fskyfxb ,iad(nfx) ,fxbnod(anod2),elbuf_tab )
147 ENDDO
148C
149 IF (iparit==0) THEN
150 IF(nspmd > 1) CALL spmd_fxb_for(fxbipm, mfextp)
151 ELSE
152 CALL spmd_fxb_for_pon(fxbipm, mfextp, fskyfxb, nsnt, iad)
153 ENDIF
154 DEALLOCATE(fskyfxb)
155C
156 DO nfx=1,nfxbody
157 nn2=n2+nfx
158 nmod=fxbipm(4,nfx)
159 aglm=fxbipm(8,nfx)
160 acp =fxbipm(9,nfx)
161 alm =fxbipm(10,nfx)
162 afls=fxbipm(11,nfx)
163 adls=fxbipm(12,nfx)
164 avar=fxbipm(13,nfx)
165 arpm=fxbipm(14,nfx)
166 amcd=fxbipm(15,nfx)
167 ase =(nfx-1)*15+1
168 nme=fxbipm(17,nfx)
169 nlgrav=fxbipm(25,nfx)
170 agrvi=fxbipm(26,nfx)
171 agrvr=fxbipm(27,nfx)
172 pmain=fxbipm(39,nfx)
173 IF (ispmd==pmain) THEN
174 IF (dt2t>dtfac1(11)*fxbrpm(arpm)) THEN
175 dt2t=dtfac1(11)*fxbrpm(arpm)
176 ityptst=11
177 neltst=fxbipm(2,nfx)
178 ENDIF
179 CALL fxbodfp2(
180 .fxbipm(1,nfx),fxbrpm(arpm),fxbglm(aglm),fxbcpm(acp) ,fxbcps(acp) ,
181 .fxblm(alm) ,fxbfls(afls),fxbdls(adls),fxbdep(avar),fxbvit(avar),
182 .nme ,nmod ,fxbmvn(acp) ,fxbmcd(amcd),fxbse(ase) ,
183 .fxbsv(alm) ,fsav(1,nn2) ,fxbfp(avar) ,fxbefw(nfx) ,fxbfc(alm) ,
184 .fxbgrvi(agrvi),fxbgrvr(agrvr),nlgrav ,igrv ,npc ,
185 .tf ,fxbgrp(avar),fxbgrw(nfx) ,sensor_tab ,nsensor ,
186 .mfextp(avar) ,agrv ,python )
187 ENDIF
188 ENDDO
189C
190 RETURN
191 END
192
subroutine fxbodfp2(fxbipm, fxbrpm, fxbglm, fxbcpm, fxbcps, fxblm, fxbfls, fxbdls, fxbdep, fxbvit, nme, nmod, mvn, mcd, se, sv, fsav, fxbfp, wfext, fxbfc, fxbgrvi, fxbgrvr, nlgrav, igrv, npc, tf, fxbgrp, tfgrav, sensor_tab, nsensor, mfext, agrv, python)
Definition fxbodfp.F:240
subroutine fxbodfp1(fxbipm, fxbrpm, fxbnod, fxbmod, fxbdep, fxbvit, fxbacc, a, ar, nme, nmod, itn, fxbelm, fxbsig, elbuf, partsav, x, d, iparg, nfx, nsn, mfext, iad_elem, fr_elem, nsnt, fskyfxb, iadn, iadsky, elbuf_tab)
Definition fxbodfp.F:40
subroutine fxbyfor(fxbipm, fxbrpm, fxbnod, fxbmod, fxbglm, fxbcpm, fxbcps, fxblm, fxbfls, fxbdls, fxbdep, fxbvit, fxbacc, a, ar, x, fxbmvn, fxbmcd, fxbse, fxbsv, fxbelm, fxbsig, elbuf, partsav, elbuf_tab, fsav, fxbfp, fxbefw, fxbfc, d, dt2t, ityptst, neltst, fxbgrvi, fxbgrvr, igrv, npc, tf, fxbgrp, fxbgrw, iparg, nsensor, sensor_tab, iad_elem, fr_elem, agrv, python)
Definition fxbyfor.F:48
#define max(a, b)
Definition macros.h:21
subroutine spmd_fxb_for(fxbipm, mfextp)
subroutine spmd_fxb_for_pon(fxbipm, mfextp, fskyfxb, dsky, iadn)