Index: /issm/trunk/src/c/EnumDefinitions/EnumAsString.cpp
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/EnumAsString.cpp	(revision 3677)
+++ /issm/trunk/src/c/EnumDefinitions/EnumAsString.cpp	(revision 3677)
@@ -0,0 +1,355 @@
+/*
+* \file EnumAsString.cpp:
+* \brief: output string associated with enum
+*/
+
+#include "../shared/shared.h"
+#include "../include/macros.h"
+#include "./EnumDefinition.h"
+
+char* EnumAsString(int en){
+
+	switch(en){
+
+		case DatasetsEnum :
+			return "Datasets";
+		case ElementsEnum :
+			return "Elements";
+		case NodesEnum :
+			return "Nodes";
+		case ConstraintsEnum :
+			return "Constraints";
+		case LoadsEnum :
+			return "Loads";
+		case MaterialsEnum :
+			return "Materials";
+		case ParametersEnum :
+			return "Parameters";
+		case ResultsEnum :
+			return "Results";
+		case VerticesEnum :
+			return "Vertices";
+		case AnalysisEnum :
+			return "Analysis";
+		case AnalysisTypeEnum :
+			return "AnalysisType";
+		case SubAnalysisTypeEnum :
+			return "SubAnalysisType";
+		case DiagnosticAnalysisEnum :
+			return "DiagnosticAnalysis";
+		case HorizAnalysisEnum :
+			return "HorizAnalysis";
+		case StokesAnalysisEnum :
+			return "StokesAnalysis";
+		case HutterAnalysisEnum :
+			return "HutterAnalysis";
+		case VertAnalysisEnum :
+			return "VertAnalysis";
+		case ControlAnalysisEnum :
+			return "ControlAnalysis";
+		case AdjointAnalysisEnum :
+			return "AdjointAnalysis";
+		case InverseAnalysisEnum :
+			return "InverseAnalysis";
+		case GradientAnalysisEnum :
+			return "GradientAnalysis";
+		case ThermalAnalysisEnum :
+			return "ThermalAnalysis";
+		case TransientAnalysisEnum :
+			return "TransientAnalysis";
+		case SteadyAnalysisEnum :
+			return "SteadyAnalysis";
+		case SlopecomputeAnalysisEnum :
+			return "SlopecomputeAnalysis";
+		case SurfaceXAnalysisEnum :
+			return "SurfaceXAnalysis";
+		case SurfaceYAnalysisEnum :
+			return "SurfaceYAnalysis";
+		case BedXAnalysisEnum :
+			return "BedXAnalysis";
+		case BedYAnalysisEnum :
+			return "BedYAnalysis";
+		case PrognosticAnalysisEnum :
+			return "PrognosticAnalysis";
+		case Prognostic2AnalysisEnum :
+			return "Prognostic2Analysis";
+		case BalancedthicknessAnalysisEnum :
+			return "BalancedthicknessAnalysis";
+		case Balancedthickness2AnalysisEnum :
+			return "Balancedthickness2Analysis";
+		case BalancedvelocitiesAnalysisEnum :
+			return "BalancedvelocitiesAnalysis";
+		case MeltingAnalysisEnum :
+			return "MeltingAnalysis";
+		case Mesh2gridAnalysisEnum :
+			return "Mesh2gridAnalysis";
+		case ParametersAnalysisEnum :
+			return "ParametersAnalysis";
+		case SteadystateAnalysisEnum :
+			return "SteadystateAnalysis";
+		case NoneAnalysisEnum :
+			return "NoneAnalysis";
+		case FormulationEnum :
+			return "Formulation";
+		case NoneFormulationEnum :
+			return "NoneFormulation";
+		case HutterFormulationEnum :
+			return "HutterFormulation";
+		case MacAyealFormulationEnum :
+			return "MacAyealFormulation";
+		case PattynFormulationEnum :
+			return "PattynFormulation";
+		case StokesFormulationEnum :
+			return "StokesFormulation";
+		case ObjectEnum :
+			return "Object";
+		case HookEnum :
+			return "Hook";
+		case ElementEnum :
+			return "Element";
+		case TriaEnum :
+			return "Tria";
+		case ElementPropertiesEnum :
+			return "ElementProperties";
+		case NodePropertiesEnum :
+			return "NodeProperties";
+		case PentaEnum :
+			return "Penta";
+		case BeamEnum :
+			return "Beam";
+		case SingEnum :
+			return "Sing";
+		case DofIndexingEnum :
+			return "DofIndexing";
+		case NodeEnum :
+			return "Node";
+		case VertexEnum :
+			return "Vertex";
+		case LoadEnum :
+			return "Load";
+		case IcefrontEnum :
+			return "Icefront";
+		case SegmentIcefrontEnum :
+			return "SegmentIcefront";
+		case QuadIceFrontEnum :
+			return "QuadIceFront";
+		case RiftfrontEnum :
+			return "Riftfront";
+		case SegmentRiftfrontEnum :
+			return "SegmentRiftfront";
+		case QuadRiftFrontEnum :
+			return "QuadRiftFront";
+		case PenpairEnum :
+			return "Penpair";
+		case PengridEnum :
+			return "Pengrid";
+		case NumericalfluxEnum :
+			return "Numericalflux";
+		case MaterialEnum :
+			return "Material";
+		case MaticeEnum :
+			return "Matice";
+		case MatparEnum :
+			return "Matpar";
+		case InputEnum :
+			return "Input";
+		case TriaVertexInputEnum :
+			return "TriaVertexInput";
+		case SingVertexInputEnum :
+			return "SingVertexInput";
+		case BeamVertexInputEnum :
+			return "BeamVertexInput";
+		case PentaVertexInputEnum :
+			return "PentaVertexInput";
+		case BoolInputEnum :
+			return "BoolInput";
+		case IntInputEnum :
+			return "IntInput";
+		case DoubleInputEnum :
+			return "DoubleInput";
+		case ParamEnum :
+			return "Param";
+		case BoolParamEnum :
+			return "BoolParam";
+		case IntParamEnum :
+			return "IntParam";
+		case DoubleParamEnum :
+			return "DoubleParam";
+		case PetscMatParamEnum :
+			return "PetscMatParam";
+		case PetscVecParamEnum :
+			return "PetscVecParam";
+		case DoubleMatParamEnum :
+			return "DoubleMatParam";
+		case DoubleVecParamEnum :
+			return "DoubleVecParam";
+		case StringParamEnum :
+			return "StringParam";
+		case StringArrayParamEnum :
+			return "StringArrayParam";
+		case ResultEnum :
+			return "Result";
+		case RgbEnum :
+			return "Rgb";
+		case SpcEnum :
+			return "Spc";
+		case DofVecEnum :
+			return "DofVec";
+		case GeographyEnum :
+			return "Geography";
+		case IceSheetEnum :
+			return "IceSheet";
+		case IceShelfEnum :
+			return "IceShelf";
+		case WaterEnum :
+			return "Water";
+		case IceEnum :
+			return "Ice";
+		case AirEnum :
+			return "Air";
+		case MelangeEnum :
+			return "Melange";
+		case VxEnum :
+			return "Vx";
+		case VyEnum :
+			return "Vy";
+		case VzEnum :
+			return "Vz";
+		case VxAverageEnum :
+			return "VxAverage";
+		case VyAverageEnum :
+			return "VyAverage";
+		case VzAverageEnum :
+			return "VzAverage";
+		case VxObsEnum :
+			return "VxObs";
+		case VyObsEnum :
+			return "VyObs";
+		case VzObsEnum :
+			return "VzObs";
+		case VxOldEnum :
+			return "VxOld";
+		case VyOldEnum :
+			return "VyOld";
+		case VzOldEnum :
+			return "VzOld";
+		case DhDtEnum :
+			return "DhDt";
+		case ThicknessEnum :
+			return "Thickness";
+		case SurfaceEnum :
+			return "Surface";
+		case BedEnum :
+			return "Bed";
+		case DragCoefficientEnum :
+			return "DragCoefficient";
+		case DragPEnum :
+			return "DragP";
+		case DragQEnum :
+			return "DragQ";
+		case DragTypeEnum :
+			return "DragType";
+		case RheologyBEnum :
+			return "RheologyB";
+		case RheologyNEnum :
+			return "RheologyN";
+		case MeltingRateEnum :
+			return "MeltingRate";
+		case AccumulationRateEnum :
+			return "AccumulationRate";
+		case GeothermalFluxEnum :
+			return "GeothermalFlux";
+		case ElementOnIceShelfEnum :
+			return "ElementOnIceShelf";
+		case ElementOnBedEnum :
+			return "ElementOnBed";
+		case ElementOnWaterEnum :
+			return "ElementOnWater";
+		case ElementOnSurfaceEnum :
+			return "ElementOnSurface";
+		case SurfaceAreaEnum :
+			return "SurfaceArea";
+		case SurfaceSlopexEnum :
+			return "SurfaceSlopex";
+		case SurfaceSlopeyEnum :
+			return "SurfaceSlopey";
+		case BedSlopexEnum :
+			return "BedSlopex";
+		case BedSlopeyEnum :
+			return "BedSlopey";
+		case WeightsEnum :
+			return "Weights";
+		case FitEnum :
+			return "Fit";
+		case AdjointxEnum :
+			return "Adjointx";
+		case AdjointyEnum :
+			return "Adjointy";
+		case AdjointzEnum :
+			return "Adjointz";
+		case CollapseEnum :
+			return "Collapse";
+		case TemperatureEnum :
+			return "Temperature";
+		case PressureEnum :
+			return "Pressure";
+		case NodeOnBedEnum :
+			return "NodeOnBed";
+		case NodeOnSurfaceEnum :
+			return "NodeOnSurface";
+		case NodeOnIceShelfEnum :
+			return "NodeOnIceShelf";
+		case NodeOnIceSheetEnum :
+			return "NodeOnIceSheet";
+		case ResetPenaltiesEnum :
+			return "ResetPenalties";
+		case MeltingOffsetEnum :
+			return "MeltingOffset";
+		case TypeEnum :
+			return "Type";
+		case FrictionEnum :
+			return "Friction";
+		case FractionIncrementEnum :
+			return "FractionIncrement";
+		case ConvergedEnum :
+			return "Converged";
+		case SegmentOnIceShelfEnum :
+			return "SegmentOnIceShelf";
+		case FillEnum :
+			return "Fill";
+		case InternalEnum :
+			return "Internal";
+		case MaxPenetrationEnum :
+			return "MaxPenetration";
+		case BoundaryEnum :
+			return "Boundary";
+		case DtEnum :
+			return "Dt";
+		case ArtDiffEnum :
+			return "ArtDiff";
+		case CmNoiseDmpEnum :
+			return "CmNoiseDmp";
+		case CmMinDmpValueEnum :
+			return "CmMinDmpValue";
+		case CmMaxDmpValueEnum :
+			return "CmMaxDmpValue";
+		case CmMinDmpSlopeEnum :
+			return "CmMinDmpSlope";
+		case CmMaxDmpSlopeEnum :
+			return "CmMaxDmpSlope";
+		case ControlTypeEnum :
+			return "ControlType";
+		case ViscosityOvershootEnum :
+			return "ViscosityOvershoot";
+		case MeanVelEnum :
+			return "MeanVel";
+		case EpsVelEnum :
+			return "EpsVel";
+		case StokesReconditioningEnum :
+			return "StokesReconditioning";
+		case StabilizeConstraintsEnum :
+			return "StabilizeConstraints";
+		default :
+			ISSMERROR("Enum %i not found",en);
+	}
+}
Index: /issm/trunk/src/c/EnumDefinitions/README
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/README	(revision 3677)
+++ /issm/trunk/src/c/EnumDefinitions/README	(revision 3677)
@@ -0,0 +1,16 @@
+
+DO NOT MODIFY the following files:
+- StringAsEnum.cpp
+- EnumAsString.cpp
+- src/m/enum/*
+all these files are automatically synchronized with EnumDefinitions.h
+
+TO ADD AN ENUM:
+add the corresponding lines to EnumDefinitions.h
+and executes the 2 synchronizing scripts.
+
+SYNCHRONIZEMATLABENUM
+This script synchronizes all matlab enums from EnumDefinitions.h
+
+SYNCHRONIZESTRINGS
+This scrpit synchronizes StringAsEnum.cpp and EnumAsString.cpp according to EnumDefinitions.h
Index: /issm/trunk/src/c/EnumDefinitions/StringAsEnum.cpp
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/StringAsEnum.cpp	(revision 3677)
+++ /issm/trunk/src/c/EnumDefinitions/StringAsEnum.cpp	(revision 3677)
@@ -0,0 +1,182 @@
+/*
+* \file StringAsEnum.cpp:
+* \brief: output enum associated with string
+*/
+
+#include "../shared/shared.h"
+#include "../include/macros.h"
+#include "./EnumDefinition.h"
+
+int  StringAsEnum(char* name){
+
+	if (strcmp(name,"Datasets")==0) return DatasetsEnum;
+	else if (strcmp(name,"Elements")==0) return ElementsEnum;
+	else if (strcmp(name,"Nodes")==0) return NodesEnum;
+	else if (strcmp(name,"Constraints")==0) return ConstraintsEnum;
+	else if (strcmp(name,"Loads")==0) return LoadsEnum;
+	else if (strcmp(name,"Materials")==0) return MaterialsEnum;
+	else if (strcmp(name,"Parameters")==0) return ParametersEnum;
+	else if (strcmp(name,"Results")==0) return ResultsEnum;
+	else if (strcmp(name,"Vertices")==0) return VerticesEnum;
+	else if (strcmp(name,"Analysis")==0) return AnalysisEnum;
+	else if (strcmp(name,"AnalysisType")==0) return AnalysisTypeEnum;
+	else if (strcmp(name,"SubAnalysisType")==0) return SubAnalysisTypeEnum;
+	else if (strcmp(name,"DiagnosticAnalysis")==0) return DiagnosticAnalysisEnum;
+	else if (strcmp(name,"HorizAnalysis")==0) return HorizAnalysisEnum;
+	else if (strcmp(name,"StokesAnalysis")==0) return StokesAnalysisEnum;
+	else if (strcmp(name,"HutterAnalysis")==0) return HutterAnalysisEnum;
+	else if (strcmp(name,"VertAnalysis")==0) return VertAnalysisEnum;
+	else if (strcmp(name,"ControlAnalysis")==0) return ControlAnalysisEnum;
+	else if (strcmp(name,"AdjointAnalysis")==0) return AdjointAnalysisEnum;
+	else if (strcmp(name,"InverseAnalysis")==0) return InverseAnalysisEnum;
+	else if (strcmp(name,"GradientAnalysis")==0) return GradientAnalysisEnum;
+	else if (strcmp(name,"ThermalAnalysis")==0) return ThermalAnalysisEnum;
+	else if (strcmp(name,"TransientAnalysis")==0) return TransientAnalysisEnum;
+	else if (strcmp(name,"SteadyAnalysis")==0) return SteadyAnalysisEnum;
+	else if (strcmp(name,"SlopecomputeAnalysis")==0) return SlopecomputeAnalysisEnum;
+	else if (strcmp(name,"SurfaceXAnalysis")==0) return SurfaceXAnalysisEnum;
+	else if (strcmp(name,"SurfaceYAnalysis")==0) return SurfaceYAnalysisEnum;
+	else if (strcmp(name,"BedXAnalysis")==0) return BedXAnalysisEnum;
+	else if (strcmp(name,"BedYAnalysis")==0) return BedYAnalysisEnum;
+	else if (strcmp(name,"PrognosticAnalysis")==0) return PrognosticAnalysisEnum;
+	else if (strcmp(name,"Prognostic2Analysis")==0) return Prognostic2AnalysisEnum;
+	else if (strcmp(name,"BalancedthicknessAnalysis")==0) return BalancedthicknessAnalysisEnum;
+	else if (strcmp(name,"Balancedthickness2Analysis")==0) return Balancedthickness2AnalysisEnum;
+	else if (strcmp(name,"BalancedvelocitiesAnalysis")==0) return BalancedvelocitiesAnalysisEnum;
+	else if (strcmp(name,"MeltingAnalysis")==0) return MeltingAnalysisEnum;
+	else if (strcmp(name,"Mesh2gridAnalysis")==0) return Mesh2gridAnalysisEnum;
+	else if (strcmp(name,"ParametersAnalysis")==0) return ParametersAnalysisEnum;
+	else if (strcmp(name,"SteadystateAnalysis")==0) return SteadystateAnalysisEnum;
+	else if (strcmp(name,"NoneAnalysis")==0) return NoneAnalysisEnum;
+	else if (strcmp(name,"Formulation")==0) return FormulationEnum;
+	else if (strcmp(name,"NoneFormulation")==0) return NoneFormulationEnum;
+	else if (strcmp(name,"HutterFormulation")==0) return HutterFormulationEnum;
+	else if (strcmp(name,"MacAyealFormulation")==0) return MacAyealFormulationEnum;
+	else if (strcmp(name,"PattynFormulation")==0) return PattynFormulationEnum;
+	else if (strcmp(name,"StokesFormulation")==0) return StokesFormulationEnum;
+	else if (strcmp(name,"Object")==0) return ObjectEnum;
+	else if (strcmp(name,"Hook")==0) return HookEnum;
+	else if (strcmp(name,"Element")==0) return ElementEnum;
+	else if (strcmp(name,"Tria")==0) return TriaEnum;
+	else if (strcmp(name,"ElementProperties")==0) return ElementPropertiesEnum;
+	else if (strcmp(name,"NodeProperties")==0) return NodePropertiesEnum;
+	else if (strcmp(name,"Penta")==0) return PentaEnum;
+	else if (strcmp(name,"Beam")==0) return BeamEnum;
+	else if (strcmp(name,"Sing")==0) return SingEnum;
+	else if (strcmp(name,"DofIndexing")==0) return DofIndexingEnum;
+	else if (strcmp(name,"Node")==0) return NodeEnum;
+	else if (strcmp(name,"Vertex")==0) return VertexEnum;
+	else if (strcmp(name,"Load")==0) return LoadEnum;
+	else if (strcmp(name,"Icefront")==0) return IcefrontEnum;
+	else if (strcmp(name,"SegmentIcefront")==0) return SegmentIcefrontEnum;
+	else if (strcmp(name,"QuadIceFront")==0) return QuadIceFrontEnum;
+	else if (strcmp(name,"Riftfront")==0) return RiftfrontEnum;
+	else if (strcmp(name,"SegmentRiftfront")==0) return SegmentRiftfrontEnum;
+	else if (strcmp(name,"QuadRiftFront")==0) return QuadRiftFrontEnum;
+	else if (strcmp(name,"Penpair")==0) return PenpairEnum;
+	else if (strcmp(name,"Pengrid")==0) return PengridEnum;
+	else if (strcmp(name,"Numericalflux")==0) return NumericalfluxEnum;
+	else if (strcmp(name,"Material")==0) return MaterialEnum;
+	else if (strcmp(name,"Matice")==0) return MaticeEnum;
+	else if (strcmp(name,"Matpar")==0) return MatparEnum;
+	else if (strcmp(name,"Input")==0) return InputEnum;
+	else if (strcmp(name,"TriaVertexInput")==0) return TriaVertexInputEnum;
+	else if (strcmp(name,"SingVertexInput")==0) return SingVertexInputEnum;
+	else if (strcmp(name,"BeamVertexInput")==0) return BeamVertexInputEnum;
+	else if (strcmp(name,"PentaVertexInput")==0) return PentaVertexInputEnum;
+	else if (strcmp(name,"BoolInput")==0) return BoolInputEnum;
+	else if (strcmp(name,"IntInput")==0) return IntInputEnum;
+	else if (strcmp(name,"DoubleInput")==0) return DoubleInputEnum;
+	else if (strcmp(name,"Param")==0) return ParamEnum;
+	else if (strcmp(name,"BoolParam")==0) return BoolParamEnum;
+	else if (strcmp(name,"IntParam")==0) return IntParamEnum;
+	else if (strcmp(name,"DoubleParam")==0) return DoubleParamEnum;
+	else if (strcmp(name,"PetscMatParam")==0) return PetscMatParamEnum;
+	else if (strcmp(name,"PetscVecParam")==0) return PetscVecParamEnum;
+	else if (strcmp(name,"DoubleMatParam")==0) return DoubleMatParamEnum;
+	else if (strcmp(name,"DoubleVecParam")==0) return DoubleVecParamEnum;
+	else if (strcmp(name,"StringParam")==0) return StringParamEnum;
+	else if (strcmp(name,"StringArrayParam")==0) return StringArrayParamEnum;
+	else if (strcmp(name,"Result")==0) return ResultEnum;
+	else if (strcmp(name,"Rgb")==0) return RgbEnum;
+	else if (strcmp(name,"Spc")==0) return SpcEnum;
+	else if (strcmp(name,"DofVec")==0) return DofVecEnum;
+	else if (strcmp(name,"Geography")==0) return GeographyEnum;
+	else if (strcmp(name,"IceSheet")==0) return IceSheetEnum;
+	else if (strcmp(name,"IceShelf")==0) return IceShelfEnum;
+	else if (strcmp(name,"Water")==0) return WaterEnum;
+	else if (strcmp(name,"Ice")==0) return IceEnum;
+	else if (strcmp(name,"Air")==0) return AirEnum;
+	else if (strcmp(name,"Melange")==0) return MelangeEnum;
+	else if (strcmp(name,"Vx")==0) return VxEnum;
+	else if (strcmp(name,"Vy")==0) return VyEnum;
+	else if (strcmp(name,"Vz")==0) return VzEnum;
+	else if (strcmp(name,"VxAverage")==0) return VxAverageEnum;
+	else if (strcmp(name,"VyAverage")==0) return VyAverageEnum;
+	else if (strcmp(name,"VzAverage")==0) return VzAverageEnum;
+	else if (strcmp(name,"VxObs")==0) return VxObsEnum;
+	else if (strcmp(name,"VyObs")==0) return VyObsEnum;
+	else if (strcmp(name,"VzObs")==0) return VzObsEnum;
+	else if (strcmp(name,"VxOld")==0) return VxOldEnum;
+	else if (strcmp(name,"VyOld")==0) return VyOldEnum;
+	else if (strcmp(name,"VzOld")==0) return VzOldEnum;
+	else if (strcmp(name,"DhDt")==0) return DhDtEnum;
+	else if (strcmp(name,"Thickness")==0) return ThicknessEnum;
+	else if (strcmp(name,"Surface")==0) return SurfaceEnum;
+	else if (strcmp(name,"Bed")==0) return BedEnum;
+	else if (strcmp(name,"DragCoefficient")==0) return DragCoefficientEnum;
+	else if (strcmp(name,"DragP")==0) return DragPEnum;
+	else if (strcmp(name,"DragQ")==0) return DragQEnum;
+	else if (strcmp(name,"DragType")==0) return DragTypeEnum;
+	else if (strcmp(name,"RheologyB")==0) return RheologyBEnum;
+	else if (strcmp(name,"RheologyN")==0) return RheologyNEnum;
+	else if (strcmp(name,"MeltingRate")==0) return MeltingRateEnum;
+	else if (strcmp(name,"AccumulationRate")==0) return AccumulationRateEnum;
+	else if (strcmp(name,"GeothermalFlux")==0) return GeothermalFluxEnum;
+	else if (strcmp(name,"ElementOnIceShelf")==0) return ElementOnIceShelfEnum;
+	else if (strcmp(name,"ElementOnBed")==0) return ElementOnBedEnum;
+	else if (strcmp(name,"ElementOnWater")==0) return ElementOnWaterEnum;
+	else if (strcmp(name,"ElementOnSurface")==0) return ElementOnSurfaceEnum;
+	else if (strcmp(name,"SurfaceArea")==0) return SurfaceAreaEnum;
+	else if (strcmp(name,"SurfaceSlopex")==0) return SurfaceSlopexEnum;
+	else if (strcmp(name,"SurfaceSlopey")==0) return SurfaceSlopeyEnum;
+	else if (strcmp(name,"BedSlopex")==0) return BedSlopexEnum;
+	else if (strcmp(name,"BedSlopey")==0) return BedSlopeyEnum;
+	else if (strcmp(name,"Weights")==0) return WeightsEnum;
+	else if (strcmp(name,"Fit")==0) return FitEnum;
+	else if (strcmp(name,"Adjointx")==0) return AdjointxEnum;
+	else if (strcmp(name,"Adjointy")==0) return AdjointyEnum;
+	else if (strcmp(name,"Adjointz")==0) return AdjointzEnum;
+	else if (strcmp(name,"Collapse")==0) return CollapseEnum;
+	else if (strcmp(name,"Temperature")==0) return TemperatureEnum;
+	else if (strcmp(name,"Pressure")==0) return PressureEnum;
+	else if (strcmp(name,"NodeOnBed")==0) return NodeOnBedEnum;
+	else if (strcmp(name,"NodeOnSurface")==0) return NodeOnSurfaceEnum;
+	else if (strcmp(name,"NodeOnIceShelf")==0) return NodeOnIceShelfEnum;
+	else if (strcmp(name,"NodeOnIceSheet")==0) return NodeOnIceSheetEnum;
+	else if (strcmp(name,"ResetPenalties")==0) return ResetPenaltiesEnum;
+	else if (strcmp(name,"MeltingOffset")==0) return MeltingOffsetEnum;
+	else if (strcmp(name,"Type")==0) return TypeEnum;
+	else if (strcmp(name,"Friction")==0) return FrictionEnum;
+	else if (strcmp(name,"FractionIncrement")==0) return FractionIncrementEnum;
+	else if (strcmp(name,"Converged")==0) return ConvergedEnum;
+	else if (strcmp(name,"SegmentOnIceShelf")==0) return SegmentOnIceShelfEnum;
+	else if (strcmp(name,"Fill")==0) return FillEnum;
+	else if (strcmp(name,"Internal")==0) return InternalEnum;
+	else if (strcmp(name,"MaxPenetration")==0) return MaxPenetrationEnum;
+	else if (strcmp(name,"Boundary")==0) return BoundaryEnum;
+	else if (strcmp(name,"Dt")==0) return DtEnum;
+	else if (strcmp(name,"ArtDiff")==0) return ArtDiffEnum;
+	else if (strcmp(name,"CmNoiseDmp")==0) return CmNoiseDmpEnum;
+	else if (strcmp(name,"CmMinDmpValue")==0) return CmMinDmpValueEnum;
+	else if (strcmp(name,"CmMaxDmpValue")==0) return CmMaxDmpValueEnum;
+	else if (strcmp(name,"CmMinDmpSlope")==0) return CmMinDmpSlopeEnum;
+	else if (strcmp(name,"CmMaxDmpSlope")==0) return CmMaxDmpSlopeEnum;
+	else if (strcmp(name,"ControlType")==0) return ControlTypeEnum;
+	else if (strcmp(name,"ViscosityOvershoot")==0) return ViscosityOvershootEnum;
+	else if (strcmp(name,"MeanVel")==0) return MeanVelEnum;
+	else if (strcmp(name,"EpsVel")==0) return EpsVelEnum;
+	else if (strcmp(name,"StokesReconditioning")==0) return StokesReconditioningEnum;
+	else if (strcmp(name,"StabilizeConstraints")==0) return StabilizeConstraintsEnum;
+	else ISSMERROR("Enum %i not found",en);
+	}
Index: /issm/trunk/src/c/EnumDefinitions/SynchronizeMatlabEnum.sh
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/SynchronizeMatlabEnum.sh	(revision 3676)
+++ /issm/trunk/src/c/EnumDefinitions/SynchronizeMatlabEnum.sh	(revision 3677)
@@ -11,12 +11,12 @@
 cat EnumDefinitions.h | grep "Enum," |sed -e "s/,//g" | awk '{ printf "%s %s\n", NR, $0 }' > temp
 
