diff options
Diffstat (limited to 'extern/mantaflow/helper/util/solvana.h')
-rw-r--r-- | extern/mantaflow/helper/util/solvana.h | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/extern/mantaflow/helper/util/solvana.h b/extern/mantaflow/helper/util/solvana.h new file mode 100644 index 00000000000..9dc1ec83654 --- /dev/null +++ b/extern/mantaflow/helper/util/solvana.h @@ -0,0 +1,214 @@ +/****************************************************************************** + * + * MantaFlow fluid solver framework + * Copyright 2011 Tobias Pfaff, Nils Thuerey + * + * This program is free software, distributed under the terms of the + * Apache License, Version 2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Analytical solutions to some problems + * generated using MATLAB symbolic math ccode + * + ******************************************************************************/ + +#ifndef _SOLVANA_H +#define _SOLVANA_H + +//! solves the equation [e1 e2 e3; 1 1 1]*x = g using least squares +inline void SolveOverconstraint34(float e1x, + float e1y, + float e1z, + float e2x, + float e2y, + float e2z, + float e3x, + float e3y, + float e3z, + float g1, + float g2, + float g3, + float &x1, + float &x2, + float &x3) +{ + float e1x2 = e1x * e1x, e1y2 = e1y * e1y, e1z2 = e1z * e1z; + float e2x2 = e2x * e2x, e2y2 = e2y * e2y, e2z2 = e2z * e2z; + float e3x2 = e3x * e3x, e3y2 = e3y * e3y, e3z2 = e3z * e3z; + float e1xy = e1x * e1y, e1xz = e1x * e1z, e1yz = e1y * e1z; + float e2xy = e2x * e2y, e2xz = e2x * e2z, e2yz = e2y * e2z; + float e3xy = e3x * e3y, e3xz = e3x * e3z, e3yz = e3y * e3z; + float e12x = e1x * e2x, e12y = e1y * e2y, e12z = e1z * e2z; + float e13x = e1x * e3x, e13y = e1y * e3y, e13z = e1z * e3z; + float e23x = e2x * e3x, e23y = e2y * e3y, e23z = e2z * e3z; + float t1543 = e3y2 * e2x2; + float t1544 = e3x2 * e2y2; + float t1545 = e3z2 * e2x2; + float t1546 = e3x2 * e2z2; + float t1547 = e3z2 * e2y2; + float t1548 = e3y2 * e2z2; + float t1549 = e2y2 * e1x2; + float t1550 = e2x2 * e1y2; + float t1551 = e2z2 * e1x2; + float t1552 = e2x2 * e1z2; + float t1553 = e2z2 * e1y2; + float t1554 = e2y2 * e1z2; + float t1555 = e3y2 * e1x2; + float t1556 = e3x2 * e1y2; + float t1557 = e3z2 * e1x2; + float t1558 = e3x2 * e1z2; + float t1559 = e3z2 * e1y2; + float t1560 = e3y2 * e1z2; + float t1561 = e3z2 * e2y2 * e1x2; + float t1562 = e3y2 * e2z2 * e1x2; + float t1563 = e3z2 * e2x2 * e1y2; + float t1564 = e3x2 * e2z2 * e1y2; + float t1565 = e3y2 * e2x2 * e1z2; + float t1566 = e3x2 * e2y2 * e1z2; + float t1567 = e1xy * e2x * e3y * 2.0; + float t1568 = e1xy * e2y * e3x * 2.0; + float t1569 = e1xz * e2x * e3z * 2.0; + float t1570 = e1xz * e2z * e3x * 2.0; + float t1571 = e1yz * e2y * e3z * 2.0; + float t1572 = e1yz * e2z * e3y * 2.0; + float t1573 = e1x * e2xy * e3y * 2.0; + float t1574 = e1y * e2xy * e3x * 2.0; + float t1575 = e1x * e2xz * e3z * 2.0; + float t1576 = e1z * e2xz * e3x * 2.0; + float t1577 = e1y * e2yz * e3z * 2.0; + float t1578 = e1z * e2yz * e3y * 2.0; + float t1579 = e1x * e2y * e3xy * 2.0; + float t1580 = e1y * e2x * e3xy * 2.0; + float t1581 = e1x * e2z * e3xz * 2.0; + float t1582 = e1z * e2x * e3xz * 2.0; + float t1583 = e1y * e2z * e3yz * 2.0; + float t1584 = e1z * e2y * e3yz * 2.0; + float t1585 = e1xy * e2xz * e3yz * 2.0; + float t1586 = e1xy * e2yz * e3xz * 2.0; + float t1587 = e1xz * e2xy * e3yz * 2.0; + float t1588 = e1xz * e2yz * e3xy * 2.0; + float t1589 = e1yz * e2xy * e3xz * 2.0; + float t1590 = e1yz * e2xz * e3xy * 2.0; + float t1596 = e12x * e3y2 * 2.0; + float t1597 = e13x * e2y2 * 2.0; + float t1598 = e23x * e1y2 * 2.0; + float t1599 = e12x * e3z2 * 2.0; + float t1600 = e13x * e2z2 * 2.0; + float t1601 = e12y * e3x2 * 2.0; + float t1602 = e13y * e2x2 * 2.0; + float t1603 = e23y * e1x2 * 2.0; + float t1604 = e23x * e1z2 * 2.0; + float t1605 = e12y * e3z2 * 2.0; + float t1606 = e13y * e2z2 * 2.0; + float t1607 = e12z * e3x2 * 2.0; + float t1608 = e13z * e2x2 * 2.0; + float t1609 = e23z * e1x2 * 2.0; + float t1610 = e23y * e1z2 * 2.0; + float t1611 = e12z * e3y2 * 2.0; + float t1612 = e13z * e2y2 * 2.0; + float t1613 = e23z * e1y2 * 2.0; + float t1614 = e1xy * e2xy * 2.0; + float t1615 = e1xz * e2xz * 2.0; + float t1616 = e1yz * e2yz * 2.0; + float t1617 = e1xy * e3xy * 2.0; + float t1618 = e1xz * e3xz * 2.0; + float t1619 = e1yz * e3yz * 2.0; + float t1620 = e2xy * e3xy * 2.0; + float t1621 = e2xz * e3xz * 2.0; + float t1622 = e2yz * e3yz * 2.0; + float t1623 = e1xy * e2xy * e3z2 * 2.0; + float t1624 = e1xz * e2xz * e3y2 * 2.0; + float t1625 = e1yz * e2yz * e3x2 * 2.0; + float t1626 = e1xy * e3xy * e2z2 * 2.0; + float t1627 = e1xz * e3xz * e2y2 * 2.0; + float t1628 = e1yz * e3yz * e2x2 * 2.0; + float t1629 = e2xy * e3xy * e1z2 * 2.0; + float t1630 = e2xz * e3xz * e1y2 * 2.0; + float t1631 = e2yz * e3yz * e1x2 * 2.0; + float t1591 = t1550 + t1551 + t1560 + t1543 + t1552 + t1561 + t1570 + t1544 + t1553 + t1562 + + t1571 + t1580 + t1545 + t1554 + t1563 + t1572 + t1581 + t1590 + t1546 + t1555 + + t1564 + t1573 + t1582 + t1547 + t1556 + t1565 + t1574 + t1583 + t1548 + t1557 + + t1566 + t1575 + t1584 + t1549 + t1558 + t1567 + t1576 + t1585 + t1559 + t1568 + + t1577 + t1586 + t1569 + t1578 + t1587 - t1596 + t1579 + t1588 - t1597 + t1589 - + t1598 - t1599 - t1600 - t1601 - t1610 - t1602 - t1611 - t1620 - t1603 - t1612 - + t1621 - t1630 - t1604 - t1613 - t1622 - t1631 - t1605 - t1614 - t1623 - t1606 - + t1615 - t1624 - t1607 - t1616 - t1625 - t1608 - t1617 - t1626 - t1609 - t1618 - + t1627 - t1619 - t1628 - t1629; + float t1592 = 1.0 / t1591; + float t1635 = e13x * e2y2; + float t1636 = e13x * e2z2; + float t1637 = e13y * e2x2; + float t1638 = e13y * e2z2; + float t1639 = e13z * e2x2; + float t1640 = e13z * e2y2; + float t1653 = e23x * 2.0; + float t1654 = e23y * 2.0; + float t1655 = e23z * 2.0; + float t1641 = e3x2 + e3z2 + e3y2 + e2y2 + t1543 + e2z2 + t1544 + e2x2 + t1545 + t1546 + t1547 + + t1548 - t1620 - t1621 - t1622 - t1653 - t1654 - t1655; + float t1642 = e12x * e3y2; + float t1643 = e12x * e3z2; + float t1644 = e12y * e3x2; + float t1645 = e12y * e3z2; + float t1646 = e12z * e3x2; + float t1647 = e12z * e3y2; + float t1656 = e1x * e2y * e3xy; + float t1657 = e1y * e2x * e3xy; + float t1658 = e1x * e2z * e3xz; + float t1659 = e1z * e2x * e3xz; + float t1660 = e1y * e2z * e3yz; + float t1661 = e1z * e2y * e3yz; + float t1648 = e3x2 + e3z2 + e3y2 - e13x - e13y - e13z + e12x - e23y + e12y + t1642 - e23z - + t1660 + e12z + t1643 - t1661 + t1644 + t1645 + t1646 + t1647 - t1656 - t1657 - + e23x - t1658 - t1659; + float t1679 = e1x * e2xy * e3y; + float t1680 = e1y * e2xy * e3x; + float t1681 = e1x * e2xz * e3z; + float t1682 = e1z * e2xz * e3x; + float t1683 = e1y * e2yz * e3z; + float t1684 = e1z * e2yz * e3y; + float t1652 = e2y2 + e2z2 + e2x2 + e13x + e13y + e13z + t1640 - e12x - e23y - e12y - e23z - + e12z + t1635 - t1680 + t1636 - t1681 + t1637 - t1682 + t1638 - t1683 + t1639 - + t1684 - e23x - t1679; + float t1662 = e23x * e1y2; + float t1663 = e23y * e1x2; + float t1664 = e23x * e1z2; + float t1665 = e23z * e1x2; + float t1666 = e23y * e1z2; + float t1667 = e23z * e1y2; + float t1670 = e1xy * e2x * e3y; + float t1671 = e1xy * e2y * e3x; + float t1672 = e1xz * e2x * e3z; + float t1673 = e1xz * e2z * e3x; + float t1674 = e1yz * e2y * e3z; + float t1675 = e1yz * e2z * e3y; + float t1668 = e1x2 + e1y2 + e1z2 - e13x - e13y - e13z - e12x + e23y - e12y + e23z - e12z - + t1670 + t1662 - t1671 + t1663 - t1672 + t1664 - t1673 + t1665 - t1674 + t1666 - + t1675 + e23x + t1667; + float t1676 = e13x * 2.0; + float t1677 = e13y * 2.0; + float t1678 = e13z * 2.0; + float t1669 = e3x2 + e3z2 + e3y2 + t1560 + e1x2 + t1555 + e1y2 + t1556 + e1z2 + t1557 + t1558 + + t1559 - t1617 - t1618 - t1619 - t1676 - t1677 - t1678; + float t1686 = e12x * 2.0; + float t1687 = e12y * 2.0; + float t1688 = e12z * 2.0; + float t1685 = t1550 + t1551 + e2y2 + t1552 + e2z2 + t1553 + e2x2 + t1554 + e1x2 + e1y2 + e1z2 + + t1549 - t1614 - t1615 - t1616 - t1686 - t1687 - t1688; + x1 = -g2 * (-e1y * t1592 * t1641 + e2y * t1592 * t1648 + e3y * t1592 * t1652) - + g3 * (-e1z * t1592 * t1641 + e2z * t1592 * t1648 + e3z * t1592 * t1652) - + g1 * (-e1x * t1592 * t1641 + e2x * t1592 * t1648 + + e3x * t1592 * + (e2y2 + e2z2 + e2x2 + e13x + e13y + e13z + t1640 + t1635 + t1636 + t1637 + t1638 + + t1639 - e12x - e12y - e12z - e23x - e23y - e23z - e1x * e2xy * e3y - + e1y * e2xy * e3x - e1x * e2xz * e3z - e1z * e2xz * e3x - e1y * e2yz * e3z - + e1z * e2yz * e3y)); + x2 = -g1 * (e1x * t1592 * t1648 - e2x * t1592 * t1669 + e3x * t1592 * t1668) - + g2 * (e1y * t1592 * t1648 - e2y * t1592 * t1669 + e3y * t1592 * t1668) - + g3 * (e1z * t1592 * t1648 - e2z * t1592 * t1669 + e3z * t1592 * t1668); + x3 = -g1 * (e1x * t1592 * t1652 + e2x * t1592 * t1668 - e3x * t1592 * t1685) - + g2 * (e1y * t1592 * t1652 + e2y * t1592 * t1668 - e3y * t1592 * t1685) - + g3 * (e1z * t1592 * t1652 + e2z * t1592 * t1668 - e3z * t1592 * t1685); +} + +#endif
\ No newline at end of file |