Changeset 26686


Ignore:
Timestamp:
12/01/21 18:34:02 (3 years ago)
Author:
Mathieu Morlighem
Message:

CHG: Done down to first uf, which does not look right

Location:
issm/trunk-jpl/src/jl/solve
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/jl/solve/analyses/stressbalanceanalysis.jl

    r26682 r26686  
    138138        return pe
    139139end #}}}
    140 function GetSolutionFromInputs(analysis::StressbalanceAnalysis,ug::Vector{Float64},element::Tria) #{{{
     140function GetSolutionFromInputs(analysis::StressbalanceAnalysis,ug::IssmVector,element::Tria) #{{{
    141141
    142142        #Get dofs for this finite element
     
    156156
    157157                count += 1
    158                 ug[doflist[count]] = vx
     158                ug.vector[doflist[count]] = vx
    159159                count += 1
    160                 ug[doflist[count]] = vy
     160                ug.vector[doflist[count]] = vy
    161161        end
    162162
  • issm/trunk-jpl/src/jl/solve/modules.jl

    r26682 r26686  
    125125
    126126        #Initialize solution vector
    127         ug = Vector{Float64}(undef,gsize)
     127        ug = IssmVector(gsize)
    128128
    129129        #Go through elements and plug in solution
     
    135135
    136136end#}}}
    137 function InputUpdateFromSolutionx(analysis::Analysis,ug::Vector{Float64},femmodel::FemModel) #{{{
     137function InputUpdateFromSolutionx(analysis::Analysis,ug::IssmVector,femmodel::FemModel) #{{{
    138138
    139139        #Go through elements and plug in solution
    140140        for i=1:length(femmodel.elements)
    141                 InputUpdateFromSolution(analysis,ug,femmodel.elements[i])
     141                InputUpdateFromSolution(analysis,ug.vector,femmodel.elements[i])
    142142        end
    143143
     
    145145
    146146end#}}}
    147 function Reducevectorgtofx(ug::Vector{Float64},nodes::Vector{Node}) #{{{
     147function Reducevectorgtofx(ug::IssmVector,nodes::Vector{Node}) #{{{
    148148
    149149        #Get size of output vector
     
    151151
    152152        #Initialize output vector
    153         uf = Vector{Float64}(undef,fsize)
     153        uf = IssmVector(fsize)
    154154
    155155        #Go through elements and plug in solution
    156156        for i=1:length(nodes)
    157                 VecReduce(nodes[i],ug,uf)
     157                VecReduce(nodes[i],ug.vector,uf)
    158158        end
    159159
    160160        return ug
    161161
     162end#}}}
     163function Reduceloadx!(pf::IssmVector, Kfs::IssmMatrix, ys::IssmVector) #{{{
     164
     165        #Is there anything to do?
     166        m, n = GetSize(Kfs)
     167
     168        if(m*n>0)
     169
     170                #Allocate Kfs*ys
     171                Kfsy_s=IssmVector(m)
     172
     173                #Perform multiplication
     174                MatMult!(Kfs,ys,Kfsy_s)
     175
     176                #Subtract Kfs*ys from pf
     177                AXPY!(pf,-1.0,Kfsy_s)
     178
     179        end
    162180end#}}}
    163181function SystemMatricesx(femmodel::FemModel,analysis::Analysis)# {{{
  • issm/trunk-jpl/src/jl/solve/nodes.jl

    r26682 r26686  
    136136
    137137end# }}}
    138 function VecReduce(node::Node,ug::Vector{Float64},uf::Vector{Float64}) #{{{
     138function VecReduce(node::Node,ug::Vector{Float64},uf::IssmVector) #{{{
    139139
    140140        for i=1:node.gsize
    141141                if node.fdoflist[i]!=-1
    142                         uf[node.fdoflist[i]] = ug[node.gdoflist[i]]
     142                        uf.vector[node.fdoflist[i]] = ug[node.gdoflist[i]]
    143143                end
    144144        end
  • issm/trunk-jpl/src/jl/solve/solutionsequences.jl

    r26682 r26686  
    2020                #Enforce constraints
    2121                ys = CreateNodalConstraintsx(femmodel.nodes)
     22                Reduceloadx!(pf, Kfs, ys)
    2223
    23                 error("not implemented yet")
     24                #Solve!
     25                old_uf = uf
     26                uf = Solverx(Kff, pf, old_uf)
     27
     28                print(uf)
     29                error("compare with ISSM...")
    2430
    2531                #Increase count
  • issm/trunk-jpl/src/jl/solve/toolkits.jl

    r26682 r26686  
    22#Toolkit #1: serial sparse arrays
    33using SparseArrays
     4
     5#Matrix
    46mutable struct IssmMatrix #{{{
    57        matrix::SparseMatrixCSC{Float64,Int64}
     
    2022
    2123end#}}}
     24function GetSize(matrix::IssmMatrix)#{{{
    2225
     26        return size(matrix.matrix)
     27
     28end#}}}
     29
     30#Vector
    2331mutable struct IssmVector #{{{
    2432        vector::Vector{Float64}
     
    2634function IssmVector(M::Int64)#{{{
    2735        return IssmVector(zeros(M))
     36end#}}}
     37function GetSize(vector::IssmVector)#{{{
     38
     39        return length(vector.vector)
     40
    2841end#}}}
    2942function AddValues!(vector::IssmVector,m::Int64,midx::Vector{Int64},values::Vector{Float64})#{{{
     
    4558
    4659end#}}}
     60
     61#Operations
     62function MatMult!(A::IssmMatrix,x::IssmVector,y::IssmVector) #{{{
     63
     64        y.vector = A.matrix*x.vector
     65
     66end#}}}
     67function AXPY!(y::IssmVector,alpha::Float64,x::IssmVector) #{{{
     68
     69        y.vector = alpha*x.vector + y.vector
     70
     71end#}}}
     72function Solverx(A::IssmMatrix,b::IssmVector,xold::IssmVector) #{{{
     73
     74        x = IssmVector(GetSize(xold))
     75        x.vector = (b.vector\A.matrix)' #not sure why we need to transpose... that's a mystery!
     76
     77        return x
     78
     79
     80end#}}}
     81
Note: See TracChangeset for help on using the changeset viewer.