-#Build File AnalysisTypeFromEnum.m
+#Build header of AnalysisTypeFromEnum.m{{{
 cat <<END > AnalysisTypeFromEnum.m
 function string=AnalysisTypeFromEnum(enum)
 %ANALYSISASENUM - get analysis type from Enum
 %
-%   file generated by src/c/SynchronizeMatlabEnum
-%   to be synchronized with the corresponding C Enum
-%   located in src/c/EnumDefinitions
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/SynchronizeMatlabEnum
+%            Please read src/c/README for more information
 %
 %   Usage:
@@ -26,4 +26,5 @@
 string='not found';
 END
+#}}}
 
 #get number of lines in temp
@@ -39,6 +40,5 @@
 	let ENUM=$ENUM-1
 
-	#write corresponding Matlab file
-	#print info
+	#print info {{{
 	if [ $i -lt 10 ]
 	then
@@ -55,10 +55,13 @@
 		fi
 	fi
-
+	#}}}
+	#Add case to matlabenum file{{{
 	cat <<END > $(echo $NAME".m")
 function macro=$(echo $NAME)()
 %$(echo `echo $NAME | sed -e "s/[a-z]/\U&/g"`) - Enum of $(echo `echo $NAME | sed -e "s/Enum//"`)
 %
-%   file generated by src/c/EnumDefinitions/SynchronizeMatlabEnum
+%   WARNING: DO NOT MODIFY THIS FILE
+%            this file has been automatically generated by src/c/SynchronizeMatlabEnum
+%            Please read src/c/README for more information
 %
 %   Usage:
