Changeset 25597
- Timestamp:
- 09/27/20 13:12:43 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tria.cpp ¶
r25576 r25597 1670 1670 int domaintype,index1,index2; 1671 1671 const IssmPDouble epsilon = 1.e-15; 1672 IssmDouble phi,s1,s2 ,area_init,area_grounded;1672 IssmDouble phi,s1,s2; 1673 1673 IssmDouble gl[NUMVERTICES]; 1674 1674 IssmDouble xyz_bis[3][3]; … … 1708 1708 1709 1709 if(gl[0]*gl[1]>0){ //Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2 1710 /*Coordinates of point 2: same as initial point 2*/1711 xyz_bis[2][0]=xyz_list[3*2+0];1712 xyz_bis[2][1]=xyz_list[3*2+1];1713 xyz_bis[2][2]=xyz_list[3*2+2];1714 1715 /*Portion of the segments*/1716 1710 s1=gl[2]/(gl[2]-gl[1]); 1717 1711 s2=gl[2]/(gl[2]-gl[0]); 1718 1719 /*New point 1*/1720 xyz_bis[1][0]=xyz_list[3*2+0]+s1*(xyz_list[3*1+0]-xyz_list[3*2+0]);1721 xyz_bis[1][1]=xyz_list[3*2+1]+s1*(xyz_list[3*1+1]-xyz_list[3*2+1]);1722 xyz_bis[1][2]=xyz_list[3*2+2]+s1*(xyz_list[3*1+2]-xyz_list[3*2+2]);1723 1724 /*New point 0*/1725 xyz_bis[0][0]=xyz_list[3*2+0]+s2*(xyz_list[3*0+0]-xyz_list[3*2+0]);1726 xyz_bis[0][1]=xyz_list[3*2+1]+s2*(xyz_list[3*0+1]-xyz_list[3*2+1]);1727 xyz_bis[0][2]=xyz_list[3*2+2]+s2*(xyz_list[3*0+2]-xyz_list[3*2+2]);1728 1712 } 1729 1713 else if(gl[1]*gl[2]>0){ //Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2 1730 /*Coordinates of point 0: same as initial point 2*/1731 xyz_bis[0][0]=xyz_list[3*0+0];1732 xyz_bis[0][1]=xyz_list[3*0+1];1733 xyz_bis[0][2]=xyz_list[3*0+2];1734 1735 /*Portion of the segments*/1736 1714 s1=gl[0]/(gl[0]-gl[1]); 1737 1715 s2=gl[0]/(gl[0]-gl[2]); 1738 1739 /*New point 1*/1740 xyz_bis[1][0]=xyz_list[3*0+0]+s1*(xyz_list[3*1+0]-xyz_list[3*0+0]);1741 xyz_bis[1][1]=xyz_list[3*0+1]+s1*(xyz_list[3*1+1]-xyz_list[3*0+1]);1742 xyz_bis[1][2]=xyz_list[3*0+2]+s1*(xyz_list[3*1+2]-xyz_list[3*0+2]);1743 1744 /*New point 2*/1745 xyz_bis[2][0]=xyz_list[3*0+0]+s2*(xyz_list[3*2+0]-xyz_list[3*0+0]);1746 xyz_bis[2][1]=xyz_list[3*0+1]+s2*(xyz_list[3*2+1]-xyz_list[3*0+1]);1747 xyz_bis[2][2]=xyz_list[3*0+2]+s2*(xyz_list[3*2+2]-xyz_list[3*0+2]);1748 1716 } 1749 1717 else if(gl[0]*gl[2]>0){ //Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2 1750 /*Coordinates of point 1: same as initial point 2*/1751 xyz_bis[1][0]=xyz_list[3*1+0];1752 xyz_bis[1][1]=xyz_list[3*1+1];1753 xyz_bis[1][2]=xyz_list[3*1+2];1754 1755 /*Portion of the segments*/1756 1718 s1=gl[1]/(gl[1]-gl[0]); 1757 1719 s2=gl[1]/(gl[1]-gl[2]); 1758 1759 /*New point 0*/1760 xyz_bis[0][0]=xyz_list[3*1+0]+s1*(xyz_list[3*0+0]-xyz_list[3*1+0]);1761 xyz_bis[0][1]=xyz_list[3*1+1]+s1*(xyz_list[3*0+1]-xyz_list[3*1+1]);1762 xyz_bis[0][2]=xyz_list[3*1+2]+s1*(xyz_list[3*0+2]-xyz_list[3*1+2]);1763 1764 /*New point 2*/1765 xyz_bis[2][0]=xyz_list[3*1+0]+s2*(xyz_list[3*2+0]-xyz_list[3*1+0]);1766 xyz_bis[2][1]=xyz_list[3*1+1]+s2*(xyz_list[3*2+1]-xyz_list[3*1+1]);1767 xyz_bis[2][2]=xyz_list[3*1+2]+s2*(xyz_list[3*2+2]-xyz_list[3*1+2]);1768 1720 } 1769 1721 else _error_("Tria::GetGroundedPortion: levelset case not allowed for element #" << this->Sid()+1 << ":" << gl[0] << "|" << gl[1] << "|" << gl[2]); 1770 1771 /*Compute fraction of grounded element*/ 1772 if(domaintype==Domain3DsurfaceEnum){ //hack, need to be implemented in a Tria 3D 1773 GetJacobianDeterminant3D(&area_init, xyz_list,NULL); 1774 GetJacobianDeterminant3D(&area_grounded, &xyz_bis[0][0],NULL); 1722 if(mainlyfloating){ 1723 phi = (1-s1*s2); 1775 1724 } 1776 1725 else{ 1777 GetJacobianDeterminant(&area_init, xyz_list,NULL); 1778 GetJacobianDeterminant(&area_grounded, &xyz_bis[0][0],NULL); 1779 } 1780 if(mainlyfloating==true) area_grounded=area_init-area_grounded; 1781 phi=area_grounded/area_init; 1726 phi = s1*s2; 1727 } 1782 1728 } 1783 1729 } 1784 1730 else _error_("mesh type "<<EnumToStringx(domaintype)<<"not supported yet "); 1785 1731 1786 if(phi>1 || phi<0) _error_("Error. Problem with portion of grounded element: value should be between 0 and 1"); 1787 1732 _assert_(phi<=1. && phi>=0.); 1788 1733 return phi; 1789 1734 }
Note:
See TracChangeset
for help on using the changeset viewer.