diff +grid/blockEvalOn.m @ 757:179f234f6cbf feature/d1_staggered

Merge with poroelastic to get blockEvalOn.
author Martin Almquist <malmquist@stanford.edu>
date Sun, 17 Jun 2018 14:44:05 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/+grid/blockEvalOn.m	Sun Jun 17 14:44:05 2018 -0700
@@ -0,0 +1,30 @@
+% Useful for evaulating forcing functions with different functional expressions for each block
+% f: cell array of function handles fi
+% f_i = f_i(x1,y,...,t)
+% t: time point. If not specified, it is assumed that the functions take only spatial arguments.
+function gf = blockEvalOn(g, f, t)
+default_arg('t',[]);
+
+grids = g.grids;
+nBlocks = length(grids);
+gf = cell(nBlocks,1);
+
+if isempty(t)
+	for i = 1:nBlocks
+		grid.evalOn(grids{i}, f{i} );
+	end
+else
+	dim = nargin(f{1}) - 1;
+	for i = 1:nBlocks
+		switch dim
+		case 1
+			gf{i} = grid.evalOn(grids{i}, @(x)f{i}(x,t) );
+		case 2
+			gf{i} = grid.evalOn(grids{i}, @(x,y)f{i}(x,y,t) );
+		case 3
+			gf{i} = grid.evalOn(grids{i}, @(x,y,z)f{i}(x,y,z,t) );
+		end
+	end
+end
+
+gf = blockmatrix.toMatrix(gf);
\ No newline at end of file