@@ -67,6 +70,6 @@
 macro=$ENUM;
 END
-
-	#update AnalysisTypeFromEnum
+#}}}
+#Add case to AnalysisTypeFromEnum file{{{
 	if [ $(echo $NAME | grep AnalysisEnum) ]
 	then
@@ -78,4 +81,5 @@
 END
 	fi
+#}}}
 
 	#move file to m/enum
@@ -84,5 +88,5 @@
 done
 
-#end of AnalysisTypeFromEnum
+#Footer of AnalysisTypeFromEnum.m{{{
 cat <<END >> AnalysisTypeFromEnum.m
 
@@ -92,10 +96,12 @@
 end
 END
+#}}}
 
-#clean up
+#clean up{{{
 mv AnalysisTypeFromEnum.m $ISSM_DIR/src/m/enum/
 rm temp
-
-#print info
+#}}}
+#print info{{{
 printf "\r                                                                      "
 printf "\rdone!\n"
+#}}}
Index: /issm/trunk/src/c/EnumDefinitions/SynchronizeStringFromEnum.sh
===================================================================
--- /issm/trunk/src/c/EnumDefinitions/SynchronizeStringFromEnum.sh	(revision 3676)
+++ /issm/trunk/src/c/EnumDefinitions/SynchronizeStringFromEnum.sh	(revision 3677)
@@ -1,42 +1,52 @@
 #!/bin/bash
