Changeset 24905
- Timestamp:
- 05/27/20 09:54:32 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/test/SandBox/test2004.m
r24863 r24905 1 1 %Test Name: Earth_Antarctica_GIA 2 2 3 testagainst2002= 1;3 testagainst2002=0; 4 4 5 5 %Data paths: {{{ … … 29 29 })); 30 30 %}}} 31 %Ross: {{{ 32 sl.addbasin(basin('continent','antarctica','name','ross','proj',proj3031,'boundaries',{... 33 boundary('shppath',shppath,'shpfilename','SouthAntarctica','proj',proj3031),... 34 boundary('shppath',shppath,'shpfilename','RossIceShelf','proj',proj3031),... 35 boundary('shppath',shppath,'shpfilename','RossWestFront','proj',proj3031),... 36 boundary('shppath',shppath,'shpfilename','RossFront','proj',proj3031,'orientation','reverse')... 37 })); 38 %}}} 31 39 %HemisphereEast: {{{ 32 40 sl.addbasin(basin('continent','hemisphereeast','name','hemisphereeast','proj',laea(0,+90),'boundaries',{... %Australian projection lat,long 33 41 boundary('shppath',shppath,'shpfilename','HemisphereSplit','proj',proj4326),... 34 42 boundary('shppath',shppath,'shpfilename','SouthAntarctica','proj',proj3031),... 43 boundary('shppath',shppath,'shpfilename','RossFront','proj',proj3031),... 44 boundary('shppath',shppath,'shpfilename','RossWestFront','proj',proj3031),... 35 45 boundary('shppath',shppath,'shpfilename','EastAntarctica2','proj',proj3031,'orientation','reverse'),... 36 46 boundary('shppath',shppath,'shpfilename','NorthAntarctica','proj',proj3031)... … … 41 51 boundary('shppath',shppath,'shpfilename','NorthAntarctica','proj',proj3031),... 42 52 boundary('shppath',shppath,'shpfilename','EastAntarctica2','proj',proj3031),... 53 boundary('shppath',shppath,'shpfilename','RossWestFront','proj',proj3031),... 54 boundary('shppath',shppath,'shpfilename','RossIceShelf','proj',proj3031,'orientation','reverse'),... 43 55 boundary('shppath',shppath,'shpfilename','SouthAntarctica','proj',proj3031),... 44 56 boundary('shppath',shppath,'shpfilename','WestAntarctica2','proj',proj3031)... … … 61 73 %Go through basins and mesh: %{{{ 62 74 %meshing parameters: {{{ 63 hmin= 2000; hmax=10000; hmin=hmin*1000; hmax=hmax*1000;75 hmin=500; hmax=700; hmin=hmin*1000; hmax=hmax*1000; 64 76 tolerance=100; %tolerance of 100m on Earth position when mergin 3d meshes 65 77 threshold=5; 66 defaultoptions={'KeepVertices',0,'MaxCornerAngle',0.0000000001,'NoBoundaryRefin ment',1};78 defaultoptions={'KeepVertices',0,'MaxCornerAngle',0.0000000001,'NoBoundaryRefinement',1}; 67 79 alreadyloaded=0; 68 80 %}}} … … 104 116 md=sl.icecaps{ind}; bas=sl.basins{ind}; 105 117 %masks : %{{{ 106 %new type of mask:107 md.mask=maskpsl;108 109 %land and ocean:110 md.mask.land_levelset=ones(md.mesh.numberofvertices,1);111 md.mask.ocean_levelset=zeros(md.mesh.numberofvertices,1);112 113 118 %ice levelset from domain outlines: 114 119 md.mask.ice_levelset=-ones(md.mesh.numberofvertices,1); 115 pos=find(md.mesh.vertexonboundary); md.mask.ice_levelset(pos)=0; 116 117 %ice front: 118 pos=find(md.mask.ice_levelset==0); md.mask.ocean_levelset(pos)=-1; md.mask.land_levelset(pos)=1; 119 120 %now, glaciers: 121 md.mask.glacier_levelset=zeros(md.mesh.numberofvertices,1); 122 %}}} 123 %initial grounding line position: {{{ 120 124 121 if bas.isnameany('antarctica-grounded'), 125 126 122 md.mask.ocean_levelset=ones(md.mesh.numberofvertices,1); 127 123 end 128 if bas.isnameany('ronne'), 129 124 if bas.isnameany('ronne','ross'), 130 125 md.mask.ocean_levelset=-ones(md.mesh.numberofvertices,1); 131 132 %correction to land and ocean levelset: ice shelf is not on land!133 pos=find(md.mask.ice_levelset<=0 & md.mask.ocean_levelset<=0);134 md.mask.ocean_levelset(pos)=1;135 md.mask.land_levelset(pos)=-1;136 126 end 137 127 %}}} … … 153 143 late=sum(md.mesh.lat(md.mesh.elements),2)/3; 154 144 longe=sum(md.mesh.long(md.mesh.elements),2)/3; 155 pos=find(late <-80); 156 md.slr.deltathickness(pos)=-100; 145 pos=find(late <-85); 146 ratio=0.225314032985172/0.193045366574523; 147 %ratio= 1.276564103522540/.869956; 148 md.slr.deltathickness(pos)=-100*ratio; 157 149 else 158 delH=textread([modeldatapath '/AdhikariSciAdvTrends/AIS_delH_trend.txt']); 159 longAIS=delH(:,1); 160 latAIS=delH(:,2); 161 delHAIS=delH(:,3); 162 index=delaunay(latAIS,longAIS); 163 164 lat=md.mesh.lat; 165 long=md.mesh.long+360; 166 pos=find(long>360);long(pos)=long(pos)-360; 167 150 delH=textread('../Data/AIS_delH_trend.txt'); 151 longAIS=delH(:,1); latAIS=delH(:,2); delHAIS=delH(:,3); index=delaunay(longAIS,latAIS); 152 lat=md.mesh.lat; long=md.mesh.long+360; pos=find(long>360);long(pos)=long(pos)-360; 168 153 delHAIS=InterpFromMesh2d(index,longAIS,latAIS,delHAIS,long,lat); 169 154 northpole=find_point(md.mesh.long,md.mesh.lat,0,90); delHAIS(northpole)=0; 170 155 171 156 md.slr.deltathickness=delHAIS(md.mesh.elements)*[1;1;1]/3/100; 172 157 end … … 205 190 206 191 %mask: %{{{ 207 %new type of mask:208 md.mask=maskpsl;209 192 %Figure out mask from initial mesh: deal with land and ocean masks (land include grounded ice). %{{{ 210 193 %first, transform land element mask into vertex driven one. … … 226 209 ind2=[md.mesh.elements(landelsconocean,2); md.mesh.elements(landelsconocean,3); md.mesh.elements(landelsconocean,1)]; 227 210 228 h=waitbar(0,'Starting mask processing');229 211 230 212 %edge ind1 and ind2: 231 213 for i=1:length(ind1), 232 if ~mod(i,100),233 waitbar(i/length(ind1),h,sprintf('%.2i%% along...',i/length(ind1)*100));234 end235 236 214 els1=md.mesh.vertexconnectivity(ind1(i),1: md.mesh.vertexconnectivity(ind1(i),end)); 237 215 els2=md.mesh.vertexconnectivity(ind2(i),1: md.mesh.vertexconnectivity(ind2(i),end)); … … 244 222 end 245 223 end 246 md.mask.land_levelset=land_mask; 247 close(h); 248 %}}} 249 %work on ocean, glaciers and ice: {{{ 250 %ocean: opposite of land: 251 md.mask.ocean_levelset=-md.mask.land_levelset; 252 253 %initliaze: 254 md.mask.ice_levelset=ones(md.mesh.numberofvertices,1); 255 256 %grounded ice: 257 md.mask.ocean_levelset=-ones(md.mesh.numberofvertices,1); 258 259 md.mask.glacier_levelset=zeros(md.mesh.numberofvertices,1); 224 225 md.mask.ocean_levelset=land_mask; 226 md.mask.ice_levelset=ones(md.mesh.numberofvertices,1); %if there are glaciers, we'll adjust 227 228 if testagainst2002, 229 % {{{ 230 %greenland 231 pos=find(md.mesh.lat > 70 & md.mesh.lat < 80 & md.mesh.long>-60 & md.mesh.long<-30); 232 md.mask.ice_levelset(pos)=-1; 233 % }}} 234 end 260 235 261 236 % }}} … … 263 238 %slr loading/calibration: {{{ 264 239 265 if testagainst2002, 240 if testagainst2002, 241 % {{{ 266 242 md.slr.deltathickness=zeros(md.mesh.numberofelements,1); 267 243 %greenland … … 269 245 longe=sum(md.mesh.long(md.mesh.elements),2)/3; 270 246 pos=find(late > 70 & late < 80 & longe>-60 & longe<-30); 271 md.slr.deltathickness(pos)=-100; 247 ratio=.3823/.262344; 248 %md.slr.deltathickness(pos)=-100*ratio; 272 249 273 250 %correct mask: 274 md.mask.ice_levelset(md.mesh.elements(pos,:))=-1; 251 md.mask.ice_levelset(md.mesh.elements(pos,:))=-1; 252 % }}} 275 253 else 254 276 255 md.slr.deltathickness=zeros(md.mesh.numberofelements,1); 256 257 delH=textread('../Data/GIS_delH_trend.txt'); 258 longGIS=delH(:,1); latGIS=delH(:,2); delHGIS=delH(:,3); index=delaunay(longGIS,latGIS); 259 lat=md.mesh.lat; long=md.mesh.long+360; pos=find(long>360);long(pos)=long(pos)-360; 260 delHGIS=InterpFromMeshToMesh2d(index,longGIS,latGIS,delHGIS,long,lat); 261 delHGISe=delHGIS(md.mesh.elements)*[1;1;1]/3; 262 263 delH=textread('../Data/GLA_delH_trend_15regions.txt'); 264 longGLA=delH(:,1); latGLA=delH(:,2); delHGLA=sum(delH(:,3:end),2); index=delaunay(longGLA,latGLA); 265 lat=md.mesh.lat; long=md.mesh.long+360; pos=find(long>360);long(pos)=long(pos)-360; 266 delHGLA=InterpFromMeshToMesh2d(index,longGLA,latGLA,delHGLA,long,lat); 267 delHGLAe=delHGLA(md.mesh.elements)*[1;1;1]/3; 268 269 pos=find(delHGISe); 270 md.slr.deltathickness(pos)=delHGISe(pos)/100; 271 pos=find(delHGLAe); 272 md.slr.deltathickness(pos)=delHGLAe(pos)/100; 273 274 %adjust mask accordingly: 275 pos=find(md.slr.deltathickness); 276 flags=zeros(md.mesh.numberofvertices,1); 277 flags(md.mesh.elements(pos,:))=1; 278 pos=find(flags); 279 md.mask.ice_levelset(pos)=-1; 280 md.mask.ocean_levelset(pos)=1; 277 281 end 278 282 … … 288 292 md.slr.hydro_rate = zeros(md.mesh.numberofvertices,1); 289 293 290 %love numbers:291 md.slr.ocean_area_scaling=1;292 294 %}}} 293 295 %geometry: {{{ … … 301 303 end 302 304 % }}} 303 304 305 %%Assemble Earth in 3D {{{ 305 306 … … 326 327 sl.transfer('mask.ice_levelset'); 327 328 sl.transfer('mask.ocean_levelset'); 328 sl.transfer('mask.land_levelset');329 sl.transfer('mask.glacier_levelset');330 329 sl.transfer('geometry.bed'); 331 330 sl.transfer('mesh.lat'); … … 355 354 356 355 % }}} 357 358 356 %Solve Sea-level equation on Earth only: {{{ 359 357 md=sl.earth; %we don't do computations on ice sheets or land. … … 363 361 364 362 %elastic loading from love numbers: 365 nlov=10 01;366 md.slr.love_h = love_numbers('h' ); md.slr.love_h(nlov+1:end)=[];367 md.slr.love_k = love_numbers('k' ); md.slr.love_k(nlov+1:end)=[];368 md.slr.love_l = love_numbers('l' ); md.slr.love_l(nlov+1:end)=[];363 nlov=101; 364 md.slr.love_h = love_numbers('h','CM'); md.slr.love_h(nlov+1:end)=[]; 365 md.slr.love_k = love_numbers('k','CM'); md.slr.love_k(nlov+1:end)=[]; 366 md.slr.love_l = love_numbers('l','CM'); md.slr.love_l(nlov+1:end)=[]; 369 367 md.slr.ocean_area_scaling = 0; 368 md.slr.loop_increment=200; 370 369 371 370 %Miscellaneous … … 373 372 374 373 %New stuff 375 md.dsl.global_average_thermosteric_sea_level_change=[ 0;0];374 md.dsl.global_average_thermosteric_sea_level_change=[1.1+.38;0]; %steric + water storage AR5. 376 375 377 376 %Solution parameters … … 379 378 md.slr.abstol=1e-3; 380 379 md.slr.geodetic=1; 380 md.timestepping.time_step=1; 381 381 382 382 % max number of iteration reverted back to 10 (i.e., the original default value) … … 385 385 %eustatic run: 386 386 md.slr.rigid=0; md.slr.elastic=0;md.slr.rotation=0; 387 md.slr.requested_outputs= {'default',... 388 'SealevelriseDeltathickness','Sealevel','SealevelRSLRate','SealevelriseCumDeltathickness',... 389 'SealevelNEsaRate', 'SealevelUEsaRate', 'SealevelNGiaRate', 'SealevelUGiaRate','SealevelEustaticMask','SealevelEustaticOceanMask'}; 387 390 md=solve(md,'Sealevelrise'); 388 391 Seustatic=md.results.SealevelriseSolution.Sealevel;
Note:
See TracChangeset
for help on using the changeset viewer.