diff --git a/examples/spectral.i b/examples/spectral.i index a74290cd..437c565f 100644 --- a/examples/spectral.i +++ b/examples/spectral.i @@ -20,6 +20,31 @@ function = 'cos(x/100*2*pi*4)*cos(y/100*2*pi*3)' [../] [../] + + [./R0_aux] + order = CONSTANT + family = MONOMIAL + [./InitialCondition] + type = FunctionIC + function = 'cos(x/100*2*pi*2)*cos(y/100*2*pi*4)' + [../] + [../] + [./R1_aux] + order = CONSTANT + family = MONOMIAL + [./InitialCondition] + type = FunctionIC + function = 'cos(x/100*2*pi*3)*cos(y/100*2*pi*3)' + [../] + [../] + [./R2_aux] + order = CONSTANT + family = MONOMIAL + [./InitialCondition] + type = FunctionIC + function = 'cos(x/100*2*pi*4)*cos(y/100*2*pi*2)' + [../] + [../] [] [Materials] @@ -37,7 +62,8 @@ moose_variable = c_aux [../] [./R] - type = RankTwoTensorFFTWBuffer + type = RealVectorValueFFTWBuffer + moose_variable = 'R0_aux R1_aux R2_aux' [../] # Solver @@ -51,6 +77,28 @@ fft_buffer = c execute_on = FINAL [../] + + [./R0_aux] + type = FFTBufferAux + variable = R0_aux + fft_buffer = R + component = 0 + execute_on = FINAL + [../] + [./R1_aux] + type = FFTBufferAux + variable = R1_aux + fft_buffer = R + component = 1 + execute_on = FINAL + [../] + [./R2_aux] + type = FFTBufferAux + variable = R2_aux + fft_buffer = R + component = 2 + execute_on = FINAL + [../] [] [Executioner] diff --git a/include/userobjects/FFTBufferBase.h b/include/userobjects/FFTBufferBase.h index 556ff9fd..80cbb0fc 100644 --- a/include/userobjects/FFTBufferBase.h +++ b/include/userobjects/FFTBufferBase.h @@ -34,7 +34,7 @@ class FFTBufferBase : public ElementUserObject FFTBufferBase(const InputParameters & parameters); virtual void initialize() {} - virtual void execute() {} + virtual void execute(); virtual void finalize() {} virtual void threadJoin(const UserObject &) {} diff --git a/src/userobjects/FFTBufferBase.C b/src/userobjects/FFTBufferBase.C index 796846f5..e3b1f47b 100644 --- a/src/userobjects/FFTBufferBase.C +++ b/src/userobjects/FFTBufferBase.C @@ -93,7 +93,7 @@ FFTBufferBase::FFTBufferBase(const InputParameters & parameters) if (var->isNodal()) paramError("moose_variable", "Variable must be elemental."); - _moose_variable[i] = &coupledValue("moose_variable"); + _moose_variable[i] = &coupledValue("moose_variable", i); } } @@ -112,17 +112,16 @@ FFTBufferBase::FFTBufferBase(const InputParameters & parameters) // compute stride and start pointer _start = reinterpret_cast(start(0)); - std::ptrdiff_t istride = reinterpret_cast(start(1)) - reinterpret_cast(_start); - if (istride % sizeof(Real) != 0) + _stride = reinterpret_cast(start(1)) - reinterpret_cast(_start); + if (_stride % sizeof(Real) != 0) mooseError("Invalid data alignment"); - istride /= sizeof(Real); + _stride /= sizeof(Real); } -template <> +template void -FFTBufferBase::execute() +FFTBufferBase::execute() { - std::cout << 'A'; // get grid / buffer location Point centroid = _current_elem->centroid(); std::size_t a = 0;