source: issm/trunk-jpl/src/m/classes/frictionhydro.m@ 24666

Last change on this file since 24666 was 24666, checked in by rueckamp, 5 years ago

CHG: add a limit for effective pressure

File size: 3.7 KB
RevLine 
[18512]1%FRICTIONWEERTMAN class definition
2%
3% Usage:
[18775]4% friction=frictionhydro();
[18512]5
6classdef frictionhydro
7 properties (SetAccess=public)
[21739]8 coupling = 0;
[18779]9 q = NaN;
10 C = NaN;
11 As = NaN;
[24666]12 effective_pressure = NaN;
13 effective_pressure_limit = 0;
[18512]14 end
15 methods
[19040]16 function self = frictionhydro(varargin) % {{{
[18512]17 switch nargin
18 case 0
[19040]19 self=setdefaultparameters(self);
[18512]20 otherwise
21 error('constructor not supported');
22 end
23 end % }}}
[19040]24 function self = setdefaultparameters(self) % {{{
[18512]25
[24666]26 self.effective_pressure_limit = 0;
27
[18512]28 end % }}}
[19040]29 function md = checkconsistency(self,md,solution,analyses) % {{{
[18512]30
31 %Early return
[21049]32 if ~ismember('StressbalanceAnalysis',analyses) & ~ismember('ThermalAnalysis',analyses), return; end
[21739]33 md = checkfield(md,'fieldname','friction.coupling','numel',[1],'values',[0 1 2]);
[19897]34 md = checkfield(md,'fieldname','friction.q','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
35 md = checkfield(md,'fieldname','friction.C','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
36 md = checkfield(md,'fieldname','friction.As','NaN',1,'Inf',1,'size',[md.mesh.numberofelements 1]);
[24666]37 md = checkfield(md,'fieldname','friction.effective_pressure_limit','numel',[1],'>=',0);
[21739]38 switch self.coupling
39 case 0
40 case 1
41 md = checkfield(md,'fieldname','friction.effective_pressure','NaN',1,'Inf',1,'timeseries',1);
42 case 2
43 error('not implemented yet');
44 otherwise
45 error('not supported yet');
46 end
[19195]47 end
[18512]48 end % }}}
[19048]49 function self = extrude(self,md) % {{{
50 self.q=project3d(md,'vector',self.q,'type','element');
51 self.C=project3d(md,'vector',self.C,'type','element');
52 self.As=project3d(md,'vector',self.As,'type','element');
[21739]53 switch self.coupling
54 case 0
55 case 1
56 self.effective_pressure=project3d(md,'vector',self.effective_pressure,'type','node','layer',1);
57 case 2
58 error('not implemented yet');
59 otherwise
60 error('not supported yet');
[19152]61 end
62 end % }}}
[19040]63 function disp(self) % {{{
[18775]64 disp(sprintf('Effective Pressure based friction law described in Gagliardini 2007'));
[21739]65 fielddisplay(self,'coupling','Coupling flag: 0 for default, 1 for forcing(provide md.friction.effective_pressure) and 2 for coupled(not implemented yet)');
[19040]66 fielddisplay(self,'q','friction law exponent q>=1');
67 fielddisplay(self,'C','friction law max value [SI]');
68 fielddisplay(self,'As','Sliding Parameter without cavitation [m Pa^-n s^-1]');
[19152]69 fielddisplay(self,'effective_pressure','Effective Pressure for the forcing if not coupled [Pa]');
[24666]70 fielddisplay(self,'effective_pressure_limit','Neff do not allow to fall below a certain limit: effective_pressure_limit*rho_ice*g*thickness (default 0)');
[18512]71 end % }}}
[20690]72 function marshall(self,prefix,md,fid) % {{{
73 WriteData(fid,prefix,'name','md.friction.law','data',3,'format','Integer');
[21739]74 WriteData(fid,prefix,'class','friction','object',self,'fieldname','coupling','format','Integer');
[20690]75 WriteData(fid,prefix,'class','friction','object',self,'fieldname','q','format','DoubleMat','mattype',2);
76 WriteData(fid,prefix,'class','friction','object',self,'fieldname','C','format','DoubleMat','mattype',2);
[24666]77 WriteData(fid,prefix,'class','friction','object',self,'fieldname','As','format','DoubleMat','mattype',3);
78 WriteData(fid,prefix,'object',self,'class','friction','fieldname','effective_pressure_limit','format','Double');
[21739]79 switch self.coupling
80 case 0
81 case 1
82 WriteData(fid,prefix,'class','friction','object',self,'fieldname','effective_pressure','format','DoubleMat','mattype',1,'timeserieslength',md.mesh.numberofvertices+1,'yts',md.constants.yts);
83 case 2
84 error('not implemented yet');
85 otherwise
86 error('not supported yet');
[19152]87 end
88 end % }}}
[18512]89 end
90end
Note: See TracBrowser for help on using the repository browser.