Index: /issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 23972)
+++ /issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 23973)
@@ -2229,5 +2229,39 @@
 					case EtaDiffEnum:                   EtaDiffx(&double_result); break;
 
-				   /*Vector */
+					/*Vector special case (maybe should go to specific analysis?)*/
+					case ChannelAreaEnum:{
+
+							/*Get Number of Channels*/
+							int numchannels_local=0,numchannels;
+							for(int j=0;j<this->loads->Size();j++){
+								if(this->loads->GetEnum(i)==ChannelEnum) numchannels_local++;
+							}
+							ISSM_MPI_Reduce(&numchannels_local,&numchannels,1,ISSM_MPI_INT,ISSM_MPI_SUM,0,IssmComm::GetComm() );
+							ISSM_MPI_Bcast(&numchannels,1,ISSM_MPI_INT,0,IssmComm::GetComm());
+
+							IssmDouble* values    = xNewZeroInit<IssmDouble>(numchannels);
+							IssmDouble* allvalues = xNew<IssmDouble>(numchannels);
+
+							/*Fill-in vector*/
+							for(int j=0;j<this->loads->Size();j++){
+								if(this->loads->GetEnum(i)==ChannelEnum){
+									Channel* channel=(Channel*)this->loads->GetObjectByOffset(i);
+									channel->WriteChannelCrossSection(values);
+								}
+							}
+
+							/*Gather from all cpus*/
+							ISSM_MPI_Allreduce((void*)values,(void*)allvalues,numchannels,ISSM_MPI_PDOUBLE,ISSM_MPI_SUM,IssmComm::GetComm());
+							xDelete<IssmDouble>(values);
+
+							if(save_results)results->AddResult(new GenericExternalResult<IssmDouble*>(results->Size()+1,output_enum,allvalues,numchannels,1,step,time));
+							xDelete<IssmDouble>(allvalues);
+
+							isvec = true;
+					}
+					break;
+
+
+				   /*Default is always Vector */
 					default:
 
@@ -2347,7 +2381,5 @@
 	/*Convert list of enums to list of string*/
 	char** enumlist = xNew<char*>(numoutputs);
-	for(int i=0;i<numoutputs;i++){
-		EnumToStringx(&enumlist[i],requested_outputs[i]);
-	}
+	for(int i=0;i<numoutputs;i++) EnumToStringx(&enumlist[i],requested_outputs[i]);
 
 	/*Call main module*/
@@ -2357,5 +2389,4 @@
 	for(int i=0;i<numoutputs;i++) xDelete<char>(enumlist[i]);
 	xDelete<char*>(enumlist);
-	return;
 }
 /*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Loads/Channel.cpp
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Channel.cpp	(revision 23972)
+++ /issm/trunk-jpl/src/c/classes/Loads/Channel.cpp	(revision 23973)
@@ -28,4 +28,6 @@
 /*Channel constructors and destructor*/
 Channel::Channel(){/*{{{*/
+	this->id         = -1;
+	this->sid        = -1;
 	this->parameters = NULL;
 	this->helement   = NULL;
@@ -39,4 +41,5 @@
 
 	this->id=channel_id;
+	this->sid=channel_id-1;
 	this->parameters = NULL;
 	this->element    = NULL;
@@ -679,2 +682,8 @@
 }
 /*}}}*/
+void           Channel::WriteChannelCrossSection(IssmDouble* values){/*{{{*/
+
+	_assert_(values);
+	values[this->sid] = this->S;
+}
+/*}}}*/
Index: /issm/trunk-jpl/src/c/classes/Loads/Channel.h
===================================================================
--- /issm/trunk-jpl/src/c/classes/Loads/Channel.h	(revision 23972)
+++ /issm/trunk-jpl/src/c/classes/Loads/Channel.h	(revision 23973)
@@ -22,4 +22,5 @@
 
 	public: 
+		int sid;
 		int id;
 
@@ -77,4 +78,5 @@
 		ElementVector* CreatePVectorHydrologyGlaDS(void);
 		ElementMatrix* CreateKMatrixHydrologyGlaDS(void);
