/*!\file: Inputs.h
 * \brief prototypes for Inputs.h
 */ 

#ifndef _CONTAINER_INPUTS_H_
#define  _CONTAINER_INPUTS_H_

/*forward declarations */
class Materials;
class Parameters;
class Elements;
class Vertices;
class Loads;
class Nodes;
class DataSet;
class Input;
class Node;
class GaussTria;
class GaussPenta;

class Inputs: public DataSet{

	public:

		/*constructors, destructors: {{{*/
		Inputs();
		~Inputs();

		/*}}}*/
		/*numerics: {{{*/
		int     AddInput(Input* in_input);
		void    ChangeEnum(int enumtype,int new_enumtype);
		void    ConstrainMin(int constrain_enum, IssmDouble minimum);
		int     DeleteInput(int enum_type);
		void    DuplicateInput(int original_enum,int new_enum);
		Input*  GetInput(int enum_name);
		Inputs* SpawnTriaInputs(int* indices);
		void    AXPY(int MeshYEnum, IssmDouble scalar, int MeshXEnum);
		IssmDouble  InfinityNorm(int enumtype);
		IssmDouble  Max(int enumtype);
		IssmDouble  MaxAbs(int enumtype);
		IssmDouble  Min(int enumtype);
		IssmDouble  MinAbs(int enumtype);
		
		void GetInputAverage(IssmDouble* pvalue, int enum_type);
		void GetInputValue(bool* pvalue,int enum_type);
		void GetInputValue(int* pvalue,int enum_type);
		void GetInputValue(IssmDouble* pvalue,int enum_type);

		void Configure(Parameters* parameters);
		/*}}}*/

};

#endif //ifndef _INPUTS_H_
