Mercurial > repos > public > sbplib
changeset 736:d991f8a0b61c feature/poroelastic
Add grid.blockEvalOn for functions with different functional expressions for different grid blocks
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Wed, 25 Apr 2018 14:56:17 -0700 |
parents | eac5fb4b63db |
children | aa4ef495f1fd |
files | +grid/blockEvalOn.m |
diffstat | 1 files changed, 30 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+grid/blockEvalOn.m Wed Apr 25 14:56:17 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