@@ -3,7 +3,10 @@ using DJUICE
33using MAT
44using 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
912file = 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