[issm-svn] r12630 - issm/trunk/src/c

morlighe at issm.ess.uci.edu morlighe at issm.ess.uci.edu
Wed Jul 11 14:05:15 PDT 2012


Author: morlighe
Date: 2012-07-11 14:05:15 -0700 (Wed, 11 Jul 2012)
New Revision: 12630

Modified:
   issm/trunk/src/c/Container/Elements.cpp
   issm/trunk/src/c/objects/Elements/Element.h
   issm/trunk/src/c/objects/Elements/Penta.cpp
   issm/trunk/src/c/objects/Elements/Penta.h
   issm/trunk/src/c/objects/Elements/Tria.cpp
   issm/trunk/src/c/objects/Elements/Tria.h
Log:
Fixed PDD crash in 3d by extruding SurfaceForcingMassBalance and added some checks on results


Modified: issm/trunk/src/c/Container/Elements.cpp
===================================================================
--- issm/trunk/src/c/Container/Elements.cpp	2012-07-11 17:42:00 UTC (rev 12629)
+++ issm/trunk/src/c/Container/Elements.cpp	2012-07-11 21:05:15 UTC (rev 12630)
@@ -236,7 +236,7 @@
 
 			for(int j=0;j<this->Size();j++){
 				Element* element=(Element*)this->GetObjectByOffset(j);
-				element->GetVectorFromResults(vector,i,resultssizes[i]);
+				element->GetVectorFromResults(vector,i,resultsenums[i],resultssizes[i]);
 			}
 			vector->Assemble();
 

Modified: issm/trunk/src/c/objects/Elements/Element.h
===================================================================
--- issm/trunk/src/c/objects/Elements/Element.h	2012-07-11 17:42:00 UTC (rev 12629)
+++ issm/trunk/src/c/objects/Elements/Element.h	2012-07-11 21:05:15 UTC (rev 12630)
@@ -62,7 +62,7 @@
 		virtual int    NodalValue(double* pvalue, int index, int natureofdataenum,bool process_units)=0;
 		virtual void   InputScale(int enum_type,double scale_factor)=0;
 		virtual void   GetVectorFromInputs(Vector* vector, int name_enum)=0;
-		virtual void   GetVectorFromResults(Vector* vector,int id,int interp)=0;
+		virtual void   GetVectorFromResults(Vector* vector,int id,int enum_in,int interp)=0;
 		virtual void   InputArtificialNoise(int enum_type,double min,double max)=0;
 		virtual bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums)=0;
 		virtual void   AverageOntoPartition(Vector* partition_contributions,Vector* partition_areas,double* vertex_response,double* qmu_part)=0;

Modified: issm/trunk/src/c/objects/Elements/Penta.cpp
===================================================================
--- issm/trunk/src/c/objects/Elements/Penta.cpp	2012-07-11 17:42:00 UTC (rev 12629)
+++ issm/trunk/src/c/objects/Elements/Penta.cpp	2012-07-11 21:05:15 UTC (rev 12630)
@@ -1079,10 +1079,13 @@
 }
 /*}}}*/
 /*FUNCTION Penta::GetVectorFromResults{{{1*/
-void  Penta::GetVectorFromResults(Vector* vector,int offset,int interp){
+void  Penta::GetVectorFromResults(Vector* vector,int offset,int enum_in,int interp){
 
 	/*Get result*/
 	ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset);
+	if(elementresult->InstanceEnum()!=enum_in){
+		_error_("Results of offset %i is %s, when %s was expected",offset,EnumToStringx(elementresult->InstanceEnum()),EnumToStringx(enum_in));
+	}  
 	if(interp==P1Enum){
 		int doflist1[NUMVERTICES];
 		int connectivity[NUMVERTICES];
@@ -2477,10 +2480,12 @@
      agd[i] = -smelt[i]+saccu[i];
      agd[i] = agd[i]/yts;
      pddtj[i]=pddt;
-     /*Update inputs*/    
-     this->inputs->AddInput(new PentaP1Input(SurfaceforcingsMassBalanceEnum,&agd[0]));
-     // this->inputs->AddInput(new PentaVertexInput(ThermalSpcTemperatureEnum,&Tsurf[0]));
-   }       //end of the for loop over the vertices
+   }//end of the for loop over the vertices
+
+	/*Update inputs*/    
+	this->inputs->AddInput(new PentaP1Input(SurfaceforcingsMassBalanceEnum,&agd[0]));
+	//this->inputs->AddInput(new PentaVertexInput(ThermalSpcTemperatureEnum,&Tsurf[0]));
+	this->InputExtrude(SurfaceforcingsMassBalanceEnum,ElementEnum);
 }
 /*}}}*/
 /*FUNCTION Penta::PotentialSheetUngrounding{{{1*/

