Changeset 17087
- Timestamp:
- 01/09/14 15:06:03 (11 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/analyses/MasstransportAnalysis.cpp
r17085 r17087 110 110 break; 111 111 case SMBhenningEnum: 112 iomodel->FetchDataToInput(elements,Surfaceforcings MassBalanceEnum,0.);112 iomodel->FetchDataToInput(elements,SurfaceforcingsSmbrefEnum,0.); 113 113 break; 114 114 default: -
issm/trunk-jpl/src/c/modules/SurfaceMassBalancex/SurfaceMassBalancex.cpp
r17085 r17087 37 37 if(VerboseSolution())_printf_(" call smb Henning module\n"); 38 38 SmbHenningx(femmodel); 39 break; 39 40 default: 40 41 _error_("Surface mass balance model "<<EnumToStringx(smb_model)<<" not supported yet"); … … 160 161 void SmbHenningx(FemModel* femmodel){/*{{{*/ 161 162 162 // void SurfaceMassBalancex(hd,agd,ni){ 163 // INPUT parameters: ni: working size of arrays 164 // INPUT: surface elevation (m): hd(NA) 165 // OUTPUT: mass-balance (m/yr ice): agd(NA) 166 163 /*Intermediaries*/ 164 IssmDouble z_critical = 200.; 165 IssmDouble a = 2.; 166 IssmDouble b = 3.; 167 IssmDouble smb,smbref,z; 168 169 /*Loop over all the elements of this partition*/ 167 170 for(int i=0;i<femmodel->elements->Size();i++){ 168 171 Element* element=dynamic_cast<Element*>(femmodel->elements->GetObjectByOffset(i)); 169 } 170 171 }/*}}}*/ 172 173 /*Get reference SMB (uncorrected) and allocate all arrays*/ 174 int numvertices = element->GetNumberOfVertices(); 175 IssmDouble* surfacelist = xNew<IssmDouble>(numvertices); 176 IssmDouble* smblistref = xNew<IssmDouble>(numvertices); 177 IssmDouble* smblist = xNew<IssmDouble>(numvertices); 178 element->GetInputListOnVertices(surfacelist,SurfaceEnum); 179 element->GetInputListOnVertices(smblistref,SurfaceforcingsSmbrefEnum); 180 181 /*Loop over all vertices of element and correct SMB as a function of altitude z*/ 182 for(int v=0;v<numvertices;v++){ 183 184 /*Get vertex elevation, reference smb*/ 185 z = surfacelist[v]; 186 smbref = smblistref[v]; 187 188 /*Compute corrected smb*/ 189 if(z<z_critical){ 190 smb = smbref; 191 } 192 else{ 193 smb = a*smbref*smbref+b+z; 194 } 195 196 /*Update array accordingly*/ 197 smblist[v] = smb; 198 199 } 200 201 /*Add input to element and Free memory*/ 202 element->AddInput(SurfaceforcingsMassBalanceEnum,smblist,P1Enum); 203 xDelete<IssmDouble>(surfacelist); 204 xDelete<IssmDouble>(smblistref); 205 xDelete<IssmDouble>(smblist); 206 } 207 208 }/*}}}*/ -
issm/trunk-jpl/src/m/classes/SMBhenning.m
r17086 r17087 6 6 classdef SMBhenning 7 7 properties (SetAccess=public) 8 mass_balance= NaN;8 smbref = NaN; 9 9 end 10 10 methods … … 18 18 function self = extrude(self,md) % {{{ 19 19 20 self. mass_balance=project3d(md,'vector',self.mass_balance,'type','node');20 self.smbref=project3d(md,'vector',self.smbref,'type','node'); 21 21 22 22 end % }}} 23 23 function self = initialize(self,md) % {{{ 24 24 25 if isnan(self. mass_balance)26 self. mass_balance=zeros(md.mesh.numberofvertices,1);27 disp(' no surfaceforcings. mass_balancespecified: values set as zero');25 if isnan(self.smbref) 26 self.smbref=zeros(md.mesh.numberofvertices,1); 27 disp(' no surfaceforcings.smbref specified: values set as zero'); 28 28 end 29 29 … … 32 32 33 33 if ismember(MasstransportAnalysisEnum(),analyses), 34 md = checkfield(md,'fieldname','surfaceforcings. mass_balance','forcing',1,'NaN',1);34 md = checkfield(md,'fieldname','surfaceforcings.smbref','forcing',1,'NaN',1); 35 35 end 36 36 if ismember(BalancethicknessAnalysisEnum(),analyses), 37 md = checkfield(md,'fieldname','surfaceforcings. mass_balance','size',[md.mesh.numberofvertices 1],'NaN',1);37 md = checkfield(md,'fieldname','surfaceforcings.smbref','size',[md.mesh.numberofvertices 1],'NaN',1); 38 38 end 39 39 end % }}} 40 40 function disp(obj) % {{{ 41 41 disp(sprintf(' surface forcings parameters:')); 42 fielddisplay(obj,' mass_balance','surface mass balance[m/yr ice eq]');42 fielddisplay(obj,'smbref','reference smb from which deviation is calculated [m/yr ice eq]'); 43 43 end % }}} 44 44 function marshall(obj,md,fid) % {{{ … … 47 47 48 48 WriteData(fid,'enum',SurfaceforcingsEnum(),'data',SMBhenningEnum(),'format','Integer'); 49 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname',' mass_balance','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1);49 WriteData(fid,'object',obj,'class','surfaceforcings','fieldname','smbref','format','DoubleMat','mattype',1,'scale',1./yts,'forcinglength',md.mesh.numberofvertices+1); 50 50 end % }}} 51 51 end
Note:
See TracChangeset
for help on using the changeset viewer.