OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i24sti3.F File Reference
#include "implicit_f.inc"
#include "com01_c.inc"
#include "com04_c.inc"
#include "param_c.inc"
#include "remesh_c.inc"
#include "scr03_c.inc"
#include "scr17_c.inc"
#include "units_c.inc"
#include "scr08_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine i24sti3 (x, irect, stf, ixs, pm, geo, nrt, ixc, nint, stfac, nty, gap, noint, stfn, nsn, ms, nsv, ixtg, igap, wa, gap_s, gap_m, gapmin, ixt, ixp, gapinf, gapmax_s, inacti, knod2els, knod2elc, knod2eltg, nod2els, nod2elc, nod2eltg, igrsurf, intth, ieles, ielec, areas, sh4tree, sh3tree, ipart, ipartc, iparttg, thk, thk_part, ixr, itab, bgapsmx, ixs10, msegtyp, nrt_sh, ixs16, ixs20, gap_n, mvoisn, ilev, igrsurf2, gapmax_m, id, titr, igap0, pen_old, ipartns, iparts, igeo, fillsol, pm_stack, iworksh, intfric, tagprt_fric, ipartfrics, ipartfricm, intbuf_fric_tab, intnitsche, nrts, irects, ielnrts, adrects, facnrts, nmn, msr, ipartt, ipartp, ipartr, elem_linked_to_segment, igsti, flag_elem_inter25)
subroutine insol3et (x, irect, ixs, nint, nel, i, area, noint, knod2els, nod2els, ixs10, ixs16, ixs20, nnod)
subroutine i24gapm (x, irect, stf, ixs, pm, geo, nrt, ixc, nint, stfac, nty, gap, noint, stfn, nsn, ms, nsv, ixtg, igap, gap_m, ixt, ixp, slsfac, dxm, ndx, knod2els, knod2elc, knod2eltg, nod2els, nod2elc, nod2eltg, igrsurf, intth, ieles, ielec, areas, sh4tree, sh3tree, ipart, ipartc, iparttg, thk, thk_part, ixr, itab, bgapsmx, ixs10, msegtyp, ixs16, ixs20, gap_n, gaps1, gaps2, gapmx, gapmn, gapscale, nshift, gapmax_m, id, titr, igeo, fillsol, nrtt, pm_stack, iworksh, intfric, tagprt_fric, ipartfrics, ipartfricm, iparts, intbuf_fric_tab, elem_linked_to_segment, igsti, flag_elem_inter25)
subroutine i24bord (nseg, surf_nodes, tagb)
subroutine i24normns (x, irect, nrt, nsn, nsv, pen_old, stf)
subroutine normvec (r, s, t)
subroutine i24ll_kg (x, irect, ixs, pm, wa, geo, nrt, ixc, nint, nty, noint, nsn, nsv, ixtg, ixt, ixp, ipart, ipartc, iparttg, thk, thk_part, ixr, itab, ixs10, ixs16, ixs20, nmn, msr, ll_s, ll_m, ipartt, ipartp, ipartr, igeo)
subroutine inelts_np (x, irect, ixs, nrev, nel, i, area, noint, ir, surf_eltyp, surf_elem)
subroutine insolbox (x, s_type, s_el, noint, ixs, ixs10, ixs16, ixs20, ns, gap, ipart_e, ipart_ns, ipen0, ins)

Function/Subroutine Documentation

◆ i24bord()

subroutine i24bord ( integer nseg,
integer, dimension(nseg,4) surf_nodes,
integer, dimension(*) tagb )

Definition at line 1805 of file i24sti3.F.

1806C-----------------------------------------------
1807C I m p l i c i t T y p e s
1808C-----------------------------------------------
1809#include "implicit_f.inc"
1810C-----------------------------------------------
1811C D u m m y A r g u m e n t s
1812C-----------------------------------------------
1813 INTEGER TAGB(*),NSEG,SURF_NODES(NSEG,4)
1814C-----------------------------------------------
1815C L o c a l V a r i a b l e s
1816C-----------------------------------------------
1817 INTEGER I,J,K,L,NLMAX,STAT,LL,I1,I2,I3,I4,I5,I1M,I2M,IS,BORD,BOLD
1818 INTEGER NEXTK(4),IWORK(70000),NL
1819 INTEGER, DIMENSION(:,:), ALLOCATABLE ::
1820 . LINEIX
1821 INTEGER, DIMENSION(:), ALLOCATABLE ::
1822 . INDEX
1823 DATA nextk/2,3,4,1/
1824C=======================================================================
1825 nlmax = 4*nseg
1826 ALLOCATE (lineix(2,nlmax) ,stat=stat)
1827 ALLOCATE (index(2*nlmax) ,stat=stat)
1828c---------------------------------------
1829c recherche de toutes les lignes dans la surface
1830c---------------------------------------
1831 is = 0
1832 ll = 0
1833 DO j=1,nseg
1834 is = is+1
1835 i1=surf_nodes(j,1)
1836 i2=surf_nodes(j,2)
1837 i3=surf_nodes(j,3)
1838 i4=surf_nodes(j,4)
1839 DO k=1,4
1840 i1=surf_nodes(j,k)
1841 i2=surf_nodes(j,nextk(k))
1842 ll = ll+1
1843 IF(i2 > i1)THEN
1844 lineix(1,ll) = i1
1845 lineix(2,ll) = i2
1846 ELSE
1847 lineix(1,ll) = i2
1848 lineix(2,ll) = i1
1849 ENDIF
1850 ENDDO
1851 ENDDO
1852C
1853 CALL my_orders(0,iwork,lineix,index,ll,2)
1854
1855c---------------------------------------
1856c suppression des lignes doubles
1857c---------------------------------------
1858 i1m = lineix(1,index(1))
1859 i2m = lineix(2,index(1))
1860 bord=1
1861 bold=1
1862 DO l=2,ll
1863 i1 = lineix(1,index(l))
1864 i2 = lineix(2,index(l))
1865 IF(i1m == i2m)THEN
1866c triangle on ne fait rien
1867 bold=1
1868 ELSEIF(bold == 0)THEN
1869c idem precedent on ne fait rien
1870 bold=1
1871 ELSEIF(i2 == i2m .and. i1 == i1m)THEN
1872c idem suivant pas de bord
1873 bord=0
1874 bold=0
1875 ELSE
1876 bord=1 ! bord
1877 bold=1
1878 tagb(i1m) = 1
1879 tagb(i2m) = 1
1880 ENDIF
1881 i1m = i1
1882 i2m = i2
1883 ENDDO
1884
1885 IF(bord==1)THEN
1886c derniere arrete est un bord
1887 tagb(i1) = 1
1888 tagb(i2) = 1
1889 ENDIF
1890
1891
1892 DEALLOCATE (index)
1893 DEALLOCATE (lineix)
1894C-----------
1895 RETURN
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
Definition my_orders.c:82

◆ i24gapm()

subroutine i24gapm ( x,
integer, dimension(4,*) irect,
stf,
integer, dimension(nixs,*) ixs,
pm,
geo,
integer nrt,
integer, dimension(nixc,*) ixc,
integer nint,
stfac,
integer nty,
gap,
integer noint,
stfn,
integer nsn,
ms,
integer, dimension(*) nsv,
integer, dimension(nixtg,*) ixtg,
integer igap,
gap_m,
integer, dimension(nixt,*) ixt,
integer, dimension(nixp,*) ixp,
slsfac,
dxm,
integer ndx,
integer, dimension(*) knod2els,
integer, dimension(*) knod2elc,
integer, dimension(*) knod2eltg,
integer, dimension(*) nod2els,
integer, dimension(*) nod2elc,
integer, dimension(*) nod2eltg,
type (surf_) igrsurf,
integer intth,
integer, dimension(*) ieles,
integer, dimension(*) ielec,
areas,
integer, dimension(ksh4tree,*) sh4tree,
integer, dimension(ksh3tree,*) sh3tree,
integer, dimension(lipart1,*) ipart,
integer, dimension(*) ipartc,
integer, dimension(*) iparttg,
thk,
thk_part,
integer, dimension(nixr,*) ixr,
integer, dimension(*) itab,
bgapsmx,
integer, dimension(6,*) ixs10,
integer, dimension(*) msegtyp,
integer, dimension(*) ixs16,
integer, dimension(*) ixs20,
gap_n,
gaps1,
gaps2,
gapmx,
gapmn,
gapscale,
integer nshift,
gapmax_m,
integer id,
character(len=nchartitle) titr,
integer, dimension(npropgi,*) igeo,
fillsol,
integer nrtt,
pm_stack,
integer, dimension(3,*) iworksh,
integer intfric,
integer, dimension(*) tagprt_fric,
integer, dimension(*) ipartfrics,
integer, dimension(*) ipartfricm,
integer, dimension(*) iparts,
type(intbuf_fric_struct_), dimension(*) intbuf_fric_tab,
integer, dimension(numels), intent(inout) elem_linked_to_segment,
integer igsti,
integer, dimension(ninter25,numels), intent(in) flag_elem_inter25 )
Parameters
[in,out]elem_linked_to_segmentworking array, dim=numels

Definition at line 1089 of file i24sti3.F.

