Index: issm/trunk-jpl/src/c/Makefile.am
===================================================================
--- issm/trunk-jpl/src/c/Makefile.am	(revision 24204)
+++ issm/trunk-jpl/src/c/Makefile.am	(revision 24205)
@@ -90,4 +90,5 @@
 					./classes/Vertex.cpp\
 					./classes/Hook.cpp\
+					./classes/Radar.cpp\
 					./classes/ExternalResults/Results.cpp\
 					./classes/Elements/Element.cpp\
Index: issm/trunk-jpl/src/c/classes/Elements/Element.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 24204)
+++ issm/trunk-jpl/src/c/classes/Elements/Element.h	(revision 24205)
@@ -219,4 +219,6 @@
 		virtual void       ComputeStressTensor(void)=0;
 		virtual void       ComputeEsaStrainAndVorticity(void)=0;
+	   virtual void		 ComputeRadarAttenuation(void){_error_("not implemented yet");}; 
+		virtual void       ComputeRadarPower(void)=0;		
 		virtual void       Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters)=0;
 		virtual void       ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M)=0;
Index: issm/trunk-jpl/src/c/classes/Elements/Penta.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 24204)
+++ issm/trunk-jpl/src/c/classes/Elements/Penta.cpp	(revision 24205)
@@ -784,4 +784,197 @@
 	/*Clean up and return*/
 	delete gauss;
