Changeset 26655
- Timestamp:
- 11/23/21 05:55:56 (3 years ago)
- Location:
- issm/trunk-jpl/src/jl/solve
- Files:
-
- 4 added
- 3 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified issm/trunk-jpl/src/jl/solve/analyses/analysis.jl ¶
r26654 r26655 1 1 #Analysis class definitions 2 2 abstract type Analysis end 3 struct StressbalanceAnalysis <: Analysis#{{{4 end #}}}5 6 #Stress balance analysis7 function UpdateParameters(analysis::StressbalanceAnalysis,parameters::Parameters,md::model) #{{{8 AddParam(parameters,md.stressbalance.restol,StressbalanceRestolEnum)9 AddParam(parameters,md.stressbalance.reltol,StressbalanceReltolEnum)10 AddParam(parameters,md.stressbalance.abstol,StressbalanceAbstolEnum)11 AddParam(parameters,md.stressbalance.maxiter,StressbalanceMaxiterEnum)12 end#}}}13 function CreateNodes(analysis::StressbalanceAnalysis,nodes::Vector{Node},md::model) #{{{14 15 numdof = 216 for i in 1:md.mesh.numberofvertices17 push!(nodes,Node(i,i,true,numdof,-ones(Int64,numdof), ones(Int64,numdof), -ones(Int64,numdof), zeros(numdof)))18 end19 end#}}}20 function UpdateElements(analysis::StressbalanceAnalysis,elements::Vector{Tria}, inputs::Inputs, md::model) #{{{21 22 #Provide node indices to element23 for i in 1:md.mesh.numberofvertices24 Update(elements[i],inputs,i,md,P1Enum)25 end26 27 #Add necessary inputs to perform this analysis28 FetchDataToInput(md,inputs,elements,md.materials.rheology_B,MaterialsRheologyBEnum)29 FetchDataToInput(md,inputs,elements,md.geometry.thickness,ThicknessEnum)30 FetchDataToInput(md,inputs,elements,md.geometry.surface,SurfaceEnum)31 FetchDataToInput(md,inputs,elements,md.geometry.base,BaseEnum)32 FetchDataToInput(md,inputs,elements,md.initialization.vx./md.constants.yts,VxEnum)33 FetchDataToInput(md,inputs,elements,md.initialization.vy./md.constants.yts,VyEnum)34 35 end#}}}36 function CreateConstraints(analysis::StressbalanceAnalysis,constraints::Vector{Constraint},md::model) #{{{37 38 #load constraints from model39 spcvx = md.stressbalance.spcvx40 spcvy = md.stressbalance.spcvy41 42 count = 143 for i in 1:md.mesh.numberofvertices44 if ~isnan(spcvx[i])45 push!(constraints,Constraint(count,i,1,spcvx[i]))46 count+=147 end48 if ~isnan(spcvy[i])49 push!(constraints,Constraint(count,i,2,spcvy[i]))50 count+=151 end52 end53 54 end#}}}55 function GetSolutionFromInputs(analysis::StressbalanceAnalysis,ug::Vector{Float64},element::Tria) #{{{56 57 #Get dofs for this finite element58 doflist = GetDofList(element,GsetEnum)59 @assert length(doflist)==660 61 #Fetch inputs62 vx_input = GetInput(element, VxEnum)63 vy_input = GetInput(element, VyEnum)64 65 #Loop over each node and enter solution in ug66 count = 067 gauss=GaussTria(P1Enum)68 for i in 1:gauss.numgauss69 vx = GetInputValue(vx_input, gauss, i)70 vy = GetInputValue(vy_input, gauss, i)71 72 count += 173 ug[doflist[count]] = vx74 count += 175 ug[doflist[count]] = vy76 end77 78 #Make sure we reached all the values79 @assert count==length(doflist)80 81 end#}}}82 function InputUpdateFromSolution(analysis::StressbalanceAnalysis,ug::Vector{Float64},element::Tria) #{{{83 84 #Get dofs for this finite element85 doflist = GetDofList(element,GsetEnum)86 87 #Get solution vector for this element88 numdof = 3*289 values = Vector{Float64}(undef,numdof)90 for i in 1:numdof values[i]=ug[doflist[i]] end91 92 #Now split solution vector into x and y components93 numnodes = 394 vx= Vector{Float64}(undef,numnodes)95 vy= Vector{Float64}(undef,numnodes)96 for i in 1:numnodes97 vx[i]=values[2*i-1]98 vy[i]=values[2*i]99 @assert isfinite(vx[i])100 @assert isfinite(vy[i])101 end102 103 AddInput(element,VxEnum,vx,P1Enum)104 AddInput(element,VyEnum,vy,P1Enum)105 end#}}}106 function Core(analysis::StressbalanceAnalysis,femmodel::FemModel)# {{{107 108 #Fetch parameters relevant to solution sequence109 maxiter = FindParam(femmodel.parameters,StressbalanceMaxiterEnum)110 restol = FindParam(femmodel.parameters,StressbalanceRestolEnum)111 reltol = FindParam(femmodel.parameters,StressbalanceReltolEnum)112 abstol = FindParam(femmodel.parameters,StressbalanceAbstolEnum)113 114 solutionsequence_nonlinear(femmodel,analysis,maxiter,restol,reltol,abstol)115 error("STOP")116 117 end #}}}118 119 -
TabularUnified issm/trunk-jpl/src/jl/solve/modules.jl ¶
r26652 r26655 160 160 161 161 end#}}} 162 function SystemMatricesx(femmodel::FemModel,analysis::Analysis)# {{{ 163 164 #Allocate matrices 165 fsize = NumberOfDofs(femmodel.nodes,FsetEnum) 166 ssize = NumberOfDofs(femmodel.nodes,SsetEnum) 167 Kff = IssmMatrix(fsize,fsize) 168 Kfs = IssmMatrix(fsize,ssize) 169 pf = IssmVector(fsize) 170 171 #Construct Stiffness matrix and load vector from elements 172 for i=1:length(femmodel.elements) 173 Ke = CreateKMatrix(analysis,femmodel.elements[i]) 174 pe = CreatePVector(analysis,femmodel.elements[i]) 175 print(Ke) 176 error("don't know what to do") 177 end 178 179 180 181 error("STOP") 182 end# }}} -
TabularUnified issm/trunk-jpl/src/jl/solve/solutionsequences.jl ¶
r26652 r26655 15 15 while(~converged) 16 16 17 #Get new matrices 18 Kff, Kfs, pf = SystemMatricesx(femmodel,analysis) 17 19 error("not implemented yet") 18 20 -
TabularUnified issm/trunk-jpl/src/jl/solve/solve.jl ¶
r26652 r26655 9 9 include("./constraints.jl") 10 10 include("./femmodel.jl") 11 include("./analyses.jl") 11 include("./analyses/analysis.jl") 12 include("./analyses/stressbalanceanalysis.jl") 12 13 include("./solutionsequences.jl") 13 14 include("./modules.jl") 15 include("./toolkits.jl") 16 include("./elementmatrix.jl") 14 17 15 18 function IssmCore(md::model) #{{{
Note:
See TracChangeset
for help on using the changeset viewer.