1106C-----------------------------------------------
1107C M o d u l e s
1108C-----------------------------------------------
1109 USE my_alloc_mod
1110 USE message_mod
1111 USE intbuf_fric_mod
1112 USE groupdef_mod
1113C-----------------------------------------------
1114C I m p l i c i t T y p e s
1115C-----------------------------------------------
1116#include "implicit_f.inc"
1117C-----------------------------------------------
1118C C o m m o n B l o c k s
1119C-----------------------------------------------
1120#include "com01_c.inc"
1121#include "com04_c.inc"
1122#include "param_c.inc"
1123#include "scr17_c.inc"
1124#include "scr08_c.inc"
1125C-----------------------------------------------
1126C D u m m y A r g u m e n t s
1127C-----------------------------------------------
1128 INTEGER NRT, NINT, NTY, NOINT,NSN,IGAP, NDDIM,NDX,INTFRIC,IGSTI
1129 INTEGER IRECT(4,*), IXS(NIXS,*), IXC(NIXC,*),
1130 . NSV(*), IXTG(NIXTG,*), IXT(NIXT,*), IXP(NIXP,*),
1131 . KNOD2ELS(*), KNOD2ELC(*), KNOD2ELTG(*), NOD2ELS(*), NOD2ELC(*),
1132 . NOD2ELTG(*), IELES(*), INTTH, IELEC(*),
1133 . SH3TREE(KSH3TREE,*), SH4TREE(KSH4TREE,*),IXR(NIXR,*) ,
1134 . IPART(LIPART1,*), IPARTC(*), IPARTTG(*),
1135 . ITAB(*), IXS10(6,*),MSEGTYP(*), IXS16(*), IXS20(*),NSHIFT,
1136 . IGEO(NPROPGI,*),NRTT,IWORKSH(3,*),TAGPRT_FRIC(*),IPARTFRICS(*),
1137 . IPARTFRICM(*),IPARTS(*)
1138 INTEGER, DIMENSION(NUMELS), INTENT(INOUT):: ELEM_LINKED_TO_SEGMENT !< working array, dim=numels
1139C REAL
1140 my_real
1141 . stfac, gap,bgapsmx,gaps1 ,gaps2,gapmx ,gapmn ,gapscale
1142C REAL
1143 my_real
1144 . x(3,*), stf(*), pm(npropm,*), geo(npropg,*), stfn(*),
1145 . ms(*),gap_m(*),gap_n(12,*),
1146 . areas(*),thk(*),thk_part(*),slsfac,dxm ,gapmax_m, fillsol(*),
1147 . pm_stack(3,*)
1148 INTEGER ID
1149 CHARACTER(LEN=NCHARTITLE) :: TITR
1150 TYPE(INTBUF_FRIC_STRUCT_) INTBUF_FRIC_TAB(*)
1151 TYPE (SURF_) :: IGRSURF
1152 INTEGER, INTENT(IN) :: FLAG_ELEM_INTER25(NINTER25,NUMELS)
1153C-----------------------------------------------
1154C L o c a l V a r i a b l e s
1155C-----------------------------------------------
1156 INTEGER I, J, INRT, NELS, MT, JJ, JJJ, NELC,
1157 . MG, NELTG,
1158 . IP, NREV,IGTYP,IPGMAT,IGMAT,
1159 . ISUBSTACK,IPL,IPG,NINV,ICONTR,NIN25
1160 INTEGER, DIMENSION(:),ALLOCATABLE :: TAGELEMS,INDEXE
1161C REAL
1162 my_real
1163 . area, vol, dx, gapm, ddx,
1164 . st,bulk
1165 INTEGER :: IELEM(2)
1166 LOGICAL :: PRINT_ERROR
1167 INTEGER, DIMENSION(4) :: NODE_ID
1168C----------------------
1169 nrev=0
1170 ipgmat = 700
1171 IF(numels > 0) THEN
1172 CALL my_alloc(tagelems,numels)
1173 tagelems = 0
1174 CALL my_alloc(indexe,numels)
1175 indexe = 0
1176 ENDIF
1177 ninv = 0
1178 DO i=1+nshift,nrt+nshift
1179 stf(i)=zero
1180 IF(intth > 0 ) ieles(i) = 0
1181 IF(slsfac<zero)stf(i)=slsfac
1182 gapm =zero
1183 gap_m(i)=gapm
1184 inrt=i-nshift
1185 CALL i4gmx3(x,irect,i,gapmx)
1186C-----------------to avoid too much print-out in 0.out file
1187 CALL inelts_np(x ,irect(1,1+nshift),ixs ,nrev ,nels ,
1188 . inrt ,area ,noint,0 ,igrsurf%ELTYP,
1189 . igrsurf%ELEM)
1190 IF(nels/=0)THEN
1191 mt=ixs(1,nels)
1192 mg=ixs(nixs-1,nels)
1193 icontr = igeo(97,mg)
1194 IF(mt>0)THEN
1195 DO jj=1,8
1196 jjj=ixs(jj+1,nels)
1197 xc(jj)=x(1,jjj)
1198 yc(jj)=x(2,jjj)
1199 zc(jj)=x(3,jjj)
1200 END DO
1201 CALL volint(vol)
1202 IF (icontr==1 .OR. igsti==-1) THEN
1203 bulk = pm(107,mt)
1204! IF (ICONTR==1 ) BULK = HUNDRED*BULK
1205 ELSE
1206 bulk = pm(32,mt)
1207 END IF
1208 stf(i)=slsfac*fillsol(nels)*area*area*bulk/vol
1209 ELSE
1210 IF(nint>=0) THEN
1211 CALL ancmsg(msgid=95,
1212 . msgtype=msgwarning,
1213 . anmode=aninfo_blind_2,
1214 . i1=id,
1215 . c1=titr,
1216 . i2=ixs(nixs,nels),
1217 . c2='SOLID',
1218 . i3=i)
1219 ENDIF
1220 IF(nint<0) THEN
1221 CALL ancmsg(msgid=96,
1222 . msgtype=msgwarning,
1223 . anmode=aninfo_blind_2,
1224 . i1=id,
1225 . c1=titr,
1226 . i2=ixs(nixs,nels),
1227 . c2='SOLID',
1228 . i3=i)
1229 ENDIF
1230 ENDIF
1231 gap_n(1,i)=vol/area
1232C -----Friction model ------
1233 IF(intfric > 0) THEN
1234 ip= iparts(nels)
1235 ipg = tagprt_fric(ip)
1236 IF(ipg > 0) THEN
1238 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
1239 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl)
1240 ipartfricm(i) = ipl
1241 ENDIF
1242 ENDIF
1243C------------------------------------
1244 cycle
1245 ELSE
1246 CALL ineltc(nelc ,neltg ,inrt ,igrsurf%ELTYP, igrsurf%ELEM)
1247 IF(neltg/=0) THEN
1248 mt=ixtg(1,neltg)
1249 mg=ixtg(5,neltg)
1250 igtyp = igeo(11,mg)
1251 igmat = igeo(98,mg)
1252 ip = iparttg(neltg)
1253 IF ( thk_part(ip) /= zero .AND. iintthick == 0) THEN
1254 dx=thk_part(ip)*gapscale
1255 ELSEIF ( thk(numelc+neltg) /= zero .AND. iintthick==0)THEN
1256 dx=thk(numelc+neltg)*gapscale
1257 ELSEIF(igtyp == 17 .OR. igtyp == 51 .OR. igtyp ==52) THEN
1258 dx=thk(numelc+neltg)*gapscale
1259 ELSE
1260 dx=geo(1,mg)*gapscale
1261 ENDIF
1262 gapm=half*dx
1263 gaps2=max(gaps2,gapm)
1264 gapmn = min(gapmn,dx)
1265 dxm=dxm+dx
1266 ndx=ndx+1
1267 IF(mt>0)THEN
1268 IF(igtyp == 11 .AND. igmat > 0) THEN
1269 IF ( thk(numelc+neltg) /= zero .AND. iintthick ==0)THEN
1270 stf(i)=slsfac*thk(numelc+neltg)*geo(ipgmat + 2 ,mg)
1271 ELSE
1272 stf(i)=slsfac*geo(1,mg)*geo(ipgmat + 2 ,mg)
1273 ENDIF
1274 ELSEIF(igtyp ==52 .OR.
1275 . ((igtyp == 17 .OR. igtyp == 51) .AND. igmat > 0))THEN
1276 isubstack = iworksh(3,numelc+neltg)
1277 st=pm_stack(2,isubstack)
1278 stf(i)=slsfac*thk(numelc+neltg)*st
1279 ELSE
1280 IF ( thk(numelc+neltg) /= zero .AND. iintthick ==0)THEN
1281 stf(i)=slsfac*thk(numelc+neltg)*pm(20,mt)
1282 ELSEIF(igtyp == 17 .OR. igtyp == 51) THEN
1283 stf(i)=slsfac*thk(numelc+neltg)*pm(20,mt)
1284 ELSE
1285 stf(i)=slsfac*geo(1,mg)*pm(20,mt)
1286 ENDIF
1287 ENDIF
1288 ELSE
1289 IF(nint>=0) THEN
1290 CALL ancmsg(msgid=95,
1291 . msgtype=msgwarning,
1292 . anmode=aninfo_blind_2,
1293 . i1=id,
1294 . c1=titr,
1295 . i2=ixtg(nixtg,neltg),
1296 . c2='SHELL',
1297 . i3=i)
1298 END IF
1299 IF(nint<0) THEN
1300 CALL ancmsg(msgid=96,
1301 . msgtype=msgwarning,
1302 . anmode=aninfo_blind_2,
1303 . i1=id,
1304 . c1=titr,
1305 . i2=ixtg(nixtg,neltg),
1306 . c2='SHELL',
1307 . i3=i)
1308 END IF
1309 END IF
1310 gap_m(i)=gapm
1311C ----Friction model ------
1312 IF(intfric > 0) THEN
1313 ip= iparttg(neltg)
1314 ipg = tagprt_fric(ip)
1315 IF(ipg > 0) THEN
1317 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
1318 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl)
1319 ipartfricm(i) = ipl
1320 ENDIF
1321 ENDIF
1322C-------coating shell stif=max(sol,shell)
1323 IF (msegtyp(i)>nrtt) THEN
1324 print_error = .false.
1325 nin25 = 0
1326 CALL insol3d(x,irect,ixs,nint,nels,i ,
1327 . area,noint,knod2els ,nod2els ,0,
1328 . ixs10,ixs16,ixs20,tagelems,indexe,
1329 . ninv,ielem,elem_linked_to_segment,print_error,
1330 . nin25,nty, flag_elem_inter25 )
1331 IF(print_error) THEN
1332 node_id(1:4) = itab(irect(1:4,i))
1333
1334 CALL ancmsg(msgid=3062,
1335 . msgtype=msgwarning,
1336 . anmode=aninfo_blind_1,
1337 . i1=id,
1338 . i2=node_id(1),
1339 . i3=node_id(2),
1340 . i4=node_id(3),
1341 . i5=node_id(4),
1342 . c1=titr ,
1343 . prmod=msg_print)
1344 ENDIF
1345 IF(nels/=0) THEN
1346 mt=ixs(1,nels)
1347 IF(mt>0)THEN
1348 DO jj=1,8
1349 jjj=ixs(jj+1,nels)
1350 xc(jj)=x(1,jjj)
1351 yc(jj)=x(2,jjj)
1352 zc(jj)=x(3,jjj)
1353 END DO
1354 CALL volint(vol)
1355 stf(i)=max(stf(i),slsfac*area*area*pm(32,mt)/vol)
1356 gap_n(1,i)=vol/area
1357 END IF
1358C ----Friction model ------
1359 IF(intfric > 0) THEN
1360 ip= iparts(nels)
1361 ipg = tagprt_fric(ip)
1362 IF(ipg > 0) THEN
1364 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
1365 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl)
1366 ipartfricm(i) = ipl
1367 ENDIF
1368 ENDIF
1369 END if!(NELS/=0) THEN
1370 END IF !(MSEGTYP==8) THEN
1371
1372 cycle
1373 ELSEIF(nelc/=0) THEN
1374 mt=ixc(1,nelc)
1375 mg=ixc(6,nelc)
1376 igtyp=igeo(11,mg)
1377 igmat = igeo(98,mg)
1378 ip = ipartc(nelc)
1379 IF ( thk_part(ip) /= zero .AND. iintthick == 0) THEN
1380 dx=thk_part(ip)*gapscale
1381 ELSEIF ( thk(nelc) /= zero .AND. iintthick == 0) THEN
1382 dx=thk(nelc)*gapscale
1383 ELSEIF(igtyp == 17 .OR. igtyp == 51 .OR. igtyp ==52)THEN
1384 dx=thk(nelc)*gapscale
1385 ELSE
1386 dx=geo(1,mg)*gapscale
1387 ENDIF
1388 gapm=half*dx
1389 gaps2=max(gaps2,gapm)
1390 gapmn = min(gapmn,dx)
1391 dxm=dxm+dx
1392 ndx=ndx+1
1393 IF(mt>0)THEN
1394 IF(igtyp == 11 .AND. igmat > 0) THEN
1395 IF ( thk(nelc) /= zero .AND. iintthick == 0) THEN
1396 stf(i)=slsfac*thk(nelc)*geo(ipgmat + 2 ,mg)
1397 ELSE
1398 stf(i)=slsfac*geo(1,mg)*geo(ipgmat + 2 ,mg)
1399 ENDIF
1400 ELSEIF(igtyp ==52 .OR.
1401 . ((igtyp == 17 .OR. igtyp == 51) .AND. igmat > 0))THEN
1402 isubstack = iworksh(3,nelc)
1403 st=pm_stack(2,isubstack)
1404 stf(i)=slsfac*thk(nelc)*st
1405 ELSE
1406 IF ( thk(nelc) /= zero .AND. iintthick == 0) THEN
1407 stf(i)=slsfac*thk(nelc)*pm(20,mt)
1408 ELSEIF(igtyp == 17 .OR. igtyp ==51) THEN
1409 stf(i)=slsfac*thk(nelc)*pm(20,mt)
1410 ELSE
1411 stf(i)=slsfac*geo(1,mg)*pm(20,mt)
1412 ENDIF
1413 ENDIF
1414 ELSE
1415 IF(nint>=0) THEN
1416 CALL ancmsg(msgid=95,
1417 . msgtype=msgwarning,
1418 . anmode=aninfo_blind_2,
1419 . i1=id,
1420 . c1=titr,
1421 . i2=ixc(nixc,nelc),
1422 . c2='SHELL',
1423 . i3=i)
1424 END IF
1425 IF(nint<0) THEN
1426 CALL ancmsg(msgid=96,
1427 . msgtype=msgwarning,
1428 . anmode=aninfo_blind_2,
1429 . i1=id,
1430 . c1=titr,
1431 . i2=ixc(nixc,nelc),
1432 . c2='SHELL',
1433 . i3=i)
1434 END IF
1435 END IF
1436 gap_m(i)=gapm
1437C -----Friction model ------
1438 IF(intfric > 0) THEN
1439 ip= ipartc(nelc)
1440 ipg = tagprt_fric(ip)
1441 IF(ipg > 0) THEN
1443 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
1444 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
1445 ipartfricm(i) = ipl
1446 ENDIF
1447 ENDIF
1448C------------------------------------
1449C-------coating shell stif=max(sol,shell)
1450 IF (msegtyp(i)>nrtt) THEN
1451 print_error = .false.
1452 nin25 = 0
1453 CALL insol3d(x,irect,ixs,nint,nels,i ,
1454 . area,noint,knod2els ,nod2els ,0,
1455 . ixs10,ixs16,ixs20,tagelems,indexe ,
1456 . ninv,ielem,elem_linked_to_segment,print_error,
1457 . nin25,nty, flag_elem_inter25)
1458 IF(print_error) THEN
1459 node_id(1:4) = itab(irect(1:4,i))
1460
1461 CALL ancmsg(msgid=3062,
1462 . msgtype=msgwarning,
1463 . anmode=aninfo_blind_1,
1464 . i1=id,
1465 . i2=node_id(1),
1466 . i3=node_id(2),
1467 . i4=node_id(3),
1468 . i5=node_id(4),
1469 . c1=titr ,
1470 . prmod=msg_print)
1471 ENDIF
1472 IF(nels/=0) THEN
1473 mt=ixs(1,nels)
1474 IF(mt>0)THEN
1475 DO jj=1,8
1476 jjj=ixs(jj+1,nels)
1477 xc(jj)=x(1,jjj)
1478 yc(jj)=x(2,jjj)
1479 zc(jj)=x(3,jjj)
1480 END DO
1481 CALL volint(vol)
1482 stf(i)=max(stf(i),slsfac*area*area*pm(32,mt)/vol)
1483 gap_n(1,i)=vol/area
1484 END IF
1485C -----Friction model ------
1486 IF(intfric > 0) THEN
1487 ip= iparts(nels)
1488 ipg = tagprt_fric(ip)
1489 IF(ipg > 0) THEN
1491 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
1492 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
1493 ipartfricm(i) = ipl
1494 ENDIF
1495 ENDIF
1496C------------------------------------
1497 END if!(NELS/=0) THEN
1498 END IF !(MSEGTYP==8) THEN
1499 cycle
1500 END IF
1501 END IF
1502C----------------------
1503C ELEMENTS SOLIDES
1504C----------------------
1505 print_error = .false.
1506 nin25 = 0
1507 CALL insol3d(x,irect,ixs,nint,nels,i ,
1508 . area,noint,knod2els ,nod2els ,0,
1509 . ixs10,ixs16,ixs20,tagelems,indexe,
1510 . ninv ,ielem,elem_linked_to_segment,print_error,
1511 . nin25,nty, flag_elem_inter25)
1512 IF(print_error) THEN
1513 node_id(1:4) = itab(irect(1:4,i))
1514
1515 CALL ancmsg(msgid=3062,
1516 . msgtype=msgwarning,
1517 . anmode=aninfo_blind_1,
1518 . i1=id,
1519 . i2=node_id(1),
1520 . i3=node_id(2),
1521 . i4=node_id(3),
1522 . i5=node_id(4),
1523 . c1=titr ,
1524 . prmod=msg_print)
1525 ENDIF
1526 IF(nels/=0) THEN
1527 mt=ixs(1,nels)
1528 IF(intth > 0 ) ieles(i) = nels
1529 IF(mt>0)THEN
1530 DO jj=1,8
1531 jjj=ixs(jj+1,nels)
1532 xc(jj)=x(1,jjj)
1533 yc(jj)=x(2,jjj)
1534 zc(jj)=x(3,jjj)
1535 ENDDO
1536 CALL volint(vol)
1537 stf(i)=slsfac*fillsol(nels)*area*area*pm(32,mt)/vol
1538 ELSE
1539 IF(nint>=0) THEN
1540 CALL ancmsg(msgid=95,
1541 . msgtype=msgwarning,
1542 . anmode=aninfo_blind_2,
1543 . i1=id,
1544 . c1=titr,
1545 . i2=ixs(nixs,nels),
1546 . c2='SOLID',
1547 . i3=i)
1548 ENDIF
1549 IF(nint<0) THEN
1550 CALL ancmsg(msgid=96,
1551 . msgtype=msgwarning,
1552 . anmode=aninfo_blind_2,
1553 . i1=id,
1554 . c1=titr,
1555 . i2=ixs(nixs,nels),
1556 . c2='SOLID',
1557 . i3=i)
1558 ENDIF
1559 ENDIF
1560 gap_n(1,i)=vol/area
1561C -----Friction model ------
1562 IF(intfric > 0) THEN
1563 ip= iparts(nels)
1564 ipg = tagprt_fric(ip)
1565 IF(ipg > 0) THEN
1567 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
1568 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl)
1569 ipartfricm(i) = ipl
1570 ENDIF
1571 ENDIF
1572C----------------------------------
1573C-------add correction for different element
1574 ENDIF
1575C---------------------
1576C ELEMENTS COQUES
1577C---------------------
1578 CALL incoq3(irect,ixc ,ixtg ,nint ,nelc ,
1579 . neltg,i ,geo ,pm ,knod2elc ,
1580 . knod2eltg ,nod2elc ,nod2eltg,thk,nty,igeo,
1581 . pm_stack , iworksh )
1582 IF(neltg/=0) THEN
1583C
1584 mt=ixtg(1,neltg)
1585 mg=ixtg(5,neltg)
1586 igtyp = igeo(11,mg)
1587 ip = iparttg(neltg)
1588 IF ( thk_part(ip) /= zero .AND. iintthick == 0) THEN
1589 dx=thk_part(ip)*gapscale
1590 ELSEIF ( thk(numelc+neltg) /= zero .AND. iintthick == 0)THEN
1591 dx=thk(numelc+neltg)*gapscale
1592 ELSEIF(igtyp == 17 .OR. igtyp ==51 .OR. igtyp ==52) THEN
1593 dx=thk(numelc+neltg)*gapscale
1594 ELSE
1595 dx=geo(1,mg)*gapscale
1596 ENDIF
1597 gapm=half*dx
1598 gaps2=max(gaps2,gapm)
1599 gapmn = min(gapmn,dx)
1600 dxm=dxm+dx
1601 ndx=ndx+1
1602 gap_m(i)=max(gap_m(i),gapm)
1603 IF(mt>0)THEN
1604 IF(igtyp ==11 .AND. igmat > 0) THEN
1605 IF ( thk(numelc+neltg) /= zero .AND. iintthick == 0) THEN
1606 stf(i)=slsfac*thk(numelc+neltg)*geo(ipgmat + 2 ,mg)
1607 ELSE
1608 stf(i)=slsfac*geo(1,mg)*geo(ipgmat + 2 ,mg)
1609 ENDIF
1610 ELSEIF(igtyp == 52 .OR.
1611 . ((igtyp == 17 .OR. igtyp == 51).AND.igmat >0)) THEN
1612 isubstack = iworksh(3,numelc+neltg)
1613 stf(i)=slsfac*thk(numelc+neltg)*pm_stack( 2 ,isubstack)
1614 ELSE
1615 IF ( thk(numelc+neltg) /= zero .AND. iintthick == 0) THEN
1616 stf(i)=max(stf(i),slsfac*thk(numelc+neltg)*pm(20,mt))
1617 ELSEIF(igtyp == 17 .OR. igtyp ==51) THEN
1618 stf(i)=max(stf(i),slsfac*thk(numelc+neltg)*pm(20,mt))
1619 ELSE
1620 stf(i)=max(stf(i),slsfac*geo(1,mg)*pm(20,mt))
1621 ENDIF
1622 ENDIF
1623
1624 ELSE
1625 IF(nint>=0) THEN
1626 CALL ancmsg(msgid=95,
1627 . msgtype=msgwarning,
1628 . anmode=aninfo_blind_2,
1629 . i1=id,
1630 . c1=titr,
1631 . i2=ixtg(nixtg,neltg),
1632 . c2='SHELL',
1633 . i3=i)
1634 ENDIF
1635 IF(nint<0) THEN
1636 CALL ancmsg(msgid=96,
1637 . msgtype=msgwarning,
1638 . anmode=aninfo_blind_2,
1639 . i1=id,
1640 . c1=titr,
1641 . i2=ixtg(nixtg,neltg),
1642 . c2='SHELL',
1643 . i3=i)
1644 ENDIF
1645 ENDIF
1646C ----- Friction model ------
1647 IF(intfric > 0) THEN
1648 ip= iparttg(neltg)
1649 ipg = tagprt_fric(ip)
1650 IF(ipg > 0) THEN
1652 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
1653 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl)
1654 ipartfricm(i) = ipl
1655 ENDIF
1656 ENDIF
1657C------------------------------------
1658 ELSEIF(nelc/=0) THEN
1659 mt=ixc(1,nelc)
1660 mg=ixc(6,nelc)
1661 ip = ipartc(nelc)
1662 igtyp = igeo(11,mg)
1663 igmat = igeo(98,mg)
1664 IF ( thk_part(ip) /= zero .AND. iintthick == 0) THEN
1665 dx=thk_part(ip)*gapscale
1666 ELSEIF ( thk(nelc) /= zero .AND. iintthick == 0) THEN
1667 dx=thk(nelc)*gapscale
1668 ELSEIF(igtyp == 17 .OR. igtyp == 51 .OR. igtyp ==52) THEN
1669 dx=thk(nelc)*gapscale
1670 ELSE
1671 dx=geo(1,mg)*gapscale
1672 ENDIF
1673 gapm=half*dx
1674 gaps2=max(gaps2,gapm)
1675 gapmn = min(gapmn,dx)
1676 dxm=dxm+dx
1677 ndx=ndx+1
1678 gap_m(i)=max(gap_m(i),gapm)
1679 IF(mt>0)THEN
1680 IF(igtyp == 11 .AND. igmat > 0) THEN
1681 IF ( thk(nelc) /= zero .AND. iintthick == 0) THEN
1682 stf(i)=slsfac*thk(nelc)*geo(ipgmat + 2 ,mg)
1683 ELSE
1684 stf(i)=slsfac*geo(1,mg)*geo(ipgmat + 2 ,mg)
1685 ENDIF
1686 ELSEIF(igtyp ==52 .OR.
1687 . ((igtyp == 17 .OR. igtyp == 51) .AND. igmat > 0))THEN
1688 isubstack = iworksh(3,nelc)
1689 st=pm_stack(2,isubstack)
1690 stf(i)=slsfac*thk(nelc)*st
1691 ELSE
1692 IF ( thk(nelc) /= zero .AND. iintthick == 0) THEN
1693 stf(i)=max(stf(i),slsfac*thk(nelc)*pm(20,mt))
1694 ELSEIF(igtyp == 17 .OR. igtyp == 51 ) THEN
1695 stf(i)=max(stf(i),slsfac*thk(nelc)*pm(20,mt))
1696 ELSE
1697 stf(i)=max(stf(i),slsfac*geo(1,mg)*pm(20,mt))
1698 ENDIF
1699 ENDIF
1700 ELSE
1701 IF(nint>=0) THEN
1702 CALL ancmsg(msgid=95,
1703 . msgtype=msgwarning,
1704 . anmode=aninfo_blind_2,
1705 . i1=id,
1706 . c1=titr,
1707 . i2=ixc(nixc,nelc),
1708 . c2='SHELL',
1709 . i3=i)
1710 ENDIF
1711 IF(nint<0) THEN
1712 CALL ancmsg(msgid=96,
1713 . msgtype=msgwarning,
1714 . anmode=aninfo_blind_2,
1715 . i1=id,
1716 . c1=titr,
1717 . i2=ixc(nixc,nelc),
1718 . c2='SHELL',
1719 . i3=i)
1720 ENDIF
1721 ENDIF
1722C ----- Friction model ------
1723 IF(intfric > 0) THEN
1724 ip= ipartc(nelc)
1725 ipg = tagprt_fric(ip)
1726 IF(ipg > 0) THEN
1728 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
1729 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl )
1730 ipartfricm(i) = ipl
1731 ENDIF
1732 ENDIF
1733C------------------------------------
1734 ENDIF
1735C
1736 IF(nels+nelc+neltg==0)THEN
1737
1738C en SPMD il faut un element associe a l'arrete sinon erreur
1739 IF(nint>0) THEN
1740 CALL ancmsg(msgid=481,
1741 . msgtype=msgerror,
1742 . anmode=aninfo_blind_2,
1743 . i1=id,
1744 . c1=titr,
1745 . i2=i)
1746 ENDIF
1747 IF(nint<0) THEN
1748 CALL ancmsg(msgid=482,
1749 . msgtype=msgerror,
1750 . anmode=aninfo_blind_2,
1751 . i1=id,
1752 . c1=titr,
1753 . i2=i)
1754 ENDIF
1755
1756 ENDIF
1757 END DO
1758C
1759 IF(numels > 0) DEALLOCATE(tagelems,indexe)
1760C
1761 CALL ancmsg(msgid=3022,
1762 . msgtype=msgwarning,
1763 . anmode=aninfo_blind_1,
1764 . i1=id,
1765 . c1=titr,
1766 . prmod=msg_print)
1767 CALL ancmsg(msgid=3024,
1768 . msgtype=msgwarning,
1769 . anmode=aninfo_blind_1,
1770 . i1=id,
1771 . c1=titr,
1772 . prmod=msg_print)
1773 IF(ninv > 0 .AND.nint>0)
1774 . CALL ancmsg(msgid=3023,
1775 . msgtype=msgwarning,
1776 . anmode=aninfo_blind_1,
1777 . i1=id,
1778 . c1=titr,
1779 . i2=ninv)
1780C
1781 IF(ninv > 0 .AND.nint< 0)
1782 . CALL ancmsg(msgid=3025,
1783 . msgtype=msgwarning,
1784 . anmode=aninfo_blind_1,
1785 . i1=id,
1786 . c1=titr,
1787 . i2=ninv)
1788C
1789C IF (IPRI>=5.AND.NREV>0) WRITE (IOUT,1400) NREV,NOINT
1790C----due to Cycle -------
1791 DO i=1+nshift,nrt+nshift
1792 gap_m(i)=min(gap_m(i),gapmax_m)
1793 END DO
1794C-----------------------------------------------
1795 RETURN
1796 !1400 FORMAT(I10,' MAIN SEGMENTS',' OF INTERFACE',I10,
1797 ! + ' ARE REVERSED THE NORMAL DIRECTION')
#define my_real
Definition cppsort.cpp:32
if(complex_arithmetic) id
subroutine area(d1, x, x2, y, y2, eint, stif0)
subroutine inelts_np(x, irect, ixs, nrev, nel, i, area, noint, ir, surf_eltyp, surf_elem)
Definition i24sti3.F:2229
subroutine i4gmx3(x, irect, i, gapmax)
Definition i4gmx3.F:35
subroutine friction_parts_search(ip, npartsfric, partsfric, ipl)
Definition i7sti3.F:1267
subroutine incoq3(irect, ixc, ixtg, nint, nel, neltg, is, geo, pm, knod2elc, knod2eltg, nod2elc, nod2eltg, thk, nty, igeo, pm_stack, iworksh)
Definition incoq3.F:45
subroutine ineltc(nelc, neltg, is, surf_eltyp, surf_elem)
Definition inelt.F:132
subroutine insol3d(x, irect, ixs, nint, nel, i, area, noint, knod2els, nod2els, ir, ixs10, ixs16, ixs20, tagelems, indexe, ninv, ielem_m, elem_linked_to_segment, print_error, nin25, nty, flag_elem_inter25)
Definition insol3.F:193
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
initmumps id
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)
Definition message.F:889
subroutine volint(vol)
Definition volint.F:38

