Skip to content

Commit 9b84725

Browse files
authored
Merge pull request #24 from DJ4Earth/testoptimization
Testoptimization
2 parents 8fc5282 + c61ca40 commit 9b84725

File tree

3 files changed

+45
-10
lines changed

3 files changed

+45
-10
lines changed

Project.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,12 @@ ColorSchemes = "35d6a980-a343-548e-a6ea-1d62b119f2f4"
99
Enzyme = "7da242da-08ed-463a-9acd-ee780be4f1d9"
1010
Flux = "587475ba-b771-5e3f-ad9e-33799f191a9c"
1111
GLMakie = "e9467ef8-e4e7-5192-8a1a-b1aee30e663a"
12+
JSOSolvers = "10dff2fc-5484-5881-a0e0-c90441020f8a"
1213
MAT = "23992714-dd62-5051-b70f-ba57cb901cac"
1314
MadNLP = "2621e9c9-9eb4-46b1-8089-e8c72242dfb6"
1415
Makie = "ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a"
16+
ManualNLPModels = "30dfa513-9b2f-4fb3-9796-781eabac1617"
1517
Optimization = "7f7a1694-90dd-40f0-9382-eb1efda571ba"
16-
OptimizationOptimJL = "36348300-93cb-4f02-beb5-3c3902f8871e"
1718
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
1819
SparseArrays = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
1920
StatsBase = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91"
@@ -23,9 +24,11 @@ Triangulate = "f7e6ffb2-c36d-4f8f-a77e-16e897189344"
2324
ColorSchemes = "3.25"
2425
Enzyme = "0.13"
2526
Flux = "0.16"
27+
JSOSolvers = "0.14.1"
2628
MAT = "0.10"
2729
MadNLP = "0.8"
2830
Makie = "0.22"
31+
ManualNLPModels = "0.2.0"
2932
SparseArrays = "1"
3033
StatsBase = "0.34"
3134
Triangulate = "2.3"

src/usr/classes.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -357,10 +357,10 @@ function model(md::model; mesh::AbstractMesh=md.mesh, friction::AbstractFriction
357357
md.masstransport, md.transient, md.inversion, md.calving,
358358
md.levelset, md.frontalforcings)
359359
end#}}}
360-
function model(matmd::Dict,verbose::Bool=true) #{{{
360+
function model(matmd::Dict; verbose::Bool=true, friction::AbstractFriction=BuddFriction()) #{{{
361361

362362
#initialize output
363-
md = model()
363+
md = model(model(), friction=friction)
364364

365365
#Loop over all possible fields
366366
for name1 in keys(matmd)

test/testoptimization.jl

Lines changed: 39 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ using DJUICE
33
using MAT
44
using Test
55

6-
using Optimization, OptimizationOptimJL
6+
#using Optimization, OptimizationNLopt
7+
using ManualNLPModels, JSOSolvers
8+
using MadNLP
9+
710

811
#Load model from MATLAB file
912
file = matopen(joinpath(@__DIR__, "..", "data","temp.mat")) #SMALL model (35 elements)
@@ -26,13 +29,36 @@ md.inversion.dependent_string = ["SurfaceAbsVelMisfit"]
2629
α = md.inversion.independent
2730
∂J_∂α = zero(α)
2831

29-
femmodel=DJUICE.ModelProcessor(md, :StressbalanceSolution)
30-
n = length(α)
3132

32-
DJUICE.costfunction(α, femmodel)
33-
# test Enzyme autodiff only
34-
dfemmodel = Enzyme.Compiler.make_zero(Base.Core.Typeof(femmodel), IdDict(), femmodel)
35-
autodiff(set_runtime_activity(Enzyme.Reverse), DJUICE.costfunction, Active, Duplicated(α, ∂J_∂α), Duplicated(femmodel,dfemmodel))
33+
# cost function f
34+
f(x) = begin
35+
femmodel=DJUICE.ModelProcessor(md, :StressbalanceSolution)
36+
DJUICE.costfunction(x, femmodel)
37+
end
38+
39+
# Enzyme gradient g
40+
g!(gx, x) = begin
41+
femmodel=DJUICE.ModelProcessor(md, :StressbalanceSolution)
42+
dfemmodel = Enzyme.Compiler.make_zero(Base.Core.Typeof(femmodel), IdDict(), femmodel)
43+
Enzyme.autodiff(set_runtime_activity(Enzyme.Reverse), DJUICE.costfunction, Active, Duplicated(x, gx), Duplicated(femmodel,dfemmodel))
44+
gx
45+
end
46+
47+
nlp = NLPModel(
48+
α,
49+
f,
50+
grad = g!,
51+
)
52+
53+
#output = lbfgs(nlp)
54+
55+
results_qn = madnlp(
56+
nlp;
57+
linear_solver=LapackCPUSolver,
58+
hessian_approximation=MadNLP.CompactLBFGS,
59+
)
60+
61+
3662

3763
# use user defined grad, errors!
3864
#optprob = OptimizationFunction(DJUICE.costfunction, Optimization.AutoEnzyme(; mode=set_runtime_activity(Enzyme.Reverse)))
@@ -44,3 +70,9 @@ autodiff(set_runtime_activity(Enzyme.Reverse), DJUICE.costfunction, Active, Dupl
4470
#sol = Optimization.solve(prob, Optim.NelderMead())
4571
#sol = Optimization.solve(prob, Optimization.LBFGS(), maxiters = 100)
4672

73+
#using JuMP, Optim
74+
#m = Model(Optim.Optimizer);
75+
#set_optimizer_attribute(m, "method", LBFGS())
76+
#@variable(m, α)
77+
#@variable(m, femmodel)
78+
#@objective(m, Min, DJUICE.costfunction(α, femmodel))

0 commit comments

Comments
 (0)