source: issm/trunk-jpl/examples/SlrFarrell/runme.m@ 26258

Last change on this file since 26258 was 26258, checked in by adhikari, 4 years ago

CHG: slrGRACE and associated function updated up to steps 5

File size: 5.2 KB
Line 
1clear all;
2
3steps=[4];
4
5if any(steps==1)
6 disp(' Step 1: Global mesh creation');
7
8 numrefine=1;
9 resolution=150*1e3; % inital resolution [m]
10 radius = 6.371012*10^6; % mean radius of Earth, m
11 mindistance_coast=150*1e3; % coastal resolution [m]
12 mindistance_land=300*1e3; % resolution on the continents [m]
13 maxdistance=600*1e3; % max element size (on mid-oceans) [m]
14
15 md=model;
16 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3); % attributes in [km]
17
18 for i=1:numrefine,
19 ocean_mask_levelset=gmtmask(md.mesh.lat,md.mesh.long);
20
21 distance=zeros(md.mesh.numberofvertices,1);
22
23 pos=find(~ocean_mask_levelset); coaste.lat=md.mesh.lat(pos); coaste.long=md.mesh.long(pos);
24 pos=find(ocean_mask_levelset); coasto.lat=md.mesh.lat(pos); coasto.long=md.mesh.long(pos);
25
26 for j=1:md.mesh.numberofvertices
27 phi1=md.mesh.lat(j)/180*pi; lambda1=md.mesh.long(j)/180*pi;
28 if ocean_mask_levelset(j),
29 phi2=coaste.lat/180*pi; lambda2=coaste.long/180*pi;
30 deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1);
31 d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2));
32 else
33 phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi;
34 deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1);
35 d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2));
36 end
37 distance(j)=min(d);
38 end
39 pos=find(distance<mindistance_coast); distance(pos)=mindistance_coast;
40
41 pos2=find(ocean_mask_levelset~=1 & distance>mindistance_land);
42 distance(pos2)=mindistance_land;
43
44 dist=min(maxdistance,distance);
45 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3,'refine',md.mesh,'refinemetric',dist);
46 end
47
48 ocean_mask=gmtmask(md.mesh.lat,md.mesh.long);
49 pos = find(ocean_mask==0);
50 md.mask.ocean_levelset=-ones(md.mesh.numberofvertices,1);
51 md.mask.ocean_levelset(pos)=1;
52
53 save ./Models/SlrFarrell_Mesh md;
54
55 plotmodel (md,'data',md.mask.ocean_levelset,'edgecolor','k');
56end
57
58if any(steps==2)
59 disp(' Step 2: Define source as in Farrell, 1972, Figure 1');
60 md = loadmodel('./Models/SlrFarrell_Mesh');
61
62 md.solidearth.surfaceload.icethicknesschange=zeros(md.mesh.numberofvertices,1);
63 md.mask.ice_levelset=ones(md.mesh.numberofvertices,1);
64
65 pos = find(md.mask.ocean_levelset==-1);
66 md.solidearth.initialsealevel=zeros(md.mesh.numberofvertices,1);
67 md.solidearth.initialsealevel(pos)=1; % 1 m SLR everywhere
68 md.dsl.global_average_thermosteric_sea_level_change=[0;0];
69 md.dsl.sea_surface_height_change_above_geoid=zeros(md.mesh.numberofvertices+1,1);
70 md.dsl.sea_water_pressure_change_at_sea_floor=zeros(md.mesh.numberofvertices+1,1);
71
72 save ./Models/SlrFarrell_Loads md;
73
74 plotmodel (md,'data',md.solidearth.initialsealevel,'view',[90 90],'title#all','Initial sea-level [m]');
75end
76
77if any(steps==3)
78 disp(' Step 3: Parameterization');
79 md = loadmodel('./Models/SlrFarrell_Loads');
80
81 md.solidearth.lovenumbers=lovenumbers('maxdeg',10000);
82
83 %md.mask.ice_levelset = ones(md.mesh.numberofvertices,1);
84 %md.mask.ocean_levelset = -ones(md.mesh.numberofvertices,1);
85 %pos=find(md.mesh.lat <-80);
86 %md.mask.ice_levelset(pos(1))=-1; % ice yes!
87 %md.mask.ocean_levelset(pos(1))=1; % ice grounded!
88
89 % arbitary to pass consistency check.
90 md.geometry.bed=-ones(md.mesh.numberofvertices,1);
91 md.geometry.surface=ones(md.mesh.numberofvertices,1);
92 md.geometry.base=md.geometry.bed;
93 md.geometry.thickness=md.geometry.surface-md.geometry.base;
94
95 md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1);
96 md.materials.rheology_B=paterson(md.initialization.temperature);
97 md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
98
99 md.miscellaneous.name='SlrFarrell';
100
101 save ./Models/SlrFarrell_Parameterization md;
102end
103
104if any(steps==4)
105 disp(' Step 4: Solve Slr solver');
106 md = loadmodel('./Models/SlrFarrell_Parameterization');
107
108 md.cluster=generic('name',oshostname(),'np',3);
109 md.verbose=verbose('111111111');
110
111 md.solidearth.settings.reltol = 0.1/100; % percent change in solution
112
113 md=solve(md,'Slr');
114
115 save ./Models/SlrFarrell_Solution md;
116end
117
118if any(steps==5)
119 disp(' Step 5: Plot solutions');
120 md = loadmodel('./Models/SlrFarrell_Solution');
121
122 sol = md.results.SealevelriseSolution.Sealevel*100; % per cent normalized by GMSL (which 1 m)
123
124 res = 1; % [degree]
125
126 [lat_grid, lon_grid] = meshgrid(linspace(-90,90,180/res), linspace(-180,180,360/res));
127 sol_grid = zeros(size(lat_grid));
128
129 F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol);
130 F.Method = 'linear';
131 F.ExtrapolationMethod = 'linear';
132
133 sol_grid = F(lat_grid, lon_grid);
134 sol_grid(isnan(sol_grid))=0;
135 sol_grid(lat_grid>85 & sol_grid==0)=NaN;
136
137 set(0,'DefaultAxesFontSize',18,'DefaultAxesLineWidth',1,'DefaultTextFontSize',18,'DefaultLineMarkerSize',8)
138 figure1=figure('Position', [100, 100, 1000, 500]);
139 gcf; load coast; cla;
140 pcolor(lon_grid,lat_grid,sol_grid); shading flat; hold on;
141 [C,h]=contour(lon_grid,lat_grid,sol_grid,[96 98 100 102 104 105],'-k','linewidth',2);
142 clabel(C,h,'FontSize',18,'Color','red','LabelSpacing',500);
143 geoshow(lat,long,'DisplayType','polygon','FaceColor',[.82 .82 .82]);
144 plot(long,lat,'k'); hold off;
145 c1=colorbar;
146 colormap(flipud(haxby));
147 caxis([96 105]);
148 xlim([-170 170]);
149 ylim([-85 85]);
150 grid on;
151 title('Relative sea-level [% of GMSL]');
152 set(gcf,'color','w');
153 %export_fig('Fig5.pdf');
154end
Note: See TracBrowser for help on using the repository browser.