◆ i24ll_kg()

subroutine i24ll_kg ( x,
integer, dimension(4,*) irect,
integer, dimension(nixs,*) ixs,
pm,
wa,
geo,
integer nrt,
integer, dimension(nixc,*) ixc,
integer nint,
integer nty,
integer noint,
integer nsn,
integer, dimension(*) nsv,
integer, dimension(nixtg,*) ixtg,
integer, dimension(nixt,*) ixt,
integer, dimension(nixp,*) ixp,
integer, dimension(lipart1,*) ipart,
integer, dimension(*) ipartc,
integer, dimension(*) iparttg,
thk,
thk_part,
integer, dimension(nixr,*) ixr,
integer, dimension(*) itab,
integer, dimension(6,*) ixs10,
integer, dimension(8,*) ixs16,
integer, dimension(12,*) ixs20,
integer nmn,
integer, dimension(*) msr,
ll_s,
ll_m,
integer, dimension(numelt), intent(in) ipartt,
integer, dimension(numelp), intent(in) ipartp,
integer, dimension(numelr), intent(in) ipartr,
integer, dimension(npropgi,numgeo), intent(in) igeo )

Definition at line 2049 of file i24sti3.F.

2057C-----------------------------------------------
2058 USE message_mod
2059C
2060C-----------------------------------------------
2061C I m p l i c i t T y p e s
2062C-----------------------------------------------
2063#include "implicit_f.inc"
2064C-----------------------------------------------
2065C C o m m o n B l o c k s
2066C-----------------------------------------------
2067#include "com01_c.inc"
2068#include "com04_c.inc"
2069#include "param_c.inc"
2070#include "scr17_c.inc"
2071#include "scr08_c.inc"
2072C-----------------------------------------------
2073C D u m m y A r g u m e n t s
2074C-----------------------------------------------
2075 INTEGER NMN, NTY, NOINT,NSN,NRT,NINT
2076 INTEGER IRECT(4,*), IXS(NIXS,*), IXC(NIXC,*),MSR(*),
2077 . NSV(*), IXTG(NIXTG,*), IXT(NIXT,*), IXP(NIXP,*),
2078 . IXR(NIXR,*) ,IPART(LIPART1,*), IPARTC(*), IPARTTG(*),
2079 . ITAB(*), IXS10(6,*), IXS16(8,*), IXS20(12,*)
2080 INTEGER, DIMENSION(NUMELT), INTENT(IN) :: IPARTT
2081 INTEGER, DIMENSION(NUMELP), INTENT(IN) :: IPARTP
2082 INTEGER, DIMENSION(NUMELR), INTENT(IN) :: IPARTR
2083 INTEGER, DIMENSION(NPROPGI,NUMGEO) ,INTENT(IN):: IGEO
2084C REAL
2085 my_real
2086 . x(3,*), pm(npropm,*), geo(npropg,*), wa(*),
2087 . thk(*),thk_part(*),ll_s(*),ll_m(*)
2088C-----------------------------------------------
2089C L o c a l V a r i a b l e s
2090C-----------------------------------------------
2091 INTEGER I, N, JJ, JJJ,
2092 . MG, IE,
2093 . IP, K, IGTYP
2094C REAL
2095 my_real
2096 . vol, dx
2097C----------------------
2098 DO i=1,numnod
2099 wa(i)=ep10
2100 ENDDO
2101 DO i=1,nsn
2102 ll_s(i)=ep10
2103 ENDDO
2104 DO i=1,nmn
2105 ll_m(i)=ep10
2106 ENDDO
2107C----SHELLS ------------
2108 DO i=1,numelc
2109 mg=ixc(6,i)
2110 ip = ipartc(i)
2111 IF ( thk_part(ip) /= zero .AND. iintthick == 0) THEN
2112 dx=thk_part(ip)
2113 ELSEIF ( thk(i) /= zero .AND. iintthick == 0) THEN
2114 dx=thk(i)
2115 ELSE
2116 dx=geo(1,mg)
2117 ENDIF
2118 wa(ixc(2,i))=min(wa(ixc(2,i)),dx)
2119 wa(ixc(3,i))=min(wa(ixc(3,i)),dx)
2120 wa(ixc(4,i))=min(wa(ixc(4,i)),dx)
2121 wa(ixc(5,i))=min(wa(ixc(5,i)),dx)
2122 ENDDO
2123 DO i=1,numeltg
2124 mg=ixtg(5,i)
2125 ip = iparttg(i)
2126 IF ( thk_part(ip) /= zero .AND. iintthick == 0) THEN
2127 dx=thk_part(ip)
2128 ELSEIF ( thk(numelc+i) /= zero .AND. iintthick == 0) THEN
2129 dx=thk(numelc+i)
2130 ELSE
2131 dx=geo(1,mg)
2132 ENDIF
2133 wa(ixtg(2,i))=min(wa(ixtg(2,i)),dx)
2134 wa(ixtg(3,i))=min(wa(ixtg(3,i)),dx)
2135 wa(ixtg(4,i))=min(wa(ixtg(4,i)),dx)
2136 ENDDO
2137C----truss------------
2138 DO i=1,numelt
2139 mg=ixt(4,i)
2140 ip = ipartt(i)
2141 IF ( thk_part(ip) > zero ) THEN
2142 dx=thk_part(ip)
2143 ELSE
2144 dx=sqrt(geo(1,mg))
2145 END IF
2146 wa(ixt(2,i))=min(wa(ixt(2,i)),dx)
2147 wa(ixt(3,i))=min(wa(ixt(3,i)),dx)
2148 ENDDO
2149C----beam------------
2150 DO i=1,numelp
2151 mg=ixp(5,i)
2152 ip = ipartp(i)
2153 IF ( thk_part(ip) > zero ) THEN
2154 dx=thk_part(ip)
2155 ELSE
2156 dx=sqrt(geo(1,mg))
2157 END IF
2158 wa(ixp(2,i))=min(wa(ixp(2,i)),dx)
2159 wa(ixp(3,i))=min(wa(ixp(3,i)),dx)
2160 ENDDO
2161 DO i=1,numelr
2162 ip = ipartr(i)
2163 IF ( thk_part(ip) > zero ) THEN
2164 mg=ixr(1,i)
2165 igtyp = igeo(11,mg)
2166 dx=thk_part(ip)
2167 wa(ixr(2,i))=max(wa(ixr(2,i)),dx)
2168 wa(ixr(3,i))=max(wa(ixr(3,i)),dx)
2169 IF (igtyp==12) wa(ixr(4,i))=max(wa(ixr(4,i)),dx)
2170 END IF
2171 ENDDO
2172C----solides------------
2173 DO i=1,numels
2174 mg=ixs(1,i)
2175 IF(mg>0)THEN
2176 DO jj=1,8
2177 jjj=ixs(jj+1,i)
2178 xc(jj)=x(1,jjj)
2179 yc(jj)=x(2,jjj)
2180 zc(jj)=x(3,jjj)
2181 END DO
2182 CALL volint(vol)
2183 dx=vol**third
2184 DO k=1,8
2185 wa(ixs(k+1,i))=min(wa(ixs(k+1,i)),dx)
2186 ENDDO
2187 IF(i <= numels8)THEN
2188 ELSEIF(i <= numels8+numels10)THEN
2189 ie = i-numels8
2190 DO k=1,6
2191 n= ixs10(k,ie)
2192 wa(n)=min(wa(n),dx)
2193 ENDDO
2194 ELSEIF(i <= numels8+numels10+numels20)THEN
2195 ie = i-numels8-numels10
2196 DO k=1,12
2197 n= ixs20(k,ie)
2198 wa(n)=min(wa(n),dx)
2199 ENDDO
2200 ELSEIF(i <= numels8+numels10+numels20+numels16)THEN
2201 ie = i-numels8-numels10-numels20
2202 DO k=1,8
2203 n= ixs16(k,ie)
2204 wa(n)=min(wa(n),dx)
2205 ENDDO
2206 END IF
2207 END if!(MG>0)THEN
2208 ENDDO
2209C
2210 DO i=1,nsn
2211 ll_s(i)=min(ll_s(i),wa(nsv(i)))
2212 ENDDO
2213 DO i=1,nmn
2214 ll_m(i)=min(ll_m(i),wa(msr(i)))
2215 ENDDO
2216C-----------------------------------------------
2217 RETURN

