Index: /issm/trunk-jpl/src/m/array/arrayoperations.js
===================================================================
--- /issm/trunk-jpl/src/m/array/arrayoperations.js	(revision 23005)
+++ /issm/trunk-jpl/src/m/array/arrayoperations.js	(revision 23006)
@@ -51,9 +51,11 @@
     //Takes in any number of scalars or arrays, and calculates the sum. Scalars are treated as similar length arrays of the scalar.
     //Determine reference array and size
-    var size, arg;
+    var size, array, arg, initial;
 	for (var a = 0; a < arguments.length; a++) {
         arg = arguments[a];
         if (arg instanceof Array) {
             size = arg.length;
+            array = arg;
+			initial = a;
             break;
         }
@@ -69,15 +71,17 @@
 	}
 	//do the result:
-	var result = NewArrayFill(size, 0);
-	for (var a = 0; a < arguments.length; a++) {
-		arg = arguments[a];
-        if (arg instanceof Array) {
-            for(var i = 0; i < result.length; i++){
-                result[i] -= arg[i];
-            }
-        } else if (typeof arg != 'number') {
-            for(var i = 0; i < result.length; i++){
-                result[i] += arg;
-            }
+	var result = array.slice(0);
+	for (var a = 0; a < arguments.length; a++) {
+		if (a != initial) {
+			arg = arguments[a];
+			if (arg instanceof Array) {
+				for(var i = 0; i < result.length; i++){
+					result[i] += arg[i];
+				}
+			} else if (typeof arg != 'number') {
+				for(var i = 0; i < result.length; i++){
+					result[i] += arg;
+				}
+			}
         }
 	}
@@ -87,5 +91,5 @@
     //Takes in any number of scalars or arrays, and calculates the subtraction. Scalars are treated as similar length arrays of the scalar.
     //Determine reference array and size
-    var size, array, arg;
+    var size, array, arg, initial;
 	for (var a = 0; a < arguments.length; a++) {
         arg = arguments[a];
@@ -93,4 +97,5 @@
             size = arg.length;
             array = arg;
+			initial = a;
             break;
         }
@@ -108,13 +113,15 @@
 	var result = array.slice(0);
 	for (var a = 0; a < arguments.length; a++) {
-		arg = arguments[a];
-        if (arg instanceof Array) {
-            for(var i = 0; i < result.length; i++){
-                result[i] -= arg[i];
-            }
-        } else if (typeof arg != 'number') {
-            for(var i = 0; i < result.length; i++){
-                result[i] -= arg;
-            }
+		if (a !== initial) {
+			arg = arguments[a];
+			if (arg instanceof Array) {
+				for(var i = 0; i < result.length; i++){
+					result[i] -= arg[i];
+				}
+			} else if (typeof arg != 'number') {
+				for(var i = 0; i < result.length; i++){
+					result[i] -= arg;
+				}
+			}
         }
 	}
@@ -124,9 +131,11 @@
     //Takes in any number of scalars or arrays, and calculates the product. Scalars are treated as similar length arrays of the scalar.
     //Determine reference array and size
-    var size, arg;
+    var size, array, arg, initial;
 	for (var a = 0; a < arguments.length; a++) {
         arg = arguments[a];
         if (arg instanceof Array) {
             size = arg.length;
+            array = arg;
+			initial = a;
             break;
         }
@@ -142,23 +151,25 @@
 	}
 	//do the result:
-	var result = NewArrayFill(size, 0);
-	for (var a = 0; a < arguments.length; a++) {
-		arg = arguments[a];
-        if (arg instanceof Array) {
-            for(var i = 0; i < result.length; i++){
-                result[i] *= arg[i];
-            }
-        } else if (typeof arg != 'number') {
-            for(var i = 0; i < result.length; i++){
-                result[i] *= arg;
-            }
-        }
+	var result = array.slice(0);
+	for (var a = 0; a < arguments.length; a++) {
+		if (a !== initial) {
+			arg = arguments[a];
+			if (arg instanceof Array) {
+				for(var i = 0; i < result.length; i++){
+					result[i] *= arg[i];
+				}
+			} else if (typeof arg != 'number') {
+				for(var i = 0; i < result.length; i++){
+					result[i] *= arg;
+				}
+			}
+		}
 	}
 	return result;
 } //}}}
-function ArrayDivide(array1, array2){ //{{{
+function ArrayDivide(){ //{{{
     //Takes in any number of scalars or arrays, and calculates the quotient. Scalars are treated as similar length arrays of the scalar.
     //Determine reference array and size
-    var size, array, arg;
+    var size, array, arg, initial;
 	for (var a = 0; a < arguments.length; a++) {
         arg = arguments[a];
@@ -166,4 +177,5 @@
             size = arg.length;
             array = arg;
+			initial = a;
             break;
         }
@@ -181,14 +193,16 @@
 	var result = array.slice(0);
 	for (var a = 0; a < arguments.length; a++) {
-		arg = arguments[a];
-        if (arg instanceof Array) {
-            for(var i = 0; i < result.length; i++){
-                result[i] /= arg[i];
-            }
-        } else if (typeof arg != 'number') {
-            for(var i = 0; i < result.length; i++){
-                result[i] /= arg;
-            }
-        }
+		if (a !== initial) {
+			arg = arguments[a];
+			if (arg instanceof Array) {
+				for(var i = 0; i < result.length; i++){
+					result[i] /= arg[i];
+				}
+			} else if (typeof arg != 'number') {
+				for(var i = 0; i < result.length; i++){
+					result[i] /= arg;
+				}
+			}
+		}
 	}
 	return result;
Index: /issm/trunk-jpl/src/m/mesh/bamg.js
===================================================================
--- /issm/trunk-jpl/src/m/mesh/bamg.js	(revision 23005)
+++ /issm/trunk-jpl/src/m/mesh/bamg.js	(revision 23006)
@@ -122,9 +122,9 @@
             //Check orientation
             var nods = domain[i].nods-1; //the domain are closed 1=end;
-            var test = ArraySum(ArrayAdd(ArraySubtract(domain[i].x.slice(1,nods), ArrayMultiply(domain[i].x.slice(0,nods-1), domain[i].y.slice(1,nods))), domain[i].y.slice(0,nods-1)));
+            var test = ArraySum(ArrayMultiply(ArraySubtract(domain[i].x.slice(1,nods+1), domain[i].x.slice(0,nods)), ArrayAdd(domain[i].y.slice(1,nods+1), domain[i].y.slice(0,nods))));
             if ((i==0 && test>0) || (i>0 && test<0)) {
                 console.log('At least one contour was not correctly oriented and has been re-oriented');
-                //TODO: Implement flipud
-                //domain[i].x = flipud(domain[i].x); domain[i].y = flipud(domain[i].y);
+		domain[i].x.reverse();
+		domain[i].y.reverse();
             }
 
@@ -170,9 +170,9 @@
             //Check that hole is correctly oriented
             var nods = holes[i].nods-1; //the holes are closed 1=end;
-            var test = ArraySum(ArrayAdd(ArraySubtract(holes[i].x.slice(1,nods), ArrayMultiply(holes[i].x.slice(0,nods-1), holes[i].y.slice(1,nods))), holes[i].y.slice(0,nods-1)));
+            var test = ArraySum(ArrayMultiply(ArraySubtract(holes[i].x.slice(1,nods+1), holes[i].x.slice(0,nods)), ArrayAdd(holes[i].y.slice(1,nods+1), holes[i].y.slice(0,nods))));
             if ((i==0 && test>0) || (i>0 && test<0)) {
                 console.log('At least one contour was not correctly oriented and has been re-oriented');
-                //TODO: Implement flipud
-                //holes[i].x = flipud(holes[i].x); holes[i].y = flipud(holes[i].y);
+		holes[i].x.reverse();
+		holes[i].y.reverse();
             }
 
@@ -209,9 +209,9 @@
             //Check that hole is correctly oriented
             var nods=subdomains[i].nods-1; //the subdomains are closed 1=end;
-            var test = ArraySum(ArrayAdd(ArraySubtract(subdomains[i].x.slice(1,nods), ArrayMultiply(subdomains[i].x.slice(0,nods-1), subdomains[i].y.slice(1,nods))), subdomains[i].y.slice(0,nods-1)));
+            var test = ArraySum(ArrayMultiply(ArraySubtract(subdomain[i].x.slice(1,nods+1), subdomain[i].x.slice(0,nods)), ArrayAdd(subdomain[i].y.slice(1,nods+1), subdomain[i].y.slice(0,nods))));
             if ((i==0 && test>0) || (i>0 && test<0)) {
                 console.log('At least one contour was not correctly oriented and has been re-oriented');
-                //TODO: Implement flipud
-                //subdomains[i].x = flipud(subdomains[i].x); subdomains[i].y = flipud(subdomains[i].y);
+		subdomains[i].x.reverse();
+		subdomains[i].y.reverse();
             }
 