+}
+/*}}}*/
+void       Penta::ComputeRadarAttenuation(){/*{{{*/
+   IssmDouble  xyz_list[NUMVERTICES][3];
+	IssmDouble  eps0=8.85418782e-12;
+	IssmDouble  eps_ice=3.17;
+	IssmDouble  e=2.7183;
+	IssmDouble  c=299792458;
+	IssmDouble  k=1.3806488e-23;
+	IssmDouble  eVtoJ=1.6e-19;
+	IssmDouble  Tr_M07=252.1500;
+	IssmDouble  Tr_W97=258.1500; 
+	IssmDouble  sig_ice_M07=9.2;
+	IssmDouble	sig_ice_W97=9; 
+	IssmDouble  cond_H_M07=3.2; 
+	IssmDouble  cond_H_W97=4; 
+	IssmDouble  cond_Cl_M07=0.43; 
+	IssmDouble  cond_Cl_W97=0.55; 
+	IssmDouble  cond_NH_M07=0.8; 
+	IssmDouble  cond_NH_W97=1; 
+	IssmDouble  E_M07=8.1600e-20;
+	IssmDouble  E_W97=9.2800e-20; 
+	IssmDouble  E_H_M07=3.2000e-20;
+	IssmDouble  E_H_W97=3.3600e-20;
+	IssmDouble  E_Cl_M07=3.0400e-20;
+	IssmDouble  E_Cl_W97=3.6800e-20; 
+	IssmDouble  E_NH=3.6800e-20;
+	/*IssmDouble  mol_H_hol=1.6; 
+	IssmDouble  mol_Cl_hol=0.4; 
+	IssmDouble  mol_NH_hol=0.5; 
+	IssmDouble  mol_H_lgp=0.2; 
+	IssmDouble  mol_Cl_lgp=1.8; 
+	IssmDouble  mol_NH_lgp=0.4; */
+	IssmDouble  radar_ice_period; 
+	IssmDouble  mol_H, mol_Cl, mol_NH; 
+	IssmDouble  attenuation_rate_macgregor[NUMVERTICES];
+	IssmDouble  attenuation_rate_wolff[NUMVERTICES]; 
+	IssmDouble  temperature, attenuation_rate_M07_pureice, attenuation_rate_M07_H, attenuation_rate_M07_Cl, attenuation_rate_M07_NH;
+	IssmDouble	attenuation_rate_W97_pureice, attenuation_rate_W97_H, attenuation_rate_W97_Cl, attenuation_rate_W97_NH;
+	IssmDouble m1, m2, m3, m4, m5, m6, m7, m8;
+	IssmDouble  w2, w3, w4, w5, w6, w7, w8; 
+	GaussPenta* gauss=NULL; 
+
+   /* Get node coordinates and dof list: */
+	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+
+	/*Retrieve all inputs we will be needing: */
+	Input* temp_input=inputs->GetInput(TemperatureEnum); _assert_(temp_input);
+	//Input* ice_period_input=inputs->GetInput(RadarIcePeriodEnum); _assert_(ice_period_input); 
+	
+	/* Start looping on the number of vertices: */
+	gauss=new GaussPenta();
+	for (int iv=0;iv<NUMVERTICES;iv++){
+		gauss->GaussVertex(iv);
+
+   /*Get ice temperature: */
+		temp_input->GetInputValue(&temperature,gauss);
+//		ice_period_input->GetInputValue(&radar_ice_period,gauss); 
+
+	/*Ice period condition: */
+	//	if (radar_ice_period>0.){
+			mol_H=1.6;
+			mol_Cl=0.4;
+			mol_NH=0.5;
+	//	}
+	//	else{
+	//		mol_H=0.2; 
+	//		mol_Cl=1.8;
+	//		mol_NH=0.4;
+	//	}
+
+	/*Compute M07 radar conductivity constant: */
+		m1=(10*log10(e))/(1000*eps0*sqrt(eps_ice)*c);
+		m2=E_M07/k;
+		m3=cond_H_M07*mol_H;
+		m4=E_H_M07/k;
+		m5=cond_Cl_M07*mol_Cl;
+		m6=E_Cl_M07/k;
+		m7=cond_NH_M07*mol_NH;
+		m8=E_NH/k;
+
+	/*Compute MacGregor attenuation rate: */
+		attenuation_rate_M07_pureice=m1*sig_ice_M07*exp(m2*((1/Tr_M07)-(1/temperature))); 
+		attenuation_rate_M07_H=m3*exp(m4*((1/Tr_M07)-(1/temperature)));
+		attenuation_rate_M07_Cl=m5*exp(m6*((1/Tr_M07)-(1/temperature)));
+		attenuation_rate_M07_NH=m7*exp(m8*((1/Tr_M07)-(1/temperature)));
+		attenuation_rate_macgregor[iv]=attenuation_rate_M07_pureice+attenuation_rate_M07_H+attenuation_rate_M07_Cl+attenuation_rate_M07_NH; 
+
+	/*Compute W97 radar conductivity constant: */ 
+		w2=E_W97/k;
+		w3=cond_H_W97*mol_H;
+		w4=E_H_W97/k;
+		w5=cond_Cl_W97*mol_Cl;
+		w6=E_Cl_W97/k;
+		w7=cond_NH_W97*mol_NH;
+		w8=E_NH/k;
+
+	/*Compute Wolff attenuation rate: */
+    attenuation_rate_W97_pureice=m1*sig_ice_W97*exp(w2*((1/Tr_W97)-(1/temperature)));
+	 attenuation_rate_W97_H=w3*exp(w4*((1/Tr_W97)-(1/temperature)));
+	 attenuation_rate_W97_Cl=w5*exp(w6*((1/Tr_W97)-(1/temperature)));
+	 attenuation_rate_W97_NH=w7*exp(w8*((1/Tr_W97)-(1/temperature)));
+	 attenuation_rate_wolff[iv]=attenuation_rate_W97_pureice+attenuation_rate_W97_H+attenuation_rate_W97_Cl+attenuation_rate_W97_NH;
+	}
+
+   /*Add Attenuation rate results into inputs*/
+	this->inputs->AddInput(new PentaInput(RadarAttenuationMacGregorEnum,&attenuation_rate_macgregor[0],P1Enum));
+	this->inputs->AddInput(new PentaInput(RadarAttenuationWolffEnum,&attenuation_rate_wolff[0],P1Enum));
+
+   /*Clean up and return*/
+	delete gauss;
+}
+/*}}}*/
+void       Penta::ComputeRadarPower(){/*{{{*/   
+	IssmDouble  xyz_list[NUMVERTICES][3];
+	IssmDouble  power_M07[NUMVERTICES]; 
+	IssmDouble  power_W97[NUMVERTICES]; 
+	IssmDouble	depth[NUMVERTICES];
+	IssmDouble  aircraft_elev=0.5; 
+	IssmDouble  eps_ice=3.15;
+	IssmDouble  t_tp=273.15;			/* triple point temperature [K] */
+	IssmDouble  p_tp=611.73;			/* water pressure [Pa] */
+	IssmDouble  gamma=7.4200e-07;	/* Clausius-Clapeyron constant [K/kPa] */
+	IssmDouble  attenuation_rate_macgregor, attenuation_rate_wolff, attenuation_total_M07, attenuation_total_W97; 
+	IssmDouble  thickness, surface, z, temperature, geometric_loss, reflectivity; 
+	IssmDouble  rho_ice, gravity, pressure, pressure_melting_pt, frozen_temp, basal_temp, basal_pmp;  
+	GaussPenta* gauss=NULL;
+
+   /* Get node coordinates and dof list: */
+	::GetVerticesCoordinates(&xyz_list[0][0],vertices,NUMVERTICES);
+
+	/*Retrieve all inputs we will be needing: */
+   Input* atten_input_M07=inputs->GetInput(RadarAttenuationMacGregorEnum); _assert_(atten_input_M07);
+	Input* atten_input_W97=inputs->GetInput(RadarAttenuationWolffEnum); _assert_(atten_input_W97);
+	Input* surf_input=inputs->GetInput(SurfaceEnum); _assert_(surf_input);
+	Input* thick_input=inputs->GetInput(ThicknessEnum); _assert_(thick_input);
+	Input* temp_input=inputs->GetInput(TemperatureEnum); _assert_(temp_input);
+
+	/* Start looping on the number of vertices: */
+   gauss=new GaussPenta();
+	for (int iv=0;iv<NUMVERTICES;iv++){
+		gauss->GaussVertex(iv);
+	
+	/*Get all the inputs: */
+		atten_input_M07->GetInputValue(&attenuation_rate_macgregor,gauss);
+		atten_input_W97->GetInputValue(&attenuation_rate_wolff,gauss);
+		thick_input->GetInputValue(&thickness,gauss);
+		temp_input->GetInputValue(&temperature,gauss);
+		surf_input->GetInputValue(&surface,gauss);
+
+	/*Compute depth below the ice surface: */
+		z=xyz_list[iv][2];
+		depth[iv]=(surface-z)/1e3;
+	
+	/*Compute total attenuation: */ 
+		attenuation_total_M07=attenuation_rate_macgregor*depth[iv]; 
+		attenuation_total_W97=attenuation_rate_wolff*depth[iv];
+	
+	/*Compute geometric loss: */ 
+		geometric_loss=10*log10((depth[iv]+aircraft_elev)/sqrt(eps_ice)); 
+	
+	/*Compute radar power: */
+		power_M07[iv]=-geometric_loss-attenuation_total_M07;
+		power_W97[iv]=-geometric_loss-attenuation_total_W97; 
+	
+		/*Identify basal elements: */
+		if(this->IsOnBase() && iv<NUMVERTICES2D){
+
+			/*Compute pressure melting point: */ 
+			rho_ice=FindParam(MaterialsRhoIceEnum);
+			gravity=FindParam(ConstantsGEnum);
+			pressure=rho_ice*gravity*thickness; 	
+			pressure_melting_pt=t_tp-gamma*(pressure-p_tp); 
+			if((temperature-pressure_melting_pt)<=-1){
+				reflectivity=-40;
+			}
+			else if((temperature-pressure_melting_pt)>-1 && (temperature-pressure_melting_pt)<0){ 
+				reflectivity=0;
+			}
+			else{
+				reflectivity=70;
+			}
+			power_M07[iv]=power_M07[iv]+reflectivity;
+			power_W97[iv]=power_W97[iv]+reflectivity;
+		} 
+	} 
+	 
+	 /*Add power results into inputs*/
+		this->inputs->AddInput(new PentaInput(RadarPowerMacGregorEnum,&power_M07[0],P1Enum));
+		this->inputs->AddInput(new PentaInput(RadarPowerWolffEnum,&power_W97[0],P1Enum));
+
+		/*Clean up and return*/
+		delete gauss;
 }
 /*}}}*/
