Changeset 21808


Ignore:
Timestamp:
07/18/17 16:01:19 (8 years ago)
Author:
schlegel
Message:

Add capability for regional output definitions

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  
    13411341}
    13421342/*}}}*/
     1343IssmDouble 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/*}}}*/
    13431356bool       Element::HasNodeOnBase(){/*{{{*/
    13441357        return (this->inputs->Max(MeshVertexonbaseEnum)>0.);
     
    13471360        return (this->inputs->Max(MeshVertexonsurfaceEnum)>0.);
    13481361}/*}}}*/
     1362IssmDouble 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/*}}}*/
     1374IssmDouble 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/*}}}*/
     1387IssmDouble 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/*}}}*/
     1400IssmDouble 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/*}}}*/
    13491413int        Element::Id(){/*{{{*/
    13501414
     
    29523016        return this->matpar->TMeltingPoint(pressure);
    29533017}/*}}}*/
     3018IssmDouble 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/*}}}*/
     3031IssmDouble 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/*}}}*/
     3044IssmDouble 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/*}}}*/
    29543057void       Element::TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int transformenum){/*{{{*/
    29553058
  • issm/trunk-jpl/src/c/classes/Elements/Element.h

    r21721 r21808  
    109109                IssmDouble         GetZcoord(IssmDouble* xyz_list,Gauss* gauss);
    110110                void               GradientIndexing(int* indexing,int control_index,bool onsid=false);
     111                IssmDouble         GroundedArea(IssmDouble* mask);
    111112                bool               HasNodeOnBase();
    112113                bool               HasNodeOnSurface();
     114                IssmDouble         IceMass();
     115                IssmDouble         IceMass(IssmDouble* mask);
     116                IssmDouble         IceVolume(IssmDouble* mask);
     117                IssmDouble         IceVolumeAboveFloatation(IssmDouble* mask);
    113118                int                Id();
    114119                void               InputChangeName(int enum_type,int enum_type_old);
     
    150155                void               ThermalToEnthalpy(IssmDouble* penthalpy,IssmDouble temperature,IssmDouble waterfraction,IssmDouble pressure);
    151156                IssmDouble         TMeltingPoint(IssmDouble pressure);
     157                IssmDouble         TotalFloatingBmb(IssmDouble* mask);
     158                IssmDouble         TotalGroundedBmb(IssmDouble* mask);
     159                IssmDouble         TotalSmb(IssmDouble* mask);
    152160                void               TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,int cs_enum);
    153161                void               TransformInvStiffnessMatrixCoord(ElementMatrix* Ke,Node** nodes,int numnodes,int cs_enum);
     
    212220                virtual void       GetVerticesCoordinatesTop(IssmDouble** xyz_list)=0;
    213221                virtual IssmDouble GroundedArea(void)=0;
    214                 virtual IssmDouble IceMass(void)=0;
    215222                virtual IssmDouble IceVolume(void)=0;
    216223                virtual IssmDouble IceVolumeAboveFloatation(void)=0;
  • issm/trunk-jpl/src/c/classes/Elements/Penta.cpp

    r21720 r21808  
    12231223        /*Clean up and return*/
    12241224        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();
    12371225}
    12381226/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Penta.h

    r21720 r21808  
    9292                void           GetVerticesCoordinatesTop(IssmDouble** pxyz_list);
    9393                IssmDouble     GroundedArea(void);
    94                 IssmDouble     IceMass(void);
    9594                IssmDouble     IceVolume(void);
    9695                IssmDouble     IceVolumeAboveFloatation(void);
  • issm/trunk-jpl/src/c/classes/Elements/Seg.h

    r21714 r21808  
    7979                void        GetVerticesCoordinatesTop(IssmDouble** pxyz_list){_error_("not implemented yet");};
    8080                IssmDouble  GroundedArea(void){_error_("not implemented yet");};
    81                 IssmDouble  IceMass(void){_error_("not implemented yet");};
    8281                IssmDouble  IceVolume(void){_error_("not implemented yet");};
    8382                IssmDouble  IceVolumeAboveFloatation(void){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tetra.h

    r21714 r21808  
    8787                bool        HasFaceOnBase();
    8888                bool        HasFaceOnSurface();
    89                 IssmDouble  IceMass(void){_error_("not implemented yet");};
    9089                IssmDouble  IceVolume(void){_error_("not implemented yet");};
    9190                IssmDouble  IceVolumeAboveFloatation(void){_error_("not implemented yet");};
  • issm/trunk-jpl/src/c/classes/Elements/Tria.cpp

    r21626 r21808  
    15881588                return false;
    15891589        }
    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();
    16021590}
    16031591/*}}}*/
  • issm/trunk-jpl/src/c/classes/Elements/Tria.h

    r21714 r21808  
    9191                bool        HasEdgeOnBase();
    9292                bool        HasEdgeOnSurface();
    93                 IssmDouble  IceMass(void);
    9493                IssmDouble  IceVolume(void);
    9594                IssmDouble  IceVolumeAboveFloatation(void);
  • issm/trunk-jpl/src/c/classes/Massfluxatgate.h

    r20810 r21808  
    8484                /*}}}*/
    8585                ~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                        }
    9193                        xDelete<char>(this->name);
    9294                }
  • issm/trunk-jpl/src/c/classes/classes.h

    r21578 r21808  
    2121#include "./Masscon.h"
    2222#include "./Massconaxpby.h"
     23#include "./Regionaloutput.h"
    2324
    2425/*Constraints: */
  • issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp

    r21789 r21808  
    183183                                /*masscon variables: */
    184184                                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;
    187187                                IssmDouble** masscon_levelset_s           = NULL;
    188                                 int*         masscon_levelset_M_s                       = NULL;
    189                                 int*         masscon_levelset_N_s                       = NULL;
     188                                int*         masscon_levelset_M_s         = NULL;
     189                                int*         masscon_levelset_N_s         = NULL;
    190190
    191191                                /*Fetch name and levelset, etc ... (see src/m/classes/masscon.m): */
    192192                                iomodel->FetchMultipleData(&masscon_name_s,&nummasscons,                                                "md.masscon.name");
    193                                 iomodel->FetchMultipleData(&masscon_definitionenum_s,&nummasscons,                                      "md.masscon.definitionenum");
     193                                iomodel->FetchMultipleData(&masscon_definitionstring_s,&nummasscons,                                    "md.masscon.definitionstring");
    194194                                iomodel->FetchMultipleData(&masscon_levelset_s,&masscon_levelset_M_s,&masscon_levelset_N_s,&nummasscons,"md.masscon.levelset");
     195
    195196                                for(j=0;j<nummasscons;j++){
    196197
    197198                                        /*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]));
    199200
    200201                                }
     
    206207
    207208                                        string = masscon_name_s[j];    xDelete<char>(string);
     209                                        string = masscon_definitionstring_s[j];    xDelete<char>(string);
    208210                                        matrix = masscon_levelset_s[j]; xDelete<IssmDouble>(matrix);
    209211                                }
     
    212214                                xDelete<int>(masscon_levelset_M_s);
    213215                                xDelete<int>(masscon_levelset_N_s);
    214                                 xDelete<int>(masscon_definitionenum_s);
     216                                xDelete<char*>(masscon_definitionstring_s);
     217
    215218                                /*}}}*/
    216219                        }
     
    257260                                /*}}}*/
    258261                        }
     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(&reg_name_s,&numout,                                                "md.regionaloutput.name");
     276                                iomodel->FetchMultipleData(&reg_definitionstring_s,&numout,                                    "md.regionaloutput.definitionstring");
     277                                iomodel->FetchMultipleData(&reg_outputnamestring_s,&numout,                                    "md.regionaloutput.outputnamestring");
     278                                iomodel->FetchMultipleData(&reg_mask_s,&reg_mask_M_s,&reg_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                        /*}}}*/
    259304                        else _error_("output definition enum " << output_definition_enums[i] << " not supported yet!");
    260305                }
  • issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h

    r21806 r21808  
    703703        MassfluxatgateEnum,
    704704        NodalvalueEnum,
     705        RegionaloutputEnum,
    705706        VxObsEnum,
    706707        VyObsEnum,
  • issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp

    r21806 r21808  
    697697                case MassfluxatgateEnum : return "Massfluxatgate";
    698698                case NodalvalueEnum : return "Nodalvalue";
     699                case RegionaloutputEnum : return "Regionaloutput";
    699700                case VxObsEnum : return "VxObs";
    700701                case VyObsEnum : return "VyObs";
  • issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp

    r21806 r21808  
    712712              else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
    713713              else if (strcmp(name,"Nodalvalue")==0) return NodalvalueEnum;
     714              else if (strcmp(name,"Regionaloutput")==0) return RegionaloutputEnum;
    714715              else if (strcmp(name,"VxObs")==0) return VxObsEnum;
    715716              else if (strcmp(name,"VyObs")==0) return VyObsEnum;
  • issm/trunk-jpl/src/m/classes/masscon.m

    r21049 r21808  
    33%   Usage:
    44%      masscon=masscon();
    5 %      masscon=masscon('name','MassCon58',... %name of a North-East Greenland JPL MassCon
     5%      masscon=masscon('name','MassCon58','definitionstring','Outputdefinition1',... %name of a North-East Greenland JPL MassCon
    66%                    'levelset',level);
    77%
    88%   where level is a levelset vectorial field.
    99%
    10 %   See also: MISFIT
     10%   See also: MISFIT, MASSCONAXPBY, REGIONALOUTPUT
    1111
    1212classdef masscon
     
    1414                %masscon
    1515                name              = '';
    16                 definitionstring   = ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-10]'
     16                definitionstring  = ''; %string that identifies this output definition uniquely, from 'Outputdefinition[1-10]'
    1717                levelset          = NaN; %levelset vectorial field which identifies the boundaries of the masscon
    1818        end
    1919       
    2020        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 % }}}
    2126                function self = masscon(varargin) % {{{
    2227                        if nargin==0,
     
    4045                                error('masscon error message: ''name'' field should be a string!');
    4146                        end
    42                        
     47
    4348                        OutputdefinitionStringArray={};
    4449                        for i=1:100
     
    4651                        end
    4752
    48                         md = checkfield(md,'fieldname','self.definitionstring','field',self.definitionstring,'values','Outputdefinition');
     53                        md = checkfield(md,'fieldname','self.definitionstring','field',self.definitionstring,'values',OutputdefinitionStringArray);
    4954                        md = checkfield(md,'fieldname','self.levelset','field',self.levelset,'timeseries',1,'NaN',1,'Inf',1);
    5055
    5156                end % }}}
    5257                function md = disp(self) % {{{
    53                
    54                         disp(sprintf('   Misfit:\n'));
     58
     59                        disp(sprintf('   Masscon:\n'));
    5560
    5661                        fielddisplay(self,'name','identifier for this masscon response');
     
    6166                function md = marshall(self,prefix,md,fid) % {{{
    6267
    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);
    6671
    6772                end % }}}
  • issm/trunk-jpl/src/m/classes/massconaxpby.m

    r21745 r21808  
    33%   Usage:
    44%      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');
    66%
    77%   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
     
    99%         of two masscons.
    1010%
    11 %   See also: MASSCON
     11%   See also: MASSCON, REGIONALOUTPUT
    1212
    1313classdef massconaxpby
    1414        properties (SetAccess=public)
    1515                %masscon axpby
    16                 name              = '';
     16                name               = '';
    1717                definitionstring   = ''; %String that identifies this output definition uniquely, from 'Outputdefinition[1-10]'
    1818                namex              = '';
    1919                namey              = '';
    2020                alpha              = NaN;
    21                 beta              = NaN;
     21                beta               = NaN;
    2222        end
    2323       
    2424        methods
     25                function self = extrude(self,md) % {{{
     26                end % }}}
    2527                function self = massconaxpby(varargin) % {{{
    2628                        if nargin==0,
     
    6567                function md = disp(self) % {{{
    6668               
    67                         disp(sprintf('   Misfit:\n'));
     69                        disp(sprintf('   Massconaxpby:\n'));
    6870
    6971                        fielddisplay(self,'name','name');
     
    7779                function md = marshall(self,prefix,md,fid) % {{{
    7880
    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
    8588                end % }}}
    8689        end
  • issm/trunk-jpl/src/m/classes/massfluxatgate.m

    r21049 r21808  
    1616        end
    1717        methods
     18                function self = extrude(self,md) % {{{
     19                end % }}}
    1820                function self = massfluxatgate(varargin) % {{{
    1921                        if nargin==0,
     
    5658                        fielddisplay(self,'name','identifier for this massfluxatgate response');
    5759                        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]''');
    5961                       
    6062                end % }}}
  • issm/trunk-jpl/src/m/classes/massfluxatgate.py

    r21049 r21808  
    3535                string="   Massfluxatgate:"
    3636                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]'))
    3838                string="%s\n%s"%(string,fielddisplay(self,'profilename','name of file (shapefile or argus file) defining a profile (or gate)'))
    3939                return string
    4040                #}}}
     41        def extrude(self,md): # {{{
     42                return self
     43           #}}}
    4144        def setdefaultparameters(self): # {{{
    4245                return self
     
    4952                if  not isinstance(self.profilename, basestring):
    5053                        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)
    5361               
    5462                #check the profilename points to a file!:
  • issm/trunk-jpl/src/m/classes/model.m

    r21702 r21808  
    260260                                if(md.hydrology.isefficientlayer==1)
    261261                                        md.hydrology.spcepl_head=project2d(md,md.hydrology.spcepl_head,1);
    262                     end
    263             end
     262                                end
     263                        end
    264264                       
    265265                        %materials
     
    308308                        if ~isnan(md.mask.ice_levelset),
    309309                                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
    310324                        end
    311325
     
    607621                        end
    608622
     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
    609639                        %Keep track of pos_node and pos_elem
    610640                        md2.mesh.extractedvertices=pos_node;
     
    793823                        md.qmu=extrude(md.qmu,md);
    794824                        md.basalforcings=extrude(md.basalforcings,md);
     825                        md.outputdefinition=extrude(md.outputdefinition,md);
    795826
    796827                        %increase connectivity if less than 25:
  • issm/trunk-jpl/src/m/classes/model.py

    r21787 r21808  
    467467                                                                setattr(fieldr,solutionsubfield,subfield)
    468468
     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
    469486                #Keep track of pos_node and pos_elem
    470487                md2.mesh.extractedvertices=pos_node+1
     
    649666                md.qmu.extrude(md)
    650667                md.basalforcings.extrude(md)
     668                md.outputdefinition.extrude(md)
    651669
    652670                #increase connectivity if less than 25:
     
    714732
    715733
    716                 # Hydrologydc variables
    717                 if hasattr(md.hydrology,'hydrologydc'):
    718                     md.hydrology.spcsediment_head=project2d(md,md.hydrology.spcsediment_head,1)
    719                     md.hydrology.mask_eplactive_node=project2d(md,md.hydrology.mask_eplactive_node,1)
    720                     md.hydrology.sediment_transmitivity=project2d(md,md.hydrology.sediment_transmitivity,1)
    721                     md.hydrology.basal_moulin_input=project2d(md,md.hydrology.basal_moulin_input,1)
    722                     if md.hydrology.isefficientlayer == 1:
    723                         md.hydrology.spcepl_head=project2d(md,md.hydrology.spcepl_head,1)
     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)
    724742
    725743                #boundary conditions
     
    761779                md.mask.groundedice_levelset=project2d(md,md.mask.groundedice_levelset,1)
    762780                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)
    763798
    764799                #Initialize with the 2d mesh
  • issm/trunk-jpl/src/m/classes/outputdefinition.m

    r21065 r21808  
    99        end
    1010        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 % }}}
    1116                function self = outputdefinition(varargin) % {{{
    1217                        switch nargin
  • issm/trunk-jpl/src/m/classes/outputdefinition.py

    r21303 r21808  
    2222                return string
    2323                #}}}
     24        def extrude(self,md): # {{{
     25                for definition in self.definitions:
     26                        definition.extrude(md);
     27
     28                return self
     29         #}}}
    2430        def setdefaultparameters(self): # {{{
    2531                return self
Note: See TracChangeset for help on using the changeset viewer.