+		void           WriteChannelCrossSection(IssmDouble* values);
 		/*}}}*/
 
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 23972)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 23973)
@@ -928,4 +928,5 @@
 	CfsurfacesquareEnum,
 	ChannelEnum,
+	ChannelAreaEnum,
 	ClosedEnum,
 	ColinearEnum,
Index: /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 23972)
+++ /issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 23973)
@@ -932,4 +932,5 @@
 		case CfsurfacesquareEnum : return "Cfsurfacesquare";
 		case ChannelEnum : return "Channel";
+		case ChannelAreaEnum : return "ChannelArea";
 		case ClosedEnum : return "Closed";
 		case ColinearEnum : return "Colinear";
Index: /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 23972)
+++ /issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 23973)
@@ -953,4 +953,5 @@
 	      else if (strcmp(name,"Cfsurfacesquare")==0) return CfsurfacesquareEnum;
 	      else if (strcmp(name,"Channel")==0) return ChannelEnum;
+	      else if (strcmp(name,"ChannelArea")==0) return ChannelAreaEnum;
 	      else if (strcmp(name,"Closed")==0) return ClosedEnum;
 	      else if (strcmp(name,"Colinear")==0) return ColinearEnum;
@@ -997,9 +998,9 @@
 	      else if (strcmp(name,"ExternalResult")==0) return ExternalResultEnum;
 	      else if (strcmp(name,"ExtrapolationAnalysis")==0) return ExtrapolationAnalysisEnum;
-	      else if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
          else stage=9;
    }
    if(stage==9){
-	      if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
+	      if (strcmp(name,"ExtrudeFromBaseAnalysis")==0) return ExtrudeFromBaseAnalysisEnum;
+	      else if (strcmp(name,"ExtrudeFromTopAnalysis")==0) return ExtrudeFromTopAnalysisEnum;
 	      else if (strcmp(name,"FSApproximation")==0) return FSApproximationEnum;
 	      else if (strcmp(name,"FSSolver")==0) return FSSolverEnum;
@@ -1120,9 +1121,9 @@
 	      else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
 	      else if (strcmp(name,"MeshElements")==0) return MeshElementsEnum;
-	      else if (strcmp(name,"MeshX")==0) return MeshXEnum;
          else stage=10;
    }
    if(stage==10){
-	      if (strcmp(name,"MeshY")==0) return MeshYEnum;
+	      if (strcmp(name,"MeshX")==0) return MeshXEnum;
+	      else if (strcmp(name,"MeshY")==0) return MeshYEnum;
 	      else if (strcmp(name,"MinVel")==0) return MinVelEnum;
 	      else if (strcmp(name,"MinVx")==0) return MinVxEnum;
@@ -1243,9 +1244,9 @@
 	      else if (strcmp(name,"TotalGroundedBmbScaled")==0) return TotalGroundedBmbScaledEnum;
 	      else if (strcmp(name,"TotalSmb")==0) return TotalSmbEnum;
-	      else if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
          else stage=11;
    }
    if(stage==11){
-	      if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
+	      if (strcmp(name,"TotalSmbScaled")==0) return TotalSmbScaledEnum;
+	      else if (strcmp(name,"TransientArrayParam")==0) return TransientArrayParamEnum;
 	      else if (strcmp(name,"TransientInput")==0) return TransientInputEnum;
 	      else if (strcmp(name,"TransientParam")==0) return TransientParamEnum;
Index: /issm/trunk-jpl/src/m/classes/hydrologyglads.m
===================================================================
--- /issm/trunk-jpl/src/m/classes/hydrologyglads.m	(revision 23972)
+++ /issm/trunk-jpl/src/m/classes/hydrologyglads.m	(revision 23973)
@@ -36,5 +36,5 @@
 		end % }}}
 		function list = defaultoutputs(self,md) % {{{
-			list = {'EffectivePressure','HydraulicPotential','HydrologySheetThickness'};
+			list = {'EffectivePressure','HydraulicPotential','HydrologySheetThickness','ChannelArea'};
 		end % }}}    
 