Index: issm/trunk-jpl/src/c/classes/Elements/Penta.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 24204)
+++ issm/trunk-jpl/src/c/classes/Elements/Penta.h	(revision 24205)
@@ -58,4 +58,6 @@
 		void           ComputeSigmaNN(){_error_("not implemented yet");};
 		void           ComputeStressTensor();
+		void				ComputeRadarAttenuation();
+		void           ComputeRadarPower(); 
 		void           Configure(Elements* elements,Loads* loads,Nodes* nodes,Vertices* vertices,Materials* materials,Parameters* parameters);
 		void           ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M);
Index: issm/trunk-jpl/src/c/classes/Elements/Seg.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 24204)
+++ issm/trunk-jpl/src/c/classes/Elements/Seg.h	(revision 24205)
@@ -49,4 +49,6 @@
 		void        ComputeSigmaNN(){_error_("not implemented yet");};
 		void        ComputeStressTensor(){_error_("not implemented yet");};
+		void        ComputeRadarAttenuation(){_error_("not implemented yet");};
+		void        ComputeRadarPower(){_error_("not implemented yet");};
 		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters){_error_("not implemented yet");};
 		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M){_error_("not implemented yet");};
Index: issm/trunk-jpl/src/c/classes/Elements/Tetra.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 24204)
+++ issm/trunk-jpl/src/c/classes/Elements/Tetra.h	(revision 24205)
@@ -49,4 +49,6 @@
 		void        ComputeDeviatoricStressTensor(){_error_("not implemented yet");};
 		void        ComputeEsaStrainAndVorticity(){_error_("not implemented yet!");};
+		void        ComputeRadarAttenuation(){_error_("not implemented yet!");};
+		void        ComputeRadarPower(){_error_("not implemented yet");};
 		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters);
 		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N,int M){_error_("not implemented yet");};
Index: issm/trunk-jpl/src/c/classes/Elements/Tria.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 24204)
+++ issm/trunk-jpl/src/c/classes/Elements/Tria.h	(revision 24205)
@@ -63,4 +63,6 @@
 		void        ComputeStressTensor();
 		void        ComputeSurfaceNormalVelocity();
