Changeset 26705 for issm/trunk-jpl/src/jl/solve/elements.jl
- Timestamp:
- 12/03/21 11:18:50 (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/jl/solve/elements.jl
r26681 r26705 89 89 90 90 end # }}} 91 function GetInputListOnVertices!(element::Tria, vector::Vector{Float64}, enum::IssmEnum) # {{{ 92 93 #Get Input first 94 input = GetInput(element, enum) 95 96 #Get value at each vertex (i.e. P1 Nodes) 97 gauss=GaussTria(P1Enum) 98 for i in 1:gauss.numgauss 99 vector[i] = GetInputValue(input, gauss, i) 100 end 101 102 end # }}} 91 103 function FindParam(element::Tria,enum::IssmEnum) # {{{ 92 104 … … 107 119 108 120 end # }}} 121 function GetGroundedPortion(element::Tria, xyz_list::Matrix{Float64}) #{{{ 122 123 level = Vector{Float64}(undef,3) 124 GetInputListOnVertices!(element, level, MaskOceanLevelsetEnum) 125 126 #Be sure that values are not zero 127 epsilon = 1.e-15 128 for i in 1:3 129 if(level[i]==0.) level[i]=level[i]+epsilon end 130 end 131 132 if level[1]>0 && level[2]>0 && level[3]>0 133 #Completely grounded 134 phi = 1.0 135 elseif level[1]<0 && level[2]<0 && level[3]<0 136 #Completely floating 137 phi = 0.0 138 else 139 #Partially floating, 140 if(level[1]*level[2]>0) #Nodes 0 and 1 are similar, so points must be found on segment 0-2 and 1-2 141 s1=level[3]/(level[3]-level[2]); 142 s2=level[3]/(level[3]-level[1]); 143 elseif(level[2]*level[3]>0) #Nodes 1 and 2 are similar, so points must be found on segment 0-1 and 0-2 144 s1=level[1]/(level[1]-level[2]); 145 s2=level[1]/(level[1]-level[3]); 146 elseif(level[1]*level[3]>0) #Nodes 0 and 2 are similar, so points must be found on segment 1-0 and 1-2 147 s1=level[2]/(level[2]-level[1]); 148 s2=level[2]/(level[2]-level[3]); 149 else 150 error("not supposed to be here...") 151 end 152 153 if(level[1]*level[2]*level[3]>0) 154 phi = s1*s2 155 else 156 phi = (1-s1*s2) 157 end 158 end 159 160 return phi 161 end#}}} 109 162 110 163 #Finite Element stuff
Note:
See TracChangeset
for help on using the changeset viewer.