source:
issm/oecreview/Archive/25834-26739/ISSM-26257-26258.diff
Last change on this file was 26740, checked in by , 3 years ago | |
---|---|
File size: 13.0 KB |
-
../trunk-jpl/examples/Functions/grace.m
1 1 % map grace loads in meters [m] of water equivalent height 2 function water_load = grace(index,lat,lon,tmin,tmax );2 function water_load = grace(index,lat,lon,tmin,tmax,onvertex); 3 3 4 4 %compute centroids using (lat,lon) data {{{ 5 5 ne = length(index); % number of elements 6 nv = length(lat); % number of vertices 7 % [lat,lon] \in [-90:90,-180,180]; 8 lat_vertex_0=lat; long_vertex_0=lon; 6 9 % lat -> [0,180]; long -> [0,360] to compute centroids 7 10 lat=90-lat; 8 11 lon(lon<0)=180+(180+lon(lon<0)); … … 115 118 time_yr=time_yr(pos1:pos2); 116 119 load_grace_plus=load_grace_plus(pos1:pos2,:); 117 120 num_yr=length(time_yr); 118 water_load_0=zeros(ne,num_yr); 121 if onvertex 122 water_load_0=zeros(nv,num_yr); 123 else 124 water_load_0=zeros(ne,num_yr); 125 end 119 126 120 127 for jj=1:num_yr 121 water_load_0(:,jj) = griddata(lat_grace_plus,lon_grace_plus,load_grace_plus(jj,:),lat_element_0,lon_element); 128 if onvertex 129 water_load_0(:,jj) = griddata(lat_grace_plus,lon_grace_plus,load_grace_plus(jj,:),lat_vertex_0,lon); 130 else 131 water_load_0(:,jj) = griddata(lat_grace_plus,lon_grace_plus,load_grace_plus(jj,:),lat_element_0,lon_element); 132 end 122 133 disp([num2str(jj),' of ',num2str(num_yr),' months done!']); 123 134 end 124 135 -
../trunk-jpl/examples/SlrFarrell/runme.m
1 1 clear all; 2 2 3 steps=[ 1:5];3 steps=[4]; 4 4 5 try6 % [1:5]7 8 5 if any(steps==1) 9 6 disp(' Step 1: Global mesh creation'); 10 7 … … 19 16 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3); % attributes in [km] 20 17 21 18 for i=1:numrefine, 22 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long);19 ocean_mask_levelset=gmtmask(md.mesh.lat,md.mesh.long); 23 20 24 21 distance=zeros(md.mesh.numberofvertices,1); 25 22 26 pos=find(~ md.mask.ocean_levelset); coaste.lat=md.mesh.lat(pos); coaste.long=md.mesh.long(pos);27 pos=find( md.mask.ocean_levelset); coasto.lat=md.mesh.lat(pos); coasto.long=md.mesh.long(pos);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); 28 25 29 26 for j=1:md.mesh.numberofvertices 30 27 phi1=md.mesh.lat(j)/180*pi; lambda1=md.mesh.long(j)/180*pi; 31 if md.mask.ocean_levelset(j),28 if ocean_mask_levelset(j), 32 29 phi2=coaste.lat/180*pi; lambda2=coaste.long/180*pi; 33 30 deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1); 34 31 d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2)); … … 41 38 end 42 39 pos=find(distance<mindistance_coast); distance(pos)=mindistance_coast; 43 40 44 pos2=find( md.mask.ocean_levelset~=1 & distance>mindistance_land);41 pos2=find(ocean_mask_levelset~=1 & distance>mindistance_land); 45 42 distance(pos2)=mindistance_land; 46 43 47 44 dist=min(maxdistance,distance); … … 48 45 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3,'refine',md.mesh,'refinemetric',dist); 49 46 end 50 47 51 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 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 52 53 53 save ./Models/SlrFarrell_Mesh md; 54 54 … … 59 59 disp(' Step 2: Define source as in Farrell, 1972, Figure 1'); 60 60 md = loadmodel('./Models/SlrFarrell_Mesh'); 61 61 62 md.slr.sealevel=md.mask.ocean_levelset; % 1 m SLR everywhere 63 md.slr.deltathickness=zeros(md.mesh.numberofelements,1); 64 md.slr.steric_rate=zeros(md.mesh.numberofvertices,1); 62 md.solidearth.surfaceload.icethicknesschange=zeros(md.mesh.numberofvertices,1); 63 md.mask.ice_levelset=ones(md.mesh.numberofvertices,1); 65 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 66 72 save ./Models/SlrFarrell_Loads md; 67 73 68 plotmodel (md,'data',md.s lr.sealevel,'view',[90 90],'title#all','Initial sea-level [m]');74 plotmodel (md,'data',md.solidearth.initialsealevel,'view',[90 90],'title#all','Initial sea-level [m]'); 69 75 end 70 76 71 77 if any(steps==3) … … 74 80 75 81 md.solidearth.lovenumbers=lovenumbers('maxdeg',10000); 76 82 77 md.mask.land_levelset = 1-md.mask.ocean_levelset; 78 md.mask.ice_levelset = ones(md.mesh.numberofvertices,1); 79 md.mask.ocean_levelset = -ones(md.mesh.numberofvertices,1); 80 pos=find(md.mesh.lat <-80); 81 md.mask.ice_levelset(pos(1))=-1; % ice yes! 82 md.mask.ocean_levelset(pos(1))=1; % ice grounded! 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! 83 88 84 di=md.materials.rho_ice/md.materials.rho_water;85 md.geometry. thickness=ones(md.mesh.numberofvertices,1);86 md.geometry.surface= (1-di)*zeros(md.mesh.numberofvertices,1);87 md.geometry.base=md.geometry. surface-md.geometry.thickness;88 md.geometry. bed=md.geometry.base;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; 89 94 90 95 md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1); 91 96 md.materials.rheology_B=paterson(md.initialization.temperature); … … 103 108 md.cluster=generic('name',oshostname(),'np',3); 104 109 md.verbose=verbose('111111111'); 105 110 106 md.s lr.reltol = 0.1/100; % percent change in solution111 md.solidearth.settings.reltol = 0.1/100; % percent change in solution 107 112 108 113 md=solve(md,'Slr'); 109 114 -
../trunk-jpl/examples/EsaGRACE/runme.m
1 1 clear all; 2 2 addpath('../Data','../Functions'); 3 3 4 steps=[ 1]; % [1:5]4 steps=[5]; 5 5 6 6 if any(steps==1) 7 7 disp(' Step 1: Global mesh creation'); -
../trunk-jpl/examples/EsaWahr/runme.m
1 1 clear all; 2 2 addpath('../Functions'); 3 3 4 steps=[ 1]; % [1:7]4 steps=[2]; 5 5 6 6 if any(steps==1) 7 7 disp(' Step 1: Mesh creation'); -
../trunk-jpl/examples/SlrGRACE/runme.m
1 1 clear all; 2 2 addpath('../Data','../Functions'); 3 3 4 steps=[ 7];4 steps=[1:7]; 5 5 6 if any(steps==1) 6 if any(steps==1) % {{{ 7 7 disp(' Step 1: Global mesh creation'); 8 8 9 9 numrefine=5; … … 50 50 save ./Models/SlrGRACE_Mesh md; 51 51 52 52 plotmodel (md,'data',md.mask.ocean_levelset,'edgecolor','k'); 53 end 54 if any(steps==2) 53 end % }}} 54 if any(steps==2) % {{{ 55 55 disp(' Step 2: Define loads in meters of ice height equivalent'); 56 56 md = loadmodel('./Models/SlrGRACE_Mesh'); 57 57 … … 58 58 year_month = 2007+15/365; 59 59 time_range = [year_month year_month]; 60 60 61 water_load = grace(md.mesh.elements,md.mesh.lat,md.mesh.long,time_range(1),time_range(2)); 61 onvertex = 1; % map data on vertex. If 0, it maps on the elemental centroid. 62 water_load = grace(md.mesh.elements,md.mesh.lat,md.mesh.long,time_range(1),time_range(2),onvertex); 63 rho_water2ice = md.materials.rho_freshwater/md.materials.rho_ice; 64 ice_load = water_load*rho_water2ice; % ice height equivalent. 62 65 63 md.solidearth.surfaceload.icethicknesschange = water_load*md.materials.rho_freshwater/md.materials.rho_ice; 66 %Geometry for the bed, arbitrary thickness of 100: 67 md.geometry.bed=zeros(md.mesh.numberofvertices,1); 68 md.geometry.base=md.geometry.bed; 69 md.geometry.thickness = 100*ones(md.mesh.numberofvertices,1); 70 md.geometry.surface=md.geometry.bed+md.geometry.thickness; 64 71 72 md.masstransport.spcthickness = [md.geometry.thickness + ice_load; 0]; 73 74 md.smb.mass_balance=zeros(md.mesh.numberofvertices,1); 75 65 76 save ./Models/SlrGRACE_Loads md; 66 77 67 plotmodel (md,'data',md.solidearth.surfaceload.icethicknesschange,'view',[90 -90],'caxis',[-.1 .1],'title','Ice height equivalent [m]'); 68 end 69 if any(steps==3) 78 plotmodel (md,'data',ice_load,... 79 'edgecolor','k','view',[45 45],'caxis',[-.1 .1],... 80 'title','Ice height equivalent [m]'); 81 end % }}} 82 if any(steps==3) % {{{ 70 83 disp(' Step 3: Parameterization'); 71 84 md = loadmodel('./Models/SlrGRACE_Loads'); 72 85 86 md.mask.ice_levelset=-md.mask.ocean_levelset; 87 73 88 md.solidearth.lovenumbers = lovenumbers('maxdeg',10000); 89 md.solidearth.settings.reltol=NaN; 90 md.solidearth.settings.abstol=1e-3; 91 md.solidearth.settings.computesealevelchange=1; 92 md.solidearth.settings.isgrd=1; 93 md.solidearth.settings.grdmodel=1; 94 md.solidearth.settings.maxiter=10; 95 96 %time stepping: 97 md.timestepping.start_time=0; 98 md.timestepping.time_step=1; 99 md.timestepping.final_time=1; 74 100 75 md.mask.ice_levelset=-md.mask.ocean_levelset; 76 md.solidearth.initialsealevel=zeros(md.mesh.numberofvertices,1); 77 md.dsl.global_average_thermosteric_sea_level_change=[0;0]; 78 md.dsl.sea_surface_height_change_above_geoid=zeros(md.mesh.numberofvertices+1,1); 79 md.dsl.sea_water_pressure_change_at_sea_floor=zeros(md.mesh.numberofvertices+1,1); 101 %masstransport: 102 md.basalforcings.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1); 103 md.basalforcings.floatingice_melting_rate=zeros(md.mesh.numberofvertices,1); 104 md.initialization.vx=zeros(md.mesh.numberofvertices,1); 105 md.initialization.vy=zeros(md.mesh.numberofvertices,1); 106 md.initialization.sealevel=zeros(md.mesh.numberofvertices,1); 107 md.initialization.str=0; 80 108 81 md.solidearth.settings.ocean_area_scaling=1;82 83 % arbitary to pass consistency check. md.geometry.bed=-ones(md.mesh.numberofvertices,1);84 md.geometry.surface=ones(md.mesh.numberofvertices,1);85 md.geometry.base=md.geometry.bed; md.geometry.thickness=md.geometry.surface-md.geometry.base;86 md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1);87 md.materials.rheology_B=paterson(md.initialization.temperature);88 md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);89 90 109 md.miscellaneous.name='SlrGRACE'; 91 110 92 111 save ./Models/SlrGRACE_Parameterization md; 93 end 94 if any(steps==4) 112 end % }}} 113 if any(steps==4) % {{{ 95 114 disp(' Step 4: Solve Slr solver'); 96 115 md = loadmodel('./Models/SlrGRACE_Parameterization'); 97 116 … … 99 118 md.solidearth.settings.elastic=1; 100 119 md.solidearth.settings.rotation=1; 101 120 102 md.solidearth.requested_outputs = {'Sealevel','SealevelRSL'}; 121 %Physics: 122 md.transient.issmb=0; 123 md.transient.isstressbalance=0; 124 md.transient.isthermal=0; 125 md.transient.ismasstransport=1; 126 md.transient.isslc=1; 127 128 md.solidearth.requested_outputs={'Sealevel','Bed'}; 103 129 104 130 md.cluster=generic('name',oshostname(),'np',3); 105 131 md.verbose=verbose('111111111'); 106 132 107 md=solve(md,' Slr');133 md=solve(md,'Transient'); 108 134 109 135 save ./Models/SlrGRACE_Solution md; 110 end 111 if any(steps==5) 136 end % }}} 137 if any(steps==5) % {{{ 112 138 disp(' Step 5: Plot solutions'); 113 139 md = loadmodel('./Models/SlrGRACE_Solution'); 114 140 115 sol1 = md.solidearth.surfaceload.icethicknesschange*100; % [cm]116 sol2 = md.results.SealevelriseSolution.SealevelRSL*1000; % [mm]141 sol1 = (md.masstransport.spcthickness(1:end-1)-md.geometry.thickness)*100; % [cm] 142 sol2 = (md.results.TransientSolution.Sealevel-md.results.TransientSolution.Bed)*1000; % [mm] 117 143 118 144 sol_name={'Change in water equivalent height [cm]', 'Relative sea-level [mm]'}; 119 145 fig_name={'Fig_dH.pdf','Fig_slr.pdf'}; … … 153 179 if (kk==1) 154 180 geoshow(flipud(coastlat),flipud(coastlon),'DisplayType','polygon','FaceColor','white'); 155 181 else 156 geoshow(coastlat,coastlon,'DisplayType','polygon','FaceColor', [.5 1 .5]);182 geoshow(coastlat,coastlon,'DisplayType','polygon','FaceColor','none'); 157 183 end 158 184 plot(coastlon, coastlat,'k'); hold off; 159 185 c1=colorbar; … … 166 192 set(gcf,'color','w'); 167 193 %export_fig(fig_name{kk}); 168 194 end 169 end 170 if any(steps==6) 195 end % }}} 196 if any(steps==6) % {{{ 171 197 disp(' Step 6: Transient run'); 172 198 md = loadmodel('./Models/SlrGRACE_Parameterization'); 173 199 … … 200 226 md=solve(md,'tr'); 201 227 202 228 save ./Models/SlrGRACE_Transient md; 203 end 204 if any(steps==7) 229 end % }}} 230 if any(steps==7) % {{{ 205 231 disp(' Step 7: Plot transient'); 206 232 md = loadmodel('./Models/SlrGRACE_Transient'); 207 233 … … 283 309 ylabel('GMSL [mm/yr]'); 284 310 set(gcf,'color','w'); 285 311 %export_fig('Fig7.pdf'); 286 end 312 end % }}} 313
Note:
See TracBrowser
for help on using the repository browser.