+		void        ComputeRadarAttenuation(){_error_("not implemented yet");};
+		void        ComputeRadarPower(){_error_("not implemented yet");};		
 		void        Configure(Elements* elements,Loads* loads,Nodes* nodesin,Vertices* verticesin,Materials* materials,Parameters* parameters);
 		void        ControlInputSetGradient(IssmDouble* gradient,int enum_type,int control_index,int offset,int N, int M);
Index: issm/trunk-jpl/src/c/classes/FemModel.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 24204)
+++ issm/trunk-jpl/src/c/classes/FemModel.cpp	(revision 24205)
@@ -2216,5 +2216,5 @@
 /*}}}*/
 void FemModel::RequestedOutputsx(Results **presults,char** requested_outputs, int numoutputs, bool save_results){/*{{{*/
-
+	
 	/*Intermediaries*/
 	bool        isvec,results_on_nodes;
Index: issm/trunk-jpl/src/c/classes/Radar.cpp
===================================================================
--- issm/trunk-jpl/src/c/classes/Radar.cpp	(revision 24205)
+++ issm/trunk-jpl/src/c/classes/Radar.cpp	(revision 24205)
@@ -0,0 +1,86 @@
+/*!\file Radar.cpp
+ * \brief: Radar Object
+ */
+
+/*Headers:*/
+#ifdef HAVE_CONFIG_H
+   #include <config.h>
+#else
+#error "Cannot compile with HAVE_CONFIG_H symbol! run configure first!"
+#endif
+#include "./classes.h"
+#include "./Elements/Element.h"
+#include "./Elements/Elements.h"
+#include "./ExternalResults/ExternalResult.h"
+#include "./ExternalResults/Results.h"
+#include "../datastructures/datastructures.h"
+#include "./FemModel.h"
+#include "../classes/Params/Parameters.h"
+#include "../classes/Inputs/Input.h"
+#include "../classes/gauss/Gauss.h"
+#include "./Radar.h"
+
+/*Radar constructors, destructors :*/
+Radar::Radar(){/*{{{*/
+	this->definitionenum = -1;
+	this->name = NULL;
+}
+/*}}}*/
+Radar::Radar(char* in_name, int in_definitionenum){/*{{{*/	
+	this->definitionenum=in_definitionenum;
+	this->name		= xNew<char>(strlen(in_name)+1);
+	xMemCpy<char>(this->name,in_name,strlen(in_name)+1);
+}
+/*}}}*/
+Radar::~Radar(){/*{{{*/
+	if(this->name)xDelete(this->name);
+}
+/*}}}*/
+/*Object virtual function resolution: */
+Object* Radar::copy() {/*{{{*/
+	Radar* out =new Radar(this->name,this->definitionenum);
+	return (Object*)out;
+}
+/*}}}*/
+void Radar::DeepEcho(void){/*{{{*/
+	this->Echo();
+}
+/*}}}*/
+void Radar::Echo(void){/*{{{*/
+	_printf_(" Radar: " << name << " " << this->definitionenum << "\n");
+}
+/*}}}*/
+int Radar::Id(void){/*{{{*/
+	return -1;
+}
+/*}}}*/
+void Radar::Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction){/*{{{*/
+	_error_("not implemented yet!"); 
+} 
+/*}}}*/
+int Radar::ObjectEnum(void){/*{{{*/
+	return RadarEnum;
+}
+/*}}}*/
+/*Definition virtual function resolutoin: */
+int Radar::DefinitionEnum(){/*{{{*/
+	return this->definitionenum;
+}
+/*}}}*/
+char* Radar::Name(){/*{{{*/
+	char* name2=xNew<char>(strlen(this->name)+1);
+	xMemCpy(name2,this->name,strlen(this->name)+1);
+	return name2;
+}
+/*}}}*/
+IssmDouble Radar::Response(FemModel* femmodel){/*{{{*/	
+	int i; 
+	for(i=0;i<femmodel->elements->Size();i++){
+		Element* element=(Element*)femmodel->elements->GetObjectByOffset(i);
+		element->ComputeRadarAttenuation();
+		element->ComputeRadarPower(); 
+	}
+	return 0.;
+}
+	/*}}}*/
+
Index: issm/trunk-jpl/src/c/classes/Radar.h
===================================================================
--- issm/trunk-jpl/src/c/classes/Radar.h	(revision 24205)
+++ issm/trunk-jpl/src/c/classes/Radar.h	(revision 24205)
@@ -0,0 +1,41 @@
+/*!\file Radar.h
+ * \brief: header file for Radar object
+ */
+
+#ifndef _RADAR_H_
+#define _RADAR_H_
+
+/*Headers:*/
+#include "./Definition.h"
+#include "./FemModel.h"
+
+IssmDouble OutputDefinitionsResponsex(FemModel* femmodel,int output_enum);
+void  GetVectorFromInputsx( IssmDouble** pvector, int* pvector_size, FemModel* femmodel,int name);
+
+class Radar: public Object, public Definition{
+
+	public: 
+		char* name;
+		int	definitionenum;
+		
+		/*Radar constructors, destructors :*/
+		Radar();
+		Radar(char* in_name, int in_definitionenum);
+		~Radar();
+		
+		/*Object virtual function resolutoin: */
+		Object* copy();
+		void DeepEcho(void);
+		void Echo(void);
+		int Id(void);
+		void Marshall(char** pmarshalled_data,int* pmarshalled_data_size, int marshall_direction);
+		int ObjectEnum(void);
+		
+		/*Definition virtual function resolutoin: */
+		int DefinitionEnum();
+		char* Name();
+		IssmDouble Response(FemModel* femmodel);
+		IssmDouble ComputeRadarAttenuation(Element* element);
+		IssmDouble ComputeRadarPower(Element* element);
+};
+#endif  /* _RADAR_H_ */
Index: issm/trunk-jpl/src/c/classes/classes.h
===================================================================
--- issm/trunk-jpl/src/c/classes/classes.h	(revision 24204)
+++ issm/trunk-jpl/src/c/classes/classes.h	(revision 24205)
@@ -26,4 +26,5 @@
 #include "./Massconaxpby.h"
 #include "./Regionaloutput.h"
