[26740] | 1 | Index: ../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
|
---|
| 15 | Index: ../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
|
---|
| 39 | Index: ../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#}}}
|
---|
| 89 | Index: ../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# }}}
|
---|