source:
issm/oecreview/Archive/21337-21723/ISSM-21541-21542.diff@
21726
Last change on this file since 21726 was 21726, checked in by , 8 years ago | |
---|---|
File size: 7.4 KB |
-
../trunk-jpl/src/m/classes/thermal.py
22 22 self.penalty_factor = 0 23 23 self.isenthalpy = 0 24 24 self.isdynamicbasalspc = 0; 25 self.fe = 'P1'; 25 26 self.requested_outputs = [] 26 27 27 28 #set defaults … … 78 79 self.isenthalpy=0 79 80 80 81 #will basal boundary conditions be set dynamically 81 self.isdynamicbasalspc=0 ;82 self.isdynamicbasalspc=0 82 83 84 #Finite element interpolation 85 self.fe='P1' 86 83 87 #default output 84 88 self.requested_outputs=['default'] 85 89 return self … … 123 127 WriteData(fid,prefix,'object',self,'fieldname','penalty_lock','format','Integer') 124 128 WriteData(fid,prefix,'object',self,'fieldname','penalty_factor','format','Double') 125 129 WriteData(fid,prefix,'object',self,'fieldname','isenthalpy','format','Boolean') 130 WriteData(fid,prefix,'object',self,'fieldname','fe','format','String'); 126 131 WriteData(fid,prefix,'object',self,'fieldname','isdynamicbasalspc','format','Boolean'); 127 132 128 133 #process requested outputs -
../trunk-jpl/src/m/classes/thermal.m
14 14 penalty_factor = 0; 15 15 isenthalpy = 0; 16 16 isdynamicbasalspc = 0; 17 fe = 'P1'; 17 18 requested_outputs = {}; 18 19 end 19 20 methods … … 65 66 %will basal boundary conditions be set dynamically 66 67 self.isdynamicbasalspc=0; 67 68 69 %Linear elements by default 70 self.fe='P1'; 71 68 72 %default output 69 73 self.requested_outputs={'default'}; 70 74 end % }}} … … 75 79 76 80 md = checkfield(md,'fieldname','thermal.stabilization','numel',[1],'values',[0 1 2]); 77 81 md = checkfield(md,'fieldname','thermal.spctemperature','Inf',1,'timeseries',1,'>=',0); 82 md = checkfield(md,'fieldname','thermal.fe','values',{'P1','P1xP2'}); 78 83 if (ismember('EnthalpyAnalysis',analyses) & md.thermal.isenthalpy & dimension(md.mesh)==3), 79 84 80 85 %Make sure the spc are less than melting point … … 109 114 fielddisplay(self,'penalty_factor','scaling exponent (default is 3)'); 110 115 fielddisplay(self,'isenthalpy','use an enthalpy formulation to include temperate ice (default is 0)'); 111 116 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'''); 112 118 fielddisplay(self,'requested_outputs','additional outputs requested'); 113 119 114 120 end % }}} … … 121 127 WriteData(fid,prefix,'object',self,'fieldname','penalty_lock','format','Integer'); 122 128 WriteData(fid,prefix,'object',self,'fieldname','penalty_factor','format','Double'); 123 129 WriteData(fid,prefix,'object',self,'fieldname','isenthalpy','format','Boolean'); 130 WriteData(fid,prefix,'object',self,'fieldname','fe','format','String'); 124 131 WriteData(fid,prefix,'object',self,'fieldname','isdynamicbasalspc','format','Boolean'); 125 132 126 133 %process requested outputs -
../trunk-jpl/src/c/classes/IoModel.cpp
656 656 this->AddConstant(new IoConstant(StringToEnumx(string),record_name)); 657 657 } else if(strcmp(record_name,"md.flowequation.fe_FS")==0){ 658 658 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)); 659 661 } else if(strcmp(record_name,"md.groundingline.migration")==0){ 660 662 this->AddConstant(new IoConstant(StringToEnumx(string),record_name)); 661 663 } else if(strcmp(record_name,"md.masstransport.hydrostatic_adjustment")==0){ … … 796 798 this->AddConstant(new IoConstant(StringToEnumx(string),record_name)); 797 799 } else if(strcmp(record_name,"md.flowequation.fe_FS")==0){ 798 800 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)); 799 803 } else if(strcmp(record_name,"md.groundingline.migration")==0){ 800 804 this->AddConstant(new IoConstant(StringToEnumx(string),record_name)); 801 805 } else if(strcmp(record_name,"md.masstransport.hydrostatic_adjustment")==0){ -
../trunk-jpl/src/c/analyses/EnthalpyAnalysis.cpp
97 97 }/*}}}*/ 98 98 void EnthalpyAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/ 99 99 100 int finiteelement; 101 iomodel->FindConstant(&finiteelement,"md.thermal.fe"); 102 100 103 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); 102 105 iomodel->DeleteData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface"); 103 106 }/*}}}*/ 104 107 int EnthalpyAnalysis::DofsPerNode(int** doflist,int domaintype,int approximation){/*{{{*/ … … 120 123 /*Fetch data needed: */ 121 124 iomodel->FetchData(3,"md.initialization.temperature","md.initialization.waterfraction","md.initialization.pressure"); 122 125 126 /*Finite element type*/ 127 int finiteelement; 128 iomodel->FindConstant(&finiteelement,"md.thermal.fe"); 129 123 130 /*Update elements: */ 124 131 int counter=0; 125 132 for(int i=0;i<iomodel->numberofelements;i++){ 126 133 if(iomodel->my_elements[i]){ 127 134 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); 129 136 counter++; 130 137 } 131 138 } -
../trunk-jpl/src/c/analyses/ThermalAnalysis.cpp
8 8 void ThermalAnalysis::CreateConstraints(Constraints* constraints,IoModel* iomodel){/*{{{*/ 9 9 10 10 /*Intermediary*/ 11 int finiteelement = P1Enum; 11 int finiteelement; 12 iomodel->FindConstant(&finiteelement,"md.thermal.fe"); 13 _assert_(finiteelement==P1Enum); 12 14 13 15 /*Only 3d mesh supported*/ 14 16 if(iomodel->domaintype!=Domain3DEnum) _error_("not supported yet"); … … 61 63 }/*}}}*/ 62 64 void ThermalAnalysis::CreateNodes(Nodes* nodes,IoModel* iomodel){/*{{{*/ 63 65 64 int finiteelement = P1Enum; 66 int finiteelement; 67 iomodel->FindConstant(&finiteelement,"md.thermal.fe"); 68 _assert_(finiteelement==P1Enum); 65 69 66 70 if(iomodel->domaintype==Domain3DEnum) iomodel->FetchData(2,"md.mesh.vertexonbase","md.mesh.vertexonsurface"); 67 71 ::CreateNodes(nodes,iomodel,ThermalAnalysisEnum,finiteelement); … … 78 82 if(iomodel->domaintype==Domain2DhorizontalEnum)return; 79 83 80 84 /*Update elements: */ 81 int finiteelement = P1Enum; 85 int finiteelement; 86 iomodel->FindConstant(&finiteelement,"md.thermal.fe"); 87 _assert_(finiteelement==P1Enum); 82 88 int counter=0; 83 89 for(int i=0;i<iomodel->numberofelements;i++){ 84 90 if(iomodel->my_elements[i]){
Note:
See TracBrowser
for help on using the repository browser.