◆ i24normns()

subroutine i24normns ( x,
integer, dimension(4,*) irect,
integer nrt,
integer nsn,
integer, dimension(*) nsv,
pen_old,
dimension(nrt), intent(in) stf )

Definition at line 1906 of file i24sti3.F.

1908C============================================================================
1909C-----------------------------------------------
1910C I m p l i c i t T y p e s
1911C-----------------------------------------------
1912#include "implicit_f.inc"
1913C-----------------------------------------------
1914C C o m m o n B l o c k s
1915C-----------------------------------------------
1916#include "com04_c.inc"
1917C-----------------------------------------------
1918C D u m m y A r g u m e n t s
1919C-----------------------------------------------
1920 INTEGER NRT,IRECT(4,*),NSN,NSV(*)
1921 my_real
1922 . x(3,*),pen_old(5,nsn)
1923 my_real , INTENT(IN) :: stf(nrt)
1924C-----------------------------------------------
1925C L o c a l V a r i a b l e s
1926C-----------------------------------------------
1927 INTEGER I, J,NN(4),NS
1928C REAL
1929 my_real
1930 . r(3),s(3),t(3),det
1931 my_real, DIMENSION(:,:), ALLOCATABLE :: norm
1932 INTEGER, DIMENSION(:), ALLOCATABLE :: ITAG
1933C=======================================================================
1934 ALLOCATE(norm(3,numnod),itag(numnod))
1935 DO i=1,numnod
1936 norm(1,i) = zero
1937 norm(2,i) = zero
1938 norm(3,i) = zero
1939 itag(i) =0
1940 ENDDO
1941 DO i=1,nrt
1942 IF(stf(i) > zero) THEN
1943 DO j=1,4
1944 nn(j)=irect(j,i)
1945 itag(nn(j)) =itag(nn(j))+1
1946 END DO
1947C------Node 1
1948 DO j=1,3
1949 r(j) = x(j,nn(2))-x(j,nn(1))
1950 s(j) = x(j,nn(4))-x(j,nn(1))
1951 END DO
1952 CALL normvec(r,s,t)
1953 DO j=1,3
1954 norm(j,nn(1)) = norm(j,nn(1))+t(j)
1955 END DO
1956C------Node 2
1957 DO j=1,3
1958 r(j) = x(j,nn(3))-x(j,nn(2))
1959 s(j) = x(j,nn(1))-x(j,nn(2))
1960 END DO
1961 CALL normvec(r,s,t)
1962 DO j=1,3
1963 norm(j,nn(2)) = norm(j,nn(2))+t(j)
1964 END DO
1965C------Node 3,4
1966 IF (nn(4)/=nn(3)) THEN
1967 DO j=1,3
1968 r(j) = x(j,nn(4))-x(j,nn(3))
1969 s(j) = x(j,nn(2))-x(j,nn(3))
1970 END DO
1971 CALL normvec(r,s,t)
1972 DO j=1,3
1973 norm(j,nn(3)) = norm(j,nn(3))+t(j)
1974 END DO
1975 DO j=1,3
1976 r(j) = x(j,nn(1))-x(j,nn(4))
1977 s(j) = x(j,nn(3))-x(j,nn(4))
1978 END DO
1979 CALL normvec(r,s,t)
1980 DO j=1,3
1981 norm(j,nn(4)) = norm(j,nn(4))+t(j)
1982 END DO
1983 ELSE ! norm_n3=norm_n2
1984 DO j=1,3
1985 norm(j,nn(3)) = norm(j,nn(3))+t(j)
1986 END DO
1987 END IF
1988 ENDIF
1989 ENDDO
1990C----re-normalizing---
1991 DO i=1,numnod
1992 IF (itag(i) >1) THEN
1993 CALL normv3(norm(1,i),det)
1994 END IF
1995 ENDDO
1996C
1997 DO i=1,nsn
1998 ns = nsv(i)
1999 pen_old(1,i) = norm(1,ns)
2000 pen_old(2,i) = norm(2,ns)
2001 pen_old(3,i) = norm(3,ns)
2002 ENDDO
2003C-----------
2004 DEALLOCATE(norm,itag)
2005 RETURN
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine normvec(r, s, t)
Definition i24sti3.F:2016
subroutine normv3(v, norm)
Definition i24tools.F:129

◆ i24sti3()

subroutine i24sti3 ( x,
integer, dimension(4,*) irect,
stf,
integer, dimension(nixs,*) ixs,
pm,
geo,
integer nrt,
integer, dimension(nixc,*) ixc,
integer nint,
stfac,
integer nty,
gap,
integer noint,
stfn,
integer nsn,
ms,
integer, dimension(*) nsv,
integer, dimension(nixtg,*) ixtg,
integer igap,
wa,
gap_s,
gap_m,
gapmin,
integer, dimension(nixt,*) ixt,
integer, dimension(nixp,*) ixp,
gapinf,
gapmax_s,
integer inacti,
integer, dimension(*) knod2els,
integer, dimension(*) knod2elc,
integer, dimension(*) knod2eltg,
integer, dimension(*) nod2els,
integer, dimension(*) nod2elc,
integer, dimension(*) nod2eltg,
type (surf_) igrsurf,
integer intth,
integer, dimension(*) ieles,
integer, dimension(*) ielec,
areas,
integer, dimension(ksh4tree,*) sh4tree,
integer, dimension(ksh3tree,*) sh3tree,
integer, dimension(lipart1,*) ipart,
integer, dimension(*) ipartc,
integer, dimension(*) iparttg,
thk,
thk_part,
integer, dimension(nixr,*) ixr,
integer, dimension(*) itab,
bgapsmx,
integer, dimension(6,*) ixs10,
integer, dimension(*) msegtyp,
integer nrt_sh,
integer, dimension(8,*) ixs16,
integer, dimension(12,*) ixs20,
gap_n,
integer, dimension(4,*) mvoisn,
integer ilev,
type (surf_) igrsurf2,
gapmax_m,
integer id,
character(len=nchartitle) titr,
integer igap0,
pen_old,
integer, dimension(*) ipartns,
integer, dimension(*) iparts,
integer, dimension(npropgi,*) igeo,
fillsol,
pm_stack,
integer, dimension(3,*) iworksh,
integer intfric,
integer, dimension(*) tagprt_fric,
integer, dimension(*) ipartfrics,
integer, dimension(*) ipartfricm,
type(intbuf_fric_struct_), dimension(*) intbuf_fric_tab,
integer intnitsche,
integer nrts,
integer, dimension(4,*) irects,
integer, dimension(*) ielnrts,
integer, dimension(4,*) adrects,
integer, dimension(*) facnrts,
integer nmn,
integer, dimension(*) msr,
integer, dimension(numelt), intent(in) ipartt,
integer, dimension(numelp), intent(in) ipartp,
integer, dimension(numelr), intent(in) ipartr,
integer, dimension(numels), intent(inout) elem_linked_to_segment,
integer igsti,
integer, dimension(ninter25,numels), intent(in) flag_elem_inter25 )
Parameters
[in,out]elem_linked_to_segmentworking array, dim=numels

Definition at line 35 of file i24sti3.F.

