Index: ../trunk-jpl/src/m/contrib/larour/mdanalysis.m =================================================================== --- ../trunk-jpl/src/m/contrib/larour/mdanalysis.m (nonexistent) +++ ../trunk-jpl/src/m/contrib/larour/mdanalysis.m (revision 24880) @@ -0,0 +1,1683 @@ +function varargout = mdanalysis(varargin) +% MDANALYSIS MATLAB code for mdanalysis.fig {{{ +% MDANALYSIS, by itself, creates a new MDANALYSIS or raises the existing +% singleton*. +% +% H = MDANALYSIS returns the handle to a new MDANALYSIS or the handle to +% the existing singleton*. +% +% MDANALYSIS('CALLBACK',hObject,eventData,handles,...) calls the local +% function named CALLBACK in MDANALYSIS.M with the given input arguments. +% +% MDANALYSIS('Property','Value',...) creates a new MDANALYSIS or raises the +% existing singleton*. Starting from the left, property value pairs are +% applied to the GUI before mdanalysis_OpeningFcn gets called. An +% unrecognized property name or invalid value makes property application +% stop. All inputs are passed to mdanalysis_OpeningFcn via varargin. +% +% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one +% instance to run (singleton)". +% +% See also: GUIDE, GUIDATA, GUIHANDLES +%variables: }}} +%global variables: %{{{ +global md modelname +if strcmpi(class(varargin{1}),'model') | strcmpi(class(varargin{1}),'sealevelmodel'), + md=varargin{1}; + modelname=inputname(1); +end + +global logvalue +global solutiontype +global comparison +global reload +global earth +global whores +%}}} +%Initialization code{{{ +% Begin initialization code - DO NOT EDIT +gui_Singleton = 1; +gui_State = struct('gui_Name', mfilename, ... + 'gui_Singleton', gui_Singleton, ... + 'gui_OpeningFcn', @mdanalysis_OpeningFcn, ... + 'gui_OutputFcn', @mdanalysis_OutputFcn, ... + 'gui_LayoutFcn', [] , ... + 'gui_Callback', []); +if nargin && ischar(varargin{1}) + gui_State.gui_Callback = str2func(varargin{1}); +end + +if nargout + [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); +else + gui_mainfcn(gui_State, varargin{:}); +end +% End initialization code - DO NOT EDIT + + +% --- Executes just before mdanalysis is made visible. +function mdanalysis_OpeningFcn(hObject, eventdata, handles, varargin) +global md comparison logvalue solutiontype +% This function has no output args, see OutputFcn. +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% varargin command line arguments to mdanalysis (see VARARGIN) + +% Choose default command line output for mdanalysis +handles.output = hObject; + +% Update handles structure +guidata(hObject, handles); + +% This sets up the initial plot - only do when we are invisible +% so window can get raised using mdanalysis. +if strcmp(get(hObject,'Visible'),'off') + comparison=0; + logvalue=0; + reload=0; + plotm(); +end + +% UIWAIT makes mdanalysis wait for user response (see UIRESUME) +% uiwait(handles.figure1); + + +% --- Outputs from this function are returned to the command line. +function varargout = mdanalysis_OutputFcn(hObject, eventdata, handles) +% varargout cell array for returning output args (see VARARGOUT); +% hObject handle to figure +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Get default command line output from handles structure +varargout{1} = handles.output; +%}}} +%Interp faceting {{{ +% --- Executes on button press in Interp. +function Interp_Callback(hObject, eventdata, handles) +% hObject handle to Interp (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); +% Hint: get(hObject,'Value') returns toggle state of Interp + +% --- If Enable == 'on', executes on mouse press in 5 pixel border. +% --- Otherwise, executes on mouse press in 5 pixel border or over Interp. +function Interp_ButtonDownFcn(hObject, eventdata, handles) +% hObject handle to Interp (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% }}} +%Faceted facting {{{ +% --- Executes on button press in Faceted. +function Faceted_Callback(hObject, eventdata, handles) +% hObject handle to Faceted (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); +% Hint: get(hObject,'Value') returns toggle state of Faceted + +% --- If Enable == 'on', executes on mouse press in 5 pixel border. +% --- Otherwise, executes on mouse press in 5 pixel border or over Faceted. +function Faceted_ButtonDownFcn(hObject, eventdata, handles) +% hObject handle to Faceted (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +%}}} +%Flat faceting {{{ +% --- Executes on button press in Flat. +function Flat_Callback(hObject, eventdata, handles) +% hObject handle to Flat (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); +% Hint: get(hObject,'Value') returns toggle state of Flat + +% --- If Enable == 'on', executes on mouse press in 5 pixel border. +% --- Otherwise, executes on mouse press in 5 pixel border or over Flat. +function Flat_ButtonDownFcn(hObject, eventdata, handles) +% hObject handle to Flat (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +%}}} +%Step {{{ +% --- Executes on selection change in Step. +function Step_Callback(hObject, eventdata, handles) +global grounded ice logvalue +% hObject handle to Step (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); + +% Hints: contents = cellstr(get(hObject,'String')) returns Step contents as cell array +% contents{get(hObject,'Value')} returns selected item from Step + +% --- Executes during object creation, after setting all properties. +function Step_CreateFcn(hObject, eventdata, handles) +global md grounded ice logvalue +% hObject handle to Step (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called +if issealevel(), if isearth, results=md.earth.results; else results=md.icecaps{1}.results; end; else results=md.results; end; +if isfield(results,'TransientSolution'), + strings=cell(length(results.TransientSolution),1); + for i=1:length(results.TransientSolution), + strings{i}=sprintf('%4.2f (%i)',results.TransientSolution(i).time,i); + end + if length(strings)>40, + %too many strings, reduce! + lt=length(strings); + modlt=floor(lt/40); + strings=strings(1:modlt:end); + end + set(hObject,'String',strings); + set(hObject,'Value',1); +else + set(hObject,'String',{}); + set(hObject,'Value',1); +end +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +%}}} +%Log {{{ +% --- Executes on button press in Log. +function Log_Callback(hObject, eventdata, handles) +global grounded ice logvalue +% hObject handle to Log (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); +% Hint: get(hObject,'Value') returns toggle state of Log + +% --- Executes on button press in Lock. +function Lock_Callback(hObject, eventdata, handles) +% hObject handle to Lock (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); +% Hint: get(hObject,'Value') returns toggle state of Lock +% }}} +%Collock: not sure whether that one is working anymore: {{{ +% --- Executes on button press in Collock. +function Collock_Callback(hObject, eventdata, handles) +% hObject handle to Collock (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); +% Hint: get(hObject,'Value') returns toggle state of Collock +% }}} +%Field {{{ +% --- Executes on selection change in Field. +function Field_Callback(hObject, eventdata, handles) +global md +% hObject handle to Field (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +strings=get(hObject,'String'); value=get(hObject,'Value'); +string=strings(value); + +if strcmpi(string,'IceVolume') | strcmpi(string,'IceVolumeAboveFloatation'), + plotv(); +elseif strcmpi(string,'SealevelRSLEustatic'), + %display directly: + displayscalar(); +else + plotm(); +end + + + +% Hints: contents = cellstr(get(hObject,'String')) returns Field contents as cell array +% contents{get(hObject,'Value')} returns selected item from Field + +% --- Executes during object creation, after setting all properties. +function Field_CreateFcn(hObject, eventdata, handles) +global md +% hObject handle to Field (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called +if issealevel(), if isearth, results=md.earth.results; else results=md.icecaps{1}.results; end; else results=md.results; end; +if isfield(results,'TransientSolution'), + fields=listfields(results,'TransientSolution'); + set(hObject,'String',fields); + for i=1:length(fields), + if ~issealevel & strcmpi(fields{i},'Vel'), + set(hObject,'Value',i); + break; + end + if issealevel & isearth & strcmpi(fields{i},'Sealevel'), + set(hObject,'Value',i); + break; + end + end +else + set(hObject,'String',{}); + set(hObject,'Value',0); +end + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +%}}} +%Model Loading {{{ +% --- Executes on selection change in ModelChoice. +function ModelChoice_Callback(hObject, eventdata, handles) + % hObject handle to ModelChoice (see GCBO) + % eventdata reserved - to be defined in a future version of MATLAB + % handles structure with handles and user data (see GUIDATA) + + % Hints: contents = cellstr(get(hObject,'String')) returns ModelChoice contents as cell array + % contents{get(hObject,'Value')} returns selected item from ModelChoice + global modelname md whores + + %figure out which model is being loaded: + strings=cellstr(get(hObject,'String')); + counter=get(hObject,'Value'); + string=strings{counter}; + counter=findstr(string,'('); + newmodelname=string(1:counter-2); + + %load model from base workspace: + md= evalin('base', newmodelname); + + %replot: + h = findobj('Tag','Field'); + Field_Callback(h,eventdata,handles); + + + %eval([newmodelname '=md;']); + %close gcbf; + %eval(['mdanalysis(' newmodelname ');']); + +% --- Executes during object creation, after setting all properties. +function ModelChoice_CreateFcn(hObject, eventdata, handles) +% hObject handle to ModelChoice (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called +global modelname + + +%figure out how many models are in the workspace! +whores=evalin('base','whos'); +flags=zeros(length(whores),1); +for i=1:length(whores), + if strcmpi(whores(i).class,'model') | strcmpi(whores(i).class,'sealevelmodel'), + flags(i)=1; + end +end +pos=find(flags); +whores=whores(pos); + +strings={}; +for i=1:length(whores), + strings{end+1}=[whores(i).name ' (' whores(i).class ')']; +end + +%match with varargin{1}'s name: +counter=-1; +for i=1:length(strings), + if strcmpi(modelname,whores(i).name), + counter=i; + break; + end +end +if counter==-1, + error('cound not find input model name matching base workspace names!'); +end + +set(hObject,'String',strings); +set(hObject,'Value',counter); + + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + +%}}} +%Cmin {{{ +function Cmin_Callback(hObject, eventdata, handles) +% hObject handle to Cmin (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); +% Hints: get(hObject,'String') returns contents of Cmin as text +% str2double(get(hObject,'String')) returns contents of Cmin as a double + + +% --- Executes during object creation, after setting all properties. +function Cmin_CreateFcn(hObject, eventdata, handles) +% hObject handle to Cmin (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called +set(hObject,'String',num2str(NaN)); +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +%}}} +%Cmax {{{ +function Cmax_Callback(hObject, eventdata, handles) +% hObject handle to Cmax (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of Cmax as text +% str2double(get(hObject,'String')) returns contents of Cmax as a double +plotm(); + +% --- Executes during object creation, after setting all properties. +function Cmax_CreateFcn(hObject, eventdata, handles) +% hObject handle to Cmax (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called +set(hObject,'String',num2str(NaN)); +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +%}}} +%Xmin {{{ +function xmin_Callback(hObject, eventdata, handles) +% hObject handle to xmin (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of xmin as text +% str2double(get(hObject,'String')) returns contents of xmin as a double + +% --- Executes during object creation, after setting all properties. +function xmin_CreateFcn(hObject, eventdata, handles) +% hObject handle to xmin (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +%}}} +%Xmax {{{ +function xmax_Callback(hObject, eventdata, handles) +% hObject handle to xmax (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% Hints: get(hObject,'String') returns contents of xmax as text +% str2double(get(hObject,'String')) returns contents of xmax as a double + +% --- Executes during object creation, after setting all properties. +function xmax_CreateFcn(hObject, eventdata, handles) +% hObject handle to xmax (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +% }}} +%Ymin {{{ +function ymin_Callback(hObject, eventdata, handles) +% hObject handle to ymin (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% Hints: get(hObject,'String') returns contents of ymin as text +% str2double(get(hObject,'String')) returns contents of ymin as a double + + +% --- Executes during object creation, after setting all properties. +function ymin_CreateFcn(hObject, eventdata, handles) +% hObject handle to ymin (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +%}}} +%Ymax {{{ +function ymax_Callback(hObject, eventdata, handles) +% hObject handle to ymax (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% Hints: get(hObject,'String') returns contents of ymax as text +% str2double(get(hObject,'String')) returns contents of ymax as a double + + +% --- Executes during object creation, after setting all properties. +function ymax_CreateFcn(hObject, eventdata, handles) +% hObject handle to ymax (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +%}}} +%Time lable {{{ +function Time_Callback(hObject, eventdata, handles) +% hObject handle to Time (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of Time as text +% str2double(get(hObject,'String')) returns contents of Time as a double + + +% --- Executes during object creation, after setting all properties. +function Time_CreateFcn(hObject, eventdata, handles) +global md +% hObject handle to Time (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called +if issealevel, if isearth, results=md.earth.results; else results=md.icecaps{1}.results; end; else results=md.results; end; +if isfield(results,'TransientSolution'), + set(hObject,'String',sprintf('%4.2f',results.TransientSolution(1).time)); +else + set(hObject,'String',sprintf('%4.2f',0)); +end +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end + +% --- If Enable == 'on', executes on mouse press in 5 pixel border. +% --- Otherwise, executes on mouse press in 5 pixel border or over Time. +function Time_ButtonDownFcn(hObject, eventdata, handles) +% hObject handle to Time (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% }}} +%Mask: {{{ +% --- Executes on selection change in Masque. +function Masque_Callback(hObject, eventdata, handles) +% hObject handle to Masque (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); +% Hints: contents = cellstr(get(hObject,'String')) returns Masque contents as cell array +% contents{get(hObject,'Value')} returns selected item from Masque + +% --- Executes during object creation, after setting all properties. +function Masque_CreateFcn(hObject, eventdata, handles) +global md +% hObject handle to Masque (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called +if issealevel, + if isearth, + mv=md.earth.mask; + else + mv=md.icecaps{1}.mask; + end +else + mv=md.mask; +end +strings=fields(mv); +strings={'all',strings{:}}; +set(hObject,'String',strings); +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +%}}} +%DiffStep {{{ +% --- Executes on selection change in DiffStep. +function DiffStep_Callback(hObject, eventdata, handles) +% hObject handle to DiffStep (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); + +% Hints: contents = cellstr(get(hObject,'String')) returns DiffStep contents as cell array +% contents{get(hObject,'Value')} returns selected item from DiffStep + +% --- Executes during object creation, after setting all properties. +function DiffStep_CreateFcn(hObject, eventdata, handles) +global md ; +% hObject handle to DiffStep (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called +if issealevel, if isearth, results=md.earth.results; else results=md.icecaps{1}.results; end; else results=md.results; end; +if isfield(results,'TransientSolution'), + strings=cell(length(results.TransientSolution),1); + for i=1:length(results.TransientSolution), + strings{i}=sprintf('%4.2f (%i)',results.TransientSolution(i).time,i); + end + if length(strings)>20, + %too many strings, reduce! + lt=length(strings); + modlt=floor(lt/20); + strings=strings(1:modlt:end); + end + set(hObject,'String',strings); +else + set(hObject,'String',{}); +end + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +% --- If Enable == 'on', executes on mouse press in 5 pixel border. +% --- Otherwise, executes on mouse press in 5 pixel border or over DiffStep. +function DiffStep_ButtonDownFcn(hObject, eventdata, handles) +% hObject handle to DiffStep (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +% }}} +%Diff button {{{ +% --- Executes on button press in Diff. +function Diff_Callback(hObject, eventdata, handles) +% hObject handle to Diff (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); +% Hint: get(hObject,'Value') returns toggle state of Diff + +% --- Executes during object creation, after setting all properties. +function Diff_CreateFcn(hObject, eventdata, handles) +% hObject handle to Diff (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called +%}}} +%Model Fields: {{{ +% --- Executes on selection change in ModelFields. +function ModelFields_Callback(hObject, eventdata, handles) +% hObject handle to ModelFields (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); +% Hints: contents = cellstr(get(hObject,'String')) returns ModelFields contents as cell array +% contents{get(hObject,'Value')} returns selected item from ModelFields + +% --- Executes during object creation, after setting all properties. +function ModelFields_CreateFcn(hObject, eventdata, handles) +global md +% hObject handle to ModelFields (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + + +% fields {{{ +fields={'geometry.thickness',... + 'geometry.surface',... + 'geometry.base',... + 'geometry.bed',... + 'inversion.vx_obs',... + 'inversion.vy_obs',... + 'inversion.vel_obs',... + 'friction.coefficient',... + 'materials.rheology_B',... + 'mask.ice_levelset',... + 'mask.groundedice_levelset',... + 'slr.deltathickness'... + }; + + if issealevel(), + if isearth, + mask=md.earth.mask; + else + mask=md.icecaps{1}.mask; + end + else + mask=md.mask; + end + + if strcmpi(class(mask),'maskpsl'), + fields{end+1}='mask.ocean_levelset'; + fields{end+1}='mask.land_levelset'; + end + + +% }}} +set(hObject,'String',fields); +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +% }}} +%Mf button: {{{ +% --- Executes on button press in Mf. +function Mf_CreateFcn(varargin) +function Mf_Callback(hObject, eventdata, handles) +% hObject handle to Mf (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +plotm(); +% Hint: get(hObject,'Value') returns toggle state of Mf +%}}} +%Solution menu {{{ +% --- Executes on selection change in popupmenu10. +function popupmenu10_Callback(hObject, eventdata, handles) +global solutiontype +% hObject handle to popupmenu10 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +%figure out what results we are plotting here: +value=get(hObject,'Value'); +strings=get(hObject,'String'); +solutiontype=strings(value); + +plotm(); +% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu10 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu10 + +% --- Executes during object creation, after setting all properties. +function popupmenu10_CreateFcn(hObject, eventdata, handles) +global md solutiontype +% hObject handle to popupmenu10 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called +if issealevel, + if isearth, + resultfields=fields(md.earth.results); + else + resultfields=fields(md.icecaps{1}.results); + end +else + resultfields=fields(md.results); +end +if isempty(resultfields), + resultfields={'None'}; +end + +%default solution: +for i=1:length(resultfields), + solutiontype=resultfields{i}; + if strcmpi(solutiontype,'StressbalanceSolution'), + i0=i; + break; + elseif strcmpi(solutiontype,'StressbalanceSolution'), + i0=i; + break; + else + i0=1; + end +end +set(hObject,'String',resultfields); +set(hObject,'Value',i0); + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +% }}} +%Icecaps menu: {{{ +% --- Executes on selection change in popupmenu11. +function popupmenu11_Callback(hObject, eventdata, handles) +global md +% hObject handle to popupmenu11 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +strings=get(hObject,'String'); +value=get(hObject,'Value'); +continent=strings{value}; + +%update basin list: +basins=md.basinsfromcontinent(continent); +strings={'All',basins{:}}; +obj=findobj('Tag', 'popupmenu12'); +set(obj,'String',strings'); +set(obj,'Value',1); + +plotm(); +% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu11 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu11 + + +% --- Executes during object creation, after setting all properties. +function popupmenu11_CreateFcn(hObject, eventdata, handles) +% hObject handle to popupmenu11 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called +global md range; + +if issealevel(), + strings=md.continents(); + set(hObject,'String',strings); + set(hObject,'Value',1); +else + set(hObject,'String',{}); + set(hObject,'Value',1); +end + + +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +% }}} +%Basins menu{{{ +% --- Executes on selection change in popupmenu12. +function popupmenu12_Callback(hObject, eventdata, handles) +global md +% hObject handle to popupmenu12 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +plotm(); +% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu12 contents as cell array +% contents{get(hObject,'Value')} returns selected item from popupmenu12 + +% --- Executes during object creation, after setting all properties. +function popupmenu12_CreateFcn(hObject, eventdata, handles) +global md +% hObject handle to popupmenu12 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +if issealevel(), + + %need the continent name: default first one. + continents=md.continents(); + basins=md.basinsfromcontinent(continents{1}); + strings={'All',basins{:}}; + set(hObject,'String',strings); + set(hObject,'Value',1); +else + set(hObject,'String',{}); + set(hObject,'Value',1); +end +% Hint: popupmenu controls usually have a white background on Windows. +% See ISPC and COMPUTER. +if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); +end +% }}} +%Comparison: {{{ + +% --- Executes on button press in radiobutton17. +function radiobutton17_Callback(hObject, eventdata, handles) +global comparison +% hObject handle to radiobutton17 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +comparison=get(hObject,'Value'); +plotm(); +% Hint: get(hObject,'Value') returns toggle state of radiobutton17 +% }}} +%Earth button: {{{ + +% --- Executes on button press in radiobutton18. +function radiobutton18_Callback(hObject, eventdata, handles) +% hObject handle to radiobutton18 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global md earth +earth=get(hObject,'value'); + +%Change Field: +if issealevel, if isearth, results=md.earth.results; else results=md.icecaps{1}.results; end; else results=md.results; end; +fieldHandle=findobj('Tag', 'Field'); +if isfield(results,'TransientSolution'), + fieldss=listfields(results,'TransientSolution'); + set(fieldHandle,'String',fieldss); + set(fieldHandle,'Value',1); +else + set(fieldHandle,'String',{}); + set(fieldHandle,'Value',1); +end + +%Change Masque: +if issealevel, + if isearth, + mv=md.earth.mask; + else + mv=md.icecaps{1}.mask; + end +else + mv=md.mask; +end +fieldHandle=findobj('Tag', 'Masque'); +strings=fields(mv); +strings={'all',strings{:}}; +set(fieldHandle,'String',strings); + +plotm(); +% Hint: get(hObject,'Value') returns toggle state of radiobutton18 +% --- Executes during object creation, after setting all properties. +function radiobutton18_CreateFcn(hObject, eventdata, handles) +% hObject handle to radiobutton18 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called +global earth +earth=1; +set(hObject,'Value',earth); +%}}} +%Reload model: {{{ +% --- Executes on button press in pushbutton1. +function pushbutton1_Callback(hObject, eventdata, handles) +% hObject handle to pushbutton1 (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) +global reload +reload=1; +plotm(); +%}}} +%Scalar {{{ +function Scalar_Callback(hObject, eventdata, handles) +% hObject handle to Scalar (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles structure with handles and user data (see GUIDATA) + +% Hints: get(hObject,'String') returns contents of Scalar as text +% str2double(get(hObject,'String')) returns contents of Scalar as a double + +% --- Executes during object creation, after setting all properties. +function Scalar_CreateFcn(hObject, eventdata, handles) +% hObject handle to Scalar (see GCBO) +% eventdata reserved - to be defined in a future version of MATLAB +% handles empty - handles not created until after all CreateFcns called + +% Hint: edit controls usually have a white background on Windows. +% See ISPC and COMPUTER. + + scalarHandle=findobj('Tag', 'Scalar'); + set(scalarHandle,'String',sprintf('%4.2f',NaN)); + + if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor')) + set(hObject,'BackgroundColor','white'); + end +% }}} +function plotv() % {{{ + global md range + + %field: % {{{ + fieldHandle=findobj('Tag', 'Field'); + fieldstrings=get(fieldHandle,'String'); + fieldvalue=get(fieldHandle,'Value'); + field=fieldstrings{fieldvalue}; + %}}} + %lock limits: % {{{ + lockHandle=findobj('Tag', 'Lock'); lockvalue=get(lockHandle,'Value'); + if lockvalue, + xl=xlim; yl=ylim; + end + %}}} + + cla, reset(gca); + hold on ; + if issealevel, + if isearth, + %do nothing. no ice volume. + else + dt=md.earth.timestepping.time_step*md.earth.settings.output_frequency; + for j=1:length(range), + i=range(j); + vols=resultstomatrix(md.icecaps{i},'TransientSolution',field); + if j==1, + volst=vols; + else + volst(1,:)=volst(1,:)+vols(1,:); + end + end + s1=subplot(2,1,1); + set(s1,'Position',[0.3300 0.6100 0.4750 0.3]); + plot(volst(2,:),(volst(1,:)-volst(1,1))*md.icecaps{1}.materials.rho_ice/1e12); + xlabel('time (yr)'); ylabel('Mass (Gt)'); colorbar off; + if lockvalue, xlim(xl), ylim(yl); end + + s2=subplot(2,1,2); + set(s2,'Position',[0.3300 0.1100 0.4750 0.3]); + dv=diff(volst(1,:))/dt; + plot(volst(2,1:end-1),dv*md.icecaps{1}.materials.rho_ice/1e12); + xlabel('time (yr)'); ylabel('Mass (Gt)'); colorbar off; + if lockvalue, xlim(xl), ylim(yl); end + end + else + dt=md.timestepping.time_step*md.settings.output_frequency; + vols=resultstomatrix(md,'TransientSolution',field); + dv=diff(vols(1,:))/dt; + + s1=subplot(2,1,1); + set(s1,'Position',[0.3300 0.6100 0.4750 0.3]); + xlabel('time (yr)'); ylabel('Mass (Gt)'); colorbar off; + plot(vols(2,:),(vols(1,:)-vols(1,1))*md.materials.rho_ice/1e12); + if lockvalue, xlim(xl), ylim(yl); end + + s2=subplot(2,1,2); + set(s2,'Position',[0.3300 0.1100 0.4750 0.3]); + xlabel('time (yr)'); ylabel('Mass (Gt)'); colorbar off; + plot(vols(2,1:end-1),dv*md.materials.rho_ice/1e12); + if lockvalue, xlim(xl), ylim(yl); end + end +%}}} +function displayscalar() % {{{ + global md range + + %field: % {{{ + fieldHandle=findobj('Tag', 'Field'); + fieldstrings=get(fieldHandle,'String'); + fieldvalue=get(fieldHandle,'Value'); + field=fieldstrings{fieldvalue}; + %}}} + %counter: % {{{ + stepHandle=findobj('Tag', 'Step'); + stepstrings=get(stepHandle,'String'); + stepvalue=get(stepHandle,'Value'); + if ~isempty(stepstrings), + stepstring=stepstrings{stepvalue}; + %grab second integer: + A=sscanf(stepstring,'%g (%i)'); counter=A(2); + else + counter=1; + end + %}}} + + + if issealevel, + if isearth, + if strcmpi(field,'SealevelRSLEustatic'), + dt=md.earth.timestepping.time_step*md.earth.slr.geodetic_run_frequency; + eus=md.earth.results.TransientSolution(counter-1).(field)/dt*1000; %in mm/yr + scalarHandle=findobj('Tag', 'Scalar'); + set(scalarHandle,'String',sprintf('%4.5f mm/yr',eus)); + end + else + error('not supported yet!'); + end + end +%}}} +function plotm() % {{{ + + %retrieve field: + hObject=findobj('Tag', 'Field'); + strings=get(hObject,'String'); value=get(hObject,'Value'); + + string=''; + if value, + if ~isempty(strings), + string=strings(value); + end + end + + if strcmpi(string,'IceVolume') | strcmpi(string,'IceVolumeAboveFloatation'), + plotv(); + elseif strcmpi(string,'SealevelRSLEustatic'), + displayscalar(); + else + if issealevel(), + plotsl(); + else + plotmd(); + end + end +%}}} + function plotmd() % {{{ + global logvalue md solutiontype comparison + + %counter: % {{{ + stepHandle=findobj('Tag', 'Step'); + stepstrings=get(stepHandle,'String'); + stepvalue=get(stepHandle,'Value'); + if ~isempty(stepstrings), + stepstring=stepstrings{stepvalue}; + %grab second integer: + A=sscanf(stepstring,'%g (%i)'); counter=A(2); + else + counter=1; + end + %}}} + %log: % {{{ + logHandle=findobj('Tag', 'Log'); logvalue=get(logHandle,'Value'); + %}}} + %shading: %{{{ + interpHandle=findobj('Tag', 'Interp'); interpvalue=get(interpHandle,'Value'); + flatHandle=findobj('Tag', 'Flat'); flatvalue=get(flatHandle,'Value'); + facetedHandle=findobj('Tag', 'Faceted'); facetedvalue=get(facetedHandle,'Value'); + if interpvalue, + shadingv='interp'; + elseif flatvalue, + shadingv='flat'; + elseif facetedvalue, + shadingv='faceted'; + else + shadingv='interp'; + end + %}}} + %mask: %{{{ + maskfieldHandle=findobj('Tag', 'Masque'); + maskfieldstrings=get(maskfieldHandle,'String'); + maskfieldvalue=get(maskfieldHandle,'Value'); + maskfield=maskfieldstrings(maskfieldvalue); + maskfield=maskfield{:}; + if strcmpi(maskfield,'all'), + maskv=ones(md.mesh.numberofvertices,1); + else + maskv=md.mask.(maskfield); + end + if strcmpi(maskfield,'all'), + %do nothing; + elseif strcmpi(maskfield,'groundedice_levelset'), + maskv=maskv>=0; + elseif strcmpi(maskfield,'ice_levelset'), + maskv=maskv<=0; + elseif strcmpi(maskfield,'ocean_levelset'), + maskv=maskv==1; + elseif strcmpi(maskfield,'land_levelset'), + maskv=maskv==1; + elseif strcmpi(maskfield,'glacier_levelset'), + if isnan(maskv), + maskv=ones(md.mesh.numberofvertices,1); + else + maskv=maskv==1; + end + end + maskvalue=0; + %}}} + %lock limits: % {{{ + lockHandle=findobj('Tag', 'Lock'); lockvalue=get(lockHandle,'Value'); + if lockvalue, + xl=xlim; yl=ylim; + else + xl=[min(md.mesh.x) max(md.mesh.x)]; + yl=[min(md.mesh.y) max(md.mesh.y)]; + end %}}} + %time: {{{ + timeHandle=findobj('Tag','Time'); + if strcmpi(solutiontype,'TransientSolution'), + set(timeHandle,'String',sprintf('%4.2f',md.results.TransientSolution(counter).time)); + else + set(timeHandle,'String',sprintf('%4.2f',0)); + end + %}}} + %diffcounter: % {{{ + stepHandle=findobj('Tag', 'DiffStep'); + stepstrings=get(stepHandle,'String'); + stepvalue=get(stepHandle,'Value'); + if ~isempty(stepstrings), + stepstring=stepstrings{stepvalue}; + %grab second integer: + A=sscanf(stepstring,'%g (%i)'); diffcounter=A(2); + else + diffcounter=1; + end + diffHandle=findobj('Tag', 'Diff'); + diff=get(diffHandle,'Value'); + %}}} + %field: % {{{ + fieldHandle=findobj('Tag', 'Field'); + fieldstrings=get(fieldHandle,'String'); + fieldvalue=get(fieldHandle,'Value'); + if ~isempty(fieldstrings), + fieldv=fieldstrings{fieldvalue}; + else + fieldv=NaN; + end + mfHandle=findobj('Tag', 'Mf'); + mf=get(mfHandle,'Value'); + if mf | strcmpi(solutiontype,'None'), + fieldHandle=findobj('Tag', 'ModelFields'); + fieldstrings=get(fieldHandle,'String'); + fieldvalue=get(fieldHandle,'Value'); + fieldv=fieldstrings{fieldvalue}; + eval(['field=md.' fieldv ';']); + if isnan(field), + field='mesh'; + end + else + if strcmpi(solutiontype,'TransientSolution'), + field=md.results.TransientSolution(counter).(fieldv); + dfield=md.results.TransientSolution(diffcounter).(fieldv); + elseif strcmpi(solutiontype,'StressbalanceSolution'), + field=md.results.StressbalanceSolution.(fieldv); + dfield=NaN; + else + error('unknown solution type!'); + end + end + if comparison, + if strcmpi(solutiontype,'None'), + error('cannot compare a solution field to model as no solution was run or selected!'); + end + %figure out second field: + if strcmpi(fieldv,'Vel'), + field2=md.inversion.vel_obs; + end + end + + %}}} + %color limits: % {{{ + cminHandle=findobj('Tag','Cmin'); cmin=str2num(get(cminHandle,'String')); + cmaxHandle=findobj('Tag','Cmax'); cmax=str2num(get(cmaxHandle,'String')); + + if isnan(cmin) + if logvalue, + cmin=.1; + else + pos=find(maskv); + cmin=min(field(pos)); + end + end + if isnan(cmax) + pos=find(maskv); + cmax=max(field(pos)); + end + colaxis=[cmin,cmax]; + %}}} + + cla; + if logvalue, + plotmodel(md,'data',field,'figurestatement','off','clf','off','mask',maskv,'caxis',colaxis,'log',10,'xlim',xl,'ylim',yl,'shading',shadingv); + else + if ~diff, + if comparison, + plotmodel(md,'data',field,'data',field2,'figurestatement','off','clf','off','mask#all',maskv,'caxis#all',colaxis,'xlim#all',xl,'ylim#all',yl,'shading#all',shadingv,'nlines',2,'ncols',1); + else + if ischar(field) & strcmpi(field,'mesh'), + plotmodel(md,'data','mesh','figurestatement','off','clf','off','xlim',xl,'ylim',yl); + else + plotmodel(md,'data',field,'figurestatement','off','clf','off','mask',maskv,'caxis',colaxis,'xlim',xl,'ylim',yl,'shading',shadingv); + end + end + else + plotmodel(md,'data',dfield-field,'figurestatement','off','clf','off','mask',maskv,'caxis',colaxis,'xlim',xl,'ylim',yl,'shading',shadingv); + end + + end + set(gca,'Position',[0.2300 0.1100 0.7750 0.8150]); + %}}} +function plotsl() % {{{ + global logvalue md solutiontype comparison + + %counter: % {{{ + stepHandle=findobj('Tag', 'Step'); + stepstrings=get(stepHandle,'String'); + stepvalue=get(stepHandle,'Value'); + if ~isempty(stepstrings), + stepstring=stepstrings{stepvalue}; + %grab second integer: + A=sscanf(stepstring,'%g (%i)'); counter=A(2); + else + counter=1; + end + %}}} + %log: % {{{ + logHandle=findobj('Tag', 'Log'); logvalue=get(logHandle,'Value'); + %}}} + %shading: %{{{ + interpHandle=findobj('Tag', 'Interp'); interpvalue=get(interpHandle,'Value'); + flatHandle=findobj('Tag', 'Flat'); flatvalue=get(flatHandle,'Value'); + facetedHandle=findobj('Tag', 'Faceted'); facetedvalue=get(facetedHandle,'Value'); + if interpvalue, + shadingv='interp'; + elseif flatvalue, + shadingv='flat'; + elseif facetedvalue, + shadingv='faceted'; + else + shadingv='interp'; + end + %}}} + %time: {{{ + timeHandle=findobj('Tag','Time'); + if strcmpi(solutiontype,'TransientSolution'), + if isearth, + set(timeHandle,'String',sprintf('%4.2f',md.earth.results.TransientSolution(counter).time)); + else + set(timeHandle,'String',sprintf('%4.2f',md.icecaps{1}.results.TransientSolution(counter).time)); + end + else + set(timeHandle,'String',sprintf('%4.2f',0)); + end + %}}} + %diffcounter: % {{{ + stepHandle=findobj('Tag', 'DiffStep'); + stepstrings=get(stepHandle,'String'); + stepvalue=get(stepHandle,'Value'); + if ~isempty(stepstrings), + stepstring=stepstrings{stepvalue}; + %grab second integer: + A=sscanf(stepstring,'%g (%i)'); diffcounter=A(2); + else + diffcounter=1; + end + diffHandle=findobj('Tag', 'Diff'); + diff=get(diffHandle,'Value'); + %}}} + + if isearth, + %Earth plotting: {{{ + %field: % {{{ + fieldHandle=findobj('Tag', 'Field'); + fieldstrings=get(fieldHandle,'String'); + fieldvalue=get(fieldHandle,'Value'); + if ~isempty(fieldstrings), + fieldv=fieldstrings{fieldvalue}; + else + fieldv=NaN; + end + colorbartitle={fieldv,''}; + if strcmpi(fieldv,'SealevelRSLRate'), + colorbartitle={'SealevelRSLRate (mm/yr)',''}; + end + + mfHandle=findobj('Tag', 'Mf'); + mf=get(mfHandle,'Value'); + if mf | strcmpi(solutiontype,'None'), + fieldHandle=findobj('Tag', 'ModelFields'); + fieldstrings=get(fieldHandle,'String'); + fieldvalue=get(fieldHandle,'Value'); + fieldv=fieldstrings{fieldvalue}; + eval(['field=md.earth.' fieldv ';']); + if isnan(field), + field='mesh'; + end + else + if strcmpi(solutiontype,'TransientSolution'), + field=md.earth.results.TransientSolution(counter).(fieldv); + dfield=md.earth.results.TransientSolution(diffcounter).(fieldv); + elseif strcmpi(solutiontype,'StressbalanceSolution'), + field=md.earth.results.StressbalanceSolution.(fieldv); + dfield=NaN; + else + error('unknown solution type!'); + end + end + if comparison, + if strcmpi(solutiontype,'None'), + error('cannot compare a solution field to model as no solution was run or selected!'); + end + %figure out second field: + if strcmpi(fieldv,'Vel'), field2=md.earth.inversion.vel_obs; end + if strcmpi(fieldv,'Base'), field2=md.earth.geometry.base; end + end + %}}} + %mask: %{{{ + maskfieldHandle=findobj('Tag', 'Masque'); + maskfieldstrings=get(maskfieldHandle,'String'); + maskfieldvalue=get(maskfieldHandle,'Value'); + maskfield=maskfieldstrings(maskfieldvalue); + maskfield=maskfield{:}; + if strcmpi(maskfield,'all'), + maskv=ones(md.earth.mesh.numberofvertices,1); + else + maskv=md.earth.mask.(maskfield); + end + if strcmpi(maskfield,'all'), + %do nothing; + elseif strcmpi(maskfield,'groundedice_levelset'), + maskv=maskv>=0; + elseif strcmpi(maskfield,'ice_levelset'), + maskv=maskv<=0; + elseif strcmpi(maskfield,'ocean_levelset'), + maskv=maskv==1; + elseif strcmpi(maskfield,'land_levelset'), + maskv=maskv==1; + elseif strcmpi(maskfield,'glacier_levelset'), + if isnan(maskv), + maskv=ones(md.earth.mesh.numberofvertices,1); + else + maskv=maskv==1; + end + end + maskvalue=0; + %}}} + %color limits: % {{{ + if ~ischar(field), + cminHandle=findobj('Tag','Cmin'); cmin=str2num(get(cminHandle,'String')); + cmaxHandle=findobj('Tag','Cmax'); cmax=str2num(get(cmaxHandle,'String')); + + if isnan(cmin) + if logvalue, + cmin=.1; + else + pos=find(maskv); + cmin=min(field(pos)); + end + end + if isnan(cmax) + pos=find(maskv); + cmax=max(field(pos)); + end + + if cmin==cmax, + colaxis=[cmin-eps,cmax+eps]; + else + colaxis=[cmin,cmax]; + end + end + + %}}} + %lock limits: % {{{ + lockHandle=findobj('Tag', 'Lock'); lockvalue=get(lockHandle,'Value'); + if lockvalue, + xl=xlim; yl=ylim; zl=zlim; + [az,el]=view; v=[az,el]; + else + xl=[min(md.earth.mesh.x) max(md.earth.mesh.x)]; + yl=[min(md.earth.mesh.y) max(md.earth.mesh.y)]; + zl=[min(md.earth.mesh.z) max(md.earth.mesh.z)]; + v=[57,50]; + end %}}} + + %some quirks: + cla; + if logvalue, + plotmodel(md.earth,'data',field,'figurestatement','off','clf','off','mask',maskv,'caxis',colaxis,'log',10,'xlim',xl,'ylim',yl,'zlim',zl,'shading',shadingv,'colorbar','on','view',v,'colorbartitle',colorbartitle); + else + if ~diff, + if comparison, + plotmodel(md.earth,'data',field,'data',field2,'figurestatement','off','clf','off','mask#all',maskv,'caxis#all',colaxis,'xlim#all',xl,'ylim#all',yl,'zlim#all',zl,'shading#all',shadingv,'nlines',2,'ncols',1,'view#all',v,'colorbartitle',colorbartitle); + else + if ischar(field) & strcmpi(field,'mesh'), + plotmodel(md.earth,'data','mesh','figurestatement','off','clf','off','xlim',xl,'ylim',yl,'zlim',zl,'view#all',v,'colorbartitle',colorbartitle); + else + plotmodel(md.earth,'data',field,'figurestatement','off','clf','off','mask',maskv,'maskvalue',maskvalue,'caxis',colaxis,'xlim',xl,'ylim',yl,'zlim',zl,'shading',shadingv,'axes','equal','colorbarpos',[.95 .5 .01 .15],'view#all',v,'colorbartitle',colorbartitle); + end + end + else + plotmodel(md.earth,'data',dfield-field,'figurestatement','off','clf','off','mask',maskv,'caxis',colaxis,'xlim',xl,'ylim',yl,'zlim',zl,'shading',shadingv,'view#all',v,'colorbartitle',colorbartitle); + end + end + + %coastlines and graticule: {{{ + load coastlines + [x,y,z]=AboveGround(coastlat,coastlon,md.earth.mesh.r(1),1000); + hold on; p=plot3(x,y,z,'k-'); set(p,'Color','k'); + + %graticule: + grat=graticule(30,40,1); + [x,y,z]=AboveGround(grat.lat,grat.long,md.earth.mesh.r(1),1000); + hold on, p=plot3(x,y,z,'k.-','MarkerSize',.01); set(p,'Color','k'); + %}}} + %}}} + else + %IceCaps plotting: {{{ + + %counter: % {{{ + stepHandle=findobj('Tag', 'Step'); + stepstrings=get(stepHandle,'String'); + stepvalue=get(stepHandle,'Value'); + if ~isempty(stepstrings), + stepstring=stepstrings{stepvalue}; + %grab second integer: + A=sscanf(stepstring,'%g (%i)'); counter=A(2); + else + counter=1; + end + %}}} + %log: % {{{ + logHandle=findobj('Tag', 'Log'); logvalue=get(logHandle,'Value'); + %}}} + %shading: %{{{ + interpHandle=findobj('Tag', 'Interp'); interpvalue=get(interpHandle,'Value'); + flatHandle=findobj('Tag', 'Flat'); flatvalue=get(flatHandle,'Value'); + facetedHandle=findobj('Tag', 'Faceted'); facetedvalue=get(facetedHandle,'Value'); + if interpvalue, + shadingv='interp'; + elseif flatvalue, + shadingv='flat'; + elseif facetedvalue, + shadingv='faceted'; + else + shadingv='interp'; + end + %}}} + %time: {{{ + timeHandle=findobj('Tag','Time'); + if strcmpi(solutiontype,'TransientSolution'), + set(timeHandle,'String',sprintf('%4.2f',md.icecaps{1}.results.TransientSolution(counter).time)); + else + set(timeHandle,'String',sprintf('%4.2f',0)); + end + %}}} + %diffcounter: % {{{ + stepHandle=findobj('Tag', 'DiffStep'); + stepstrings=get(stepHandle,'String'); + stepvalue=get(stepHandle,'Value'); + if ~isempty(stepstrings), + stepstring=stepstrings{stepvalue}; + %grab second integer: + A=sscanf(stepstring,'%g (%i)'); diffcounter=A(2); + else + diffcounter=1; + end + diffHandle=findobj('Tag', 'Diff'); + diff=get(diffHandle,'Value'); + %}}} + %range: % {{{ + basins=getbasins(); + if strcmpi(basins,'All'), + range=md.basinindx('continent',{getcontinent()}); + else + range=md.basinindx('basin',basins); + end + + %}}} + cla; + for j=1:length(range), + i=range(j); + %mask: %{{{ + maskfieldHandle=findobj('Tag', 'Masque'); + maskfieldstrings=get(maskfieldHandle,'String'); + maskfieldvalue=get(maskfieldHandle,'Value'); + maskfield=maskfieldstrings(maskfieldvalue); + maskfield=maskfield{:}; + if strcmpi(maskfield,'all'), + maskv=ones(md.icecaps{i}.mesh.numberofvertices,1); + else + maskv=md.icecaps{i}.mask.(maskfield); + end + if strcmpi(maskfield,'all'), + %do nothing; + elseif strcmpi(maskfield,'groundedice_levelset'), + maskv=maskv>=0; + elseif strcmpi(maskfield,'ice_levelset'), + maskv=maskv<=0; + elseif strcmpi(maskfield,'ocean_levelset'), + maskv=maskv==1; + elseif strcmpi(maskfield,'land_levelset'), + maskv=maskv==1; + elseif strcmpi(maskfield,'glacier_levelset'), + if isnan(maskv), + maskv=ones(md.icecaps{i}.mesh.numberofvertices,1); + else + maskv=maskv==1; + end + end + maskvalue=0; + %}}} + %lock limits: % {{{ + lockHandle=findobj('Tag', 'Lock'); lockvalue=get(lockHandle,'Value'); + if lockvalue, + xl=xlim; yl=ylim; + else + if j==1, + xl=[min(md.icecaps{i}.mesh.x) max(md.icecaps{i}.mesh.x)]; + else + xl=[min([md.icecaps{i}.mesh.x;xl(1)]) max([md.icecaps{i}.mesh.x;xl(2)])]; + end + if j==1, + yl=[min(md.icecaps{i}.mesh.y) max(md.icecaps{i}.mesh.y)]; + else + yl=[min([md.icecaps{i}.mesh.y; yl(1)]) max([md.icecaps{i}.mesh.y; yl(2)])]; + end + end %}}} + %field: % {{{ + fieldHandle=findobj('Tag', 'Field'); + fieldstrings=get(fieldHandle,'String'); + fieldvalue=get(fieldHandle,'Value'); + if ~isempty(fieldstrings), + fieldv=fieldstrings{fieldvalue}; + else + fieldv=NaN; + end + mfHandle=findobj('Tag', 'Mf'); + mf=get(mfHandle,'Value'); + if mf | strcmpi(solutiontype,'None'), + fieldHandle=findobj('Tag', 'ModelFields'); + fieldstrings=get(fieldHandle,'String'); + fieldvalue=get(fieldHandle,'Value'); + fieldv=fieldstrings{fieldvalue}; + eval(['field=md.icecaps{' num2str(i) '}.' fieldv ';']); + if isnan(field), + field='mesh'; + end + else + if strcmpi(solutiontype,'TransientSolution'), + field=md.icecaps{i}.results.TransientSolution(counter).(fieldv); + dfield=md.icecaps{i}.results.TransientSolution(diffcounter).(fieldv); + elseif strcmpi(solutiontype,'StressbalanceSolution'), + field=md.icecaps{i}.results.StressbalanceSolution.(fieldv); + dfield=NaN; + else + error('unknown solution type!'); + end + end + if comparison, + if strcmpi(solutiontype,'None'), + error('cannot compare a solution field to model as no solution was run or selected!'); + end + %figure out second field: + if strcmpi(fieldv,'Vel'), field2=md.icecaps{i}.inversion.vel_obs; end + if strcmpi(fieldv,'Base'), field2=md.icecaps{i}.geometry.base; end + if strcmpi(fieldv,'Bed'), field2=md.icecaps{i}.geometry.bed; end + if strcmpi(fieldv,'Thickness'), field2=md.icecaps{i}.geometry.thickness; end + if strcmpi(fieldv,'Surface'), field2=md.icecaps{i}.geometry.surface; end + end + + %}}} + %color limits: % {{{ + cminHandle=findobj('Tag','Cmin'); cminfield=str2num(get(cminHandle,'String')); + cmaxHandle=findobj('Tag','Cmax'); cmaxfield=str2num(get(cmaxHandle,'String')); + + if isnan(cminfield) + if logvalue, + cmin=.1; + else + pos=find(maskv); + if j==1, + cmin=min(field(pos)); + else + cmin=min(min(field(pos)),cmin); + end + end + else + cmin=cminfield; + end + if isnan(cmaxfield) + pos=find(maskv); + if j==1 + cmax=max(field(pos)); + else + cmax=max(max(field(pos)),cmax); + end + else + cmax=cmaxfield; + end + if cmin==cmax, + cmin=cmin-1e-10; cmax=cmax+1e-10; + end + colaxis=[cmin,cmax]; + %}}} + %contour levels? {{{ + contourlevels=0; + if strncmpi(fieldv,'Mask',4), + contourexp=[tempname '.exp']; + expcontourlevelzero(md.icecaps{i},field,0, contourexp); + contourlevels=1; + + if diff, + contourdiffexp=[tempname '.exp']; + expcontourlevelzero(md.icecaps{i},dfield,0, contourdiffexp); + end + end + %}}} + %display : {{{ + if logvalue, + plotmodel(md.icecaps{i},'data',field,'figurestatement','off','clf','off','mask',maskv,'caxis',colaxis,'log',10,'xlim',xl,'ylim',yl,'shading',shadingv); + else + if ~diff, + if comparison, + plotmodel(md.icecaps{i},'data',field,'data',field2,'figurestatement','off','clf','off','mask#all',maskv,'caxis#all',colaxis,'xlim#all',xl,'ylim#all',yl,'shading#all',shadingv,'nlines',2,'ncols',1); + else + if ischar(field) & strcmpi(field,'mesh'), + plotmodel(md.icecaps{i},'data','mesh','figurestatement','off','clf','off','xlim',xl,'ylim',yl); + else + plotmodel(md.icecaps{i},'data',field,'figurestatement','off','clf','off','mask',maskv,'caxis',colaxis,'xlim',xl,'ylim',yl,'shading',shadingv); + if contourlevels, + contour=expread(contourexp); + hold on; + for k=1:length(contour), + plot(contour(k).x,contour(k).y,'r-'); + end + end + end + end + else + plotmodel(md.icecaps{i},'data',dfield-field,'figurestatement','off','clf','off','mask',maskv,'caxis',colaxis,'xlim',xl,'ylim',yl,'shading',shadingv); + if contourlevels, + contour=expread(contourexp); + hold on; + for k=1:length(contour), + plot(contour(k).x,contour(k).y,'k-'); + end + dcontour=expread(contourdiffexp); + hold on; + for k=1:length(dcontour), + plot(dcontour(k).x,dcontour(k).y,'r-'); + end + end + end + end + % }}} + + end %end for + + if ~comparison, + set(gca,'Position',[0.2300 0.1100 0.7750 0.8150]); + end % }}} + end +% }}} +function result=isearth() % {{{ + global earth; + result=earth; +%}}} +function result=issealevel() % {{{ + global md; + if strcmpi(class(md),'sealevelmodel'), + result=1; + else + result=0; + end +%}}} +function continent=getcontinent() % {{{ + + continentHandle=findobj('Tag', 'popupmenu11'); + strings=get(continentHandle,'String'); + value=get(continentHandle,'Value'); + continent=strings{value}; + +%}}} +function basins=getbasins() % {{{ + + basinHandle=findobj('Tag', 'popupmenu12'); + strings=get(basinHandle,'String'); + value=get(basinHandle,'Value'); + basins=strings{value}; +% }}} Index: ../trunk-jpl/src/m/contrib/larour/mdanalysis.fig =================================================================== Cannot display: file marked as a binary type. svn:mime-type = application/octet-stream Index: ../trunk-jpl/src/m/contrib/larour/mdanalysis.fig =================================================================== --- ../trunk-jpl/src/m/contrib/larour/mdanalysis.fig (nonexistent) +++ ../trunk-jpl/src/m/contrib/larour/mdanalysis.fig (revision 24880) Property changes on: ../trunk-jpl/src/m/contrib/larour/mdanalysis.fig ___________________________________________________________________ Added: svn:mime-type ## -0,0 +1 ## +application/octet-stream \ No newline at end of property Index: ../trunk-jpl/src/m/contrib/larour/glacier_inventory.m =================================================================== --- ../trunk-jpl/src/m/contrib/larour/glacier_inventory.m (revision 24879) +++ ../trunk-jpl/src/m/contrib/larour/glacier_inventory.m (revision 24880) @@ -118,6 +118,19 @@ end end %}}} + function varargout=loadcontour(self,id) % {{{ + + %go find the projected contours for an 'id' region: + disp(['reading projected shapefile for region: ' self.regions(id).name]); + contours=shaperead([self.root '/' self.regions(id).name '.laeaproj.shp']); + self.regions(id).contours=contours; + + if nargout==1, + varargout{1}=contours; + end + + end + %}}} function disp(self) % {{{ disp(sprintf(' Glacier inventory:'));