// // WaterDroplets.cs // using System; using System.Collections.Generic; using System.Text; class WaterDroplets { static public void setCmdLine(int argc, string[] argv, ref int customArgc, ref string[] customArgv) { int i=0; for (;i= gridSizeX) ? -alpha : 0; offset += i; // setup data main diagonal-1 for (i = 0; i < vectorSize; i++) bandValues[offset + i] = (i % gridSizeY > 0) ? -alpha : 0; offset += i; // setup data main diagonal for (i = 0; i < vectorSize; i++) bandValues[offset + i] = mainDiag; offset += i; for (i = 0; i < vectorSize; i++) bandValues[offset + i] = (i >= gridSizeX) ? -alpha : 0; offset += i; // setup data main diagonal-1 for (i = 0; i < vectorSize; i++) bandValues[offset + i] = (i % gridSizeY > 0) ? -alpha : 0; offset += i; int[] bandOffsetDatas = new int[5]{-gridSizeX, -1, 0, 1, gridSizeX}; // create the sparse matrix with input on band form A = libra.sparseBanded(matrixSizeX, matrixSizeY, bandValues, bandOffsetDatas, bandCount); gVar u = libra.floor(libra.step(0.0f, vectorSize - 1.0f, 1.0f) % (float)gridSizeX); gVar v = libra.floor(libra.div(libra.step(0.0f, vectorSize - 1.0f, 1.0f), (float)gridSizeX)); g1 = libra.max(u - 1.0f, 0.0f) + v * (float)gridSizeX; g2 = libra.min(u + 1.0f, gridSizeX - 1.0f) + v * (float)gridSizeX; g3 = u + libra.max(v - 1.0f, 0.0f) * (float)gridSizeX; g4 = u + libra.min(v + 1.0f, gridSizeX - 1.0f) * (float)gridSizeX; // setup initial solution, x = 0 x = libra.zeros(vectorSize, 1); // create drops by scattering a few random values into x int dropCount = (int)(gridSizeX / 20.0f); libra.scatter(libra.rand(dropCount, 1) * (float)(x.rowCount() - 1), libra.rand(dropCount, 1)*0.5f, x); } }