-#Synchronize StringFromEnum.cpp from EnumDefinition.h
+#Synchronize EnumAsString.cpp and StringAsEnum.cpp
 
 #first remove existing files
-rm StringFromEnum.cpp
-rm StringFromEnum.h
+rm EnumAsString.cpp StringAsEnum.cpp
 
-echo "Synchronizing StringFromEnum..."
+echo "Synchronizing EnumAsString..."
 #Get all lines of EnumDefinitions2.h which hold Enum, | remove all comas | add line number in the first column > put everything in file temp
 cat EnumDefinitions.h | grep "Enum," |sed -e "s/,//g" | awk '{ printf "%s %s\n", NR, $0 }' > temp
 
-#Build File StringFromEnum.h
-cat <<END > StringFromEnum.h
+#Build header of EnumAsString.cpp {{{1
+cat <<END > EnumAsString.cpp
 /*
-* \file StringFromEnum.h:
+* \file EnumAsString.cpp:
 * \brief: output string associated with enum
+*
+*   WARNING: DO NOT MODIFY THIS FILE
+*            this file has been automatically generated by SynchronizeStrings.sh
+*            Please read README for more information
 */
 
-#ifndef _STRINGFROMENUM_
-#define _STRINGFROMENUM_
+#include "../shared/shared.h"
+#include "../include/macros.h"
+#include "./EnumDefinition.h"
 
