1507
1508
1509
1515
1516
1517
1518#include "implicit_f.inc"
1519#include "comlock.inc"
1520
1521
1522
1523#include "mvsiz_p.inc"
1524
1525
1526
1527#include "scr07_c.inc"
1528#include "scr11_c.inc"
1529#include "scr14_c.inc"
1530#include "scr16_c.inc"
1531#include "com06_c.inc"
1532#include "com08_c.inc"
1533#include "parit_c.inc"
1534
1535
1536
1537 INTEGER LLT,ITIED,NINT,NISKYFI,NOINT
1538 INTEGER III(MVSIZ,17),IIIS(MVSIZ,16),ICONT(MVSIZ), ISKY(*),
1539 . LE(*) ,LES(*)
1540
1542 . v(3,*),a(3,*),vit(*), ms(*)
1544 . rm(mvsiz) ,rs(mvsiz) ,tm(mvsiz) ,ts(mvsiz) ,
1545 . xx(mvsiz,17),yy(mvsiz,17),zz(mvsiz,17),s_cm(mvsiz),
1546 . s_cs(mvsiz), fsav(*),fcont(3,*),
1547 . ni_m(mvsiz,*) ,ni_s(mvsiz,*),nx(mvsiz) ,ny(mvsiz) ,nz(mvsiz),
1548 . stifn(*),fskyi(lskyi,nfskyi),frotm(7,*),frots(7,*),
1549 .
area(mvsiz),area_tot(mvsiz),area_el(mvsiz),km(2,*),ks(2,*),
1550 . fric(*)
1551 TYPE(H3D_DATABASE) :: H3D_DATA
1552
1553
1554
1555 INTEGER I,J,IK,NK,I1,I2,I3,I4,IAD,NN,LEM,J1,J2,NISKYL,IES,IIS,
1556 . NISKYFIL
1558 . vx,vy,vz,vn,aa,surf,ep2,xe,ye,ze,xa,ya,za,xb,yb,zb,xc,yc,zc,
1559 . f,stif,pene,sigtmx,sigtmy,sigtmz,sigtsx,sigtsy,sigtsz,bb,
1560 . fx,fy,fz,ffx,ffy,ffz,ff,ff2,muf2,htsqrtpi,mas4,ep,vis,
1561 . rhom,rhos,stifv,dt1inv,ffvx,ffvy,ffvz,fftx,ffty,fftz,muf,
1562 . fsav1,fsav2,fsav3,fsav4,fsav5,fsav6,econvt,econtt,beta,
1563 . ks1,ks2
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596 htsqrtpi = eight / (three*sqrt(pi))
1597
1598 IF(dt1>zero)THEN
1599 dt1inv = one/dt1
1600 ELSE
1601 dt1inv =zero
1602 ENDIF
1603
1604
1605 fsav1 = zero
1606 fsav2 = zero
1607 fsav3 = zero
1608 fsav4 = zero
1609 fsav5 = zero
1610 fsav6 = zero
1611 econvt = zero
1612 econtt = zero
1613 DO i=1,llt
1614 lem = le(i)
1615 IF(icont(i)/=0 )THEN
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692 xe = zero
1693 ye = zero
1694 ze = zero
1695 DO ik=1,4
1696 xe = xe + xx(i,ik) *ni_m(i,ik)
1697 + + xx(i,ik+8) *ni_m(i,ik+4)
1698 + - xx(i,ik+4) *ni_m(i,ik)
1699 + - xx(i,ik+12)*ni_m(i,ik+4)
1700 ye = ye + yy(i,ik) *ni_m(i,ik)
1701 + + yy(i,ik+8) *ni_m(i,ik+4)
1702 + - yy(i,ik+4) *ni_m(i,ik)
1703 + - yy(i,ik+12)*ni_m(i,ik+4)
1704 ze = ze + zz(i,ik) *ni_m(i,ik)
1705 + + zz(i,ik+8) *ni_m(i,ik+4)
1706 + - zz(i,ik+4) *ni_m(i,ik)
1707 + - zz(i,ik+12)*ni_m(i,ik+4)
1708 ENDDO
1709 ep = abs(xe*nx(i) + ye*ny(i) + ze*nz(i))
1710 pene = half*(one-abs(s_cm(i))) * ep
1711 if(pene<zero)then
1712 stop 111
1713 endif
1714
1715
1716
1717 vx = zero
1718 vy = zero
1719 vz = zero
1720 IF(les(i)>0)THEN
1721 DO ik=1,8
1722 vx = vx + (v(1,iiis(i,ik)))*ni_s(i,ik)
1723 . - (v(1,iii(i,ik))) *ni_m(i,ik)
1724 vy = vy + (v(2,iiis(i,ik)))*ni_s(i,ik)
1725 . - (v(2,iii(i,ik))) *ni_m(i,ik)
1726 vz = vz + (v(3,iiis(i,ik)))*ni_s(i,ik)
1727 . - (v(3,iii(i,ik))) *ni_m(i,ik)
1728 ENDDO
1729 ks1 = ks(1,les(i))
1730 ks2 = ks(2,les(i))
1731
1732 sigtmx = frotm(5,lem)
1733 sigtmy = frotm(6,lem)
1734 sigtmz = frotm(7,lem)
1735 sigtsx = frots(5,les(i))
1736 sigtsy = frots(6,les(i))
1737 sigtsz = frots(7,les(i))
1738 ELSE
1739 ies = abs(les(i))
1740 DO ik=1,8
1741 iis = iiis(i,ik)
1742 vx = vx +
vfi17(nint)%P(1,iis,ies)*ni_s(i,ik)
1743 . - v(1,iii(i,ik)) *ni_m(i,ik)
1744 vy = vy +
vfi17(nint)%P(2,iis,ies)*ni_s(i,ik)
1745 . - v(2,iii(i,ik)) *ni_m(i,ik)
1746 vz = vz +
vfi17(nint)%P(3,iis,ies)*ni_s(i,ik)
1747 . - v(3,iii(i,ik)) *ni_m(i,ik)
1748 ENDDO
1749 ks1 =
ksfi(nint)%P(1,ies)
1750 ks2 =
ksfi(nint)%P(2,ies)
1751
1752 sigtmx = frotm(5,lem)
1753 sigtmy = frotm(6,lem)
1754 sigtmz = frotm(7,lem)
1755 sigtsx =
frotsfi(nint)%P(5,ies)
1756 sigtsy =
frotsfi(nint)%P(6,ies)
1757 sigtsz =
frotsfi(nint)%P(7,ies)
1758 END IF
1759 vn = nx(i)*vx + ny(i)*vy + nz(i)*vz
1760
1761
1762
1763
1764
1765 stif = htsqrtpi*
area(i) /
1766 . ((km(1,lem)+ks1)*sqrt(area_tot(i)))
1767 f = stif*pene
1768
1769
1770
1771 rhom = km(2,lem)
1772 rhos = ks2
1773 mas4 = (rhom+rhos) *
area(i) *
min(ep,sqrt(
area(i)))
1774 beta=0.5
1775 vis = beta*sqrt(stif*mas4)
1776 f = f + vis * vn
1777 stifv = vis*dt1inv
1778
1779
1780
1781 fx = nx(i) * f
1782 fy = ny(i) * f
1783 fz = nz(i) * f
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1796 bb = stif*dt1
1797 ffx = aa*(sigtmx+sigtsx)+bb*vx
1798 ffy = aa*(sigtmy+sigtsy)+bb*vy
1799 ffz = aa*(sigtmz+sigtsz)+bb*vz
1800 ffvx = vis*vx
1801 ffvy = vis*vy
1802 ffvz = vis*vz
1803
1804
1805
1806 ff = nx(i)*ffx + ny(i)*ffy + nz(i)*ffz
1807 ffx = ffx - ff*nx(i)
1808 ffy = ffy - ff*ny(i)
1809 ffz = ffz - ff*nz(i)
1810 ff = nx(i)*ffvx + ny(i)*ffvy + nz(i)*ffvz
1811 ffvx = ffvx - ff*nx(i)
1812 ffvy = ffvy - ff*ny(i)
1813 ffvz = ffvz - ff*nz(i)
1814 fftx = ffx + ffvx
1815 ffty = ffy + ffvy
1816 fftz = ffz + ffvz
1817
1818
1819
1820 ff2 = fftx*fftx
1821 . + ffty*ffty
1822 . + fftz*fftz
1823 muf = fric(1)*
max(zero,f)
1824 muf2 = muf*muf
1825 IF(ff2 > muf2)THEN
1826
1827
1828 aa = muf/sqrt(ff2)
1829 fftx = fftx*aa
1830 ffty = ffty*aa
1831 fftz = fftz*aa
1832 ff2 = ffx*ffx + ffy*ffy + ffz*ffz
1833 IF(ff2 > muf2)THEN
1834 aa = muf / sqrt(ff2)
1835 ffx = ffx*aa
1836 ffy = ffy*aa
1837 ffz = ffz*aa
1838 ENDIF
1839 ENDIF
1840
1841#include "lockon.inc"
1842 frotm(1,lem) = frotm(1,lem) + ffx
1843 frotm(2,lem) = frotm(2,lem) + ffy
1844 frotm(3,lem) = frotm(3,lem) + ffz
1845 frotm(4,lem) = frotm(4,lem) +
area(i)
1846 IF(les(i)>0)THEN
1847 IF(iparit == 0)THEN
1848 frots(1,les(i)) = frots(1,les(i)) + ffx
1849 frots(2,les(i)) = frots(2,les(i)) + ffy
1850 frots(3,les(i)) = frots(3,les(i)) + ffz
1851 frots(4,les(i)) = frots(4,les(i)) +
area(i)
1852 ELSE
1859 END IF
1860 ELSE
1861 IF(iparit == 0)THEN
1866 ELSE
1873 END IF
1874 END IF
1875#include "lockoff.inc"
1876
1877
1878
1879 fsav1 =fsav1 + fx
1880 fsav2 =fsav2 + fy
1881 fsav3 =fsav3 + fz
1882 fsav4 =fsav4 + fftx
1883 fsav5 =fsav5 + ffty
1884 fsav6 =fsav6 + fftz
1885
1886
1887
1888 fx = fx + fftx
1889 fy = fy + ffty
1890 fz = fz + fftz
1891 stif = stif + stifv
1892 econt = econt
1893 . + vx*fx+vy*fy+vz*fz
1894
1895 IF(les(i)>0)THEN
1896 IF(iparit == 0)THEN
1897#include "lockon.inc"
1898 DO ik=1,8
1899 j1 = iii(i,ik)
1900 a(1,j1) = a(1,j1) + ni_m(i,ik)*fx
1901 a(2,j1) = a(2,j1) + ni_m(i,ik)*fy
1902 a(3,j1) = a(3,j1) + ni_m(i,ik)*fz
1903 stifn(j1) = stifn(j1) + abs(ni_m(i,ik)*stif)
1904
1905 j2 = iiis(i,ik)
1906 a(1,j2) = a(1,j2) - ni_s(i,ik)*fx
1907 a(2,j2) = a(2,j2) - ni_s(i,ik)*fy
1908 a(3,j2) = a(3,j2) - ni_s(i,ik)*fz
1909 stifn(j2) = stifn(j2) + abs(ni_s(i,ik)*stif)
1910 ENDDO
1911#include "lockoff.inc"
1912 ELSE
1913#include "lockon.inc"
1914 niskyl = nisky
1915 nisky = nisky + 16
1916#include "lockoff.inc"
1917 IF (niskyl > lskyi) THEN
1918 CALL ancmsg(msgid=26,anmode=aninfo,
1919 . i1=noint)
1921 ENDIF
1922 DO ik=1,8
1923 niskyl = niskyl + 1
1924 fskyi(niskyl,1)=ni_m(i,ik)*fx
1925 fskyi(niskyl,2)=ni_m(i,ik)*fy
1926 fskyi(niskyl,3)=ni_m(i,ik)*fz
1927 fskyi(niskyl,4)=abs(ni_m(i,ik)*stif)
1928 isky(niskyl) = iii(i,ik)
1929 niskyl = niskyl + 1
1930 fskyi(niskyl,1)= - ni_s(i,ik)*fx
1931 fskyi(niskyl,2)= - ni_s(i,ik)*fy
1932 fskyi(niskyl,3)= - ni_s(i,ik)*fz
1933 fskyi(niskyl,4)= abs(ni_s(i,ik)*stif)
1934 isky(niskyl) = iiis(i,ik)
1935 ENDDO
1936 ENDIF
1937
1938 IF(anim_v(4)+outp_v(4)+h3d_data%N_VECT_CONT >0.AND.
1939 . ((tt>=tanim .AND. tt<=tanim_stop).OR.tt>=toutp.OR.(tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP).OR.
1940 . (manim>=4.AND.manim<=15).OR. h3d_data%MH3D /= 0))THEN
1941#include "lockon.inc"
1942 DO ik=1,8
1943 j1 = iii(i,ik)
1944 fcont(1,j1) =fcont(1,j1) + ni_m(i,ik)*fx
1945 fcont(2,j1) =fcont(2,j1) + ni_m(i,ik)*fy
1946 fcont(3,j1) =fcont(3,j1) + ni_m(i,ik)*fz
1947
1948 j2 = iiis(i,ik)
1949 fcont(1,j2) =fcont(1,j2) - ni_s(i,ik)*fx
1950 fcont(2,j2) =fcont(2,j2) - ni_s(i,ik)*fy
1951 fcont(3,j2) =fcont(3,j2) - ni_s(i,ik)*fz
1952 ENDDO
1953#include "lockoff.inc"
1954 ENDIF
1955 ELSE
1956 IF(iparit == 0)THEN
1957#include "lockon.inc"
1958 DO ik=1,8
1959 j1 = iii(i,ik)
1960 a(1,j1) = a(1,j1) + ni_m(i,ik)*fx
1961 a(2,j1) = a(2,j1) + ni_m(i,ik)*fy
1962 a(3,j1) = a(3,j1) + ni_m(i,ik)*fz
1963 stifn(j1) = stifn(j1) + abs(ni_m(i,ik)*stif)
1964
1965 j2 = iiis(i,ik)
1966 afi17(nint)%P(1,j2,ies) =
afi17(nint)%P(1,j2,ies)
1967 - - ni_s(i,ik)*fx
1968 afi17(nint)%P(2,j2,ies) =
afi17(nint)%P(2,j2,ies)
1969 - - ni_s(i,ik)*fy
1970 afi17(nint)%P(3,j2,ies) =
afi17(nint)%P(3,j2,ies)
1971 - - ni_s(i,ik)*fz
1973 + + abs(ni_s(i,ik)*stif)
1974 ENDDO
1975#include "lockoff.inc"
1976 ELSE
1977#include "lockon.inc"
1978 niskyl = nisky
1979 nisky = nisky + 8
1980 niskyfi=niskyfi+1
1981 niskyfil=niskyfi
1982#include "lockoff.inc"
1983 iskyfi(nint)%P(niskyfil) = ies
1984
1985 IF (niskyl > lskyi) THEN
1986 CALL ancmsg(msgid=26,anmode=aninfo,
1987 . i1=noint)
1989 ENDIF
1990 IF (niskyfil >
nlskyfi(nint))
THEN
1991 CALL ancmsg(msgid=26,anmode=aninfo,
1992 . i1=noint)
1994 ENDIF
1995
1996 DO ik=1,8
1997 niskyl = niskyl + 1
1998 fskyi(niskyl,1)=ni_m(i,ik)*fx
1999 fskyi(niskyl,2)=ni_m(i,ik)*fy
2000 fskyi(niskyl,3)=ni_m(i,ik)*fz
2001 fskyi(niskyl,4)=abs(ni_m(i,ik)*stif)
2002 isky(niskyl) = iii(i,ik)
2003
2004 fskyfi(nint)%P(1+(ik-1)*5,niskyfil)= - ni_s(i,ik)*fx
2005 fskyfi(nint)%P(2+(ik-1)*5,niskyfil)= - ni_s(i,ik)*fy
2006 fskyfi(nint)%P(3+(ik-1)*5,niskyfil)= - ni_s(i,ik)*fz
2007 fskyfi(nint)%P(4+(ik-1)*5,niskyfil)= abs(ni_s(i,ik)*stif)
2008 fskyfi(nint)%P(5+(ik-1)*5,niskyfil)= iiis(i,ik)
2009 ENDDO
2010 ENDIF
2011
2012 IF(anim_v(4)+outp_v(4)+h3d_data%N_VECT_CONT >0.AND.
2013 . ((tt>=tanim .AND. tt<=tanim_stop).OR.tt>=toutp.OR.(tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP).OR.
2014 . (manim>=4.AND.manim<=15).OR. h3d_data%MH3D /= 0))THEN
2015#include "lockon.inc"
2016 DO ik=1,8
2017 j1 = iii(i,ik)
2018 fcont(1,j1) =fcont(1,j1) + ni_m(i,ik)*fx
2019 fcont(2,j1) =fcont(2,j1) + ni_m(i,ik)*fy
2020 fcont(3,j1) =fcont(3,j1) + ni_m(i,ik)*fz
2021 ENDDO
2022#include "lockoff.inc"
2023 ENDIF
2024 END IF
2025 ENDIF
2026 ENDDO
2027
2028
2029
2030
2031#include "lockon.inc"
2032 fsav(1) = fsav(1) + fsav1*dt12
2033 fsav(2) = fsav(2) + fsav2*dt12
2034 fsav(3) = fsav(3) + fsav3*dt12
2035 fsav(4) = fsav(4) + fsav4*dt12
2036 fsav(5) = fsav(5) + fsav5*dt12
2037 fsav(6) = fsav(6) + fsav6*dt12
2038 econtv = econtv + dt1*econvt
2039 econt = econt + dt1*econtt
2040#include "lockoff.inc"
2041
2042 RETURN
subroutine area(d1, x, x2, y, y2, eint, stif0)
type(real_pointer2), dimension(:), allocatable stnfi17
type(real_pointer3), dimension(:), allocatable afi17
type(real_pointer2), dimension(:), allocatable frotsfi
type(real_pointer3), dimension(:), allocatable vfi17
type(real_pointer2), dimension(:), allocatable ksfi
type(real_pointer2), dimension(:), allocatable fskyfi
type(int_pointer), dimension(:), allocatable iskyfi
integer, dimension(:), allocatable nlskyfi