1 | %Test Name: EarthSlr
|
---|
2 |
|
---|
3 | %mesh earth:
|
---|
4 | md=model;
|
---|
5 | md.mesh=gmshplanet('radius',6.371012*10^3,'resolution',1000.); %500 km resolution mesh
|
---|
6 |
|
---|
7 | %parameterize slr solution:
|
---|
8 | %slr loading: {{{
|
---|
9 | md.solidearth.surfaceload.icethicknesschange=zeros(md.mesh.numberofelements,1);
|
---|
10 | md.solidearth.surfaceload.waterheightchange=zeros(md.mesh.numberofelements,1);
|
---|
11 | md.solidearth.sealevel=zeros(md.mesh.numberofvertices,1);
|
---|
12 | md.dsl.global_average_thermosteric_sea_level_change=[0;0];
|
---|
13 | md.dsl.sea_surface_height_change_above_geoid=zeros(md.mesh.numberofvertices+1,1);
|
---|
14 | md.dsl.sea_water_pressure_change_at_sea_floor=zeros(md.mesh.numberofvertices+1,1);
|
---|
15 | %US
|
---|
16 | late=sum(md.mesh.lat(md.mesh.elements),2)/3;
|
---|
17 | longe=sum(md.mesh.long(md.mesh.elements),2)/3;
|
---|
18 |
|
---|
19 | pos=find(late < (37+5) & late > (37-5) & longe>(-95-10) & longe<(-95+10));
|
---|
20 | md.solidearth.surfaceload.waterheightchange(pos)=-100;
|
---|
21 |
|
---|
22 | %elastic loading from love numbers:
|
---|
23 | md.solidearth.lovenumbers=lovenumbers('maxdeg',100);
|
---|
24 |
|
---|
25 | %}}}
|
---|
26 | %mask: {{{
|
---|
27 | mask=gmtmask(md.mesh.lat,md.mesh.long);
|
---|
28 | icemask=ones(md.mesh.numberofvertices,1);
|
---|
29 | pos=find(mask==0); icemask(pos)=-1;
|
---|
30 | pos=find(sum(mask(md.mesh.elements),2)<3); icemask(md.mesh.elements(pos,:))=-1;
|
---|
31 | md.mask.ice_levelset=icemask;
|
---|
32 | md.mask.ocean_levelset=-icemask;
|
---|
33 |
|
---|
34 | %make sure that the elements that have loads are fully grounded:
|
---|
35 | pos=find(md.solidearth.surfaceload.waterheightchange);
|
---|
36 | md.mask.ocean_levelset(md.mesh.elements(pos,:))=1;
|
---|
37 | md.mask.ice_levelset(md.mesh.elements(pos,:))=1;
|
---|
38 |
|
---|
39 | % }}}
|
---|
40 |
|
---|
41 | md.solidearth.settings.ocean_area_scaling=0;
|
---|
42 |
|
---|
43 | %Geometry for the bed, arbitrary:
|
---|
44 | md.geometry.bed=-ones(md.mesh.numberofvertices,1);
|
---|
45 |
|
---|
46 | %Materials:
|
---|
47 | md.materials=materials('hydro');
|
---|
48 |
|
---|
49 | %Hydro load:
|
---|
50 |
|
---|
51 |
|
---|
52 | %Miscellaneous
|
---|
53 | md.miscellaneous.name='test2002';
|
---|
54 |
|
---|
55 | %Solution parameters
|
---|
56 | md.solidearth.settings.reltol=NaN;
|
---|
57 | md.solidearth.settings.abstol=1e-3;
|
---|
58 | md.solidearth.settings.computesealevelchange=1;
|
---|
59 |
|
---|
60 | % max number of iteration reverted back to 10 (i.e., the original default value)
|
---|
61 | md.solidearth.settings.maxiter=10;
|
---|
62 |
|
---|
63 | %eustatic run:
|
---|
64 | md.solidearth.settings.rigid=0; md.solidearth.settings.elastic=0;md.solidearth.settings.rotation=0;
|
---|
65 | md=solve(md,'Sealevelrise');
|
---|
66 | Seustatic=md.results.SealevelriseSolution.Sealevel;
|
---|
67 |
|
---|
68 | %eustatic + rigid run:
|
---|
69 | md.solidearth.settings.rigid=1; md.solidearth.settings.elastic=0;md.solidearth.settings.rotation=0;
|
---|
70 | md=solve(md,'Sealevelrise');
|
---|
71 | Srigid=md.results.SealevelriseSolution.Sealevel;
|
---|
72 |
|
---|
73 | %eustatic + rigid + elastic run:
|
---|
74 | md.solidearth.settings.rigid=1; md.solidearth.settings.elastic=1;md.solidearth.settings.rotation=0;
|
---|
75 | md=solve(md,'Sealevelrise');
|
---|
76 | Selastic=md.results.SealevelriseSolution.Sealevel;
|
---|
77 |
|
---|
78 | %eustatic + rigid + elastic + rotation run:
|
---|
79 | md.solidearth.settings.rigid=1; md.solidearth.settings.elastic=1; md.solidearth.settings.rotation=1;
|
---|
80 | md=solve(md,'Sealevelrise');
|
---|
81 | Srotation=md.results.SealevelriseSolution.Sealevel;
|
---|
82 |
|
---|
83 | %Fields and tolerances to track changes
|
---|
84 | field_names ={'Eustatic','Rigid','Elastic','Rotation'};
|
---|
85 | field_tolerances={1e-13,1e-13,1e-13,1e-13};
|
---|
86 | field_values={Seustatic,Srigid,Selastic,Srotation};
|
---|