Index: ../trunk-jpl/test/NightlyRun/test804.py =================================================================== --- ../trunk-jpl/test/NightlyRun/test804.py (revision 18815) +++ ../trunk-jpl/test/NightlyRun/test804.py (revision 18816) @@ -24,6 +24,7 @@ md.transient.iscalving=True; md.calving.calvingrate=1000.*numpy.ones((md.mesh.numberofvertices,1)) +md.calving.meltingrate=numpy.zeros((md.mesh.numberofvertices,1)) md=solve(md,TransientSolutionEnum()) Index: ../trunk-jpl/test/NightlyRun/test804.m =================================================================== --- ../trunk-jpl/test/NightlyRun/test804.m (revision 18815) +++ ../trunk-jpl/test/NightlyRun/test804.m (revision 18816) @@ -14,6 +14,7 @@ md.transient.iscalving=1; md.calving.calvingrate=1000.*ones(md.mesh.numberofvertices,1); +md.calving.meltingrate=zeros(md.mesh.numberofvertices,1); md=solve(md,TransientSolutionEnum()); Index: ../trunk-jpl/test/NightlyRun/test805.py =================================================================== --- ../trunk-jpl/test/NightlyRun/test805.py (revision 18815) +++ ../trunk-jpl/test/NightlyRun/test805.py (revision 18816) @@ -31,6 +31,7 @@ md.transient.iscalving=True; md.calving.calvingrate=1000.*numpy.ones((md.mesh.numberofvertices,1)) +md.calving.meltingrate=numpy.zeros((md.mesh.numberofvertices,1)) md=solve(md,TransientSolutionEnum()) Index: ../trunk-jpl/test/NightlyRun/test805.m =================================================================== --- ../trunk-jpl/test/NightlyRun/test805.m (revision 18815) +++ ../trunk-jpl/test/NightlyRun/test805.m (revision 18816) @@ -21,6 +21,7 @@ md.transient.iscalving=1; md.calving.calvingrate=1000.*ones(md.mesh.numberofvertices,1); +md.calving.meltingrate=zeros(md.mesh.numberofvertices,1); md=solve(md,TransientSolutionEnum()); Index: ../trunk-jpl/test/NightlyRun/test806.py =================================================================== --- ../trunk-jpl/test/NightlyRun/test806.py (revision 18815) +++ ../trunk-jpl/test/NightlyRun/test806.py (revision 18816) @@ -36,8 +36,9 @@ md.transient.isgia=False md.transient.iscalving=True; -md.calving=calvinglevermann(); -md.calving.coeff=4.89e13*numpy.ones((md.mesh.numberofvertices,1)); +md.calving=calvinglevermann() +md.calving.coeff=4.89e13*numpy.ones((md.mesh.numberofvertices,1)) +md.calving.meltingrate=numpy.zeros((md.mesh.numberofvertices,1)) md.transient.requested_outputs=['default','StrainRateparallel','StrainRateperpendicular','Calvingratex','Calvingratey','CalvingCalvingrate'] Index: ../trunk-jpl/test/NightlyRun/test806.m =================================================================== --- ../trunk-jpl/test/NightlyRun/test806.m (revision 18815) +++ ../trunk-jpl/test/NightlyRun/test806.m (revision 18816) @@ -25,6 +25,7 @@ md.calving=calvinglevermann(); md.calving.coeff=4.89e13*ones(md.mesh.numberofvertices,1); +md.calving.meltingrate=zeros(md.mesh.numberofvertices,1); md.transient.requested_outputs={'default','StrainRateparallel','StrainRateperpendicular','Calvingratex','Calvingratey','CalvingCalvingrate'}; Index: ../trunk-jpl/test/NightlyRun/IdToName.m =================================================================== --- ../trunk-jpl/test/NightlyRun/IdToName.m (revision 18815) +++ ../trunk-jpl/test/NightlyRun/IdToName.m (revision 18816) @@ -194,7 +194,8 @@ case 803, name='ValleyGlacierLevelsetEnthalpyHO3d'; case 804, name='ValleyGlacierLevelsetCalvingSIA2d'; case 805, name='ValleyGlacierLevelsetEnthCalvingHO3d'; - case 806, name='SquareShelfLevelsetCalvingSIA2dLevermann'; + case 806, name='SquareShelfLevelsetCalvingSSA2dLevermann'; + case 807, name='SquareShelfLevelsetMeltingSSA2d'; case 1101, name='ISMIPAHO'; case 1102, name='ISMIPAFS'; case 1103, name='ISMIPBHO'; Index: ../trunk-jpl/test/NightlyRun/IdToName.py =================================================================== --- ../trunk-jpl/test/NightlyRun/IdToName.py (revision 18815) +++ ../trunk-jpl/test/NightlyRun/IdToName.py (revision 18816) @@ -179,7 +179,8 @@ 803 : 'ValleyGlacierLevelsetEnthalpyHO3d', 804 : 'ValleyGlacierLevelsetCalvingSIA2d', 805 : 'ValleyGlacierLevelsetEnthCalvingHO3d', - 806 : 'SquareShelfLevelsetCalvingSIA2dLevermann', + 806 : 'SquareShelfLevelsetCalvingSSA2dLevermann', + 807 : 'SquareShelfLevelsetMeltingSSA2d', 1101 : 'ISMIPAHO', 1102 : 'ISMIPAFS', 1103 : 'ISMIPBHO', Index: ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp =================================================================== --- ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp (revision 18815) +++ ../trunk-jpl/src/c/analyses/LevelsetAnalysis.cpp (revision 18816) @@ -47,9 +47,11 @@ switch(calvinglaw){ case DefaultCalvingEnum: iomodel->FetchDataToInput(elements,CalvingCalvingrateEnum); + iomodel->FetchDataToInput(elements,CalvingMeltingrateEnum); break; case CalvingLevermannEnum: iomodel->FetchDataToInput(elements,CalvinglevermannCoeffEnum); + iomodel->FetchDataToInput(elements,CalvinglevermannMeltingrateEnum); break; default: _error_("Calving law "<(dim); IssmDouble* w = xNew(dim); IssmDouble* c = xNewZeroInit(dim); + IssmDouble* m = xNewZeroInit(dim); IssmDouble* dlsf = xNew(dim); /*Retrieve all inputs and parameters*/ @@ -162,6 +165,7 @@ Input* lsf_slopex_input = NULL; Input* lsf_slopey_input = NULL; Input* calvingrate_input = NULL; + Input* meltingrate_input = NULL; /*Load velocities*/ if(domaintype==Domain2DhorizontalEnum){ @@ -185,6 +189,7 @@ lsf_slopex_input = basalelement->GetInput(LevelsetfunctionSlopeXEnum); _assert_(lsf_slopex_input); if(dim==2) lsf_slopey_input = basalelement->GetInput(LevelsetfunctionSlopeYEnum); _assert_(lsf_slopey_input); calvingrate_input = basalelement->GetInput(CalvingCalvingrateEnum); _assert_(calvingrate_input); + meltingrate_input = basalelement->GetInput(CalvingMeltingrateEnum); _assert_(meltingrate_input); break; case CalvingLevermannEnum: if(domaintype==Domain2DhorizontalEnum){ @@ -200,6 +205,7 @@ calvingratey_input=basalelement->GetInput(CalvingrateyAverageEnum); _assert_(calvingratey_input); } } + meltingrate_input = basalelement->GetInput(CalvinglevermannMeltingrateEnum); _assert_(meltingrate_input); break; default: _error_("Calving law "<GetInputValue(&dlsf[0],gauss); if(dim==2) lsf_slopey_input->GetInputValue(&dlsf[1],gauss); calvingrate_input->GetInputValue(&calvingrate,gauss); + meltingrate_input->GetInputValue(&meltingrate,gauss); norm_dlsf=0.; for(i=0;i1.e-10) - for(i=0;iGetInputValue(&c[0],gauss); // in 3D case, add mesh velocity if(dim==2) calvingratey_input->GetInputValue(&c[1],gauss); + meltingrate_input->GetInputValue(&meltingrate,gauss); + + norm_calving=0.; + for(i=0;i=',0) + md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'size',[md.mesh.numberofvertices],'>=',0) return md # }}} def marshall(self,md,fid): # {{{ @@ -44,4 +47,5 @@ WriteData(fid,'enum',CalvingLawEnum(),'data',DefaultCalvingEnum(),'format','Integer'); WriteData(fid,'object',self,'fieldname','calvingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts) + WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts) # }}} Index: ../trunk-jpl/src/m/classes/calvinglevermann.py =================================================================== --- ../trunk-jpl/src/m/classes/calvinglevermann.py (revision 18815) +++ ../trunk-jpl/src/m/classes/calvinglevermann.py (revision 18816) @@ -13,7 +13,8 @@ """ def __init__(self): # {{{ - self.coeff = float('NaN') + self.coeff = float('NaN') + self.meltingrate = float('NaN') #set defaults self.setdefaultparameters() @@ -22,6 +23,7 @@ def __repr__(self): # {{{ string=' Calving Levermann parameters:' string="%s\n%s"%(string,fielddisplay(self,'coeff','proportionality coefficient in Levermann model')) + string="%s\n%s"%(string,fielddisplay(self,'meltingrate','melting rate at given location [m/a]')) return string #}}} @@ -37,9 +39,12 @@ return md md = checkfield(md,'fieldname','calving.coeff','size',[md.mesh.numberofvertices],'>',0) + md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'size',[md.mesh.numberofvertices],'>=',0) return md # }}} def marshall(self,md,fid): # {{{ + yts=365.*24.*3600. WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingLevermannEnum(),'format','Integer'); WriteData(fid,'enum',CalvinglevermannCoeffEnum(),'data',self.coeff,'format','DoubleMat','mattype',1) + WriteData(fid,'object',self,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts) # }}} Index: ../trunk-jpl/src/m/classes/calving.m =================================================================== --- ../trunk-jpl/src/m/classes/calving.m (revision 18815) +++ ../trunk-jpl/src/m/classes/calving.m (revision 18816) @@ -6,6 +6,7 @@ classdef calving properties (SetAccess=public) calvingrate = NaN; + meltingrate = NaN; end methods (Static) function obj = loadobj(obj) % {{{ @@ -59,15 +60,18 @@ %Early return if (solution~=TransientSolutionEnum() | md.transient.iscalving==0), return; end md = checkfield(md,'fieldname','calving.calvingrate','NaN',1,'size',[md.mesh.numberofvertices 1],'>=',0); + md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'size',[md.mesh.numberofvertices 1],'>=',0); end % }}} function disp(obj) % {{{ disp(sprintf(' Calving parameters:')); fielddisplay(obj,'calvingrate','calving rate at given location [m/a]'); + fielddisplay(obj,'meltingrate','melting rate at given location [m/a]'); end % }}} function marshall(obj,md,fid) % {{{ yts=365.0*24.0*3600.0; WriteData(fid,'enum',CalvingLawEnum(),'data',DefaultCalvingEnum(),'format','Integer'); WriteData(fid,'object',obj,'fieldname','calvingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts); + WriteData(fid,'object',obj,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts); end % }}} end end Index: ../trunk-jpl/src/m/classes/calvinglevermann.m =================================================================== --- ../trunk-jpl/src/m/classes/calvinglevermann.m (revision 18815) +++ ../trunk-jpl/src/m/classes/calvinglevermann.m (revision 18816) @@ -5,7 +5,8 @@ classdef calvinglevermann properties (SetAccess=public) - coeff = NaN; + coeff = NaN; + meltingrate = NaN; end methods function obj = calvinglevermann(varargin) % {{{ @@ -34,15 +35,19 @@ %Early return if (solution~=TransientSolutionEnum() | md.transient.iscalving==0), return; end md = checkfield(md,'fieldname','calving.coeff','>',0,'size',[md.mesh.numberofvertices 1]); + md = checkfield(md,'fieldname','calving.meltingrate','NaN',1,'size',[md.mesh.numberofvertices 1],'>=',0); end % }}} function disp(obj) % {{{ disp(sprintf(' Calving Levermann parameters:')); fielddisplay(obj,'coeff','proportionality coefficient in Levermann model'); + fielddisplay(obj,'meltingrate','melting rate at given location [m/a]'); end % }}} function marshall(obj,md,fid) % {{{ + yts=365.0*24.0*3600.0; WriteData(fid,'enum',CalvingLawEnum(),'data',CalvingLevermannEnum(),'format','Integer'); WriteData(fid,'enum',CalvinglevermannCoeffEnum(),'data',obj.coeff,'format','DoubleMat','mattype',1); + WriteData(fid,'object',obj,'fieldname','meltingrate','format','DoubleMat','mattype',1,'forcinglength',md.mesh.numberofvertices+1,'scale',1./yts); end % }}} end end