Changeset 26518


Ignore:
Timestamp:
10/28/21 06:59:39 (3 years ago)
Author:
Mathieu Morlighem
Message:

CHG: minor

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

Legend:

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

    r26500 r26518  
    44abstract type AbstractMesh end
    55mutable struct Mesh2dTriangle <: AbstractMesh
    6         numberofvertices::Int32
    7         numberofelements::Int32
     6        numberofvertices::Int64
     7        numberofelements::Int64
    88        x::Vector{Float64}
    99        y::Vector{Float64}
    10         elements::Matrix{Int32}
     10        elements::Matrix{Int64}
    1111end
    1212function Mesh2dTriangle() #{{{
    13         return Mesh2dTriangle( 0, 0, Vector{Float64}(undef,0), Vector{Float64}(undef, 0), Matrix{Int32}(undef, 0, 0))
     13        return Mesh2dTriangle( 0, 0, Vector{Float64}(undef,0), Vector{Float64}(undef, 0), Matrix{Int64}(undef, 0, 0))
    1414end# }}}
    1515function Base.show(io::IO, this::Mesh2dTriangle)# {{{
     
    2727end# }}}
    2828mutable struct Mesh3dPrism{T} <: AbstractMesh
    29         numberofvertices::Int32
    30         numberofelements::Int32
    31         numberoflayers::Int32
     29        numberofvertices::Int64
     30        numberofelements::Int64
     31        numberoflayers::Int64
    3232        x::Vector{Float64}
    3333        y::Vector{Float64}
    3434        z::Vector{Float64}
    35         elements::Matrix{Int32}
     35        elements::Matrix{Int64}
    3636end
    3737function Mesh3dPrism() #{{{
    38         return Mesh3dPrism( 0, 0, 0, Vector{Float64}(undef,0), Vector{Float64}(undef,0), Vector{Float64}(undef,0), Matrix{Int32}(undef, 0, 0))
     38        return Mesh3dPrism( 0, 0, 0, Vector{Float64}(undef,0), Vector{Float64}(undef,0), Vector{Float64}(undef,0), Matrix{Int64}(undef, 0, 0))
    3939end# }}}
    4040mutable struct Geometry
     
    6767        reltol::Float64
    6868        abstol::Float64
    69         maxiter::Int32
     69        maxiter::Int64
    7070end
    7171function Stressbalance() #{{{
    7272        return Stressbalance( Vector{Float64}(undef,0), Vector{Float64}(undef,0), 0., 0., 0., 0)
     73end# }}}
     74mutable struct Constants
     75        g::Float64
     76        yts::Float64
     77end
     78function Constants() #{{{
     79        return Constants( 9.81,  365*24*3600.)
    7380end# }}}
    7481mutable struct Materials
     
    8188        thermalconductivity::Float64
    8289        temperateiceconductivity::Float64
    83         effectiveconductivity_averaging::Int32
     90        effectiveconductivity_averaging::Int64
    8491        meltingpoint::Float64
    8592        beta::Float64
     
    101108        initialization::Initialization
    102109        stressbalance::Stressbalance
     110        constants::Constants
    103111end
    104112function model() #{{{
    105         return model( Mesh2dTriangle(), Geometry(), Mask(), Materials(), Initialization(),Stressbalance())
     113        return model( Mesh2dTriangle(), Geometry(), Mask(), Materials(), Initialization(),Stressbalance(), Constants())
    106114end#}}}
    107115function Base.show(io::IO, md::model)# {{{
     
    116124        @printf "%19s: %-22s -- %s\n" "initialization" typeof(md.initialization) "initial state"
    117125        @printf "%19s: %-22s -- %s\n" "stressbalance" typeof(md.stressbalance) "stress balance parameters"
     126        @printf "%19s: %-22s -- %s\n" "constants" typeof(md.constants) "physical constants"
    118127
    119128end# }}}
  • issm/trunk-jpl/src/jl/solve.jl

    r26500 r26518  
    2525
    2626end#}}}
     27function AddParam(parameters::Parameters,value::Int64,enum::IssmEnum) #{{{
     28
     29        parameters.lookup[enum] = IntParam(enum,value)
     30
     31end#}}}
    2732
    2833abstract type Input end
     
    3338struct IntInput <: Input#{{{
    3439        enum::IssmEnum
    35         values::Matrix{Int32}
     40        values::Matrix{Int64}
    3641end# }}}
    3742struct ElementInput <: Input#{{{
     
    4146end# }}}
    4247mutable struct Inputs #{{{
    43         numberofelements::Int32
    44         numberofvertices::Int32
     48        numberofelements::Int64
     49        numberofvertices::Int64
    4550        lookup::Dict{IssmEnum,Input}
    4651end# }}}
    47 function SetInput(inputs::Inputs,enum::IssmEnum,index::Int32,value::Bool) #{{{
     52function SetInput(inputs::Inputs,enum::IssmEnum,index::Int64,value::Bool) #{{{
    4853
    4954        #Does this input exist
     
    6368        input.values[index] = value
    6469end#}}}
    65 function SetTriaInput(inputs::Inputs,enum::IssmEnum,interp::IssmEnum,index::Int32,value::Float64) #{{{
     70function SetTriaInput(inputs::Inputs,enum::IssmEnum,interp::IssmEnum,index::Int64,value::Float64) #{{{
    6671
    6772        #Does this input exist
     
    8691        input.values[index] = value
    8792end#}}}
    88 function SetTriaInput(inputs::Inputs,enum::IssmEnum,interp::IssmEnum,indices::Vector{Int32},values::Vector{Float64}) #{{{
     93function SetTriaInput(inputs::Inputs,enum::IssmEnum,interp::IssmEnum,indices::Vector{Int64},values::Vector{Float64}) #{{{
    8994
    9095        #Does this input exist
     
    109114
    110115mutable struct Node #{{{
    111         id::Int32
    112         sid::Int32
     116        id::Int64
     117        sid::Int64
    113118        indexingupdate::Bool
    114         gsize::Int32
    115         gdoflist::Vector{Int32}
    116         fdoflist::Vector{Int32}
    117         sdoflist::Vector{Int32}
     119        gsize::Int64
     120        gdoflist::Vector{Int64}
     121        fdoflist::Vector{Int64}
     122        sdoflist::Vector{Int64}
    118123        svalues::Vector{Float64}
    119124end# }}}
    120125struct Constraint #{{{
    121         id::Int32
    122         nodeid::Int32
     126        id::Int64
     127        nodeid::Int64
    123128        dof::Int8
    124129        value::Float64
    125130end# }}}
    126131mutable struct Vertex#{{{
    127         sid::Int32
     132        sid::Int64
    128133        x::Float64
    129134        y::Float64
    130135end# }}}
    131136mutable struct Tria #{{{
    132         sid::Int32
    133         pid::Int32
     137        sid::Int64
     138        pid::Int64
    134139        #vertexids::Int64[3]
    135140        #vertices::Vertex[3]
    136         vertexids::Vector{Int32}
     141        vertexids::Vector{Int64}
     142        vertices::Vector{Vertex}
     143        nodeids::Vector{Int64}
     144        nodes::Vector{Node}
     145        parameters::Parameters
     146        inputs::Inputs
     147end# }}}
     148mutable struct FemModel #{{{
     149        elements::Vector{Tria}
    137150        vertices::Vector{Vertex}
    138151        nodes::Vector{Node}
    139152        parameters::Parameters
    140153        inputs::Inputs
    141 end# }}}
    142 mutable struct FemModel #{{{
    143         elements::Vector{Tria}
    144         vertices::Vector{Vertex}
    145         nodes::Vector{Node}
    146         parameters::Vector{Parameter}
    147         inputs::Inputs
    148154        constraints::Vector{Constraint}
    149155        #loads::Vector{Loads}
    150156end#}}}
    151157struct GaussTria #{{{
    152         numgauss::Int32
     158        numgauss::Int64
    153159        weights::Vector{Float64}
    154160        coords1::Vector{Float64}
     
    156162        coords3::Vector{Float64}
    157163end #}}}
    158 function GaussTria(order::Int32) #{{{
     164function GaussTria(order::Int64) #{{{
    159165
    160166        #=Gauss quadrature points for the triangle.
     
    187193end# }}}
    188194
     195abstract type Analysis end
     196struct StressbalanceAnalysis#{{{
     197end #}}}
     198
    189199#Modules
    190200function FetchDataToInput(md::model,inputs::Inputs,elements::Vector{Tria},data::Vector{Float64},enum::IssmEnum) #{{{
     
    199209
    200210        #Solve
     211        error("not there yet")
    201212        Stressbalance(femmodel)
    202213
     
    207218
    208219        #Initialize structures
    209         elements   = Vector{Tria}(undef,0)
    210         vertices   = Vector{Vertex}(undef,0)
    211         parameters = Parameters(Dict{IssmEnum,Parameter}())
    212         inputs     = Inputs(md.mesh.numberofelements,md.mesh.numberofvertices,Dict{IssmEnum,Input}())
     220        elements    = Vector{Tria}(undef,0)
     221        vertices    = Vector{Vertex}(undef,0)
     222        nodes       = Vector{Node}(undef,0)
     223        constraints = Vector{Constraint}(undef,0)
     224        parameters  = Parameters(Dict{IssmEnum,Parameter}())
     225        inputs      = Inputs(md.mesh.numberofelements,md.mesh.numberofvertices,Dict{IssmEnum,Input}())
    213226
    214227        #Create  elements, vertices and materials (independent of the analysis)
     
    219232
    220233        #Now create analysis specific data structure
    221         StressbalanceUpdateParameters(parameters,md)
     234        analysis = StressbalanceAnalysis()
     235        UpdateParameters(analysis,parameters,md)
     236        CreateNodes(analysis,nodes,md)
     237        UpdateElements(analysis,elements,inputs,md)
     238        CreateConstraints(analysis,constraints,md)
     239
     240        #Build FemModel
     241        return FemModel(elements,vertices,nodes,parameters,inputs,constraints)
    222242end# }}}
    223243function CreateElements(elements::Vector{Tria},md::model) #{{{
     
    233253        count = 0
    234254        for i in 1:md.mesh.numberofelements
    235                 push!(elements,Tria(i,count,md.mesh.elements[i,:],tempvertices,tempnodes,tempparams,tempinputs))
     255                push!(elements,Tria(i,count,md.mesh.elements[i,:],tempvertices,Vector{Int64}(undef,0),tempnodes,tempparams,tempinputs))
    236256        end
    237257
     
    262282
    263283        #Only assume we have Matice for now
    264         FetchDataToInput(md,inputs,elements,md.materials.rheology_B,MaterialsRheologyBEnum);
    265         FetchDataToInput(md,inputs,elements,md.materials.rheology_n,MaterialsRheologyNEnum);
    266 end# }}}
     284        FetchDataToInput(md,inputs,elements,md.materials.rheology_B,MaterialsRheologyBEnum)
     285        FetchDataToInput(md,inputs,elements,md.materials.rheology_n,MaterialsRheologyNEnum)
     286end# }}}
     287
     288#Analyses
     289function UpdateParameters(analysis::StressbalanceAnalysis,parameters::Parameters,md::model) #{{{
     290        AddParam(parameters,md.stressbalance.restol,StressbalanceRestolEnum)
     291        AddParam(parameters,md.stressbalance.reltol,StressbalanceReltolEnum)
     292        AddParam(parameters,md.stressbalance.abstol,StressbalanceAbstolEnum)
     293        AddParam(parameters,md.stressbalance.maxiter,StressbalanceMaxiterEnum)
     294end#}}}
     295function CreateNodes(analysis::StressbalanceAnalysis,nodes::Vector{Node},md::model) #{{{
     296
     297        numdof = 2
     298        for i in 1:md.mesh.numberofvertices
     299                push!(nodes,Node(i,i,true,numdof,Vector{Int64}(undef,numdof), Vector{Int64}(undef,numdof), Vector{Int64}(undef,numdof), zeros(numdof)))
     300        end
     301end#}}}
     302function UpdateElements(analysis::StressbalanceAnalysis,elements::Vector{Tria}, inputs::Inputs, md::model) #{{{
     303
     304        #Provide node indices to element
     305        for i in 1:md.mesh.numberofvertices
     306                Update(elements[i],inputs,i,md,P1Enum)
     307        end
     308
     309        #Add necessary inputs to perform this analysis
     310        FetchDataToInput(md,inputs,elements,md.materials.rheology_B,MaterialsRheologyBEnum)
     311        FetchDataToInput(md,inputs,elements,md.geometry.thickness,ThicknessEnum)
     312        FetchDataToInput(md,inputs,elements,md.geometry.surface,SurfaceEnum)
     313        FetchDataToInput(md,inputs,elements,md.geometry.base,BaseEnum)
     314        FetchDataToInput(md,inputs,elements,md.initialization.vx./md.constants.yts,VxEnum)
     315        FetchDataToInput(md,inputs,elements,md.initialization.vy./md.constants.yts,VyEnum)
     316
     317end#}}}
     318function CreateConstraints(analysis::StressbalanceAnalysis,constraints::Vector{Constraint},md::model) #{{{
     319        error("stop")
     320end#}}}
    267321
    268322#Element functions
     
    276330        end
    277331end #}}}
     332function Update(element::Tria,inputs::Inputs,index::Int64,md::model,finiteelement::IssmEnum) #{{{
     333
     334        if finiteelement==P1Enum
     335                numnodes = 3
     336                element.nodeids    = Vector{Int64}(undef,numnodes)
     337                element.nodeids[1] = md.mesh.elements[index,1]
     338                element.nodeids[2] = md.mesh.elements[index,2]
     339                element.nodeids[3] = md.mesh.elements[index,3]
     340        else
     341                error("not supported yet")
     342        end
     343end #}}}
Note: See TracChangeset for help on using the changeset viewer.