source: issm/trunk-jpl/src/jl/solve/nodes.jl@ 26652

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

CHG: more work on julia solver

File size: 3.0 KB
Line 
1#Node class definition
2mutable struct Node #{{{
3 id::Int64
4 sid::Int64
5 indexingupdate::Bool
6 gsize::Int64
7 gdoflist::Vector{Int64}
8 fdoflist::Vector{Int64}
9 sdoflist::Vector{Int64}
10 svalues::Vector{Float64}
11end# }}}
12
13#Node functions
14function Base.show(io::IO, this::Node)# {{{
15
16 println(io,"Node:")
17 println(io," id: ",this.id)
18 println(io," sid: ",this.sid)
19 println(io," indexingupdate: ",this.indexingupdate)
20 println(io," gsize: ",this.gsize)
21 println(io," gdoflist: ",this.gdoflist)
22 println(io," fdoflist: ",this.fdoflist)
23 println(io," sdoflist: ",this.sdoflist)
24 println(io," svalues: ",this.svalues)
25end# }}}
26function ApplyConstraint(node::Node,dof::Int8,value::Float64) #{{{
27
28 node.indexingupdate = true
29 node.fdoflist[dof] = -1
30 node.sdoflist[dof] = +1
31 node.svalues[dof] = value
32
33end# }}}
34function DistributeDofs(node::Node,setenum::IssmEnum,dofcount::Int64) #{{{
35
36 if setenum==GsetEnum
37 for i=1:node.gsize
38 node.gdoflist[i] = dofcount
39 dofcount += 1
40 end
41 elseif setenum==FsetEnum
42 for i=1:node.gsize
43 if node.fdoflist[i]!=-1
44 @assert node.sdoflist[i]==-1
45 node.fdoflist[i] = dofcount
46 dofcount += 1
47 end
48 end
49 elseif setenum==SsetEnum
50 for i=1:node.gsize
51 if node.sdoflist[i]!=-1
52 @assert node.fdoflist[i]==-1
53 node.sdoflist[i] = dofcount
54 dofcount += 1
55 end
56 end
57 else
58 error("not supported")
59 end
60
61 return dofcount
62end# }}}
63function GetNumberOfDofs(node::Node,setenum::IssmEnum) #{{{
64
65 if setenum==GsetEnum
66 dofcount = node.gsize
67 elseif setenum==FsetEnum
68 dofcount = 0
69 for i=1:node.gsize
70 if node.fdoflist[i]!=-1
71 dofcount += 1
72 end
73 end
74 elseif setenum==SsetEnum
75 dofcount = 0
76 for i=1:node.gsize
77 if node.sdoflist[i]!=-1
78 dofcount += 1
79 end
80 end
81 else
82 error("not supported")
83 end
84
85 return dofcount
86
87end# }}}
88function GetDofList(node::Node,doflist::Vector{Int64},count::Int64,setenum::IssmEnum) #{{{
89
90 if setenum==GsetEnum
91 for i in 1:node.gsize
92 count += 1
93 doflist[count] = node.gdoflist[i]
94 end
95 elseif setenum==FsetEnum
96 for i=1:node.gsize
97 if node.fdoflist[i]!=-1
98 count += 1
99 doflist[count] = node.fdoflist[i]
100 end
101 end
102 elseif setenum==SsetEnum
103 for i=1:node.gsize
104 if node.sdoflist[i]!=-1
105 count += 1
106 doflist[count] = node.sdoflist[i]
107 end
108 end
109 else
110 error("not supported")
111 end
112
113 return count
114
115end# }}}
116function VecReduce(node::Node,ug::Vector{Float64},uf::Vector{Float64}) #{{{
117
118 for i=1:node.gsize
119 if node.fdoflist[i]!=-1
120 uf[node.fdoflist[i]] = ug[node.gdoflist[i]]
121 end
122 end
123
124end# }}}
125
126#Nodes functions
127function RequiresDofReindexing(nodes::Vector{Node}) #{{{
128
129 for i in 1:length(nodes)
130 if nodes[i].indexingupdate
131 return true
132 end
133 end
134
135 return false
136
137end# }}}
138function DistributeDofs(nodes::Vector{Node},setenum::IssmEnum) #{{{
139
140 dofcount = 1
141
142 for i in 1:length(nodes)
143 dofcount = DistributeDofs(nodes[i],setenum,dofcount)
144 end
145
146
147end# }}}
148function NumberOfDofs(nodes::Vector{Node},setenum::IssmEnum) #{{{
149
150 numdofs = 0
151 for i in 1:length(nodes)
152 numdofs += GetNumberOfDofs(nodes[i],setenum)
153 end
154 return numdofs
155
156end# }}}
Note: See TracBrowser for help on using the repository browser.