Index: /issm/trunk/src/c/objects/Options/OptionsCell.cpp
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsCell.cpp	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsCell.cpp	(revision 7731)
@@ -0,0 +1,183 @@
+/*!\file OptionsCell.cpp
+ * \brief: implementation of the optionscell object
+ */
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../objects.h"
+#include "../../shared/shared.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+/*}}}*/
+
+/*Constructors/destructor/copy*/
+/*FUNCTION OptionsCell::OptionsCell(){{{1*/
+OptionsCell::OptionsCell(){
+
+	values    =NULL;
+
+}
+/*}}}*/
+/*FUNCTION OptionsCell::~OptionsCell(){{{1*/
+OptionsCell::~OptionsCell(){
+
+	if (values) {
+		delete values;
+		values    =NULL;
+	}
+
+}
+/*}}}*/
+
+/*Other*/
+/*FUNCTION OptionsCell::Echo {{{1*/
+void  OptionsCell::Echo(){
+
+	char  cstr[81];
+	bool  flag=true;
+
+	_printf_(flag,"OptionsCell Echo:\n");
+	OptionsObject::Echo();
+
+	if (values && size) {
+		StringFromSize(cstr,
+					   size,
+					   ndims);
+		_printf_(flag,"        values: %s %s\n" ,cstr,"cell");
+	}
+	else
+		_printf_(flag,"        values: [empty]\n" );
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::DeepEcho {{{1*/
+void  OptionsCell::DeepEcho(){
+
+	char  indent[81]="";
+
+	OptionsCell::DeepEcho(indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::DeepEcho {{{1*/
+void  OptionsCell::DeepEcho(char* indent){
+
+	int   i;
+	int*  dims;
+	char  indent2[81];
+	char  cstr[81];
+	bool  flag=true;
+
+	_printf_(flag,"%sOptionsCell DeepEcho:\n",indent);
+	OptionsObject::DeepEcho(indent);
+
+	strcpy(indent2,indent);
+	strcat(indent2,"  ");
+
+	if (values->Size()) {
+		dims=(int *) xmalloc(ndims*sizeof(int));
+		for (i=0; i<values->Size(); i++) {
+			ColumnWiseDimsFromIndex(dims,
+									i,
+									size,
+									ndims);
+			StringFromDims(cstr,
+						   dims,
+						   ndims);
+			_printf_(flag,"%s        values: %s begin\n" ,indent,cstr);
+			((OptionsObject *)values->GetObjectByOffset(i))->DeepEcho(indent2);
+			_printf_(flag,"%s        values: %s end\n"   ,indent,cstr);
+		}
+		xfree((void**)&dims);
+	}
+	else
+		_printf_(flag,"%s        values: [empty]\n" ,indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::Name {{{1*/
+char* OptionsCell::Name(){
+
+	return(OptionsObject::Name());
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::NumEl {{{1*/
+int   OptionsCell::NumEl(){
+
+	return(OptionsObject::NumEl());
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::NDims {{{1*/
+int   OptionsCell::NDims(){
+
+	return(OptionsObject::NDims());
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::Size {{{1*/
+int*  OptionsCell::Size(){
+
+	return(OptionsObject::Size());
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::Get {{{1*/
+//void* OptionsCell::Get(){
+
+//	;
+
+//	return;
+//}
+/*}}}*/
+
+/*FUNCTION OptionsCell::Id {{{1*/
+int   OptionsCell::Id(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::MyRank {{{1*/
+int   OptionsCell::MyRank(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::Marshall {{{1*/
+void  OptionsCell::Marshall(char** pmarshalled_dataset){
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::MarshallSize {{{1*/
+int   OptionsCell::MarshallSize(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::Demarshall {{{1*/
+void  OptionsCell::Demarshall(char** pmarshalled_dataset){
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::Enum {{{1*/
+int   OptionsCell::Enum(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsCell::copy {{{1*/
+Object* OptionsCell::copy(){
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/Options/OptionsCell.h
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsCell.h	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsCell.h	(revision 7731)
@@ -0,0 +1,49 @@
+/*! \file OptionsCell.h 
+ *  \brief: header file for optionscell object
+ */
+
+#ifndef _OPTIONSCELL_H_
+#define _OPTIONSCELL_H_
+
+/*Headers:{{{1*/
+#include "../../include/include.h"
+#include "../../shared/Exceptions/exceptions.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+#include "./OptionsObject.h"
+/*}}}*/
+
+class OptionsCell: public OptionsObject {
+
+	public:
+
+		DataSet* values;
+
+		/*OptionsCell constructors, destructors {{{1*/
+		OptionsCell();
+		~OptionsCell();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1*/
+		void  Echo();
+		void  DeepEcho();
+		void  DeepEcho(char* indent);
+		int   Id();
+		int   MyRank();
+		void  Marshall(char** pmarshalled_dataset);
+		int   MarshallSize();
+		void  Demarshall(char** pmarshalled_dataset);
+		int   Enum();
+		Object* copy();
+		/*}}}*/
+
+		/*virtual functions: */
+		char* Name();
+		int   NumEl();
+		int   NDims();
+		int*  Size();
+//		Object* Get();
+//  get by single index, multiple index, simple find, recursive find
+
+};
+#endif  /* _OPTIONSCELL_H */
+
Index: /issm/trunk/src/c/objects/Options/OptionsChar.cpp
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsChar.cpp	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsChar.cpp	(revision 7731)
@@ -0,0 +1,192 @@
+/*!\file OptionsChar.cpp
+ * \brief: implementation of the optionschar object
+ */
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../objects.h"
+#include "../../shared/shared.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+/*}}}*/
+
+/*Constructors/destructor/copy*/
+/*FUNCTION OptionsChar::OptionsChar(){{{1*/
+OptionsChar::OptionsChar(){
+
+	values    =NULL;
+
+}
+/*}}}*/
+/*FUNCTION OptionsChar::~OptionsChar(){{{1*/
+OptionsChar::~OptionsChar(){
+
+	if (values) xfree((void**)&values);
+
+}
+/*}}}*/
+
+/*Other*/
+/*FUNCTION OptionsChar::Echo {{{1*/
+void  OptionsChar::Echo(){
+
+	char  cstr[81];
+	bool  flag=true;
+
+	_printf_(flag,"OptionsChar Echo:\n");
+	OptionsObject::Echo();
+
+	if (values && size) {
+//		if (numel == 1) {
+		if (1) {
+//			_printf_(flag,"        values: \"%s\"\n" ,values[0]);
+			_printf_(flag,"        values: \"%s\"\n" ,values);
+		}
+		else {
+			StringFromSize(cstr,
+						   size,
+						   ndims);
+			_printf_(flag,"        values: %s %s\n" ,cstr,"char");
+		}
+	}
+	else
+		_printf_(flag,"        values: [empty]\n" );
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::DeepEcho {{{1*/
+void  OptionsChar::DeepEcho(){
+
+	char  indent[81]="";
+
+	OptionsChar::DeepEcho(indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::DeepEcho {{{1*/
+void  OptionsChar::DeepEcho(char* indent){
+
+	int   i;
+	int*  dims;
+	char  indent2[81];
+	char  cstr[81];
+	bool  flag=true;
+
+	_printf_(flag,"%sOptionsChar DeepEcho:\n",indent);
+	OptionsObject::DeepEcho(indent);
+
+	strcpy(indent2,indent);
+	strcat(indent2,"  ");
+
+	if (values) {
+//		if (numel == 1) {
+		if (1) {
+//			_printf_(flag,"%s        values: \"%s\"\n" ,indent,values[0]);
+			_printf_(flag,"%s        values: \"%s\"\n" ,indent,values);
+		}
+		else {
+			dims=(int *) xmalloc(ndims*sizeof(int));
+			for (i=0; i<numel; i++) {
+				RowWiseDimsFromIndex(dims,
+									 i,
+									 size,
+									 ndims);
+				StringFromDims(cstr,
+							   dims,
+							   ndims);
+				_printf_(flag,"%s        values%s: \"%s\"\n" ,indent,cstr,values[i]);
+			}
+			xfree((void**)&dims);
+		}
+	}
+	else
+		_printf_(flag,"%s        values: [empty]\n" ,indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::Name {{{1*/
+char* OptionsChar::Name(){
+
+	return(OptionsObject::Name());
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::NumEl {{{1*/
+int   OptionsChar::NumEl(){
+
+	return(OptionsObject::NumEl());
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::NDims {{{1*/
+int   OptionsChar::NDims(){
+
+	return(OptionsObject::NDims());
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::Size {{{1*/
+int*  OptionsChar::Size(){
+
+	return(OptionsObject::Size());
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::Get {{{1*/
+//void* OptionsChar::Get(){
+
+//	;
+
+//	return;
+//}
+/*}}}*/
+
+/*FUNCTION OptionsChar::Id {{{1*/
+int   OptionsChar::Id(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::MyRank {{{1*/
+int   OptionsChar::MyRank(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::Marshall {{{1*/
+void  OptionsChar::Marshall(char** pmarshalled_dataset){
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::MarshallSize {{{1*/
+int   OptionsChar::MarshallSize(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::Demarshall {{{1*/
+void  OptionsChar::Demarshall(char** pmarshalled_dataset){
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::Enum {{{1*/
+int   OptionsChar::Enum(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsChar::copy {{{1*/
+Object* OptionsChar::copy(){
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/Options/OptionsChar.h
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsChar.h	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsChar.h	(revision 7731)
@@ -0,0 +1,49 @@
+/*! \file OptionsChar.h 
+ *  \brief: header file for optionschar object
+ */
+
+#ifndef _OPTIONSCHAR_H_
+#define _OPTIONSCHAR_H_
+
+/*Headers:{{{1*/
+#include "../../include/include.h"
+#include "../../shared/Exceptions/exceptions.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+#include "./OptionsObject.h"
+/*}}}*/
+
+class OptionsChar: public OptionsObject {
+
+	public:
+
+		char* values;
+
+		/*OptionsChar constructors, destructors {{{1*/
+		OptionsChar();
+		~OptionsChar();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1*/
+		void  Echo();
+		void  DeepEcho();
+		void  DeepEcho(char* indent);
+		int   Id();
+		int   MyRank();
+		void  Marshall(char** pmarshalled_dataset);
+		int   MarshallSize();
+		void  Demarshall(char** pmarshalled_dataset);
+		int   Enum();
+		Object* copy();
+		/*}}}*/
+
+		/*virtual functions: */
+		char* Name();
+		int   NumEl();
+		int   NDims();
+		int*  Size();
+//		Object* Get();
+//  get by single index, multiple index, simple find, recursive find
+
+};
+#endif  /* _OPTIONSCHAR_H */
+
Index: /issm/trunk/src/c/objects/Options/OptionsDouble.cpp
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsDouble.cpp	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsDouble.cpp	(revision 7731)
@@ -0,0 +1,188 @@
+/*!\file OptionsDouble.cpp
+ * \brief: implementation of the optionsdouble object
+ */
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../objects.h"
+#include "../../shared/shared.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+/*}}}*/
+
+/*Constructors/destructor/copy*/
+/*FUNCTION OptionsDouble::OptionsDouble(){{{1*/
+OptionsDouble::OptionsDouble(){
+
+	values    =NULL;
+
+}
+/*}}}*/
+/*FUNCTION OptionsDouble::~OptionsDouble(){{{1*/
+OptionsDouble::~OptionsDouble(){
+
+	if (values) xfree((void**)&values);
+
+}
+/*}}}*/
+
+/*Other*/
+/*FUNCTION OptionsDouble::Echo {{{1*/
+void  OptionsDouble::Echo(){
+
+	char  cstr[81];
+	bool  flag=true;
+
+	_printf_(flag,"OptionsDouble Echo:\n");
+	OptionsObject::Echo();
+
+	if (values && size) {
+		if (numel == 1) {
+			_printf_(flag,"        values: %g\n" ,values[0]);
+		}
+		else {
+			StringFromSize(cstr,
+						   size,
+						   ndims);
+			_printf_(flag,"        values: %s %s\n" ,cstr,"double");
+		}
+	}
+	else
+		_printf_(flag,"        values: [empty]\n" );
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::DeepEcho {{{1*/
+void  OptionsDouble::DeepEcho(){
+
+	char  indent[81]="";
+
+	OptionsDouble::DeepEcho(indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::DeepEcho {{{1*/
+void  OptionsDouble::DeepEcho(char* indent){
+
+	int   i;
+	int*  dims;
+	char  indent2[81];
+	char  cstr[81];
+	bool  flag=true;
+
+	_printf_(flag,"%sOptionsDouble DeepEcho:\n",indent);
+	OptionsObject::DeepEcho(indent);
+
+	strcpy(indent2,indent);
+	strcat(indent2,"  ");
+
+	if (values) {
+		dims=(int *) xmalloc(ndims*sizeof(int));
+		if (numel == 1) {
+			_printf_(flag,"%s        values: %g\n" ,indent,values[0]);
+		}
+		else {
+			for (i=0; i<numel; i++) {
+				RowWiseDimsFromIndex(dims,
+									 i,
+									 size,
+									 ndims);
+				StringFromDims(cstr,
+							   dims,
+							   ndims);
+				_printf_(flag,"%s        values%s: %g\n" ,indent,cstr,values[i]);
+			}
+		}
+		xfree((void**)&dims);
+	}
+	else
+		_printf_(flag,"%s        values: [empty]\n" ,indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::Name {{{1*/
+char* OptionsDouble::Name(){
+
+	return(OptionsObject::Name());
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::NumEl {{{1*/
+int   OptionsDouble::NumEl(){
+
+	return(OptionsObject::NumEl());
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::NDims {{{1*/
+int   OptionsDouble::NDims(){
+
+	return(OptionsObject::NDims());
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::Size {{{1*/
+int*  OptionsDouble::Size(){
+
+	return(OptionsObject::Size());
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::Get {{{1*/
+//void* OptionsDouble::Get(){
+
+//	;
+
+//	return;
+//}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::Id {{{1*/
+int   OptionsDouble::Id(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::MyRank {{{1*/
+int   OptionsDouble::MyRank(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::Marshall {{{1*/
+void  OptionsDouble::Marshall(char** pmarshalled_dataset){
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::MarshallSize {{{1*/
+int   OptionsDouble::MarshallSize(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::Demarshall {{{1*/
+void  OptionsDouble::Demarshall(char** pmarshalled_dataset){
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::Enum {{{1*/
+int   OptionsDouble::Enum(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsDouble::copy {{{1*/
+Object* OptionsDouble::copy(){
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/Options/OptionsDouble.h
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsDouble.h	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsDouble.h	(revision 7731)
@@ -0,0 +1,49 @@
+/*! \file OptionsDouble.h 
+ *  \brief: header file for optionsdouble object
+ */
+
+#ifndef _OPTIONSDOUBLE_H_
+#define _OPTIONSDOUBLE_H_
+
+/*Headers:{{{1*/
+#include "../../include/include.h"
+#include "../../shared/Exceptions/exceptions.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+#include "./OptionsObject.h"
+/*}}}*/
+
+class OptionsDouble: public OptionsObject {
+
+	public:
+
+		double* values;
+
+		/*OptionsDouble constructors, destructors {{{1*/
+		OptionsDouble();
+		~OptionsDouble();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1*/
+		void  Echo();
+		void  DeepEcho();
+		void  DeepEcho(char* indent);
+		int   Id();
+		int   MyRank();
+		void  Marshall(char** pmarshalled_dataset);
+		int   MarshallSize();
+		void  Demarshall(char** pmarshalled_dataset);
+		int   Enum();
+		Object* copy();
+		/*}}}*/
+
+		/*virtual functions: */
+		char* Name();
+		int   NumEl();
+		int   NDims();
+		int*  Size();
+//		Object* Get();
+//  get by single index, multiple index, simple find, recursive find
+
+};
+#endif  /* _OPTIONSDOUBLE_H */
+
Index: /issm/trunk/src/c/objects/Options/OptionsLogical.cpp
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsLogical.cpp	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsLogical.cpp	(revision 7731)
@@ -0,0 +1,188 @@
+/*!\file OptionsLogical.cpp
+ * \brief: implementation of the optionslogical object
+ */
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../objects.h"
+#include "../../shared/shared.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+/*}}}*/
+
+/*Constructors/destructor/copy*/
+/*FUNCTION OptionsLogical::OptionsLogical(){{{1*/
+OptionsLogical::OptionsLogical(){
+
+	values    =NULL;
+
+}
+/*}}}*/
+/*FUNCTION OptionsLogical::~OptionsLogical(){{{1*/
+OptionsLogical::~OptionsLogical(){
+
+	if (values) xfree((void**)&values);
+
+}
+/*}}}*/
+
+/*Other*/
+/*FUNCTION OptionsLogical::Echo {{{1*/
+void  OptionsLogical::Echo(){
+
+	char  cstr[81];
+	bool  flag=true;
+
+	_printf_(flag,"OptionsLogical Echo:\n");
+	OptionsObject::Echo();
+
+	if (values && size) {
+		if (numel == 1) {
+			_printf_(flag,"        values: %s\n" ,(values[0] ? "true" : "false"));
+		}
+		else {
+			StringFromSize(cstr,
+						   size,
+						   ndims);
+			_printf_(flag,"        values: %s %s\n" ,cstr,"logical");
+		}
+	}
+	else
+		_printf_(flag,"        values: [empty]\n" );
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::DeepEcho {{{1*/
+void  OptionsLogical::DeepEcho(){
+
+	char  indent[81]="";
+
+	OptionsLogical::DeepEcho(indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::DeepEcho {{{1*/
+void  OptionsLogical::DeepEcho(char* indent){
+
+	int   i;
+	int*  dims;
+	char  indent2[81];
+	char  cstr[81];
+	bool  flag=true;
+
+	_printf_(flag,"%sOptionsLogical DeepEcho:\n",indent);
+	OptionsObject::DeepEcho(indent);
+
+	strcpy(indent2,indent);
+	strcat(indent2,"  ");
+
+	if (values) {
+		if (numel == 1) {
+			_printf_(flag,"%s        values: %s\n" ,indent,(values[0] ? "true" : "false"));
+		}
+		else {
+			dims=(int *) xmalloc(ndims*sizeof(int));
+			for (i=0; i<numel; i++) {
+				RowWiseDimsFromIndex(dims,
+									 i,
+									 size,
+									 ndims);
+				StringFromDims(cstr,
+							   dims,
+							   ndims);
+				_printf_(flag,"%s        values%s: %s\n" ,indent,cstr,(values[i] ? "true" : "false"));
+			}
+			xfree((void**)&dims);
+		}
+	}
+	else
+		_printf_(flag,"%s        values: [empty]\n" ,indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::Name {{{1*/
+char* OptionsLogical::Name(){
+
+	return(OptionsObject::Name());
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::NumEl {{{1*/
+int   OptionsLogical::NumEl(){
+
+	return(OptionsObject::NumEl());
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::NDims {{{1*/
+int   OptionsLogical::NDims(){
+
+	return(OptionsObject::NDims());
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::Size {{{1*/
+int*  OptionsLogical::Size(){
+
+	return(OptionsObject::Size());
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::Get {{{1*/
+//void* OptionsLogical::Get(){
+
+//	;
+
+//	return;
+//}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::Id {{{1*/
+int   OptionsLogical::Id(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::MyRank {{{1*/
+int   OptionsLogical::MyRank(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::Marshall {{{1*/
+void  OptionsLogical::Marshall(char** pmarshalled_dataset){
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::MarshallSize {{{1*/
+int   OptionsLogical::MarshallSize(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::Demarshall {{{1*/
+void  OptionsLogical::Demarshall(char** pmarshalled_dataset){
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::Enum {{{1*/
+int   OptionsLogical::Enum(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsLogical::copy {{{1*/
+Object* OptionsLogical::copy(){
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/Options/OptionsLogical.h
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsLogical.h	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsLogical.h	(revision 7731)
@@ -0,0 +1,49 @@
+/*! \file OptionsLogical.h 
+ *  \brief: header file for optionslogical object
+ */
+
+#ifndef _OPTIONSLOGICAL_H_
+#define _OPTIONSLOGICAL_H_
+
+/*Headers:{{{1*/
+#include "../../include/include.h"
+#include "../../shared/Exceptions/exceptions.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+#include "./OptionsObject.h"
+/*}}}*/
+
+class OptionsLogical: public OptionsObject {
+
+	public:
+
+		bool* values;
+
+		/*OptionsLogical constructors, destructors {{{1*/
+		OptionsLogical();
+		~OptionsLogical();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1*/
+		void  Echo();
+		void  DeepEcho();
+		void  DeepEcho(char* indent);
+		int   Id();
+		int   MyRank();
+		void  Marshall(char** pmarshalled_dataset);
+		int   MarshallSize();
+		void  Demarshall(char** pmarshalled_dataset);
+		int   Enum();
+		Object* copy();
+		/*}}}*/
+
+		/*virtual functions: */
+		char* Name();
+		int   NumEl();
+		int   NDims();
+		int*  Size();
+//		Object* Get();
+//  get by single index, multiple index, simple find, recursive find
+
+};
+#endif  /* _OPTIONSLOGICAL_H */
+
Index: /issm/trunk/src/c/objects/Options/OptionsObject.cpp
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsObject.cpp	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsObject.cpp	(revision 7731)
@@ -0,0 +1,168 @@
+/*!\file OptionsObject.cpp
+ * \brief: implementation of the optionsobject abstract object
+ */
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../objects.h"
+#include "../../shared/shared.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+/*}}}*/
+
+/*Constructors/destructor/copy*/
+/*FUNCTION OptionsObject::OptionsObject(){{{1*/
+OptionsObject::OptionsObject(){
+
+	name      =NULL;
+	numel     =0;
+	ndims     =0;
+	size      =NULL;
+
+}
+/*}}}*/
+/*FUNCTION OptionsObject::~OptionsObject(){{{1*/
+OptionsObject::~OptionsObject(){
+
+	if (size) xfree((void**)&size);
+	if (name) xfree((void**)&name);
+
+}
+/*}}}*/
+
+/*Other*/
+/*FUNCTION OptionsObject::Echo {{{1*/
+void  OptionsObject::Echo(){
+
+	char  cstr[81];
+	bool  flag=true;
+
+	_printf_(flag,"          name: \"%s\"\n" ,name);
+	_printf_(flag,"         numel: %d\n"     ,numel);
+	_printf_(flag,"         ndims: %d\n"     ,ndims);
+	if (size) {
+		StringFromSize(cstr,
+					   size,
+					   ndims);
+		_printf_(flag,"          size: %s\n" ,cstr);
+	}
+	else
+		_printf_(flag,"          size: [empty]\n" );
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::DeepEcho {{{1*/
+void  OptionsObject::DeepEcho(){
+
+	char  indent[81]="";
+
+	OptionsObject::DeepEcho(indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::DeepEcho {{{1*/
+void  OptionsObject::DeepEcho(char* indent){
+
+	char  cstr[81];
+	bool  flag=true;
+
+	_printf_(flag,"%s          name: \"%s\"\n" ,indent,name);
+	_printf_(flag,"%s         numel: %d\n"     ,indent,numel);
+	_printf_(flag,"%s         ndims: %d\n"     ,indent,ndims);
+	if (size) {
+		StringFromSize(cstr,
+					   size,
+					   ndims);
+		_printf_(flag,"%s          size: %s\n" ,indent,cstr);
+	}
+	else
+		_printf_(flag,"%s          size: [empty]\n" ,indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::Name {{{1*/
+char* OptionsObject::Name(){
+
+	return(name);
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::NumEl {{{1*/
+int   OptionsObject::NumEl(){
+
+	return(numel);
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::NDims {{{1*/
+int   OptionsObject::NDims(){
+
+	return(ndims);
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::Size {{{1*/
+int*  OptionsObject::Size(){
+
+	return(size);
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::Get {{{1*/
+//void* OptionsObject::Get(){
+
+//	;
+
+//	return;
+//}
+/*}}}*/
+
+/*FUNCTION OptionsObject::Id {{{1*/
+int   OptionsObject::Id(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::MyRank {{{1*/
+int   OptionsObject::MyRank(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::Marshall {{{1*/
+void  OptionsObject::Marshall(char** pmarshalled_dataset){
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::MarshallSize {{{1*/
+int   OptionsObject::MarshallSize(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::Demarshall {{{1*/
+void  OptionsObject::Demarshall(char** pmarshalled_dataset){
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::Enum {{{1*/
+int   OptionsObject::Enum(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsObject::copy {{{1*/
+Object* OptionsObject::copy(){
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/Options/OptionsObject.h
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsObject.h	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsObject.h	(revision 7731)
@@ -0,0 +1,52 @@
+/*! \file OptionsObject.h 
+ *  \brief: header file for optionsobject abstract object
+ */
+
+#ifndef _OPTIONSOBJECT_H_
+#define _OPTIONSOBJECT_H_
+
+/*Headers:{{{1*/
+#include "../../include/include.h"
+#include "../../shared/Exceptions/exceptions.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+#include "../Object.h"
+/*}}}*/
+
+class OptionsObject: public Object {
+
+	public:
+
+		char* name;
+		int   numel;
+		int   ndims;
+		int*  size;
+
+		/*OptionsObject constructors, destructors {{{1*/
+		OptionsObject();
+		~OptionsObject();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1*/
+		void  Echo();
+		void  DeepEcho();
+		void  DeepEcho(char* indent);
+		int   Id();
+		int   MyRank();
+		void  Marshall(char** pmarshalled_dataset);
+		int   MarshallSize();
+		void  Demarshall(char** pmarshalled_dataset);
+		int   Enum();
+		Object* copy();
+		/*}}}*/
+
+		/*virtual functions: */
+		virtual char* Name()=0;
+		virtual int   NumEl()=0;
+		virtual int   NDims()=0;
+		virtual int*  Size()=0;
+//		virtual Object* Get()=0;
+//  get by single index, multiple index, simple find, recursive find
+
+};
+#endif  /* _OPTIONSOBJECT_H */
+
Index: /issm/trunk/src/c/objects/Options/OptionsStruct.cpp
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsStruct.cpp	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsStruct.cpp	(revision 7731)
@@ -0,0 +1,193 @@
+/*!\file OptionsStruct.cpp
+ * \brief: implementation of the optionsstruct object
+ */
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../objects.h"
+#include "../../shared/shared.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+/*}}}*/
+
+/*Constructors/destructor/copy*/
+/*FUNCTION OptionsStruct::OptionsStruct(){{{1*/
+OptionsStruct::OptionsStruct(){
+
+	values    =NULL;
+
+}
+/*}}}*/
+/*FUNCTION OptionsStruct::~OptionsStruct(){{{1*/
+OptionsStruct::~OptionsStruct(){
+
+	int   i;
+
+	if (values) {
+		for (i=0; i<numel; i++) {
+			delete values[i];
+			values[i] =NULL;
+		}
+		xfree((void**)&values);
+	}
+
+}
+/*}}}*/
+
+/*Other*/
+/*FUNCTION OptionsStruct::Echo {{{1*/
+void  OptionsStruct::Echo(){
+
+	char  cstr[81];
+	bool  flag=true;
+
+	_printf_(flag,"OptionsStruct Echo:\n");
+	OptionsObject::Echo();
+
+	if (values && size) {
+		StringFromSize(cstr,
+					   size,
+					   ndims);
+		_printf_(flag,"        values: %s %s\n" ,cstr,"struct");
+	}
+	else
+		_printf_(flag,"        values: [empty]\n" );
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::DeepEcho {{{1*/
+void  OptionsStruct::DeepEcho(){
+
+	char  indent[81]="";
+
+	OptionsStruct::DeepEcho(indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::DeepEcho {{{1*/
+void  OptionsStruct::DeepEcho(char* indent){
+
+	int   i,j;
+	int*  dims;
+	char  indent2[81];
+	char  cstr[81];
+	bool  flag=true;
+
+	_printf_(flag,"%sOptionsStruct DeepEcho:\n",indent);
+	OptionsObject::DeepEcho(indent);
+
+	strcpy(indent2,indent);
+	strcat(indent2,"  ");
+
+	if (values) {
+		dims=(int *) xmalloc(ndims*sizeof(int));
+		for (i=0; i<numel; i++) {
+			ColumnWiseDimsFromIndex(dims,
+									i,
+									size,
+									ndims);
+			StringFromDims(cstr,
+						   dims,
+						   ndims);
+			if (values[i]->Size()) {
+				_printf_(flag,"%s        values: %s begin\n" ,indent,cstr);
+				for (j=0; j<values[i]->Size(); j++)
+					((OptionsObject *)values[i]->GetObjectByOffset(j))->DeepEcho(indent2);
+				_printf_(flag,"%s        values: %s end\n"   ,indent,cstr);
+			}
+			else
+				_printf_(flag,"%s        values: %s [empty]\n" ,indent,cstr);
+		}
+		xfree((void**)&dims);
+	}
+	else
+		_printf_(flag,"%s        values: [empty]\n" ,indent);
+
+	return;
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::Name {{{1*/
+char* OptionsStruct::Name(){
+
+	return(OptionsObject::Name());
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::NumEl {{{1*/
+int   OptionsStruct::NumEl(){
+
+	return(OptionsObject::NumEl());
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::NDims {{{1*/
+int   OptionsStruct::NDims(){
+
+	return(OptionsObject::NDims());
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::Size {{{1*/
+int*  OptionsStruct::Size(){
+
+	return(OptionsObject::Size());
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::Get {{{1*/
+//void* OptionsStruct::Get(){
+
+//	;
+
+//	return;
+//}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::Id {{{1*/
+int   OptionsStruct::Id(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::MyRank {{{1*/
+int   OptionsStruct::MyRank(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::Marshall {{{1*/
+void  OptionsStruct::Marshall(char** pmarshalled_dataset){
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::MarshallSize {{{1*/
+int   OptionsStruct::MarshallSize(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::Demarshall {{{1*/
+void  OptionsStruct::Demarshall(char** pmarshalled_dataset){
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::Enum {{{1*/
+int   OptionsStruct::Enum(){
+}
+/*}}}*/
+
+/*FUNCTION OptionsStruct::copy {{{1*/
+Object* OptionsStruct::copy(){
+}
+/*}}}*/
+
Index: /issm/trunk/src/c/objects/Options/OptionsStruct.h
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsStruct.h	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsStruct.h	(revision 7731)
@@ -0,0 +1,49 @@
+/*! \file OptionsStruct.h 
+ *  \brief: header file for optionsstruct object
+ */
+
+#ifndef _OPTIONSSTRUCT_H_
+#define _OPTIONSSTRUCT_H_
+
+/*Headers:{{{1*/
+#include "../../include/include.h"
+#include "../../shared/Exceptions/exceptions.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+#include "./OptionsObject.h"
+/*}}}*/
+
+class OptionsStruct: public OptionsObject {
+
+	public:
+
+		DataSet** values;
+
+		/*OptionsStruct constructors, destructors {{{1*/
+		OptionsStruct();
+		~OptionsStruct();
+		/*}}}*/
+		/*Object virtual functions definitions:{{{1*/
+		void  Echo();
+		void  DeepEcho();
+		void  DeepEcho(char* indent);
+		int   Id();
+		int   MyRank();
+		void  Marshall(char** pmarshalled_dataset);
+		int   MarshallSize();
+		void  Demarshall(char** pmarshalled_dataset);
+		int   Enum();
+		Object* copy();
+		/*}}}*/
+
+		/*virtual functions: */
+		char* Name();
+		int   NumEl();
+		int   NDims();
+		int*  Size();
+//		Object* Get();
+//  get by single index, multiple index, simple find, recursive find
+
+};
+#endif  /* _OPTIONSSTRUCT_H */
+
Index: /issm/trunk/src/c/objects/Options/OptionsUtilities.cpp
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsUtilities.cpp	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsUtilities.cpp	(revision 7731)
@@ -0,0 +1,152 @@
+/*!\file OptionsUtilities.cpp
+ * \brief: implementation of the options utilities
+ */
+
+/*Headers:*/
+/*{{{1*/
+#ifdef HAVE_CONFIG_H
+	#include "config.h"
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+
+#include "stdio.h"
+#include <string.h>
+#include "../objects.h"
+#include "../../shared/shared.h"
+#include "../../Container/Container.h"
+#include "../../include/include.h"
+/*}}}*/
+
+int ColumnWiseDimsFromIndex(int* dims,
+							int index,
+							int* size,
+							int ndims) {
+
+	int   i;
+	int   aprod=1;
+
+/*  check for index too large  */
+
+	for (i=0; i<ndims; i++)
+		aprod*=size[i];
+
+	if (index >= aprod)
+		_error_("Index %d exceeds number of elements %d.",index,aprod);
+
+/*  calculate the dimensions (being careful of integer division)  */
+
+	for (i=ndims-1; i>=0; i--) {
+		aprod=(int)(((double)aprod+0.5)/(double)size[i]);
+		dims[i]=(int)floor(((double)index+0.5)/(double)aprod);
+		index-=dims[i]*aprod;
+	}
+
+	return(0);
+}
+
+int IndexFromColumnWiseDims(int* dims,
+							int* size,
+							int ndims) {
+
+	int   i;
+	int   index=0;
+
+/*  check for any dimension too large  */
+
+	for (i=0; i<ndims; i++)
+		if (dims[i] >= size[i])
+			_error_("Dimension %d of %d exceeds size of %d.",i,dims[i],size[i]);
+
+/*  calculate the index  */
+
+	for (i=ndims-1; i>=0; i--) {
+		index*=size[i];
+		index+=dims[i];
+	}
+
+	return(index);
+}
+
+
+int RowWiseDimsFromIndex(int* dims,
+						 int index,
+						 int* size,
+						 int ndims) {
+
+	int   i;
+	int   aprod=1;
+
+/*  check for index too large  */
+
+	for (i=0; i<ndims; i++)
+		aprod*=size[i];
+
+	if (index >= aprod)
+		_error_("Index %d exceeds number of elements %d.",index,aprod);
+
+/*  calculate the dimensions (being careful of integer division)  */
+
+	for (i=0; i<ndims; i++) {
+		aprod=(int)(((double)aprod+0.5)/(double)size[i]);
+		dims[i]=(int)floor(((double)index+0.5)/(double)aprod);
+		index-=dims[i]*aprod;
+	}
+
+	return(0);
+}
+
+
+int IndexFromRowWiseDims(int* dims,
+						 int* size,
+						 int ndims) {
+
+	int   i;
+	int   index=0;
+
+/*  check for any dimension too large  */
+
+	for (i=0; i<ndims; i++)
+		if (dims[i] >= size[i])
+			_error_("Dimension %d of %d exceeds size of %d.",i,dims[i],size[i]);
+
+/*  calculate the index  */
+
+	for (i=0; i<ndims; i++) {
+		index*=size[i];
+		index+=dims[i];
+	}
+
+	return(index);
+}
+
+
+int StringFromDims(char* cstr,
+				   int* dims,
+				   int ndims) {
+
+	int   i;
+
+	sprintf(&cstr[0],"[");
+	for (i=0; i<ndims-1; i++)
+		sprintf(&cstr[strlen(cstr)],"%d,",dims[i]);
+	sprintf(&cstr[strlen(cstr)],"%d]",dims[ndims-1]);
+
+	return(0);
+}
+
+
+int StringFromSize(char* cstr,
+				   int* size,
+				   int ndims) {
+
+	int   i;
+
+	sprintf(&cstr[0],"[");
+	for (i=0; i<ndims-1; i++)
+		sprintf(&cstr[strlen(cstr)],"%dx",size[i]);
+	sprintf(&cstr[strlen(cstr)],"%d]",size[ndims-1]);
+
+	return(0);
+}
+
Index: /issm/trunk/src/c/objects/Options/OptionsUtilities.h
===================================================================
--- /issm/trunk/src/c/objects/Options/OptionsUtilities.h	(revision 7731)
+++ /issm/trunk/src/c/objects/Options/OptionsUtilities.h	(revision 7731)
@@ -0,0 +1,38 @@
+/*! \file OptionsUtilities.h 
+ *  \brief: header file for options utilities
+ */
+
+#ifndef _OPTIONSUTILITIES_H_
+#define _OPTIONSUTILITIES_H_
+
+/*Headers:{{{1*/
+#include "../../include/include.h"
+#include "../../shared/Exceptions/exceptions.h"
+#include "../../EnumDefinitions/EnumDefinitions.h"
+
+#include "./OptionsObject.h"
+/*}}}*/
+
+int ColumnWiseDimsFromIndex(int* dims,
+							int index,
+							int* size,
+							int ndims);
+int IndexFromColumnWiseDims(int* dims,
+							int* size,
+							int ndims);
+int RowWiseDimsFromIndex(int* dims,
+						 int index,
+						 int* size,
+						 int ndims);
+int IndexFromRowWiseDims(int* dims,
+						 int* size,
+						 int ndims);
+int StringFromDims(char* cstr,
+				   int* dims,
+				   int ndims);
+int StringFromSize(char* cstr,
+				   int* size,
+				   int ndims);
+
+#endif  /* _OPTIONSUTILITIES_H */
+