-char* StringFromEnum(int en);
-
-#endif
-END
-
-#Build File StringFromEnum.cpp
-cat <<END > StringFromEnum.cpp
-/*
-* \file StringFromEnum.cpp:
-* \brief: output string associated with enum
-*/
-
-#include "./StringFromEnum.h"
-
-char* StringFromEnum(int en){
+char* EnumAsString(int en){
 
 	switch(en){
 
 END
+#}}}
+#Build header of StringAsEnum.cpp {{{1
+cat <<END > StringAsEnum.cpp
+/*
+* \file StringAsEnum.cpp:
+* \brief: output enum associated with string
+*
+*   WARNING: DO NOT MODIFY THIS FILE
+*            this file has been automatically generated by SynchronizeStrings.sh
+*            Please read README for more information
+*/
+
+#include "../shared/shared.h"
+#include "../include/macros.h"
+#include "./EnumDefinition.h"
+
+int  StringAsEnum(char* name){
+
+END
+#}}}
 
 #get number of lines in temp
@@ -47,10 +57,11 @@
 
 	#Get name and enum of the line i
-	NAME=$(cat temp | grep "^[ ]*$i " | awk '{printf("%s",$2);}' | sed -e "s/Enum//g");
+	NAMEENUM=$(cat temp | grep "^[ ]*$i " | awk '{printf("%s",$2);}');
+	NAME=$(echo $NAMEENUM | sed -e "s/Enum//g")
 	ENUM=$i;
 	#offset Enum by one (Enum begins with 0 and not 1!)
 	let ENUM=$ENUM-1
 
-	#print info
+	#print info {{{
 	if [ $i -lt 10 ]
 	then
@@ -67,14 +78,28 @@
 		fi
 	fi
-
-	#Add corresponding lines
-	cat <<END >> StringFromEnum.cpp
-		case $ENUM :
+	#}}}
+	#Add case to EnumAsString.cpp {{{
+	cat <<END >> EnumAsString.cpp
+		case $NAMEENUM :
 			return "$NAME";
 END
+#}}}
+	#Add case to StringAsEnum.cpp {{{
+	if [ $i -eq 1 ]
+	then
+		cat <<END >> StringAsEnum.cpp
+	if (strcmp(name,"$NAME")==0) return $NAMEENUM;
+END
+	else
+		cat <<END >> StringAsEnum.cpp
+	else if (strcmp(name,"$NAME")==0) return $NAMEENUM;
+END
+	fi
+#}}}
+
 done
 
-#end of file
-cat <<END >> StringFromEnum.cpp
+#Add footer of of EnumAsString.cpp{{{1
+cat <<END >> EnumAsString.cpp
 		default :
 			ISSMERROR("Enum %i not found",en);
@@ -82,9 +107,18 @@
 }
 END
+#}}}
+#Add footer of of StringAsEnum.cpp{{{1
+cat <<END >> StringAsEnum.cpp
+	else ISSMERROR("Enum %i not found",en);
 
-#clean up
+}
+END
+#}}}
+
+#clean up{{{
 rm temp
-
-#print info
+#}}}
+#print info {{{
 printf "\r                                                                      "
 printf "\rdone!\n"
+#}}}
