Changeset 25915
- Timestamp:
- 12/29/20 13:27:22 (4 years ago)
- Location:
- issm/trunk-jpl
- Files:
-
- 1 added
- 3 deleted
- 20 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/examples/AMR/runme.m
r23096 r25915 1 1 % Mismip3D experiment with AMR using BAMG 2 steps=[1:3]; 2 steps=[1:3]; 3 3 4 4 if any(steps==1) 5 5 disp(' Step 1: Coarse mesh'); 6 6 7 7 %Generate an unstructured coarse mesh on the MISMIP domain with typical element edge length equal to 10,000 m 8 8 md=bamg(model,'domain','./domain.exp','hmax',10000,'splitcorners',1); 9 9 10 10 save AMRCoarseMesh md 11 end 11 end 12 12 13 if any(steps==2) 13 14 disp(' Step 2: Parameterization'); … … 16 17 17 18 md=setmask(md,'',''); 18 19 19 20 % Run parameterization script to set up geometry, inital velocity, material properties, etc. 20 21 md=parameterize(md,'./mismip.par'); … … 23 24 % Here, we are refining around the grounding line 24 25 % We impose the element resolution at grounding equal to 1000 m (1 km) 25 % The criterion used is the element distance to the grounding line .26 % The criterion used is the element distance to the grounding line 26 27 % The distance used here is 10000 m (10 km), used in both side around the grouding line (upstream and downstream) 27 28 md.amr.groundingline_resolution=1000; … … 35 36 save AMRParam md 36 37 end 37 if any(steps==3); 38 disp(' Step 3: Solve!'); 39 38 39 if any(steps==3) 40 disp(' Step 3: Solve!'); 41 40 42 md=loadmodel('AMRParam'); 41 43 … … 43 45 md.timestepping.time_step=1; 44 46 md.timestepping.final_time=500; % here, as example, only 500 yr. 45 md.settings.output_frequency=10;% here, save results every 10 yr 47 md.settings.output_frequency=10;% here, save results every 10 yr 46 48 md.stressbalance.maxiter=30; 47 49 md.stressbalance.abstol=NaN; 48 50 md.stressbalance.restol=1; 51 md.settings.solver_residue_threshold=1e-2; % relaxing (the first stress balance solver iteration presents values higher than the original threshold. This probably happens because the initial velocity is set to one). 49 52 md.verbose=verbose('convergence',false,'solution',true); 50 53 51 54 % Specify that you want to run the model on your current (local host) computer 52 55 % Change the number of processors according to your machine (here np=2) -
issm/trunk-jpl/examples/EsaGRACE/runme.m
r24864 r25915 1 2 1 clear all; 3 2 addpath('../Data','../Functions'); 4 3 5 steps=[1]; % [1:5] 4 steps=[1]; % [1:5] 6 5 7 if any(steps==1) 6 if any(steps==1) %{{{ 8 7 disp(' Step 1: Global mesh creation'); 9 8 10 resolution=300; % [km] 11 radius = 6.371012*10^3; % [km] 9 resolution=300; % [km] 10 radius = 6.371012*10^3; % [km] 12 11 13 md=model; 14 md.mask=maskpsl(); 12 md=model; 15 13 md.mesh=gmshplanet('radius',radius,'resolution',resolution); 16 14 17 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 15 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 18 16 19 17 save ./Models/EsaGRACE_Mesh md; 20 18 21 19 plotmodel (md,'data',md.mask.ocean_levelset,'edgecolor','k'); 20 end %}}} 22 21 23 end 24 25 if any(steps==2) 22 if any(steps==2) %{{{ 26 23 disp(' Step 2: Define loads in meters of ice height equivalent'); 27 24 md = loadmodel('./Models/EsaGRACE_Mesh'); 28 25 29 26 year_month = 2007+15/365; 30 time_range = [year_month year_month]; 31 32 water_load = grace(md.mesh.elements,md.mesh.lat,md.mesh.long,time_range(1),time_range(2)); 33 34 md.esa.deltathickness = water_load*md.materials.rho_freshwater/md.materials.rho_ice; % ice height equivalent 27 time_range = [year_month year_month]; 35 28 36 save ./Models/EsaGRACE_Loads md; 37 29 water_load = grace(md.mesh.elements,md.mesh.lat,md.mesh.long,time_range(1),time_range(2)); 30 31 md.esa.deltathickness = water_load*md.materials.rho_freshwater/md.materials.rho_ice; % ice height equivalent 32 33 save ./Models/EsaGRACE_Loads md; 34 38 35 plotmodel (md,'data',md.esa.deltathickness,... 39 36 'view',[90 -90],'caxis',[-.1 .1],... 40 37 'title','Ice height equivalent [m]'); 38 end %}}} 41 39 42 end 43 44 if any(steps==3) 40 if any(steps==3) %{{{ 45 41 disp(' Step 3: Parameterization'); 46 42 md = loadmodel('./Models/EsaGRACE_Loads'); 47 43 48 nlove=10001;49 md.esa.love_h = love_numbers ('h','CF'); md.esa.love_h(nlove+1:end)=[];50 md.esa.love_l = love_numbers ('l','CF'); md.esa.love_l(nlove+1:end)=[];44 love_numbers = lovenumbers('maxdeg',10000,'referenceframe','CF'); 45 md.esa.love_h = love_numbers.h; 46 md.esa.love_l = love_numbers.l; 51 47 52 md.mask.ocean_levelset = ones(md.mesh.numberofvertices,1); 53 md.mask.ice_levelset = ones(md.mesh.numberofvertices,1); 48 md.mask.ocean_levelset = ones(md.mesh.numberofvertices,1); 49 md.mask.ice_levelset = ones(md.mesh.numberofvertices,1); 54 50 pos=find(md.esa.deltathickness~=0); 55 md.mask.ice_levelset(md.mesh.elements(pos,:))=-1; 56 md.mask.land_levelset = 1-md.mask.ocean_levelset;51 md.mask.ice_levelset(md.mesh.elements(pos,:))=-1; 52 %md.mask.land_levelset = 1-md.mask.ocean_levelset; 57 53 58 54 di=md.materials.rho_ice/md.materials.rho_water; … … 61 57 md.geometry.base=md.geometry.surface-md.geometry.thickness; 62 58 md.geometry.bed=md.geometry.base; 63 59 64 60 md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1); 65 61 md.materials.rheology_B=paterson(md.initialization.temperature); 66 62 md.materials.rheology_n=3*ones(md.mesh.numberofelements,1); 67 63 68 64 md.miscellaneous.name='EsaGRACE'; 69 70 save ./Models/EsaGRACE_Parameterization md;71 65 72 end 66 save ./Models/EsaGRACE_Parameterization md; 67 end %}}} 73 68 74 if any(steps==4) 69 if any(steps==4) %{{{ 75 70 disp(' Step 4: Solve Esa solver'); 76 71 md = loadmodel('./Models/EsaGRACE_Parameterization'); 77 72 78 73 md.esa.requested_outputs = {'EsaUmotion','EsaNmotion','EsaEmotion'}; 79 80 md.cluster=generic('name',oshostname(),'np',3); 74 75 md.cluster=generic('name',oshostname(),'np',3); 81 76 md.verbose=verbose('111111111'); 82 77 83 78 md=solve(md,'Esa'); 84 79 85 save ./Models/EsaGRACE_Solution md; 80 save ./Models/EsaGRACE_Solution md; 81 end %}}} 86 82 87 end 88 89 if any(steps==5) 83 if any(steps==5) %{{{ 90 84 disp(' Step 5: Plot solutions'); 91 85 md = loadmodel('./Models/EsaGRACE_Solution'); 92 86 93 sol1 = md.esa.deltathickness*100; % [cm]94 sol2 = md.results.EsaSolution.EsaUmotion*1000; % [mm] 95 sol3 = md.results.EsaSolution.EsaNmotion*1000; % [mm] 96 sol4 = md.results.EsaSolution.EsaEmotion*1000; % [mm] 87 sol1 = md.esa.deltathickness*100; % [cm] 88 sol2 = md.results.EsaSolution.EsaUmotion*1000; % [mm] 89 sol3 = md.results.EsaSolution.EsaNmotion*1000; % [mm] 90 sol4 = md.results.EsaSolution.EsaEmotion*1000; % [mm] 97 91 98 92 sol_name={'Change in water equivalent height [cm]', 'Vertical displacement [mm]',... 99 'Horizontal (NS) displacement [mm]', 'Horizontal (EW) displacement [mm]'}; 100 fig_name={'Fig_dH.pdf','Fig_vert.pdf','Fig_horzNS.pdf','Fig_horzEW.pdf'}; 93 'Horizontal (NS) displacement [mm]', 'Horizontal (EW) displacement [mm]'}; 94 fig_name={'Fig_dH.pdf','Fig_vert.pdf','Fig_horzNS.pdf','Fig_horzEW.pdf'}; 101 95 102 res = 1.0; % [degree] 96 res = 1.0; % [degree] 103 97 104 98 [lat_grid, lon_grid] = meshgrid(linspace(-90,90,180/res), linspace(-180,180,360/res)); 105 sol_grid = zeros(size(lat_grid)); 99 sol_grid = zeros(size(lat_grid)); 106 100 107 for kk=1:4 101 for kk=1:4 108 102 sol=eval(sprintf('sol%d',kk)); 109 110 if length(sol)==md.mesh.numberofelements 103 104 if length(sol)==md.mesh.numberofelements 111 105 for jj=1:md.mesh.numberofelements 112 106 ii=(jj-1)*3; … … 114 108 end 115 109 for jj=1:md.mesh.numberofvertices 116 pos=ceil(find(pp==jj)/3); 117 temp(jj)=mean(sol(pos)); 110 pos=ceil(find(pp==jj)/3); 111 temp(jj)=mean(sol(pos)); 118 112 end 119 sol=temp'; 120 end 113 sol=temp'; 114 end 121 115 122 F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol); 116 F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol); 123 117 F.Method = 'linear'; 124 F.ExtrapolationMethod = 'linear'; 118 F.ExtrapolationMethod = 'linear'; 125 119 126 120 sol_grid = F(lat_grid, lon_grid); 127 sol_grid(isnan(sol_grid))=0; 128 sol_grid(lat_grid>85 & sol_grid==0)=NaN; 121 sol_grid(isnan(sol_grid))=0; 122 sol_grid(lat_grid>85 & sol_grid==0)=NaN; 129 123 130 124 set(0,'DefaultAxesFontSize',18,'DefaultAxesLineWidth',1,'DefaultTextFontSize',18,'DefaultLineMarkerSize',8) 131 figure1=figure('Position', [100, 100, 1000, 500]); 132 gcf; load coast; cla; 133 pcolor(lon_grid,lat_grid,sol_grid); shading flat; hold on; 125 figure1=figure('Position', [100, 100, 1000, 500]); 126 gcf; load coast; cla; 127 pcolor(lon_grid,lat_grid,sol_grid); shading flat; hold on; 134 128 if (kk==1) 135 geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white'); 136 end 137 plot(long,lat,'k'); hold off; 129 geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white'); 130 end 131 plot(long,lat,'k'); hold off; 138 132 c1=colorbar; 139 133 colormap('haxby'); 140 caxis([-min(abs(min(sol)),abs(max(sol))) min(abs(min(sol)),abs(max(sol)))]); 141 xlim([-180 180]); 142 ylim([-90 90]); 143 grid on; 144 title(sol_name(kk)); 134 caxis([-min(abs(min(sol)),abs(max(sol))) min(abs(min(sol)),abs(max(sol)))]); 135 xlim([-180 180]); 136 ylim([-90 90]); 137 grid on; 138 title(sol_name(kk)); 145 139 set(gcf,'color','w'); 146 %export_fig(fig_name{kk}); 140 %export_fig(fig_name{kk}); 147 141 end 148 149 end 150 142 end %}}} -
issm/trunk-jpl/examples/EsaWahr/runme.m
r24864 r25915 1 2 1 clear all; 3 2 addpath('../Functions'); 4 3 5 steps=[ 0]; % [0:6]4 steps=[1]; % [1:7] 6 5 7 if any(steps== 0)8 disp(' Step 0: Mesh creation');6 if any(steps==1) %{{{ 7 disp(' Step 1: Mesh creation'); 9 8 10 md=roundmesh(model,100000,10000); % Domain radius and element size [m] 9 md=roundmesh(model,100000,10000); % Domain radius and element size [m] 11 10 12 11 save ./Models/EsaWahr_Mesh md; 13 12 14 13 plotmodel(md,'data','mesh'); 14 end %}}} 15 15 16 end 16 if any(steps==2) %{{{ 17 disp(' Step 2: Anisotropic mesh creation'); 17 18 18 if any(steps==1) 19 disp(' Step 1: Anisotropic mesh creation'); 19 md=roundmesh(model,100000,1000); 20 20 21 md=roundmesh(model,100000,1000); 21 disc_radius=20*1000; 22 rad_dist=sqrt(md.mesh.x.^2+md.mesh.y.^2); 23 field = abs(rad_dist-disc_radius); 22 24 23 disc_radius=20*1000; 24 rad_dist=sqrt(md.mesh.x.^2+md.mesh.y.^2); 25 field = abs(rad_dist-disc_radius); 26 27 md = bamg(md,'field',field,'err',50,'hmax',10000); 25 md = bamg(md,'field',field,'err',50,'hmax',10000); 28 26 29 27 save ./Models/EsaWahr_Mesh md; 30 28 31 29 plotmodel (md,'data','mesh'); 30 end %}}} 32 31 33 end 34 35 if any(steps==2) 36 disp(' Step 2: Define loads'); 32 if any(steps==3) %{{{ 33 disp(' Step 3: Define loads'); 37 34 md = loadmodel('./Models/EsaWahr_Mesh'); 38 35 39 rho_w_i=md.materials.rho_freshwater/md.materials.rho_ice; 36 rho_w_i=md.materials.rho_freshwater/md.materials.rho_ice; 40 37 41 38 index=md.mesh.elements; 42 x_cent=mean(md.mesh.x(index),2); 43 y_cent=mean(md.mesh.y(index),2); 39 x_cent=mean(md.mesh.x(index),2); 40 y_cent=mean(md.mesh.y(index),2); 44 41 45 md.esa.deltathickness = zeros(md.mesh.numberofelements,1); 46 disc_radius=20; % [km] 42 md.esa.deltathickness = zeros(md.mesh.numberofelements,1); 43 disc_radius=20; % [km] 47 44 rad_dist=sqrt(x_cent.^2+y_cent.^2)/1000; 48 45 md.esa.deltathickness(rad_dist<=disc_radius) = -1.0*rho_w_i; 49 46 50 save ./Models/EsaWahr_Loads md; 51 47 save ./Models/EsaWahr_Loads md; 48 52 49 plotmodel (md,'data',md.esa.deltathickness,'title','Ice height equivalent [m]'); 50 end %}}} 53 51 54 end 55 56 if any(steps==3) 57 disp(' Step 3: Parameterization'); 52 if any(steps==4) %{{{ 53 disp(' Step 4: Parameterization'); 58 54 md = loadmodel('./Models/EsaWahr_Loads'); 59 55 60 nlove=10001;61 md.esa.love_h = love_numbers ('h','CF'); md.esa.love_h(nlove+1:end)=[];62 md.esa.love_l = love_numbers ('l','CF'); md.esa.love_l(nlove+1:end)=[];56 love_numbers = lovenumbers('maxdeg',10000,'referenceframe','CF'); 57 md.esa.love_h = love_numbers.h; 58 md.esa.love_l = love_numbers.l; 63 59 64 md.mask.ice_levelset = -ones(md.mesh.numberofvertices,1); 65 md.mask.ocean_levelset = ones(md.mesh.numberofvertices,1); 60 md.mask.ice_levelset = -ones(md.mesh.numberofvertices,1); 61 md.mask.ocean_levelset = ones(md.mesh.numberofvertices,1); 66 62 67 63 di=md.materials.rho_ice/md.materials.rho_water; … … 70 66 md.geometry.base=md.geometry.surface-md.geometry.thickness; 71 67 md.geometry.bed=md.geometry.base; 72 68 73 69 md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1); 74 70 md.materials.rheology_B=paterson(md.initialization.temperature); 75 71 md.materials.rheology_n=3*ones(md.mesh.numberofelements,1); 76 72 77 73 md.miscellaneous.name='EsaWahr'; 78 79 save ./Models/EsaWahr_Parameterization md;80 74 81 end 75 save ./Models/EsaWahr_Parameterization md; 76 end %}}} 82 77 83 if any(steps== 4)84 disp(' Step 4: Solve Esa solver');78 if any(steps==5) %{{{ 79 disp(' Step 5: Solve Esa solver'); 85 80 md = loadmodel('./Models/EsaWahr_Parameterization'); 86 81 87 82 md.esa.requested_outputs = {'EsaUmotion','EsaXmotion','EsaYmotion'}; 88 89 md.cluster=generic('name',oshostname(),'np',3); 83 84 md.cluster=generic('name',oshostname(),'np',3); 90 85 md.verbose=verbose('111111111'); 91 86 92 87 md=solve(md,'Esa'); 93 88 94 save ./Models/EsaWahr_Solution md; 89 save ./Models/EsaWahr_Solution md; 90 end %}}} 95 91 96 end 97 98 if any(steps==5) 99 disp(' Step 5: Plot solutions'); 92 if any(steps==6) %{{{ 93 disp(' Step 6: Plot solutions'); 100 94 md = loadmodel('./Models/EsaWahr_Solution'); 101 95 102 vert = md.results.EsaSolution.EsaUmotion*1000; % [mm] 103 horz_n = md.results.EsaSolution.EsaYmotion*1000; % [mm] 104 horz_e = md.results.EsaSolution.EsaXmotion*1000; % [mm] 105 horz = sqrt(horz_n.^2+horz_e.^2); % [mm] 96 vert = md.results.EsaSolution.EsaUmotion*1000; % [mm] 97 horz_n = md.results.EsaSolution.EsaYmotion*1000; % [mm] 98 horz_e = md.results.EsaSolution.EsaXmotion*1000; % [mm] 99 horz = sqrt(horz_n.^2+horz_e.^2); % [mm] 106 100 107 set(0,'DefaultAxesFontSize',24,'DefaultAxesLineWidth',1,'DefaultTextFontSize',24,'DefaultLineMarkerSize',6); 101 set(0,'DefaultAxesFontSize',24,'DefaultAxesLineWidth',1,'DefaultTextFontSize',24,'DefaultLineMarkerSize',6); 108 102 figure('Position', [100, 100, 800, 600]); 109 103 plotmodel(md,'data',vert,... … … 125 119 'caxis#3-4',[-0.5 0.5],... 126 120 'axispos',[0.505 0.02 0.47 0.47],... 127 'colorbarpos',[0.53,0.065,0.18,0.02],'colorbartitle#4','East-west [mm]'); 128 %export_fig('Fig5.pdf'); 121 'colorbarpos',[0.53,0.065,0.18,0.02],'colorbartitle#4','East-west [mm]'); 122 %export_fig('Fig5.pdf'); 123 end %}}} 129 124 130 end 131 132 if any(steps==6) 133 disp(' Step 6: Compare results against Wahr semi-analytic solutions'); 125 if any(steps==7) %{{{ 126 disp(' Step 7: Compare results against Wahr semi-analytic solutions'); 134 127 md = loadmodel('./Models/EsaWahr_Solution'); 135 128 136 vert = md.results.EsaSolution.EsaUmotion*1000; % [mm] 137 horz_n = md.results.EsaSolution.EsaYmotion*1000; % [mm] 138 horz_e = md.results.EsaSolution.EsaXmotion*1000; % [mm] 139 horz = sqrt(horz_n.^2+horz_e.^2); % [mm] 140 141 xi=[0:500:100000]; % grid points [m] 142 yi=zeros(1,length(xi)); 143 vert_track=griddata(md.mesh.x,md.mesh.y,vert,xi,yi,'linear'); 144 horz_track=griddata(md.mesh.x,md.mesh.y,horz,xi,yi,'linear'); 129 vert = md.results.EsaSolution.EsaUmotion*1000; % [mm] 130 horz_n = md.results.EsaSolution.EsaYmotion*1000; % [mm] 131 horz_e = md.results.EsaSolution.EsaXmotion*1000; % [mm] 132 horz = sqrt(horz_n.^2+horz_e.^2); % [mm] 145 133 146 % semi-analytic solution (Wahr et al., 2013, JGR, Figure 1) 147 disc_radius = 20*1000; % [m] 134 xi=[0:500:100000]; % grid points [m] 135 yi=zeros(1,length(xi)); 136 vert_track=griddata(md.mesh.x,md.mesh.y,vert,xi,yi,'linear'); 137 horz_track=griddata(md.mesh.x,md.mesh.y,horz,xi,yi,'linear'); 138 139 % semi-analytic solution (Wahr et al., 2013, JGR, Figure 1) 140 disc_radius = 20*1000; % [m] 148 141 [vert_wahr, horz_wahr] = wahr(disc_radius,xi,md.esa.love_h,md.esa.love_l); 149 142 150 set(0,'DefaultAxesFontSize',16,'DefaultAxesLineWidth',1,'DefaultTextFontSize',16,'DefaultLineMarkerSize',6); 143 set(0,'DefaultAxesFontSize',16,'DefaultAxesLineWidth',1,'DefaultTextFontSize',16,'DefaultLineMarkerSize',6); 151 144 figure1=figure('Position', [100, 100, 700, 400]); 152 ylabel_1={'0',' ','1','','2','','3',''}; 145 ylabel_1={'0',' ','1','','2','','3',''}; 153 146 axes1 = axes('Layer','top','Position',[0.1 0.15 0.8 0.8],... 154 147 'XTick',[0:10:100],'xlim',[0 100],... 155 'ylim',[0 3.5],'Ytick',[0:0.5:3.5],'yticklabel',ylabel_1); 156 box(axes1,'on'); hold(axes1,'all'); grid on; 157 xlabel(axes1,'Radial distance [km]'); 148 'ylim',[0 3.5],'Ytick',[0:0.5:3.5],'yticklabel',ylabel_1); 149 box(axes1,'on'); hold(axes1,'all'); grid on; 150 xlabel(axes1,'Radial distance [km]'); 158 151 ylabel(axes1,'Displacement [mm]'); 159 plot([20 20],[0 3.5],'-k','linewidth',2,'parent',axes1); 160 % analytic soln 161 h3=plot(xi/1000,vert_wahr,'-r','linewidth',5,'parent',axes1); 162 h4=plot(xi/1000,horz_wahr,'-m','linewidth',5,'parent',axes1); 163 % ISSM soln 164 h1=plot(xi/1000,vert_track*917/1000,'-b','linewidth',3,'parent',axes1); 165 h2=plot(xi/1000,horz_track*917/1000,'-c','linewidth',3,'parent',axes1); 152 plot([20 20],[0 3.5],'-k','linewidth',2,'parent',axes1); 153 % analytic soln 154 h3=plot(xi/1000,vert_wahr,'-r','linewidth',5,'parent',axes1); 155 h4=plot(xi/1000,horz_wahr,'-m','linewidth',5,'parent',axes1); 156 % ISSM soln 157 h1=plot(xi/1000,vert_track*917/1000,'-b','linewidth',3,'parent',axes1); 158 h2=plot(xi/1000,horz_track*917/1000,'-c','linewidth',3,'parent',axes1); 166 159 ag1 = gca; 167 160 leg1a = legend(ag1,[h3,h1,h4,h2],'Vertical (Wahr)','Vertical (ISSM)','Horizontal (Wahr)','Horizontal (ISSM)'); 168 set(leg1a,'location','east','Orientation','Vertical','Box','Off','FontSize',16); 161 set(leg1a,'location','east','Orientation','Vertical','Box','Off','FontSize',16); 169 162 set(gcf,'color','w'); 170 %export_fig('Fig6.pdf'); 171 172 end 173 163 %export_fig('Fig6.pdf'); 164 end %}}} -
issm/trunk-jpl/examples/Functions/grace.m
r23406 r25915 43 43 44 44 % Monthly GRACE data 45 filename=['GRCTellus.JPL.200204_201701.LND.RL05_1.DSTvSCS1411.nc']; 46 time_0=ncread(filename,'time'); % days since 2002-01-01 00:00:00 UTC 47 long_0=ncread(filename,'lon'); % longitudes: 0.27-359.75 48 lati_0=ncread(filename,'lat'); % latitudes: -89.75:89.75 49 rec=ncread(filename,'lwe_thickness');% rec_ensemble_mean [cm] 45 filename=['../Data/GRCTellus.JPL.200204_201701.LND.RL05_1.DSTvSCS1411.nc']; 46 try 47 time_0=ncread(filename,'time'); % days since 2002-01-01 00:00:00 UTC 48 long_0=ncread(filename,'lon'); % longitudes: 0.27-359.75 49 lati_0=ncread(filename,'lat'); % latitudes: -89.75:89.75 50 rec=ncread(filename,'lwe_thickness');% rec_ensemble_mean [cm] 51 catch e 52 disp('If dataset file exists at another location, modify the path in examples/Functions/grace.m') 53 rethrow(e) 54 end 55 50 56 51 57 time_yr = 2002+time_0/365; % [yr] -
issm/trunk-jpl/examples/Greenland/runme.m
r21157 r25915 5 5 ncdata='../Data/Greenland_5km_dev1.2.nc'; 6 6 7 if any(steps==1) 7 if any(steps==1) %{{{ 8 8 disp(' Step 1: Mesh creation'); 9 9 … … 22 22 %Mesh Greenland 23 23 md=bamg(md,'hmax',400000,'hmin',5000,'gradation',1.7,'field',vel,'err',8); 24 24 25 25 %convert x,y coordinates (Polar stereo) to lat/lon 26 26 [md.mesh.lat,md.mesh.long]=xy2ll(md.mesh.x,md.mesh.y,+1,39,71); … … 29 29 30 30 plotmodel (md,'data','mesh'); 31 end 32 33 if any(steps==2) 31 end %}}} 32 33 if any(steps==2) %{{{ 34 34 disp(' Step 2: Parameterization'); 35 35 md = loadmodel('./Models/Greenland.Mesh_generation'); … … 39 39 md = setflowequation(md,'SSA','all'); 40 40 41 save ./Models/Greenland.Parameterization md; 42 end 43 44 if any(steps==3) 41 save ./Models/Greenland.Parameterization md; 42 end %}}} 43 44 if any(steps==3) %{{{ 45 45 disp(' Step 3: Control method friction'); 46 46 md = loadmodel('./Models/Greenland.Parameterization'); … … 66 66 67 67 %Additional parameters 68 md.stressbalance.restol=0.01; md.stressbalance.reltol=0.1; 68 md.stressbalance.restol=0.01; md.stressbalance.reltol=0.1; 69 69 md.stressbalance.abstol=NaN; 70 70 … … 78 78 md.friction.coefficient=md.results.StressbalanceSolution.FrictionCoefficient; 79 79 80 save ./Models/Greenland.Control_drag md; 81 end 82 83 if any(steps==4) 80 save ./Models/Greenland.Control_drag md; 81 end %}}} 82 83 if any(steps==4) %{{{ 84 84 disp(' Step 4: Transient run'); 85 85 md = loadmodel('./Models/Greenland.Control_drag'); … … 101 101 %Additional options 102 102 md.inversion.iscontrol=0; 103 md.transient.requested_outputs={'IceVolume','TotalSmb', ... 104 'SmbMassBalance'}; 103 md.transient.requested_outputs={'IceVolume','TotalSmb','SmbMassBalance'}; 105 104 md.verbose=verbose('solution',true,'module',true,'convergence',true); 106 105 … … 109 108 md=solve(md,'Transient'); 110 109 111 save ./Models/Greenland.Transient md; 112 end 113 114 if any(steps==5) 115 disp(' Step 5: Plotting'); 110 save ./Models/Greenland.Transient md; 111 end %}}} 112 113 if any(steps==5) %{{{ 114 disp(' Step 5: Plotting'); 116 115 md = loadmodel('./Models/Greenland.Transient'); 117 116 … … 143 142 subplot(3,1,3); plot([0.2:0.2:20],volume); title('Ice Volume'); 144 143 xlabel('years') 145 end 146 147 if any(steps==6) 144 end %}}} 145 146 if any(steps==6) %{{{ 148 147 disp(' Step 6: Extract Box SMB'); 149 148 md = loadmodel('./Models/Greenland.Transient'); … … 172 171 173 172 clear smbbox 174 175 end 176 177 if any(steps==7) 173 end %}}} 174 175 if any(steps==7) %{{{ 178 176 disp(' Step 7: Historical Relaxation run'); 179 177 md = loadmodel('./Models/Greenland.Control_drag'); … … 198 196 %Additional options 199 197 md.inversion.iscontrol=0; 200 md.transient.requested_outputs={'IceVolume','TotalSmb', ... 201 'SmbMassBalance'}; 198 md.transient.requested_outputs={'IceVolume','TotalSmb','SmbMassBalance'}; 202 199 md.verbose=verbose('solution',true,'module',true); 203 200 … … 207 204 208 205 save ./Models/Greenland.HistoricTransient md; 209 end 210 211 if any(steps==8) 206 end % step 7 end 207 208 if any(steps==8) %{{{ 212 209 disp(' Step 8: Plotting exercise'); 213 210 214 211 %Load historic transient model 215 212 216 217 %Create Line Plots of relaxation run. Create a figure. 218 213 %Create Line Plots of relaxation run. Create a figure. 219 214 220 215 %Save surface mass balance, by looping through 200 years (1000 steps) 221 % Note, the first output will always contain output from time step 1 222 216 %Note, the first output will always contain output from time step 1 223 217 224 218 %Plot surface mass balance time series in first subplot 225 219 226 227 220 %Title this plot Mean surface mass balance 228 221 229 230 222 %Save velocity by looping through 200 years 231 223 232 233 224 %Plot velocity time series in second subplot 234 225 235 236 226 %Title this plot Mean Velocity 237 227 238 239 %Save Ice Volume by looping through 200 years 240 228 %Save Ice Volume by looping through 200 years 241 229 242 230 %Plot volume time series in third subplot 243 231 244 245 232 %Title this plot Mean Velocity and add an x label of years 246 233 247 end 248 249 if any(steps==9) 234 end % step 8 end 235 236 if any(steps==9) %{{{ 250 237 disp(' Step 9: Box Transient run'); 251 238 md = loadmodel('./Models/Greenland.HistoricTransient_200yr'); … … 292 279 %Additional options 293 280 md.inversion.iscontrol=0; 294 md.transient.requested_outputs={'IceVolume','TotalSmb', ... 295 'SmbMassBalance'}; 281 md.transient.requested_outputs={'IceVolume','TotalSmb','SmbMassBalance'}; 296 282 md.verbose=verbose('solution',true,'module',true); 297 283 … … 301 287 302 288 save ./Models/Greenland.BoxTransient md; 303 end 304 305 if any(steps==10) 289 end %}}} 290 291 if any(steps==10) %{{{ 306 292 disp(' Step 10: Plot Box Transient'); 307 293 md = loadmodel('./Models/Greenland.BoxTransient'); … … 327 313 subplot(3,1,3); plot(t,volume); title('Ice Volume'); 328 314 xlabel('years') 329 end 315 end %}}} -
issm/trunk-jpl/examples/ISMIP/runme.m
r19043 r25915 1 %w ich steps to perform steps are from 1 to 81 %which steps to perform; steps are from 1 to 8 2 2 %step 7 is specific to ISMIPA 3 3 %step 8 is specific to ISMIPF … … 11 11 12 12 %Mesh Generation #1 13 if any(steps==1) 13 if any(steps==1) %{{{ 14 14 15 15 %initialize md as a new model #help model … … 26 26 %-> 27 27 28 end 28 end %}}} 29 29 30 30 %Masks #2 31 if any(steps==2) 31 if any(steps==2) %{{{ 32 32 33 33 % load the preceding step #help loadmodel … … 45 45 %-> 46 46 47 end 47 end %}}} 48 48 49 49 %Parameterization #3 50 if any(steps==3) 50 if any(steps==3) %{{{ 51 51 52 52 % load the preceding step #help loadmodel … … 62 62 %-> 63 63 64 end 64 end %}}} 65 65 66 66 %Extrusion #4 67 if any(steps==4) 67 if any(steps==4) %{{{ 68 68 69 69 % load the preceding step #help loadmodel … … 81 81 %-> 82 82 83 end 83 end %}}} 84 84 85 85 %Set the flow computing method #5 86 if any(steps==5) 86 if any(steps==5) %{{{ 87 87 88 88 % load the preceding step #help loadmodel … … 97 97 %-> 98 98 99 end 99 end %}}} 100 100 101 101 %Set Boundary Conditions #6 102 if any(steps==6) 102 if any(steps==6) %{{{ 103 103 104 104 % load the preceding step #help loadmodel … … 118 118 %-> 119 119 120 120 % set the sliding to zero on the bed (Vx and Vy) 121 121 %-> 122 122 … … 146 146 % if we are dealing with IsmipF the solution is in masstransport 147 147 md.masstransport.vertex_pairing=md.stressbalance.vertex_pairing; 148 149 % save the given model 150 %-> 151 152 end 148 end 149 % save the given model 150 %-> 151 152 end %}}} 153 153 154 154 %Solving #7 155 if any(steps==7) 155 if any(steps==7) %{{{ 156 156 % load the preceding step #help loadmodel 157 157 % path is given by the organizer with the name of the given step … … 175 175 % plot the surface velocities #plotdoc 176 176 %-> 177 end 177 end %}}} 178 178 179 179 %Solving #8 180 if any(steps==8) 180 if any(steps==8) %{{{ 181 181 % load the preceding step #help loadmodel 182 182 % path is given by the organizer with the name of the given step … … 212 212 % plot the surface velocities #plotdoc 213 213 %-> 214 215 end 214 end %}}} -
issm/trunk-jpl/examples/IceBridge/Greenland.par
r24864 r25915 30 30 %Reading IceBridge data for Jakobshavn 31 31 disp(' reading IceBridge Jakobshavn bedrock'); 32 fid = fopen('../Data/Jakobshavn_2008_2011_Composite _XYZGrid.txt');32 fid = fopen('../Data/Jakobshavn_2008_2011_Composite/grids/Jakobshavn_2008_2011_Composite_XYZGrid.txt'); 33 33 titles = fgets(fid); 34 34 data = fscanf(fid,'%g,%g,%g,%g,%g',[5 266400])'; -
issm/trunk-jpl/examples/IceBridge/runme.m
r21057 r25915 1 1 clear all; 2 close all;3 2 steps=[1]; 4 3 … … 6 5 ncdata='../Data/Greenland_5km_dev1.2.nc'; 7 6 8 if any(steps==1) 7 if any(steps==1) %{{{ 9 8 disp(' Step 1: Mesh creation'); 10 9 … … 24 23 md=bamg(md,'hmax',400000,'hmin',5000,'gradation',1.7,'field',vel,'err',8); 25 24 return; 26 25 27 26 %Refine mesh in the region of Jakobshavn (resolution = 3000 m) 28 27 hmaxVertices=NaN*ones(md.mesh.numberofvertices,1); … … 37 36 38 37 save ./Models/Greenland.Mesh_generation md; 39 end 38 end %}}} 40 39 41 if any(steps==2) 40 if any(steps==2) %{{{ 42 41 disp(' Step 2: Parameterization'); 43 42 md = loadmodel('./Models/Greenland.Mesh_generation'); 44 43 45 44 md = setmask(md,'',''); 46 md = parameterize(md,' Greenland.par');45 md = parameterize(md,'./Greenland.par'); 47 46 md = setflowequation(md,'SSA','all'); 48 47 49 48 save ./Models/Greenland.Parameterization2 md; 50 end 49 end %}}} 51 50 52 if any(steps==3) 51 if any(steps==3) %{{{ 53 52 disp(' Step 3: Control method friction'); 54 53 md = loadmodel('./Models/Greenland.Parameterization2'); … … 93 92 94 93 save ./Models/Greenland.Control_drag md; 95 end 94 end %}}} 96 95 97 if any(steps==4) 96 if any(steps==4) %{{{ 98 97 disp(' Step 4: Transient run'); 99 98 md = loadmodel('./Models/Greenland.Control_drag'); … … 122 121 123 122 save ./Models/Greenland.Transient md; 124 end 123 end %}}} 125 124 126 if any(steps==5) 125 if any(steps==5) %{{{ 127 126 disp(' Step 5: Plotting'); 128 127 md = loadmodel('./Models/Greenland.Transient'); … … 155 154 subplot(3,1,3); plot(time_plot,volume); title('Ice Volume'); 156 155 xlabel('years') 157 end 156 end %}}} -
issm/trunk-jpl/examples/Inversion/runme.m
r23108 r25915 1 step=1; 2 if any(step==1) 1 steps=[1]; 2 3 if any(steps==1) %{{{ 3 4 %Generate observations 4 5 md = model; … … 9 10 md.cluster = generic('np',2); 10 11 md = solve(md,'Stressbalance'); 11 plotmodel(md,'axis#all','tight','data',md.materials.rheology_B,'caxis',[ 12 plotmodel(md,'axis#all','tight','data',md.materials.rheology_B,'caxis',[1.3 1.9]*10^8,'title','"True" B',... 12 13 'data',md.results.StressbalanceSolution.Vel,'title','"observed velocities"') 13 14 save model1 md 14 end 15 if any(step==2) 15 end %}}} 16 17 if any(steps==2) %{{{ 16 18 %Modify rheology, now constant 17 19 loadmodel('model1.mat'); … … 20 22 %results of previous run are taken as observations 21 23 md.inversion=m1qn3inversion(); 22 md.inversion.vx_obs 23 md.inversion.vy_obs 24 md.inversion.vel_obs 24 md.inversion.vx_obs = md.results.StressbalanceSolution.Vx; 25 md.inversion.vy_obs = md.results.StressbalanceSolution.Vy; 26 md.inversion.vel_obs = md.results.StressbalanceSolution.Vel; 25 27 26 28 md = solve(md,'Stressbalance'); 27 plotmodel(md,'axis#all','tight','data',md.materials.rheology_B,'caxis',[ 29 plotmodel(md,'axis#all','tight','data',md.materials.rheology_B,'caxis',[1.3 1.9]*10^8,'title','B first guess',... 28 30 'data',md.results.StressbalanceSolution.Vel,'title','modeled velocities') 29 31 save model2 md 30 end 31 if any(step==3) 32 end %}}} 33 34 if any(steps==3) %{{{ 32 35 %invert for ice rigidity 33 36 loadmodel('model2.mat'); … … 40 43 md.inversion.cost_functions = 101; 41 44 md.inversion.cost_functions_coefficients = ones(md.mesh.numberofvertices,1); 42 md.inversion.min_parameters 43 md.inversion.max_parameters 45 md.inversion.min_parameters = cuffey(273)*ones(md.mesh.numberofvertices,1); 46 md.inversion.max_parameters = cuffey(200)*ones(md.mesh.numberofvertices,1); 44 47 45 48 %Go solve! … … 48 51 plotmodel(md,'axis#all','tight','data',md.results.StressbalanceSolution.MaterialsRheologyBbar,'caxis',[ 1.3 1.9]*10^8,'title','inferred B',... 49 52 'data',md.results.StressbalanceSolution.Vel,'title','modeled velocities') 50 end 51 if any(step==4) 53 end %}}} 54 55 if any(steps==4) %{{{ 52 56 %invert for ice rigidity 53 57 loadmodel('model2.mat'); … … 59 63 md.inversion.maxsteps = maxsteps; 60 64 md.inversion.cost_functions = [101 502]; 61 md.inversion.cost_functions_coefficients 62 md.inversion.cost_functions_coefficients(:,2) 63 md.inversion.min_parameters 64 md.inversion.max_parameters 65 md.inversion.cost_functions_coefficients = ones(md.mesh.numberofvertices,1); 66 md.inversion.cost_functions_coefficients(:,2) = 10^-16*ones(md.mesh.numberofvertices,1); 67 md.inversion.min_parameters = cuffey(273)*ones(md.mesh.numberofvertices,1); 68 md.inversion.max_parameters = cuffey(200)*ones(md.mesh.numberofvertices,1); 65 69 66 70 %Go solve! … … 69 73 plotmodel(md,'axis#all','tight','data',md.results.StressbalanceSolution.MaterialsRheologyBbar,'caxis',[ 1.3 1.9]*10^8,'title','inferred B',... 70 74 'data',md.results.StressbalanceSolution.Vel,'title','modeled velocities') 71 end 75 end %}}} -
issm/trunk-jpl/examples/Jakobshavn/runme.m
r21607 r25915 1 1 steps=[1]; 2 2 3 if any(steps==1) 4 disp(' Step 1: Mesh creation');3 if any(steps==1) %{{{ 4 disp(' Step 1: Mesh creation'); 5 5 md=triangle(model,'Domain.exp',2000); 6 6 7 7 %Get observed velocity field on mesh nodes 8 8 ncdata='../Data/Greenland_5km_dev1.2.nc'; 9 if ~exist(ncdata,'file'), 9 if ~exist(ncdata,'file'), 10 10 error('File Greenland_5km_dev1.2.nc not downloaded in Data Directory'); 11 11 end 12 x1 13 y1 14 velx 15 vely 16 vx 17 vy 18 vel 12 x1 = ncread(ncdata,'x1'); 13 y1 = ncread(ncdata,'y1'); 14 velx = ncread(ncdata,'surfvelx'); 15 vely = ncread(ncdata,'surfvely'); 16 vx = InterpFromGridToMesh(x1,y1,velx',md.mesh.x,md.mesh.y,0); 17 vy = InterpFromGridToMesh(x1,y1,vely',md.mesh.x,md.mesh.y,0); 18 vel = sqrt(vx.^2+vy.^2); 19 19 20 20 %refine mesh using surface velocities as metric 21 21 md=bamg(md,'hmin',1200,'hmax',15000,'field',vel,'err',5); 22 22 [md.mesh.lat,md.mesh.long] = xy2ll(md.mesh.x,md.mesh.y,+1,39,71); 23 23 24 24 save JksMesh md 25 end 26 if any(steps==2) 27 disp(' Step 2: Parameterization'); 25 end %}}} 26 27 if any(steps==2) %{{{ 28 disp(' Step 2: Parameterization'); 28 29 md=loadmodel('JksMesh'); 29 30 30 31 md=setmask(md,'',''); 31 md=parameterize(md,'Jks.par'); 32 md=parameterize(md,'Jks.par'); 32 33 33 34 save JksPar md 34 end 35 if any(steps==3) 36 disp(' Step 3: Control method friction'); 35 end %}}} 36 37 if any(steps==3) %{{{ 38 disp(' Step 3: Control method friction'); 37 39 md=loadmodel('JksPar'); 38 40 … … 66 68 md.cluster=generic('name',oshostname,'np',4); 67 69 md=solve(md,'Stressbalance'); 68 70 69 71 save JksControl md 70 end 71 if any(steps==4) 72 disp(' Plotting') 72 end %}}} 73 74 if any(steps==4) %{{{ 75 disp(' Plotting') 73 76 md=loadmodel('JksControl'); 74 77 … … 82 85 'title','Friction Coefficient',... 83 86 'colorbartitle#3','(m)'); 84 end 87 end %}}} -
issm/trunk-jpl/examples/LcurveAnalysis/runme.m
r23752 r25915 1 step=[1]; 2 if any(step==1) 1 steps=[1]; 2 3 if any(steps==1) %{{{ 3 4 % Generate observations 4 5 md = model; … … 12 13 'data',md.results.StressbalanceSolution.Vel,'title','"observed velocities"') 13 14 save model1 md 14 end 15 if any(step==2) 15 end %}}} 16 17 if any(steps==2) %{{{ 16 18 % Modify rheology, now constant 17 19 loadmodel('model1.mat'); … … 28 30 'data',md.results.StressbalanceSolution.Vel,'title','modeled velocities') 29 31 save model2 md 30 end 31 if any(step==3) 32 end %}}} 33 34 if any(steps==3) %{{{ 32 35 % Perform L-curve analysis for ice rigidity inversion 33 36 loadmodel('model2.mat'); … … 42 45 md.inversion.min_parameters = cuffey(273)*ones(md.mesh.numberofvertices,1); 43 46 md.inversion.max_parameters = cuffey(200)*ones(md.mesh.numberofvertices,1); 44 45 47 md.verbose = verbose('solution',false,'control',true); 48 46 49 % Starting L-curve analysis: 47 50 % … … 56 59 % respective value of Jo and R (R versus Jo). 57 60 % 58 min_alpha 59 max_alpha 60 nstep_alpha 61 log_step 62 log_alphas 63 alphas 64 J 61 min_alpha = 1.e-20; 62 max_alpha = 1.e-11; 63 nstep_alpha = 30; 64 log_step = (log10(max_alpha)-log10(min_alpha))/nstep_alpha; 65 log_alphas = [log10(min_alpha):log_step:log10(max_alpha)]; 66 alphas = 10.^log_alphas; 67 J = zeros(length(alphas),length(md.inversion.cost_functions)+1); 65 68 % Loop over the alphas 66 69 for i=1:length(alphas), … … 78 81 Jo = Jo + J(:,i); % sum of the cost functions (no regularization term). In this example, only 101 79 82 end 80 R 81 83 R = J(:,end-1)./alphas(:); % only the regularization term 84 82 85 % Tip: 83 86 % A rescale in the axes may be useful to visualize the L-curve. … … 86 89 % 87 90 % Apply a linear transformation on the original axis (Jo, R): 88 91 % 89 92 % | 1 alpha | | Jo | | Jo + alpha*R | | J | 90 93 % | | | | = | | = | | … … 100 103 hoffset=0.1*Jo; 101 104 text(Jo+hoffset,R+voffset,[repmat('\alpha = ',length(alphas),1) num2str(alphas(:),'%2.0e')],... 102 105 'FontSize',10,'HorizontalAlignment','left','VerticalAlignment','Middle') 103 106 xlabel('$\mathrm{log}(\mathcal{J}_0$)','Interpreter','latex') 104 107 ylabel('$\mathrm{log}(\mathcal{R})$','Interpreter','latex') 105 end 106 if any(step==4) 108 end %}}} 109 110 if any(steps==4) %{{{ 107 111 %invert for ice rigidity 108 112 loadmodel('model2.mat'); … … 114 118 md.inversion.maxsteps = maxsteps; 115 119 md.inversion.cost_functions = [101 502]; 116 md.inversion.cost_functions_coefficients 117 md.inversion.cost_functions_coefficients(:,2) 118 md.inversion.min_parameters 119 md.inversion.max_parameters 120 md.inversion.cost_functions_coefficients = ones(md.mesh.numberofvertices,1); 121 md.inversion.cost_functions_coefficients(:,2) = 4.e-17*ones(md.mesh.numberofvertices,1); % here you can use the best value found for alpha 122 md.inversion.min_parameters = cuffey(273)*ones(md.mesh.numberofvertices,1); 123 md.inversion.max_parameters = cuffey(200)*ones(md.mesh.numberofvertices,1); 120 124 121 125 %Go solve! … … 124 128 plotmodel(md,'axis#all','tight','data',md.results.StressbalanceSolution.MaterialsRheologyBbar,'caxis',[ 1.3 1.9]*10^8,'title','inferred B',... 125 129 'data',md.results.StressbalanceSolution.Vel,'title','modeled velocities') 126 end 130 end %}}} -
issm/trunk-jpl/examples/Pig/runme.m
r24864 r25915 1 1 steps=[1]; 2 2 3 if any(steps==1) %Mesh Generation #13 if any(steps==1) %Mesh Generation #1 %{{{ 4 4 %Mesh parameters 5 5 domain =['./DomainOutline.exp']; 6 hinit=10000; 7 hmax=40000; 8 hmin=5000; 9 gradation=1.7; 10 err=8; 6 hinit=10000; % element size for the initial mesh 7 hmax=40000; % maximum element size of the final mesh 8 hmin=5000; % minimum element size of the final mesh 9 gradation=1.7; % maximum size ratio between two neighboring elements 10 err=8; % maximum error between interpolated and control field 11 11 12 12 % Generate an initial uniform mesh (resolution = hinit m) … … 14 14 15 15 % Load Velocities 16 nsidc_vel='../Data/Antarctica_ice_velocity.nc'; 16 nsidc_vel='../Data/Antarctica_ice_velocity.nc'; 17 17 18 18 % Get necessary data to build up the velocity grid 19 xmin 20 ymax 21 spacing 22 nx 23 ny 24 vx 25 vy 19 xmin = ncreadatt(nsidc_vel,'/','xmin'); 20 ymax = ncreadatt(nsidc_vel,'/','ymax'); 21 spacing = ncreadatt(nsidc_vel,'/','spacing'); 22 nx = double(ncreadatt(nsidc_vel,'/','nx')); 23 ny = double(ncreadatt(nsidc_vel,'/','ny')); 24 vx = double(ncread(nsidc_vel,'vx')); 25 vy = double(ncread(nsidc_vel,'vy')); 26 26 27 27 % Read coordinates 28 xmin = strtrim(xmin); 29 xmin = str2num(xmin(1:end-2)); 30 ymax = strtrim(ymax); 31 ymax = str2num(ymax(1:end-2)); 28 xmin = strtrim(xmin); 29 xmin = str2num(xmin(1:end-2)); 30 ymax = strtrim(ymax); 31 ymax = str2num(ymax(1:end-2)); 32 32 spacing = strtrim(spacing); 33 spacing = str2num(spacing(1:end-2)); 33 spacing = str2num(spacing(1:end-2)); 34 34 35 35 % Build the coordinates 36 36 x=xmin+(0:1:nx)'*spacing; 37 37 y=(ymax-ny*spacing)+(0:1:ny)'*spacing; 38 38 39 39 % Interpolate velocities onto coarse mesh 40 40 vx_obs=InterpFromGridToMesh(x,y,flipud(vx'),md.mesh.x,md.mesh.y,0); … … 45 45 % Adapt the mesh to minimize error in velocity interpolation 46 46 md=bamg(md,'hmax',hmax,'hmin',hmin,'gradation',gradation,'field',vel_obs,'err',err); 47 47 48 48 %ploting 49 49 plotmodel(md,'data','mesh') … … 51 51 % Save model 52 52 save ./Models/PIG_Mesh_generation md; 53 end 53 end %}}} 54 54 55 if any(steps==2) %Masks #2 55 if any(steps==2) %Masks #2 %{{{ 56 md = loadmodel('./Models/PIG_Mesh_generation'); 56 57 57 md = loadmodel('./Models/PIG_Mesh_generation'); 58 59 % Load SeaRISe dataset for Antarctica 58 % Load SeaRISe dataset for Antarctica 60 59 % http://websrv.cs.umt.edu/isis/index.php/Present_Day_Antarctica 61 60 searise='../Data/Antarctica_5km_withshelves_v0.75.nc'; 62 61 63 62 %read thickness mask from SeaRISE 64 63 x1=double(ncread(searise,'x1')); 65 64 y1=double(ncread(searise,'y1')); 66 65 thkmask=double(ncread(searise,'thkmask')); 67 66 68 67 %interpolate onto our mesh vertices 69 68 groundedice=double(InterpFromGridToMesh(x1,y1,thkmask',md.mesh.x,md.mesh.y,0)); … … 77 76 %ploting 78 77 plotmodel(md,'data',md.mask.ocean_levelset,'title','grounded/floating','data',md.mask.ice_levelset,'title','ice/no-ice') 79 78 80 79 % Save model 81 80 save ./Models/PIG_SetMask md; 82 end 81 end %}}} 83 82 84 if any(steps==3) %Parameterization #3 85 83 if any(steps==3) %Parameterization #3 %{{{ 86 84 md = loadmodel('./Models/PIG_SetMask'); 87 85 md = parameterize(md,'./Pig.par'); … … 89 87 % Use a MacAyeal flow model 90 88 md = setflowequation(md,'SSA','all'); 91 89 92 90 % Save model 93 91 save ./Models/PIG_Parameterization md; 94 end 92 end %}}} 95 93 96 if any(steps==4) %Control Method #4 97 94 if any(steps==4) %Control Method #4 %{{{ 98 95 md = loadmodel('./Models/PIG_Parameterization'); 99 96 … … 135 132 % Save model 136 133 save ./Models/PIG_Control_drag md; 137 end 134 end %}}} 138 135 139 if any(steps==5) %Plot #5 140 136 if any(steps==5) %Plot #5 %{{{ 141 137 md = loadmodel('./Models/PIG_Control_drag'); 142 138 … … 149 145 'caxis#1-2',([1.5,4000]),... 150 146 'colorbartitle#3','(m)', 'log#1-2',10); 151 end 147 end %}}} 152 148 153 if any(steps==6) %Higher-Order #6 154 149 if any(steps==6) %Higher-Order #6 %{{{ 155 150 % Load Model 156 151 … … 165 160 % Save Model 166 161 167 end 162 end % step 6 end 168 163 169 if any(steps==7) %Plot #7 170 164 if any(steps==7) %Plot #7 %{{{ 171 165 mdHO = loadmodel('./Models/PIG_ModelHO'); 172 166 mdSSA = loadmodel('./Models/PIG_Control_drag'); … … 176 170 177 171 plotmodel(mdHO,'nlines',3,'ncols',2,'axis#all','equal',... 178 179 180 181 182 183 184 185 186 187 188 end 172 'data',mdHO.initialization.vel,'title','Observed velocity',... 173 'data',(mdHO.results.StressbalanceSolution.Vel(surf)-mdHO.initialization.vel(surf)),'title','(HO-observed) velocities',... 174 'data',mdSSA.results.StressbalanceSolution.Vel,'title','Modeled SSA Velocity',... 175 'data',(mdHO.results.StressbalanceSolution.Vel(surf)-mdSSA.results.StressbalanceSolution.Vel),'title','(HO-SSA) velocities',... 176 'data',mdHO.results.StressbalanceSolution.Vel,'title','Modeled HO surface Velocities',... 177 'data',(mdHO.results.StressbalanceSolution.Vel(surf)-mdHO.results.StressbalanceSolution.Vel(basal)),'title','(HOsurf-HO base) velocities',... 178 'caxis#1',([1.5,4000]),'caxis#3',([1.5,4000]),'caxis#5',([1.5,4000]),... 179 'colorbar#all','on','view#all',2,... 180 'colorbartitle#all','(m/yr)',... 181 'layer#5',1, 'log#1', 10,'log#3', 10,'log#5', 10); 182 end %}}} -
issm/trunk-jpl/examples/Pig2/runme.m
r24864 r25915 1 steps= 1;2 3 if any(steps==1) %Mesh Generation #1 1 steps=[1]; 2 3 if any(steps==1) %Mesh Generation #1 %{{{ 4 4 5 5 %Mesh parameters 6 6 domain =['./DomainOutline.exp']; 7 hinit=5000; 8 hmax=40000; 9 hmin=4000; 10 gradation=1.7; 11 err=8; 7 hinit=5000; % element size for the initial mesh 8 hmax=40000; % maximum element size of the final mesh 9 hmin=4000; % minimum element size of the final mesh 10 gradation=1.7; % maximum size ratio between two neighboring elements 11 err=8; % maximum error between interpolated and control field 12 12 13 13 % Generate an initial uniform mesh (resolution = hinit m) … … 15 15 16 16 % Get necessary data to build up the velocity grid 17 nsidc_vel ='../Data/Antarctica_ice_velocity.nc';18 xmin = strsplit(ncreadatt(nsidc_vel,'/','xmin')); xmin= str2num(xmin{2});19 ymax = strsplit(ncreadatt(nsidc_vel,'/','ymax')); ymax= str2num(ymax{2});20 spacing = strsplit(ncreadatt(nsidc_vel,'/','spacing')); spacing= str2num(spacing{2});21 nx 22 ny 23 vx 24 vy 17 nsidc_vel ='../Data/Antarctica_ice_velocity.nc'; 18 xmin = strsplit(ncreadatt(nsidc_vel,'/','xmin')); xmin = str2num(xmin{2}); 19 ymax = strsplit(ncreadatt(nsidc_vel,'/','ymax')); ymax = str2num(ymax{2}); 20 spacing = strsplit(ncreadatt(nsidc_vel,'/','spacing')); spacing = str2num(spacing{2}); 21 nx = double(ncreadatt(nsidc_vel,'/','nx')); 22 ny = double(ncreadatt(nsidc_vel,'/','ny')); 23 vx = double(ncread(nsidc_vel,'vx')); 24 vy = double(ncread(nsidc_vel,'vy')); 25 25 26 26 % Build the coordinates 27 27 x=xmin+(0:1:nx)'*spacing; 28 28 y=(ymax-ny*spacing)+(0:1:ny)'*spacing; 29 29 30 30 % Interpolate velocities onto coarse mesh 31 31 vx_obs=InterpFromGridToMesh(x,y,flipud(vx'),md.mesh.x,md.mesh.y,0); … … 40 40 plotmodel(md,'data','mesh') 41 41 save ./Models/PIG_Mesh_generation md; 42 end 43 44 if any(steps==2) %Masks #2 45 46 md = loadmodel('./Models/PIG_Mesh_generation'); 42 end %}}} 43 44 if any(steps==2) %Masks #2 %{{{ 45 md = loadmodel('./Models/PIG_Mesh_generation'); 47 46 48 47 % Load SeaRISe dataset for Antarctica http://websrv.cs.umt.edu/isis/index.php/Present_Day_Antarctica 49 48 searise='../Data/Antarctica_5km_withshelves_v0.75.nc'; 50 49 51 50 %read thickness mask from SeaRISE 52 51 x1=double(ncread(searise,'x1')); 53 52 y1=double(ncread(searise,'y1')); 54 53 thkmask=double(ncread(searise,'thkmask')); 55 54 56 55 %interpolate onto our mesh vertices 57 56 groundedice=double(InterpFromGridToMesh(x1,y1,thkmask',md.mesh.x,md.mesh.y,0)); … … 64 63 65 64 plotmodel(md,'data',md.mask.ocean_levelset,'title','grounded/floating','data',md.mask.ice_levelset,'title','ice/no-ice') 66 65 67 66 save ./Models/PIG_SetMask md; 68 end 69 70 if any(steps==3) %Parameterization #3 71 67 end %}}} 68 69 if any(steps==3) %Parameterization #3 %{{{ 72 70 md = loadmodel('./Models/PIG_SetMask'); 73 71 md = setflowequation(md,'SSA','all'); 74 72 md = parameterize(md,'./Pig.par'); 75 73 76 74 save ./Models/PIG_Parameterization md; 77 end 78 79 if any(steps==4) %Rheology B inversion 80 75 end %}}} 76 77 if any(steps==4) %Rheology B inversion %{{{ 81 78 md = loadmodel('./Models/PIG_Parameterization'); 82 79 … … 120 117 % Save model 121 118 save ./Models/PIG_Control_B md; 122 end 123 124 if any(steps==5) %drag inversion 125 119 end %}}} 120 121 if any(steps==5) %drag inversion %{{{ 126 122 md = loadmodel('./Models/PIG_Control_B'); 127 123 … … 153 149 'caxis#1-2',([1.5,4000]),... 154 150 'colorbartitle#3','(m)', 'log#1-2',10); 151 155 152 save ./Models/PIG_Control_drag md; 156 end 157 158 if any(steps==6) %Transient Run #1 153 end %}}} 154 155 if any(steps==6) %Transient Run #1 %{{{ 159 156 160 157 md = loadmodel('./Models/PIG_Control_drag'); … … 183 180 % Save model 184 181 save ./Models/PIG_Transient md; 185 end 182 end %}}} 186 183 187 184 if any(steps==7) %High Melt #2 … … 196 193 197 194 save ./Models/PIG_HighMelt md; 198 end 199 200 if any(steps==8) %Ice Front retreat 195 end %}}} 196 197 if any(steps==8) %Ice Front retreat %{{{ 201 198 md = loadmodel('./Models/PIG_Transient'); 202 199 … … 209 206 210 207 save ./Models/PIG_FrontRetreat md; 211 end 212 213 if any(steps==9) %High surface mass balance #3 208 end %}}} 209 210 if any(steps==9) %High surface mass balance #3 %{{{ 214 211 %Load model from PIG_Transient 215 212 %... … … 229 226 %Save model 230 227 save ./Models/PIG_SMB md; 231 end 228 end %}}} -
issm/trunk-jpl/examples/PigSensitivity/runme.m
r24864 r25915 1 steps=[1 ];1 steps=[1:4]; 2 2 3 if any(steps==1) %Transient Run #1 3 try 4 4 5 md = loadmodel('../Pig/Models/PIG_Control_drag'); 5 6 if any(steps==1) %Transient Run #1 %{{{ 7 8 md = loadmodel('../Pig/Models/PIG_Control_drag'); 6 9 7 10 md.inversion.iscontrol=0; … … 11 14 md.transient.ismovingfront=0; 12 15 md.transient.isthermal=0; 13 16 14 17 pos=find(md.mask.ocean_levelset<0); 15 18 md.basalforcings.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1); 16 19 md.basalforcings.floatingice_melting_rate=25*ones(md.mesh.numberofvertices,1); 17 20 18 21 md.timestepping.time_step=0.1; 19 22 md.timestepping.final_time=10; … … 24 27 % Save model 25 28 save ./Models/PIG_Transient md; 26 end 29 end %}}} 27 30 28 if any(steps==2) %High Melt #2 29 md = loadmodel('./Models/PIG_Transient'); 31 if any(steps==2) %High Melt #2 %{{{ 32 md = loadmodel('./Models/PIG_Transient'); 30 33 31 34 md.basalforcings.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1); 32 35 md.basalforcings.floatingice_melting_rate=60*ones(md.mesh.numberofvertices,1); 33 36 34 37 md.timestepping.time_step=0.1; 35 38 md.timestepping.final_time=10; … … 39 42 40 43 save ./Models/PIG_HighMelt md; 41 end 44 end %}}} 42 45 43 if any(steps==3) %Ice Front retreat 44 md = loadmodel('./Models/PIG_Transient'); 46 if any(steps==3) %Ice Front retreat %{{{ 47 md = loadmodel('./Models/PIG_Transient'); 45 48 46 49 md2=extract(md,'~FrontRetreat.exp'); … … 58 61 59 62 save ./Models/PIG_FrontRetreat md2; 60 end 63 end %}}} 61 64 62 if any(steps==4) %High surface mass balance #3 65 if any(steps==4) 66 disp('Needs work!') %High surface mass balance #3 %{{{ 63 67 %Load model 64 68 65 69 %Change external forcing basal melting rate and surface mass balance) 66 70 67 71 %Refine time steps and time span of the simulation 68 72 … … 73 77 %Save model 74 78 75 end 79 end %}}} -
issm/trunk-jpl/examples/SlrFarrell/runme.m
r24864 r25915 1 2 1 clear all; 3 2 4 steps=[1 ]; % [1:5]3 steps=[1:5]; 5 4 6 if any(steps==1) 5 try 6 % [1:5] 7 8 if any(steps==1) %{{{ 7 9 disp(' Step 1: Global mesh creation'); 8 10 9 11 numrefine=1; 10 resolution=150*1e3; % inital resolution [m] 12 resolution=150*1e3; % inital resolution [m] 11 13 radius = 6.371012*10^6; % mean radius of Earth, m 12 mindistance_coast=150*1e3; % coastal resolution [m] 14 mindistance_coast=150*1e3; % coastal resolution [m] 13 15 mindistance_land=300*1e3; % resolution on the continents [m] 14 maxdistance=600*1e3; 16 maxdistance=600*1e3; % max element size (on mid-oceans) [m] 15 17 16 md=model; 17 md.mask=maskpsl(); 18 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3); % attributes in [km] 18 md=model; 19 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3); % attributes in [km] 19 20 20 21 for i=1:numrefine, 21 22 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 22 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 23 23 24 24 distance=zeros(md.mesh.numberofvertices,1); 25 25 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); 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); 28 28 29 29 for j=1:md.mesh.numberofvertices 30 phi1=md.mesh.lat(j)/180*pi; lambda1=md.mesh.long(j)/180*pi; 30 phi1=md.mesh.lat(j)/180*pi; lambda1=md.mesh.long(j)/180*pi; 31 31 if md.mask.ocean_levelset(j), 32 phi2=coaste.lat/180*pi; lambda2=coaste.long/180*pi; 32 phi2=coaste.lat/180*pi; lambda2=coaste.long/180*pi; 33 33 deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1); 34 34 d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2)); 35 35 else 36 phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi; 36 phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi; 37 37 deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1); 38 38 d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2)); … … 41 41 end 42 42 pos=find(distance<mindistance_coast); distance(pos)=mindistance_coast; 43 44 pos2=find(md.mask.ocean_levelset~=1 & distance>mindistance_land);45 distance(pos2)=mindistance_land;46 43 47 dist=min(maxdistance,distance); 44 pos2=find(md.mask.ocean_levelset~=1 & distance>mindistance_land); 45 distance(pos2)=mindistance_land; 46 47 dist=min(maxdistance,distance); 48 48 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3,'refine',md.mesh,'refinemetric',dist); 49 50 49 end 51 50 52 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 51 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 53 52 54 53 save ./Models/SlrFarrell_Mesh md; 55 54 56 55 plotmodel (md,'data',md.mask.ocean_levelset,'edgecolor','k'); 56 end %}}} 57 57 58 end 59 60 if any(steps==2) 58 if any(steps==2) %{{{ 61 59 disp(' Step 2: Define source as in Farrell, 1972, Figure 1'); 62 60 md = loadmodel('./Models/SlrFarrell_Mesh'); 63 61 64 md.slr.sealevel=md.mask.ocean_levelset; % 1 m SLR everywhere 65 62 md.slr.sealevel=md.mask.ocean_levelset; % 1 m SLR everywhere 66 63 md.slr.deltathickness=zeros(md.mesh.numberofelements,1); 67 64 md.slr.steric_rate=zeros(md.mesh.numberofvertices,1); 68 65 69 save ./Models/SlrFarrell_Loads md; 70 66 save ./Models/SlrFarrell_Loads md; 67 71 68 plotmodel (md,'data',md.slr.sealevel,'view',[90 90],'title#all','Initial sea-level [m]'); 69 end %}}} 72 70 73 end 74 75 if any(steps==3) 71 if any(steps==3) %{{{ 76 72 disp(' Step 3: Parameterization'); 77 73 md = loadmodel('./Models/SlrFarrell_Loads'); 78 74 79 nlove=10001; 80 md.slr.love_h = love_numbers('h','CM'); md.slr.love_h(nlove+1:end)=[]; 81 md.slr.love_k = love_numbers('k','CM'); md.slr.love_k(nlove+1:end)=[]; 82 md.slr.love_l = love_numbers('l','CM'); md.slr.love_l(nlove+1:end)=[]; 75 md.solidearth.lovenumbers=lovenumbers('maxdeg',10000); 83 76 84 md.mask.land_levelset = 1-md.mask.ocean_levelset; 85 md.mask.ice_levelset = ones(md.mesh.numberofvertices,1); 86 md.mask.ocean_levelset = -ones(md.mesh.numberofvertices,1); 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); 87 80 pos=find(md.mesh.lat <-80); 88 md.mask.ice_levelset(pos(1))=-1; % ice yes! 89 md.mask.ocean_levelset(pos(1))=1; % ice grounded! 81 md.mask.ice_levelset(pos(1))=-1; % ice yes! 82 md.mask.ocean_levelset(pos(1))=1; % ice grounded! 90 83 91 84 di=md.materials.rho_ice/md.materials.rho_water; … … 94 87 md.geometry.base=md.geometry.surface-md.geometry.thickness; 95 88 md.geometry.bed=md.geometry.base; 96 89 97 90 md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1); 98 91 md.materials.rheology_B=paterson(md.initialization.temperature); 99 92 md.materials.rheology_n=3*ones(md.mesh.numberofelements,1); 100 93 101 94 md.miscellaneous.name='SlrFarrell'; 102 103 save ./Models/SlrFarrell_Parameterization md;104 95 105 end 96 save ./Models/SlrFarrell_Parameterization md; 97 end %}}} 106 98 107 if any(steps==4) 99 if any(steps==4) %{{{ 108 100 disp(' Step 4: Solve Slr solver'); 109 101 md = loadmodel('./Models/SlrFarrell_Parameterization'); 110 102 111 md.cluster=generic('name',oshostname(),'np',3); 103 md.cluster=generic('name',oshostname(),'np',3); 112 104 md.verbose=verbose('111111111'); 113 105 114 md.slr.reltol = 0.1/100; % per cent change in solution106 md.slr.reltol = 0.1/100; % percent change in solution 115 107 116 108 md=solve(md,'Slr'); 117 109 118 save ./Models/SlrFarrell_Solution md; 110 save ./Models/SlrFarrell_Solution md; 111 end %}}} 119 112 120 end 121 122 if any(steps==5) 113 if any(steps==5) %{{{ 123 114 disp(' Step 5: Plot solutions'); 124 115 md = loadmodel('./Models/SlrFarrell_Solution'); 125 116 126 sol = md.results.SealevelriseSolution.Sealevel*100; % per cent normalized by GMSL (which 1 m) 117 sol = md.results.SealevelriseSolution.Sealevel*100; % per cent normalized by GMSL (which 1 m) 127 118 128 119 res = 1; % [degree] 129 120 130 121 [lat_grid, lon_grid] = meshgrid(linspace(-90,90,180/res), linspace(-180,180,360/res)); 131 sol_grid = zeros(size(lat_grid)); 122 sol_grid = zeros(size(lat_grid)); 132 123 133 F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol); 134 F.Method = 'linear'; 135 F.ExtrapolationMethod = 'linear'; 136 124 F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol); 125 F.Method = 'linear'; 126 F.ExtrapolationMethod = 'linear'; 127 137 128 sol_grid = F(lat_grid, lon_grid); 138 sol_grid(isnan(sol_grid))=0; 139 sol_grid(lat_grid>85 & sol_grid==0) =NaN;129 sol_grid(isnan(sol_grid))=0; 130 sol_grid(lat_grid>85 & sol_grid==0)=NaN; 140 131 141 132 set(0,'DefaultAxesFontSize',18,'DefaultAxesLineWidth',1,'DefaultTextFontSize',18,'DefaultLineMarkerSize',8) 142 figure1=figure('Position', [100, 100, 1000, 500]); 143 gcf; load coast; cla; 133 figure1=figure('Position', [100, 100, 1000, 500]); 134 gcf; load coast; cla; 144 135 pcolor(lon_grid,lat_grid,sol_grid); shading flat; hold on; 145 136 [C,h]=contour(lon_grid,lat_grid,sol_grid,[96 98 100 102 104 105],'-k','linewidth',2); 146 clabel(C,h,'FontSize',18,'Color','red','LabelSpacing',500); 147 geoshow(lat,long,'DisplayType','polygon','FaceColor',[.82 .82 .82]); 148 plot(long,lat,'k'); hold off; 137 clabel(C,h,'FontSize',18,'Color','red','LabelSpacing',500); 138 geoshow(lat,long,'DisplayType','polygon','FaceColor',[.82 .82 .82]); 139 plot(long,lat,'k'); hold off; 149 140 c1=colorbar; 150 colormap(flipud(haxby)); 151 caxis([96 105]); 152 xlim([-170 170]); 153 ylim([-85 85]); 154 grid on; 155 title('Relative sea-level [% of GMSL]'); 141 colormap(flipud(haxby)); 142 caxis([96 105]); 143 xlim([-170 170]); 144 ylim([-85 85]); 145 grid on; 146 title('Relative sea-level [% of GMSL]'); 156 147 set(gcf,'color','w'); 157 %export_fig('Fig5.pdf'); 158 159 end 160 148 %export_fig('Fig5.pdf'); 149 end %}}} -
issm/trunk-jpl/examples/SlrGRACE/runme.m
r24864 r25915 1 2 1 clear all; 3 2 addpath('../Data','../Functions'); 4 3 5 steps=[1]; % [1:7] 6 7 if any(steps==1) 4 steps=[1:7]; 5 6 try 7 % [1:7] 8 9 if any(steps==1) %{{{ 8 10 disp(' Step 1: Global mesh creation'); 9 11 10 12 numrefine=1; 11 resolution=150*1e3; % inital resolution [m] 13 resolution=150*1e3; % inital resolution [m] 12 14 radius = 6.371012*10^6; % mean radius of Earth, m 13 mindistance_coast=150*1e3; % coastal resolution [m] 15 mindistance_coast=150*1e3; % coastal resolution [m] 14 16 mindistance_land=300*1e3; % resolution on the continents [m] 15 maxdistance=600*1e3; % max element size (on mid-oceans) [m] 16 17 md=model; 18 md.mask=maskpsl(); 19 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3); % attributes in [km] 17 maxdistance=600*1e3; % max element size (on mid-oceans) [m] 18 19 md=model; 20 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3); % attributes in [km] 20 21 21 22 for i=1:numrefine, 22 23 23 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 24 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 24 25 25 26 distance=zeros(md.mesh.numberofvertices,1); 26 27 27 pos=find(~md.mask.ocean_levelset); coaste.lat=md.mesh.lat(pos); coaste.long=md.mesh.long(pos); 28 pos=find(md.mask.ocean_levelset); coasto.lat=md.mesh.lat(pos); coasto.long=md.mesh.long(pos); 28 pos=find(~md.mask.ocean_levelset); coaste.lat=md.mesh.lat(pos); coaste.long=md.mesh.long(pos); 29 pos=find(md.mask.ocean_levelset); coasto.lat=md.mesh.lat(pos); coasto.long=md.mesh.long(pos); 29 30 30 31 for j=1:md.mesh.numberofvertices 31 phi1=md.mesh.lat(j)/180*pi; lambda1=md.mesh.long(j)/180*pi; 32 phi1=md.mesh.lat(j)/180*pi; lambda1=md.mesh.long(j)/180*pi; 32 33 if md.mask.ocean_levelset(j), 33 phi2=coaste.lat/180*pi; lambda2=coaste.long/180*pi; 34 phi2=coaste.lat/180*pi; lambda2=coaste.long/180*pi; 34 35 deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1); 35 36 d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2)); 36 37 else 37 phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi; 38 phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi; 38 39 deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1); 39 40 d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2)); … … 43 44 pos=find(distance<mindistance_coast); distance(pos)=mindistance_coast; 44 45 45 pos2=find(md.mask.ocean_levelset~=1 & distance>mindistance_land); 46 distance(pos2)=mindistance_land; 47 48 dist=min(maxdistance,distance); 46 pos2=find(md.mask.ocean_levelset~=1 & distance>mindistance_land); 47 distance(pos2)=mindistance_land; 48 49 dist=min(maxdistance,distance); 49 50 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3,'refine',md.mesh,'refinemetric',dist); 50 51 end 52 53 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 51 end 52 53 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 54 54 55 55 save ./Models/SlrGRACE_Mesh md; 56 56 57 57 plotmodel (md,'data',md.mask.ocean_levelset,'edgecolor','k'); 58 59 end 60 61 if any(steps==2) 58 end %}}} 59 60 if any(steps==2) %{{{ 62 61 disp(' Step 2: Define loads in meters of ice height equivalent'); 63 62 md = loadmodel('./Models/SlrGRACE_Mesh'); 64 63 65 64 year_month = 2007+15/365; 66 time_range = [year_month year_month]; 67 68 water_load = grace(md.mesh.elements,md.mesh.lat,md.mesh.long,time_range(1),time_range(2)); 69 70 md.slr.deltathickness = water_load*md.materials.rho_freshwater/md.materials.rho_ice; 71 72 save ./Models/SlrGRACE_Loads md; 73 65 time_range = [year_month year_month]; 66 67 water_load = grace(md.mesh.elements,md.mesh.lat,md.mesh.long,time_range(1),time_range(2)); 68 69 md.slr.deltathickness = water_load*md.materials.rho_freshwater/md.materials.rho_ice; 70 71 save ./Models/SlrGRACE_Loads md; 72 74 73 plotmodel (md,'data',md.slr.deltathickness,'view',[90 -90],'caxis',[-.1 .1],'title','Ice height equivalent [m]'); 75 76 end 77 78 if any(steps==3) 74 end %}}} 75 76 if any(steps==3) %{{{ 79 77 disp(' Step 3: Parameterization'); 80 78 md = loadmodel('./Models/SlrGRACE_Loads'); 81 79 82 nlove=10001; 83 md.slr.love_h = love_numbers('h','CM'); md.slr.love_h(nlove+1:end)=[]; 84 md.slr.love_k = love_numbers('k','CM'); md.slr.love_k(nlove+1:end)=[]; 85 md.slr.love_l = love_numbers('l','CM'); md.slr.love_l(nlove+1:end)=[]; 86 87 md.mask.ocean_levelset = ones(md.mesh.numberofvertices,1); 88 md.mask.ice_levelset = ones(md.mesh.numberofvertices,1); 80 md.solidearth.lovenumbers = lovenumbers('maxdeg',10000); 81 82 md.mask.ocean_levelset = ones(md.mesh.numberofvertices,1); 83 md.mask.ice_levelset = ones(md.mesh.numberofvertices,1); 89 84 pos=find(md.slr.deltathickness~=0); 90 md.mask.ice_levelset(md.mesh.elements(pos,:))=-1; 91 md.mask.land_levelset = 1-md.mask.ocean_levelset; 85 md.mask.ice_levelset(md.mesh.elements(pos,:))=-1; 86 md.mask.land_levelset = 1-md.mask.ocean_levelset; 92 87 93 88 md.slr.sealevel=zeros(md.mesh.numberofvertices,1); … … 100 95 md.geometry.base=md.geometry.surface-md.geometry.thickness; 101 96 md.geometry.bed=md.geometry.base; 102 97 103 98 md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1); 104 99 md.materials.rheology_B=paterson(md.initialization.temperature); 105 100 md.materials.rheology_n=3*ones(md.mesh.numberofelements,1); 106 101 107 102 md.miscellaneous.name='SlrGRACE'; 108 109 save ./Models/SlrGRACE_Parameterization md; 110 111 end 112 113 if any(steps==4) 103 104 save ./Models/SlrGRACE_Parameterization md; 105 end %}}} 106 107 if any(steps==4) %{{{ 114 108 disp(' Step 4: Solve Slr solver'); 115 109 md = loadmodel('./Models/SlrGRACE_Parameterization'); 116 110 117 md.slr.rigid=1; 118 md.slr.elastic=1; 111 md.slr.rigid=1; 112 md.slr.elastic=1; 119 113 md.slr.rotation=1; 120 114 121 md.cluster=generic('name',oshostname(),'np',3); 115 md.cluster=generic('name',oshostname(),'np',3); 122 116 md.verbose=verbose('111111111'); 123 117 124 118 md=solve(md,'Slr'); 125 119 126 save ./Models/SlrGRACE_Solution md; 127 128 end 129 130 if any(steps==5) 120 save ./Models/SlrGRACE_Solution md; 121 end %}}} 122 123 if any(steps==5) %{{{ 131 124 disp(' Step 5: Plot solutions'); 132 125 md = loadmodel('./Models/SlrGRACE_Solution'); 133 126 134 sol1 = md.slr.deltathickness*100; % [cm]135 sol2 = md.results.SealevelriseSolution.Sealevel*1000; % [mm]136 137 sol_name={'Change in water equivalent height [cm]', 'Relative sea-level [mm]'}; 138 fig_name={'Fig_dH.pdf','Fig_slr.pdf'}; 139 140 res = 1.0; 127 sol1 = md.slr.deltathickness*100; % [cm] 128 sol2 = md.results.SealevelriseSolution.Sealevel*1000; % [mm] 129 130 sol_name={'Change in water equivalent height [cm]', 'Relative sea-level [mm]'}; 131 fig_name={'Fig_dH.pdf','Fig_slr.pdf'}; 132 133 res = 1.0; 141 134 142 135 [lat_grid, lon_grid] = meshgrid(linspace(-90,90,180/res), linspace(-180,180,360/res)); 143 sol_grid = zeros(size(lat_grid)); 136 sol_grid = zeros(size(lat_grid)); 144 137 145 138 for kk=1:2 146 139 sol=eval(sprintf('sol%d',kk)); 147 148 if length(sol)==md.mesh.numberofelements 140 141 if length(sol)==md.mesh.numberofelements 149 142 for jj=1:md.mesh.numberofelements 150 143 ii=(jj-1)*3; … … 152 145 end 153 146 for jj=1:md.mesh.numberofvertices 154 pos=ceil(find(pp==jj)/3); 155 temp(jj)=mean(sol(pos)); 156 end 157 sol=temp'; 158 end 159 160 F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol); 147 pos=ceil(find(pp==jj)/3); 148 temp(jj)=mean(sol(pos)); 149 end 150 sol=temp'; 151 end 152 153 F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol); 161 154 F.Method = 'linear'; 162 F.ExtrapolationMethod = 'linear'; 155 F.ExtrapolationMethod = 'linear'; 163 156 164 157 sol_grid = F(lat_grid, lon_grid); 165 sol_grid(isnan(sol_grid))=0; 166 sol_grid(lat_grid>85 & sol_grid==0) = NaN; 158 sol_grid(isnan(sol_grid))=0; 159 sol_grid(lat_grid>85 & sol_grid==0) = NaN; 167 160 168 161 set(0,'DefaultAxesFontSize',18,'DefaultAxesLineWidth',1,'DefaultTextFontSize',18,'DefaultLineMarkerSize',8) 169 figure1=figure('Position', [100, 100, 1000, 500]); 170 gcf; load coast; cla; 162 figure1=figure('Position', [100, 100, 1000, 500]); 163 gcf; load coast; cla; 171 164 pcolor(lon_grid,lat_grid,sol_grid); shading flat; hold on; 172 165 if (kk==1) 173 geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white'); 166 geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white'); 174 167 else 175 geoshow(lat,long,'DisplayType','polygon','FaceColor','white'); 176 end 177 plot(long,lat,'k'); hold off; 168 geoshow(lat,long,'DisplayType','polygon','FaceColor','white'); 169 end 170 plot(long,lat,'k'); hold off; 178 171 c1=colorbar; 179 colormap('haxby'); 180 caxis([-floor(min(abs(min(sol)),abs(max(sol)))) floor(min(abs(min(sol)),abs(max(sol))))]); 181 xlim([-180 180]); 182 ylim([-90 90]); 183 grid on; 184 title(sol_name(kk)); 172 colormap('haxby'); 173 caxis([-floor(min(abs(min(sol)),abs(max(sol)))) floor(min(abs(min(sol)),abs(max(sol))))]); 174 xlim([-180 180]); 175 ylim([-90 90]); 176 grid on; 177 title(sol_name(kk)); 185 178 set(gcf,'color','w'); 186 %export_fig(fig_name{kk}); 187 end 188 189 end 190 191 if any(steps==6) 179 %export_fig(fig_name{kk}); 180 end 181 end %}}} 182 183 if any(steps==6) %{{{ 192 184 disp(' Step 6: Transient run'); 193 185 md = loadmodel('./Models/SlrGRACE_Parameterization'); 194 186 195 187 disp('Projecting loads onto the mesh...'); 196 time_range = 2007 + [15 350]/365; 197 water_load = grace(md.mesh.elements,md.mesh.lat,md.mesh.long,time_range(1),time_range(2)); 198 199 [ne,nt]=size(water_load); 200 201 md.slr.deltathickness(1:ne,:) = water_load*md.materials.rho_freshwater/md.materials.rho_ice; 202 md.slr.deltathickness(ne+1,:)=[1:nt]; % times 203 188 time_range = 2007 + [15 350]/365; 189 water_load = grace(md.mesh.elements,md.mesh.lat,md.mesh.long,time_range(1),time_range(2)); 190 191 [ne,nt]=size(water_load); 192 md.slr.deltathickness = zeros(ne+1,nt); 193 md.slr.deltathickness(1:ne,:) = water_load*md.materials.rho_freshwater/md.materials.rho_ice; 194 md.slr.deltathickness(ne+1,:)=[1:nt]; % times 195 204 196 md.transient.issmb=0; 205 md.transient.ismasstransport=0; 206 md.transient.isstressbalance=0; 197 md.transient.ismasstransport=0; 198 md.transient.isstressbalance=0; 207 199 md.transient.isthermal=0; 208 200 md.transient.isslr=1; 209 201 210 202 md.timestepping.start_time=-1; 211 md.timestepping.final_time=nt; 212 md.timestepping.time_step=1; 213 203 md.timestepping.final_time=nt; 204 md.timestepping.time_step=1; 205 md.timestepping.interp_forcings=0; 214 206 md.settings.output_frequency=1; 215 207 216 md.cluster=generic('name',oshostname(),'np',3); 208 md.cluster=generic('name',oshostname(),'np',3); 217 209 md.verbose=verbose('111111111'); 218 210 219 211 md=solve(md,'tr'); 220 212 221 save ./Models/SlrGRACE_Transient md; 222 223 end 224 225 if any(steps==7) 213 save ./Models/SlrGRACE_Transient md; 214 end %}}} 215 216 if any(steps==7) %{{{ 226 217 disp(' Step 7: Plot transient'); 227 218 md = loadmodel('./Models/SlrGRACE_Transient'); 228 219 229 time = md.slr.deltathickness(end,:); 220 time = md.slr.deltathickness(end,:); 230 221 231 222 for tt=1:length(time) 232 223 gmsl(tt) = md.results.TransientSolution(tt).SealevelEustatic*1000; % GMSL rate mm/yr 233 sol1(:,tt) = md.slr.deltathickness(1:end-1,tt)*100; % ice equivalent height [cm/yr]234 sol2(:,tt) = md.results.TransientSolution(tt+1).Sealevel*1000;% mm/yr235 end 236 sol_name = {'Change in water equivalent height [cm]', 'Relative sea-level [mm]'}; 237 movie_name = {'Movie_dH.avi','Movie_slr.avi'}; 238 239 res = 1.0; 224 sol1(:,tt) = md.slr.deltathickness(1:end-1,tt)*100; % ice equivalent height [cm/yr] 225 sol2(:,tt) = md.results.TransientSolution(tt+1).Sealevel*1000; % mm/yr 226 end 227 sol_name = {'Change in water equivalent height [cm]', 'Relative sea-level [mm]'}; 228 movie_name = {'Movie_dH.avi','Movie_slr.avi'}; 229 230 res = 1.0; 240 231 241 232 [lat_grid, lon_grid] = meshgrid(linspace(-90,90,180/res), linspace(-180,180,360/res)); 242 sol_grid = zeros(size(lat_grid)); 233 sol_grid = zeros(size(lat_grid)); 243 234 244 235 for kk=1:2 245 236 sol=eval(sprintf('sol%d',kk)); 246 247 if length(sol)==md.mesh.numberofelements 237 238 if length(sol)==md.mesh.numberofelements 248 239 for jj=1:md.mesh.numberofelements 249 240 ii=(jj-1)*3; … … 251 242 end 252 243 for jj=1:md.mesh.numberofvertices 253 pos=ceil(find(pp==jj)/3); 254 temp2(jj,:)=mean(sol(pos,:)); 255 end 256 sol=temp2; 257 end 258 259 vidObj = VideoWriter(movie_name{kk}); 260 vidObj.FrameRate=2; % frames per second 244 pos=ceil(find(pp==jj)/3); 245 temp2(jj,:)=mean(sol(pos,:)); 246 end 247 sol=temp2; 248 end 249 250 vidObj = VideoWriter(movie_name{kk}); 251 vidObj.FrameRate=2; % frames per second 261 252 open(vidObj); 262 253 263 254 for jj=1:length(time) 264 F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol(:,jj)); 255 F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol(:,jj)); 265 256 F.Method = 'linear'; 266 F.ExtrapolationMethod = 'linear'; 257 F.ExtrapolationMethod = 'linear'; 267 258 268 259 sol_grid = F(lat_grid, lon_grid); 269 sol_grid(isnan(sol_grid))=0; 270 sol_grid(lat_grid>85 & sol_grid==0) = NaN; 260 sol_grid(isnan(sol_grid))=0; 261 sol_grid(lat_grid>85 & sol_grid==0) = NaN; 271 262 272 263 set(0,'DefaultAxesFontSize',18,'DefaultAxesLineWidth',1,'DefaultTextFontSize',18,'DefaultLineMarkerSize',8) 273 figure1=figure('Position', [100, 100, 1000, 500]); 274 gcf; load coast; cla; 264 figure1=figure('Position', [100, 100, 1000, 500]); 265 gcf; load coast; cla; 275 266 pcolor(lon_grid,lat_grid,sol_grid); shading flat; hold on; 276 267 if (kk==1) 277 geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white'); 268 geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white'); 278 269 else 279 geoshow(lat,long,'DisplayType','polygon','FaceColor','white'); 280 end 281 plot(long,lat,'k'); hold off; 270 geoshow(lat,long,'DisplayType','polygon','FaceColor','white'); 271 end 272 plot(long,lat,'k'); hold off; 282 273 c1=colorbar; 283 colormap('haxby'); 284 caxis([-floor(min(abs(min(min(sol))),abs(max(max(sol))))) floor(min(abs(min(min(sol))),abs(max(max(sol)))))]); 285 xlim([-180 180]); 286 ylim([-90 90]); 287 grid on; 288 title(sol_name(kk)); 274 colormap('haxby'); 275 caxis([-floor(min(abs(min(min(sol))),abs(max(max(sol))))) floor(min(abs(min(min(sol))),abs(max(max(sol)))))]); 276 xlim([-180 180]); 277 ylim([-90 90]); 278 grid on; 279 title(sol_name(kk)); 289 280 set(gcf,'color','w'); 290 writeVideo(vidObj,getframe(gcf)); 291 close 281 writeVideo(vidObj,getframe(gcf)); 282 close 292 283 end 293 284 close(vidObj); 294 285 end 295 !open *.avi; 296 297 % plot GMSL time series 298 plot(time,gmsl,'-*','linewidth',3); grid on; 299 xlabel('# month'); 286 !open *.avi; 287 288 % plot GMSL time series 289 plot(time,gmsl,'-*','linewidth',3); grid on; 290 xlabel('# month'); 300 291 ylabel('GMSL [mm/yr]'); 301 292 set(gcf,'color','w'); 302 293 %export_fig('Fig7.pdf'); 303 304 end 305 294 end %}}} -
issm/trunk-jpl/examples/SlrGRACE_NIMS/runme.m
r24864 r25915 1 2 1 clear all; 3 2 addpath('../Data','../Functions'); 4 3 5 steps=[1]; % [1:8] 6 7 if any(steps==1) 4 steps=[1:8]; 5 6 try 7 % [1:8] 8 9 if any(steps==1) %{{{ 8 10 disp(' Step 1: Global mesh creation'); 9 11 10 resolution=300; % [km] 11 radius = 6.371012*10^3; % [km] 12 13 md=model; 14 md.mask=maskpsl(); 12 resolution=300; % [km] 13 radius = 6.371012*10^3; % [km] 14 15 md=model; 15 16 md.mesh=gmshplanet('radius',radius,'resolution',resolution); 16 17 17 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 18 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 18 19 19 20 save ./Models/SlrGRACE_Mesh md; 20 21 21 22 plotmodel (md,'data',md.mask.ocean_levelset,'edgecolor','k'); 22 23 end 24 25 if any(steps==2) 23 end %}}} 24 25 if any(steps==2) %{{{ 26 26 disp(' Step 2: Global mesh creation: refined coastlines'); 27 27 28 28 numrefine=1; 29 resolution=150*1e3; % inital resolution [m] 29 resolution=150*1e3; % inital resolution [m] 30 30 radius = 6.371012*10^6; % mean radius of Earth, m 31 mindistance_coast=150*1e3; % coastal resolution [m] 32 mindistance_source=75*1e3; % source resolution [m]31 mindistance_coast=150*1e3; % coastal resolution [m] 32 mindistance_source=75*1e3; % source resolution [m] 33 33 mindistance_land=300*1e3; % resolution on the continents [m] 34 maxdistance=600*1e3; % max element size (on mid-oceans) [m] 35 36 md=model; 37 md.mask=maskpsl(); 38 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3); % attributes in [km] 34 maxdistance=600*1e3; % max element size (on mid-oceans) [m] 35 36 md=model; 37 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3); % attributes in [km] 39 38 40 39 for i=1:numrefine, 41 40 42 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 41 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 43 42 44 43 distance=zeros(md.mesh.numberofvertices,1); 45 44 46 pos=find(~md.mask.ocean_levelset); coaste.lat=md.mesh.lat(pos); coaste.long=md.mesh.long(pos); 47 pos=find(md.mask.ocean_levelset); coasto.lat=md.mesh.lat(pos); coasto.long=md.mesh.long(pos); 45 pos=find(~md.mask.ocean_levelset); coaste.lat=md.mesh.lat(pos); coaste.long=md.mesh.long(pos); 46 pos=find(md.mask.ocean_levelset); coasto.lat=md.mesh.lat(pos); coasto.long=md.mesh.long(pos); 48 47 49 48 for j=1:md.mesh.numberofvertices 50 phi1=md.mesh.lat(j)/180*pi; lambda1=md.mesh.long(j)/180*pi; 49 phi1=md.mesh.lat(j)/180*pi; lambda1=md.mesh.long(j)/180*pi; 51 50 if md.mask.ocean_levelset(j), 52 phi2=coaste.lat/180*pi; lambda2=coaste.long/180*pi; 51 phi2=coaste.lat/180*pi; lambda2=coaste.long/180*pi; 53 52 deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1); 54 53 d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2)); 55 54 else 56 phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi; 55 phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi; 57 56 deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1); 58 57 d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2)); … … 62 61 pos=find(distance<mindistance_coast); distance(pos)=mindistance_coast; 63 62 64 pos2=find(md.mask.ocean_levelset~=1 & distance>mindistance_land); 65 distance(pos2)=mindistance_land; 63 pos2=find(md.mask.ocean_levelset~=1 & distance>mindistance_land); 64 distance(pos2)=mindistance_land; 66 65 67 66 domain = 'Greenland'; %'Antarctica'; %'HMA'; %'Alaska'; %'Glaciers' 68 mask = domain_mask(md.mesh.lat,md.mesh.long,domain); 67 mask = domain_mask(md.mesh.lat,md.mesh.long,domain); 69 68 distance(mask>0)=mindistance_source; 70 69 71 dist=min(maxdistance,distance); 70 dist=min(maxdistance,distance); 72 71 md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3,'refine',md.mesh,'refinemetric',dist); 73 74 72 end 75 73 76 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 74 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 77 75 78 76 save ./Models/SlrGRACE_Mesh_refined md; 79 77 80 78 plotmodel (md,'data',md.mask.ocean_levelset,'edgecolor','k'); 81 82 end 83 84 if any(steps==3) 79 end %}}} 80 81 if any(steps==3) %{{{ 85 82 disp(' Step 3: Define loads in meters of ice height equivalent'); 86 83 md = loadmodel('./Models/SlrGRACE_Mesh_refined'); 87 84 88 85 year_month = 2007+15/365; 89 time_range = [year_month year_month]; 90 water_load = grace(md.mesh.elements,md.mesh.lat,md.mesh.long,time_range(1),time_range(2)); 91 92 index = md.mesh.elements; 93 lat=90-md.mesh.lat; 94 lon=md.mesh.long; 95 lon(lon<0)=180+(180+lon(lon<0)); 96 97 ax_0=lat(index(:,1)); ay_0=lon(index(:,1)); 98 bx_0=lat(index(:,2)); by_0=lon(index(:,2)); 99 cx_0=lat(index(:,3)); cy_0=lon(index(:,3)); 100 86 time_range = [year_month year_month]; 87 water_load = grace(md.mesh.elements,md.mesh.lat,md.mesh.long,time_range(1),time_range(2)); 88 89 index = md.mesh.elements; 90 lat=90-md.mesh.lat; 91 lon=md.mesh.long; 92 lon(lon<0)=180+(180+lon(lon<0)); 93 94 ax_0=lat(index(:,1)); ay_0=lon(index(:,1)); 95 bx_0=lat(index(:,2)); by_0=lon(index(:,2)); 96 cx_0=lat(index(:,3)); cy_0=lon(index(:,3)); 97 101 98 for ii=1:md.mesh.numberofelements 102 99 if (min([ay_0(ii),by_0(ii),cy_0(ii)])==0 && max([ay_0(ii),by_0(ii),cy_0(ii)])>180) 103 100 if ay_0(ii)==0 104 101 ay_0(ii)=360; 105 end 102 end 106 103 if by_0(ii)==0 107 by_0(ii)=360; 108 end 109 if cy_0(ii)==0 110 cy_0(ii)=360; 111 end 112 end 104 by_0(ii)=360; 105 end 106 if cy_0(ii)==0 107 cy_0(ii)=360; 108 end 109 end 113 110 end 114 115 ay_0(ax_0==0)=(by_0(ax_0==0)+cy_0(ax_0==0))./2; 116 by_0(bx_0==0)=(cy_0(bx_0==0)+ay_0(bx_0==0))./2; 117 cy_0(cx_0==0)=(ay_0(cx_0==0)+by_0(cx_0==0))./2; 118 119 ay_0(ax_0==180)=(by_0(ax_0==180)+cy_0(ax_0==180))./2; 120 by_0(bx_0==180)=(cy_0(bx_0==180)+ay_0(bx_0==180))./2; 121 cy_0(cx_0==180)=(ay_0(cx_0==180)+by_0(cx_0==180))./2; 122 123 lat_element=(ax_0+bx_0+cx_0)/3; 111 112 ay_0(ax_0==0)=(by_0(ax_0==0)+cy_0(ax_0==0))./2; 113 by_0(bx_0==0)=(cy_0(bx_0==0)+ay_0(bx_0==0))./2; 114 cy_0(cx_0==0)=(ay_0(cx_0==0)+by_0(cx_0==0))./2; 115 116 ay_0(ax_0==180)=(by_0(ax_0==180)+cy_0(ax_0==180))./2; 117 by_0(bx_0==180)=(cy_0(bx_0==180)+ay_0(bx_0==180))./2; 118 cy_0(cx_0==180)=(ay_0(cx_0==180)+by_0(cx_0==180))./2; 119 120 lat_element=(ax_0+bx_0+cx_0)/3; 124 121 lon_element=(ay_0+by_0+cy_0)/3; 125 122 126 lat_element_0 = 90-lat_element; 123 lat_element_0 = 90-lat_element; lon_element_0 = lon_element; 127 124 lon_element_0(lon_element>180) = (lon_element(lon_element>180)-180) - 180; 128 129 domain = 'Greenland'; %'HMA'; %'Alaska'; %'Antarctica'; %'Glaciers'; 130 mask = domain_mask(lat_element_0,lon_element_0,domain); 131 132 md.slr.deltathickness = mask.*water_load*md.materials.rho_freshwater/md.materials.rho_ice; 133 134 save ./Models/SlrGRACE_Loads md; 135 136 plotmodel(md,'data',md.slr.deltathickness,'view',[90 90],'title','Ice height equivalent [m]'); 137 138 end 139 140 if any(steps==4) 125 126 domain = 'Greenland'; %'HMA'; %'Alaska'; %'Antarctica'; %'Glaciers'; 127 mask = domain_mask(lat_element_0,lon_element_0,domain); 128 129 md.slr.deltathickness = mask.*water_load*md.materials.rho_freshwater/md.materials.rho_ice; 130 131 save ./Models/SlrGRACE_Loads md; 132 133 plotmodel(md,'data',md.slr.deltathickness,'view',[90 90],'title','Ice height equivalent [m]'); 134 end %}}} 135 136 if any(steps==4) %{{{ 141 137 disp(' Step 4: Parameterization'); 142 138 md = loadmodel('./Models/SlrGRACE_Loads'); 143 139 144 nlove=10001; 145 md.slr.love_h = love_numbers('h','CM'); md.slr.love_h(nlove+1:end)=[]; 146 md.slr.love_k = love_numbers('k','CM'); md.slr.love_k(nlove+1:end)=[]; 147 md.slr.love_l = love_numbers('l','CM'); md.slr.love_l(nlove+1:end)=[]; 148 149 md.mask.ocean_levelset = ones(md.mesh.numberofvertices,1); 150 md.mask.ice_levelset = ones(md.mesh.numberofvertices,1); 140 md.solidearth.lovenumbers = lovenumbers('maxdeg',10000); 141 142 md.mask.ocean_levelset = ones(md.mesh.numberofvertices,1); 143 md.mask.ice_levelset = ones(md.mesh.numberofvertices,1); 151 144 pos=find(md.slr.deltathickness~=0); 152 md.mask.ice_levelset(md.mesh.elements(pos,:))=-1; 153 md.mask.land_levelset = 1-md.mask.ocean_levelset; 145 md.mask.ice_levelset(md.mesh.elements(pos,:))=-1; 146 md.mask.land_levelset = 1-md.mask.ocean_levelset; 154 147 155 148 md.slr.sealevel=zeros(md.mesh.numberofvertices,1); … … 161 154 md.slr.Ugia=zeros(md.mesh.numberofvertices,1); 162 155 163 md.slr.geodetic=1; 156 md.slr.geodetic=1; 164 157 165 158 di=md.materials.rho_ice/md.materials.rho_water; … … 168 161 md.geometry.base=md.geometry.surface-md.geometry.thickness; 169 162 md.geometry.bed=md.geometry.base; 170 163 171 164 md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1); 172 165 md.materials.rheology_B=paterson(md.initialization.temperature); 173 166 md.materials.rheology_n=3*ones(md.mesh.numberofelements,1); 174 167 175 168 md.miscellaneous.name='SlrGRACE'; 176 177 save ./Models/SlrGRACE_Parameterization md; 178 179 end 180 181 if any(steps==5) 169 170 save ./Models/SlrGRACE_Parameterization md; 171 end %}}} 172 173 if any(steps==5) %{{{ 182 174 disp(' Step 5: Solve Slr solver'); 183 175 md = loadmodel('./Models/SlrGRACE_Parameterization'); 184 176 185 md.slr.rigid=1; 186 md.slr.elastic=1; 177 md.slr.rigid=1; 178 md.slr.elastic=1; 187 179 md.slr.rotation=1; 188 180 189 md.cluster=generic('name',oshostname(),'np',3); 181 md.cluster=generic('name',oshostname(),'np',3); 190 182 md.verbose=verbose('111111111'); 191 183 192 184 md=solve(md,'Slr'); 193 185 194 save ./Models/SlrGRACE_Solution md; 195 196 end 197 198 if any(steps==6) 186 save ./Models/SlrGRACE_Solution md; 187 end %}}} 188 189 if any(steps==6) %{{{ 199 190 disp(' Step 6: Plot solutions'); 200 191 md = loadmodel('./Models/SlrGRACE_Solution'); 201 192 202 sol1 = md.slr.deltathickness*100; % [cm]203 sol2 = md.results.SealevelriseSolution.Sealevel*1000; % [mm]204 205 sol_name={'Change in water equivalent height [cm]', 'Relative sea-level [mm]'}; 206 fig_name={'Fig_dH.pdf','Fig_slr.pdf'}; 207 208 res = 1.0; 193 sol1 = md.slr.deltathickness*100; % [cm] 194 sol2 = md.results.SealevelriseSolution.Sealevel*1000; % [mm] 195 196 sol_name={'Change in water equivalent height [cm]', 'Relative sea-level [mm]'}; 197 fig_name={'Fig_dH.pdf','Fig_slr.pdf'}; 198 199 res = 1.0; 209 200 210 201 [lat_grid, lon_grid] = meshgrid(linspace(-90,90,180/res), linspace(-180,180,360/res)); 211 sol_grid = zeros(size(lat_grid)); 202 sol_grid = zeros(size(lat_grid)); 212 203 213 204 for kk=1:2 214 205 sol=eval(sprintf('sol%d',kk)); 215 216 if length(sol)==md.mesh.numberofelements 206 207 if length(sol)==md.mesh.numberofelements 217 208 for jj=1:md.mesh.numberofelements 218 209 ii=(jj-1)*3; … … 220 211 end 221 212 for jj=1:md.mesh.numberofvertices 222 pos=ceil(find(pp==jj)/3); 223 temp(jj)=mean(sol(pos)); 224 end 225 sol=temp'; 226 end 227 228 F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol); 213 pos=ceil(find(pp==jj)/3); 214 temp(jj)=mean(sol(pos)); 215 end 216 sol=temp'; 217 end 218 219 F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol); 229 220 F.Method = 'linear'; 230 F.ExtrapolationMethod = 'linear'; 221 F.ExtrapolationMethod = 'linear'; 231 222 232 223 sol_grid = F(lat_grid, lon_grid); 233 sol_grid(isnan(sol_grid))=0; 234 sol_grid(lat_grid>85 & sol_grid==0) = NaN; 224 sol_grid(isnan(sol_grid))=0; 225 sol_grid(lat_grid>85 & sol_grid==0) = NaN; 235 226 236 227 set(0,'DefaultAxesFontSize',18,'DefaultAxesLineWidth',1,'DefaultTextFontSize',18,'DefaultLineMarkerSize',8) 237 figure1=figure('Position', [100, 100, 1000, 500]); 238 gcf; load coast; cla; 228 figure1=figure('Position', [100, 100, 1000, 500]); 229 gcf; load coast; cla; 239 230 pcolor(lon_grid,lat_grid,sol_grid); shading flat; hold on; 240 231 if (kk==1) 241 geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white'); 232 geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white'); 242 233 else 243 geoshow(lat,long,'DisplayType','polygon','FaceColor',[0.75 0.75 0.75]); 244 end 245 plot(long,lat,'k'); hold off; 234 geoshow(lat,long,'DisplayType','polygon','FaceColor',[0.75 0.75 0.75]); 235 end 236 plot(long,lat,'k'); hold off; 246 237 c1=colorbar; 247 colormap('haxby'); 248 caxis([-floor(min(abs(min(sol)),abs(max(sol)))) floor(min(abs(min(sol)),abs(max(sol))))]); 249 xlim([-180 180]); 250 ylim([-90 90]); 251 grid on; 252 title(sol_name(kk)); 238 colormap('haxby'); 239 caxis([-floor(min(abs(min(sol)),abs(max(sol)))) floor(min(abs(min(sol)),abs(max(sol))))]); 240 xlim([-180 180]); 241 ylim([-90 90]); 242 grid on; 243 title(sol_name(kk)); 253 244 set(gcf,'color','w'); 254 %export_fig(fig_name{kk}); 245 %export_fig(fig_name{kk}); 255 246 end 256 end 257 258 if any(steps==7) 247 end %}}} 248 249 if any(steps==7) %{{{ 259 250 disp(' Step 7: Transient run'); 260 251 md = loadmodel('./Models/SlrGRACE_Parameterization'); 261 252 262 253 disp('Projecting loads onto the mesh...'); 263 time_range = [2005+15/365 2014+350/365]; 264 %time_range = 2007 + [15 350]/365; 265 water_load = grace(md.mesh.elements,md.mesh.lat,md.mesh.long,time_range(1),time_range(2)); 266 267 [ne,nt]=size(water_load); 268 269 md.slr.deltathickness(1:ne,:) = water_load*md.materials.rho_freshwater/md.materials.rho_ice; 270 md.slr.deltathickness(ne+1,:)=[1:nt]; % times 271 254 time_range = [2005+15/365 2014+350/365]; 255 %time_range = 2007 + [15 350]/365; 256 water_load = grace(md.mesh.elements,md.mesh.lat,md.mesh.long,time_range(1),time_range(2)); 257 258 [ne,nt]=size(water_load); 259 md.slr.deltathickness = zeros(ne+1,nt); 260 md.slr.deltathickness(1:ne,:) = water_load*md.materials.rho_freshwater/md.materials.rho_ice; 261 md.slr.deltathickness(ne+1,:)=[1:nt]; % times 262 272 263 md.transient.issmb=0; 273 md.transient.ismasstransport=0; 274 md.transient.isstressbalance=0; 264 md.transient.ismasstransport=0; 265 md.transient.isstressbalance=0; 275 266 md.transient.isthermal=0; 276 267 md.transient.isslr=1; 277 268 278 269 md.timestepping.start_time=-1; 279 md.timestepping.final_time=nt; 280 md.timestepping.time_step=1; 281 270 md.timestepping.final_time=nt; 271 md.timestepping.time_step=1; 272 md.timestepping.interp_forcings=0; 282 273 md.settings.output_frequency=1; 283 274 284 md.cluster=generic('name',oshostname(),'np',3); 275 md.cluster=generic('name',oshostname(),'np',3); 285 276 md.verbose=verbose('111111111'); 286 277 287 278 md=solve(md,'tr'); 288 279 289 save ./Models/SlrGRACE_Transient md; 290 291 end 292 293 if any(steps==8) 280 save ./Models/SlrGRACE_Transient md; 281 end %}}} 282 283 if any(steps==8) %{{{ 294 284 disp(' Step 8: Plot transient'); 295 285 md = loadmodel('./Models/SlrGRACE_Transient'); 296 286 297 time = md.slr.deltathickness(end,:); 298 299 tide_x = 37+29/60; 300 tide_y = 126+20/60; 287 time = md.slr.deltathickness(end,:); 288 289 tide_x = 37+29/60; % degree N 290 tide_y = 126+20/60; % degree E 301 291 302 292 for tt=1:length(time) 303 gmsl(tt) = md.results.TransientSolution(tt).SealevelRSLEustatic*1000; 304 sol = (md.results.TransientSolution(tt+1).Sealevel-md.results.TransientSolution(tt).Sealevel)*1000;293 gmsl(tt) = md.results.TransientSolution(tt).SealevelRSLEustatic*1000; 294 sol = (md.results.TransientSolution(tt+1).Sealevel-md.results.TransientSolution(tt).Sealevel)*1000; 305 295 slr_incheon(tt) = griddata(md.mesh.lat,md.mesh.long,sol,tide_x,tide_y); 306 296 end 307 297 308 plot(2005+time/12,gmsl-gmsl(1),'-*','linewidth',3); grid on; hold on; 309 plot(2005+time/12,slr_incheon-slr_incheon(1),'-*r','linewidth',3); hold off; 310 xlabel('Year'); 298 plot(2005+time/12,gmsl-gmsl(1),'-*','linewidth',3); grid on; hold on; 299 plot(2005+time/12,slr_incheon-slr_incheon(1),'-*r','linewidth',3); hold off; 300 xlabel('Year'); 311 301 ylabel('GMSL [mm]'); 312 302 set(gcf,'color','w'); 313 legend('GMSL','Incheon'); 314 315 end 316 303 legend('GMSL','Incheon'); 304 end %}}} -
issm/trunk-jpl/examples/UncertaintyQuantification/runme.m
r22125 r25915 1 1 %PIG Uncertainty Quantification Application 2 steps=[1]; 3 4 if any(steps==1) 5 disp(' Step 1: plot flux gates'); 6 2 steps=[1]; 3 4 if any(steps==1) %{{{ 5 disp(' Step 1: plot flux gates'); 6 7 7 md = loadmodel('../Pig/Models/PIG_Control_drag'); 8 8 … … 28 28 '8','9','10','11','12','13'},... 29 29 'textposition',textpositions); 30 31 end 32 if any(steps==2) 33 disp(' Step 2: compute cross overs from CRESIS'); 34 30 end %}}} 31 32 if any(steps==2) %{{{ 33 disp(' Step 2: compute cross overs from CRESIS'); 34 35 35 md = loadmodel('../Pig/Models/PIG_Control_drag'); 36 36 37 37 %load cross overs: CRESIS McCord Antarctica, 2009 (courtesy of John Paden) 38 38 load('../Data/CrossOvers2009.mat'); 39 39 40 40 %interpolate cross over errors over our mesh vertices 41 41 DeltaHH=InterpFromMeshToMesh2d(index,x,y,dhh,md.mesh.x,md.mesh.y); … … 46 46 %filter out unrealistic error ranges 47 47 flags=ContourToNodes(md.mesh.x,md.mesh.y,'ErrorContour.exp',1); 48 pos=find(~flags); DeltaHH(pos)=0; 48 pos=find(~flags); DeltaHH(pos)=0; 49 49 50 50 %avoid large unrealistic values 51 51 pos=find(DeltaHH>1); DeltaHH(pos)=1; 52 52 pos=find(DeltaHH<-1); DeltaHH(pos)=-1; 53 53 54 54 %transform into absolute errors and setup a minimum error everywhere. 55 55 DeltaHH=abs(DeltaHH); 56 pos=find(DeltaHH==0); pos2=find(DeltaHH~=0); 56 pos=find(DeltaHH==0); pos2=find(DeltaHH~=0); 57 57 DeltaHH(pos)=min(DeltaHH(pos2)); 58 58 59 59 save Models/PIG.CrossOvers DeltaHH 60 61 end 62 if any(steps==3) 63 disp(' Step 3: sampling analysis'); 64 60 end %}}} 61 62 if any(steps==3) %{{{ 63 disp(' Step 3: sampling analysis'); 64 65 65 %load model and cross over errors 66 66 md = loadmodel('../Pig/Models/PIG_Control_drag'); … … 68 68 69 69 %partition the mesh 70 md.qmu.numberofpartitions=50; 71 md=partitioner(md,'package','chaco','npart',md.qmu.numberofpartitions,... 72 'weighting','on'); 73 md.qmu.partition=md.qmu.partition-1; %switch partition to c-indexing 70 npart=50; 71 partition=partitioner(md,'package','chaco','npart',npart,'weighting','on')-1; 74 72 75 73 %make DeltaHH into our 3 sigma deviation 76 74 DeltaHH=DeltaHH/6; %2 (to transform DeltaHH into a radius) x 3 (for 3 sigma) 77 DeltaHH_on_partition=AreaAverageOntoPartition(md,DeltaHH); 78 DeltaHH_on_grids=DeltaHH_on_partition(md.qmu.partition+1); %just to check in case 79 80 md.qmu.variables.thickness=normal_uncertain('scaled_Thickness',1,1); 81 md.qmu.variables.thickness.stddev=DeltaHH_on_partition; 75 DeltaHH_on_partition=AreaAverageOntoPartition(md,DeltaHH,partition); 76 DeltaHH_on_grids=DeltaHH_on_partition(partition+1); %just to check in case 77 78 md.qmu.variables.thickness=normal_uncertain('descriptor','scaled_Thickness',... 79 'mean',ones(npart,1),... 80 'stddev',DeltaHH_on_partition,... 81 'partition',partition); 82 82 83 83 %responses … … 110 110 111 111 %mass flux profiles 112 md.qmu.mass_flux_profiles={'MassFlux1.exp',... 113 'MassFlux2.exp',... 114 'MassFlux3.exp',... 115 'MassFlux4.exp',... 116 'MassFlux5.exp',... 117 'MassFlux6.exp',... 118 'MassFlux7.exp',... 119 'MassFlux8.exp',... 120 'MassFlux9.exp',... 121 'MassFlux10.exp',... 122 'MassFlux11.exp',... 123 'MassFlux12.exp',... 124 'MassFlux13.exp'}; 112 md.qmu.mass_flux_profiles={... 113 'MassFlux1.exp',... 114 'MassFlux2.exp',... 115 'MassFlux3.exp',... 116 'MassFlux4.exp',... 117 'MassFlux5.exp',... 118 'MassFlux6.exp',... 119 'MassFlux7.exp',... 120 'MassFlux8.exp',... 121 'MassFlux9.exp',... 122 'MassFlux10.exp',... 123 'MassFlux11.exp',... 124 'MassFlux12.exp',... 125 'MassFlux13.exp'... 126 }; 125 127 md.qmu.mass_flux_profile_directory='../MassFluxes/'; 126 128 127 129 %% sampling analysis 128 md.qmu.method =dakota_method('nond_samp'); 129 md.qmu.method(end)=dmeth_params_set(md.qmu.method(end),... 130 'seed',1234,... 131 'samples',30,... 132 'sample_type','lhs'); %random or lhs 130 md.qmu.method =dakota_method('nond_samp'); 131 md.qmu.method(end) =dmeth_params_set(... 132 md.qmu.method(end),... 133 'seed',1234,... 134 'samples',30,... 135 'sample_type','lhs'... 136 ); %random or lhs 133 137 134 138 %% a variety of parameters … … 143 147 %Turn off verbosity 144 148 md.verbose=verbose(0); 145 149 146 150 %Here, we choose to run with 4 processors, 3 for DAKOTA 147 151 % while one serves as the master … … 157 161 md=solve(md,'Stressbalance','overwrite','y'); 158 162 159 save ./Models/PIG.Sampling md; 160 end 161 if any(steps==4) 162 disp(' Step 4: sensitivity analysis'); 163 163 save ./Models/PIG.Sampling md; 164 end %}}} 165 166 if any(steps==4) %{{{ 167 disp(' Step 4: sensitivity analysis'); 168 164 169 %load model 165 170 md = loadmodel('../Pig/Models/PIG_Control_drag'); … … 195 200 196 201 %mass flux profiles 197 md.qmu.mass_flux_profiles={'MassFlux1.exp',... 198 'MassFlux2.exp',... 199 'MassFlux3.exp',... 200 'MassFlux4.exp',... 201 'MassFlux5.exp',... 202 'MassFlux6.exp',... 203 'MassFlux7.exp',... 204 'MassFlux8.exp',... 205 'MassFlux9.exp',... 206 'MassFlux10.exp',... 207 'MassFlux11.exp',... 208 'MassFlux12.exp',... 209 'MassFlux13.exp'}; 202 md.qmu.mass_flux_profiles={... 203 'MassFlux1.exp',... 204 'MassFlux2.exp',... 205 'MassFlux3.exp',... 206 'MassFlux4.exp',... 207 'MassFlux5.exp',... 208 'MassFlux6.exp',... 209 'MassFlux7.exp',... 210 'MassFlux8.exp',... 211 'MassFlux9.exp',... 212 'MassFlux10.exp',... 213 'MassFlux11.exp',... 214 'MassFlux12.exp',... 215 'MassFlux13.exp'... 216 }; 210 217 md.qmu.mass_flux_profile_directory='../MassFluxes/'; 211 218 … … 227 234 % while one serves as the master 228 235 md.cluster=generic('name',oshostname,'np',2); 229 236 230 237 %Dakota runs in parallel with a master/slave configuration. 231 238 % At least 2 cpu's are needed to run the UQ … … 238 245 md.verbose=verbose('qmu',true); 239 246 md=solve(md,'Stressbalance','overwrite','y'); 240 241 save ./Models/PIG.Sensitivity md; 242 end 243 if any(steps==5) 247 248 save ./Models/PIG.Sensitivity md; 249 end %}}} 250 251 if any(steps==5) %{{{ 244 252 disp(' Step 5: plot partition'); 245 253 246 254 %load model 247 255 md = loadmodel('./Models/PIG.Sampling'); 248 256 249 257 plotmodel(md,'data','mesh','partitionedges','on',... 250 258 'linewidth',2, 'axis#all','image','unit','km','colorbar','off',... 251 259 'title','Partition Edges on ISSM mesh','grid','on'); 252 253 end 254 if any(steps==6) 255 disp(' Step 6: plot histogram'); 256 260 end %}}} 261 262 if any(steps==6) %{{{ 263 disp(' Step 6: plot histogram'); 264 257 265 %load model 258 266 md = loadmodel('./Models/PIG.Sampling'); … … 270 278 'none','EdgeColor','red'); 271 279 272 end 273 if any(steps==7) 274 disp(' Step 7: plot sensitivity'); 275 280 end %}}} 281 282 if any(steps==7) %{{{ 283 disp(' Step 7: plot sensitivity'); 284 276 285 %load model 277 286 md = loadmodel('./Models/PIG.Sensitivity'); … … 280 289 281 290 %which profile are we looking at? 282 index=1; 291 index=1; 283 292 284 293 %To plot sensitivities … … 309 318 'colorbartitle#3','If_{B}','unit#all','km','figure',2,... 310 319 'title','Importance Factors: H, \alpha, B'); 311 312 end 320 end %}}} -
issm/trunk-jpl/examples/shakti/runme.m
r23090 r25915 1 1 steps=[1:3]; 2 2 3 if any(steps==1) 3 if any(steps==1) %{{{ 4 4 disp(' Step 1: Mesh'); 5 5 … … 8 8 9 9 save MoulinMesh md 10 end 11 if any(steps==2) 10 end %}}} 11 12 if any(steps==2) %{{{ 12 13 disp(' Step 2: Parameterization'); 13 14 md=loadmodel('MoulinMesh'); … … 21 22 % Change hydrology class to Sommers' SHaKTI model 22 23 md.hydrology=hydrologyshakti(); 23 24 24 25 % Define initial water head such that water pressure is 50% of ice overburden pressure 25 26 md.hydrology.head = 0.5*md.materials.rho_ice/md.materials.rho_freshwater*md.geometry.thickness + md.geometry.base; … … 48 49 49 50 save MoulinParam md; 50 end 51 if any(steps==3); 51 end %}}} 52 53 if any(steps==3) %{{{ 52 54 disp(' Step 3: Solve!'); 53 55 md=loadmodel('MoulinParam'); … … 80 82 81 83 save MoulinTransient md 82 end 84 end %}}} -
issm/trunk-jpl/jenkins/pine_island-mac-examples
r25827 r25915 1 # NOTE: This configuration adds solid earth and Dakota capabilities to the 2 basic build. 1 # NOTE: Same configuration as pine_island-mac-full 3 2 4 3 #--------------------# … … 6 5 #--------------------# 7 6 8 MATLAB_PATH="/Applications/MATLAB_R201 8a.app"7 MATLAB_PATH="/Applications/MATLAB_R2019b.app" 9 8 10 9 ISSM_CONFIG='\ … … 19 18 --with-fortran-lib="-L/usr/local/Cellar/gcc/10.2.0/lib/gcc/10 -lgfortran" \ 20 19 --with-mpi-include=${ISSM_DIR}/externalpackages/petsc/install/include \ 21 --with-mpi-libflags="-L${ISSM_ DIR}/externalpackages/petsc/install/lib -lmpi -lmpicxx -lmpifort" \22 --with-blas-lapack-dir=${ISSM_ DIR}/externalpackages/petsc/install \23 --with-metis-dir=${ISSM_ DIR}/externalpackages/petsc/install \24 --with-scalapack-dir=${ISSM_ DIR}/externalpackages/petsc/install \25 --with-mumps-dir=${ISSM_ DIR}/externalpackages/petsc/install \26 --with-hdf5-dir=${ISSM_ DIR}/externalpackages/petsc/install \27 --with-petsc-dir=${ISSM_ DIR}/externalpackages/petsc/install \28 --with-gsl-dir=${ISSM_ DIR}/externalpackages/gsl/install \29 --with-boost-dir=${ISSM_ DIR}/externalpackages/boost/install \30 --with-dakota-dir=${ISSM_ DIR}/externalpackages/dakota/install \31 --with-triangle-dir=${ISSM_ DIR}/externalpackages/triangle/install \32 --with-chaco-dir=${ISSM_ DIR}/externalpackages/chaco/install \33 --with-m1qn3-dir=${ISSM_ DIR}/externalpackages/m1qn3/install \34 --with-semic-dir=${ISSM_ DIR}/externalpackages/semic/install \20 --with-mpi-libflags="-L${ISSM_EXT_SHARED_DIR}/petsc/install/lib -lmpi -lmpicxx -lmpifort" \ 21 --with-blas-lapack-dir=${ISSM_EXT_SHARED_DIR}/petsc/install \ 22 --with-metis-dir=${ISSM_EXT_SHARED_DIR}/petsc/install \ 23 --with-scalapack-dir=${ISSM_EXT_SHARED_DIR}/petsc/install \ 24 --with-mumps-dir=${ISSM_EXT_SHARED_DIR}/petsc/install \ 25 --with-hdf5-dir=${ISSM_EXT_SHARED_DIR}/petsc/install \ 26 --with-petsc-dir=${ISSM_EXT_SHARED_DIR}/petsc/install \ 27 --with-gsl-dir=${ISSM_EXT_SHARED_DIR}/gsl/install \ 28 --with-boost-dir=${ISSM_EXT_SHARED_DIR}/boost/install \ 29 --with-dakota-dir=${ISSM_EXT_SHARED_DIR}/dakota/install \ 30 --with-triangle-dir=${ISSM_EXT_SHARED_DIR}/triangle/install \ 31 --with-chaco-dir=${ISSM_EXT_DIR}/chaco/install \ 32 --with-m1qn3-dir=${ISSM_EXT_DIR}/m1qn3/install \ 33 --with-semic-dir=${ISSM_EXT_DIR}/semic/install \ 35 34 ' 36 35 … … 49 48 netcdf install-4.7-parallel.sh 50 49 proj install-6.2.sh 51 gdal install-3-python -netcdf.sh50 gdal install-3-python.sh 52 51 gshhg install.sh 53 gmt install-6 .0-mac.sh52 gmt install-6-mac.sh 54 53 gmsh install-4.sh 55 54 triangle install-mac.sh … … 68 67 PYTHON_TEST=0 69 68 JAVASCRIPT_TEST=0 70 EXAMPLES_TEST= 069 EXAMPLES_TEST=1 71 70 72 71 # Number of CPUs used in ISSM compilation -
issm/trunk-jpl/test/NightlyRun/test418.m
r25110 r25915 9 9 %partitioning 10 10 npart=100; 11 [partition, md]=partitioner(md,'package','chaco','npart',npart); 12 partition=partition-1; 11 partition=partitioner(md,'package','chaco','npart',npart)-1; 13 12 14 13 vector=(1:1:md.mesh.numberofvertices)';
Note:
See TracChangeset
for help on using the changeset viewer.