+#include "./Radar.h"
 
 /*Constraints: */
Index: issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp
===================================================================
--- issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 24204)
+++ issm/trunk-jpl/src/c/modules/ModelProcessorx/CreateOutputDefinitions.cpp	(revision 24205)
@@ -18,5 +18,4 @@
 	/*Create output_definitions dataset: */
 	output_definitions=new DataSet();
-
 	char** out_strings = NULL;
 	iomodel->FetchData(&out_strings,&num_output_definitions,"md.outputdefinition.list");
@@ -27,5 +26,5 @@
 		}
 	}
-	// free data
+	// free data:
 	for(int i=0;i<num_output_definitions;i++) xDelete<char>(out_strings[i]);
 	xDelete<char*>(out_strings);
@@ -221,5 +220,5 @@
 				}
 
-				/*Free ressources:*/
+				  /*Free ressources:*/
 				for(j=0;j<num_cfsurfacesquares;j++){
 					char* string=NULL;
@@ -634,8 +633,27 @@
 				xDelete<int>(cost_functions_weights_N);
 				xDelete<IssmDouble*>(cost_functions_weights);
-			}
+			
 			/*}}}*/
+			}
+			else if (output_definition_enums[i]==RadarEnum){		
+				/*Deal with radar: {{{*/
+				int    numout;
+				char **radar_name_s             = NULL;
+				char **radar_definitionstring_s = NULL;
+				int  **radar_ice_period_s       = NULL;
+
+				/*Fetch name and definition, etc ... (see src/m/classes/radar.m): */
+				iomodel->FetchMultipleData(&radar_definitionstring_s,&numout,"md.radar.definitionstring");
+				iomodel->FetchMultipleData(&radar_name_s,&numout,"md.radar.name");
+				if(numout>1) _error_("not suppored yet"); 
+				/*Fetch necessary inputs for calculation*/
+				//iomodel->FetchDataToInput(elements,"md.ice_period",RadarIcePeriodEnum);
+
+				/*Add to output definitions*/
+				output_definitions->AddObject(new Radar(radar_name_s[0],StringToEnumx(radar_definitionstring_s[0])));
+				/*}}}*/ 
+			}
 		else _error_("output definition enum " << EnumToStringx(output_definition_enums[i]) << " not supported yet!");
-		}
+		}		
 	}
 	parameters->AddObject(new DataSetParam(OutputdefinitionEnum,output_definitions));
Index: issm/trunk-jpl/src/c/shared/Enum/Enum.vim
===================================================================
--- issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 24204)
+++ issm/trunk-jpl/src/c/shared/Enum/Enum.vim	(revision 24205)
@@ -498,4 +498,5 @@
 syn keyword cConstant DamageFEnum
 syn keyword cConstant DegreeOfChannelizationEnum
+syn keyword cConstant DepthBelowSurfaceEnum
 syn keyword cConstant DeviatoricStresseffectiveEnum
 syn keyword cConstant DeviatoricStressxxEnum
@@ -631,4 +632,10 @@
 syn keyword cConstant P1Enum
 syn keyword cConstant PressureEnum
