1 | %GIAMME class definition
|
---|
2 | %
|
---|
3 | % Usage:
|
---|
4 | % gia=giamme(); %gia class based on a multi-model
|
---|
5 | % ensemble (ex: Caron et al 2017 statistics)
|
---|
6 |
|
---|
7 | classdef giamme
|
---|
8 | properties (SetAccess=public)
|
---|
9 |
|
---|
10 | modelid; %index into the multi-model ensemble
|
---|
11 | Ngia; %geoid ensemble
|
---|
12 | Ugia; %uplift ensemble
|
---|
13 |
|
---|
14 | end
|
---|
15 | methods
|
---|
16 | function self = extrude(self,md) % {{{
|
---|
17 | for i=1:length(self.Ngia),
|
---|
18 | self.Ngia{i}=project3d(md,'vector',self.Ngia{i},'type','node','layer',1);
|
---|
19 | self.Ugia{i}=project3d(md,'vector',self.Ugia{i},'type','node','layer',1);
|
---|
20 | end
|
---|
21 | end % }}}
|
---|
22 | function self = giamme(varargin) % {{{
|
---|
23 | switch nargin
|
---|
24 | case 0
|
---|
25 | self=setdefaultparameters(self);
|
---|
26 | case 1
|
---|
27 | self=structtoobj(gia(),varargin{1});
|
---|
28 | otherwise
|
---|
29 | error('constructor not supported');
|
---|
30 | end
|
---|
31 | end % }}}
|
---|
32 | function self = setdefaultparameters(self) % {{{
|
---|
33 |
|
---|
34 | self.modelid=0;
|
---|
35 | self.Ngia=[];
|
---|
36 | self.Ugia=[];
|
---|
37 |
|
---|
38 | end % }}}
|
---|
39 | function md = checkconsistency(self,md,solution,analyses) % {{{
|
---|
40 |
|
---|
41 | %Early return
|
---|
42 | if ~ismember('SealevelriseAnalysis',analyses), return; end
|
---|
43 | if (strcmp(solution,'TransientSolution') & md.transient.isslr == 0), return; end
|
---|
44 | md = checkfield(md,'field',self.Ngia,'NaN',1,'Inf',1);
|
---|
45 | md = checkfield(md,'field',self.Ugia,'NaN',1,'Inf',1);
|
---|
46 | md = checkfield(md,'field',self.modelid,'NaN',1,'Inf',1,'>=',0,'<=',length(self.Ngia));
|
---|
47 | end % }}}
|
---|
48 | function disp(self) % {{{
|
---|
49 |
|
---|
50 | disp(sprintf(' gia mme parameters:'));
|
---|
51 | fielddisplay(self,'modelid','index into the multi-model ensemble, determines which field will be used.');
|
---|
52 | fielddisplay(self,'Ngia','geoid (m/yr).');
|
---|
53 | fielddisplay(self,'Ugia','uplift (m/yr).');
|
---|
54 | end % }}}
|
---|
55 | function marshall(self,prefix,md,fid) % {{{
|
---|
56 |
|
---|
57 | WriteData(fid,prefix,'name','md.gia.model','data',3,'format','Integer');
|
---|
58 | WriteData(fid,prefix,'name','md.gia.nummodels','data',size(self.Ngia,2),'format','Integer');
|
---|
59 | WriteData(fid,prefix,'object',self,'fieldname','modelid','format','Double');
|
---|
60 | if size(self.Ngia,2)==0,
|
---|
61 | WriteData(fid,prefix,'data',zeros(md.mesh.numberofvertices,1),'format','DoubleMat','mattype',1,'name','md.gia.Ngia');
|
---|
62 | WriteData(fid,prefix,'data',zeros(md.mesh.numberofvertices,1),'format','DoubleMat','mattype',1,'name','md.gia.Ugia');
|
---|
63 | else
|
---|
64 | WriteData(fid,prefix,'object',self,'fieldname','Ngia','format','DoubleMat');
|
---|
65 | WriteData(fid,prefix,'object',self,'fieldname','Ugia','format','DoubleMat');
|
---|
66 | end
|
---|
67 | end % }}}
|
---|
68 | function savemodeljs(self,fid,modelname) % {{{
|
---|
69 |
|
---|
70 | writejsdouble(fid,[modelname '.gia.modelid'],self.modelid);
|
---|
71 | writejscellarray(fid,[modelname '.gia.Ngia'],self.Ngia);
|
---|
72 | writejscellarray(fid,[modelname '.gia.Ugia'],self.Ugia);
|
---|
73 |
|
---|
74 | end % }}}
|
---|
75 | end
|
---|
76 | end
|
---|