55C-----------------------------------------------
56C M o d u l e s
57C-----------------------------------------------
58 USE my_alloc_mod
59 USE intbuf_fric_mod
60 USE groupdef_mod
62C-----------------------------------------------
63C I m p l i c i t T y p e s
64C-----------------------------------------------
65#include "implicit_f.inc"
66C-----------------------------------------------
67C C o m m o n B l o c k s
68C-----------------------------------------------
69#include "com01_c.inc"
70#include "com04_c.inc"
71#include "param_c.inc"
72#include "remesh_c.inc"
73#include "scr03_c.inc"
74#include "scr17_c.inc"
75#include "units_c.inc"
76C-----------------------------------------------
77C D u m m y A r g u m e n t s
78C-----------------------------------------------
79 INTEGER NRT, NINT, NTY, NOINT,NSN,IGAP,INTFRIC,NMN,IGSTI,
80 . INACTI,NRT_SH ,ILEV ,IGAP0,INTNITSCHE,NRTS,IGEO(NPROPGI,*)
81 INTEGER IRECT(4,*), IXS(NIXS,*), IXC(NIXC,*),
82 . NSV(*), IXTG(NIXTG,*), IXT(NIXT,*), IXP(NIXP,*),
83 . KNOD2ELS(*), KNOD2ELC(*), KNOD2ELTG(*), NOD2ELS(*), NOD2ELC(*),
84 . NOD2ELTG(*), IELES(*), INTTH, IELEC(*),
85 . SH3TREE(KSH3TREE,*), SH4TREE(KSH4TREE,*),IXR(NIXR,*) ,
86 . IPART(LIPART1,*), IPARTC(*), IPARTTG(*),
87 . ITAB(*), IXS10(6,*),MSEGTYP(*), IXS16(8,*), IXS20(12,*),MVOISN(4,*),
88 . IWORKSH(3,*),TAGPRT_FRIC(*),IPARTFRICS(*),IPARTFRICM(*),
89 . IRECTS(4,*),IELNRTS(*),ADRECTS(4,*),FACNRTS(*),MSR(*)
90C REAL
92 . stfac, gap,gapmin,gapinf, gapmax_s,bgapsmx ,gapmax_m
93C REAL
95 . x(3,*), stf(*), pm(npropm,*), geo(npropg,*), stfn(*),
96 . ms(*),wa(*),gap_s(*),gap_m(*),gap_n(12,*),
97 . areas(*),thk(*),thk_part(*),pen_old(5,nsn), fillsol(*),
98 . pm_stack(20,*)
99 INTEGER ID,IPARTNS(*),IPARTS(*)
100 INTEGER, DIMENSION(NUMELT), INTENT(IN) :: IPARTT
101 INTEGER, DIMENSION(NUMELP), INTENT(IN) :: IPARTP
102 INTEGER, DIMENSION(NUMELR), INTENT(IN) :: IPARTR
103 INTEGER, DIMENSION(NUMELS), INTENT(INOUT):: ELEM_LINKED_TO_SEGMENT !< working array, dim=numels
104 CHARACTER(LEN=NCHARTITLE) :: TITR
105 TYPE(INTBUF_FRIC_STRUCT_) INTBUF_FRIC_TAB(*)
106 TYPE (SURF_) :: IGRSURF
107 TYPE (SURF_) :: IGRSURF2
108 INTEGER, INTENT(IN) :: FLAG_ELEM_INTER25(NINTER25,NUMELS)
109C-----------------------------------------------
110C L o c a l V a r i a b l e s
111C-----------------------------------------------
112 INTEGER NDX, I, J, INRT, NELS, MT, JJ, JJJ, NELC,
113 . MG, NUM, NPT, LL, L, NN, NELTG,N1,N2,N3,N4,IE,
114 . IP, NLEV, MYLEV, K, P, R, T,NRT1,NRT2,NSHIF,
115 . NS,IGTYP,NRTT,IPL,IPFMAX,
116 . IPFLMAX,NM,NEL,FC,PERM,NSHIFF,N,IPG
117
118 INTEGER JPERM(4) ,FACES(4,6),TAB1(4),TAB2(4),FACES10(3,16)
119C REAL
120 my_real
121 . dxm, gapmx, gapmn, area, vol, dx,gaps1,gaps2, gapm, ddx,
122 . gaptmp, gapscale,sx1,sy1,sz1,sx2,sy2,sz2,sx3,sy3,sz3,
123 . slsfac,xl,gaps_mn
124 INTEGER, DIMENSION(:),ALLOCATABLE ::TAGNOD,TAGB
125 DATA jperm/2,3,4,1/
126 DATA faces/1,2,3,4,
127 . 1,2,6,5,
128 . 2,3,7,6,
129 . 3,4,8,7,
130 . 1,5,8,4,
131 . 5,6,7,8/
132 DATA faces10/1,11,14,
133 . 3,11,15,
134 . 5,14,15,
135 . 11,14,15,
136 . 1,13,14,
137 . 6,13,16,
138 . 5,14,16,
139 . 13,14,16,
140 . 3,11,12,
141 . 6,12,13,
142 . 1,11,13,
143 . 11,12,13,
144 . 3,12,15,
145 . 6,12,16,
146 . 5,15,16,
147 . 12,15,16/
148C--------------------------------------------------------------
149C CALCUL DES RIGIDITES DES SEGMENTS
150C V16 : DANS LE CAS OU ONE SEGMENT APPARTIENT A LA FOIS
151C A UNE BRIQUE ET A UNE COQUE ON CHOISIT LA RIGIDITE
152C DE LA COQUE SAUF SI LE MATERIAU COQUE EST NUL.
153C---------------------------------------------------------------
154C NRT->NRT0
155C--- MVOISN is used temporarily for Pen_ini MVOISN(1,*) -> MTYPE(solid),MVOISN(2,*) -> E_id
156C-----MVOISN(3,*) -> part_id, IPARTNS->part_id(SECONDARY)
157 slsfac = stfac
158 dxm=zero
159 ndx=0
160 nshif=0
161 gapmx=ep30
162 gapmn=ep30
163 gaps1=zero
164 gaps2=zero
165 gaps_mn=ep30
166 gapscale = one
167C-----NRTT:NRTM
168C NRT_SH nb of shells before symetrization, NRT nb of MAIN segments before symetrization (symetrization in i24surfi)
169 nrtt =nrt+nrt_sh
170C------------------------------------
171C GAP NOEUDS SECONDS
172C------------------------------------
173 ALLOCATE(tagb(numnod))
174 DO i=1,numnod
175 wa(i)=zero
176 ENDDO
177 DO i=1,numelc
178 mg=ixc(6,i)
179 ip = ipartc(i)
180 igtyp = igeo(11,mg)
181 IF ( thk_part(ip) /= zero .AND. iintthick == 0) THEN
182 dx=half*thk_part(ip)
183 ELSEIF ( thk(i) /= zero .AND. iintthick == 0) THEN
184 dx=half*thk(i)
185 ELSEIF(igtyp == 17 .OR. igtyp ==51 .OR. igtyp ==52) THEN
186 dx=half*thk(i)
187 ELSE
188 dx=half*geo(1,mg)
189 ENDIF
190 wa(ixc(2,i))=max(wa(ixc(2,i)),dx)
191 wa(ixc(3,i))=max(wa(ixc(3,i)),dx)
192 wa(ixc(4,i))=max(wa(ixc(4,i)),dx)
193 wa(ixc(5,i))=max(wa(ixc(5,i)),dx)
194 ENDDO
195 DO i=1,numeltg
196 mg=ixtg(5,i)
197 ip = iparttg(i)
198 igtyp = igeo(11,mg)
199 IF ( thk_part(ip) /= zero .AND. iintthick == 0) THEN
200 dx=half*thk_part(ip)
201 ELSEIF ( thk(numelc+i) /= zero .AND. iintthick == 0) THEN
202 dx=half*thk(numelc+i)
203 ELSEIF(igtyp == 17 .OR. igtyp ==51 .OR. igtyp ==52) THEN
204 dx=half*thk(numelc+i)
205 ELSE
206 dx=half*geo(1,mg)
207 ENDIF
208 wa(ixtg(2,i))=max(wa(ixtg(2,i)),dx)
209 wa(ixtg(3,i))=max(wa(ixtg(3,i)),dx)
210 wa(ixtg(4,i))=max(wa(ixtg(4,i)),dx)
211 ENDDO
212C-----for case of coating shell--
213 IF (ilev/=3) THEN
214 DO i=1,numnod
215 tagb(i) = 0
216 END DO
217 DO i=1,nrt
218 IF (msegtyp(i) /= 0) THEN
219 DO j =1,4
220 nn= irect(j,i)
221 tagb(nn) = 1
222 END DO
223 END IF
224 END DO
225 DO i=1,numnod
226 IF (tagb(i)==0) wa(i)=0
227 END DO
228 END IF
229C-------
230 DO i=1,numelt
231 mg=ixt(4,i)
232 ip = ipartt(i)
233 IF ( thk_part(ip) > zero ) THEN
234 dx=half*thk_part(ip)
235 ELSE
236 dx=half*sqrt(geo(1,mg))
237 END IF
238 wa(ixt(2,i))=max(wa(ixt(2,i)),dx)
239 wa(ixt(3,i))=max(wa(ixt(3,i)),dx)
240 ENDDO
241 DO i=1,numelp
242 mg=ixp(5,i)
243 ip = ipartp(i)
244 IF ( thk_part(ip) > zero ) THEN
245 dx=half*thk_part(ip)
246 ELSE
247 dx=half*sqrt(geo(1,mg))
248 END IF
249 wa(ixp(2,i))=max(wa(ixp(2,i)),dx)
250 wa(ixp(3,i))=max(wa(ixp(3,i)),dx)
251 ENDDO
252 DO i=1,numelr
253 ip = ipartr(i)
254 IF ( thk_part(ip) > zero ) THEN
255 mg=ixr(1,i)
256 igtyp = igeo(11,mg)
257 dx=half*thk_part(ip)
258 wa(ixr(2,i))=max(wa(ixr(2,i)),dx)
259 wa(ixr(3,i))=max(wa(ixr(3,i)),dx)
260 IF (igtyp==12) wa(ixr(4,i))=max(wa(ixr(4,i)),dx)
261 END IF
262 ENDDO
263 DO i=1,nsn
264 gap_s(i)=gapscale * wa(nsv(i))
265 gap_s(i)=min(gap_s(i),gapmax_s)
266 ENDDO
267C---------put SECONDARY node on the free edge to GAP=0
268 IF(igap0 > 0)THEN
269 DO i=1,numnod
270 tagb(i)=0
271 ENDDO
272C
273 IF(ilev /= 3 )THEN
274 CALL i24bord(igrsurf2%NSEG ,igrsurf2%NODES ,tagb)
275 ENDIF
276 IF(ilev == 2)THEN
277 CALL i24bord(igrsurf%NSEG ,igrsurf%NODES ,tagb)
278 ENDIF
279 DO i=1,nsn
280 ns = nsv(i)
281 IF( tagb(ns) > 0 ) gap_s(i) = em20
282 ENDDO
283 ENDIF
284C
285 DO i=1,nsn
286 gaps1=max(gaps1,gap_s(i))
287 gaps_mn=min(gaps_mn,gap_s(i))
288 ENDDO
289C calcul du surface second. ---
290 IF(intth > 0 ) THEN
291 IF(nadmesh==0)THEN
292 DO i = 1,nsn
293 areas(i) = zero
294 DO j= knod2elc(nsv(i))+1,knod2elc(nsv(i)+1)
295 ie = nod2elc(j)
296 sx1 = x(1,ixc(4,ie)) - x(1,ixc(2,ie))
297 sy1 = x(2,ixc(4,ie)) - x(2,ixc(2,ie))
298 sz1 = x(3,ixc(4,ie)) - x(3,ixc(2,ie))
299 sx2 = x(1,ixc(5,ie)) - x(1,ixc(3,ie))
300 sy2 = x(2,ixc(5,ie)) - x(2,ixc(3,ie))
301 sz2 = x(3,ixc(5,ie)) - x(3,ixc(3,ie))
302 sx3 = sy1*sz2 - sz1*sy2
303 sy3 = sz1*sx2 - sx1*sz2
304 sz3 = sx1*sy2 - sy1*sx2
305 areas(i) = areas(i)
306 . + one_over_8*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
307C overwrite
308 ielec(i) = ixc(1,ie)
309 END DO
310C
311 DO j= knod2eltg(nsv(i))+1,knod2eltg(nsv(i)+1)
312 ie = nod2eltg(j)
313 sx1 = x(1,ixtg(3,ie)) - x(1,ixtg(2,ie))
314 sy1 = x(2,ixtg(3,ie)) - x(2,ixtg(2,ie))
315 sz1 = x(3,ixtg(3,ie)) - x(3,ixtg(2,ie))
316 sx2 = x(1,ixtg(4,ie)) - x(1,ixtg(2,ie))
317 sy2 = x(2,ixtg(4,ie)) - x(2,ixtg(2,ie))
318 sz2 = x(3,ixtg(4,ie)) - x(3,ixtg(2,ie))
319 sx3 = sy1*sz2 - sz1*sy2
320 sy3 = sz1*sx2 - sx1*sz2
321 sz3 = sx1*sy2 - sy1*sx2
322 areas(i) = areas(i)
323 . + one_over_6*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
324C overwrite
325 ielec(i) = ixtg(1,ie)
326 END DO
327 END DO
328 ELSE
329 DO i = 1,nsn
330 areas(i) = zero
331 DO j= knod2elc(nsv(i))+1,knod2elc(nsv(i)+1)
332 ie = nod2elc(j)
333
334 ip = ipartc(ie)
335 nlev =ipart(10,ip)
336 mylev=sh4tree(3,ie)
337 IF(mylev < 0) mylev=-(mylev+1)
338
339 IF(mylev==nlev)THEN
340 sx1 = x(1,ixc(4,ie)) - x(1,ixc(2,ie))
341 sy1 = x(2,ixc(4,ie)) - x(2,ixc(2,ie))
342 sz1 = x(3,ixc(4,ie)) - x(3,ixc(2,ie))
343 sx2 = x(1,ixc(5,ie)) - x(1,ixc(3,ie))
344 sy2 = x(2,ixc(5,ie)) - x(2,ixc(3,ie))
345 sz2 = x(3,ixc(5,ie)) - x(3,ixc(3,ie))
346 sx3 = sy1*sz2 - sz1*sy2
347 sy3 = sz1*sx2 - sx1*sz2
348 sz3 = sx1*sy2 - sy1*sx2
349 areas(i) = areas(i)
350 . + one_over_8*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
351C overwrite
352 ielec(i) = ixc(1,ie)
353 END IF
354
355 END DO
356C
357 DO j= knod2eltg(nsv(i))+1,knod2eltg(nsv(i)+1)
358 ie = nod2eltg(j)
359
360 ip = iparttg(ie)
361 nlev =ipart(10,ip)
362 mylev=sh3tree(3,ie)
363 IF(mylev < 0) mylev=-(mylev+1)
364
365 IF(mylev==nlev)THEN
366 sx1 = x(1,ixtg(3,ie)) - x(1,ixtg(2,ie))
367 sy1 = x(2,ixtg(3,ie)) - x(2,ixtg(2,ie))
368 sz1 = x(3,ixtg(3,ie)) - x(3,ixtg(2,ie))
369 sx2 = x(1,ixtg(4,ie)) - x(1,ixtg(2,ie))
370 sy2 = x(2,ixtg(4,ie)) - x(2,ixtg(2,ie))
371 sz2 = x(3,ixtg(4,ie)) - x(3,ixtg(2,ie))
372 sx3 = sy1*sz2 - sz1*sy2
373 sy3 = sz1*sx2 - sx1*sz2
374 sz3 = sx1*sy2 - sy1*sx2
375 areas(i) = areas(i)
376 . + one_over_6*sqrt(sx3*sx3+sy3*sy3+sz3*sz3)
377C overwrite
378 ielec(i) = ixtg(1,ie)
379 END IF
380
381 END DO
382 END DO
383 END IF
384 END IF
385
386C -----Friction model SECONDARY nodes parts------
387C-----------if node connects to both shell and solid -> takes shell
388
389 IF(intfric > 0) THEN
390
391 IF(numels/=0)THEN
392 DO i = 1,nsn
393 ipfmax = 0
394 ipflmax = 0
395 DO j= knod2els(nsv(i))+1,knod2els(nsv(i)+1)
396 ie = nod2els(j)
397 ip = iparts(ie)
398 ipg = tagprt_fric(ip)
399 IF(ipg > 0.AND.ip>ipfmax) THEN
401 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
402 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl)
403 IF(ipl /=0) THEN
404 ipfmax = ip
405 ipflmax = ipl
406 ENDIF
407 ENDIF
408 ENDDO
409C
410C
411 IF(ipfmax/=0) THEN
412 ipartfrics(i) = ipflmax
413 ENDIF
414
415 ENDDO
416 ENDIF
417
418 IF(numelc/=0.OR.numeltg/=0) THEN
419 DO i = 1,nsn
420 ipfmax = 0
421 ipflmax = 0
422 DO j= knod2elc(nsv(i))+1,knod2elc(nsv(i)+1)
423 ie = nod2elc(j)
424 ip = ipartc(ie)
425 ipg = tagprt_fric(ip)
426 IF(ipg > 0.AND.ip>ipfmax) THEN
428 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
429 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl)
430 IF(ipl /=0) THEN
431 ipfmax = ip
432 ipflmax = ipl
433 ENDIF
434 ENDIF
435 ENDDO
436
437C
438 DO j= knod2eltg(nsv(i))+1,knod2eltg(nsv(i)+1)
439 ie = nod2eltg(j)
440 ip = iparttg(ie)
441 ipg = tagprt_fric(ip)
442 IF(ipg > 0.AND.ip>ipfmax) THEN
444 . ipg,intbuf_fric_tab(intfric)%S_TABPARTS_FRIC,
445 . intbuf_fric_tab(intfric)%TABPARTS_FRIC,ipl)
446
447 IF(ipl /=0) THEN
448 ipfmax = ip
449 ipflmax = ipl
450 ENDIF
451 ENDIF
452 ENDDO
453C
454 IF(ipfmax/=0) THEN
455 ipartfrics(i) = ipflmax
456 ENDIF
457
458 ENDDO
459 ENDIF
460 ENDIF
461
462C----------------------------------
463C -----NITSCHE method for contact : construction of tabs needed to compute equivalent nodal force------
464 IF(intnitsche > 0 ) THEN
465C IRECTS tab : case NRTS=NRTM, similar to irect
466C but irects (seg -> SECONDARY or MAIN node) / irect (seg -> local node)
467
468 ALLOCATE(tagnod(numnod))
469 tagnod(1:numnod)=0
470 DO nm=1,nmn
471 tagnod(msr(nm))=nm
472 END DO
473
474 DO i=1,nrts
475 DO j=1,4
476 nm = tagnod(irect(j,i))
477 irects(j,i) = nm
478 ENDDO
479 ENDDO
480
481 DEALLOCATE(tagnod)
482
483C IELENRTS tab : Element number for each SECONDARY segment
484 IF (ilev==2) THEN
485 nrt1=igrsurf2%NSEG
486 DO i=1,nrt1
487 nel=igrsurf2%ELEM(i)
488 IF(igrsurf2%ELTYP(i)==1 ) THEN
489 ielnrts(i) = nel
490 ENDIF
491 ENDDO
492 nshiff = nrt1
493 nrt2=igrsurf%NSEG
494 DO i=1,nrt2
495 nel=igrsurf%ELEM(i)
496 IF(igrsurf%ELTYP(i) == 1 ) THEN
497 ielnrts(nshiff+i) = nel
498 ENDIF
499 ENDDO
500 ELSE
501 DO i=1,nrt
502 nel=igrsurf%ELEM(i)
503 IF(igrsurf%ELTYP(i) == 1 ) THEN
504 ielnrts(i) = nel
505 ENDIF
506 ENDDO
507 ENDIF
508
509C ADRECTS tab : Adress of each SECONDARY node in element connectivity for PARITH/ON computation
510 adrects(1:4,1:nrt) = 0
511 DO i=1,nrt
512 ie = ielnrts(i)
513 n1 = irect(1,i)
514 n2 = irect(2,i)
515 n3 = irect(3,i)
516 n4 = irect(4,i)
517
518
519 IF(ie > 0) THEN
520
521 IF (ie <= numels8 ) THEN
522
523 DO k=1,4
524 DO j=1,8
525 IF(adrects(k,i)==0) THEN
526 n=ixs(j+1,ie)
527 IF(n==irect(k,i)) THEN
528 adrects(k,i) = j
529 ENDIF
530 ENDIF
531 ENDDO
532 ENDDO
533
534 IF(n3==n4) THEN
535 DO k=1,4
536 IF(adrects(k,i) == 5) THEN
537 adrects(k,i) = 6
538 ELSEIF(adrects(k,i) == 6) THEN
539 adrects(k,i) = 5
540 ENDIF
541 ENDDO
542 ENDIF
543
544 ELSEIF(ie <= numels8+numels10 ) THEN
545 DO k=1,3
546 DO j=1,6
547 n=ixs10(j,ie-numels8)
548 IF(n==irect(k,i)) THEN
549 adrects(k,i) = 10 +j
550 ENDIF
551 ENDDO
552 DO j=1,8
553 IF(adrects(k,i)==0) THEN
554
555 n=ixs(j+1,ie)
556 IF(n==irect(k,i)) THEN
557 adrects(k,i) = j
558 ENDIF
559 ENDIF
560 ENDDO
561
562 ENDDO
563 ELSEIF(ie <= numels8+numels10+numels20 ) THEN
564 DO k=1,4
565 DO j=1,12
566 n=ixs20(j,ie-numels8-numels10)
567 IF(n==irect(k,i)) THEN
568 adrects(k,i) = 20 +j
569 ENDIF
570 ENDDO
571 DO j=1,8
572 IF(adrects(k,i)==0) THEN
573 n=ixs(j+1,ie)
574 IF(n==irect(k,i)) THEN
575 adrects(k,i) = j
576 ENDIF
577 ENDIF
578 ENDDO
579 ENDDO
580 ELSEIF(ie <= numels8+numels10+numels20+numels16)THEN
581 DO k=1,4
582 DO j=1,8
583 n=ixs20(j,ie-numels8-numels10-numels20)
584 IF(n==irect(k,i)) THEN
585 adrects(k,i) = 40 +j
586 ENDIF
587 ENDDO
588 DO j=1,8
589 IF(adrects(k,i)==0) THEN
590 n=ixs(j+1,ie)
591 IF(n==irect(k,i)) THEN
592 adrects(k,i) = j
593 ENDIF
594 ENDIF
595 ENDDO
596
597 ENDDO
598 ENDIF
599
600 ENDIF ! IE >0
601
602 ENDDO ! NRTS
603
604C FACNRTS tab : Facet number in element connectuvty for each SECONDARY segment for PARITH/ON computation
605 DO i=1,nrt
606 ie = ielnrts(i)
607 n1 = irect(1,i)
608 n2 = irect(2,i)
609 n3 = irect(3,i)
610 n4 = irect(4,i)
611
612 IF(ie > 0) THEN
613
614 IF(ie<= numels8 ) THEN
615 IF(n3 /= n4) THEN
616 tab1(1) = n1
617 tab1(2) = n2
618 tab1(3) = n3
619 tab1(4) = n4
620 DO k=1,4
621 DO j=1,4-k
622 IF(tab1(j+1) < tab1(j)) THEN
623 perm = tab1(j+1)
624 tab1(j+1) = tab1(j)
625 tab1(j) = perm
626 ENDIF
627 ENDDO
628 ENDDO
629
630 DO fc=1,6
631 tab2(1) = ixs(faces(1,fc)+1,ie)
632 tab2(2) = ixs(faces(2,fc)+1,ie)
633 tab2(3) = ixs(faces(3,fc)+1,ie)
634 tab2(4) = ixs(faces(4,fc)+1,ie)
635 DO k=1,4
636 DO j=1,4-k
637 IF(tab2(j+1) < tab2(j)) THEN
638 perm = tab2(j+1)
639 tab2(j+1) = tab2(j)
640 tab2(j) = perm
641 ENDIF
642 ENDDO
643 ENDDO
644 IF(tab1(1)==tab2(1).AND.tab1(2)==tab2(2).AND.tab1(3)==tab2(3)) THEN
645 facnrts(i) = fc
646 EXIT
647 ENDIF
648 ENDDO
649 ELSE
650 tab1(1) = n1
651 tab1(2) = n2
652 tab1(3) = n3
653
654 DO k=1,3
655 DO j=1,3-k
656 IF(tab1(j+1) < tab1(j)) THEN
657 perm = tab1(j+1)
658 tab1(j+1) = tab1(j)
659 tab1(j) = perm
660 ENDIF
661 ENDDO
662 ENDDO
663
664 DO fc=1,6
665 n1 = ixs(faces(1,fc)+1,ie)
666 n2 = ixs(faces(2,fc)+1,ie)
667 n3 = ixs(faces(3,fc)+1,ie)
668 n4 = ixs(faces(4,fc)+1,ie)
669 tab2(1) =n1
670 IF(n1/=n2.AND.n2/=n3) THEN
671 tab2(2) =n2
672 tab2(3) =n3
673 ELSEIF(n1/=n2) THEN
674 tab2(2) =n2
675 tab2(3) =n4
676 ELSEIF(n2/=n3) THEN
677 tab2(2) =n3
678 tab2(3) =n4
679 ELSE
680 EXIT
681 ENDIF
682 DO k=1,3
683 DO j=1,3-k
684 IF(tab2(j+1) < tab2(j)) THEN
685 perm = tab2(j+1)
686 tab2(j+1) = tab2(j)
687 tab2(j) = perm
688 ENDIF
689 ENDDO
690 ENDDO
691 IF(tab1(1)==tab2(1).AND.tab1(2)==tab2(2).AND.tab1(3)==tab2(3)) THEN
692 facnrts(i) = fc
693 EXIT
694 ENDIF
695 ENDDO
696 ENDIF
697
698 ELSEIF(ie<= numels8+numels10 ) THEN
699 tab1(1) = adrects(1,i)
700 tab1(2) = adrects(2,i)
701 tab1(3) = adrects(3,i)
702 DO k=1,3
703 DO j=1,3-k
704 IF(tab1(j+1) < tab1(j)) THEN
705 perm = tab1(j+1)
706 tab1(j+1) = tab1(j)
707 tab1(j) = perm
708 ENDIF
709 ENDDO
710 ENDDO
711 DO fc=1,16
712 IF(tab1(1)==faces10(1,fc).AND.tab1(2)==faces10(2,fc).AND.tab1(3)==faces10(3,fc)) THEN
713 facnrts(i) = fc
714 EXIT
715 ENDIF
716 ENDDO
717
718 ELSEIF(ie <= numels8+numels10+numels20 ) THEN
719! Not available yet
720 ENDIF
721
722 ENDIF ! IE >0
723
724 ENDDO ! NRTS
725
726 ENDIF ! NITSHCHE
727
728C
729C------------------------------------
730C GAP STIF FACES MAIN
731C------------------------------------
732 IF (ilev==2) THEN
733C------------ISU1 first
734 nrt1=igrsurf2%NSEG
735 CALL i24gapm(
736 1 x ,irect ,stf ,ixs ,pm ,
737 2 geo ,nrt1 ,ixc ,nint ,stfac ,
738 3 nty ,gap ,noint ,stfn ,nsn ,
739 4 ms ,nsv ,ixtg ,igap ,gap_m ,
740 6 ixt ,ixp ,slsfac,dxm ,ndx ,
741 9 knod2els ,knod2elc ,knod2eltg ,nod2els ,
742 a nod2elc,nod2eltg ,igrsurf2 ,intth,
743 b ieles ,ielec ,areas ,sh4tree ,sh3tree ,
744 c ipart ,ipartc ,iparttg ,thk ,thk_part ,
745 d ixr ,itab ,bgapsmx ,ixs10 ,msegtyp ,
746 e ixs16 ,ixs20 ,gap_n ,gaps1 ,gaps2 ,
747 f gapmx , gapmn ,gapscale ,nshif ,gapmax_m,
748 g id ,titr ,igeo ,fillsol ,nrtt ,
749 h pm_stack, iworksh,intfric ,tagprt_fric,ipartfrics,
750 i ipartfricm,iparts,intbuf_fric_tab ,elem_linked_to_segment,
751 j igsti , flag_elem_inter25)
752 nrt2=igrsurf%NSEG
753 nshif = nrt1
754 CALL i24gapm(
755 1 x ,irect ,stf ,ixs ,pm ,
756 2 geo ,nrt2 ,ixc ,nint ,stfac ,
757 3 nty ,gap ,noint ,stfn ,nsn ,
758 4 ms ,nsv ,ixtg ,igap ,gap_m ,
759 6 ixt ,ixp ,
760 8 slsfac,dxm ,ndx ,
761 9 knod2els ,knod2elc ,knod2eltg ,nod2els ,
762 a nod2elc,nod2eltg ,igrsurf ,intth,
763 b ieles ,ielec ,areas ,sh4tree ,sh3tree ,
764 c ipart ,ipartc ,iparttg ,thk ,thk_part ,
765 d ixr ,itab ,bgapsmx ,ixs10 ,msegtyp ,
766 e ixs16 ,ixs20 ,gap_n ,gaps1 ,gaps2 ,
767 f gapmx , gapmn ,gapscale ,nshif ,gapmax_m,
768 g id ,titr ,igeo ,fillsol ,nrtt ,
769 h pm_stack , iworksh,intfric,tagprt_fric,ipartfrics,
770 i ipartfricm,iparts,intbuf_fric_tab ,elem_linked_to_segment,
771 j igsti , flag_elem_inter25)
772 ELSE
773 CALL i24gapm(
774 1 x ,irect ,stf ,ixs ,pm ,
775 2 geo ,nrt ,ixc ,nint ,stfac ,
776 3 nty ,gap ,noint ,stfn ,nsn ,
777 4 ms ,nsv ,ixtg ,igap ,gap_m ,
778 6 ixt ,ixp ,slsfac,dxm ,ndx ,
779 9 knod2els ,knod2elc ,knod2eltg ,nod2els ,
780 a nod2elc,nod2eltg ,igrsurf ,intth,
781 b ieles ,ielec ,areas ,sh4tree ,sh3tree ,
782 c ipart ,ipartc ,iparttg ,thk ,thk_part ,
783 d ixr ,itab ,bgapsmx ,ixs10 ,msegtyp ,
784 e ixs16 ,ixs20 ,gap_n ,gaps1 ,gaps2 ,
785 f gapmx , gapmn ,gapscale ,nshif ,gapmax_m,
786 g id ,titr ,igeo ,fillsol ,nrtt ,
787 h pm_stack , iworksh,intfric,tagprt_fric,ipartfrics,
788 i ipartfricm,iparts,intbuf_fric_tab ,elem_linked_to_segment,
789 j igsti , flag_elem_inter25)
790 END IF
791
792
793C---------------------------
794C GAP
795C---------------------------
796 gapmx=sqrt(gapmx)
797 gapmx=min(gapmx,gapmax_m)
798C GAP VARIABLE :
799C - GAPMIN CONTIENT ONE GAP MINIMUM UTILISE SI GAP_S(I)+GAP_M(J) < GAPMIN
800C - GAP CONTIENT LE SUP DE (GAP_S(I)+GAP_M(J),GAPMIN)
801 IF(gap<=zero)THEN
802 IF(ndx/=0)THEN
803 gapmin = gapmn
804 gapmin = min(half*gapmx,gapmin)
805 ELSE
806C GAPMIN = EM01 * GAPMX
807 gapmin = zero
808 ENDIF
809C WRITE(IOUT,1300)GAPMIN
810 ELSE
811 gapmin = gap
812 ENDIF
813C------recalculate GAP_MIN,MAX
814 gapmx=zero
815 gapmn=ep30
816 DO i=1,nrt
817 gapmx=max(gapmx,gap_m(i))
818 gapmn=min(gapmn,gap_m(i))
819 END DO
820 IF(ipri>=1) THEN
821 IF(gap<=zero)THEN
822 WRITE(iout,1400)gaps_mn,gaps1
823 WRITE(iout,1500)gapmn,gapmx
824 END IF
825 END if!(IPRI>=1) THEN
826C SUP DES GAPS VARIABLES
827 gap = gaps1+gaps2
828C---------------------------------------------
829C MISE A ONE DU MULTIPLICATEUR NODALE DES RIGIDITES
830C---------------------------------------------
831 DO 610 l=1,nsn
832 stfn(l) = one
833 610 CONTINUE
834C
835C Calcul du gap reel a utiliser lors du critere de retri
836C
837 bgapsmx = zero
838 gapinf=ep30
839 DO i = 1, nsn
840 gapinf = min(gapinf,gap_s(i))
841 bgapsmx = max(bgapsmx,gap_s(i))
842 ENDDO
843 DO i = 1, nrt
844 gapinf = min(gapinf,gap_m(i))
845 ENDDO
846 gapinf=max(gapinf,gapmin)
847C--- MVOISN is used temporarily for Pen_ini MVOISN(1,*) -> MTYPE(solid),MVOISN(2,*) -> E_id
848 DO i=1,nrt
849 CALL insol3et(x ,irect ,ixs ,nint ,mvoisn(2,i),i ,
850 . area ,noint ,knod2els,nod2els,ixs10 ,
851 . ixs16,ixs20 ,mvoisn(1,i))
852C-------supposing only small segments (sub-triangles) for 10 nodes tetras --------------
853 IF (mvoisn(1,i)==10) THEN
854C---Verify this factor 3-------------
855 gap_n(1,i) = three*one_over_8*gap_n(1,i)
856 stf(i) = sixteen*stf(i)
857 ELSEIF (mvoisn(1,i)==16) THEN
858 gap_n(1,i) = gap_n(1,i)/4
859 END IF
860 END DO
861C-----reset MSEGTYP(I)=0 for coating shell, engine uses MSEGTYP only for symmetry
862C------do it at end of init3, used for i24pen3....
863c DO I=1,NRT
864c IF (MSEGTYP(I)==-4.OR.MSEGTYP(I)==-8) MSEGTYP(I) =0
865c END DO
866C------initialize MSEGTYP and asymmetric shell part
867c IAD=ISURF(3)+1
868c CALL I24NIMTYP(NRT ,IBUFSSG(IAD),MSEGTYP,NRT_SH)
869 IF (nrt_sh>0) THEN
870 j=nrt
871 DO i=1,nrt
872 IF (msegtyp(i) > 0 .AND.msegtyp(i)<=nrtt ) THEN
873 j = j + 1
874 stf(j) = stf(i)
875 gap_m(j)=gap_m(i)
876 IF(intth > 0 ) ieles(j) = ieles(i)
877 IF(intfric > 0) ipartfricm(j)=ipartfricm(i)
878 END IF
879 END DO
880 END IF
881c print*,'NOINT',NOINT, BGAPSMX
882C---------------------------------------------
883C CALCULATE NODAL NORMAL FOR SECONDARY NODES
884C---------------------------------------------
885 IF (inacti/=0) THEN
886 CALL i24normns(
887 1 x ,irect ,nrt ,nsn ,nsv ,pen_old, stf)
888C------nodal part_id
889 DO i=1,numnod
890 tagb(i)=0
891 ENDDO
892C-----------if node connects to both shell and solid -> take solid's
893 DO i=1,numelc
894 ip = ipartc(i)
895 DO j=1,4
896 tagb(ixc(1+j,i))=ip
897 ENDDO
898 ENDDO
899 DO i=1,numeltg
900 ip = iparttg(i)
901 DO j=1,3
902 tagb(ixtg(1+j,i))=ip
903 ENDDO
904 ENDDO
905C----factulative for Truss and beam
906c DO I=1,NUMELT
907c IP = IPARTT(I)
908c TAGB(IXT(2,I))=IP
909c TAGB(IXT(3,I))=IP
910c ENDDO
911c DO I=1,NUMELP
912c IP = IPARTP(I)
913c TAGB(IXP(2,I))=IP
914c TAGB(IXP(3,I))=IP
915c ENDDO
916C-------solid elements
917 DO i=1,nrt
918 IF (mvoisn(2,i)>0) THEN
919 ip = iparts(mvoisn(2,i))
920 mvoisn(3,i) =ip
921 DO j=1,4
922 tagb(irect(j,i))=ip
923 ENDDO
924 END IF
925 END DO
926 DO i=1,nsn
927 ns = nsv(i)
928 ipartns(i) = tagb(ns)
929C-------to not have wrong equality IPART_NS=IPART_E with 0
930 IF (ipartns(i)==0) ipartns(i) =-1
931 ENDDO
932C-------shell elements
933 j=nrt
934 DO i=1,nrt
935 IF (msegtyp(i) > 0 .AND.msegtyp(i)<=nrtt) THEN
936 j = j + 1
937 ip = tagb(irect(1,i))
938 mvoisn(3,i) =ip
939 mvoisn(3,j) =ip
940 END IF
941 END DO
942 END IF
943
944 DEALLOCATE(tagb)
945 RETURN
946
947 1400 FORMAT(2x,'MIN,MAX OF SECONDARY GAP: ',2(1pg20.13))
948 1500 FORMAT(2x,'MIN,MAX OF MAIN GAP: ',2(1pg20.13)/)
subroutine i24normns(x, irect, nrt, nsn, nsv, pen_old, stf)
Definition i24sti3.F:1908
subroutine i24bord(nseg, surf_nodes, tagb)
Definition i24sti3.F:1806
subroutine i24gapm(x, irect, stf, ixs, pm, geo, nrt, ixc, nint, stfac, nty, gap, noint, stfn, nsn, ms, nsv, ixtg, igap, gap_m, ixt, ixp, slsfac, dxm, ndx, knod2els, knod2elc, knod2eltg, nod2els, nod2elc, nod2eltg, igrsurf, intth, ieles, ielec, areas, sh4tree, sh3tree, ipart, ipartc, iparttg, thk, thk_part, ixr, itab, bgapsmx, ixs10, msegtyp, ixs16, ixs20, gap_n, gaps1, gaps2, gapmx, gapmn, gapscale, nshift, gapmax_m, id, titr, igeo, fillsol, nrtt, pm_stack, iworksh, intfric, tagprt_fric, ipartfrics, ipartfricm, iparts, intbuf_fric_tab, elem_linked_to_segment, igsti, flag_elem_inter25)
Definition i24sti3.F:1106
subroutine insol3et(x, irect, ixs, nint, nel, i, area, noint, knod2els, nod2els, ixs10, ixs16, ixs20, nnod)
Definition i24sti3.F:960
integer, parameter nchartitle
subroutine tagnod(ix, nix, nix1, nix2, numel, iparte, tagbuf, npart)
Definition tagnod.F:29