+syn keyword cConstant RadarEnum
+syn keyword cConstant RadarAttenuationMacGregorEnum
+syn keyword cConstant RadarAttenuationWolffEnum
+syn keyword cConstant RadarIcePeriodEnum
+syn keyword cConstant RadarPowerMacGregorEnum
+syn keyword cConstant RadarPowerWolffEnum
 syn keyword cConstant RheologyBAbsGradientEnum
 syn keyword cConstant RheologyBInitialguessEnum
@@ -1372,4 +1379,5 @@
 syn keyword cType Profiler
 syn keyword cType Quadtree
+syn keyword cType Radar
 syn keyword cType Regionaloutput
 syn keyword cType Results
Index: issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h
===================================================================
--- issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24204)
+++ issm/trunk-jpl/src/c/shared/Enum/EnumDefinitions.h	(revision 24205)
@@ -494,4 +494,5 @@
 	DamageFEnum,
 	DegreeOfChannelizationEnum,
+	DepthBelowSurfaceEnum, 
 	DeviatoricStresseffectiveEnum,
 	DeviatoricStressxxEnum,
@@ -627,4 +628,10 @@
 	P1Enum,
 	PressureEnum,
+	RadarEnum, 
+	RadarAttenuationMacGregorEnum, 
+	RadarAttenuationWolffEnum,
+	RadarIcePeriodEnum, 
+	RadarPowerMacGregorEnum,
+	RadarPowerWolffEnum, 
 	RheologyBAbsGradientEnum,
 	RheologyBInitialguessEnum,
Index: issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp
===================================================================
--- issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24204)
+++ issm/trunk-jpl/src/c/shared/Enum/EnumToStringx.cpp	(revision 24205)
@@ -500,4 +500,5 @@
 		case DamageFEnum : return "DamageF";
 		case DegreeOfChannelizationEnum : return "DegreeOfChannelization";
+		case DepthBelowSurfaceEnum : return "DepthBelowSurface";
 		case DeviatoricStresseffectiveEnum : return "DeviatoricStresseffective";
 		case DeviatoricStressxxEnum : return "DeviatoricStressxx";
@@ -633,4 +634,10 @@
 		case P1Enum : return "P1";
 		case PressureEnum : return "Pressure";
+		case RadarEnum : return "Radar";
+		case RadarAttenuationMacGregorEnum : return "RadarAttenuationMacGregor";
+		case RadarAttenuationWolffEnum : return "RadarAttenuationWolff";
+		case RadarIcePeriodEnum : return "RadarIcePeriod";
+		case RadarPowerMacGregorEnum : return "RadarPowerMacGregor";
+		case RadarPowerWolffEnum : return "RadarPowerWolff";
 		case RheologyBAbsGradientEnum : return "RheologyBAbsGradient";
 		case RheologyBInitialguessEnum : return "RheologyBInitialguess";
Index: issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp
===================================================================
--- issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24204)
+++ issm/trunk-jpl/src/c/shared/Enum/StringToEnumx.cpp	(revision 24205)
@@ -512,4 +512,5 @@
 	      else if (strcmp(name,"DamageF")==0) return DamageFEnum;
 	      else if (strcmp(name,"DegreeOfChannelization")==0) return DegreeOfChannelizationEnum;
+	      else if (strcmp(name,"DepthBelowSurface")==0) return DepthBelowSurfaceEnum;
 	      else if (strcmp(name,"DeviatoricStresseffective")==0) return DeviatoricStresseffectiveEnum;
 	      else if (strcmp(name,"DeviatoricStressxx")==0) return DeviatoricStressxxEnum;
@@ -628,9 +629,9 @@
 	      else if (strcmp(name,"MaterialsRheologyE")==0) return MaterialsRheologyEEnum;
 	      else if (strcmp(name,"MaterialsRheologyEbar")==0) return MaterialsRheologyEbarEnum;
