[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 = giamme(varargin) % {{{
|
---|
| 17 | switch nargin
|
---|
| 18 | case 0
|
---|
| 19 | self=setdefaultparameters(self);
|
---|
| 20 | case 1
|
---|
| 21 | self=structtoobj(gia(),varargin{1});
|
---|
| 22 | otherwise
|
---|
| 23 | error('constructor not supported');
|
---|
| 24 | end
|
---|
| 25 | end % }}}
|
---|
| 26 | function self = setdefaultparameters(self) % {{{
|
---|
| 27 |
|
---|
| 28 | self.modelid=0;
|
---|
[25066] | 29 | self.Ngia=[];
|
---|
| 30 | self.Ugia=[];
|
---|
[25056] | 31 |
|
---|
| 32 | end % }}}
|
---|
| 33 | function md = checkconsistency(self,md,solution,analyses) % {{{
|
---|
| 34 |
|
---|
| 35 | %Early return
|
---|
| 36 | if ~ismember('SealevelriseAnalysis',analyses), return; end
|
---|
| 37 | if (strcmp(solution,'TransientSolution') & md.transient.isslr == 0), return; end
|
---|
| 38 | md = checkfield(md,'field',self.Ngia,'NaN',1,'Inf',1);
|
---|
| 39 | md = checkfield(md,'field',self.Ugia,'NaN',1,'Inf',1);
|
---|
[25066] | 40 | md = checkfield(md,'field',self.modelid,'NaN',1,'Inf',1,'>=',0,'<=',length(self.Ngia));
|
---|
[25056] | 41 | end % }}}
|
---|
| 42 | function disp(self) % {{{
|
---|
| 43 |
|
---|
| 44 | disp(sprintf(' gia mme parameters:'));
|
---|
| 45 | fielddisplay(self,'modelid','index into the multi-model ensemble, determines which field will be used.');
|
---|
[25080] | 46 | fielddisplay(self,'Ngia','geoid (mm/yr).');
|
---|
| 47 | fielddisplay(self,'Ugia','uplift (mm/yr).');
|
---|
[25056] | 48 | end % }}}
|
---|
| 49 | function marshall(self,prefix,md,fid) % {{{
|
---|
| 50 | WriteData(fid,prefix,'name','md.gia.model','data',3,'format','Integer');
|
---|
[25066] | 51 | if size(self.Ngia,2)==0,
|
---|
| 52 | WriteData(fid,prefix,'data',zeros(md.mesh.numberofvertices,1),'format','DoubleMat','mattype',1,'name','md.gia.Ngia');
|
---|
| 53 | WriteData(fid,prefix,'data',zeros(md.mesh.numberofvertices,1),'format','DoubleMat','mattype',1,'name','md.gia.Ugia');
|
---|
[25085] | 54 | WriteData(fid,prefix,'data',1,'name','md.gia.modelid','format','Double');
|
---|
[25080] | 55 | WriteData(fid,prefix,'name','md.gia.nummodels','data',1,'format','Integer');
|
---|
[25066] | 56 | else
|
---|
[25082] | 57 | WriteData(fid,prefix,'object',self,'fieldname','Ngia','format','DoubleMat','scale',1/1000/md.constants.yts);
|
---|
| 58 | WriteData(fid,prefix,'object',self,'fieldname','Ugia','format','DoubleMat','scale',1/1000/md.constants.yts);
|
---|
[25080] | 59 | WriteData(fid,prefix,'object',self,'fieldname','modelid','format','Double');
|
---|
| 60 | WriteData(fid,prefix,'name','md.gia.nummodels','data',size(self.Ngia,2),'format','Integer');
|
---|
[25066] | 61 | end
|
---|
[25056] | 62 | end % }}}
|
---|
| 63 | function savemodeljs(self,fid,modelname) % {{{
|
---|
| 64 |
|
---|
| 65 | writejsdouble(fid,[modelname '.gia.modelid'],self.modelid);
|
---|
| 66 | writejscellarray(fid,[modelname '.gia.Ngia'],self.Ngia);
|
---|
| 67 | writejscellarray(fid,[modelname '.gia.Ugia'],self.Ugia);
|
---|
| 68 |
|
---|
| 69 | end % }}}
|
---|
[25129] | 70 | function self = extrude(self,md) % {{{
|
---|
| 71 | for i=1:length(self.Ngia),
|
---|
| 72 | self.Ngia{i}=project3d(md,'vector',self.Ngia{i},'type','node','layer',1);
|
---|
| 73 | self.Ugia{i}=project3d(md,'vector',self.Ugia{i},'type','node','layer',1);
|
---|
| 74 | end
|
---|
| 75 | end % }}}
|
---|
[25056] | 76 | end
|
---|
| 77 | end
|
---|