◆ inelts_np()

subroutine inelts_np ( x,
integer, dimension(4,*) irect,
integer, dimension(nixs,*) ixs,
integer nrev,
integer nel,
integer i,
area,
integer noint,
integer ir,
integer, dimension(*) surf_eltyp,
integer, dimension(*) surf_elem )

Definition at line 2226 of file i24sti3.F.

2229C-----------------------------------------------
2230C I m p l i c i t T y p e s
2231C-----------------------------------------------
2232#include "implicit_f.inc"
2233C-----------------------------------------------
2234C D u m m y A r g u m e n t s
2235C-----------------------------------------------
2236 INTEGER NREV, NEL, I, NOINT,IR,SURF_ELTYP(*),SURF_ELEM(*)
2237C REAL
2238 my_real
2239 . area
2240 INTEGER IRECT(4,*), IXS(NIXS,*)
2241C REAL
2242 my_real
2243 . x(3,*)
2244C-----------------------------------------------
2245C L o c a l V a r i a b l e s
2246C-----------------------------------------------
2247 INTEGER IY(4), N, JJ, II, K, NN, KK, IC, IAD,
2248 . NUSER, NUSERM
2249C REAL
2250 my_real
2251 . n1, n2, n3, dds
2252 my_real :: xx1(4), xx2(4),xx3(4),xs1,ys1,zs1,xc,yc,zc
2253C-----------------------------------------------
2254C E x t e r n a l F u n c t i o n s
2255C-----------------------------------------------
2256C---Remove print-out in 0.out file (could be too much)
2257 ic =0
2258 nel=0
2259 IF (surf_eltyp(i) /=1) RETURN
2260C
2261 nel=surf_elem(i)
2262C-----------------------------------------------
2263C VERIFICATION DE L'ORIENTATION DES SEGMENTS
2264C-----------------------------------------------
2265 xs1=0.
2266 ys1=0.
2267 zs1=0.
2268 DO 100 jj=1,4
2269 nn=irect(jj,i)
2270 iy(jj)=nn
2271 xx1(jj)=x(1,nn)
2272 xx2(jj)=x(2,nn)
2273 xx3(jj)=x(3,nn)
2274 xs1=xs1+.25*x(1,nn)
2275 ys1=ys1+.25*x(2,nn)
2276 100 zs1=zs1+.25*x(3,nn)
2277C
2278 CALL norma1(n1,n2,n3,area,xx1,xx2,xx3)
2279 xc=0.
2280 yc=0.
2281 zc=0.
2282 DO 110 k=1,8
2283 kk=ixs(k+1,nel)
2284 xc=xc+x(1,kk)
2285 yc=yc+x(2,kk)
2286 zc=zc+x(3,kk)
2287 110 CONTINUE
2288 xc=xc*one_over_8
2289 yc=yc*one_over_8
2290 zc=zc*one_over_8
2291 IF(ir/=0) RETURN
2292 IF(ic>=2)RETURN
2293 dds=n1*(xc-xs1)+n2*(yc-ys1)+n3*(zc-zs1)
2294 IF(dds<0) RETURN
2295 IF(iy(3)==iy(4)) THEN
2296 irect(1,i)=iy(2)
2297 irect(2,i)=iy(1)
2298 ELSE
2299 DO 120 kk=1,4
2300 120 irect(kk,i)=iy(4-kk+1)
2301 ENDIF
2302 nrev = nrev +1
2303C
2304 RETURN
subroutine norma1(n1, n2, n3, area, xx1, xx2, xx3)
Definition norma1.F:38

