Index: /issm/trunk-jpl/src/c/Container/DataSet.cpp
===================================================================
--- /issm/trunk-jpl/src/c/Container/DataSet.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/Container/DataSet.cpp	(revision 13798)
@@ -50,9 +50,8 @@
 DataSet*   DataSet::Copy(void){
 
-	DataSet* copy=NULL;
 	vector<Object*>::iterator object;
 	Object* object_copy=NULL;
 
-	copy=new DataSet(enum_type);
+	DataSet* copy=new DataSet(enum_type);
 
 	copy->sorted=sorted;
Index: /issm/trunk-jpl/src/c/Container/Inputs.cpp
===================================================================
--- /issm/trunk-jpl/src/c/Container/Inputs.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/Container/Inputs.cpp	(revision 13798)
@@ -208,7 +208,6 @@
 void  Inputs::ConstrainMin(int constrain_enum, IssmDouble minimum){
 
-	Input* constrain_input=NULL; 
 	/*Find x and y inputs: */
-	constrain_input=dynamic_cast<Input*>(this->GetInput(constrain_enum));
+	Input* constrain_input=dynamic_cast<Input*>(this->GetInput(constrain_enum));
 
 	/*some checks: */
Index: /issm/trunk-jpl/src/c/Container/Nodes.cpp
===================================================================
--- /issm/trunk-jpl/src/c/Container/Nodes.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/Container/Nodes.cpp	(revision 13798)
@@ -154,6 +154,4 @@
 	int num_procs;
 
-	int* ranks=NULL;
-	int* minranks=NULL;
 	int  numnodes;
 
@@ -165,6 +163,6 @@
 
 	/*Allocate ranks: */
-	ranks=xNew<int>(numnodes);
-	minranks=xNew<int>(numnodes);
+	int* ranks    = xNew<int>(numnodes);
+	int* minranks = xNew<int>(numnodes);
 	for(i=0;i<numnodes;i++)ranks[i]=num_procs; //no cpu can have rank num_procs. This is the maximum limit.
 
Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 13798)
@@ -534,5 +534,5 @@
 
 	for (i=1;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		dt=element->TimeAdapt();
 		if(dt<min_dt)min_dt=dt;
@@ -808,5 +808,5 @@
 	/*Compute Misfit: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		J+=element->ThicknessAbsGradient(process_units,weight_index);
 	}
Index: /issm/trunk-jpl/src/c/classes/Hook.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Hook.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/classes/Hook.cpp	(revision 13798)
@@ -173,5 +173,5 @@
 		/*Now, for this->objects that did not get resolved, and for which we have no offset, chase them in the dataset, by id: */
 		if(this->objects[i]==NULL){
-			this->objects[i]=(Object*)dataset->GetObjectById(this->offsets+i,this->ids[i]); //remember the offset for later on.
+			this->objects[i]=dynamic_cast<Object*>(dataset->GetObjectById(this->offsets+i,this->ids[i])); //remember the offset for later on.
 			/*check the id is correct!: */
 			if (this->objects[i]->Id()!=this->ids[i]) _error_("wrong id: " << this->objects[i]->Id() << " vs " << this->ids[i] << "  in resolved pointer!");
Index: /issm/trunk-jpl/src/c/classes/IoModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/classes/IoModel.cpp	(revision 13798)
@@ -186,8 +186,8 @@
 
 	/*Find constant*/
-	Param* param=(Param*)this->constants->FindParamObject(constant_enum);
+	Param* param=dynamic_cast<Param*>(this->constants->FindParamObject(constant_enum));
 	if(!param) _error_("Constant " << EnumToStringx(constant_enum) << " not found in iomodel");
 
-	return (Param*)param->copy();
+	return dynamic_cast<Param*>(param->copy());
 }
 /*}}}*/
@@ -1105,5 +1105,5 @@
 			for (i=0;i<numberofelements;i++){
 				if(this->my_elements[i]){
-					Element* element=(Element*)elements->GetObjectByOffset(counter);
+					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
 					element->InputCreate((IssmDouble)boolean,vector_enum,code);
 					counter++;
@@ -1118,5 +1118,5 @@
 			for (i=0;i<numberofelements;i++){
 				if(this->my_elements[i]){
-					Element* element=(Element*)elements->GetObjectByOffset(counter);
+					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
 					element->InputCreate((IssmDouble)integer,vector_enum,code);
 					counter++;
@@ -1131,5 +1131,5 @@
 			for (i=0;i<numberofelements;i++){
 				if(this->my_elements[i]){
-					Element* element=(Element*)elements->GetObjectByOffset(counter);
+					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
 					element->InputCreate(scalar,vector_enum,code); 
 					counter++;
@@ -1168,5 +1168,5 @@
 			for (i=0;i<numberofelements;i++){
 				if(this->my_elements[i]){
-					Element* element=(Element*)elements->GetObjectByOffset(counter);
+					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
 					if(defaulting) element->InputCreate(default_value,vector_enum,code); 
 					else           element->InputCreate(IssmDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
@@ -1206,5 +1206,5 @@
 			for (i=0;i<numberofelements;i++){
 				if(this->my_elements[i]){
-					Element* element=(Element*)elements->GetObjectByOffset(counter);
+					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
 					if(defaulting) element->InputCreate(default_value,vector_enum,code); 
 					else           element->InputCreate(IssmDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
@@ -1244,5 +1244,5 @@
 			for (i=0;i<numberofelements;i++){
 				if(this->my_elements[i]){
-					Element* element=(Element*)elements->GetObjectByOffset(counter);
+					Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(counter));
 					if(defaulting) element->InputCreate(default_value,vector_enum,code); 
 					else           element->InputCreate(IssmDoublevector,i,this,M,N,vector_layout,vector_enum,code);//we need i to index into elements.
Index: /issm/trunk-jpl/src/c/classes/bamg/Geometry.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/bamg/Geometry.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/classes/bamg/Geometry.cpp	(revision 13798)
@@ -499,12 +499,11 @@
 		/*Original code from Frederic Hecht <hecht@ann.jussieu.fr> (BAMG v1.01, MeshGeom.cpp/AfterRead)*/
 
-		long               i,j,k;
-		long              *head_v   = new long[nbv];
-		long              *next_p   = new long[2*nbe];
-		float             *eangle   = new float[nbe];
-		double             eps      = 1e-20;
-		BamgQuadtree       quadtree; // build quadtree to find duplicates
-		BamgVertex        *v0       = vertices;
-		GeomVertex *v0g      = (GeomVertex*) (void*)v0;
+		long          i          ,j,k;
+		long         *head_v   = new long[nbv];
+		long         *next_p   = new long[2 *nbe];
+		float        *eangle   = new float[nbe];
+		double        eps      = 1e-20;
+		BamgQuadtree  quadtree;                            // build quadtree to find duplicates
+		BamgVertex   *v0       = vertices;
 
 		k=0;
@@ -868,5 +867,5 @@
 		directionge[bge]=1;
 
-		while (eg0!=(GeomEdge*)vg0 && (*eg0)(direction0)!=(GeomVertex*)vg0){ 
+		while(eg0!=(GeomEdge*)vg0 && (*eg0)(direction0)!=(GeomVertex*)vg0){ 
 			if (bge<=0) {
 				if(NbTry) {
Index: /issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/AverageOntoPartitionx/AverageOntoPartitionx.cpp	(revision 13798)
@@ -47,5 +47,5 @@
 	/*loop on each element, and add contribution of the element to the partition (surface weighted average): */
 	for(int i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->AverageOntoPartition(partition_contributions,partition_areas,vertex_response,qmu_part);
 	}
Index: /issm/trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/ComputeBasalStressx/ComputeBasalStressx.cpp	(revision 13798)
@@ -29,5 +29,5 @@
 	/*Compute basal stress for each element: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->ComputeBasalStress(sigma);
 	}
Index: /issm/trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/ComputeStrainRatex/ComputeStrainRatex.cpp	(revision 13798)
@@ -29,5 +29,5 @@
 	/*Compute basal stress for each element: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->ComputeStrainRate(eps);
 	}
Index: /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/ConfigureObjectsx/ConfigureObjectsx.cpp	(revision 13798)
@@ -27,5 +27,5 @@
 	if(VerboseMProcessor()) _pprintLine_("      Configuring elements...");
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->Configure(elements,loads,nodes,materials,parameters);
 	}
Index: /issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/CreateJacobianMatrixx/CreateJacobianMatrixx.cpp	(revision 13798)
@@ -33,5 +33,5 @@
 	/*Create and assemble matrix*/
 	for(i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->CreateJacobianMatrix(Jff);
 	}
Index: /issm/trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/Delta18oParameterizationx/Delta18oParameterizationx.cpp	(revision 13798)
@@ -18,5 +18,5 @@
   /*Compute temperature and precipitation fields: */
   for(i=0;i<elements->Size();i++){
-    element=(Element*)elements->GetObjectByOffset(i);
+    element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
     element->Delta18oParameterization();
   }  
Index: /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/DragCoefficientAbsGradientx/DragCoefficientAbsGradientx.cpp	(revision 13798)
@@ -22,5 +22,5 @@
 	/*Compute Misfit: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		J+=element->DragCoefficientAbsGradient(process_units,weight_index);
 	}
Index: /issm/trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/ElementResponsex/ElementResponsex.cpp	(revision 13798)
@@ -28,5 +28,5 @@
 	/*now, go through our elements, and retrieve the one with this id: index: */
 	for(i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		if (element->Id()==index){
 			found=1;
Index: /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/GetSolutionFromInputsx/GetSolutionFromInputsx.cpp	(revision 13798)
@@ -33,5 +33,5 @@
 	/*Go through elements and plug solution: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->GetSolutionFromInputs(solution);
 	}
Index: /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/GetVectorFromInputsx/GetVectorFromInputsx.cpp	(revision 13798)
@@ -21,5 +21,5 @@
 		/*Look up in elements*/
 		for(i=0;i<elements->Size();i++){
-			Element* element=(Element*)elements->GetObjectByOffset(i);
+			Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 			element->GetVectorFromInputs(vector,name);
 		}
Index: /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/GroundinglineMigrationx/GroundinglineMigrationx.cpp	(revision 13798)
@@ -43,5 +43,5 @@
 	/*Migrate grounding line : */
 	for(i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->MigrateGroundingLine(old_floatingice,vertices_ungrounding);
 	}
@@ -95,5 +95,5 @@
 	/*Fill vector vertices_potentially_floating: */
 	for(i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->PotentialSheetUngrounding(vec_vertices_potentially_ungrounding);
 	}
@@ -137,5 +137,5 @@
 		/*Figure out if any of the nodes of the element will be floating -> elements neighbouting the floating ice*/
 		for(i=0;i<elements->Size();i++){
-			element=(Element*)elements->GetObjectByOffset(i);
+			element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 			vec_elements_neighboring_floatingice->SetValue(element->Sid(),element->IsNodeOnShelfFromFlags(nodes_on_floatingice)?1.0:0.0,INS_VAL);
 		}
@@ -148,5 +148,5 @@
 		local_nflipped=0;
 		for(i=0;i<elements->Size();i++){
-			element=(Element*)elements->GetObjectByOffset(i);
+			element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 			if(reCast<int,IssmDouble>(elements_neighboring_floatingce[element->Sid()])){
 				local_nflipped+=element->UpdatePotentialSheetUngrounding(vertices_potentially_ungrounding,vec_nodes_on_floatingice,nodes_on_floatingice);
Index: /issm/trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/IceVolumex/IceVolumex.cpp	(revision 13798)
@@ -16,5 +16,5 @@
 
 	for(int i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		local_ice_volume+=element->IceVolume();
 	}
Index: /issm/trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/InputArtificialNoisex/InputArtificialNoisex.cpp	(revision 13798)
@@ -15,5 +15,5 @@
 	/*Update elements, nodes, loads and materials from inputs: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputArtificialNoise(enum_name,min,max);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputControlUpdatex/InputControlUpdatex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputControlUpdatex/InputControlUpdatex.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/InputControlUpdatex/InputControlUpdatex.cpp	(revision 13798)
@@ -13,5 +13,5 @@
 	/*Go through elemnets, and ask to carry out the operation on inputs: */
 	for(int i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputControlUpdate(scalar,save_parameter);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/InputConvergencex/InputConvergencex.cpp	(revision 13798)
@@ -24,5 +24,5 @@
 	/*Go through elements, and ask them to do the job: */
 	for(i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		converged=element->InputConvergence(eps,enums,num_enums,criterionenums,criterionvalues,num_criterionenums);
 		if(!converged) num_notconverged++;
Index: /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/InputDuplicatex/InputDuplicatex.cpp	(revision 13798)
@@ -14,5 +14,5 @@
 	int      i;
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputDuplicate(original_enum,new_enum);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputScalex/InputScalex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputScalex/InputScalex.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/InputScalex/InputScalex.cpp	(revision 13798)
@@ -16,5 +16,5 @@
 	/*Go through elemnets, and ask to reinitialie the input: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputScale(enum_type,scale_factor);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/InputToResultx/InputToResultx.cpp	(revision 13798)
@@ -23,5 +23,5 @@
 	for(int i=0;i<elements->Size();i++){
 
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputToResult(enum_type,step,time);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromConstantx/InputUpdateFromConstantx.cpp	(revision 13798)
@@ -15,5 +15,5 @@
 	/*Elements and loads drive the update: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputUpdateFromConstant(constant,name);
 	}
@@ -35,5 +35,5 @@
 	/*Elements and loads drive the update: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputUpdateFromConstant(constant,name);
 	}
@@ -55,5 +55,5 @@
 	/*Elements and loads drive the update: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputUpdateFromConstant(constant,name);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromMatrixDakotax/InputUpdateFromMatrixDakotax.cpp	(revision 13798)
@@ -22,5 +22,5 @@
 		/*Update elements, nodes, loads and materials from inputs: */
 		for(i=0;i<elements->Size();i++){
-			Element* element=(Element*)elements->GetObjectByOffset(i);
+			Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 			element->InputUpdateFromMatrixDakota(matrix,nrows,ncols,name,type);
 		}
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromSolutionx/InputUpdateFromSolutionx.cpp	(revision 13798)
@@ -31,5 +31,5 @@
 	/*Elements drive the update: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputUpdateFromSolution(solution);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorDakotax/InputUpdateFromVectorDakotax.cpp	(revision 13798)
@@ -27,5 +27,5 @@
 	/*Update elements, nodes, loads and materials from inputs: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputUpdateFromVectorDakota(vector,name,type);
 	}
@@ -50,5 +50,5 @@
 	/*Update elements, nodes, loads and materials from inputs: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputUpdateFromVectorDakota(vector,name,type);
 	}
@@ -73,5 +73,5 @@
 	/*Update elements, nodes, loads and materials from inputs: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputUpdateFromVectorDakota(vector,name,type);
 	}
Index: /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/InputUpdateFromVectorx/InputUpdateFromVectorx.cpp	(revision 13798)
@@ -27,5 +27,5 @@
 	/*Update elements, nodes, loads and materials from inputs: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputUpdateFromVector(vector,name,type);
 	}
@@ -50,5 +50,5 @@
 	/*Update elements, nodes, loads and materials from inputs: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputUpdateFromVector(vector,name,type);
 	}
@@ -73,5 +73,5 @@
 	/*Update elements, nodes, loads and materials from inputs: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->InputUpdateFromVector(vector,name,type);
 	}
Index: /issm/trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/MinVelx/MinVelx.cpp	(revision 13798)
@@ -19,5 +19,5 @@
 	/*Go through elements, and request velocity: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->MinVel(&element_minvel,process_units); //go pick up the minimum velocity in the inputs
 
Index: /issm/trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/MinVxx/MinVxx.cpp	(revision 13798)
@@ -18,5 +18,5 @@
 	/*Go through elements, and request velocity: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->MinVx(&element_minvx,process_units); //go pick up the minimum velocity in the inputs
 
Index: /issm/trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/MinVyx/MinVyx.cpp	(revision 13798)
@@ -18,5 +18,5 @@
 	/*Go through elements, and request velocity: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->MinVy(&element_minvy,process_units); //go pick up the minimum velocity in the inputs
 
Index: /issm/trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/MinVzx/MinVzx.cpp	(revision 13798)
@@ -18,5 +18,5 @@
 	/*Go through elements, and request velocity: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->MinVz(&element_minvz,process_units); //go pick up the minimum velocity in the inputs
 
Index: /issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/NodalValuex/NodalValuex.cpp	(revision 13798)
@@ -30,5 +30,5 @@
 	 *element, figure out  if they hold the vertex, and the data. If so, return it: */
 	for(i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		found=element->NodalValue(&value,index,natureofdataenum,process_units);
 		if (found){
Index: /issm/trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/PositiveDegreeDayx/PositiveDegreeDayx.cpp	(revision 13798)
@@ -102,5 +102,5 @@
 
   for(i=0;i<elements->Size();i++){
-    element=(Element*)elements->GetObjectByOffset(i);
+    element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
     element->PositiveDegreeDay(pdds,pds,signorm);
   }
Index: /issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/ResetCoordinateSystemx/ResetCoordinateSystemx.cpp	(revision 13798)
@@ -13,5 +13,5 @@
 
 	for (int i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->ResetCoordinateSystem();
 	}
Index: /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/RheologyBbarAbsGradientx/RheologyBbarAbsGradientx.cpp	(revision 13798)
@@ -22,5 +22,5 @@
 	/*Compute Misfit: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		J+=element->RheologyBbarAbsGradient(process_units,weight_index);
 	}
Index: /issm/trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/SmbGradientsx/SmbGradientsx.cpp	(revision 13798)
@@ -22,5 +22,5 @@
 
   for(i=0;i<elements->Size();i++){
-    element=(Element*)elements->GetObjectByOffset(i);
+    element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
     element->SmbGradients();
   }
Index: /issm/trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/SmearFunctionx/SmearFunctionx.cpp	(revision 13798)
@@ -40,5 +40,5 @@
 	/*Fill smearedvector vector: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		element->SmearFunction(smearedvector,WeightFunction,SmearedFieldEnum,radius);
 	}
Index: /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/SurfaceAbsVelMisfitx/SurfaceAbsVelMisfitx.cpp	(revision 13798)
@@ -22,5 +22,5 @@
 	/*Compute Misfit: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		J+=element->SurfaceAbsVelMisfit(process_units,weight_index);
 	}
Index: /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/SurfaceAreax/SurfaceAreax.cpp	(revision 13798)
@@ -23,5 +23,5 @@
 	/*Compute gradients: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		S+=element->SurfaceArea();
 	}
Index: /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/SurfaceAverageVelMisfitx/SurfaceAverageVelMisfitx.cpp	(revision 13798)
@@ -26,5 +26,5 @@
 	/*Compute Misfit: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		J+=element->SurfaceAverageVelMisfit(process_units,weight_index);
 	}
Index: /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/SurfaceLogVelMisfitx/SurfaceLogVelMisfitx.cpp	(revision 13798)
@@ -22,5 +22,5 @@
 	/*Compute Misfit: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		J+=element->SurfaceLogVelMisfit(process_units,weight_index);
 	}
Index: /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/SurfaceLogVxVyMisfitx/SurfaceLogVxVyMisfitx.cpp	(revision 13798)
@@ -22,5 +22,5 @@
 	/*Compute Misfit: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		J+=element->SurfaceLogVxVyMisfit(process_units,weight_index);
 	}
Index: /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/SurfaceRelVelMisfitx/SurfaceRelVelMisfitx.cpp	(revision 13798)
@@ -22,5 +22,5 @@
 	/*Compute Misfit: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		J+=element->SurfaceRelVelMisfit(process_units,weight_index);
 	}
Index: /issm/trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/SystemMatricesx/SystemMatricesx.cpp	(revision 13798)
@@ -55,5 +55,5 @@
 		/*Fill stiffness matrix from elements: */
 		for (i=0;i<elements->Size();i++){
-			element=(Element*)elements->GetObjectByOffset(i);
+			element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 			element->CreateKMatrix(Kff,Kfs,df);
 		}
@@ -61,5 +61,5 @@
 		/*Fill stiffness matrix from loads if loads have the current configuration_type: */
 		for (i=0;i<loads->Size();i++){
-			load=(Load*)loads->GetObjectByOffset(i);
+			load=dynamic_cast<Load*>(loads->GetObjectByOffset(i));
 			if (load->InAnalysis(configuration_type)) load->CreateKMatrix(Kff,Kfs);
 		}
@@ -77,5 +77,5 @@
 		/*Fill right hand side vector, from elements: */
 		for (i=0;i<elements->Size();i++){
-			element=(Element*)elements->GetObjectByOffset(i);
+			element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 			element->CreatePVector(pf);
 		}
@@ -83,5 +83,5 @@
 		/*Fill right hand side from loads if loads have the current configuration_type: */
 		for (i=0;i<loads->Size();i++){
-			load=(Load*)loads->GetObjectByOffset(i);
+			load=dynamic_cast<Load*>(loads->GetObjectByOffset(i));
 			if (load->InAnalysis(configuration_type)) load->CreatePVector(pf);
 		}
@@ -97,5 +97,5 @@
 		/*Fill stiffness matrix from loads: */
 		for (i=0;i<loads->Size();i++){
-			load=(Load*)loads->GetObjectByOffset(i);
+			load=dynamic_cast<Load*>(loads->GetObjectByOffset(i));
 			if (load->InAnalysis(configuration_type)) load->PenaltyCreateKMatrix(Kff,Kfs,kmax);
 		}
@@ -110,5 +110,5 @@
 		/*Fill right hand side vector, from loads: */
 		for (i=0;i<loads->Size();i++){
-			load=(Load*)loads->GetObjectByOffset(i);
+			load=dynamic_cast<Load*>(loads->GetObjectByOffset(i));
 			if (load->InAnalysis(configuration_type)) load->PenaltyCreatePVector(pf,kmax);
 		}
Index: /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/ThicknessAbsMisfitx/ThicknessAbsMisfitx.cpp	(revision 13798)
@@ -22,5 +22,5 @@
 	/*Compute Misfit: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		J+=element->ThicknessAbsMisfit(process_units,weight_index);
 	}
Index: /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/ThicknessAcrossGradientx/ThicknessAcrossGradientx.cpp	(revision 13798)
@@ -22,5 +22,5 @@
 	/*Compute Misfit: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		J+=element->ThicknessAcrossGradient(process_units,weight_index);
 	}
Index: /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/ThicknessAlongGradientx/ThicknessAlongGradientx.cpp	(revision 13798)
@@ -22,5 +22,5 @@
 	/*Compute Misfit: */
 	for (i=0;i<elements->Size();i++){
-		element=(Element*)elements->GetObjectByOffset(i);
+		element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		J+=element->ThicknessAlongGradient(process_units,weight_index);
 	}
Index: /issm/trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/modules/TotalSmbx/TotalSmbx.cpp	(revision 13798)
@@ -16,5 +16,5 @@
 
 	for(int i=0;i<elements->Size();i++){
-		Element* element=(Element*)elements->GetObjectByOffset(i);
+		Element* element=dynamic_cast<Element*>(elements->GetObjectByOffset(i));
 		local_smb+=element->TotalSmb();
 	}
Index: /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/solutions/DakotaSpawnCore.cpp	(revision 13798)
@@ -62,5 +62,5 @@
 
 	/*cast void_femmodel to FemModel: */
-	femmodel=(FemModel*)void_femmodel;
+	femmodel=dynamic_cast<FemModel*>(void_femmodel);
 
 	/*retrieve parameters: */
Index: /issm/trunk-jpl/src/c/solutions/kriging.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solutions/kriging.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/solutions/kriging.cpp	(revision 13798)
@@ -73,5 +73,5 @@
 		results->AddObject(new GenericExternalResult<double*>(results->Size()+1,1,error,ninterp,1,1,0));
 		for(int i=0;i<results->Size();i++){
-			ExternalResult* result=(ExternalResult*)results->GetObjectByOffset(i);
+			ExternalResult* result=dynamic_cast<ExternalResult*>(results->GetObjectByOffset(i));
 			result->WriteData(output_fid,1);
 		}
Index: /issm/trunk-jpl/src/c/solvers/solver_nonlinear.cpp
===================================================================
--- /issm/trunk-jpl/src/c/solvers/solver_nonlinear.cpp	(revision 13797)
+++ /issm/trunk-jpl/src/c/solvers/solver_nonlinear.cpp	(revision 13798)
@@ -42,6 +42,6 @@
 
 	/*Were loads requested as output? : */
-	if(conserve_loads) loads=(Loads*)femmodel->loads->Copy(); //protect loads from being modified by the solution
-	else               loads=(Loads*)femmodel->loads;         //modify loads  in this solution
+	if(conserve_loads) loads=static_cast<Loads*>(femmodel->loads->Copy()); //protect loads from being modified by the solution
+	else               loads=static_cast<Loads*>(femmodel->loads);         //modify loads  in this solution
 
 	count=1;
