Changeset 26682


Ignore:
Timestamp:
11/30/21 18:48:37 (3 years ago)
Author:
Mathieu Morlighem
Message:

CHG: done with ys

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

Legend:

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

    r26681 r26682  
    136136        end
    137137
    138         print(pe)
    139         error("STOP")
    140 
    141         return Pe
     138        return pe
    142139end #}}}
    143140function GetSolutionFromInputs(analysis::StressbalanceAnalysis,ug::Vector{Float64},element::Tria) #{{{
  • issm/trunk-jpl/src/jl/solve/elementmatrix.jl

    r26681 r26682  
    3131        display(this.values)
    3232end# }}}
     33function AddToGlobal!(Ke::ElementMatrix,Kff::IssmMatrix,Kfs::IssmMatrix)#{{{
     34
     35        #First check that the element matrix looks alright
     36        CheckConsistency(Ke)
     37
     38        #See if we need to do anything
     39        is_fset = false
     40        is_sset = false
     41        for i in 1:Ke.nrows
     42                if(Ke.fglobaldoflist[i]>0) is_fset = true end
     43                if(Ke.sglobaldoflist[i]>0) is_sset = true end
     44        end
     45
     46        if is_fset
     47                AddValues!(Kff,Ke.nrows,Ke.fglobaldoflist,Ke.nrows,Ke.fglobaldoflist,Ke.values)
     48        end
     49        if is_sset
     50                AddValues!(Kfs,Ke.nrows,Ke.fglobaldoflist,Ke.nrows,Ke.sglobaldoflist,Ke.values)
     51        end
     52
     53end#}}}
     54function CheckConsistency(Ke::ElementMatrix)#{{{
     55
     56        for i in 1:Ke.nrows
     57                for j in 1:Ke.nrows
     58                        if(isnan(Ke.values[i,j])) error("NaN found in Element Matrix") end
     59                        if(isinf(Ke.values[i,j])) error("Inf found in Element Matrix") end
     60                        if(abs(Ke.values[i,j])>1.e+50) error("Element Matrix values exceeds 1.e+50") end
     61                end
     62        end
     63end#}}}
    3364
    3465mutable struct ElementVector#{{{
     
    5889        display(this.values)
    5990end# }}}
     91function AddToGlobal!(pe::ElementVector,pf::IssmVector)#{{{
     92
     93        #First check that the element matrix looks alright
     94        CheckConsistency(pe)
     95
     96        #See if we need to do anything
     97        is_fset = false
     98        for i in 1:pe.nrows
     99                if(pe.fglobaldoflist[i]>0)
     100                        is_fset = true
     101                        break
     102                end
     103        end
     104
     105        if is_fset
     106                AddValues!(pf,pe.nrows,pe.fglobaldoflist,pe.values)
     107        end
     108
     109end#}}}
     110function CheckConsistency(pe::ElementVector)#{{{
     111
     112        for i in 1:pe.nrows
     113                if(isnan(pe.values[i])) error("NaN found in Element Vector") end
     114                if(isinf(pe.values[i])) error("Inf found in Element Vector") end
     115                if(abs(pe.values[i])>1.e+50) error("Element Vector values exceeds 1.e+50") end
     116        end
     117end#}}}
  • issm/trunk-jpl/src/jl/solve/modules.jl

    r26681 r26682  
    171171
    172172        #Construct Stiffness matrix and load vector from elements
    173         for i=1:length(femmodel.elements)
     173        for i in 1:length(femmodel.elements)
    174174                Ke = CreateKMatrix(analysis,femmodel.elements[i])
    175175                pe = CreatePVector(analysis,femmodel.elements[i])
    176                 print(Ke)
    177                 error("don't know what to do")
     176
     177                AddToGlobal!(Ke,Kff,Kfs)
     178                AddToGlobal!(pe,pf)
    178179        end
    179180       
    180        
    181        
    182         error("STOP")
     181        return Kff, Kfs, pf
    183182end# }}}
     183function CreateNodalConstraintsx(nodes::Vector{Node})# {{{
     184
     185        #Allocate vector
     186        ssize=NumberOfDofs(nodes,SsetEnum)
     187        ys=IssmVector(ssize)
     188
     189        #constraints vector with the constraint values
     190        for i in 1:length(nodes)
     191                CreateNodalConstraints(nodes[i],ys)
     192        end
     193
     194        return ys
     195end# }}}
  • issm/trunk-jpl/src/jl/solve/nodes.jl

    r26659 r26682  
    3030        node.sdoflist[dof]  = +1
    3131        node.svalues[dof]   = value
     32
     33end# }}}
     34function CreateNodalConstraints(node::Node,ys::IssmVector) #{{{
     35
     36        if(SSize(node)>0)
     37                SetValues!(ys,node.gsize,node.sdoflist,node.svalues)
     38        end
    3239
    3340end# }}}
     
    138145
    139146end# }}}
     147function SSize(node::Node) #{{{
     148
     149        ssize = 0
     150
     151        for i=1:node.gsize
     152                if node.fdoflist[i]!=-1
     153                        ssize+=1
     154                end
     155        end
     156
     157        return ssize
     158
     159end# }}}
    140160
    141161#Nodes functions
  • issm/trunk-jpl/src/jl/solve/solutionsequences.jl

    r26655 r26682  
    1717                #Get new matrices
    1818                Kff, Kfs, pf = SystemMatricesx(femmodel,analysis)
     19
     20                #Enforce constraints
     21                ys = CreateNodalConstraintsx(femmodel.nodes)
     22
    1923                error("not implemented yet")
    2024
  • issm/trunk-jpl/src/jl/solve/solve.jl

    r26675 r26682  
    11include("../md/classes.jl")
    22include("./issmenums.jl")
     3include("./toolkits.jl")
    34include("./gauss.jl")
    45include("./parameters.jl")
     
    1415include("./solutionsequences.jl")
    1516include("./modules.jl")
    16 include("./toolkits.jl")
     17include("./elementmatrix.jl")
    1718include("./utils.jl")
    18 include("./elementmatrix.jl")
    1919
    2020function IssmCore(md::model) #{{{
  • issm/trunk-jpl/src/jl/solve/toolkits.jl

    r26655 r26682  
    88        return IssmMatrix(spzeros(M,N))
    99end#}}}
     10function AddValues!(matrix::IssmMatrix,m::Int64,midx::Vector{Int64},n::Int64,nidx::Vector{Int64},values::Matrix{Float64})#{{{
     11
     12        #This is inefficient now, but it will work
     13        for i in 1:m
     14                if(midx[i]==-1) continue end
     15                for j in 1:n
     16                        if(nidx[j]==-1) continue end
     17                        matrix.matrix[midx[i],nidx[j]] += values[i,j]
     18                end
     19        end
     20
     21end#}}}
     22
    1023mutable struct IssmVector #{{{
    1124        vector::Vector{Float64}
     
    1427        return IssmVector(zeros(M))
    1528end#}}}
     29function AddValues!(vector::IssmVector,m::Int64,midx::Vector{Int64},values::Vector{Float64})#{{{
     30
     31        #This is inefficient now, but it will work
     32        for i in 1:m
     33                if(midx[i]==-1) continue end
     34                vector.vector[midx[i]] += values[i]
     35        end
     36
     37end#}}}
     38function SetValues!(vector::IssmVector,m::Int64,midx::Vector{Int64},values::Vector{Float64})#{{{
     39
     40        #This is inefficient now, but it will work
     41        for i in 1:m
     42                if(midx[i]==-1) continue end
     43                vector.vector[midx[i]] = values[i]
     44        end
     45
     46end#}}}
Note: See TracChangeset for help on using the changeset viewer.