◆ insol3et()

subroutine insol3et ( x,
integer, dimension(4,*) irect,
integer, dimension(nixs,*) ixs,
integer nint,
integer nel,
integer i,
area,
integer noint,
integer, dimension(*) knod2els,
integer, dimension(*) nod2els,
integer, dimension(6,*) ixs10,
integer, dimension(8,*) ixs16,
integer, dimension(12,*) ixs20,
integer nnod )

Definition at line 957 of file i24sti3.F.

960C-----------------------------------------------
961C I m p l i c i t T y p e s
962C-----------------------------------------------
963#include "implicit_f.inc"
964C-----------------------------------------------
965C C o m m o n B l o c k s
966C-----------------------------------------------
967#include "com04_c.inc"
968C-----------------------------------------------
969C D u m m y A r g u m e n t s
970C-----------------------------------------------
971 INTEGER NINT, NEL, I, NOINT,NNOD
972 my_real
973 . area
974 INTEGER IRECT(4,*), IXS(NIXS,*), KNOD2ELS(*), NOD2ELS(*),
975 . IXS10(6,*), IXS16(8,*), IXS20(12,*)
976 my_real
977 . x(3,*)
978C-----------------------------------------------
979C L o c a l V a r i a b l e s
980C-----------------------------------------------
981 INTEGER N, JJ, II, K, IC, IAD,
982 . NUSER, NUSERM
983C REAL
984
985
986C-----------------------------------------------
987C E x t e r n a l F u n c t i o n s
988C-----------------------------------------------
989C
990 nel=0
991 ic=0
992 nnod = 0
993 IF(numels==0) RETURN
994 nuserm = -1
995 DO 230 iad=knod2els(irect(1,i))+1,knod2els(irect(1,i)+1)
996 n = nod2els(iad)
997 IF(n <= numels8)THEN
998 DO 210 jj=1,4
999 ii=irect(jj,i)
1000 DO k=1,8
1001 IF(ixs(k+1,n)==ii) GOTO 210
1002 ENDDO
1003 GOTO 230
1004 210 CONTINUE
1005 ic=ic+1
1006 nuser = ixs(11,n)
1007 IF (nuser>nuserm) THEN
1008 nel = n
1009 nuserm = nuser
1010 ENDIF
1011 nnod = 8
1012 ELSEIF(n <= numels8+numels10)THEN
1013 DO 220 jj=1,4
1014 ii=irect(jj,i)
1015 DO k=1,8
1016 IF(ixs(k+1,n)==ii) GOTO 220
1017 ENDDO
1018 DO k=1,6
1019 IF(ixs10(k,n-numels8)==ii) GOTO 220
1020 ENDDO
1021 GOTO 230
1022 220 CONTINUE
1023 ic=ic+1
1024 nuser = ixs(11,n)
1025 IF (nuser>nuserm) THEN
1026 nel = n
1027 nuserm = nuser
1028 ENDIF
1029 nnod = 10
1030 ELSEIF(n <= numels8+numels10+numels20)THEN
1031 DO 222 jj=1,4
1032 ii=irect(jj,i)
1033 DO k=1,8
1034 IF(ixs(k+1,n)==ii) GOTO 222
1035 ENDDO
1036 DO k=1,12
1037 IF(ixs20(k,n-numels8-numels10)==ii) GOTO 222
1038 ENDDO
1039 GOTO 230
1040 222 CONTINUE
1041 ic=ic+1
1042 nuser = ixs(11,n)
1043 IF (nuser>nuserm) THEN
1044 nel = n
1045 nuserm = nuser
1046 ENDIF
1047 nnod = 20
1048 ELSEIF(n <= numels8+numels10+numels20+numels16)THEN
1049 DO 224 jj=1,4
1050 ii=irect(jj,i)
1051 DO k=1,8
1052 IF(ixs(k+1,n)==ii) GOTO 224
1053 ENDDO
1054 DO k=1,8
1055 IF(ixs16(k,n-numels8-numels10-numels20)==ii) GOTO 224
1056 ENDDO
1057 GOTO 230
1058 224 CONTINUE
1059 ic=ic+1
1060 nuser = ixs(11,n)
1061 IF (nuser>nuserm) THEN
1062 nel = n
1063 nuserm = nuser
1064 ENDIF
1065 nnod = 16
1066 ELSE
1067 GOTO 230
1068 END IF
1069 230 CONTINUE
1070C-----------------------------------------------
1071 RETURN