-	      else if (strcmp(name,"MaterialsRheologyEc")==0) return MaterialsRheologyEcEnum;
          else stage=6;
    }
    if(stage==6){
-	      if (strcmp(name,"MaterialsRheologyEcbar")==0) return MaterialsRheologyEcbarEnum;
+	      if (strcmp(name,"MaterialsRheologyEc")==0) return MaterialsRheologyEcEnum;
+	      else if (strcmp(name,"MaterialsRheologyEcbar")==0) return MaterialsRheologyEcbarEnum;
 	      else if (strcmp(name,"MaterialsRheologyEs")==0) return MaterialsRheologyEsEnum;
 	      else if (strcmp(name,"MaterialsRheologyEsbar")==0) return MaterialsRheologyEsbarEnum;
@@ -648,4 +649,10 @@
 	      else if (strcmp(name,"P1")==0) return P1Enum;
 	      else if (strcmp(name,"Pressure")==0) return PressureEnum;
+	      else if (strcmp(name,"Radar")==0) return RadarEnum;
+	      else if (strcmp(name,"RadarAttenuationMacGregor")==0) return RadarAttenuationMacGregorEnum;
+	      else if (strcmp(name,"RadarAttenuationWolff")==0) return RadarAttenuationWolffEnum;
+	      else if (strcmp(name,"RadarIcePeriod")==0) return RadarIcePeriodEnum;
+	      else if (strcmp(name,"RadarPowerMacGregor")==0) return RadarPowerMacGregorEnum;
+	      else if (strcmp(name,"RadarPowerWolff")==0) return RadarPowerWolffEnum;
 	      else if (strcmp(name,"RheologyBAbsGradient")==0) return RheologyBAbsGradientEnum;
 	      else if (strcmp(name,"RheologyBInitialguess")==0) return RheologyBInitialguessEnum;
@@ -745,5 +752,8 @@
 	      else if (strcmp(name,"SmbS0p")==0) return SmbS0pEnum;
 	      else if (strcmp(name,"SmbS0t")==0) return SmbS0tEnum;
-	      else if (strcmp(name,"SmbSizeini")==0) return SmbSizeiniEnum;
+         else stage=7;
+   }
+   if(stage==7){
+	      if (strcmp(name,"SmbSizeini")==0) return SmbSizeiniEnum;
 	      else if (strcmp(name,"SmbSmbCorr")==0) return SmbSmbCorrEnum;
 	      else if (strcmp(name,"SmbSmbref")==0) return SmbSmbrefEnum;
@@ -752,8 +762,5 @@
 	      else if (strcmp(name,"SmbTeValue")==0) return SmbTeValueEnum;
 	      else if (strcmp(name,"SmbTemperaturesAnomaly")==0) return SmbTemperaturesAnomalyEnum;
-         else stage=7;
-   }
-   if(stage==7){
-	      if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
+	      else if (strcmp(name,"SmbTemperaturesLgm")==0) return SmbTemperaturesLgmEnum;
 	      else if (strcmp(name,"SmbTemperaturesPresentday")==0) return SmbTemperaturesPresentdayEnum;
 	      else if (strcmp(name,"SmbTemperaturesReconstructed")==0) return SmbTemperaturesReconstructedEnum;
@@ -868,5 +875,8 @@
 	      else if (strcmp(name,"Outputdefinition41")==0) return Outputdefinition41Enum;
 	      else if (strcmp(name,"Outputdefinition42")==0) return Outputdefinition42Enum;
-	      else if (strcmp(name,"Outputdefinition43")==0) return Outputdefinition43Enum;
+         else stage=8;
+   }
+   if(stage==8){
+	      if (strcmp(name,"Outputdefinition43")==0) return Outputdefinition43Enum;
 	      else if (strcmp(name,"Outputdefinition44")==0) return Outputdefinition44Enum;
 	      else if (strcmp(name,"Outputdefinition45")==0) return Outputdefinition45Enum;
@@ -875,8 +885,5 @@
 	      else if (strcmp(name,"Outputdefinition48")==0) return Outputdefinition48Enum;
 	      else if (strcmp(name,"Outputdefinition49")==0) return Outputdefinition49Enum;
-         else stage=8;
-   }
-   if(stage==8){
-	      if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum;
+	      else if (strcmp(name,"Outputdefinition4")==0) return Outputdefinition4Enum;
 	      else if (strcmp(name,"Outputdefinition50")==0) return Outputdefinition50Enum;
 	      else if (strcmp(name,"Outputdefinition51")==0) return Outputdefinition51Enum;
@@ -991,5 +998,8 @@
 	      else if (strcmp(name,"CuffeyTemperate")==0) return CuffeyTemperateEnum;
 	      else if (strcmp(name,"DamageEvolutionAnalysis")==0) return DamageEvolutionAnalysisEnum;
-	      else if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
+         else stage=9;
+   }
+   if(stage==9){
+	      if (strcmp(name,"DamageEvolutionSolution")==0) return DamageEvolutionSolutionEnum;
 	      else if (strcmp(name,"DataSet")==0) return DataSetEnum;
 	      else if (strcmp(name,"DataSetParam")==0) return DataSetParamEnum;
@@ -998,8 +1008,5 @@
 	      else if (strcmp(name,"DefaultCalving")==0) return DefaultCalvingEnum;
 	      else if (strcmp(name,"Dense")==0) return DenseEnum;
-         else stage=9;
-   }
-   if(stage==9){
-	      if (strcmp(name,"DependentObject")==0) return DependentObjectEnum;
+	      else if (strcmp(name,"DependentObject")==0) return DependentObjectEnum;
 	      else if (strcmp(name,"DepthAverageAnalysis")==0) return DepthAverageAnalysisEnum;
 	      else if (strcmp(name,"DeviatoricStressErrorEstimator")==0) return DeviatoricStressErrorEstimatorEnum;
@@ -1114,5 +1121,8 @@
 	      else if (strcmp(name,"LoveKr")==0) return LoveKrEnum;
 	      else if (strcmp(name,"LoveLi")==0) return LoveLiEnum;
-	      else if (strcmp(name,"LoveLr")==0) return LoveLrEnum;
+         else stage=10;
+   }
+   if(stage==10){
+	      if (strcmp(name,"LoveLr")==0) return LoveLrEnum;
 	      else if (strcmp(name,"LoveSolution")==0) return LoveSolutionEnum;
 	      else if (strcmp(name,"MINI")==0) return MINIEnum;
@@ -1121,8 +1131,5 @@
 	      else if (strcmp(name,"MassFlux")==0) return MassFluxEnum;
 	      else if (strcmp(name,"Masscon")==0) return MassconEnum;
-         else stage=10;
-   }
-   if(stage==10){
-	      if (strcmp(name,"Massconaxpby")==0) return MassconaxpbyEnum;
+	      else if (strcmp(name,"Massconaxpby")==0) return MassconaxpbyEnum;
 	      else if (strcmp(name,"Massfluxatgate")==0) return MassfluxatgateEnum;
 	      else if (strcmp(name,"MasstransportAnalysis")==0) return MasstransportAnalysisEnum;
@@ -1237,5 +1244,8 @@
 	      else if (strcmp(name,"SmbSolution")==0) return SmbSolutionEnum;
 	      else if (strcmp(name,"SmoothAnalysis")==0) return SmoothAnalysisEnum;
-	      else if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
+         else stage=11;
+   }
+   if(stage==11){
+	      if (strcmp(name,"SoftMigration")==0) return SoftMigrationEnum;
 	      else if (strcmp(name,"SpatialLinearFloatingMeltRate")==0) return SpatialLinearFloatingMeltRateEnum;
 	      else if (strcmp(name,"SpcDynamic")==0) return SpcDynamicEnum;
@@ -1244,8 +1254,5 @@
 	      else if (strcmp(name,"Sset")==0) return SsetEnum;
 	      else if (strcmp(name,"SteadystateSolution")==0) return SteadystateSolutionEnum;
-         else stage=11;
-   }
-   if(stage==11){
-	      if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
+	      else if (strcmp(name,"StressIntensityFactor")==0) return StressIntensityFactorEnum;
 	      else if (strcmp(name,"StressbalanceAnalysis")==0) return StressbalanceAnalysisEnum;
 	      else if (strcmp(name,"StressbalanceConvergenceNumSteps")==0) return StressbalanceConvergenceNumStepsEnum;
Index: issm/trunk-jpl/src/m/classes/radar.m
===================================================================
--- issm/trunk-jpl/src/m/classes/radar.m	(revision 24205)
+++ issm/trunk-jpl/src/m/classes/radar.m	(revision 24205)
@@ -0,0 +1,56 @@
+%RADAR class definition
+%
+%   Usage:
+%      radar=radar();
+%      radar=radar('name','Radar1',...
+%						 'definitionname','Outputdefinition1',...
+%						 'ice_period', ones(md.mesh.numberofvertices,1));
+
+classdef radar
+	properties (SetAccess=private)  
+		%radarattenuation
+		name						 = '';
+		definitionstring		 = '';
+	end
+
+	methods
+		function self = extrude(self,md) % {{{
+			return;
+		end % }}}
+		function self = radar(varargin) % {{{
+			if nargin==0,
+				self=setdefaultparameters(self);
+			else
+				%use provided options to change fields
+				options=pairoptions(varargin{:});
+
+				%get name
+				self.name=getfieldvalue(options,'name','');
+				self.definitionstring=getfieldvalue(options,'definitionstring');
+			end
+		end % }}}
+		function self = setdefaultparameters(self) % {{{
+		end % }}}
+		function md = checkconsistency(self,md,solution,analyses) % {{{
+			
+			if ~ischar(self.name),
+				error('radar error message: ''name'' field should be a string!');
+			end	
+			OutputdefinitionStringArray={};
+			for i=1:100
+				OutputdefinitionStringArray{i}=strcat('Outputdefinition',num2str(i));
+			end
+			md = checkfield(md,'field',self.definitionstring,'values',OutputdefinitionStringArray);
+		end % }}}
+		function disp(self) % {{{
+			disp(sprintf('   Radar:\n'));
+
+			fielddisplay(self,'name','identifier for this radar response');
+			fielddisplay(self,'definitionstring','string that identifies this output definition uniquely, from ''Outputdefinition[1-100]''');
+		end % }}}
+		function marshall(self,prefix,md,fid) % {{{
+		WriteData(fid,prefix,'data',self.name,'name','md.radar.name','format','String');
+		WriteData(fid,prefix,'data',self.definitionstring, 'name','md.radar.definitionstring','format','String');
+	end % }}}
+	end
+end
