source: issm/oecreview/Archive/25834-26739/ISSM-26633-26634.diff@ 26740

Last change on this file since 26740 was 26740, checked in by Mathieu Morlighem, 3 years ago

CHG: added 25834-26739

File size: 4.4 KB
RevLine 
[26740]1Index: ../trunk-jpl/src/jl/test101.jl
2===================================================================
3--- ../trunk-jpl/src/jl/test101.jl (revision 26633)
4+++ ../trunk-jpl/src/jl/test101.jl (revision 26634)
5@@ -3,7 +3,8 @@
6 using .ISSM
7
8 md = ISSM.model()
9-md = ISSM.triangle(md,"../../test/Exp/Square.exp",180000.)
10+#md = ISSM.triangle(md,"../../test/Exp/Square.exp",180000.)
11+md = ISSM.triangle(md,"../../test/Exp/Square.exp",250000.)
12 md = ISSM.setmask(md,"all","")
13
14 #Geometry
15Index: ../trunk-jpl/src/jl/solve/analyses.jl
16===================================================================
17--- ../trunk-jpl/src/jl/solve/analyses.jl (revision 26633)
18+++ ../trunk-jpl/src/jl/solve/analyses.jl (revision 26634)
19@@ -52,6 +52,10 @@
20 end
21
22 end#}}}
23+function GetSolutionFromInputs(analysis::StressbalanceAnalysis,ug::Vector{Float64},element::Tria) #{{{
24+ error("STOP")
25+end#}}}
26+
27 function Core(analysis::StressbalanceAnalysis,femmodel::FemModel)# {{{
28
29 #Fetch parameters relevant to solution sequence
30@@ -64,6 +68,8 @@
31 error("STOP")
32
33 end #}}}
34+
35+
36 function solutionsequence_nonlinear(femmodel::FemModel,analysis::Analysis,maxiter::Int64,restol::Float64,reltol::Float64,abstol::Float64) # {{{
37
38 #Initialize number of iterations
39Index: ../trunk-jpl/src/jl/solve/modules.jl
40===================================================================
41--- ../trunk-jpl/src/jl/solve/modules.jl (revision 26633)
42+++ ../trunk-jpl/src/jl/solve/modules.jl (revision 26634)
43@@ -33,7 +33,6 @@
44 #Constrain and Number nodes
45 SpcNodesx(nodes,constraints,parameters)
46 NodesDofx(nodes,parameters)
47- error("STOP")
48
49 #Build FemModel
50 return FemModel(elements,vertices,nodes,parameters,inputs,constraints)
51@@ -106,6 +105,36 @@
52 end# }}}
53 function NodesDofx(nodes::Vector{Node}, parameters::Parameters) #{{{
54
55- error("not implemented yet")
56+ #Do we have any nodes?
57+ if length(nodes)==0
58+ return
59+ end
60
61+ #Do we really need to update dof indexing
62+ if(~RequiresDofReindexing(nodes)) return end
63+
64+ print(" Renumbering degrees of freedom\n")
65+ DistributeDofs(nodes,GsetEnum)
66+ DistributeDofs(nodes,FsetEnum)
67+ DistributeDofs(nodes,SsetEnum)
68+
69 end# }}}
70+function GetSolutionFromInputsx(analysis::Analysis,femmodel::FemModel) #{{{
71+
72+ #Get size of vector
73+ gsize = NumberOfDofs(femmodel.nodes,GsetEnum)
74+
75+ println(gsize)
76+ error("Stop ===")
77+
78+ #Initialize solution vector
79+ ug = Vector{Float64}(undef,gsize)
80+
81+ #Go through elements and plug in solution
82+ for i=1:length(femmodel.elements)
83+ GetSolutionFromInputs(analysis,ug,femmodel.elements[i])
84+ end
85+
86+ return ug
87+
88+end#}}}
89Index: ../trunk-jpl/src/jl/solve/nodes.jl
90===================================================================
91--- ../trunk-jpl/src/jl/solve/nodes.jl (revision 26633)
92+++ ../trunk-jpl/src/jl/solve/nodes.jl (revision 26634)
93@@ -31,3 +31,89 @@
94 node.svalues[dof] = value
95
96 end# }}}
97+function DistributeDofs(node::Node,setenum::IssmEnum,dofcount::Int64) #{{{
98+
99+ if setenum==GsetEnum
100+ for i=1:node.gsize
101+ node.gdoflist[i] = dofcount
102+ dofcount += 1
103+ end
104+ elseif setenum==FsetEnum
105+ for i=1:node.gsize
106+ if node.fdoflist[i]!=-1
107+ @assert node.sdoflist[i]==-1
108+ node.fdoflist[i] = dofcount
109+ dofcount += 1
110+ end
111+ end
112+ elseif setenum==SsetEnum
113+ for i=1:node.gsize
114+ if node.sdoflist[i]!=-1
115+ @assert node.fdoflist[i]==-1
116+ node.sdoflist[i] = dofcount
117+ dofcount += 1
118+ end
119+ end
120+ else
121+ error("not supported")
122+ end
123+
124+ return dofcount
125+end# }}}
126+function GetNumberOfDofs(node::Node,setenum::IssmEnum) #{{{
127+
128+ if setenum==GsetEnum
129+ dofcount = node.gsize
130+ elseif setenum==FsetEnum
131+ dofcount = 0
132+ for i=1:node.gsize
133+ if node.fdoflist[i]!=-1
134+ dofcount += 1
135+ end
136+ end
137+ elseif setenum==SsetEnum
138+ dofcount = 0
139+ for i=1:node.gsize
140+ if node.sdoflist[i]!=-1
141+ dofcount += 1
142+ end
143+ end
144+ else
145+ error("not supported")
146+ end
147+
148+ return dofcount
149+
150+end# }}}
151+
152+#Nodes functions
153+function RequiresDofReindexing(nodes::Vector{Node}) #{{{
154+
155+ for i in 1:length(nodes)
156+ if nodes[i].indexingupdate
157+ return true
158+ end
159+ end
160+
161+ return false
162+
163+end# }}}
164+function DistributeDofs(nodes::Vector{Node},setenum::IssmEnum) #{{{
165+
166+ dofcount = 1
167+
168+ for i in 1:length(nodes)
169+ dofcount = DistributeDofs(nodes[i],setenum,dofcount)
170+ end
171+
172+
173+end# }}}
174+function NumberOfDofs(nodes::Vector{Node},setenum::IssmEnum) #{{{
175+
176+ numdofs = 0
177+ for i in 1:length(nodes)
178+ numdofs += GetNumberOfDofs(nodes[i],setenum)
179+ end
180+ return numdofs
181+
182+end# }}}
Note: See TracBrowser for help on using the repository browser.