Changeset 26655


Ignore:
Timestamp:
11/23/21 05:55:56 (3 years ago)
Author:
Mathieu Morlighem
Message:

CHG: reorganizing files

Location:
issm/trunk-jpl/src/jl/solve
Files:
4 added
3 edited
1 moved

Legend:

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

    r26654 r26655  
    11#Analysis class definitions
    22abstract type Analysis end
    3 struct StressbalanceAnalysis <: Analysis#{{{
    4 end #}}}
    5 
    6 #Stress balance analysis
    7 function UpdateParameters(analysis::StressbalanceAnalysis,parameters::Parameters,md::model) #{{{
    8         AddParam(parameters,md.stressbalance.restol,StressbalanceRestolEnum)
    9         AddParam(parameters,md.stressbalance.reltol,StressbalanceReltolEnum)
    10         AddParam(parameters,md.stressbalance.abstol,StressbalanceAbstolEnum)
    11         AddParam(parameters,md.stressbalance.maxiter,StressbalanceMaxiterEnum)
    12 end#}}}
    13 function CreateNodes(analysis::StressbalanceAnalysis,nodes::Vector{Node},md::model) #{{{
    14 
    15         numdof = 2
    16         for i in 1:md.mesh.numberofvertices
    17                 push!(nodes,Node(i,i,true,numdof,-ones(Int64,numdof), ones(Int64,numdof), -ones(Int64,numdof), zeros(numdof)))
    18         end
    19 end#}}}
    20 function UpdateElements(analysis::StressbalanceAnalysis,elements::Vector{Tria}, inputs::Inputs, md::model) #{{{
    21 
    22         #Provide node indices to element
    23         for i in 1:md.mesh.numberofvertices
    24                 Update(elements[i],inputs,i,md,P1Enum)
    25         end
    26 
    27         #Add necessary inputs to perform this analysis
    28         FetchDataToInput(md,inputs,elements,md.materials.rheology_B,MaterialsRheologyBEnum)
    29         FetchDataToInput(md,inputs,elements,md.geometry.thickness,ThicknessEnum)
    30         FetchDataToInput(md,inputs,elements,md.geometry.surface,SurfaceEnum)
    31         FetchDataToInput(md,inputs,elements,md.geometry.base,BaseEnum)
    32         FetchDataToInput(md,inputs,elements,md.initialization.vx./md.constants.yts,VxEnum)
    33         FetchDataToInput(md,inputs,elements,md.initialization.vy./md.constants.yts,VyEnum)
    34 
    35 end#}}}
    36 function CreateConstraints(analysis::StressbalanceAnalysis,constraints::Vector{Constraint},md::model) #{{{
    37 
    38         #load constraints from model
    39         spcvx = md.stressbalance.spcvx
    40         spcvy = md.stressbalance.spcvy
    41 
    42         count = 1
    43         for i in 1:md.mesh.numberofvertices
    44                 if ~isnan(spcvx[i])
    45                         push!(constraints,Constraint(count,i,1,spcvx[i]))
    46                         count+=1
    47                 end
    48                 if ~isnan(spcvy[i])
    49                         push!(constraints,Constraint(count,i,2,spcvy[i]))
    50                         count+=1
    51                 end
    52         end
    53 
    54 end#}}}
    55 function GetSolutionFromInputs(analysis::StressbalanceAnalysis,ug::Vector{Float64},element::Tria) #{{{
    56 
    57         #Get dofs for this finite element
    58         doflist = GetDofList(element,GsetEnum)
    59         @assert length(doflist)==6
    60 
    61         #Fetch inputs
    62         vx_input = GetInput(element, VxEnum)
    63         vy_input = GetInput(element, VyEnum)
    64 
    65         #Loop over each node and enter solution in ug
    66         count = 0
    67         gauss=GaussTria(P1Enum)
    68         for i in 1:gauss.numgauss
    69                 vx = GetInputValue(vx_input, gauss, i)
    70                 vy = GetInputValue(vy_input, gauss, i)
    71 
    72                 count += 1
    73                 ug[doflist[count]] = vx
    74                 count += 1
    75                 ug[doflist[count]] = vy
    76         end
    77 
    78         #Make sure we reached all the values
    79         @assert count==length(doflist)
    80 
    81 end#}}}
    82 function InputUpdateFromSolution(analysis::StressbalanceAnalysis,ug::Vector{Float64},element::Tria) #{{{
    83 
    84         #Get dofs for this finite element
    85         doflist = GetDofList(element,GsetEnum)
    86 
    87         #Get solution vector for this element
    88         numdof   = 3*2
    89         values = Vector{Float64}(undef,numdof)
    90         for i in 1:numdof values[i]=ug[doflist[i]] end
    91 
    92         #Now split solution vector into x and y components
    93         numnodes = 3
    94         vx= Vector{Float64}(undef,numnodes)
    95         vy= Vector{Float64}(undef,numnodes)
    96         for i in 1:numnodes
    97                 vx[i]=values[2*i-1]
    98                 vy[i]=values[2*i]
    99                 @assert isfinite(vx[i])
    100                 @assert isfinite(vy[i])
    101         end
    102 
    103         AddInput(element,VxEnum,vx,P1Enum)
    104         AddInput(element,VyEnum,vy,P1Enum)
    105 end#}}}
    106 function Core(analysis::StressbalanceAnalysis,femmodel::FemModel)# {{{
    107 
    108         #Fetch parameters relevant to solution sequence
    109         maxiter = FindParam(femmodel.parameters,StressbalanceMaxiterEnum)
    110         restol  = FindParam(femmodel.parameters,StressbalanceRestolEnum)
    111         reltol  = FindParam(femmodel.parameters,StressbalanceReltolEnum)
    112         abstol  = FindParam(femmodel.parameters,StressbalanceAbstolEnum)
    113 
    114         solutionsequence_nonlinear(femmodel,analysis,maxiter,restol,reltol,abstol)
    115         error("STOP")
    116 
    117 end #}}}
    118 
    119 
  • TabularUnified issm/trunk-jpl/src/jl/solve/modules.jl

    r26652 r26655  
    160160
    161161end#}}}
     162function SystemMatricesx(femmodel::FemModel,analysis::Analysis)# {{{
     163
     164        #Allocate matrices
     165        fsize = NumberOfDofs(femmodel.nodes,FsetEnum)
     166        ssize = NumberOfDofs(femmodel.nodes,SsetEnum)
     167        Kff = IssmMatrix(fsize,fsize)
     168        Kfs = IssmMatrix(fsize,ssize)
     169        pf  = IssmVector(fsize)
     170
     171        #Construct Stiffness matrix and load vector from elements
     172        for i=1:length(femmodel.elements)
     173                Ke = CreateKMatrix(analysis,femmodel.elements[i])
     174                pe = CreatePVector(analysis,femmodel.elements[i])
     175                print(Ke)
     176                error("don't know what to do")
     177        end
     178       
     179       
     180       
     181        error("STOP")
     182end# }}}
  • TabularUnified issm/trunk-jpl/src/jl/solve/solutionsequences.jl

    r26652 r26655  
    1515        while(~converged)
    1616
     17                #Get new matrices
     18                Kff, Kfs, pf = SystemMatricesx(femmodel,analysis)
    1719                error("not implemented yet")
    1820
  • TabularUnified issm/trunk-jpl/src/jl/solve/solve.jl

    r26652 r26655  
    99include("./constraints.jl")
    1010include("./femmodel.jl")
    11 include("./analyses.jl")
     11include("./analyses/analysis.jl")
     12include("./analyses/stressbalanceanalysis.jl")
    1213include("./solutionsequences.jl")
    1314include("./modules.jl")
     15include("./toolkits.jl")
     16include("./elementmatrix.jl")
    1417
    1518function IssmCore(md::model) #{{{
Note: See TracChangeset for help on using the changeset viewer.