Changeset 25915


Ignore:
Timestamp:
12/29/20 13:27:22 (4 years ago)
Author:
jdquinn
Message:

CHG: Initial commit of changes for example build; clean up

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  
    11% Mismip3D experiment with AMR using BAMG
    2 steps=[1:3]; 
     2steps=[1:3];
    33
    44if any(steps==1)
    55        disp('   Step 1: Coarse mesh');
    6        
     6
    77        %Generate an unstructured coarse mesh on the MISMIP domain with typical element edge length equal to 10,000 m
    88        md=bamg(model,'domain','./domain.exp','hmax',10000,'splitcorners',1);
    99
    1010        save AMRCoarseMesh md
    11 end
     11end
     12
    1213if any(steps==2)
    1314        disp('   Step 2: Parameterization');
     
    1617
    1718        md=setmask(md,'','');
    18        
     19
    1920        % Run parameterization script to set up geometry, inital velocity, material properties, etc.
    2021        md=parameterize(md,'./mismip.par');
     
    2324        % Here, we are refining around the grounding line
    2425        % 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
    2627        % The distance used here is 10000 m (10 km), used in both side around the grouding line (upstream and downstream)
    2728        md.amr.groundingline_resolution=1000;
     
    3536        save AMRParam md
    3637end
    37 if any(steps==3);
    38    disp('   Step 3: Solve!');
    39          
     38
     39if any(steps==3)
     40        disp('   Step 3: Solve!');
     41
    4042        md=loadmodel('AMRParam');
    4143
     
    4345        md.timestepping.time_step=1;
    4446        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
    4648        md.stressbalance.maxiter=30;
    4749        md.stressbalance.abstol=NaN;
    4850        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).
    4952        md.verbose=verbose('convergence',false,'solution',true);
    50        
     53
    5154        % Specify that you want to run the model on your current (local host) computer
    5255        % Change the number of processors according to your machine (here np=2)
  • issm/trunk-jpl/examples/EsaGRACE/runme.m

    r24864 r25915  
    1 
    21clear all;
    32addpath('../Data','../Functions');
    43
    5 steps=[1]; % [1:5] 
     4steps=[1]; % [1:5]
    65
    7 if any(steps==1)
     6if any(steps==1) %{{{
    87        disp('   Step 1: Global mesh creation');
    98
    10         resolution=300;                 % [km] 
    11         radius = 6.371012*10^3; % [km] 
     9        resolution=300;                 % [km]
     10        radius = 6.371012*10^3; % [km]
    1211
    13         md=model;
    14         md.mask=maskpsl();
     12        md=model;
    1513        md.mesh=gmshplanet('radius',radius,'resolution',resolution);
    1614
    17         md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 
     15        md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long);
    1816
    1917        save ./Models/EsaGRACE_Mesh md;
    20        
     18
    2119        plotmodel (md,'data',md.mask.ocean_levelset,'edgecolor','k');
     20end %}}}
    2221
    23 end
    24 
    25 if any(steps==2)
     22if any(steps==2) %{{{
    2623        disp('   Step 2: Define loads in meters of ice height equivalent');
    2724        md = loadmodel('./Models/EsaGRACE_Mesh');
    2825
    2926        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];
    3528
    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
    3835        plotmodel (md,'data',md.esa.deltathickness,...
    3936                'view',[90 -90],'caxis',[-.1 .1],...
    4037                'title','Ice height equivalent [m]');
     38end %}}}
    4139
    42 end
    43 
    44 if any(steps==3)
     40if any(steps==3) %{{{
    4541        disp('   Step 3: Parameterization');
    4642        md = loadmodel('./Models/EsaGRACE_Loads');
    4743
    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;
    5147
    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);
    5450        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;
    5753
    5854        di=md.materials.rho_ice/md.materials.rho_water;
     
    6157        md.geometry.base=md.geometry.surface-md.geometry.thickness;
    6258        md.geometry.bed=md.geometry.base;
    63        
     59
    6460        md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1);
    6561        md.materials.rheology_B=paterson(md.initialization.temperature);
    6662        md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
    67        
     63
    6864        md.miscellaneous.name='EsaGRACE';
    69        
    70         save ./Models/EsaGRACE_Parameterization md;
    7165
    72 end
     66        save ./Models/EsaGRACE_Parameterization md;
     67end %}}}
    7368
    74 if any(steps==4)
     69if any(steps==4) %{{{
    7570        disp('   Step 4: Solve Esa solver');
    7671        md = loadmodel('./Models/EsaGRACE_Parameterization');
    7772
    7873        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);
    8176        md.verbose=verbose('111111111');
    8277
    8378        md=solve(md,'Esa');
    8479
    85         save ./Models/EsaGRACE_Solution md;
     80        save ./Models/EsaGRACE_Solution md;
     81end %}}}
    8682
    87 end
    88 
    89 if any(steps==5)
     83if any(steps==5) %{{{
    9084        disp('   Step 5: Plot solutions');
    9185        md = loadmodel('./Models/EsaGRACE_Solution');
    9286
    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]
    9791
    9892        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'};
    10195
    102         res = 1.0; % [degree] 
     96        res = 1.0; % [degree]
    10397
    10498        [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));
    106100
    107         for kk=1:4 
     101        for kk=1:4
    108102                sol=eval(sprintf('sol%d',kk));
    109        
    110                 if length(sol)==md.mesh.numberofelements 
     103
     104                if length(sol)==md.mesh.numberofelements
    111105                        for jj=1:md.mesh.numberofelements
    112106                                ii=(jj-1)*3;
     
    114108                        end
    115109                        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));
    118112                        end
    119                         sol=temp'; 
    120                 end 
     113                        sol=temp';
     114                end
    121115
    122                 F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol); 
     116                F = scatteredInterpolant(md.mesh.lat,md.mesh.long,sol);
    123117                F.Method = 'linear';
    124                 F.ExtrapolationMethod = 'linear'; 
     118                F.ExtrapolationMethod = 'linear';
    125119
    126120                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;
    129123
    130124                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;
    134128                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;
    138132                c1=colorbar;
    139133                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));
    145139                set(gcf,'color','w');
    146                 %export_fig(fig_name{kk}); 
     140                %export_fig(fig_name{kk});
    147141        end
    148 
    149 end
    150 
     142end %}}}
  • issm/trunk-jpl/examples/EsaWahr/runme.m

    r24864 r25915  
    1 
    21clear all;
    32addpath('../Functions');
    43
    5 steps=[0]; % [0:6]
     4steps=[1]; % [1:7]
    65
    7 if any(steps==0)
    8         disp('   Step 0: Mesh creation');
     6if any(steps==1) %{{{
     7        disp('   Step 1: Mesh creation');
    98
    10         md=roundmesh(model,100000,10000);  % Domain radius and element size [m] 
     9        md=roundmesh(model,100000,10000);  % Domain radius and element size [m]
    1110
    1211        save ./Models/EsaWahr_Mesh md;
    13        
     12
    1413        plotmodel(md,'data','mesh');
     14end %}}}
    1515
    16 end
     16if any(steps==2) %{{{
     17        disp('   Step 2: Anisotropic mesh creation');
    1718
    18 if any(steps==1)
    19         disp('   Step 1: Anisotropic mesh creation');
     19        md=roundmesh(model,100000,1000);
    2020
    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);
    2224
    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);
    2826
    2927        save ./Models/EsaWahr_Mesh md;
    30        
     28
    3129        plotmodel (md,'data','mesh');
     30end %}}}
    3231
    33 end
    34 
    35 if any(steps==2)
    36         disp('   Step 2: Define loads');
     32if any(steps==3) %{{{
     33        disp('   Step 3: Define loads');
    3734        md = loadmodel('./Models/EsaWahr_Mesh');
    3835
    39         rho_w_i=md.materials.rho_freshwater/md.materials.rho_ice; 
     36        rho_w_i=md.materials.rho_freshwater/md.materials.rho_ice;
    4037
    4138        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);
    4441
    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]
    4744        rad_dist=sqrt(x_cent.^2+y_cent.^2)/1000;       
    4845        md.esa.deltathickness(rad_dist<=disc_radius) = -1.0*rho_w_i;
    4946
    50         save ./Models/EsaWahr_Loads md; 
    51        
     47        save ./Models/EsaWahr_Loads md;
     48
    5249        plotmodel (md,'data',md.esa.deltathickness,'title','Ice height equivalent [m]');
     50end %}}}
    5351
    54 end
    55 
    56 if any(steps==3)
    57         disp('   Step 3: Parameterization');
     52if any(steps==4) %{{{
     53        disp('   Step 4: Parameterization');
    5854        md = loadmodel('./Models/EsaWahr_Loads');
    5955
    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;
    6359
    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);
    6662
    6763        di=md.materials.rho_ice/md.materials.rho_water;
     
    7066        md.geometry.base=md.geometry.surface-md.geometry.thickness;
    7167        md.geometry.bed=md.geometry.base;
    72        
     68
    7369        md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1);
    7470        md.materials.rheology_B=paterson(md.initialization.temperature);
    7571        md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
    76        
     72
    7773        md.miscellaneous.name='EsaWahr';
    78        
    79         save ./Models/EsaWahr_Parameterization md;
    8074
    81 end
     75        save ./Models/EsaWahr_Parameterization md;
     76end %}}}
    8277
    83 if any(steps==4)
    84         disp('   Step 4: Solve Esa solver');
     78if any(steps==5) %{{{
     79        disp('   Step 5: Solve Esa solver');
    8580        md = loadmodel('./Models/EsaWahr_Parameterization');
    8681
    8782        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);
    9085        md.verbose=verbose('111111111');
    9186
    9287        md=solve(md,'Esa');
    9388
    94         save ./Models/EsaWahr_Solution md;
     89        save ./Models/EsaWahr_Solution md;
     90end %}}}
    9591
    96 end
    97 
    98 if any(steps==5)
    99         disp('   Step 5: Plot solutions');
     92if any(steps==6) %{{{
     93        disp('   Step 6: Plot solutions');
    10094        md = loadmodel('./Models/EsaWahr_Solution');
    10195
    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]
    106100
    107         set(0,'DefaultAxesFontSize',24,'DefaultAxesLineWidth',1,'DefaultTextFontSize',24,'DefaultLineMarkerSize',6); 
     101        set(0,'DefaultAxesFontSize',24,'DefaultAxesLineWidth',1,'DefaultTextFontSize',24,'DefaultLineMarkerSize',6);
    108102        figure('Position', [100, 100, 800, 600]);
    109103        plotmodel(md,'data',vert,...
     
    125119                'caxis#3-4',[-0.5 0.5],...
    126120                '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');
     123end %}}}
    129124
    130 end
    131 
    132 if any(steps==6)
    133         disp('   Step 6: Compare results against Wahr semi-analytic solutions');
     125if any(steps==7) %{{{
     126        disp('   Step 7: Compare results against Wahr semi-analytic solutions');
    134127        md = loadmodel('./Models/EsaWahr_Solution');
    135128
    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]
    145133
    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]
    148141        [vert_wahr, horz_wahr] = wahr(disc_radius,xi,md.esa.love_h,md.esa.love_l);
    149142
    150         set(0,'DefaultAxesFontSize',16,'DefaultAxesLineWidth',1,'DefaultTextFontSize',16,'DefaultLineMarkerSize',6); 
     143        set(0,'DefaultAxesFontSize',16,'DefaultAxesLineWidth',1,'DefaultTextFontSize',16,'DefaultLineMarkerSize',6);
    151144        figure1=figure('Position', [100, 100, 700, 400]);
    152         ylabel_1={'0',' ','1','','2','','3',''}; 
     145        ylabel_1={'0',' ','1','','2','','3',''};
    153146        axes1 = axes('Layer','top','Position',[0.1 0.15 0.8 0.8],...
    154147                '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]');
    158151                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);
    166159                ag1 = gca;
    167160                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);
    169162                set(gcf,'color','w');
    170         %export_fig('Fig6.pdf');
    171 
    172 end
    173 
     163        %export_fig('Fig6.pdf');
     164end %}}}
  • issm/trunk-jpl/examples/Functions/grace.m

    r23406 r25915  
    4343
    4444        % 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
    5056
    5157        time_yr = 2002+time_0/365; % [yr]
  • issm/trunk-jpl/examples/Greenland/runme.m

    r21157 r25915  
    55ncdata='../Data/Greenland_5km_dev1.2.nc';
    66
    7 if any(steps==1)
     7if any(steps==1) %{{{
    88        disp('   Step 1: Mesh creation');
    99
     
    2222        %Mesh Greenland
    2323        md=bamg(md,'hmax',400000,'hmin',5000,'gradation',1.7,'field',vel,'err',8);
    24        
     24
    2525        %convert x,y coordinates (Polar stereo) to lat/lon
    2626        [md.mesh.lat,md.mesh.long]=xy2ll(md.mesh.x,md.mesh.y,+1,39,71);
     
    2929
    3030        plotmodel (md,'data','mesh');
    31 end
    32 
    33 if any(steps==2)
     31end %}}}
     32
     33if any(steps==2) %{{{
    3434        disp('   Step 2: Parameterization');
    3535        md = loadmodel('./Models/Greenland.Mesh_generation');
     
    3939        md = setflowequation(md,'SSA','all');
    4040
    41         save ./Models/Greenland.Parameterization md; 
    42 end
    43 
    44 if any(steps==3)
     41        save ./Models/Greenland.Parameterization md;
     42end %}}}
     43
     44if any(steps==3) %{{{
    4545        disp('   Step 3: Control method friction');
    4646        md = loadmodel('./Models/Greenland.Parameterization');
     
    6666
    6767        %Additional parameters
    68         md.stressbalance.restol=0.01; md.stressbalance.reltol=0.1; 
     68        md.stressbalance.restol=0.01; md.stressbalance.reltol=0.1;
    6969        md.stressbalance.abstol=NaN;
    7070
     
    7878        md.friction.coefficient=md.results.StressbalanceSolution.FrictionCoefficient;
    7979
    80         save ./Models/Greenland.Control_drag md; 
    81 end
    82 
    83 if any(steps==4)
     80        save ./Models/Greenland.Control_drag md;
     81end %}}}
     82
     83if any(steps==4) %{{{
    8484        disp('   Step 4: Transient run');
    8585        md = loadmodel('./Models/Greenland.Control_drag');
     
    101101        %Additional options
    102102        md.inversion.iscontrol=0;
    103         md.transient.requested_outputs={'IceVolume','TotalSmb', ...
    104                                              'SmbMassBalance'};
     103        md.transient.requested_outputs={'IceVolume','TotalSmb','SmbMassBalance'};
    105104        md.verbose=verbose('solution',true,'module',true,'convergence',true);
    106105
     
    109108        md=solve(md,'Transient');
    110109
    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;
     111end %}}}
     112
     113if any(steps==5) %{{{
     114        disp('   Step 5: Plotting');
    116115        md = loadmodel('./Models/Greenland.Transient');
    117116
     
    143142        subplot(3,1,3); plot([0.2:0.2:20],volume); title('Ice Volume');
    144143        xlabel('years')
    145 end
    146 
    147 if any(steps==6)
     144end %}}}
     145
     146if any(steps==6) %{{{
    148147        disp('   Step 6: Extract Box SMB');
    149148        md = loadmodel('./Models/Greenland.Transient');
     
    172171
    173172        clear smbbox
    174 
    175 end
    176 
    177 if any(steps==7)
     173end %}}}
     174
     175if any(steps==7) %{{{
    178176        disp('   Step 7: Historical Relaxation run');
    179177        md = loadmodel('./Models/Greenland.Control_drag');
     
    198196        %Additional options
    199197        md.inversion.iscontrol=0;
    200         md.transient.requested_outputs={'IceVolume','TotalSmb', ...
    201                 'SmbMassBalance'};
     198        md.transient.requested_outputs={'IceVolume','TotalSmb','SmbMassBalance'};
    202199        md.verbose=verbose('solution',true,'module',true);
    203200
     
    207204
    208205        save ./Models/Greenland.HistoricTransient md;
    209 end
    210 
    211 if any(steps==8)
     206end % step 7 end
     207
     208if any(steps==8) %{{{
    212209        disp('   Step 8: Plotting exercise');
    213210
    214211        %Load historic transient model
    215212
    216 
    217         %Create Line Plots of relaxation run.  Create a figure.
    218 
     213        %Create Line Plots of relaxation run. Create a figure.
    219214
    220215        %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
    223217
    224218        %Plot surface mass balance time series in first subplot
    225219
    226        
    227220        %Title this plot Mean surface mass balance
    228221
    229 
    230222        %Save velocity by looping through 200 years
    231223
    232 
    233224        %Plot velocity time series in second subplot
    234225
    235        
    236226        %Title this plot Mean Velocity
    237227
    238 
    239         %Save Ice Volume by looping through 200 years
    240 
     228        %Save Ice Volume by looping through 200 years
    241229
    242230        %Plot volume time series in third subplot
    243231
    244        
    245232        %Title this plot Mean Velocity and add an x label of years
    246233
    247 end
    248 
    249 if any(steps==9)
     234end % step 8 end
     235
     236if any(steps==9) %{{{
    250237        disp('   Step 9: Box Transient run');
    251238        md = loadmodel('./Models/Greenland.HistoricTransient_200yr');
     
    292279        %Additional options
    293280        md.inversion.iscontrol=0;
    294         md.transient.requested_outputs={'IceVolume','TotalSmb', ...
    295                 'SmbMassBalance'};
     281        md.transient.requested_outputs={'IceVolume','TotalSmb','SmbMassBalance'};
    296282        md.verbose=verbose('solution',true,'module',true);
    297283
     
    301287
    302288        save ./Models/Greenland.BoxTransient md;
    303 end
    304 
    305 if any(steps==10)
     289end %}}}
     290
     291if any(steps==10) %{{{
    306292        disp('   Step 10: Plot Box Transient');
    307293        md = loadmodel('./Models/Greenland.BoxTransient');
     
    327313        subplot(3,1,3); plot(t,volume); title('Ice Volume');
    328314        xlabel('years')
    329 end
     315end %}}}
  • issm/trunk-jpl/examples/ISMIP/runme.m

    r19043 r25915  
    1 %wich steps to perform steps are from 1 to 8
     1%which steps to perform; steps are from 1 to 8
    22%step 7 is specific to ISMIPA
    33%step 8 is specific to ISMIPF
     
    1111
    1212%Mesh Generation #1
    13 if any(steps==1)
     13if any(steps==1) %{{{
    1414
    1515        %initialize md as a new model #help model
     
    2626        %->
    2727
    28 end
     28end %}}}
    2929
    3030%Masks #2
    31 if any(steps==2)
     31if any(steps==2) %{{{
    3232
    3333        % load the preceding step #help loadmodel
     
    4545        %->
    4646
    47 end
     47end %}}}
    4848
    4949%Parameterization #3
    50 if any(steps==3)
     50if any(steps==3) %{{{
    5151
    5252        % load the preceding step #help loadmodel
     
    6262        %->
    6363
    64 end
     64end %}}}
    6565
    6666%Extrusion #4
    67 if any(steps==4)
     67if any(steps==4) %{{{
    6868       
    6969        % load the preceding step #help loadmodel
     
    8181        %->
    8282
    83 end
     83end %}}}
    8484
    8585%Set the flow computing method #5
    86 if any(steps==5)
     86if any(steps==5) %{{{
    8787
    8888        % load the preceding step #help loadmodel
     
    9797        %->
    9898
    99 end
     99end %}}}
    100100
    101101%Set Boundary Conditions #6
    102 if any(steps==6)
     102if any(steps==6) %{{{
    103103
    104104        % load the preceding step #help loadmodel
     
    118118        %->
    119119
    120   % set the sliding to zero on the bed (Vx and Vy)
     120        % set the sliding to zero on the bed (Vx and Vy)
    121121        %->
    122122
     
    146146                % if we are dealing with IsmipF the solution is in masstransport
    147147                md.masstransport.vertex_pairing=md.stressbalance.vertex_pairing;
    148   end
    149         % save the given model
    150         %->
    151 
    152 end
     148        end
     149        % save the given model
     150        %->
     151
     152end %}}}
    153153
    154154%Solving #7
    155 if any(steps==7)
     155if any(steps==7) %{{{
    156156        % load the preceding step #help loadmodel
    157157        % path is given by the organizer with the name of the given step
     
    175175        % plot the surface velocities #plotdoc
    176176        %->
    177 end
     177end %}}}
    178178
    179179%Solving #8
    180 if any(steps==8)
     180if any(steps==8) %{{{
    181181        % load the preceding step #help loadmodel
    182182        % path is given by the organizer with the name of the given step
     
    212212        % plot the surface velocities #plotdoc
    213213        %->
    214 
    215 end
     214end %}}}
  • issm/trunk-jpl/examples/IceBridge/Greenland.par

    r24864 r25915  
    3030%Reading IceBridge data for Jakobshavn
    3131disp('      reading IceBridge Jakobshavn bedrock');
    32 fid  = fopen('../Data/Jakobshavn_2008_2011_Composite_XYZGrid.txt');
     32fid  = fopen('../Data/Jakobshavn_2008_2011_Composite/grids/Jakobshavn_2008_2011_Composite_XYZGrid.txt');
    3333titles = fgets(fid);
    3434data = fscanf(fid,'%g,%g,%g,%g,%g',[5 266400])';
  • issm/trunk-jpl/examples/IceBridge/runme.m

    r21057 r25915  
    11clear all;
    2 close all;
    32steps=[1];
    43
     
    65ncdata='../Data/Greenland_5km_dev1.2.nc';
    76
    8 if any(steps==1)
     7if any(steps==1) %{{{
    98        disp('   Step 1: Mesh creation');
    109
     
    2423        md=bamg(md,'hmax',400000,'hmin',5000,'gradation',1.7,'field',vel,'err',8);
    2524        return;
    26        
     25
    2726        %Refine mesh in the region of Jakobshavn (resolution = 3000 m)
    2827        hmaxVertices=NaN*ones(md.mesh.numberofvertices,1);
     
    3736
    3837        save ./Models/Greenland.Mesh_generation md;
    39 end
     38end %}}}
    4039
    41 if any(steps==2)
     40if any(steps==2) %{{{
    4241        disp('   Step 2: Parameterization');
    4342        md = loadmodel('./Models/Greenland.Mesh_generation');
    4443
    4544        md = setmask(md,'','');
    46         md = parameterize(md,'Greenland.par');
     45        md = parameterize(md,'./Greenland.par');
    4746        md = setflowequation(md,'SSA','all');
    4847
    4948        save ./Models/Greenland.Parameterization2 md;
    50 end
     49end %}}}
    5150
    52 if any(steps==3)
     51if any(steps==3) %{{{
    5352        disp('   Step 3: Control method friction');
    5453        md = loadmodel('./Models/Greenland.Parameterization2');
     
    9392
    9493        save ./Models/Greenland.Control_drag md;
    95 end
     94end %}}}
    9695
    97 if any(steps==4)
     96if any(steps==4) %{{{
    9897        disp('   Step 4: Transient run');
    9998        md = loadmodel('./Models/Greenland.Control_drag');
     
    122121
    123122        save ./Models/Greenland.Transient md;
    124 end
     123end %}}}
    125124
    126 if any(steps==5)
     125if any(steps==5) %{{{
    127126        disp('   Step 5: Plotting');
    128127        md = loadmodel('./Models/Greenland.Transient');
     
    155154        subplot(3,1,3); plot(time_plot,volume); title('Ice Volume');
    156155        xlabel('years')
    157 end
     156end %}}}
  • issm/trunk-jpl/examples/Inversion/runme.m

    r23108 r25915  
    1 step=1;
    2 if any(step==1)
     1steps=[1];
     2
     3if any(steps==1) %{{{
    34        %Generate observations
    45        md = model;
     
    910        md.cluster = generic('np',2);
    1011        md = solve(md,'Stressbalance');
    11         plotmodel(md,'axis#all','tight','data',md.materials.rheology_B,'caxis',[ 1.3 1.9]*10^8,'title','"True" B',...
     12        plotmodel(md,'axis#all','tight','data',md.materials.rheology_B,'caxis',[1.3 1.9]*10^8,'title','"True" B',...
    1213                'data',md.results.StressbalanceSolution.Vel,'title','"observed velocities"')
    1314        save model1 md
    14 end
    15 if any(step==2)
     15end %}}}
     16
     17if any(steps==2) %{{{
    1618        %Modify rheology, now constant
    1719        loadmodel('model1.mat');
     
    2022        %results of previous run are taken as observations
    2123        md.inversion=m1qn3inversion();
    22         md.inversion.vx_obs  = md.results.StressbalanceSolution.Vx;
    23         md.inversion.vy_obs  = md.results.StressbalanceSolution.Vy;
    24         md.inversion.vel_obs = md.results.StressbalanceSolution.Vel;
     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;
    2527
    2628        md = solve(md,'Stressbalance');
    27         plotmodel(md,'axis#all','tight','data',md.materials.rheology_B,'caxis',[ 1.3 1.9]*10^8,'title','B first guess',...
     29        plotmodel(md,'axis#all','tight','data',md.materials.rheology_B,'caxis',[1.3 1.9]*10^8,'title','B first guess',...
    2830                'data',md.results.StressbalanceSolution.Vel,'title','modeled velocities')
    2931        save model2 md
    30 end
    31 if any(step==3)
     32end %}}}
     33
     34if any(steps==3) %{{{
    3235        %invert for ice rigidity
    3336        loadmodel('model2.mat');
     
    4043        md.inversion.cost_functions = 101;
    4144        md.inversion.cost_functions_coefficients = ones(md.mesh.numberofvertices,1);
    42         md.inversion.min_parameters    = cuffey(273)*ones(md.mesh.numberofvertices,1);
    43         md.inversion.max_parameters    = cuffey(200)*ones(md.mesh.numberofvertices,1);
     45        md.inversion.min_parameters = cuffey(273)*ones(md.mesh.numberofvertices,1);
     46        md.inversion.max_parameters = cuffey(200)*ones(md.mesh.numberofvertices,1);
    4447
    4548        %Go solve!
     
    4851        plotmodel(md,'axis#all','tight','data',md.results.StressbalanceSolution.MaterialsRheologyBbar,'caxis',[ 1.3 1.9]*10^8,'title','inferred B',...
    4952                'data',md.results.StressbalanceSolution.Vel,'title','modeled velocities')
    50 end
    51 if any(step==4)
     53end %}}}
     54
     55if any(steps==4) %{{{
    5256        %invert for ice rigidity
    5357        loadmodel('model2.mat');
     
    5963        md.inversion.maxsteps = maxsteps;
    6064        md.inversion.cost_functions = [101 502];
    61         md.inversion.cost_functions_coefficients      = ones(md.mesh.numberofvertices,1);
    62         md.inversion.cost_functions_coefficients(:,2) = 10^-16*ones(md.mesh.numberofvertices,1);
    63         md.inversion.min_parameters    = cuffey(273)*ones(md.mesh.numberofvertices,1);
    64         md.inversion.max_parameters    = cuffey(200)*ones(md.mesh.numberofvertices,1);
     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);
    6569
    6670        %Go solve!
     
    6973        plotmodel(md,'axis#all','tight','data',md.results.StressbalanceSolution.MaterialsRheologyBbar,'caxis',[ 1.3 1.9]*10^8,'title','inferred B',...
    7074                'data',md.results.StressbalanceSolution.Vel,'title','modeled velocities')
    71 end
     75end %}}}
  • issm/trunk-jpl/examples/Jakobshavn/runme.m

    r21607 r25915  
    11steps=[1];
    22
    3 if any(steps==1)
    4         disp('  Step 1: Mesh creation');
     3if any(steps==1) %{{{
     4        disp('   Step 1: Mesh creation');
    55        md=triangle(model,'Domain.exp',2000);
    66
    77        %Get observed velocity field on mesh nodes
    88        ncdata='../Data/Greenland_5km_dev1.2.nc';
    9         if ~exist(ncdata,'file'), 
     9        if ~exist(ncdata,'file'),
    1010                error('File Greenland_5km_dev1.2.nc not downloaded in Data Directory');
    1111        end
    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);
     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);
    1919
    2020        %refine mesh using surface velocities as metric
    2121        md=bamg(md,'hmin',1200,'hmax',15000,'field',vel,'err',5);
    2222        [md.mesh.lat,md.mesh.long]  = xy2ll(md.mesh.x,md.mesh.y,+1,39,71);
    23        
     23
    2424        save JksMesh md
    25 end
    26 if any(steps==2)
    27         disp('  Step 2: Parameterization');
     25end %}}}
     26
     27if any(steps==2) %{{{
     28        disp('   Step 2: Parameterization');
    2829        md=loadmodel('JksMesh');
    29        
     30
    3031        md=setmask(md,'','');
    31         md=parameterize(md,'Jks.par'); 
     32        md=parameterize(md,'Jks.par');
    3233
    3334        save JksPar md
    34 end
    35 if any(steps==3)
    36         disp('  Step 3: Control method friction');
     35end %}}}
     36
     37if any(steps==3) %{{{
     38        disp('   Step 3: Control method friction');
    3739        md=loadmodel('JksPar');
    3840
     
    6668        md.cluster=generic('name',oshostname,'np',4);
    6769        md=solve(md,'Stressbalance');
    68        
     70
    6971        save JksControl md
    70 end
    71 if any(steps==4)
    72         disp('  Plotting')
     72end %}}}
     73
     74if any(steps==4) %{{{
     75        disp('   Plotting')
    7376        md=loadmodel('JksControl');
    7477
     
    8285                'title','Friction Coefficient',...
    8386                'colorbartitle#3','(m)');
    84 end
     87end %}}}
  • issm/trunk-jpl/examples/LcurveAnalysis/runme.m

    r23752 r25915  
    1 step=[1];
    2 if any(step==1)
     1steps=[1];
     2
     3if any(steps==1) %{{{
    34        % Generate observations
    45        md = model;
     
    1213                'data',md.results.StressbalanceSolution.Vel,'title','"observed velocities"')
    1314        save model1 md
    14 end
    15 if any(step==2)
     15end %}}}
     16
     17if any(steps==2) %{{{
    1618        % Modify rheology, now constant
    1719        loadmodel('model1.mat');
     
    2830                'data',md.results.StressbalanceSolution.Vel,'title','modeled velocities')
    2931        save model2 md
    30 end
    31 if any(step==3)
     32end %}}}
     33
     34if any(steps==3) %{{{
    3235        % Perform L-curve analysis for ice rigidity inversion
    3336        loadmodel('model2.mat');
     
    4245        md.inversion.min_parameters = cuffey(273)*ones(md.mesh.numberofvertices,1);
    4346        md.inversion.max_parameters = cuffey(200)*ones(md.mesh.numberofvertices,1);
    44    md.verbose = verbose('solution',false,'control',true);
    45        
     47        md.verbose = verbose('solution',false,'control',true);
     48
    4649        % Starting L-curve analysis:
    4750        %
     
    5659        % respective value of Jo and R (R versus Jo).
    5760        %
    58         min_alpha   = 1.e-20;
    59         max_alpha   = 1.e-11;
    60         nstep_alpha = 30;
    61         log_step    = (log10(max_alpha)-log10(min_alpha))/nstep_alpha;
    62         log_alphas  = [log10(min_alpha):log_step:log10(max_alpha)];
    63         alphas      = 10.^log_alphas;
    64         J           = zeros(length(alphas),length(md.inversion.cost_functions)+1);
     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);
    6568        % Loop over the alphas
    6669        for i=1:length(alphas),
     
    7881                Jo = Jo + J(:,i); % sum of the cost functions (no regularization term). In this example, only 101
    7982        end
    80         R  = J(:,end-1)./alphas(:); % only the regularization term
    81        
     83        R = J(:,end-1)./alphas(:); % only the regularization term
     84
    8285        % Tip:
    8386        % A rescale in the axes may be useful to visualize the L-curve.
     
    8689        %
    8790        % Apply a linear transformation on the original axis (Jo, R):
    88    %
     91        %
    8992        % |   1       alpha | | Jo  |   | Jo + alpha*R |   |    J    |
    9093        % |                 | |     | = |              | = |         |
     
    100103        hoffset=0.1*Jo;
    101104        text(Jo+hoffset,R+voffset,[repmat('\alpha = ',length(alphas),1) num2str(alphas(:),'%2.0e')],...
    102             'FontSize',10,'HorizontalAlignment','left','VerticalAlignment','Middle')
     105                'FontSize',10,'HorizontalAlignment','left','VerticalAlignment','Middle')
    103106        xlabel('$\mathrm{log}(\mathcal{J}_0$)','Interpreter','latex')
    104107        ylabel('$\mathrm{log}(\mathcal{R})$','Interpreter','latex')
    105 end
    106 if any(step==4)
     108end %}}}
     109
     110if any(steps==4) %{{{
    107111        %invert for ice rigidity
    108112        loadmodel('model2.mat');
     
    114118        md.inversion.maxsteps = maxsteps;
    115119        md.inversion.cost_functions = [101 502];
    116         md.inversion.cost_functions_coefficients      = ones(md.mesh.numberofvertices,1);
    117         md.inversion.cost_functions_coefficients(:,2) = 4.e-17*ones(md.mesh.numberofvertices,1); % here you can use the best value found for alpha
    118         md.inversion.min_parameters    = cuffey(273)*ones(md.mesh.numberofvertices,1);
    119         md.inversion.max_parameters    = cuffey(200)*ones(md.mesh.numberofvertices,1);
     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);
    120124
    121125        %Go solve!
     
    124128        plotmodel(md,'axis#all','tight','data',md.results.StressbalanceSolution.MaterialsRheologyBbar,'caxis',[ 1.3 1.9]*10^8,'title','inferred B',...
    125129                'data',md.results.StressbalanceSolution.Vel,'title','modeled velocities')
    126 end
     130end %}}}
  • issm/trunk-jpl/examples/Pig/runme.m

    r24864 r25915  
    11steps=[1];
    22
    3 if any(steps==1)   %Mesh Generation #1
     3if any(steps==1) %Mesh Generation #1 %{{{
    44        %Mesh parameters
    55        domain =['./DomainOutline.exp'];
    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
     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
    1111
    1212        % Generate an initial uniform mesh (resolution = hinit m)
     
    1414
    1515        % Load Velocities
    16         nsidc_vel='../Data/Antarctica_ice_velocity.nc';         
     16        nsidc_vel='../Data/Antarctica_ice_velocity.nc';
    1717
    1818        % Get necessary data to build up the velocity grid
    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'));
     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'));
    2626
    2727        % 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));
    3232        spacing = strtrim(spacing);
    33         spacing = str2num(spacing(1:end-2)); 
     33        spacing = str2num(spacing(1:end-2));
    3434
    3535        % Build the coordinates
    3636        x=xmin+(0:1:nx)'*spacing;
    3737        y=(ymax-ny*spacing)+(0:1:ny)'*spacing;
    38        
     38
    3939        % Interpolate velocities onto coarse mesh
    4040        vx_obs=InterpFromGridToMesh(x,y,flipud(vx'),md.mesh.x,md.mesh.y,0);
     
    4545        % Adapt the mesh to minimize error in velocity interpolation
    4646        md=bamg(md,'hmax',hmax,'hmin',hmin,'gradation',gradation,'field',vel_obs,'err',err);
    47        
     47
    4848        %ploting
    4949        plotmodel(md,'data','mesh')
     
    5151        % Save model
    5252        save ./Models/PIG_Mesh_generation md;
    53 end
     53end %}}}
    5454
    55 if any(steps==2)  %Masks #2
     55if any(steps==2) %Masks #2 %{{{
     56        md = loadmodel('./Models/PIG_Mesh_generation');
    5657
    57         md = loadmodel('./Models/PIG_Mesh_generation');
    58 
    59         % Load SeaRISe dataset for Antarctica 
     58        % Load SeaRISe dataset for Antarctica
    6059        % http://websrv.cs.umt.edu/isis/index.php/Present_Day_Antarctica
    6160        searise='../Data/Antarctica_5km_withshelves_v0.75.nc';
    62        
     61
    6362        %read thickness mask from SeaRISE
    6463        x1=double(ncread(searise,'x1'));
    6564        y1=double(ncread(searise,'y1'));
    6665        thkmask=double(ncread(searise,'thkmask'));
    67        
     66
    6867        %interpolate onto our mesh vertices
    6968        groundedice=double(InterpFromGridToMesh(x1,y1,thkmask',md.mesh.x,md.mesh.y,0));
     
    7776        %ploting
    7877        plotmodel(md,'data',md.mask.ocean_levelset,'title','grounded/floating','data',md.mask.ice_levelset,'title','ice/no-ice')
    79        
     78
    8079        % Save model
    8180        save ./Models/PIG_SetMask md;
    82 end
     81end %}}}
    8382
    84 if any(steps==3)  %Parameterization #3
    85 
     83if any(steps==3) %Parameterization #3 %{{{
    8684        md = loadmodel('./Models/PIG_SetMask');
    8785        md = parameterize(md,'./Pig.par');
     
    8987        % Use a MacAyeal flow model
    9088        md = setflowequation(md,'SSA','all');
    91        
     89
    9290        % Save model
    9391        save ./Models/PIG_Parameterization md;
    94 end
     92end %}}}
    9593
    96 if any(steps==4)  %Control Method #4
    97 
     94if any(steps==4) %Control Method #4 %{{{
    9895        md = loadmodel('./Models/PIG_Parameterization');
    9996
     
    135132        % Save model
    136133        save ./Models/PIG_Control_drag md;
    137 end
     134end %}}}
    138135
    139 if any(steps==5) %Plot #5
    140 
     136if any(steps==5) %Plot #5 %{{{
    141137        md = loadmodel('./Models/PIG_Control_drag');
    142138
     
    149145                'caxis#1-2',([1.5,4000]),...
    150146                'colorbartitle#3','(m)', 'log#1-2',10);
    151 end
     147end %}}}
    152148
    153 if any(steps==6)  %Higher-Order #6
    154 
     149if any(steps==6) %Higher-Order #6 %{{{
    155150        % Load Model
    156151
     
    165160        % Save Model
    166161
    167 end
     162end % step 6 end
    168163
    169 if any(steps==7)  %Plot #7
    170 
     164if any(steps==7) %Plot #7 %{{{
    171165        mdHO = loadmodel('./Models/PIG_ModelHO');
    172166        mdSSA = loadmodel('./Models/PIG_Control_drag');
     
    176170
    177171        plotmodel(mdHO,'nlines',3,'ncols',2,'axis#all','equal',...
    178                                                 'data',mdHO.initialization.vel,'title','Observed velocity',...
    179                                                 'data',(mdHO.results.StressbalanceSolution.Vel(surf)-mdHO.initialization.vel(surf)),'title','(HO-observed) velocities',...
    180                                                 'data',mdSSA.results.StressbalanceSolution.Vel,'title','Modeled SSA Velocity',...
    181                                                 'data',(mdHO.results.StressbalanceSolution.Vel(surf)-mdSSA.results.StressbalanceSolution.Vel),'title','(HO-SSA) velocities',...
    182                                                 'data',mdHO.results.StressbalanceSolution.Vel,'title','Modeled HO surface Velocities',...
    183                                                 'data',(mdHO.results.StressbalanceSolution.Vel(surf)-mdHO.results.StressbalanceSolution.Vel(basal)),'title','(HOsurf-HO base) velocities',...
    184                                                 'caxis#1',([1.5,4000]),'caxis#3',([1.5,4000]),'caxis#5',([1.5,4000]),...
    185                                                 'colorbar#all','on','view#all',2,...
    186                                                 'colorbartitle#all','(m/yr)',...
    187                                                 'layer#5',1, 'log#1', 10,'log#3', 10,'log#5', 10);
    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);
     182end %}}}
  • issm/trunk-jpl/examples/Pig2/runme.m

    r24864 r25915  
    1 steps=1;
    2 
    3 if any(steps==1) %Mesh Generation #1
     1steps=[1];
     2
     3if any(steps==1) %Mesh Generation #1 %{{{
    44
    55        %Mesh parameters
    66        domain =['./DomainOutline.exp'];
    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
     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
    1212
    1313        % Generate an initial uniform mesh (resolution = hinit m)
     
    1515
    1616        % 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      = 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'));
     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'));
    2525
    2626        % Build the coordinates
    2727        x=xmin+(0:1:nx)'*spacing;
    2828        y=(ymax-ny*spacing)+(0:1:ny)'*spacing;
    29        
     29
    3030        % Interpolate velocities onto coarse mesh
    3131        vx_obs=InterpFromGridToMesh(x,y,flipud(vx'),md.mesh.x,md.mesh.y,0);
     
    4040        plotmodel(md,'data','mesh')
    4141        save ./Models/PIG_Mesh_generation md;
    42 end
    43 
    44 if any(steps==2)  %Masks #2
    45 
    46         md = loadmodel('./Models/PIG_Mesh_generation');
     42end %}}}
     43
     44if any(steps==2) %Masks #2 %{{{
     45        md = loadmodel('./Models/PIG_Mesh_generation');
    4746
    4847        % Load SeaRISe dataset for Antarctica  http://websrv.cs.umt.edu/isis/index.php/Present_Day_Antarctica
    4948        searise='../Data/Antarctica_5km_withshelves_v0.75.nc';
    50        
     49
    5150        %read thickness mask from SeaRISE
    5251        x1=double(ncread(searise,'x1'));
    5352        y1=double(ncread(searise,'y1'));
    5453        thkmask=double(ncread(searise,'thkmask'));
    55        
     54
    5655        %interpolate onto our mesh vertices
    5756        groundedice=double(InterpFromGridToMesh(x1,y1,thkmask',md.mesh.x,md.mesh.y,0));
     
    6463
    6564        plotmodel(md,'data',md.mask.ocean_levelset,'title','grounded/floating','data',md.mask.ice_levelset,'title','ice/no-ice')
    66        
     65
    6766        save ./Models/PIG_SetMask md;
    68 end
    69 
    70 if any(steps==3)  %Parameterization #3
    71 
     67end %}}}
     68
     69if any(steps==3) %Parameterization #3 %{{{
    7270        md = loadmodel('./Models/PIG_SetMask');
    7371        md = setflowequation(md,'SSA','all');
    7472        md = parameterize(md,'./Pig.par');
    75        
     73
    7674        save ./Models/PIG_Parameterization md;
    77 end
    78 
    79 if any(steps==4)  %Rheology B inversion
    80 
     75end %}}}
     76
     77if any(steps==4) %Rheology B inversion %{{{
    8178        md = loadmodel('./Models/PIG_Parameterization');
    8279
     
    120117        % Save model
    121118        save ./Models/PIG_Control_B md;
    122 end
    123 
    124 if any(steps==5)  %drag inversion
    125 
     119end %}}}
     120
     121if any(steps==5) %drag inversion %{{{
    126122        md = loadmodel('./Models/PIG_Control_B');
    127123
     
    153149                'caxis#1-2',([1.5,4000]),...
    154150                'colorbartitle#3','(m)', 'log#1-2',10);
     151
    155152        save ./Models/PIG_Control_drag md;
    156 end
    157 
    158 if any(steps==6) %Transient Run #1
     153end %}}}
     154
     155if any(steps==6) %Transient Run #1 %{{{
    159156
    160157        md = loadmodel('./Models/PIG_Control_drag');   
     
    183180        % Save model
    184181        save ./Models/PIG_Transient md;
    185 end
     182end %}}}
    186183
    187184if any(steps==7) %High Melt #2
     
    196193
    197194        save ./Models/PIG_HighMelt md;
    198 end
    199 
    200 if any(steps==8) %Ice Front retreat
     195end %}}}
     196
     197if any(steps==8) %Ice Front retreat %{{{
    201198        md = loadmodel('./Models/PIG_Transient');       
    202199
     
    209206
    210207        save ./Models/PIG_FrontRetreat md;
    211 end
    212 
    213 if any(steps==9) %High surface mass balance #3
     208end %}}}
     209
     210if any(steps==9) %High surface mass balance #3 %{{{
    214211        %Load model from PIG_Transient
    215212        %...
     
    229226        %Save model
    230227        save ./Models/PIG_SMB md;
    231 end
     228end %}}}
  • issm/trunk-jpl/examples/PigSensitivity/runme.m

    r24864 r25915  
    1 steps=[1];
     1steps=[1:4];
    22
    3 if any(steps==1) %Transient Run #1
     3try
    44
    5         md = loadmodel('../Pig/Models/PIG_Control_drag');       
     5
     6if any(steps==1) %Transient Run #1 %{{{
     7
     8        md = loadmodel('../Pig/Models/PIG_Control_drag');
    69
    710        md.inversion.iscontrol=0;
     
    1114        md.transient.ismovingfront=0;
    1215        md.transient.isthermal=0;
    13        
     16
    1417        pos=find(md.mask.ocean_levelset<0);
    1518        md.basalforcings.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1);
    1619        md.basalforcings.floatingice_melting_rate=25*ones(md.mesh.numberofvertices,1);
    17        
     20
    1821        md.timestepping.time_step=0.1;
    1922        md.timestepping.final_time=10;
     
    2427        % Save model
    2528        save ./Models/PIG_Transient md;
    26 end
     29end %}}}
    2730
    28 if any(steps==2) %High Melt #2
    29         md = loadmodel('./Models/PIG_Transient');       
     31if any(steps==2) %High Melt #2 %{{{
     32        md = loadmodel('./Models/PIG_Transient');
    3033
    3134        md.basalforcings.groundedice_melting_rate=zeros(md.mesh.numberofvertices,1);
    3235        md.basalforcings.floatingice_melting_rate=60*ones(md.mesh.numberofvertices,1);
    33        
     36
    3437        md.timestepping.time_step=0.1;
    3538        md.timestepping.final_time=10;
     
    3942
    4043        save ./Models/PIG_HighMelt md;
    41 end
     44end %}}}
    4245
    43 if any(steps==3) %Ice Front retreat
    44         md = loadmodel('./Models/PIG_Transient');       
     46if any(steps==3) %Ice Front retreat %{{{
     47        md = loadmodel('./Models/PIG_Transient');
    4548
    4649        md2=extract(md,'~FrontRetreat.exp');
     
    5861
    5962        save ./Models/PIG_FrontRetreat md2;
    60 end
     63end %}}}
    6164
    62 if any(steps==4) %High surface mass balance #3
     65if any(steps==4)
     66 disp('Needs work!') %High surface mass balance #3 %{{{
    6367        %Load model
    6468
    6569        %Change external forcing basal melting rate and surface mass balance)
    66        
     70
    6771        %Refine time steps and time span of the simulation
    6872
     
    7377        %Save model
    7478
    75 end
     79end %}}}
  • issm/trunk-jpl/examples/SlrFarrell/runme.m

    r24864 r25915  
    1 
    21clear all;
    32
    4 steps=[1]; % [1:5]
     3steps=[1:5];
    54
    6 if any(steps==1)
     5try
     6 % [1:5]
     7
     8if any(steps==1) %{{{
    79        disp('   Step 1: Global mesh creation');
    810
    911        numrefine=1;
    10         resolution=150*1e3;                     % inital resolution [m] 
     12        resolution=150*1e3;                     % inital resolution [m]
    1113        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]
    1315        mindistance_land=300*1e3;       % resolution on the continents [m]
    14         maxdistance=600*1e3;                    % max element size (on mid-oceans) [m]
     16        maxdistance=600*1e3;            % max element size (on mid-oceans) [m]
    1517
    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]
    1920
    2021        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);
    2323
    2424                distance=zeros(md.mesh.numberofvertices,1);
    2525
    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);
    2828
    2929                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;
    3131                        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;
    3333                                deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1);
    3434                                d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2));
    3535                        else
    36                                 phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi; 
     36                                phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi;
    3737                                deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1);
    3838                                d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2));
     
    4141                end
    4242                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;
    4643
    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);
    4848                md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3,'refine',md.mesh,'refinemetric',dist);
    49 
    5049        end
    5150
    52         md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 
     51        md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long);
    5352
    5453        save ./Models/SlrFarrell_Mesh md;
    55        
     54
    5655        plotmodel (md,'data',md.mask.ocean_levelset,'edgecolor','k');
     56end %}}}
    5757
    58 end
    59 
    60 if any(steps==2)
     58if any(steps==2) %{{{
    6159        disp('   Step 2: Define source as in Farrell, 1972, Figure 1');
    6260        md = loadmodel('./Models/SlrFarrell_Mesh');
    6361
    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
    6663        md.slr.deltathickness=zeros(md.mesh.numberofelements,1);
    6764        md.slr.steric_rate=zeros(md.mesh.numberofvertices,1);
    6865
    69         save ./Models/SlrFarrell_Loads md; 
    70        
     66        save ./Models/SlrFarrell_Loads md;
     67
    7168        plotmodel (md,'data',md.slr.sealevel,'view',[90 90],'title#all','Initial sea-level [m]');
     69end %}}}
    7270
    73 end
    74 
    75 if any(steps==3)
     71if any(steps==3) %{{{
    7672        disp('   Step 3: Parameterization');
    7773        md = loadmodel('./Models/SlrFarrell_Loads');
    7874
    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);
    8376
    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);
    8780        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!
    9083
    9184        di=md.materials.rho_ice/md.materials.rho_water;
     
    9487        md.geometry.base=md.geometry.surface-md.geometry.thickness;
    9588        md.geometry.bed=md.geometry.base;
    96        
     89
    9790        md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1);
    9891        md.materials.rheology_B=paterson(md.initialization.temperature);
    9992        md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
    100        
     93
    10194        md.miscellaneous.name='SlrFarrell';
    102        
    103         save ./Models/SlrFarrell_Parameterization md;
    10495
    105 end
     96        save ./Models/SlrFarrell_Parameterization md;
     97end %}}}
    10698
    107 if any(steps==4)
     99if any(steps==4) %{{{
    108100        disp('   Step 4: Solve Slr solver');
    109101        md = loadmodel('./Models/SlrFarrell_Parameterization');
    110102
    111         md.cluster=generic('name',oshostname(),'np',3); 
     103        md.cluster=generic('name',oshostname(),'np',3);
    112104        md.verbose=verbose('111111111');
    113105
    114         md.slr.reltol = 0.1/100; % per cent change in solution
     106        md.slr.reltol = 0.1/100; % percent change in solution
    115107
    116108        md=solve(md,'Slr');
    117109
    118         save ./Models/SlrFarrell_Solution md;
     110        save ./Models/SlrFarrell_Solution md;
     111end %}}}
    119112
    120 end
    121 
    122 if any(steps==5)
     113if any(steps==5) %{{{
    123114        disp('   Step 5: Plot solutions');
    124115        md = loadmodel('./Models/SlrFarrell_Solution');
    125116
    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)
    127118
    128119        res = 1; % [degree]
    129120
    130121        [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));
    132123
    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
    137128        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;
    140131
    141132        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;
    144135        pcolor(lon_grid,lat_grid,sol_grid); shading flat; hold on;
    145136        [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;
    149140        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]');
    156147        set(gcf,'color','w');
    157         %export_fig('Fig5.pdf');
    158 
    159 end
    160 
     148        %export_fig('Fig5.pdf');
     149end %}}}
  • issm/trunk-jpl/examples/SlrGRACE/runme.m

    r24864 r25915  
    1 
    21clear all;
    32addpath('../Data','../Functions');
    43
    5 steps=[1]; % [1:7]
    6 
    7 if any(steps==1)
     4steps=[1:7];
     5
     6try
     7 % [1:7]
     8
     9if any(steps==1) %{{{
    810        disp('   Step 1: Global mesh creation');
    911
    1012        numrefine=1;
    11         resolution=150*1e3;                     % inital resolution [m] 
     13        resolution=150*1e3;                     % inital resolution [m]
    1214        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]
    1416        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]
    2021
    2122        for i=1:numrefine,
    2223
    23                 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 
     24                md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long);
    2425
    2526                distance=zeros(md.mesh.numberofvertices,1);
    2627
    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);
    2930
    3031                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;
    3233                        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;
    3435                                deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1);
    3536                                d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2));
    3637                        else
    37                                 phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi; 
     38                                phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi;
    3839                                deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1);
    3940                                d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2));
     
    4344                pos=find(distance<mindistance_coast); distance(pos)=mindistance_coast;
    4445               
    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);
    4950                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);
    5454
    5555        save ./Models/SlrGRACE_Mesh md;
    56        
     56
    5757        plotmodel (md,'data',md.mask.ocean_levelset,'edgecolor','k');
    58 
    59 end
    60 
    61 if any(steps==2)
     58end %}}}
     59
     60if any(steps==2) %{{{
    6261        disp('   Step 2: Define loads in meters of ice height equivalent');
    6362        md = loadmodel('./Models/SlrGRACE_Mesh');
    6463
    6564        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
    7473        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)
     74end %}}}
     75
     76if any(steps==3) %{{{
    7977        disp('   Step 3: Parameterization');
    8078        md = loadmodel('./Models/SlrGRACE_Loads');
    8179
    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);
    8984        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;
    9287
    9388        md.slr.sealevel=zeros(md.mesh.numberofvertices,1);
     
    10095        md.geometry.base=md.geometry.surface-md.geometry.thickness;
    10196        md.geometry.bed=md.geometry.base;
    102        
     97
    10398        md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1);
    10499        md.materials.rheology_B=paterson(md.initialization.temperature);
    105100        md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
    106        
     101
    107102        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;
     105end %}}}
     106
     107if any(steps==4) %{{{
    114108        disp('   Step 4: Solve Slr solver');
    115109        md = loadmodel('./Models/SlrGRACE_Parameterization');
    116110
    117         md.slr.rigid=1; 
    118         md.slr.elastic=1; 
     111        md.slr.rigid=1;
     112        md.slr.elastic=1;
    119113        md.slr.rotation=1;
    120114
    121         md.cluster=generic('name',oshostname(),'np',3); 
     115        md.cluster=generic('name',oshostname(),'np',3);
    122116        md.verbose=verbose('111111111');
    123117
    124118        md=solve(md,'Slr');
    125119
    126         save ./Models/SlrGRACE_Solution md;
    127 
    128 end
    129 
    130 if any(steps==5)
     120        save ./Models/SlrGRACE_Solution md;
     121end %}}}
     122
     123if any(steps==5) %{{{
    131124        disp('   Step 5: Plot solutions');
    132125        md = loadmodel('./Models/SlrGRACE_Solution');
    133126
    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;
    141134
    142135        [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));
    144137
    145138        for kk=1:2
    146139                sol=eval(sprintf('sol%d',kk));
    147        
    148                 if length(sol)==md.mesh.numberofelements 
     140
     141                if length(sol)==md.mesh.numberofelements
    149142                        for jj=1:md.mesh.numberofelements
    150143                                ii=(jj-1)*3;
     
    152145                        end
    153146                        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);
    161154                F.Method = 'linear';
    162                 F.ExtrapolationMethod = 'linear'; 
     155                F.ExtrapolationMethod = 'linear';
    163156               
    164157                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;
    167160
    168161                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;
    171164                pcolor(lon_grid,lat_grid,sol_grid); shading flat; hold on;
    172165                if (kk==1)
    173                         geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white'); 
     166                        geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white');
    174167                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;
    178171                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));
    185178                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
     181end %}}}
     182
     183if any(steps==6) %{{{
    192184        disp('   Step 6: Transient run');
    193185        md = loadmodel('./Models/SlrGRACE_Parameterization');
    194186
    195187        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    md.slr.deltathickness = zeros(ne+1,nt);
    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
    204196        md.transient.issmb=0;
    205         md.transient.ismasstransport=0; 
    206         md.transient.isstressbalance=0; 
     197        md.transient.ismasstransport=0;
     198        md.transient.isstressbalance=0;
    207199        md.transient.isthermal=0;
    208200        md.transient.isslr=1;
    209        
     201
    210202        md.timestepping.start_time=-1;
    211    md.timestepping.final_time=nt;
    212         md.timestepping.time_step=1; 
    213    md.timestepping.interp_forcings=0;
     203        md.timestepping.final_time=nt;
     204        md.timestepping.time_step=1;
     205        md.timestepping.interp_forcings=0;
    214206        md.settings.output_frequency=1;
    215207
    216         md.cluster=generic('name',oshostname(),'np',3); 
     208        md.cluster=generic('name',oshostname(),'np',3);
    217209        md.verbose=verbose('111111111');
    218210
    219211        md=solve(md,'tr');
    220212
    221         save ./Models/SlrGRACE_Transient md;
    222 
    223 end
    224 
    225 if any(steps==7)
     213        save ./Models/SlrGRACE_Transient md;
     214end %}}}
     215
     216if any(steps==7) %{{{
    226217        disp('   Step 7: Plot transient');
    227218        md = loadmodel('./Models/SlrGRACE_Transient');
    228219
    229         time = md.slr.deltathickness(end,:); 
     220        time = md.slr.deltathickness(end,:);
    230221
    231222        for tt=1:length(time)
    232223                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/yr
    235         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;
    240231
    241232        [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));
    243234
    244235        for kk=1:2
    245236                sol=eval(sprintf('sol%d',kk));
    246        
    247                 if length(sol)==md.mesh.numberofelements 
     237
     238                if length(sol)==md.mesh.numberofelements
    248239                        for jj=1:md.mesh.numberofelements
    249240                                ii=(jj-1)*3;
     
    251242                        end
    252243                        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
    261252                open(vidObj);
    262253
    263254                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));
    265256                        F.Method = 'linear';
    266                         F.ExtrapolationMethod = 'linear'; 
     257                        F.ExtrapolationMethod = 'linear';
    267258                       
    268259                        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;
    271262
    272263                        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;
    275266                        pcolor(lon_grid,lat_grid,sol_grid); shading flat; hold on;
    276267                        if (kk==1)
    277                                 geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white'); 
     268                                geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white');
    278269                        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;
    282273                        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));
    289280                        set(gcf,'color','w');
    290                         writeVideo(vidObj,getframe(gcf)); 
    291                         close 
     281                        writeVideo(vidObj,getframe(gcf));
     282                        close
    292283                end
    293284                close(vidObj);
    294285        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');
    300291        ylabel('GMSL [mm/yr]');
    301292        set(gcf,'color','w');
    302293        %export_fig('Fig7.pdf');
    303 
    304 end
    305 
     294end %}}}
  • issm/trunk-jpl/examples/SlrGRACE_NIMS/runme.m

    r24864 r25915  
    1 
    21clear all;
    32addpath('../Data','../Functions');
    43
    5 steps=[1]; % [1:8]
    6 
    7 if any(steps==1)
     4steps=[1:8];
     5
     6try
     7 % [1:8]
     8
     9if any(steps==1) %{{{
    810        disp('   Step 1: Global mesh creation');
    911
    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;
    1516        md.mesh=gmshplanet('radius',radius,'resolution',resolution);
    1617
    17         md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 
     18        md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long);
    1819
    1920        save ./Models/SlrGRACE_Mesh md;
    20        
     21
    2122        plotmodel (md,'data',md.mask.ocean_levelset,'edgecolor','k');
    22 
    23 end
    24 
    25 if any(steps==2)
     23end %}}}
     24
     25if any(steps==2) %{{{
    2626        disp('   Step 2: Global mesh creation: refined coastlines');
    2727
    2828        numrefine=1;
    29         resolution=150*1e3;                     % inital resolution [m] 
     29        resolution=150*1e3;                     % inital resolution [m]
    3030        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]
    3333        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]
    3938
    4039        for i=1:numrefine,
    4140
    42                 md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 
     41                md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long);
    4342
    4443                distance=zeros(md.mesh.numberofvertices,1);
    4544
    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);
    4847
    4948                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;
    5150                        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;
    5352                                deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1);
    5453                                d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2));
    5554                        else
    56                                 phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi; 
     55                                phi2=coasto.lat/180*pi; lambda2=coasto.long/180*pi;
    5756                                deltaphi=abs(phi2-phi1); deltalambda=abs(lambda2-lambda1);
    5857                                d=radius*2*asin(sqrt(sin(deltaphi/2).^2+cos(phi1).*cos(phi2).*sin(deltalambda/2).^2));
     
    6261                pos=find(distance<mindistance_coast); distance(pos)=mindistance_coast;
    6362               
    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;
    6665
    6766                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);
    6968                distance(mask>0)=mindistance_source;
    7069
    71                 dist=min(maxdistance,distance); 
     70                dist=min(maxdistance,distance);
    7271                md.mesh=gmshplanet('radius',radius*1e-3,'resolution',resolution*1e-3,'refine',md.mesh,'refinemetric',dist);
    73 
    7472        end
    7573
    76         md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long); 
     74        md.mask.ocean_levelset=gmtmask(md.mesh.lat,md.mesh.long);
    7775
    7876        save ./Models/SlrGRACE_Mesh_refined md;
    79        
     77
    8078        plotmodel (md,'data',md.mask.ocean_levelset,'edgecolor','k');
    81 
    82 end
    83 
    84 if any(steps==3)
     79end %}}}
     80
     81if any(steps==3) %{{{
    8582        disp('   Step 3: Define loads in meters of ice height equivalent');
    8683        md = loadmodel('./Models/SlrGRACE_Mesh_refined');
    8784
    8885        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
    10198        for ii=1:md.mesh.numberofelements
    10299                if (min([ay_0(ii),by_0(ii),cy_0(ii)])==0 && max([ay_0(ii),by_0(ii),cy_0(ii)])>180)
    103100                        if ay_0(ii)==0
    104101                                ay_0(ii)=360;
    105                         end 
     102                        end
    106103                        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
    113110        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;
    124121        lon_element=(ay_0+by_0+cy_0)/3;
    125122
    126         lat_element_0 = 90-lat_element;         lon_element_0 = lon_element;
     123        lat_element_0 = 90-lat_element; lon_element_0 = lon_element;
    127124        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]');
     134end %}}}
     135
     136if any(steps==4) %{{{
    141137        disp('   Step 4: Parameterization');
    142138        md = loadmodel('./Models/SlrGRACE_Loads');
    143139
    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);
    151144        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;
    154147
    155148        md.slr.sealevel=zeros(md.mesh.numberofvertices,1);
     
    161154        md.slr.Ugia=zeros(md.mesh.numberofvertices,1);
    162155
    163         md.slr.geodetic=1; 
     156        md.slr.geodetic=1;
    164157
    165158        di=md.materials.rho_ice/md.materials.rho_water;
     
    168161        md.geometry.base=md.geometry.surface-md.geometry.thickness;
    169162        md.geometry.bed=md.geometry.base;
    170        
     163
    171164        md.initialization.temperature=273.25*ones(md.mesh.numberofvertices,1);
    172165        md.materials.rheology_B=paterson(md.initialization.temperature);
    173166        md.materials.rheology_n=3*ones(md.mesh.numberofelements,1);
    174        
     167
    175168        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;
     171end %}}}
     172
     173if any(steps==5) %{{{
    182174        disp('   Step 5: Solve Slr solver');
    183175        md = loadmodel('./Models/SlrGRACE_Parameterization');
    184176
    185         md.slr.rigid=1; 
    186         md.slr.elastic=1; 
     177        md.slr.rigid=1;
     178        md.slr.elastic=1;
    187179        md.slr.rotation=1;
    188180
    189         md.cluster=generic('name',oshostname(),'np',3); 
     181        md.cluster=generic('name',oshostname(),'np',3);
    190182        md.verbose=verbose('111111111');
    191183
    192184        md=solve(md,'Slr');
    193185
    194         save ./Models/SlrGRACE_Solution md;
    195 
    196 end
    197 
    198 if any(steps==6)
     186        save ./Models/SlrGRACE_Solution md;
     187end %}}}
     188
     189if any(steps==6) %{{{
    199190        disp('   Step 6: Plot solutions');
    200191        md = loadmodel('./Models/SlrGRACE_Solution');
    201192
    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;
    209200
    210201        [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));
    212203
    213204        for kk=1:2
    214205                sol=eval(sprintf('sol%d',kk));
    215        
    216                 if length(sol)==md.mesh.numberofelements 
     206
     207                if length(sol)==md.mesh.numberofelements
    217208                        for jj=1:md.mesh.numberofelements
    218209                                ii=(jj-1)*3;
     
    220211                        end
    221212                        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);
    229220                F.Method = 'linear';
    230                 F.ExtrapolationMethod = 'linear'; 
     221                F.ExtrapolationMethod = 'linear';
    231222               
    232223                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;
    235226
    236227                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;
    239230                pcolor(lon_grid,lat_grid,sol_grid); shading flat; hold on;
    240231                if (kk==1)
    241                         geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white'); 
     232                        geoshow(flipud(lat),flipud(long),'DisplayType','polygon','FaceColor','white');
    242233                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;
    246237                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));
    253244                set(gcf,'color','w');
    254                 %export_fig(fig_name{kk}); 
     245                %export_fig(fig_name{kk});
    255246        end
    256 end
    257 
    258 if any(steps==7)
     247end %}}}
     248
     249if any(steps==7) %{{{
    259250        disp('   Step 7: Transient run');
    260251        md = loadmodel('./Models/SlrGRACE_Parameterization');
    261252
    262253        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    md.slr.deltathickness = zeros(ne+1,nt);
    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
    272263        md.transient.issmb=0;
    273         md.transient.ismasstransport=0; 
    274         md.transient.isstressbalance=0; 
     264        md.transient.ismasstransport=0;
     265        md.transient.isstressbalance=0;
    275266        md.transient.isthermal=0;
    276267        md.transient.isslr=1;
    277        
     268
    278269        md.timestepping.start_time=-1;
    279    md.timestepping.final_time=nt;
    280         md.timestepping.time_step=1; 
    281    md.timestepping.interp_forcings=0;
     270        md.timestepping.final_time=nt;
     271        md.timestepping.time_step=1;
     272        md.timestepping.interp_forcings=0;
    282273        md.settings.output_frequency=1;
    283274
    284         md.cluster=generic('name',oshostname(),'np',3); 
     275        md.cluster=generic('name',oshostname(),'np',3);
    285276        md.verbose=verbose('111111111');
    286277
    287278        md=solve(md,'tr');
    288279
    289         save ./Models/SlrGRACE_Transient md;
    290 
    291 end
    292 
    293 if any(steps==8)
     280        save ./Models/SlrGRACE_Transient md;
     281end %}}}
     282
     283if any(steps==8) %{{{
    294284        disp('   Step 8: Plot transient');
    295285        md = loadmodel('./Models/SlrGRACE_Transient');
    296286
    297         time = md.slr.deltathickness(end,:); 
    298 
    299         tide_x = 37+29/60;  % degree N
    300         tide_y = 126+20/60; % degree E
     287        time = md.slr.deltathickness(end,:);
     288
     289        tide_x = 37+29/60;      % degree N
     290        tide_y = 126+20/60;     % degree E
    301291
    302292        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;
    305295                slr_incheon(tt) = griddata(md.mesh.lat,md.mesh.long,sol,tide_x,tide_y);
    306296        end
    307297
    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');
    311301        ylabel('GMSL [mm]');
    312302        set(gcf,'color','w');
    313         legend('GMSL','Incheon');
    314 
    315 end
    316 
     303        legend('GMSL','Incheon');
     304end %}}}
  • issm/trunk-jpl/examples/UncertaintyQuantification/runme.m

    r22125 r25915  
    11%PIG Uncertainty Quantification Application
    2 steps=[1]; 
    3 
    4 if any(steps==1)
    5         disp('   Step 1: plot flux gates'); 
    6        
     2steps=[1];
     3
     4if any(steps==1) %{{{
     5        disp('   Step 1: plot flux gates');
     6
    77        md = loadmodel('../Pig/Models/PIG_Control_drag');
    88
     
    2828                '8','9','10','11','12','13'},...
    2929                'textposition',textpositions);
    30 
    31 end
    32 if any(steps==2)
    33         disp('   Step 2: compute cross overs from CRESIS'); 
    34        
     30end %}}}
     31
     32if any(steps==2) %{{{
     33        disp('   Step 2: compute cross overs from CRESIS');
     34
    3535        md = loadmodel('../Pig/Models/PIG_Control_drag');
    3636
    3737        %load cross overs: CRESIS McCord Antarctica, 2009 (courtesy of John Paden)
    3838        load('../Data/CrossOvers2009.mat');
    39        
     39
    4040        %interpolate cross over errors over our mesh vertices
    4141        DeltaHH=InterpFromMeshToMesh2d(index,x,y,dhh,md.mesh.x,md.mesh.y);
     
    4646        %filter out unrealistic error ranges
    4747        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;
    4949
    5050        %avoid large unrealistic values
    5151        pos=find(DeltaHH>1); DeltaHH(pos)=1;
    5252        pos=find(DeltaHH<-1); DeltaHH(pos)=-1;
    53        
     53
    5454        %transform into absolute errors and setup a minimum error everywhere.
    5555        DeltaHH=abs(DeltaHH);
    56         pos=find(DeltaHH==0); pos2=find(DeltaHH~=0); 
     56        pos=find(DeltaHH==0); pos2=find(DeltaHH~=0);
    5757        DeltaHH(pos)=min(DeltaHH(pos2));
    5858
    5959        save Models/PIG.CrossOvers DeltaHH
    60 
    61 end
    62 if any(steps==3)
    63         disp('   Step 3: sampling analysis'); 
    64        
     60end %}}}
     61
     62if any(steps==3) %{{{
     63        disp('   Step 3: sampling analysis');
     64
    6565        %load model and cross over errors
    6666        md = loadmodel('../Pig/Models/PIG_Control_drag');
     
    6868
    6969        %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;
    7472
    7573        %make DeltaHH into our 3 sigma deviation
    7674        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);
    8282
    8383        %responses
     
    110110
    111111        %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        };
    125127        md.qmu.mass_flux_profile_directory='../MassFluxes/';
    126128
    127129        %%  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
    133137
    134138        %%  a variety of parameters
     
    143147        %Turn off verbosity
    144148        md.verbose=verbose(0);
    145        
     149
    146150        %Here, we choose to run with 4 processors, 3 for DAKOTA
    147151        % while one serves as the master
     
    157161        md=solve(md,'Stressbalance','overwrite','y');
    158162
    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;
     164end %}}}
     165
     166if any(steps==4) %{{{
     167        disp('   Step 4: sensitivity analysis');
     168
    164169        %load model
    165170        md = loadmodel('../Pig/Models/PIG_Control_drag');
     
    195200
    196201        %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        };
    210217        md.qmu.mass_flux_profile_directory='../MassFluxes/';
    211218
     
    227234        % while one serves as the master
    228235        md.cluster=generic('name',oshostname,'np',2);
    229        
     236
    230237        %Dakota runs in parallel with a master/slave configuration.
    231238        % At least 2 cpu's are needed to run the UQ
     
    238245        md.verbose=verbose('qmu',true);
    239246        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;
     249end %}}}
     250
     251if any(steps==5) %{{{
    244252        disp('   Step 5: plot partition');
    245        
     253
    246254        %load model
    247255        md = loadmodel('./Models/PIG.Sampling');
    248        
     256
    249257        plotmodel(md,'data','mesh','partitionedges','on',...
    250258        'linewidth',2, 'axis#all','image','unit','km','colorbar','off',...
    251259        'title','Partition Edges on ISSM mesh','grid','on');
    252 
    253 end
    254 if any(steps==6)
    255         disp('   Step 6: plot histogram'); 
    256        
     260end %}}}
     261
     262if any(steps==6) %{{{
     263        disp('   Step 6: plot histogram');
     264
    257265        %load model
    258266        md = loadmodel('./Models/PIG.Sampling');
     
    270278        'none','EdgeColor','red');
    271279
    272 end
    273 if any(steps==7)
    274         disp('   Step 7: plot sensitivity');
    275        
     280end %}}}
     281
     282if any(steps==7) %{{{
     283        disp('   Step 7: plot sensitivity');
     284
    276285        %load model
    277286        md = loadmodel('./Models/PIG.Sensitivity');
     
    280289
    281290        %which profile are we looking at?
    282         index=1;       
     291        index=1;
    283292
    284293        %To plot sensitivities
     
    309318                'colorbartitle#3','If_{B}','unit#all','km','figure',2,...
    310319                'title','Importance Factors: H, \alpha, B');
    311 
    312 end
     320end %}}}
  • issm/trunk-jpl/examples/shakti/runme.m

    r23090 r25915  
    11steps=[1:3];
    22
    3 if any(steps==1)
     3if any(steps==1) %{{{
    44        disp('  Step 1: Mesh');
    55
     
    88
    99        save MoulinMesh md
    10 end
    11 if any(steps==2)
     10end %}}}
     11
     12if any(steps==2) %{{{
    1213        disp('  Step 2: Parameterization');
    1314        md=loadmodel('MoulinMesh');
     
    2122        % Change hydrology class to Sommers' SHaKTI model
    2223        md.hydrology=hydrologyshakti();
    23        
     24
    2425        % Define initial water head such that water pressure is 50% of ice overburden pressure
    2526        md.hydrology.head = 0.5*md.materials.rho_ice/md.materials.rho_freshwater*md.geometry.thickness + md.geometry.base;
     
    4849
    4950        save MoulinParam md;
    50 end
    51 if any(steps==3);
     51end %}}}
     52
     53if any(steps==3) %{{{
    5254        disp('  Step 3: Solve!');
    5355        md=loadmodel('MoulinParam');
     
    8082
    8183        save MoulinTransient md
    82 end
     84end %}}}
  • 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
    32
    43#--------------------#
     
    65#--------------------#
    76
    8 MATLAB_PATH="/Applications/MATLAB_R2018a.app"
     7MATLAB_PATH="/Applications/MATLAB_R2019b.app"
    98
    109ISSM_CONFIG='\
     
    1918        --with-fortran-lib="-L/usr/local/Cellar/gcc/10.2.0/lib/gcc/10 -lgfortran" \
    2019        --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 \
    3534'
    3635
     
    4948        netcdf          install-4.7-parallel.sh
    5049        proj            install-6.2.sh
    51         gdal            install-3-python-netcdf.sh
     50        gdal            install-3-python.sh
    5251        gshhg           install.sh
    53         gmt                     install-6.0-mac.sh
     52        gmt                     install-6-mac.sh
    5453        gmsh            install-4.sh
    5554        triangle        install-mac.sh
     
    6867PYTHON_TEST=0
    6968JAVASCRIPT_TEST=0
    70 EXAMPLES_TEST=0
     69EXAMPLES_TEST=1
    7170
    7271# Number of CPUs used in ISSM compilation
  • issm/trunk-jpl/test/NightlyRun/test418.m

    r25110 r25915  
    99%partitioning
    1010npart=100;
    11 [partition, md]=partitioner(md,'package','chaco','npart',npart);
    12 partition=partition-1;
     11partition=partitioner(md,'package','chaco','npart',npart)-1;
    1312
    1413vector=(1:1:md.mesh.numberofvertices)';
Note: See TracChangeset for help on using the changeset viewer.