Changeset 26622


Ignore:
Timestamp:
11/15/21 09:49:06 (3 years ago)
Author:
Mathieu Morlighem
Message:

CHG: some progress with Joel

Location:
issm/trunk-jpl/src/jl
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/jl/classes.jl

    r26522 r26622  
    154154
    155155        println(io,"Model:")
    156         @printf "%19s: %-22s -- %s\n" "mesh" typeof(md.mesh) "mesh properties"
    157         @printf "%19s: %-22s -- %s\n" "geometry" typeof(md.geometry) "surface elevation, bedrock topography, ice thickness,..."
    158         @printf "%19s: %-22s -- %s\n" "mask" typeof(md.mask) "defines grounded and floating regions"
    159         @printf "%19s: %-22s -- %s\n" "materials" typeof(md.materials) "material properties"
    160         @printf "%19s: %-22s -- %s\n" "initialization" typeof(md.initialization) "initial state"
    161         @printf "%19s: %-22s -- %s\n" "stressbalance" typeof(md.stressbalance) "stress balance parameters"
    162         @printf "%19s: %-22s -- %s\n" "constants" typeof(md.constants) "physical constants"
     156        @printf "%19s: %-26s -- %s\n" "mesh" typeof(md.mesh) "mesh properties"
     157        @printf "%19s: %-26s -- %s\n" "geometry" typeof(md.geometry) "surface elevation, bedrock topography, ice thickness,..."
     158        @printf "%19s: %-26s -- %s\n" "mask" typeof(md.mask) "defines grounded and floating regions"
     159        @printf "%19s: %-26s -- %s\n" "materials" typeof(md.materials) "material properties"
     160        @printf "%19s: %-26s -- %s\n" "initialization" typeof(md.initialization) "initial state"
     161        @printf "%19s: %-26s -- %s\n" "stressbalance" typeof(md.stressbalance) "stress balance parameters"
     162        @printf "%19s: %-26s -- %s\n" "constants" typeof(md.constants) "physical constants"
    163163
    164164end# }}}
    165 
    166 
  • issm/trunk-jpl/src/jl/solve.jl

    r26522 r26622  
    88        value::Float64
    99end# }}}
     10function GetParameterValue(param::DoubleParam) #{{{
     11        return param.value
     12end#}}}
    1013struct IntParam <: Parameter #{{{
    1114        enum::IssmEnum
    1215        value::Int64
    1316end# }}}
     17function GetParameterValue(param::IntParam) #{{{
     18        return param.value
     19end#}}}
    1420mutable struct Parameters #{{{
    1521        lookup::Dict{IssmEnum,Parameter}
     
    2834
    2935        parameters.lookup[enum] = IntParam(enum,value)
     36
     37end#}}}
     38function FindParam(parameters::Parameters,enum::IssmEnum) #{{{
     39
     40        param = parameters.lookup[enum]
     41        return GetParameterValue(param)
    3042
    3143end#}}}
     
    194206
    195207abstract type Analysis end
    196 struct StressbalanceAnalysis#{{{
     208struct StressbalanceAnalysis <: Analysis#{{{
    197209end #}}}
    198210
     
    209221
    210222        #Solve
    211         Stressbalance(femmodel)
     223        analysis = StressbalanceAnalysis()
     224        Core(analysis,femmodel)
    212225
    213226        #then what??
     227        error("STOP")
    214228
    215229end# }}}
     
    237251        CreateConstraints(analysis,constraints,md)
    238252
     253        #Configure objects
     254        ConfigureObjectx(elements,nodes,vertices,parameters,inputs)
     255
    239256        #Build FemModel
    240257        return FemModel(elements,vertices,nodes,parameters,inputs,constraints)
     
    247264        tempparams   = Parameters(Dict{IssmEnum,Parameter}())
    248265        tempinputs   = Inputs(-1,-1,Dict{IssmEnum,Input}())
    249         tempvertices = Vector{Vertex}(undef,0)
     266        tempvertices = Vector{Vertex}(undef,3)
    250267        tempnodes    = Vector{Node}(undef,0)
    251268
     
    283300        FetchDataToInput(md,inputs,elements,md.materials.rheology_B,MaterialsRheologyBEnum)
    284301        FetchDataToInput(md,inputs,elements,md.materials.rheology_n,MaterialsRheologyNEnum)
     302end# }}}
     303function ConfigureObjectx(elements::Vector{Tria},nodes::Vector{Node},vertices::Vector{Vertex},parameters::Parameters,inputs::Inputs) #{{{
     304
     305        for i in 1:length(elements)
     306                Configure(elements[i],nodes,vertices,parameters,inputs)
     307        end
     308
     309
    285310end# }}}
    286311
     
    334359
    335360end#}}}
    336 function Stressbalance(femmodel::FemModel)
     361function Core(analysis::StressbalanceAnalysis,femmodel::FemModel)# {{{
     362
     363        #Fetch parameters relevant to solution sequence
     364        maxiter = FindParam(femmodel.parameters,StressbalanceMaxiterEnum)
     365        restol  = FindParam(femmodel.parameters,StressbalanceRestolEnum)
     366        reltol  = FindParam(femmodel.parameters,StressbalanceReltolEnum)
     367        abstol  = FindParam(femmodel.parameters,StressbalanceAbstolEnum)
     368
     369        solutionsequence_nonlinear(femmodel,analysis,maxiter,restol,reltol,abstol)
    337370        error("STOP")
    338 end
     371
     372end #}}}
     373function solutionsequence_nonlinear(femmodel::FemModel,analysis::Analysis,maxiter::Int64,restol::Float64,reltol::Float64,abstol::Float64) # {{{
     374
     375        #Initialize number of iterations
     376        count = 0
     377        converged = false
     378
     379        #Get existing solution
     380        ug = GetSolutionFromInputsx(analysis,femmodel)
     381
     382        #Loop until we reach convergence
     383        while(~converged)
     384
     385                error("not implemented yet")
     386
     387                #Increase count
     388                count += 1
     389                if(count>maxiter)
     390                        println("   maximum number of nonlinear iterations (",maxiter,") exceeded")
     391                        converged = true
     392                end
     393        end
     394
     395        error("STOP")
     396
     397end# }}}
    339398
    340399#Element functions
     
    360419        end
    361420end #}}}
     421function Configure(element::Tria,nodes::Vector{Node},vertices::Vector{Vertex},parameters::Parameters,inputs::Inputs) # {{{
     422
     423   #Configure vertices
     424   for i in 1:3
     425      element.vertices[i] = vertices[element.vertexids[i]]
     426   end
     427
     428        #Point to real datasets
     429        element.parameters = parameters
     430        element.inputs     = inputs
     431       
     432end # }}}
Note: See TracChangeset for help on using the changeset viewer.