1514
1515
1516
1521 USE output_mod
1522
1523
1524
1525#include "implicit_f.inc"
1526#include "comlock.inc"
1527
1528
1529
1530#include "mvsiz_p.inc"
1531
1532
1533
1534#include "scr07_c.inc"
1535#include "scr11_c.inc"
1536#include "scr14_c.inc"
1537#include "scr16_c.inc"
1538#include "com06_c.inc"
1539#include "com08_c.inc"
1540#include "parit_c.inc"
1541
1542
1543
1544 TYPE(OUTPUT_), INTENT(INOUT) :: OUTPUT
1545 INTEGER LLT,ITIED,,NISKYFI,NOINT
1546 INTEGER III(MVSIZ,17),IIIS(,16),ICONT(MVSIZ), ISKY(*),
1547 . LE(*) ,LES(*)
1548
1550 . v(3,*),a(3,*),vit(*), ms(*)
1552 . rm(mvsiz) ,rs(mvsiz) ,tm(mvsiz) ,ts(mvsiz) ,
1553 . xx(mvsiz,17),yy(mvsiz,17),zz(mvsiz,17),s_cm(mvsiz),
1554 . s_cs(mvsiz), fsav(*),fcont(3,*),
1555 . ni_m(mvsiz,*) ,ni_s(mvsiz,*),nx(mvsiz) ,ny(mvsiz) ,nz(mvsiz),
1556 . stifn(*),fskyi(lskyi,nfskyi),frotm(7,*),frots(7,*),
1557 .
area(mvsiz),area_tot(mvsiz),area_el(mvsiz),km(2,*),ks(2,*),
1558 . fric(*)
1559 TYPE(H3D_DATABASE) :: H3D_DATA
1560
1561
1562
1563 INTEGER I,J,IK,NK,I1,I2,I3,I4,IAD,NN,LEM,J1,J2,NISKYL,IES,IIS,
1564 . NISKYFIL
1566 . vx,vy,vz,vn,aa,surf,ep2,xe,ye,ze,xa,ya,za,xb,yb,zb,xc,yc,zc,
1567 . f,stif,pene,sigtmx,sigtmy,sigtmz,sigtsx,sigtsy,sigtsz,bb,
1568 . fx,fy,fz,ffx,ffy,ffz,ff,ff2,muf2,htsqrtpi,mas4,ep,vis,
1569 . rhom,rhos,stifv,dt1inv,ffvx,ffvy,ffvz,fftx,ffty,fftz,muf,
1570 . fsav1,fsav2,fsav3,fsav4,fsav5,fsav6,econvt,econtt,beta,
1571 . ks1,ks2
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
1597
1598
1599
1600
1601
1602
1603
1604 htsqrtpi = eight / (three*sqrt(pi))
1605
1606 IF(dt1>zero)THEN
1607 dt1inv = one/dt1
1608 ELSE
1609 dt1inv =zero
1610 ENDIF
1611
1612
1613 fsav1 = zero
1614 fsav2 = zero
1615 fsav3 = zero
1616 fsav4 = zero
1617 fsav5 = zero
1618 fsav6 = zero
1619 econvt = zero
1620 econtt = zero
1621 DO i=1,llt
1622 lem = le(i)
1623 IF(icont(i)/=0 )THEN
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
1693
1694
1695
1696
1697
1698
1699
1700 xe = zero
1701 ye = zero
1702 ze = zero
1703 DO ik=1,4
1704 xe = xe + xx(i,ik) *ni_m(i,ik)
1705 + + xx(i,ik+8) *ni_m(i,ik+4)
1706 + - xx(i,ik+4) *ni_m(i,ik)
1707 + - xx(i,ik+12)*ni_m(i,ik+4)
1708 ye = ye + yy(i,ik) *ni_m(i,ik)
1709 + + yy(i,ik+8) *ni_m(i,ik+4)
1710 + - yy(i,ik+4) *ni_m(i,ik)
1711 + - yy(i,ik+12)*ni_m(i,ik+4)
1712 ze = ze + zz(i,ik) *ni_m(i,ik)
1713 + + zz(i,ik+8) *ni_m(i,ik+4)
1714 + - zz(i,ik+4) *ni_m(i,ik)
1715 + - zz(i,ik+12)*ni_m(i,ik+4)
1716 ENDDO
1717 ep = abs(xe*nx(i) + ye*ny(i) + ze*nz(i))
1718 pene = half*(one-abs(s_cm(i))) * ep
1719 if(pene<zero)then
1720 stop 111
1721 endif
1722
1723
1724
1725 vx = zero
1726 vy = zero
1727 vz = zero
1728 IF(les(i)>0)THEN
1729 DO ik=1,8
1730 vx = vx + (v(1,iiis(i,ik)))*ni_s(i,ik)
1731 . - (v(1,iii(i,ik))) *ni_m(i,ik)
1732 vy = vy + (v(2,iiis(i,ik)))*ni_s(i,ik)
1733 . - (v(2,iii(i,ik))) *ni_m(i,ik)
1734 vz = vz + (v(3,iiis(i,ik)))*ni_s(i,ik)
1735 . - (v(3,iii(i,ik))) *ni_m(i,ik)
1736 ENDDO
1737 ks1 = ks(1,les(i))
1738 ks2 = ks(2,les(i))
1739
1740 sigtmx = frotm(5,lem)
1741 sigtmy = frotm(6,lem)
1742 sigtmz = frotm(7,lem)
1743 sigtsx = frots(5,les(i))
1744 sigtsy = frots(6,les(i))
1745 sigtsz = frots(7,les(i))
1746 ELSE
1747 ies = abs(les(i))
1748 DO ik=1,8
1749 iis = iiis(i,ik)
1750 vx = vx +
vfi17(nint)%P(1,iis,ies)*ni_s(i,ik)
1751 . - v(1,iii(i,ik)) *ni_m(i,ik)
1752 vy = vy +
vfi17(nint)%P(2,iis,ies)*ni_s(i,ik)
1753 . - v(2,iii(i,ik)) *ni_m(i,ik)
1754 vz = vz +
vfi17(nint)%P(3,iis,ies)*ni_s(i,ik)
1755 . - v(3,iii(i,ik)) *ni_m(i,ik)
1756 ENDDO
1757 ks1 =
ksfi(nint)%P(1,ies)
1758 ks2 =
ksfi(nint)%P(2,ies)
1759
1760 sigtmx = frotm(5,lem)
1761 sigtmy = frotm(6,lem)
1762 sigtmz = frotm(7,lem)
1763 sigtsx =
frotsfi(nint)%P(5,ies)
1764 sigtsy =
frotsfi(nint)%P(6,ies)
1765 sigtsz =
frotsfi(nint)%P(7,ies)
1766 END IF
1767 vn = nx(i)*vx + ny(i)*vy + nz(i)*vz
1768
1769
1770
1771
1772
1773 stif = htsqrtpi*
area(i) /
1774 . ((km(1,lem)+ks1)*sqrt(area_tot(i)))
1775 f = stif*pene
1776
1777
1778
1779 rhom = km(2,lem)
1780 rhos = ks2
1781 mas4 = (rhom+rhos) *
area(i) *
min(ep,sqrt(
area(i)))
1782 beta=0.5
1783 vis = beta*sqrt(stif*mas4)
1784 f = f + vis * vn
1785 stifv = vis*dt1inv
1786
1787
1788
1789 fx = nx(i) * f
1790 fy = ny(i) * f
1791 fz = nz(i) * f
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1804 bb = stif*dt1
1805 ffx = aa*(sigtmx+sigtsx)+bb*vx
1806 ffy = aa*(sigtmy+sigtsy)+bb*vy
1807 ffz = aa*(sigtmz+sigtsz)+bb*vz
1808 ffvx = vis*vx
1809 ffvy = vis*vy
1810 ffvz = vis*vz
1811
1812
1813
1814 ff = nx(i)*ffx + ny(i)*ffy + nz(i)*ffz
1815 ffx = ffx - ff*nx(i)
1816 ffy = ffy - ff*ny(i)
1817 ffz = ffz - ff*nz(i)
1818 ff = nx(i)*ffvx + ny(i)*ffvy + nz(i)*ffvz
1819 ffvx = ffvx - ff*nx(i)
1820 ffvy = ffvy - ff*ny(i)
1821 ffvz = ffvz - ff*nz(i)
1822 fftx = ffx + ffvx
1823 ffty = ffy + ffvy
1824 fftz = ffz + ffvz
1825
1826
1827
1828 ff2 = fftx*fftx
1829 . + ffty*ffty
1830 . + fftz*fftz
1831 muf = fric(1)*
max(zero,f)
1832 muf2 = muf*muf
1833 IF(ff2 > muf2)THEN
1834
1835
1836 aa = muf/sqrt(ff2)
1837 fftx = fftx*aa
1838 ffty = ffty*aa
1839 fftz = fftz*aa
1840 ff2 = ffx*ffx + ffy*ffy + ffz*ffz
1841 IF(ff2 > muf2)THEN
1842 aa = muf / sqrt(ff2)
1843 ffx = ffx*aa
1844 ffy = ffy*aa
1845 ffz = ffz*aa
1846 ENDIF
1847 ENDIF
1848
1849#include "lockon.inc"
1850 frotm(1,lem) = frotm(1,lem) + ffx
1851 frotm(2,lem) = frotm(2,lem) + ffy
1852 frotm(3,lem) = frotm(3,lem) + ffz
1853 frotm(4,lem) = frotm(4,lem) +
area(i)
1854 IF(les(i)>0)THEN
1855 IF(iparit == 0)THEN
1856 frots(1,les(i)) = frots(1,les(i)) + ffx
1857 frots(2,les(i)) = frots(2,les(i)) + ffy
1858 frots(3,les(i)) = frots(3,les(i)) + ffz
1859 frots(4,les(i)) = frots(4,les(i)) +
area(i)
1860 ELSE
1867 END IF
1868 ELSE
1869 IF(iparit == 0)THEN
1874 ELSE
1881 END IF
1882 END IF
1883#include "lockoff.inc"
1884
1885
1886
1887 fsav1 =fsav1 + fx
1888 fsav2 =fsav2 + fy
1889 fsav3 =fsav3 + fz
1890 fsav4 =fsav4 + fftx
1891 fsav5 =fsav5 + ffty
1892 fsav6 =fsav6 + fftz
1893
1894
1895
1896 fx = fx + fftx
1897 fy = fy + ffty
1898 fz = fz + fftz
1899 stif = stif + stifv
1900 econt = econt
1901 . + vx*fx+vy*fy+vz*fz
1902
1903 IF(les(i)>0)THEN
1904 IF(iparit == 0)THEN
1905#include "lockon.inc"
1906 DO ik=1,8
1907 j1 = iii(i,ik)
1908 a(1,j1) = a(1,j1) + ni_m(i,ik)*fx
1909 a(2,j1) = a(2,j1) + ni_m(i,ik)*fy
1910 a(3,j1) = a(3,j1) + ni_m(i,ik)*fz
1911 stifn(j1) = stifn(j1) + abs(ni_m(i,ik)*stif)
1912
1913 j2 = iiis(i,ik)
1914 a(1,j2) = a(1,j2) - ni_s(i,ik)*fx
1915 a(2,j2) = a(2,j2) - ni_s(i,ik)*fy
1916 a(3,j2) = a(3,j2) - ni_s(i,ik)*fz
1917 stifn(j2) = stifn(j2) + abs(ni_s(i,ik)*stif)
1918 ENDDO
1919#include "lockoff.inc"
1920 ELSE
1921#include "lockon.inc"
1922 niskyl = nisky
1923 nisky = nisky + 16
1924#include "lockoff.inc"
1925 IF (niskyl > lskyi) THEN
1926 CALL ancmsg(msgid=26,anmode=aninfo,
1927 . i1=noint)
1929 ENDIF
1930 DO ik=1,8
1931 niskyl = niskyl + 1
1932 fskyi(niskyl,1)=ni_m(i,ik)*fx
1933 fskyi(niskyl,2)=ni_m(i,ik)*fy
1934 fskyi(niskyl,3)=ni_m(i,ik)*fz
1935 fskyi(niskyl,4)=abs(ni_m(i,ik)*stif)
1936 isky(niskyl) = iii(i,ik)
1937 niskyl = niskyl + 1
1938 fskyi(niskyl,1)= - ni_s(i,ik)*fx
1939 fskyi(niskyl,2)= - ni_s(i,ik)*fy
1940 fskyi(niskyl,3)= - ni_s(i,ik)*fz
1941 fskyi(niskyl,4)= abs(ni_s(i,ik)*stif)
1942 isky(niskyl) = iiis(i,ik)
1943 ENDDO
1944 ENDIF
1945
1946 IF(anim_v(4)+outp_v(4)+h3d_data%N_VECT_CONT >0.AND.
1947 . ((tt>=output%TANIM .AND. tt<=output%TANIM_STOP).OR.tt>=toutp.OR.(tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP
1948 . (manim>=4.AND.manim<=15).OR. h3d_data%MH3D /= 0))THEN
1949#include "lockon.inc"
1950 DO ik=1,8
1951 j1 = iii(i,ik)
1952 fcont(1,j1) =fcont(1,j1) + ni_m(i,ik)*fx
1953 fcont(2,j1) =fcont(2,j1) + ni_m(i,ik)*fy
1954 fcont(3,j1) =fcont(3,j1) + ni_m(i,ik)*fz
1955
1956 j2 = iiis(i,ik)
1957 fcont(1,j2) =fcont(1,j2) - ni_s(i,ik)*fx
1958 fcont(2,j2) =fcont(2,j2) - ni_s(i,ik)*fy
1959 fcont(3,j2) =fcont(3,j2) - ni_s(i,ik)*fz
1960 ENDDO
1961#include "lockoff.inc"
1962 ENDIF
1963 ELSE
1964 IF(iparit == 0)THEN
1965#include "lockon.inc"
1966 DO ik=1,8
1967 j1 = iii(i,ik)
1968 a(1,j1) = a(1,j1) + ni_m(i,ik)*fx
1969 a(2,j1) = a(2,j1) + ni_m(i,ik)*fy
1970 a(3,j1) = a(3,j1) + ni_m(i,ik)*fz
1971 stifn(j1) = stifn(j1) + abs(ni_m(i,ik)*stif)
1972
1973 j2 = iiis(i,ik)
1974 afi17(nint)%P(1,j2,ies) =
afi17(nint)%P(1,j2,ies)
1975 - - ni_s(i,ik)*fx
1976 afi17(nint)%P(2,j2,ies) =
afi17(nint)%P(2,j2,ies)
1977 - - ni_s(i,ik)*fy
1978 afi17(nint)%P(3,j2,ies) =
afi17(nint)%P(3,j2,ies)
1979 - - ni_s(i,ik)*fz
1981 + + abs(ni_s(i,ik)*stif)
1982 ENDDO
1983#include "lockoff.inc"
1984 ELSE
1985#include "lockon.inc"
1986 niskyl = nisky
1987 nisky = nisky + 8
1988 niskyfi=niskyfi+1
1989 niskyfil=niskyfi
1990#include "lockoff.inc"
1991 iskyfi(nint)%P(niskyfil) = ies
1992
1993 IF (niskyl > lskyi) THEN
1994 CALL ancmsg(msgid=26,anmode=aninfo,
1995 . i1=noint)
1997 ENDIF
1998 IF (niskyfil >
nlskyfi(nint))
THEN
1999 CALL ancmsg(msgid=26,anmode=aninfo,
2000 . i1=noint)
2002 ENDIF
2003
2004 DO ik=1,8
2005 niskyl = niskyl + 1
2006 fskyi(niskyl,1)=ni_m(i,ik)*fx
2007 fskyi(niskyl,2)=ni_m(i,ik)*fy
2008 fskyi(niskyl,3)=ni_m(i,ik)*fz
2009 fskyi(niskyl,4)=abs(ni_m(i,ik)*stif)
2010 isky(niskyl) = iii(i,ik)
2011
2012 fskyfi(nint)%P(1+(ik-1)*5,niskyfil)= - ni_s(i,ik)*fx
2013 fskyfi(nint)%P(2+(ik-1)*5,niskyfil)= - ni_s(i,ik)*fy
2014 fskyfi(nint)%P(3+(ik-1)*5,niskyfil)= - ni_s(i,ik)*fz
2015 fskyfi(nint)%P(4+(ik-1)*5,niskyfil)= abs(ni_s(i,ik)*stif)
2016 fskyfi(nint)%P(5+(ik-1)*5,niskyfil)= iiis(i,ik)
2017 ENDDO
2018 ENDIF
2019
2020 IF(anim_v(4)+outp_v(4)+h3d_data%N_VECT_CONT >0.AND.
2021 . ((tt>=output%TANIM .AND. tt<=output%TANIM_STOP).OR.tt>=toutp.OR.(tt>=h3d_data%TH3D.AND.tt<=h3d_data%TH3D_STOP
2022 . (manim>=4.AND.manim<=15).OR. h3d_data%MH3D /= 0))THEN
2023#include "lockon.inc"
2024 DO ik=1,8
2025 j1 = iii(i,ik)
2026 fcont(1,j1) =fcont(1,j1) + ni_m(i,ik)*fx
2027 fcont(2,j1) =fcont(2,j1) + ni_m(i,ik)*fy
2028 fcont(3,j1) =fcont(3,j1) + ni_m(i,ik)*fz
2029 ENDDO
2030#include "lockoff.inc"
2031 ENDIF
2032 END IF
2033 ENDIF
2034 ENDDO
2035
2036
2037
2038
2039#include "lockon.inc"
2040 fsav(1) = fsav(1) + fsav1*dt12
2041 fsav(2) = fsav(2) + fsav2*dt12
2042 fsav(3) = fsav(3) + fsav3*dt12
2043 fsav(4) = fsav(4) + fsav4*dt12
2044 fsav(5) = fsav(5) + fsav5*dt12
2045 fsav(6) = fsav(6) + fsav6*dt12
2046 econtv = econtv + dt1*econvt
2047 econt = econt + dt1*econtt
2048#include "lockoff.inc"
2049
2050 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