Changeset 26703


Ignore:
Timestamp:
12/03/21 07:51:10 (3 years ago)
Author:
Mathieu Morlighem
Message:

CHG: added results and starting test301 with basal friction

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

Legend:

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

    r26629 r26703  
    1515end# }}}
    1616function Base.show(io::IO, this::Mesh2dTriangle)# {{{
    17 
    18         println(io,typeof(this),":")
    19         for name in fieldnames(typeof(this))
    20                 a=getfield(this,name)
    21                 #print(io,"   $(name) = ")
    22                 @printf "%19s: " name
    23                 if isa(a,String)
    24                         println(io, a)
    25                 elseif length(a)>1
    26                         if !isempty(a)
    27                                 println(io, typeof(a), " of size ", size(a))
    28                         else
    29                                 println(io,"empty")
    30                         end
    31                 else
    32                         println(io, a)
    33                 end
    34         end
     17        IssmStructDisp(io, this)
    3518end# }}}
    3619mutable struct Mesh3dPrism{T} <: AbstractMesh
     
    6649        return Mask( Vector{Float64}(undef,0), Vector{Float64}(undef,0))
    6750end# }}}
     51function Base.show(io::IO, this::Mask)# {{{
     52        IssmStructDisp(io, this)
     53end# }}}
    6854
    6955mutable struct Initialization
     
    8773end# }}}
    8874function Base.show(io::IO, this::Stressbalance)# {{{
    89 
    90         println(io,typeof(this),":")
    91         for name in fieldnames(typeof(this))
    92                 a=getfield(this,name)
    93                 #print(io,"   $(name) = ")
    94                 @printf "%19s: " name
    95                 if isa(a,String)
    96                         println(io, a)
    97                 elseif length(a)>1
    98                         if !isempty(a)
    99                                 println(io, typeof(a), " of size ", size(a))
    100                         else
    101                                 println(io,"empty")
    102                         end
    103                 else
    104                         println(io, a)
    105                 end
    106         end
     75        IssmStructDisp(io, this)
    10776end# }}}
    10877
     
    137106end# }}}
    138107
     108abstract type AbstractFriction end
     109mutable struct BuddFriction <: AbstractFriction
     110        coefficient::Vector{Float64}
     111end
     112function BuddFriction() #{{{
     113        return BuddFriction(Vector{Float64}(undef,0))
     114end# }}}
     115function Base.show(io::IO, this::BuddFriction)# {{{
     116        IssmStructDisp(io, this)
     117end# }}}
     118mutable struct WeertmanFriction <: AbstractFriction
     119        C::Vector{Float64}
     120        m::Vector{Float64}
     121end
     122
    139123mutable struct model
    140124        mesh::AbstractMesh
     
    145129        stressbalance::Stressbalance
    146130        constants::Constants
     131        results
     132        friction::AbstractFriction
    147133end
    148134function model() #{{{
    149         return model( Mesh2dTriangle(), Geometry(), Mask(), Materials(), Initialization(),Stressbalance(), Constants())
     135        return model( Mesh2dTriangle(), Geometry(), Mask(), Materials(), Initialization(),Stressbalance(), Constants(), [], BuddFriction())
    150136end#}}}
    151137function Base.show(io::IO, md::model)# {{{
     
    161147        @printf "%19s: %-26s -- %s\n" "stressbalance" typeof(md.stressbalance) "stress balance parameters"
    162148        @printf "%19s: %-26s -- %s\n" "constants" typeof(md.constants) "physical constants"
     149        @printf "%19s: %-26s -- %s\n" "friction" typeof(md.friction) "basal friction"
    163150
    164151end# }}}
  • issm/trunk-jpl/src/jl/md/utils.jl

    r26629 r26703  
    107107        return md
    108108end #}}}
     109function IssmStructDisp(io::IO, modelfield::Any) # {{{
     110        println(io,typeof(modelfield),":")
     111        for name in fieldnames(typeof(modelfield))
     112                a=getfield(modelfield,name)
     113                #print(io,"   $(name) = ")
     114                @printf "%19s: " name
     115                if isa(a,String)
     116                        println(io, a)
     117                elseif length(a)>1
     118                        if !isempty(a)
     119                                println(io, typeof(a), " of size ", size(a))
     120                        else
     121                                println(io,"empty")
     122                        end
     123                else
     124                        println(io, a)
     125                end
     126        end
     127end #}}}
  • issm/trunk-jpl/src/jl/solve/analyses/stressbalanceanalysis.jl

    r26702 r26703  
    176176        #Now split solution vector into x and y components
    177177        numnodes = 3
    178         vx= Vector{Float64}(undef,numnodes)
    179         vy= Vector{Float64}(undef,numnodes)
     178        vx  = Vector{Float64}(undef,numnodes)
     179        vy  = Vector{Float64}(undef,numnodes)
     180        vel = Vector{Float64}(undef,numnodes)
    180181        for i in 1:numnodes
    181182                vx[i]=values[2*i-1]
     
    183184                @assert isfinite(vx[i])
    184185                @assert isfinite(vy[i])
     186
     187                vel[i] =sqrt(vx[i]^2 + vy[i]^2)
    185188        end
    186189
    187         AddInput(element,VxEnum,vx,P1Enum)
    188         AddInput(element,VyEnum,vy,P1Enum)
     190        AddInput(element, VxEnum,  vx,  P1Enum)
     191        AddInput(element, VyEnum,  vy,  P1Enum)
     192        AddInput(element, VelEnum, vel, P1Enum)
    189193end#}}}
  • issm/trunk-jpl/src/jl/solve/femmodel.jl

    r26629 r26703  
    88        constraints::Vector{Constraint}
    99        #loads::Vector{Loads}
     10        results::Vector{Result}
    1011end#}}}
    1112
  • issm/trunk-jpl/src/jl/solve/modules.jl

    r26702 r26703  
    1212        nodes       = Vector{Node}(undef,0)
    1313        constraints = Vector{Constraint}(undef,0)
     14        results     = Vector{Result}(undef,0)
    1415        parameters  = Parameters(Dict{IssmEnum,Parameter}())
    1516        inputs      = Inputs(md.mesh.numberofelements,md.mesh.numberofvertices,Dict{IssmEnum,Input}())
     
    3637
    3738        #Build FemModel
    38         return FemModel(elements,vertices,nodes,parameters,inputs,constraints)
     39        return FemModel(elements, vertices, nodes, parameters, inputs, constraints, results)
    3940end# }}}
    4041function CreateElements(elements::Vector{Tria},md::model) #{{{
     
    8081        AddParam(parameters,md.materials.rho_freshwater,MaterialsRhoFreshwaterEnum)
    8182        AddParam(parameters,md.constants.g,ConstantsGEnum)
     83       
     84        #Set step and time, this will be overwritten if we run a transient
     85        AddParam(parameters,1,StepEnum)
     86        AddParam(parameters,0.0,TimeEnum)
    8287end# }}}
    8388function CreateInputs(inputs::Inputs,elements::Vector{Tria},md::model) #{{{
     
    8691        FetchDataToInput(md,inputs,elements,md.materials.rheology_B,MaterialsRheologyBEnum)
    8792        FetchDataToInput(md,inputs,elements,md.materials.rheology_n,MaterialsRheologyNEnum)
     93end# }}}
     94function OutputResultsx(femmodel::FemModel, md::model)# {{{
     95
     96        md.results = Dict("Stressbalance"=> femmodel.results)
     97
    8898end# }}}
    8999
     
    224234function RequestedOutputsx(femmodel::FemModel,outputlist::Vector{IssmEnum})# {{{
    225235
    226         error("not implemented")
    227 end# }}}
     236        #Get Step and Time from parameters
     237        step = FindParam(femmodel.parameters,StepEnum)
     238        time = FindParam(femmodel.parameters,TimeEnum)
     239       
     240        #Now fetch results
     241        for i in 1:length(outputlist)
     242
     243                #See if outputlist[i] is an input
     244                if outputlist[i]>InputsSTARTEnum && outputlist[i]<InputsENDEnum
     245
     246                        #Create Result
     247                        input  = GetInput(femmodel.inputs,outputlist[i])
     248                        result = Result(step, time, copy(input.values))
     249
     250                        #Add to femmodel.results dataset
     251                        push!(femmodel.results,result)
     252
     253                else
     254                        println("Output ",outputlist[i]," not supported yet")
     255                end
     256        end
     257end# }}}
  • issm/trunk-jpl/src/jl/solve/solve.jl

    r26702 r26703  
    99include("./elements.jl")
    1010include("./constraints.jl")
     11include("./results.jl")
    1112include("./matice.jl")
    1213include("./femmodel.jl")
     
    2021function IssmCore(md::model) #{{{
    2122
     23
    2224        #Construct FemModel
    2325        femmodel=ModelProcessor(md)
     
    2527        #Solve
    2628        analysis = StressbalanceAnalysis()
    27         Core(analysis,femmodel)
     29        Core(analysis, femmodel)
    2830
    2931        #Save output
    30         RequestedOutputsx(femmodel,[VxEnum,VyEnum])
    31         error("STOP")
     32        RequestedOutputsx(femmodel, [VxEnum,VyEnum,VelEnum])
     33
     34        #move results to md
     35        OutputResultsx(femmodel, md)
    3236
    3337end# }}}
  • issm/trunk-jpl/src/jl/test101.jl

    r26659 r26703  
    44
    55md = ISSM.model()
    6 #md = ISSM.triangle(md,"../../test/Exp/Square.exp",180000.)
    7 md = ISSM.triangle(md,"../../test/Exp/Square.exp",250000.)
     6md = ISSM.triangle(md,"../../test/Exp/Square.exp",50000.)
     7#md = ISSM.triangle(md,"../../test/Exp/Square.exp",250000.)
    88#md = ISSM.triangle(md,"../../test/Exp/Square.exp",1000.)
    99md = ISSM.setmask(md,"all","")
Note: See TracChangeset for help on using the changeset viewer.