◆ insolbox()

subroutine insolbox ( x,
integer s_type,
integer s_el,
integer noint,
integer, dimension(nixs,*) ixs,
integer, dimension(6,*) ixs10,
integer, dimension(8,*) ixs16,
integer, dimension(12,*) ixs20,
integer ns,
gap,
integer ipart_e,
integer ipart_ns,
integer ipen0,
integer ins )

Definition at line 2309 of file i24sti3.F.

2312C-----------------------------------------------
2313C I m p l i c i t T y p e s
2314C-----------------------------------------------
2315#include "implicit_f.inc"
2316C-----------------------------------------------
2317C C o m m o n B l o c k s
2318C-----------------------------------------------
2319#include "com04_c.inc"
2320C-----------------------------------------------
2321C D u m m y A r g u m e n t s
2322C-----------------------------------------------
2323 INTEGER S_TYPE ,S_EL,NS,INS,NOINT,IPART_E,IPART_NS,IPEN0
2324 INTEGER IXS(NIXS,*), IXS10(6,*), IXS16(8,*), IXS20(12,*)
2325 my_real
2326 . x(3,*),gap
2327C-----------------------------------------------
2328C L o c a l V a r i a b l e s
2329C-----------------------------------------------
2330 INTEGER J,N,NC4(4),NC8(8)
2331C REAL
2332 my_real
2333 . xi,yi,zi,xmin,ymin,zmin,xmax,ymax,zmax
2334C-----------------------------------------------
2335C E x t e r n a l F u n c t i o n s
2336C-----------------------------------------------
2337C
2338C-----------------------------------------------
2339 IF (ipen0==0.AND.ipart_e==ipart_ns) THEN
2340 ins = 0
2341 RETURN
2342 END IF
2343 ins = 1
2344 xmin=ep30
2345 xmax=-ep30
2346 ymin=ep30
2347 ymax=-ep30
2348 zmin=ep30
2349 zmax=-ep30
2350 IF (s_type==0.OR.s_el==0) RETURN
2351 nc4(1)=ixs(2,s_el)
2352 nc4(2)=ixs(4,s_el)
2353 nc4(3)=ixs(7,s_el)
2354 nc4(4)=ixs(6,s_el)
2355 nc8(1:8)=ixs(2:9,s_el)
2356 SELECT CASE (s_type)
2357 CASE(4)
2358 DO j=1,4
2359 n= nc4(j)
2360 IF(n==ns) THEN
2361 ins = 0
2362 RETURN
2363 END IF
2364 xmin=min(xmin,x(1,n))
2365 xmax=max(xmax,x(1,n))
2366 ymin=min(ymin,x(2,n))
2367 ymax=max(ymax,x(2,n))
2368 zmin=min(zmin,x(3,n))
2369 zmax=max(zmax,x(3,n))
2370 END DO
2371 CASE(8)
2372 DO j=1,8
2373 n = nc8(j)
2374 IF(n==ns) THEN
2375 ins = 0
2376 RETURN
2377 END IF
2378 xmin=min(xmin,x(1,n))
2379 xmax=max(xmax,x(1,n))
2380 ymin=min(ymin,x(2,n))
2381 ymax=max(ymax,x(2,n))
2382 zmin=min(zmin,x(3,n))
2383 zmax=max(zmax,x(3,n))
2384 END DO
2385 CASE(10)
2386 DO j=1,4
2387 n= nc4(j)
2388 IF(n==ns) THEN
2389 ins = 0
2390 RETURN
2391 END IF
2392 xmin=min(xmin,x(1,n))
2393 xmax=max(xmax,x(1,n))
2394 ymin=min(ymin,x(2,n))
2395 ymax=max(ymax,x(2,n))
2396 zmin=min(zmin,x(3,n))
2397 zmax=max(zmax,x(3,n))
2398 END DO
2399 DO j=1,6
2400 n=ixs10(j,s_el-numels8)
2401 IF(n==ns) THEN
2402 ins = 0
2403 RETURN
2404 END IF
2405 xmin=min(xmin,x(1,n))
2406 xmax=max(xmax,x(1,n))
2407 ymin=min(ymin,x(2,n))
2408 ymax=max(ymax,x(2,n))
2409 zmin=min(zmin,x(3,n))
2410 zmax=max(zmax,x(3,n))
2411 ENDDO
2412 CASE(16)
2413 DO j=1,8
2414 n = nc8(j)
2415 IF(n==ns) THEN
2416 ins = 0
2417 RETURN
2418 END IF
2419 xmin=min(xmin,x(1,n))
2420 xmax=max(xmax,x(1,n))
2421 ymin=min(ymin,x(2,n))
2422 ymax=max(ymax,x(2,n))
2423 zmin=min(zmin,x(3,n))
2424 zmax=max(zmax,x(3,n))
2425 END DO
2426 DO j=1,8
2427 n = ixs16(j,s_el-numels8-numels10-numels20)
2428 IF(n==ns) THEN
2429 ins = 0
2430 RETURN
2431 END IF
2432 xmin=min(xmin,x(1,n))
2433 xmax=max(xmax,x(1,n))
2434 ymin=min(ymin,x(2,n))
2435 ymax=max(ymax,x(2,n))
2436 zmin=min(zmin,x(3,n))
2437 zmax=max(zmax,x(3,n))
2438 ENDDO
2439 CASE(20)
2440 DO j=1,8
2441 n = nc8(j)
2442 IF(n==ns) THEN
2443 ins = 0
2444 RETURN
2445 END IF
2446 xmin=min(xmin,x(1,n))
2447 xmax=max(xmax,x(1,n))
2448 ymin=min(ymin,x(2,n))
2449 ymax=max(ymax,x(2,n))
2450 zmin=min(zmin,x(3,n))
2451 zmax=max(zmax,x(3,n))
2452 END DO
2453 DO j=1,12
2454 n =ixs20(j,s_el-numels8-numels10)
2455 IF(n==ns) THEN
2456 ins = 0
2457 RETURN
2458 END IF
2459 xmin=min(xmin,x(1,n))
2460 xmax=max(xmax,x(1,n))
2461 ymin=min(ymin,x(2,n))
2462 ymax=max(ymax,x(2,n))
2463 zmin=min(zmin,x(3,n))
2464 zmax=max(zmax,x(3,n))
2465 ENDDO
2466 CASE DEFAULT
2467 RETURN
2468 END SELECT
2469C
2470 xi = x(1,ns)
2471 yi = x(2,ns)
2472 zi = x(3,ns)
2473 IF (ipart_e /= ipart_ns) THEN
2474 xmin = xmin-gap
2475 xmax = xmax+gap
2476 ymin = ymin-gap
2477 ymax = ymax+gap
2478 zmin = zmin-gap
2479 zmax = zmax+gap
2480 END IF
2481 IF(xi < xmin) THEN
2482 ins = 0
2483 RETURN
2484 END IF
2485 IF(xi > xmax) THEN
2486 ins = 0
2487 RETURN
2488 END IF
2489 IF(yi < ymin) THEN
2490 ins = 0
2491 RETURN
2492 END IF
2493 IF(yi > ymax) THEN
2494 ins = 0
2495 RETURN
2496 END IF
2497 IF(zi < zmin) THEN
2498 ins = 0
2499 RETURN
2500 END IF
2501 IF(zi > zmax) THEN
2502 ins = 0
2503 RETURN
2504 END IF
2505C-----------------------------------------------
2506 RETURN
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
Definition law100_upd.F:272

◆ normvec()

subroutine normvec ( r,
s,
t )

Definition at line 2015 of file i24sti3.F.

2016C-----------------------------------------------
2017C I m p l i c i t T y p e s
2018C-----------------------------------------------
2019#include "implicit_f.inc"
2020C-----------------------------------------------
2021C D u m m y A r g u m e n t s
2022C-----------------------------------------------
2023 my_real
2024 . r(3) , s(3) , t(3)
2025C-----------------------------------------------
2026C L o c a l V a r i a b l e s
2027C-----------------------------------------------
2028
2029 my_real
2030 . det
2031C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2032C T = R x S
2033C~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2034 t(1) = r(2) * s(3) - r(3) * s(2)
2035 t(2) = r(3) * s(1) - r(1) * s(3)
2036 t(3) = r(1) * s(2) - r(2) * s(1)
2037 CALL normv3(t,det)
2038 RETURN