source: issm/oecreview/Archive/21337-21723/ISSM-21541-21542.diff@ 21726

Last change on this file since 21726 was 21726, checked in by Mathieu Morlighem, 8 years ago

CHG added Archive/21337-21723

File size: 7.4 KB
  • ../trunk-jpl/src/m/classes/thermal.py

     
    2222                self.penalty_factor    = 0
    2323                self.isenthalpy        = 0
    2424                self.isdynamicbasalspc = 0;
     25                self.fe                = 'P1';
    2526                self.requested_outputs = []
    2627
    2728                #set defaults
     
    7879                self.isenthalpy=0
    7980
    8081                #will basal boundary conditions be set dynamically
    81                 self.isdynamicbasalspc=0;
     82                self.isdynamicbasalspc=0
    8283
     84                #Finite element interpolation
     85                self.fe='P1'
     86
    8387                #default output
    8488                self.requested_outputs=['default']
    8589                return self
     
    123127                WriteData(fid,prefix,'object',self,'fieldname','penalty_lock','format','Integer')
    124128                WriteData(fid,prefix,'object',self,'fieldname','penalty_factor','format','Double')
    125129                WriteData(fid,prefix,'object',self,'fieldname','isenthalpy','format','Boolean')
     130                WriteData(fid,prefix,'object',self,'fieldname','fe','format','String');
    126131                WriteData(fid,prefix,'object',self,'fieldname','isdynamicbasalspc','format','Boolean');
    127132
    128133                #process requested outputs
  • ../trunk-jpl/src/m/classes/thermal.m

     
    1414                penalty_factor    = 0;
    1515                isenthalpy        = 0;
    1616                isdynamicbasalspc = 0;
     17                fe                = 'P1';
    1718                requested_outputs = {};
    1819        end
    1920        methods
     
    6566                        %will basal boundary conditions be set dynamically
    6667                        self.isdynamicbasalspc=0;
    6768
     69                        %Linear elements by default
     70                        self.fe='P1';
     71
    6872                        %default output
    6973                        self.requested_outputs={'default'};
    7074                end % }}}
     
    7579
    7680                        md = checkfield(md,'fieldname','thermal.stabilization','numel',[1],'values',[0 1 2]);
    7781                        md = checkfield(md,'fieldname','thermal.spctemperature','Inf',1,'timeseries',1,'>=',0);
     82                        md = checkfield(md,'fieldname','thermal.fe','values',{'P1','P1xP2'});
    7883                        if (ismember('EnthalpyAnalysis',analyses) & md.thermal.isenthalpy & dimension(md.mesh)==3),
    7984
    8085                                %Make sure the spc are less than melting point
     
    109114                        fielddisplay(self,'penalty_factor','scaling exponent (default is 3)');
    110115                        fielddisplay(self,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)');
    111116                        fielddisplay(self,'isdynamicbasalspc',['enable dynamic setting of basal forcing. required for enthalpy formulation (default is 0)']);
     117                        fielddisplay(self,'fe','Finite Element type: ''P1'' (default), ''P1xP2''');
    112118                        fielddisplay(self,'requested_outputs','additional outputs requested');
    113119
    114120                end % }}}
     
    121127                        WriteData(fid,prefix,'object',self,'fieldname','penalty_lock','format','Integer');
    122128                        WriteData(fid,prefix,'object',self,'fieldname','penalty_factor','format','Double');
    123129                        WriteData(fid,prefix,'object',self,'fieldname','isenthalpy','format','Boolean');
     130                        WriteData(fid,prefix,'object',self,'fieldname','fe','format','String');
    124131                        WriteData(fid,prefix,'object',self,'fieldname','isdynamicbasalspc','format','Boolean');
    125132
    126133                        %process requested outputs
  • ../trunk-jpl/src/c/classes/IoModel.cpp

     
    656656                                                this->AddConstant(new IoConstant(StringToEnumx(string),record_name));
    657657                                        } else if(strcmp(record_name,"md.flowequation.fe_FS")==0){
    658658                                                this->AddConstant(new IoConstant(StringToEnumx(string),record_name));
     659                                        } else if(strcmp(record_name,"md.thermal.fe")==0){
     660                                                this->AddConstant(new IoConstant(StringToEnumx(string),record_name));
    659661                                        } else if(strcmp(record_name,"md.groundingline.migration")==0){
    660662                                                this->AddConstant(new IoConstant(StringToEnumx(string),record_name));
    661663                                        } else if(strcmp(record_name,"md.masstransport.hydrostatic_adjustment")==0){
     
    796798                                                        this->AddConstant(new IoConstant(StringToEnumx(string),record_name));
    797799                                                } else if(strcmp(record_name,"md.flowequation.fe_FS")==0){
    798800                                                        this->AddConstant(new IoConstant(StringToEnumx(string),record_name));
     801                                                } else if(strcmp(record_name,"md.thermal.fe")==0){
     802                                                        this->AddConstant(new IoConstant(StringToEnumx(string),record_name));
    799803                                                } else if(strcmp(record_name,"md.groundingline.migration")==0){
    800804                                                        this->AddConstant(new IoConstant(StringToEnumx(string),record_name));
    801805                                                } else if(strcmp(record_name,"md.masstransport.hydrostatic_adjustment")==0){
  • ../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp

     
    9797}/*}}}*/
    9898void EnthalpyAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
    9999
     100        int finiteelement;
     101        iomodel->FindConstant(&finiteelement,"md.thermal.fe");
     102
    100103        if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
    101         ::CreateNodes(nodes,iomodel,EnthalpyAnalysisEnum,P1Enum);
     104        ::CreateNodes(nodes,iomodel,EnthalpyAnalysisEnum,finiteelement);
    102105        iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
    103106}/*}}}*/
    104107int  EnthalpyAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/
     
    120123        /*Fetch data needed: */
    121124        iomodel->FetchData(3,"md.initialization.temperature","md.initialization.waterfraction","md.initialization.pressure");
    122125
     126        /*Finite element type*/
     127        int finiteelement;
     128        iomodel->FindConstant(&finiteelement,"md.thermal.fe");
     129
    123130        /*Update elements: */
    124131        int counter=0;
    125132        for(int i=0;i<iomodel->numberofelements;i++){
    126133                if(iomodel->my_elements[i]){
    127134                        Element* element=(Element*)elements->GetObjectByOffset(counter);
    128                         element->Update(i,iomodel,analysis_counter,analysis_type,P1Enum);
     135                        element->Update(i,iomodel,analysis_counter,analysis_type,finiteelement);
    129136                        counter++;
    130137                }
    131138        }
  • ../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp

     
    88void ThermalAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/
    99
    1010        /*Intermediary*/
    11         int finiteelement = P1Enum;
     11        int finiteelement;
     12        iomodel->FindConstant(&finiteelement,"md.thermal.fe");
     13        _assert_(finiteelement==P1Enum);
    1214
    1315        /*Only 3d mesh supported*/
    1416        if(iomodel->domaintype!=Domain3DEnum) _error_("not supported yet");
     
    6163}/*}}}*/
    6264void ThermalAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/
    6365
    64         int finiteelement = P1Enum;
     66        int finiteelement;
     67        iomodel->FindConstant(&finiteelement,"md.thermal.fe");
     68        _assert_(finiteelement==P1Enum);
    6569       
    6670        if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface");
    6771        ::CreateNodes(nodes,iomodel,ThermalAnalysisEnum,finiteelement);
     
    7882        if(iomodel->domaintype==Domain2DhorizontalEnum)return;
    7983
    8084        /*Update elements: */
    81         int finiteelement = P1Enum;
     85        int finiteelement;
     86        iomodel->FindConstant(&finiteelement,"md.thermal.fe");
     87        _assert_(finiteelement==P1Enum);
    8288        int counter=0;
    8389        for(int i=0;i<iomodel->numberofelements;i++){
    8490                if(iomodel->my_elements[i]){
Note: See TracBrowser for help on using the repository browser.