I would look at the documentation again. If that does not work well then investigate a frequency domain spectral solver fft or wavelet approach for the algorithm and transform back to the fluid domain.
OHHH I forgot, there is also the Linear Solver SOP that you can use to factorize the simulation and find your sparsity etc.
ZephirFX
Micro solver don't use VDBs but Houdini native volumes I believe.
https://www.sidefx.com/docs/houdini/nodes/dop/gasopenclmergevdb.html [
www.sidefx.com]
Gas OpenCL Merge VDB dynamics node
Uses OpenCL to import VDB data from source geometry into simulation fields.
Gas OpenCL Merge VDB node imports VDB data into DOP fields. Its functionality is very similar to the volume sourcing features of the Volume Source DOP (when Source Type is set to Individual Volumes) and Volume Instance Source DOP (when Source Type is set to Packed Sets). The main difference is that the Gas OpenCL Merge VDB node leverages NanoVDB to perform the merging operations in OpenCL.
https://www.sidefx.com/docs/houdini/nodes/dop/gasopencl.html [
www.sidefx.com]
This DOP provides a general interface to creating and running OpenCL kernels using a variable number of parameters. It also provides users with a way to automatically generate kernel headers from their list of parameters.
Volume
Bind a volume.
VDB
Bind a VDB.
Precision
Controls the precision the data of this parameter is bound with. The Node option will use the node’s precision, so will vary depending on its setting and the corresponding kernel code should use the fpreal or exint defines.
This is the precision the data is stored on the video card so using lower precision can save GPU memory. But note that 16-bit, which corresponds to half, often cannot be used for computation. The vload_half can be used to promote it to float for computation.
If the same attribute ends up bound with different precisions it will fail the binding.
Currently volumes only bind with 32bit data precision.
Readable
Determines if the OpenCL kernel will read from this attribute. If not set, the attributes values will not be copied onto the GPU. This is useful for write-only attributes as it avoids an unnecessary copy, but requires care as uninitialized data will be present.
Present for Attributes.
Writeable
Determines if the OpenCL kernel will write back to this attribute or field. Causes the CPU version of the attribute or field to be marked out of date so the next time it is needed it will be copied back from the GPU.
Present for Fields and Attributes.
Optional
Marks the attribute as not necessary. If the attribute isn’t present in the geometry, rather than erroring, a #define is set in the kernel options to disable the attribute. Note that this also changes the parameter signature, so the Generate Code button should be used to verify the syntax.
Note
The parameter name is used in the #define, so changing the parameter name requires changing the code.
Present for Attributes, Volumes, VDBs, and Options.
Default Value
Marks that if an optional attribute or volume is missing that a parameter value should still be bound to the kernel. A #define is set in the kernel options to disable the attribute and switch to the single value. Note that this also changes the parameter signature, so the Generate Code button should be used to verify the syntax.
The value of the bound paramater will be taken from the integer or float value of this parameter.
Ramp Size
The number of floating point values to evaluate the ramp in.