Skip to content

Commit 8eabd9d

Browse files
committed
ADD: an example for computing sensitivity of basal friction in PIG
1 parent 5f922b4 commit 8eabd9d

File tree

3 files changed

+98
-0
lines changed

3 files changed

+98
-0
lines changed
3.21 MB
Binary file not shown.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
clear
2+
close all
3+
steps = [2];
4+
clustername = 'totten';
5+
saveflag = 0;
6+
%Cluster parameters{{{
7+
if strcmpi(clustername, 'andes')
8+
cluster=andes('numnodes',1,'cpuspernode',64, 'memory', 32);
9+
cluster.time = jobTime;
10+
waitonlock = 0;
11+
elseif strcmpi(clustername, 'frontera')
12+
%cluster=frontera('numnodes', 1,'cpuspernode',56,'queue','flex');
13+
cluster=frontera('numnodes',3,'cpuspernode',56);
14+
cluster.time = jobTime;
15+
waitonlock = 0;
16+
else
17+
cluster=generic('name',oshostname(),'np', 64);
18+
waitonlock = Inf;
19+
end
20+
clear clustername
21+
org=organizer('repository',['./Models'],'prefix',['PIG_'],'steps',steps); clear steps;
22+
%}}}
23+
24+
if perform(org, 'Sensitivity')% {{{
25+
26+
md = loadmodel(org,['Control_drag']);
27+
28+
saveasstruct(md, './Models/PIG_Control_drag_dJUICE.mat')
29+
30+
md.friction.coefficient = 30*ones(size(md.friction.coefficient));
31+
32+
md.inversion.iscontrol = 1;
33+
md.inversion.cost_functions=[101];
34+
md.inversion.cost_functions_coefficients=ones(md.mesh.numberofvertices,1);
35+
md.inversion.cost_functions_coefficients(:,1)=1;
36+
md.inversion.maxsteps = 1;
37+
md.inversion.maxiter=1;
38+
md.inversion.incomplete_adjoint=0;
39+
40+
md=solve(md,'Stressbalance');
41+
%plotmodel(md, 'data', abs(md.results.StressbalanceSolution.Gradient1), 'caxis', [0,5e-3],'colormap','jet')
42+
43+
savemodel(org,md);
44+
end %}}}
45+
if perform(org, 'Compare_with_DJUICE')% {{{
46+
md = loadmodel(org,['Sensitivity']);
47+
48+
djuice = load('./Models/PIG_djuice_gradient.mat');
49+
50+
figure('Position',[0,400,1200,400])
51+
plotmodel(md, 'data', (md.results.StressbalanceSolution.Gradient1), ...
52+
'data',djuice.Gradient1, ...
53+
'data', md.results.StressbalanceSolution.Gradient1-djuice.Gradient1,...
54+
'colormap#3','bluewhitered',...
55+
'caxis#3',[-1e-4,1e-4],'caxis#1,2',[-1e-2,1e-2],...
56+
'title', 'ISSM Sensitivity', 'title','DJUICE Sensitivity', 'title','ISSM - DJUICE',...
57+
'nlines', 1,...
58+
'xlabel#all','x','ylabel#all','y')
59+
60+
set(gcf,'color','w');
61+
if saveflag
62+
export_fig('ISSM_vs_DJUICE_Stressbalance.pdf')
63+
end
64+
end % }}}
65+
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using DJUICE
2+
using MAT
3+
using GLMakie
4+
using JLD2
5+
6+
#Load model from MATLAB file
7+
file = matopen(joinpath(@__DIR__, "./Models/","PIG_Control_drag_dJUICE.mat"))
8+
9+
mat = read(file, "md")
10+
close(file)
11+
md = model(mat)
12+
13+
#make model run faster
14+
md.stressbalance.maxiter = 100
15+
16+
#Now call AD!
17+
md.inversion.iscontrol = 1
18+
md.friction.coefficient = 30*ones(size(md.friction.coefficient))
19+
md.inversion.independent = md.friction.coefficient
20+
md.inversion.independent_string = "FrictionCoefficient"
21+
md.inversion.dependent_string = ["SurfaceAbsVelMisfit"]
22+
23+
md = solve(md, :sb)
24+
25+
# save md
26+
@save "./Models/PIG_Sensitivity.jld2" md
27+
28+
# the gradient
29+
g = md.results["StressbalanceSolution"]["Gradient"]
30+
31+
# save results to MAT for postproc
32+
filename = "./Models/PIG_djuice_gradient.mat"
33+
matwrite(filename, Dict("Gradient1" => g))

0 commit comments

Comments
 (0)