Changeset 21808
- Timestamp:
- 07/18/17 16:01:19 (8 years ago)
- Location:
- issm/trunk-jpl/src
- Files:
-
- 3 added
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/c/classes/Elements/Element.cpp
r21779 r21808 1341 1341 } 1342 1342 /*}}}*/ 1343 IssmDouble Element::GroundedArea(IssmDouble* mask){/*{{{*/ 1344 1345 /*Retrieve values of the mask defining the element: */ 1346 for(int i=0;i<this->GetNumberOfVertices();i++){ 1347 if(mask[this->vertices[i]->Sid()]<=0.){ 1348 return 0.; 1349 } 1350 } 1351 1352 /*Return: */ 1353 return this->GroundedArea(); 1354 } 1355 /*}}}*/ 1343 1356 bool Element::HasNodeOnBase(){/*{{{*/ 1344 1357 return (this->inputs->Max(MeshVertexonbaseEnum)>0.); … … 1347 1360 return (this->inputs->Max(MeshVertexonsurfaceEnum)>0.); 1348 1361 }/*}}}*/ 1362 IssmDouble Element::IceMass(void){/*{{{*/ 1363 1364 IssmDouble rho_ice; 1365 1366 if(!IsIceInElement())return 0.; //do not contribute to the volume of the ice! 1367 1368 /*recover ice density: */ 1369 rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum); 1370 1371 return rho_ice*this->IceVolume(); 1372 } 1373 /*}}}*/ 1374 IssmDouble Element::IceMass(IssmDouble* mask){/*{{{*/ 1375 1376 /*Retrieve values of the mask defining the element: */ 1377 for(int i=0;i<this->GetNumberOfVertices();i++){ 1378 if(mask[this->vertices[i]->Sid()]<=0.){ 1379 return 0.; 1380 } 1381 } 1382 1383 /*Return: */ 1384 return this->IceMass(); 1385 } 1386 /*}}}*/ 1387 IssmDouble Element::IceVolume(IssmDouble* mask){/*{{{*/ 1388 1389 /*Retrieve values of the mask defining the element: */ 1390 for(int i=0;i<this->GetNumberOfVertices();i++){ 1391 if(mask[this->vertices[i]->Sid()]<=0.){ 1392 return 0.; 1393 } 1394 } 1395 1396 /*Return: */ 1397 return this->IceVolume(); 1398 } 1399 /*}}}*/ 1400 IssmDouble Element::IceVolumeAboveFloatation(IssmDouble* mask){/*{{{*/ 1401 1402 /*Retrieve values of the mask defining the element: */ 1403 for(int i=0;i<this->GetNumberOfVertices();i++){ 1404 if(mask[this->vertices[i]->Sid()]<=0.){ 1405 return 0.; 1406 } 1407 } 1408 1409 /*Return: */ 1410 return this->IceVolumeAboveFloatation(); 1411 } 1412 /*}}}*/ 1349 1413 int Element::Id(){/*{{{*/ 1350 1414 … … 2952 3016 return this->matpar->TMeltingPoint(pressure); 2953 3017 }/*}}}*/ 3018 IssmDouble Element::TotalFloatingBmb(IssmDouble* mask){/*{{{*/ 3019 3020 /*Retrieve values of the mask defining the element: */ 3021 for(int i=0;i<this->GetNumberOfVertices();i++){ 3022 if(mask[this->vertices[i]->Sid()]<=0.){ 3023 return 0.; 3024 } 3025 } 3026 3027 /*Return: */ 3028 return this->TotalFloatingBmb(); 3029 } 3030 /*}}}*/ 3031 IssmDouble Element::TotalGroundedBmb(IssmDouble* mask){/*{{{*/ 3032 3033 /*Retrieve values of the mask defining the element: */ 3034 for(int i=0;i<this->GetNumberOfVertices();i++){ 3035 if(mask[this->vertices[i]->Sid()]<=0.){ 3036 return 0.; 3037 } 3038 } 3039 3040 /*Return: */ 3041 return this->TotalGroundedBmb(); 3042 } 3043 /*}}}*/ 3044 IssmDouble Element::TotalSmb(IssmDouble* mask){/*{{{*/ 3045 3046 /*Retrieve values of the mask defining the element: */ 3047 for(int i=0;i<this->GetNumberOfVertices();i++){ 3048 if(mask[this->vertices[i]->Sid()]<=0.){ 3049 return 0.; 3050 } 3051 } 3052 3053 /*Return: */ 3054 return this->TotalSmb(); 3055 } 3056 /*}}}*/ 2954 3057 void Element::TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int transformenum){/*{{{*/ 2955 3058 -
issm/trunk-jpl/src/c/classes/Elements/Element.h
r21721 r21808 109 109 IssmDouble GetZcoord(IssmDouble* xyz_list,Gauss* gauss); 110 110 void GradientIndexing(int* indexing,int control_index,bool onsid=false); 111 IssmDouble GroundedArea(IssmDouble* mask); 111 112 bool HasNodeOnBase(); 112 113 bool HasNodeOnSurface(); 114 IssmDouble IceMass(); 115 IssmDouble IceMass(IssmDouble* mask); 116 IssmDouble IceVolume(IssmDouble* mask); 117 IssmDouble IceVolumeAboveFloatation(IssmDouble* mask); 113 118 int Id(); 114 119 void InputChangeName(int enum_type,int enum_type_old); … … 150 155 void ThermalToEnthalpy(IssmDouble* penthalpy,IssmDouble temperature,IssmDouble waterfraction,IssmDouble pressure); 151 156 IssmDouble TMeltingPoint(IssmDouble pressure); 157 IssmDouble TotalFloatingBmb(IssmDouble* mask); 158 IssmDouble TotalGroundedBmb(IssmDouble* mask); 159 IssmDouble TotalSmb(IssmDouble* mask); 152 160 void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int cs_enum); 153 161 void TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int cs_enum); … … 212 220 virtual void GetVerticesCoordinatesTop(IssmDouble** xyz_list)=0; 213 221 virtual IssmDouble GroundedArea(void)=0; 214 virtual IssmDouble IceMass(void)=0;215 222 virtual IssmDouble IceVolume(void)=0; 216 223 virtual IssmDouble IceVolumeAboveFloatation(void)=0; -
issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
r21720 r21808 1223 1223 /*Clean up and return*/ 1224 1224 return phi*base_area; 1225 }1226 /*}}}*/1227 IssmDouble Penta::IceMass(void){/*{{{*/1228 1229 IssmDouble rho_ice;1230 1231 if(!IsIceInElement())return 0.; //do not contribute to the volume of the ice!1232 1233 /*recover ice density: */1234 rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);1235 1236 return rho_ice*this->IceVolume();1237 1225 } 1238 1226 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Penta.h
r21720 r21808 92 92 void GetVerticesCoordinatesTop(IssmDouble** pxyz_list); 93 93 IssmDouble GroundedArea(void); 94 IssmDouble IceMass(void);95 94 IssmDouble IceVolume(void); 96 95 IssmDouble IceVolumeAboveFloatation(void); -
issm/trunk-jpl/src/c/classes/Elements/Seg.h
r21714 r21808 79 79 void GetVerticesCoordinatesTop(IssmDouble** pxyz_list){_error_("not implemented yet");}; 80 80 IssmDouble GroundedArea(void){_error_("not implemented yet");}; 81 IssmDouble IceMass(void){_error_("not implemented yet");};82 81 IssmDouble IceVolume(void){_error_("not implemented yet");}; 83 82 IssmDouble IceVolumeAboveFloatation(void){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tetra.h
r21714 r21808 87 87 bool HasFaceOnBase(); 88 88 bool HasFaceOnSurface(); 89 IssmDouble IceMass(void){_error_("not implemented yet");};90 89 IssmDouble IceVolume(void){_error_("not implemented yet");}; 91 90 IssmDouble IceVolumeAboveFloatation(void){_error_("not implemented yet");}; -
issm/trunk-jpl/src/c/classes/Elements/Tria.cpp
r21626 r21808 1588 1588 return false; 1589 1589 } 1590 }1591 /*}}}*/1592 IssmDouble Tria::IceMass(void){/*{{{*/1593 1594 IssmDouble rho_ice;1595 1596 if(!IsIceInElement())return 0.; //do not contribute to the volume of the ice!1597 1598 /*recover ice density: */1599 rho_ice=matpar->GetMaterialParameter(MaterialsRhoIceEnum);1600 1601 return rho_ice*this->IceVolume();1602 1590 } 1603 1591 /*}}}*/ -
issm/trunk-jpl/src/c/classes/Elements/Tria.h
r21714 r21808 91 91 bool HasEdgeOnBase(); 92 92 bool HasEdgeOnSurface(); 93 IssmDouble IceMass(void);94 93 IssmDouble IceVolume(void); 95 94 IssmDouble IceVolumeAboveFloatation(void); -
issm/trunk-jpl/src/c/classes/Massfluxatgate.h
r20810 r21808 84 84 /*}}}*/ 85 85 ~Massfluxatgate(){/*{{{*/ 86 xDelete<doubletype>(this->x1); 87 xDelete<doubletype>(this->y1); 88 xDelete<doubletype>(this->x2); 89 xDelete<doubletype>(this->y2); 90 xDelete<int>(this->elements); 86 if(this->numsegments){ 87 xDelete<doubletype>(this->x1); 88 xDelete<doubletype>(this->y1); 89 xDelete<doubletype>(this->x2); 90 xDelete<doubletype>(this->y2); 91 xDelete<int>(this->elements); 92 } 91 93 xDelete<char>(this->name); 92 94 } -
issm/trunk-jpl/src/c/classes/classes.h
r21578 r21808 21 21 #include "./Masscon.h" 22 22 #include "./Massconaxpby.h" 23 #include "./Regionaloutput.h" 23 24 24 25 /*Constraints: */ -
issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
r21789 r21808 183 183 /*masscon variables: */ 184 184 int nummasscons; 185 char** masscon_name_s = NULL;186 int* masscon_definitionenum_s = NULL;185 char** masscon_name_s = NULL; 186 char** masscon_definitionstring_s = NULL; 187 187 IssmDouble** masscon_levelset_s = NULL; 188 int* masscon_levelset_M_s 189 int* masscon_levelset_N_s 188 int* masscon_levelset_M_s = NULL; 189 int* masscon_levelset_N_s = NULL; 190 190 191 191 /*Fetch name and levelset, etc ... (see src/m/classes/masscon.m): */ 192 192 iomodel->FetchMultipleData(&masscon_name_s,&nummasscons, "md.masscon.name"); 193 iomodel->FetchMultipleData(&masscon_definition enum_s,&nummasscons, "md.masscon.definitionenum");193 iomodel->FetchMultipleData(&masscon_definitionstring_s,&nummasscons, "md.masscon.definitionstring"); 194 194 iomodel->FetchMultipleData(&masscon_levelset_s,&masscon_levelset_M_s,&masscon_levelset_N_s,&nummasscons,"md.masscon.levelset"); 195 195 196 for(j=0;j<nummasscons;j++){ 196 197 197 198 /*Create a masscon object: */ 198 output_definitions->AddObject(new Masscon(masscon_name_s[j], masscon_definitionenum_s[j],masscon_levelset_s[j],masscon_levelset_M_s[j]));199 output_definitions->AddObject(new Masscon(masscon_name_s[j],StringToEnumx(masscon_definitionstring_s[j]),masscon_levelset_s[j],masscon_levelset_M_s[j])); 199 200 200 201 } … … 206 207 207 208 string = masscon_name_s[j]; xDelete<char>(string); 209 string = masscon_definitionstring_s[j]; xDelete<char>(string); 208 210 matrix = masscon_levelset_s[j]; xDelete<IssmDouble>(matrix); 209 211 } … … 212 214 xDelete<int>(masscon_levelset_M_s); 213 215 xDelete<int>(masscon_levelset_N_s); 214 xDelete<int>(masscon_definitionenum_s); 216 xDelete<char*>(masscon_definitionstring_s); 217 215 218 /*}}}*/ 216 219 } … … 257 260 /*}}}*/ 258 261 } 262 else if (output_definition_enums[i]==RegionaloutputEnum){ 263 /*Deal with regional output: {{{*/ 264 265 /*masscon variables: */ 266 int numout; 267 char** reg_name_s = NULL; 268 char** reg_definitionstring_s = NULL; 269 char** reg_outputnamestring_s = NULL; 270 IssmDouble** reg_mask_s = NULL; 271 int* reg_mask_M_s = NULL; 272 int* reg_mask_N_s = NULL; 273 274 /*Fetch name and mask, etc ... (see src/m/classes/regionaloutput.m): */ 275 iomodel->FetchMultipleData(®_name_s,&numout, "md.regionaloutput.name"); 276 iomodel->FetchMultipleData(®_definitionstring_s,&numout, "md.regionaloutput.definitionstring"); 277 iomodel->FetchMultipleData(®_outputnamestring_s,&numout, "md.regionaloutput.outputnamestring"); 278 iomodel->FetchMultipleData(®_mask_s,®_mask_M_s,®_mask_N_s,&numout, "md.regionaloutput.mask"); 279 for(j=0;j<numout;j++){ 280 281 /*Create a masscon object: */ 282 output_definitions->AddObject(new Regionaloutput(reg_name_s[j],StringToEnumx(reg_definitionstring_s[j]),reg_outputnamestring_s[j],reg_mask_s[j],reg_mask_M_s[j])); 283 284 } 285 286 /*Free ressources:*/ 287 for(j=0;j<numout;j++){ 288 char* string=NULL; 289 IssmDouble* matrix = NULL; 290 291 string = reg_name_s[j]; xDelete<char>(string); 292 string = reg_definitionstring_s[j]; xDelete<char>(string); 293 string = reg_outputnamestring_s[j]; xDelete<char>(string); 294 matrix = reg_mask_s[j]; xDelete<IssmDouble>(matrix); 295 } 296 xDelete<char*>(reg_name_s); 297 xDelete<IssmDouble*>(reg_mask_s); 298 xDelete<int>(reg_mask_M_s); 299 xDelete<int>(reg_mask_N_s); 300 xDelete<char*>(reg_outputnamestring_s); 301 xDelete<char*>(reg_definitionstring_s); 302 } 303 /*}}}*/ 259 304 else _error_("output definition enum " << output_definition_enums[i] << " not supported yet!"); 260 305 } -
issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
r21806 r21808 703 703 MassfluxatgateEnum, 704 704 NodalvalueEnum, 705 RegionaloutputEnum, 705 706 VxObsEnum, 706 707 VyObsEnum, -
issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
r21806 r21808 697 697 case MassfluxatgateEnum : return "Massfluxatgate"; 698 698 case NodalvalueEnum : return "Nodalvalue"; 699 case RegionaloutputEnum : return "Regionaloutput"; 699 700 case VxObsEnum : return "VxObs"; 700 701 case VyObsEnum : return "VyObs"; -
issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
r21806 r21808 712 712 else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum; 713 713 else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum; 714 else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum; 714 715 else if (strcmp(name,"VxObs")==0) return VxObsEnum; 715 716 else if (strcmp(name,"VyObs")==0) return VyObsEnum; -
issm/trunk-jpl/src/m/classes/masscon.m
r21049 r21808 3 3 % Usage: 4 4 % masscon=masscon(); 5 % masscon=masscon('name','MassCon58', ... %name of a North-East Greenland JPL MassCon5 % masscon=masscon('name','MassCon58','definitionstring','Outputdefinition1',... %name of a North-East Greenland JPL MassCon 6 6 % 'levelset',level); 7 7 % 8 8 % where level is a levelset vectorial field. 9 9 % 10 % See also: MISFIT 10 % See also: MISFIT, MASSCONAXPBY, REGIONALOUTPUT 11 11 12 12 classdef masscon … … 14 14 %masscon 15 15 name = ''; 16 definitionstring 16 definitionstring = ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-10]' 17 17 levelset = NaN; %levelset vectorial field which identifies the boundaries of the masscon 18 18 end 19 19 20 20 methods 21 function self = extrude(self,md) % {{{ 22 if ~isnan(self.levelset) 23 self.levelset=project3d(md,'vector',self.levelset,'type','node'); 24 end 25 end % }}} 21 26 function self = masscon(varargin) % {{{ 22 27 if nargin==0, … … 40 45 error('masscon error message: ''name'' field should be a string!'); 41 46 end 42 47 43 48 OutputdefinitionStringArray={}; 44 49 for i=1:100 … … 46 51 end 47 52 48 md = checkfield(md,'fieldname','self.definitionstring','field',self.definitionstring,'values', 'Outputdefinition');53 md = checkfield(md,'fieldname','self.definitionstring','field',self.definitionstring,'values',OutputdefinitionStringArray); 49 54 md = checkfield(md,'fieldname','self.levelset','field',self.levelset,'timeseries',1,'NaN',1,'Inf',1); 50 55 51 56 end % }}} 52 57 function md = disp(self) % {{{ 53 54 disp(sprintf(' M isfit:\n'));58 59 disp(sprintf(' Masscon:\n')); 55 60 56 61 fielddisplay(self,'name','identifier for this masscon response'); … … 61 66 function md = marshall(self,prefix,md,fid) % {{{ 62 67 63 WriteData(fid,prefix,'object',self,'fieldname','name','format','String');64 WriteData(fid,prefix,'object',self,'fieldname','definitionstring','format','String');65 WriteData(fid,prefix,'object',self,'fieldname','levelset','format','DoubleMat','mattype',1);68 WriteData(fid,prefix,'data',self.name,'name','md.masscon.name','format','String'); 69 WriteData(fid,prefix,'data',self.definitionstring,'name','md.masscon.definitionstring','format','String'); 70 WriteData(fid,prefix,'data',self.levelset,'name','md.masscon.levelset','format','DoubleMat','mattype',1); 66 71 67 72 end % }}} -
issm/trunk-jpl/src/m/classes/massconaxpby.m
r21745 r21808 3 3 % Usage: 4 4 % massconaxpby=massconaxpby(); 5 % massconaxpby=massconaxpby('name','MassCon58+35','namex','MassCon58','alpha',.5,'namey','MassCon35','beta',.5 );5 % massconaxpby=massconaxpby('name','MassCon58+35','namex','MassCon58','alpha',.5,'namey','MassCon35','beta',.5,'definitionstring','Outputdefinition1'); 6 6 % 7 7 % where name is the name of the massconaxpby object, namex is the name of the first masscon, namey the name of the second masscon and alpha,beta the … … 9 9 % of two masscons. 10 10 % 11 % See also: MASSCON 11 % See also: MASSCON, REGIONALOUTPUT 12 12 13 13 classdef massconaxpby 14 14 properties (SetAccess=public) 15 15 %masscon axpby 16 name = '';16 name = ''; 17 17 definitionstring = ''; %String that identifies this output definition uniquely, from 'Outputdefinition[1-10]' 18 18 namex = ''; 19 19 namey = ''; 20 20 alpha = NaN; 21 beta = NaN;21 beta = NaN; 22 22 end 23 23 24 24 methods 25 function self = extrude(self,md) % {{{ 26 end % }}} 25 27 function self = massconaxpby(varargin) % {{{ 26 28 if nargin==0, … … 65 67 function md = disp(self) % {{{ 66 68 67 disp(sprintf(' M isfit:\n'));69 disp(sprintf(' Massconaxpby:\n')); 68 70 69 71 fielddisplay(self,'name','name'); … … 77 79 function md = marshall(self,prefix,md,fid) % {{{ 78 80 79 WriteData(fid,prefix,'data',self.name,'name','md.massconaxpby.name','format','String'); 80 WriteData(fid,prefix,'data',self.definitionstring,'name','md.massconaxpby.definitionstring','format','String'); 81 WriteData(fid,prefix,'data',self.namex,'name','md.massconaxpby.namex','format','String'); 82 WriteData(fid,prefix,'data',self.namey,'name','md.massconaxpby.namey','format','String'); 83 WriteData(fid,prefix,'data',self.alpha,'name','md.massconaxpby.alpha','format','Double'); 84 WriteData(fid,prefix,'data',self.beta,'name','md.massconaxpby.beta','format','Double'); 81 WriteData(fid,prefix,'data',self.name,'name','md.massconaxpby.name','format','String'); 82 WriteData(fid,prefix,'data',self.definitionstring,'name','md.massconaxpby.definitionstring','format','String'); 83 WriteData(fid,prefix,'data',self.namex,'name','md.massconaxpby.namex','format','String'); 84 WriteData(fid,prefix,'data',self.namey,'name','md.massconaxpby.namey','format','String'); 85 WriteData(fid,prefix,'data',self.alpha,'name','md.massconaxpby.alpha','format','Double'); 86 WriteData(fid,prefix,'data',self.beta,'name','md.massconaxpby.beta','format','Double'); 87 85 88 end % }}} 86 89 end -
issm/trunk-jpl/src/m/classes/massfluxatgate.m
r21049 r21808 16 16 end 17 17 methods 18 function self = extrude(self,md) % {{{ 19 end % }}} 18 20 function self = massfluxatgate(varargin) % {{{ 19 21 if nargin==0, … … 56 58 fielddisplay(self,'name','identifier for this massfluxatgate response'); 57 59 fielddisplay(self,'profilename','name of file (shapefile or argus file) defining a profile (or gate)'); 58 fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from ''Outputdefinition[1-10 ]''');60 fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from ''Outputdefinition[1-100]'''); 59 61 60 62 end % }}} -
issm/trunk-jpl/src/m/classes/massfluxatgate.py
r21049 r21808 35 35 string=" Massfluxatgate:" 36 36 string="%s\n%s"%(string,fielddisplay(self,'name','identifier for this massfluxatgate response')) 37 string="%s\n%s"%(string,fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from Outputdefinition[1-10 ]'))37 string="%s\n%s"%(string,fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from Outputdefinition[1-100]')) 38 38 string="%s\n%s"%(string,fielddisplay(self,'profilename','name of file (shapefile or argus file) defining a profile (or gate)')) 39 39 return string 40 40 #}}} 41 def extrude(self,md): # {{{ 42 return self 43 #}}} 41 44 def setdefaultparameters(self): # {{{ 42 45 return self … … 49 52 if not isinstance(self.profilename, basestring): 50 53 raise RuntimeError("massfluxatgate error message: 'profilename' field should be a string!") 51 52 md = checkfield(md,'field',self.definitionstring,'values',['Outputdefinition1','Outputdefinition2','Outputdefinition3','Outputdefinition4','Outputdefinition5','Outputdefinition6','Outputdefinition7','Outputdefinition8','Outputdefinition9','Outputdefinition10']) 54 55 OutputdefinitionStringArray=[] 56 for i in range(1,100): 57 x='Outputdefinition'+str(i) 58 OutputdefinitionStringArray.append(x) 59 60 md = checkfield(md,'field',self.definitionstring,'values',OutputdefinitionStringArray) 53 61 54 62 #check the profilename points to a file!: -
issm/trunk-jpl/src/m/classes/model.m
r21702 r21808 260 260 if(md.hydrology.isefficientlayer==1) 261 261 md.hydrology.spcepl_head=project2d(md,md.hydrology.spcepl_head,1); 262 263 262 end 263 end 264 264 265 265 %materials … … 308 308 if ~isnan(md.mask.ice_levelset), 309 309 md.mask.ice_levelset=project2d(md,md.mask.ice_levelset,1); 310 end 311 312 %outputdefinitions 313 for i=1:length(md.outputdefinition.definitions) 314 if isobject(md.outputdefinition.definitions{i}) 315 %get subfields 316 solutionsubfields=fields(md.outputdefinition.definitions{i}); 317 for j=1:length(solutionsubfields), 318 field=md.outputdefinition.definitions{i}.(solutionsubfields{j}); 319 if length(field)==md.mesh.numberofvertices | length(field)==md.mesh.numberofelements, 320 md.outputdefinition.definitions{i}.(solutionsubfields{j})=project2d(md,md.outputdefinition.definitions{i}.(solutionsubfields{j}),1); 321 end 322 end 323 end 310 324 end 311 325 … … 607 621 end 608 622 623 %OutputDefinitions fields 624 for i=1:length(md1.outputdefinition.definitions), 625 if isobject(md1.outputdefinition.definitions{i}) 626 %get subfields 627 solutionsubfields=fields(md1.outputdefinition.definitions{i}); 628 for j=1:length(solutionsubfields), 629 field=md1.outputdefinition.definitions{i}.(solutionsubfields{j}); 630 if length(field)==numberofvertices1, 631 md2.outputdefinition.definitions{i}.(solutionsubfields{j})=field(pos_node); 632 elseif length(field)==numberofelements1, 633 md2.outputdefinition.definitions{i}.(solutionsubfields{j})=field(pos_elem); 634 end 635 end 636 end 637 end 638 609 639 %Keep track of pos_node and pos_elem 610 640 md2.mesh.extractedvertices=pos_node; … … 793 823 md.qmu=extrude(md.qmu,md); 794 824 md.basalforcings=extrude(md.basalforcings,md); 825 md.outputdefinition=extrude(md.outputdefinition,md); 795 826 796 827 %increase connectivity if less than 25: -
issm/trunk-jpl/src/m/classes/model.py
r21787 r21808 467 467 setattr(fieldr,solutionsubfield,subfield) 468 468 469 #OutputDefinitions fields 470 if md1.outputdefinition.definitions: 471 for solutionfield,field in md1.outputdefinition.__dict__.iteritems(): 472 if isinstance(field,list): 473 #get each definition 474 for i,fieldi in enumerate(field): 475 if fieldi: 476 fieldr=getattr(md2.outputdefinition,solutionfield)[i] 477 #get subfields 478 for solutionsubfield,subfield in fieldi.__dict__.iteritems(): 479 if np.size(subfield)==numberofvertices1: 480 setattr(fieldr,solutionsubfield,subfield[pos_node]) 481 elif np.size(subfield)==numberofelements1: 482 setattr(fieldr,solutionsubfield,subfield[pos_elem]) 483 else: 484 setattr(fieldr,solutionsubfield,subfield) 485 469 486 #Keep track of pos_node and pos_elem 470 487 md2.mesh.extractedvertices=pos_node+1 … … 649 666 md.qmu.extrude(md) 650 667 md.basalforcings.extrude(md) 668 md.outputdefinition.extrude(md) 651 669 652 670 #increase connectivity if less than 25: … … 714 732 715 733 716 717 718 719 720 721 722 723 734 # Hydrologydc variables 735 if hasattr(md.hydrology,'hydrologydc'): 736 md.hydrology.spcsediment_head=project2d(md,md.hydrology.spcsediment_head,1) 737 md.hydrology.mask_eplactive_node=project2d(md,md.hydrology.mask_eplactive_node,1) 738 md.hydrology.sediment_transmitivity=project2d(md,md.hydrology.sediment_transmitivity,1) 739 md.hydrology.basal_moulin_input=project2d(md,md.hydrology.basal_moulin_input,1) 740 if md.hydrology.isefficientlayer == 1: 741 md.hydrology.spcepl_head=project2d(md,md.hydrology.spcepl_head,1) 724 742 725 743 #boundary conditions … … 761 779 md.mask.groundedice_levelset=project2d(md,md.mask.groundedice_levelset,1) 762 780 md.mask.ice_levelset=project2d(md,md.mask.ice_levelset,1) 781 782 #OutputDefinitions 783 if md.outputdefinition.definitions: 784 for solutionfield,field in md.outputdefinition.__dict__.iteritems(): 785 if isinstance(field,list): 786 #get each definition 787 for i,fieldi in enumerate(field): 788 if fieldi: 789 fieldr=getattr(md.outputdefinition,solutionfield)[i] 790 #get subfields 791 for solutionsubfield,subfield in fieldi.__dict__.iteritems(): 792 if np.size(subfield)==md.mesh.numberofvertices: 793 setattr(fieldr,solutionsubfield,project2d(md,subfield,1)) 794 elif np.size(subfield)==md.mesh.numberofelements: 795 setattr(fieldr,solutionsubfield,project2d(md,subfield,1)) 796 else: 797 setattr(fieldr,solutionsubfield,subfield) 763 798 764 799 #Initialize with the 2d mesh -
issm/trunk-jpl/src/m/classes/outputdefinition.m
r21065 r21808 9 9 end 10 10 methods 11 function self = extrude(self,md) % {{{ 12 for i=1:length(self.definitions) 13 self.definitions{i}=extrude(self.definitions{i},md); 14 end 15 end % }}} 11 16 function self = outputdefinition(varargin) % {{{ 12 17 switch nargin -
issm/trunk-jpl/src/m/classes/outputdefinition.py
r21303 r21808 22 22 return string 23 23 #}}} 24 def extrude(self,md): # {{{ 25 for definition in self.definitions: 26 definition.extrude(md); 27 28 return self 29 #}}} 24 30 def setdefaultparameters(self): # {{{ 25 31 return self
Note:
See TracChangeset
for help on using the changeset viewer.