Example #1
0
        void EvalDiffusion()
        {
            VecR dr = new VecR();
            int  ni;

            for (int nb = 0; nb < nBuffDiffuse; nb++)
            {
                if (tBuf[nb].GetCount == 0)
                {
                    foreach (Node node in nodes)
                    {
                        tBuf[nb].AddorigR(node.Getr);
                        tBuf[nb].AddrTrue(node.Getr);
                    }
                }
                if (tBuf[nb].GetCount >= 0)
                {
                    ni = tBuf[nb].GetCount;
                    tBuf[nb].InitrrDiffuse(0.0);
                    for (int n = 0; n < nodes.Count; n++)
                    {
                        dr.VSub(tBuf[nb].GetrTrue[n].Get, nodes[n].Getr);
                        dr.VDiv(dr.Get, region.Get);
                        dr.Nint();
                        dr.VMul(dr.Get, region.Get);
                        tBuf[nb].GetrTrue[n].Get.VAdd(nodes[n].Getr, dr.Get);
                        dr.VSub(tBuf[nb].GetrTrue[n].Get, tBuf[nb].GetorgR[n].Get);
                        tBuf[nb].AddrrDiffuse(ni, dr.VLenSq());
                    }
                }
                tBuf[nb].AddCount();
            }
            AccumDiffusion();
        }