Changeset 25597


Ignore:
Timestamp:
09/27/20 13:12:43 (5 years ago)
Author:
Mathieu Morlighem
Message:

CHG: trying to simplify GetGrounded ratio

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r25576 r25597  
    16701670        int               domaintype,index1,index2;
    16711671        const IssmPDouble epsilon        = 1.e-15;
    1672         IssmDouble        phi,s1,s2,area_init,area_grounded;
     1672        IssmDouble        phi,s1,s2;
    16731673        IssmDouble        gl[NUMVERTICES];
    16741674        IssmDouble        xyz_bis[3][3];
     
    17081708
    17091709                        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*/
    17161710                                s1=gl[2]/(gl[2]-gl[1]);
    17171711                                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]);
    17281712                        }
    17291713                        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*/
    17361714                                s1=gl[0]/(gl[0]-gl[1]);
    17371715                                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]);
    17481716                        }
    17491717                        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*/
    17561718                                s1=gl[1]/(gl[1]-gl[0]);
    17571719                                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]);
    17681720                        }
    17691721                        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);
    17751724                        }
    17761725                        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                        }
    17821728                }
    17831729        }
    17841730        else _error_("mesh type "<<EnumToStringx(domaintype)<<"not supported yet ");
    17851731
    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.);
    17881733        return phi;
    17891734}
Note: See TracChangeset for help on using the changeset viewer.