[25056] | 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;
|
---|
[25066] | 35 | self.Ngia=[];
|
---|
| 36 | self.Ugia=[];
|
---|
[25056] | 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);
|
---|
[25066] | 46 | md = checkfield(md,'field',self.modelid,'NaN',1,'Inf',1,'>=',0,'<=',length(self.Ngia));
|
---|
[25056] | 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');
|
---|
[25066] | 58 | WriteData(fid,prefix,'name','md.gia.nummodels','data',size(self.Ngia,2),'format','Integer');
|
---|
[25056] | 59 | WriteData(fid,prefix,'object',self,'fieldname','modelid','format','Double');
|
---|
[25066] | 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
|
---|
[25056] | 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
|
---|