From c7e368b1ae40dae1f435bfa820709e13c7ce04c9 Mon Sep 17 00:00:00 2001 From: Samuel Omlin Date: Thu, 21 Sep 2023 15:10:56 +0200 Subject: [PATCH] use expandargs macro --- src/FiniteDifferences.jl | 201 ++++++++++++++++++++------------------- 1 file changed, 102 insertions(+), 99 deletions(-) diff --git a/src/FiniteDifferences.jl b/src/FiniteDifferences.jl index b6eda701..6b6954df 100644 --- a/src/FiniteDifferences.jl +++ b/src/FiniteDifferences.jl @@ -45,22 +45,23 @@ export @within @doc "`@maxloc(A)`: Compute the maximum between 2nd order adjacent elements of `A`, using a moving window of size 3." :(@maxloc) @doc "`@minloc(A)`: Compute the minimum between 2nd order adjacent elements of `A`, using a moving window of size 3." :(@minloc) -import ..ParallelStencil: INDICES, WITHIN_DOC, expandargs +import ..ParallelStencil +import ..ParallelStencil: INDICES, WITHIN_DOC, @expandargs const ix = INDICES[1] const ixi = :($ix+1) -macro d(A) A, = expandargs(__module__, A); esc(:( $A[$ix+1] - $A[$ix] )) end -macro d2(A) A, = expandargs(__module__, A); esc(:( ($A[$ixi+1] - $A[$ixi]) - ($A[$ixi] - $A[$ixi-1]) )) end -macro all(A) A, = expandargs(__module__, A); esc(:( $A[$ix ] )) end -macro inn(A) A, = expandargs(__module__, A); esc(:( $A[$ixi ] )) end -macro av(A) A, = expandargs(__module__, A); esc(:(($A[$ix] + $A[$ix+1] )*0.5 )) end -macro harm(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix] + 1.0/$A[$ix+1])*2.0 )) end -macro maxloc(A) A, = expandargs(__module__, A); esc(:( max( max($A[$ixi-1], $A[$ixi+1]), $A[$ixi] ) )) end -macro minloc(A) A, = expandargs(__module__, A); esc(:( min( min($A[$ixi-1], $A[$ixi+1]), $A[$ixi] ) )) end +macro d(A) @expandargs(A); esc(:( $A[$ix+1] - $A[$ix] )) end +macro d2(A) @expandargs(A); esc(:( ($A[$ixi+1] - $A[$ixi]) - ($A[$ixi] - $A[$ixi-1]) )) end +macro all(A) @expandargs(A); esc(:( $A[$ix ] )) end +macro inn(A) @expandargs(A); esc(:( $A[$ixi ] )) end +macro av(A) @expandargs(A); esc(:(($A[$ix] + $A[$ix+1] )*0.5 )) end +macro harm(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix] + 1.0/$A[$ix+1])*2.0 )) end +macro maxloc(A) @expandargs(A); esc(:( max( max($A[$ixi-1], $A[$ixi+1]), $A[$ixi] ) )) end +macro minloc(A) @expandargs(A); esc(:( min( min($A[$ixi-1], $A[$ixi+1]), $A[$ixi] ) )) end @doc WITHIN_DOC macro within(macroname::String, A) - A, = expandargs(__module__, A); + @expandargs(A) if macroname == "@all" esc( :($ix<=size($A,1) ) ) elseif macroname == "@inn" esc( :($ix<=size($A,1)-2) ) else error("unkown macroname: $macroname. If you want to add your own assignement macros, overwrite the macro 'within(macroname::String, A)'; to still use the exising macro within as well call ParallelStencil.FiniteDifferences{1|2|3}D.@within(macroname, A) at the end.") @@ -145,38 +146,39 @@ export @within @doc "`@maxloc(A)`: Compute the maximum between 2nd order adjacent elements of `A`, using a moving window of size 3." :(@maxloc) @doc "`@minloc(A)`: Compute the minimum between 2nd order adjacent elements of `A`, using a moving window of size 3." :(@minloc) -import ..ParallelStencil: INDICES, WITHIN_DOC, expandargs +import ..ParallelStencil +import ..ParallelStencil: INDICES, WITHIN_DOC, @expandargs ix, iy = INDICES[1], INDICES[2] ixi, iyi = :($ix+1), :($iy+1) -macro d_xa(A) A, = expandargs(__module__, A); esc(:( $A[$ix+1,$iy ] - $A[$ix ,$iy ] )) end -macro d_ya(A) A, = expandargs(__module__, A); esc(:( $A[$ix ,$iy+1] - $A[$ix ,$iy ] )) end -macro d_xi(A) A, = expandargs(__module__, A); esc(:( $A[$ix+1,$iyi ] - $A[$ix ,$iyi] )) end -macro d_yi(A) A, = expandargs(__module__, A); esc(:( $A[$ixi ,$iy+1] - $A[$ixi ,$iy ] )) end -macro d2_xi(A) A, = expandargs(__module__, A); esc(:( ($A[$ixi+1,$iyi ] - $A[$ixi ,$iyi]) - ($A[$ixi ,$iyi] - $A[$ixi-1,$iyi ]) )) end -macro d2_yi(A) A, = expandargs(__module__, A); esc(:( ($A[$ixi ,$iyi+1] - $A[$ixi ,$iyi]) - ($A[$ixi ,$iyi] - $A[$ixi ,$iyi-1]) )) end -macro all(A) A, = expandargs(__module__, A); esc(:( $A[$ix ,$iy ] )) end -macro inn(A) A, = expandargs(__module__, A); esc(:( $A[$ixi ,$iyi ] )) end -macro inn_x(A) A, = expandargs(__module__, A); esc(:( $A[$ixi ,$iy ] )) end -macro inn_y(A) A, = expandargs(__module__, A); esc(:( $A[$ix ,$iyi ] )) end -macro av(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iy ] + $A[$ix+1,$iy ] + $A[$ix,$iy+1] + $A[$ix+1,$iy+1])*0.25 )) end -macro av_xa(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iy ] + $A[$ix+1,$iy ] )*0.5 )) end -macro av_ya(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iy ] + $A[$ix ,$iy+1] )*0.5 )) end -macro av_xi(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iyi ] + $A[$ix+1,$iyi ] )*0.5 )) end -macro av_yi(A) A, = expandargs(__module__, A); esc(:(($A[$ixi ,$iy ] + $A[$ixi ,$iy+1] )*0.5 )) end -macro harm(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iy ] + 1.0/$A[$ix+1,$iy ] + 1.0/$A[$ix,$iy+1] + 1.0/$A[$ix+1,$iy+1])*4.0 )) end -macro harm_xa(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iy ] + 1.0/$A[$ix+1,$iy ] )*2.0 )) end -macro harm_ya(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iy ] + 1.0/$A[$ix ,$iy+1] )*2.0 )) end -macro harm_xi(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iyi ] + 1.0/$A[$ix+1,$iyi ] )*2.0 )) end -macro harm_yi(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ixi ,$iy ] + 1.0/$A[$ixi ,$iy+1] )*2.0 )) end -macro maxloc(A) A, = expandargs(__module__, A); esc(:( max( max( max($A[$ixi-1,$iyi ], $A[$ixi+1,$iyi ]) , $A[$ixi ,$iyi ] ), - max($A[$ixi ,$iyi-1], $A[$ixi ,$iyi+1]) ) )) end -macro minloc(A) A, = expandargs(__module__, A); esc(:( min( min( min($A[$ixi-1,$iyi ], $A[$ixi+1,$iyi ]) , $A[$ixi ,$iyi ] ), - min($A[$ixi ,$iyi-1], $A[$ixi ,$iyi+1]) ) )) end +macro d_xa(A) @expandargs(A); esc(:( $A[$ix+1,$iy ] - $A[$ix ,$iy ] )) end +macro d_ya(A) @expandargs(A); esc(:( $A[$ix ,$iy+1] - $A[$ix ,$iy ] )) end +macro d_xi(A) @expandargs(A); esc(:( $A[$ix+1,$iyi ] - $A[$ix ,$iyi] )) end +macro d_yi(A) @expandargs(A); esc(:( $A[$ixi ,$iy+1] - $A[$ixi ,$iy ] )) end +macro d2_xi(A) @expandargs(A); esc(:( ($A[$ixi+1,$iyi ] - $A[$ixi ,$iyi]) - ($A[$ixi ,$iyi] - $A[$ixi-1,$iyi ]) )) end +macro d2_yi(A) @expandargs(A); esc(:( ($A[$ixi ,$iyi+1] - $A[$ixi ,$iyi]) - ($A[$ixi ,$iyi] - $A[$ixi ,$iyi-1]) )) end +macro all(A) @expandargs(A); esc(:( $A[$ix ,$iy ] )) end +macro inn(A) @expandargs(A); esc(:( $A[$ixi ,$iyi ] )) end +macro inn_x(A) @expandargs(A); esc(:( $A[$ixi ,$iy ] )) end +macro inn_y(A) @expandargs(A); esc(:( $A[$ix ,$iyi ] )) end +macro av(A) @expandargs(A); esc(:(($A[$ix ,$iy ] + $A[$ix+1,$iy ] + $A[$ix,$iy+1] + $A[$ix+1,$iy+1])*0.25 )) end +macro av_xa(A) @expandargs(A); esc(:(($A[$ix ,$iy ] + $A[$ix+1,$iy ] )*0.5 )) end +macro av_ya(A) @expandargs(A); esc(:(($A[$ix ,$iy ] + $A[$ix ,$iy+1] )*0.5 )) end +macro av_xi(A) @expandargs(A); esc(:(($A[$ix ,$iyi ] + $A[$ix+1,$iyi ] )*0.5 )) end +macro av_yi(A) @expandargs(A); esc(:(($A[$ixi ,$iy ] + $A[$ixi ,$iy+1] )*0.5 )) end +macro harm(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iy ] + 1.0/$A[$ix+1,$iy ] + 1.0/$A[$ix,$iy+1] + 1.0/$A[$ix+1,$iy+1])*4.0 )) end +macro harm_xa(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iy ] + 1.0/$A[$ix+1,$iy ] )*2.0 )) end +macro harm_ya(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iy ] + 1.0/$A[$ix ,$iy+1] )*2.0 )) end +macro harm_xi(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iyi ] + 1.0/$A[$ix+1,$iyi ] )*2.0 )) end +macro harm_yi(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ixi ,$iy ] + 1.0/$A[$ixi ,$iy+1] )*2.0 )) end +macro maxloc(A) @expandargs(A); esc(:( max( max( max($A[$ixi-1,$iyi ], $A[$ixi+1,$iyi ]) , $A[$ixi ,$iyi ] ), + max($A[$ixi ,$iyi-1], $A[$ixi ,$iyi+1]) ) )) end +macro minloc(A) @expandargs(A); esc(:( min( min( min($A[$ixi-1,$iyi ], $A[$ixi+1,$iyi ]) , $A[$ixi ,$iyi ] ), + min($A[$ixi ,$iyi-1], $A[$ixi ,$iyi+1]) ) )) end @doc WITHIN_DOC macro within(macroname::String, A) - A, = expandargs(__module__, A); + @expandargs(A) if macroname == "@all" esc( :($ix<=size($A,1) && $iy<=size($A,2) ) ) elseif macroname == "@inn" esc( :($ix<=size($A,1)-2 && $iy<=size($A,2)-2) ) elseif macroname == "@inn_x" esc( :($ix<=size($A,1)-2 && $iy<=size($A,2) ) ) @@ -309,81 +311,82 @@ export @within @doc "`@maxloc(A)`: Compute the maximum between 2nd order adjacent elements of `A`, using a moving window of size 3." :(@maxloc) @doc "`@minloc(A)`: Compute the minimum between 2nd order adjacent elements of `A`, using a moving window of size 3." :(@minloc) -import ..ParallelStencil: INDICES, WITHIN_DOC, expandargs +import ..ParallelStencil +import ..ParallelStencil: INDICES, WITHIN_DOC, @expandargs ix, iy, iz = INDICES[1], INDICES[2], INDICES[3] ixi, iyi, izi = :($ix+1), :($iy+1), :($iz+1) -macro d_xa(A) A, = expandargs(__module__, A); esc(:( $A[$ix+1,$iy ,$iz ] - $A[$ix ,$iy ,$iz ] )) end -macro d_ya(A) A, = expandargs(__module__, A); esc(:( $A[$ix ,$iy+1,$iz ] - $A[$ix ,$iy ,$iz ] )) end -macro d_za(A) A, = expandargs(__module__, A); esc(:( $A[$ix ,$iy ,$iz+1] - $A[$ix ,$iy ,$iz ] )) end -macro d_xi(A) A, = expandargs(__module__, A); esc(:( $A[$ix+1,$iyi ,$izi ] - $A[$ix ,$iyi ,$izi ] )) end -macro d_yi(A) A, = expandargs(__module__, A); esc(:( $A[$ixi ,$iy+1,$izi ] - $A[$ixi ,$iy ,$izi ] )) end -macro d_zi(A) A, = expandargs(__module__, A); esc(:( $A[$ixi ,$iyi ,$iz+1] - $A[$ixi ,$iyi ,$iz ] )) end -macro d2_xi(A) A, = expandargs(__module__, A); esc(:( ($A[$ixi+1,$iyi ,$izi ] - $A[$ixi ,$iyi ,$izi ]) - ($A[$ixi ,$iyi ,$izi ] - $A[$ixi-1,$iyi ,$izi ]) )) end -macro d2_yi(A) A, = expandargs(__module__, A); esc(:( ($A[$ixi ,$iyi+1,$izi ] - $A[$ixi ,$iyi ,$izi ]) - ($A[$ixi ,$iyi ,$izi ] - $A[$ixi ,$iyi-1,$izi ]) )) end -macro d2_zi(A) A, = expandargs(__module__, A); esc(:( ($A[$ixi ,$iyi ,$izi+1] - $A[$ixi ,$iyi ,$izi ]) - ($A[$ixi ,$iyi ,$izi ] - $A[$ixi ,$iyi ,$izi-1]) )) end -macro all(A) A, = expandargs(__module__, A); esc(:( $A[$ix ,$iy ,$iz ] )) end -macro inn(A) A, = expandargs(__module__, A); esc(:( $A[$ixi ,$iyi ,$izi ] )) end -macro inn_x(A) A, = expandargs(__module__, A); esc(:( $A[$ixi ,$iy ,$iz ] )) end -macro inn_y(A) A, = expandargs(__module__, A); esc(:( $A[$ix ,$iyi ,$iz ] )) end -macro inn_z(A) A, = expandargs(__module__, A); esc(:( $A[$ix ,$iy ,$izi ] )) end -macro inn_xy(A) A, = expandargs(__module__, A); esc(:( $A[$ixi ,$iyi ,$iz ] )) end -macro inn_xz(A) A, = expandargs(__module__, A); esc(:( $A[$ixi ,$iy ,$izi ] )) end -macro inn_yz(A) A, = expandargs(__module__, A); esc(:( $A[$ix ,$iyi ,$izi ] )) end -macro av(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix+1,$iy ,$iz ] + - $A[$ix+1,$iy+1,$iz ] + $A[$ix+1,$iy+1,$iz+1] + - $A[$ix ,$iy+1,$iz+1] + $A[$ix ,$iy ,$iz+1] + - $A[$ix+1,$iy ,$iz+1] + $A[$ix ,$iy+1,$iz ] )*0.125)) end -macro av_xa(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix+1,$iy ,$iz ] )*0.5 )) end -macro av_ya(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix ,$iy+1,$iz ] )*0.5 )) end -macro av_za(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix ,$iy ,$iz+1] )*0.5 )) end -macro av_xi(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iyi ,$izi ] + $A[$ix+1,$iyi ,$izi ] )*0.5 )) end -macro av_yi(A) A, = expandargs(__module__, A); esc(:(($A[$ixi ,$iy ,$izi ] + $A[$ixi ,$iy+1,$izi ] )*0.5 )) end -macro av_zi(A) A, = expandargs(__module__, A); esc(:(($A[$ixi ,$iyi ,$iz ] + $A[$ixi ,$iyi ,$iz+1] )*0.5 )) end -macro av_xya(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix+1,$iy ,$iz ] + +macro d_xa(A) @expandargs(A); esc(:( $A[$ix+1,$iy ,$iz ] - $A[$ix ,$iy ,$iz ] )) end +macro d_ya(A) @expandargs(A); esc(:( $A[$ix ,$iy+1,$iz ] - $A[$ix ,$iy ,$iz ] )) end +macro d_za(A) @expandargs(A); esc(:( $A[$ix ,$iy ,$iz+1] - $A[$ix ,$iy ,$iz ] )) end +macro d_xi(A) @expandargs(A); esc(:( $A[$ix+1,$iyi ,$izi ] - $A[$ix ,$iyi ,$izi ] )) end +macro d_yi(A) @expandargs(A); esc(:( $A[$ixi ,$iy+1,$izi ] - $A[$ixi ,$iy ,$izi ] )) end +macro d_zi(A) @expandargs(A); esc(:( $A[$ixi ,$iyi ,$iz+1] - $A[$ixi ,$iyi ,$iz ] )) end +macro d2_xi(A) @expandargs(A); esc(:( ($A[$ixi+1,$iyi ,$izi ] - $A[$ixi ,$iyi ,$izi ]) - ($A[$ixi ,$iyi ,$izi ] - $A[$ixi-1,$iyi ,$izi ]) )) end +macro d2_yi(A) @expandargs(A); esc(:( ($A[$ixi ,$iyi+1,$izi ] - $A[$ixi ,$iyi ,$izi ]) - ($A[$ixi ,$iyi ,$izi ] - $A[$ixi ,$iyi-1,$izi ]) )) end +macro d2_zi(A) @expandargs(A); esc(:( ($A[$ixi ,$iyi ,$izi+1] - $A[$ixi ,$iyi ,$izi ]) - ($A[$ixi ,$iyi ,$izi ] - $A[$ixi ,$iyi ,$izi-1]) )) end +macro all(A) @expandargs(A); esc(:( $A[$ix ,$iy ,$iz ] )) end +macro inn(A) @expandargs(A); esc(:( $A[$ixi ,$iyi ,$izi ] )) end +macro inn_x(A) @expandargs(A); esc(:( $A[$ixi ,$iy ,$iz ] )) end +macro inn_y(A) @expandargs(A); esc(:( $A[$ix ,$iyi ,$iz ] )) end +macro inn_z(A) @expandargs(A); esc(:( $A[$ix ,$iy ,$izi ] )) end +macro inn_xy(A) @expandargs(A); esc(:( $A[$ixi ,$iyi ,$iz ] )) end +macro inn_xz(A) @expandargs(A); esc(:( $A[$ixi ,$iy ,$izi ] )) end +macro inn_yz(A) @expandargs(A); esc(:( $A[$ix ,$iyi ,$izi ] )) end +macro av(A) @expandargs(A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix+1,$iy ,$iz ] + + $A[$ix+1,$iy+1,$iz ] + $A[$ix+1,$iy+1,$iz+1] + + $A[$ix ,$iy+1,$iz+1] + $A[$ix ,$iy ,$iz+1] + + $A[$ix+1,$iy ,$iz+1] + $A[$ix ,$iy+1,$iz ] )*0.125)) end +macro av_xa(A) @expandargs(A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix+1,$iy ,$iz ] )*0.5 )) end +macro av_ya(A) @expandargs(A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix ,$iy+1,$iz ] )*0.5 )) end +macro av_za(A) @expandargs(A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix ,$iy ,$iz+1] )*0.5 )) end +macro av_xi(A) @expandargs(A); esc(:(($A[$ix ,$iyi ,$izi ] + $A[$ix+1,$iyi ,$izi ] )*0.5 )) end +macro av_yi(A) @expandargs(A); esc(:(($A[$ixi ,$iy ,$izi ] + $A[$ixi ,$iy+1,$izi ] )*0.5 )) end +macro av_zi(A) @expandargs(A); esc(:(($A[$ixi ,$iyi ,$iz ] + $A[$ixi ,$iyi ,$iz+1] )*0.5 )) end +macro av_xya(A) @expandargs(A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix+1,$iy ,$iz ] + $A[$ix ,$iy+1,$iz ] + $A[$ix+1,$iy+1,$iz ] )*0.25 )) end -macro av_xza(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix+1,$iy ,$iz ] + +macro av_xza(A) @expandargs(A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix+1,$iy ,$iz ] + $A[$ix ,$iy ,$iz+1] + $A[$ix+1,$iy ,$iz+1] )*0.25 )) end -macro av_yza(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix ,$iy+1,$iz ] + +macro av_yza(A) @expandargs(A); esc(:(($A[$ix ,$iy ,$iz ] + $A[$ix ,$iy+1,$iz ] + $A[$ix ,$iy ,$iz+1] + $A[$ix ,$iy+1,$iz+1] )*0.25 )) end -macro av_xyi(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iy ,$izi ] + $A[$ix+1,$iy ,$izi ] + +macro av_xyi(A) @expandargs(A); esc(:(($A[$ix ,$iy ,$izi ] + $A[$ix+1,$iy ,$izi ] + $A[$ix ,$iy+1,$izi ] + $A[$ix+1,$iy+1,$izi ] )*0.25 )) end -macro av_xzi(A) A, = expandargs(__module__, A); esc(:(($A[$ix ,$iyi ,$iz ] + $A[$ix+1,$iyi ,$iz ] + +macro av_xzi(A) @expandargs(A); esc(:(($A[$ix ,$iyi ,$iz ] + $A[$ix+1,$iyi ,$iz ] + $A[$ix ,$iyi ,$iz+1] + $A[$ix+1,$iyi ,$iz+1] )*0.25 )) end -macro av_yzi(A) A, = expandargs(__module__, A); esc(:(($A[$ixi ,$iy ,$iz ] + $A[$ixi ,$iy+1,$iz ] + +macro av_yzi(A) @expandargs(A); esc(:(($A[$ixi ,$iy ,$iz ] + $A[$ixi ,$iy+1,$iz ] + $A[$ixi ,$iy ,$iz+1] + $A[$ixi ,$iy+1,$iz+1] )*0.25 )) end -macro harm(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix+1,$iy ,$iz ] + - 1.0/$A[$ix+1,$iy+1,$iz ] + 1.0/$A[$ix+1,$iy+1,$iz+1] + - 1.0/$A[$ix ,$iy+1,$iz+1] + 1.0/$A[$ix ,$iy ,$iz+1] + - 1.0/$A[$ix+1,$iy ,$iz+1] + 1.0/$A[$ix ,$iy+1,$iz ] )*8.0)) end -macro harm_xa(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix+1,$iy ,$iz ] )*2.0 )) end -macro harm_ya(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix ,$iy+1,$iz ] )*2.0 )) end -macro harm_za(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix ,$iy ,$iz+1] )*2.0 )) end -macro harm_xi(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iyi ,$izi ] + 1.0/$A[$ix+1,$iyi ,$izi ] )*2.0 )) end -macro harm_yi(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ixi ,$iy ,$izi ] + 1.0/$A[$ixi ,$iy+1,$izi ] )*2.0 )) end -macro harm_zi(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ixi ,$iyi ,$iz ] + 1.0/$A[$ixi ,$iyi ,$iz+1] )*2.0 )) end -macro harm_xya(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix+1,$iy ,$iz ] + - 1.0/$A[$ix ,$iy+1,$iz ] + 1.0/$A[$ix+1,$iy+1,$iz ] )*4.0 )) end -macro harm_xza(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix+1,$iy ,$iz ] + - 1.0/$A[$ix ,$iy ,$iz+1] + 1.0/$A[$ix+1,$iy ,$iz+1] )*4.0 )) end -macro harm_yza(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix ,$iy+1,$iz ] + - 1.0/$A[$ix ,$iy ,$iz+1] + 1.0/$A[$ix ,$iy+1,$iz+1] )*4.0 )) end -macro harm_xyi(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$izi ] + 1.0/$A[$ix+1,$iy ,$izi ] + - 1.0/$A[$ix ,$iy+1,$izi ] + 1.0/$A[$ix+1,$iy+1,$izi ] )*4.0 )) end -macro harm_xzi(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ix ,$iyi ,$iz ] + 1.0/$A[$ix+1,$iyi ,$iz ] + - 1.0/$A[$ix ,$iyi ,$iz+1] + 1.0/$A[$ix+1,$iyi ,$iz+1] )*4.0 )) end -macro harm_yzi(A) A, = expandargs(__module__, A); esc(:(1.0/(1.0/$A[$ixi ,$iy ,$iz ] + 1.0/$A[$ixi ,$iy+1,$iz ] + - 1.0/$A[$ixi ,$iy ,$iz+1] + 1.0/$A[$ixi ,$iy+1,$iz+1] )*4.0 )) end -macro maxloc(A) A, = expandargs(__module__, A); esc(:( max( max( max( max($A[$ixi-1,$iyi ,$izi ], $A[$ixi+1,$iyi ,$izi ]) , $A[$ixi ,$iyi ,$izi ] ), - max($A[$ixi ,$iyi-1,$izi ], $A[$ixi ,$iyi+1,$izi ]) ), - max($A[$ixi ,$iyi ,$izi-1], $A[$ixi ,$iyi ,$izi+1]) ) )) end -macro minloc(A) A, = expandargs(__module__, A); esc(:( min( min( min( min($A[$ixi-1,$iyi ,$izi ], $A[$ixi+1,$iyi ,$izi ]) , $A[$ixi ,$iyi ,$izi ] ), - min($A[$ixi ,$iyi-1,$izi ], $A[$ixi ,$iyi+1,$izi ]) ), - min($A[$ixi ,$iyi ,$izi-1], $A[$ixi ,$iyi ,$izi+1]) ) )) end +macro harm(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix+1,$iy ,$iz ] + + 1.0/$A[$ix+1,$iy+1,$iz ] + 1.0/$A[$ix+1,$iy+1,$iz+1] + + 1.0/$A[$ix ,$iy+1,$iz+1] + 1.0/$A[$ix ,$iy ,$iz+1] + + 1.0/$A[$ix+1,$iy ,$iz+1] + 1.0/$A[$ix ,$iy+1,$iz ] )*8.0)) end +macro harm_xa(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix+1,$iy ,$iz ] )*2.0 )) end +macro harm_ya(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix ,$iy+1,$iz ] )*2.0 )) end +macro harm_za(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix ,$iy ,$iz+1] )*2.0 )) end +macro harm_xi(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iyi ,$izi ] + 1.0/$A[$ix+1,$iyi ,$izi ] )*2.0 )) end +macro harm_yi(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ixi ,$iy ,$izi ] + 1.0/$A[$ixi ,$iy+1,$izi ] )*2.0 )) end +macro harm_zi(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ixi ,$iyi ,$iz ] + 1.0/$A[$ixi ,$iyi ,$iz+1] )*2.0 )) end +macro harm_xya(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix+1,$iy ,$iz ] + + 1.0/$A[$ix ,$iy+1,$iz ] + 1.0/$A[$ix+1,$iy+1,$iz ] )*4.0 )) end +macro harm_xza(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix+1,$iy ,$iz ] + + 1.0/$A[$ix ,$iy ,$iz+1] + 1.0/$A[$ix+1,$iy ,$iz+1] )*4.0 )) end +macro harm_yza(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$iz ] + 1.0/$A[$ix ,$iy+1,$iz ] + + 1.0/$A[$ix ,$iy ,$iz+1] + 1.0/$A[$ix ,$iy+1,$iz+1] )*4.0 )) end +macro harm_xyi(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iy ,$izi ] + 1.0/$A[$ix+1,$iy ,$izi ] + + 1.0/$A[$ix ,$iy+1,$izi ] + 1.0/$A[$ix+1,$iy+1,$izi ] )*4.0 )) end +macro harm_xzi(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ix ,$iyi ,$iz ] + 1.0/$A[$ix+1,$iyi ,$iz ] + + 1.0/$A[$ix ,$iyi ,$iz+1] + 1.0/$A[$ix+1,$iyi ,$iz+1] )*4.0 )) end +macro harm_yzi(A) @expandargs(A); esc(:(1.0/(1.0/$A[$ixi ,$iy ,$iz ] + 1.0/$A[$ixi ,$iy+1,$iz ] + + 1.0/$A[$ixi ,$iy ,$iz+1] + 1.0/$A[$ixi ,$iy+1,$iz+1] )*4.0 )) end +macro maxloc(A) @expandargs(A); esc(:( max( max( max( max($A[$ixi-1,$iyi ,$izi ], $A[$ixi+1,$iyi ,$izi ]) , $A[$ixi ,$iyi ,$izi ] ), + max($A[$ixi ,$iyi-1,$izi ], $A[$ixi ,$iyi+1,$izi ]) ), + max($A[$ixi ,$iyi ,$izi-1], $A[$ixi ,$iyi ,$izi+1]) ) )) end +macro minloc(A) @expandargs(A); esc(:( min( min( min( min($A[$ixi-1,$iyi ,$izi ], $A[$ixi+1,$iyi ,$izi ]) , $A[$ixi ,$iyi ,$izi ] ), + min($A[$ixi ,$iyi-1,$izi ], $A[$ixi ,$iyi+1,$izi ]) ), + min($A[$ixi ,$iyi ,$izi-1], $A[$ixi ,$iyi ,$izi+1]) ) )) end @doc WITHIN_DOC macro within(macroname::String, A) - A, = expandargs(__module__, A); + @expandargs(A) if macroname == "@all" esc( :($ix<=size($A,1) && $iy<=size($A,2) && $iz<=size($A,3) ) ) elseif macroname == "@inn" esc( :($ix<=size($A,1)-2 && $iy<=size($A,2)-2 && $iz<=size($A,3)-2) ) elseif macroname == "@inn_x" esc( :($ix<=size($A,1)-2 && $iy<=size($A,2) && $iz<=size($A,3) ) )