Index: /issm/trunk-jpl/src/c/shared/io/Marshalling/Marshalling.cpp
===================================================================
--- /issm/trunk-jpl/src/c/shared/io/Marshalling/Marshalling.cpp	(revision 26533)
+++ /issm/trunk-jpl/src/c/shared/io/Marshalling/Marshalling.cpp	(revision 26534)
@@ -10,4 +10,5 @@
 
 #include "./Marshalling.h"
+#include "../../Numerics/isnan.h"
 
 WriteCheckpointFunctor::WriteCheckpointFunctor(char** pmarshalled_data_in) : MarshallHandle(MARSHALLING_WRITE){/*{{{*/
@@ -83,4 +84,5 @@
 void RegisterInputFunctor::call(IssmDouble & value){/*{{{*/
 	_assert_(this->double_count<size_max);
+	_assert_(!xIsNan<IssmDouble>(value));
 	this->tape_codi->registerInput(value);
 	this->identifiers[this->double_count] = value.getIdentifier();
@@ -91,4 +93,5 @@
 		for(int i=0;i<size;i++){
 			_assert_(this->double_count<size_max);
+			_assert_(!xIsNan<IssmDouble>(value[i]));
 			this->tape_codi->registerInput(value[i]);
 			this->identifiers[this->double_count] = value[i].getIdentifier();
@@ -107,4 +110,5 @@
 }/*}}}*/
 void RegisterOutputFunctor::call(IssmDouble & value){/*{{{*/
+	_assert_(!xIsNan<IssmDouble>(value));
 	this->tape_codi->registerOutput(value);
 	this->double_count++;
@@ -113,4 +117,5 @@
 	if(value){
 		for(int i=0;i<size;i++){
+			_assert_(!xIsNan<IssmDouble>(value[i]));
 			this->tape_codi->registerOutput(value[i]);
 			this->double_count++;
@@ -131,4 +136,5 @@
 void SetAdjointFunctor::call(IssmDouble & value){/*{{{*/
 	_assert_(this->double_count<size_max);
+	_assert_(!xIsNan<IssmDouble>(this->adjoint[this->double_count]));
 	value.gradient() = this->adjoint[this->double_count];
 	this->double_count++;
@@ -138,4 +144,5 @@
 		for(int i=0;i<size;i++){
 			_assert_(this->double_count<size_max);
+			_assert_(!xIsNan<IssmDouble>(this->adjoint[this->double_count]));
 			value[i].gradient() = this->adjoint[this->double_count];
 			this->double_count++;
