Changeset 26675
- Timestamp:
- 11/29/21 07:03:55 (3 years ago)
- Location:
- issm/trunk-jpl/src/jl/solve
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/jl/solve/analyses/stressbalanceanalysis.jl
r26659 r26675 81 81 H_input = GetInput(element, ThicknessEnum) 82 82 83 #Prepare material object 84 material = Matice() 85 83 86 #Start integrating 84 87 gauss = GaussTria(2) … … 86 89 87 90 Jdet = JacobianDeterminant(xyz_list, gauss) 91 NodalFunctionsDerivatives(element,dbasis,xyz_list,gauss) 88 92 89 println(Jdet)93 H = GetInputValue(H_input, gauss, i) 90 94 91 95 error("STOP") -
issm/trunk-jpl/src/jl/solve/elements.jl
r26659 r26675 129 129 130 130 J[1,1] = .5*(x2-x1) 131 J[1,2] = sqrt(3)/6*(2*x3 -x1 -x2)132 J[2,1] = .5*(y2-y1)131 J[1,2] = .5*(y2-y1) 132 J[2,1] = sqrt(3)/6*(2*x3 -x1 -x2) 133 133 J[2,2] = sqrt(3)/6*(2*y3 -y1 -y2) 134 134 135 135 return J 136 136 end#}}} 137 function JacobianInvert(xyz_list::Matrix{Float64}, gauss::GaussTria) #{{{ 138 139 #Get Jacobian matrix 140 J = Jacobian(xyz_list) 141 142 #Get its determinant 143 Jinv = Matrix2x2Invert(J) 144 145 return Jinv 146 end#}}} 147 function NodalFunctionsDerivatives(element::Tria,dbasis::Matrix{Float64},xyz_list::Matrix{Float64}, gauss::GaussTria) #{{{ 148 149 #Get nodal function derivatives in reference element 150 dbasis_ref = Matrix{Float64}(undef,3,2) 151 NodalFunctionsDerivativesReference(dbasis_ref,gauss,P1Enum) 152 153 #Get invert of the Jacobian 154 Jinv = JacobianInvert(xyz_list,gauss) 155 156 #Build dbasis: 157 #[ dNi/dx ] = Jinv * [dNhat_i/dr] 158 #[ dNi/dy ] = [dNhat_i/ds] 159 for i in 1:3 160 dbasis[i,1] = Jinv[1,1]*dbasis_ref[i,1]+Jinv[1,2]*dbasis_ref[i,2] 161 dbasis[i,2] = Jinv[2,1]*dbasis_ref[i,1]+Jinv[2,2]*dbasis_ref[i,2] 162 end 163 164 end#}}} 165 function NodalFunctionsDerivativesReference(dbasis::Matrix{Float64}, gauss::GaussTria, finiteelement::IssmEnum) #{{{ 166 167 if(finiteelement==P0Enum) 168 #Nodal function 1 169 dbasis[1,1]= 0. 170 dbasis[1,2]= 0. 171 172 elseif(finiteelement==P1Enum) 173 #Nodal function 1 174 dbasis[1,1]= -.5 175 dbasis[1,2]= -sqrt(3)/6 176 #Nodal function 2 177 dbasis[2,1]= .5 178 dbasis[2,2]= -sqrt(3)/6 179 #Nodal function 3 180 dbasis[3,1]= 0 181 dbasis[3,2]= sqrt(3)/3 182 else 183 error("Element type ",finiteelement," not supported yet") 184 end 185 end#}}} -
issm/trunk-jpl/src/jl/solve/solve.jl
r26659 r26675 8 8 include("./elements.jl") 9 9 include("./constraints.jl") 10 include("./matice.jl") 10 11 include("./femmodel.jl") 11 12 include("./analyses/analysis.jl") -
issm/trunk-jpl/src/jl/solve/utils.jl
r26659 r26675 4 4 5 5 end#}}} 6 function Matrix2x2Invert(A::Matrix{Float64}) #{{{ 7 8 #Initialize output 9 Ainv = Matrix{Float64}(undef,2,2) 10 11 #Compute determinant 12 det = Matrix2x2Determinant(A) 13 if(abs(det)<eps(Float64)) error("Determinant smaller than machine epsilon") end 14 15 #Multiplication is faster than divsion, so we multiply by the reciprocal 16 det_reciprocal = 1/det 17 18 #compute invert matrix 19 Ainv[1,1]= A[2,2]*det_reciprocal # = d/det 20 Ainv[1,2]= - A[1,2]*det_reciprocal # = -b/det 21 Ainv[2,1]= - A[2,1]*det_reciprocal # = -c/det 22 Ainv[2,2]= A[1,1]*det_reciprocal # = a/det 23 24 return Ainv 25 26 end#}}}
Note:
See TracChangeset
for help on using the changeset viewer.