tpism_matlab.m - pism - [fork] customized build of PISM, the parallel ice sheet model (tillflux branch) (HTM) git clone git://src.adamsgaard.dk/pism (DIR) Log (DIR) Files (DIR) Refs (DIR) LICENSE --- tpism_matlab.m (2996B) --- 1 function pism_matlab() 2 % PISM_MATLAB Creates "from scratch" a boring dataset with the right format 3 % to use as a PISM bootstrapping file. Example use of Matlab for this purpose. 4 % 5 % Usage, including a minimal PISM call to bootstrap from this file: 6 % $ matlab 7 % >> pism_matlab % creates bar.nc 8 % >> exit 9 % $ pismr -i bar.nc -bootstrap -Mx 41 -My 41 -Mz 21 -Lz 4000 -Mbz 5 -Lbz 500 -y 1 10 11 % tested in MATLAB Version R2012b (8.0.0.783) 12 13 % set up the grid: 14 Lx = 1e6; 15 Ly = 1e6; 16 Mx = 51; 17 My = 71; 18 x = linspace(-Lx,Lx,Mx); 19 y = linspace(-Ly,Ly,My); 20 21 % create dummy fields 22 [xx,yy] = ndgrid(x,y); % meshgrid() generates wrong ordering 23 acab = zeros(Mx,My); 24 artm = zeros(Mx,My) + 273.15 + 10.0; % 10 degrees Celsius 25 topg = 1000.0 + 200.0 * (xx + yy) / max(Lx, Ly); % change "1000.0" to "0.0" to test 26 % flotation criterion, etc. 27 thk = 3000.0 * (1.0 - 3.0 * (xx.^2 + yy.^2) / Lx^2); 28 thk(thk < 0.0) = 0.0; 29 30 % create a file; NC_CLOBBER means "overwrite if exists" 31 ncid = netcdf.create('bar.nc', 'NC_CLOBBER'); 32 33 % create dimensions: 34 x_id = netcdf.defDim(ncid, 'x', Mx); 35 y_id = netcdf.defDim(ncid, 'y', My); 36 37 % create coordinate variables: 38 x_var_id = netcdf.defVar(ncid, 'x', 'float', [x_id]); 39 y_var_id = netcdf.defVar(ncid, 'y', 'float', [y_id]); 40 41 % write attributes: 42 netcdf.putAtt(ncid, x_var_id, 'long_name', 'easting'); 43 netcdf.putAtt(ncid, x_var_id, 'standard_name', 'projection_x_coordinate'); 44 netcdf.putAtt(ncid, y_var_id, 'long_name', 'northing'); 45 netcdf.putAtt(ncid, y_var_id, 'standard_name', 'projection_y_coordinate'); 46 47 % create variables corresponding to spatial fields: 48 % dimension transpose is standard: "float thk(y, x)" in NetCDF file 49 topg_id = netcdf.defVar(ncid, 'topg', 'float', [x_id,y_id]); 50 thk_id = netcdf.defVar(ncid, 'thk', 'float', [x_id,y_id]); 51 acab_id = netcdf.defVar(ncid, 'climatic_mass_balance', 'float', [x_id,y_id]); 52 artm_id = netcdf.defVar(ncid, 'ice_surface_temp', 'float', [x_id,y_id]); 53 54 % write attributes: 55 netcdf.putAtt(ncid, topg_id, 'units', 'm'); 56 netcdf.putAtt(ncid, topg_id, 'standard_name', 'bedrock_altitude'); 57 netcdf.putAtt(ncid, thk_id, 'units', 'm'); 58 netcdf.putAtt(ncid, thk_id, 'standard_name', 'land_ice_thickness'); 59 netcdf.putAtt(ncid, acab_id, 'units', 'm year-1'); 60 netcdf.putAtt(ncid, acab_id, 'standard_name', 'land_ice_surface_specific_mass_balance'); 61 netcdf.putAtt(ncid, artm_id, 'units', 'K'); 62 63 % done defining dimensions and variables: 64 netcdf.endDef(ncid); 65 66 % write coordinate variables: 67 netcdf.putVar(ncid, x_var_id, x); 68 netcdf.putVar(ncid, y_var_id, y); 69 70 % surface temperature: 71 netcdf.putVar(ncid, artm_id, artm); 72 73 % accumulation/ablation rate: 74 netcdf.putVar(ncid, acab_id, acab); 75 76 % bedrock elevation: 77 netcdf.putVar(ncid, topg_id, topg); 78 79 % ice thickness: 80 netcdf.putVar(ncid, thk_id, thk); 81 82 netcdf.close(ncid); 83 84 disp(' PISM-bootable NetCDF file "bar.nc" written') 85 disp(' for example, run:') 86 disp(' $ pismr -i bar.nc -bootstrap -Mx 41 -My 41 -Mz 21 -Lz 4000 -Mbz 5 -Lbz 500 -y 1') 87