Modified: issm/trunk/src/c/objects/Elements/Penta.h
===================================================================
--- issm/trunk/src/c/objects/Elements/Penta.h	2012-07-11 17:42:00 UTC (rev 12629)
+++ issm/trunk/src/c/objects/Elements/Penta.h	2012-07-11 21:05:15 UTC (rev 12630)
@@ -88,7 +88,7 @@
 		void   GetSolutionFromInputs(Vector* solution);
 		double GetZcoord(GaussPenta* gauss);
 		void   GetVectorFromInputs(Vector* vector,int name_enum);
-		void   GetVectorFromResults(Vector* vector,int offset,int interp);
+		void   GetVectorFromResults(Vector* vector,int offset,int name_enum,int interp);
 		
 		int    Sid();
 		void   InputArtificialNoise(int enum_type,double min, double max);

Modified: issm/trunk/src/c/objects/Elements/Tria.cpp
===================================================================
--- issm/trunk/src/c/objects/Elements/Tria.cpp	2012-07-11 17:42:00 UTC (rev 12629)
+++ issm/trunk/src/c/objects/Elements/Tria.cpp	2012-07-11 21:05:15 UTC (rev 12630)
@@ -1191,10 +1191,13 @@
 }
 /*}}}*/
 /*FUNCTION Tria::GetVectorFromResults{{{1*/
-void  Tria::GetVectorFromResults(Vector* vector,int offset,int interp){
+void  Tria::GetVectorFromResults(Vector* vector,int offset,int enum_in,int interp){
 
 	/*Get result*/
 	ElementResult* elementresult=(ElementResult*)this->results->GetObjectByOffset(offset);
+	if(elementresult->InstanceEnum()!=enum_in){
+		_error_("Results of offset %i is %s, when %s was expected",offset,EnumToStringx(elementresult->InstanceEnum()),EnumToStringx(enum_in));
+	}
 	if(interp==P1Enum){
 		int doflist1[NUMVERTICES];
 		int connectivity[NUMVERTICES];
@@ -2307,10 +2310,12 @@
      agd[i] = -smelt[i]+saccu[i];
      agd[i] = agd[i]/yts;
      pddtj[i]=pddt;
-     /*Update inputs*/    
-     this->inputs->AddInput(new TriaP1Input(SurfaceforcingsMassBalanceEnum,&agd[0]));
-     // this->inputs->AddInput(new TriaVertexInput(ThermalSpcTemperatureEnum,&Tsurf[0]));
-   }       //end of the for loop over the vertices
+
+   } //end of the for loop over the vertices
+
+	/*Update inputs*/    
+	this->inputs->AddInput(new TriaP1Input(SurfaceforcingsMassBalanceEnum,&agd[0]));
+	// this->inputs->AddInput(new TriaVertexInput(ThermalSpcTemperatureEnum,&Tsurf[0]));
 }
 /*}}}*/
 /*FUNCTION Tria::ProcessResultsUnits{{{1*/

Modified: issm/trunk/src/c/objects/Elements/Tria.h
===================================================================
--- issm/trunk/src/c/objects/Elements/Tria.h	2012-07-11 17:42:00 UTC (rev 12629)
+++ issm/trunk/src/c/objects/Elements/Tria.h	2012-07-11 21:05:15 UTC (rev 12630)
@@ -88,7 +88,7 @@
 		bool   IsOnWater(); 
 		void   GetSolutionFromInputs(Vector* solution);
 		void   GetVectorFromInputs(Vector* vector, int name_enum);
-		void   GetVectorFromResults(Vector* vector,int offset,int interp);
+		void   GetVectorFromResults(Vector* vector,int offset,int enum_in,int interp);
 		void   InputArtificialNoise(int enum_type,double min, double max);
 		bool   InputConvergence(double* eps, int* enums,int num_enums,int* criterionenums,double* criterionvalues,int num_criterionenums);
 		void   InputCreate(double scalar,int name,int code);



More information about the issm-svn mailing list