Ejemplo n.º 1
0
        public override int go()
        {
            int    i, j, k, m;
            int    iglob, jglob;
            double xi, eta, zeta;
            double pxi, peta, pzeta;

            double[,,,] ue_1jk   = new double[1, 1, 1, 5];
            double[,,,] ue_nx0jk = new double[1, 1, 1, 5];
            double[,,,] ue_i1k   = new double[1, 1, 1, 5];
            double[,,,] ue_iny0k = new double[1, 1, 1, 5];
            double[,,,] ue_ij1   = new double[1, 1, 1, 5];
            double[,,,] ue_ijnz  = new double[1, 1, 1, 5];

            for (k = 2; k <= nz - 1; k++)
            {
                zeta = ((double)(k - 1)) / (nz - 1);
                for (j = 1; j <= ny; j++)
                {
                    jglob = jpt + j;
                    if (jglob != 1 && jglob != ny0)
                    {
                        eta = ((double)(jglob - 1)) / (ny0 - 1);
                        for (i = 1; i <= nx; i++)
                        {
                            iglob = ipt + i;
                            if (iglob != 1 && iglob != nx0)
                            {
                                xi = ((double)(iglob - 1)) / (nx0 - 1);
                                Exact.setParameters(1, jglob, k, ue_1jk, 0, 0, 0);
                                Exact.go();
                                Exact.setParameters(nx0, jglob, k, ue_nx0jk, 0, 0, 0);
                                Exact.go();
                                Exact.setParameters(iglob, 1, k, ue_i1k, 0, 0, 0);
                                Exact.go();
                                Exact.setParameters(iglob, ny0, k, ue_iny0k, 0, 0, 0);
                                Exact.go();
                                Exact.setParameters(iglob, jglob, 1, ue_ij1, 0, 0, 0);
                                Exact.go();
                                Exact.setParameters(iglob, jglob, nz, ue_ijnz, 0, 0, 0);
                                Exact.go();
                                for (m = 0; m < 5; m++)
                                {
                                    pxi   = (1.0d - xi) * ue_1jk[0, 0, 0, m] + xi * ue_nx0jk[0, 0, 0, m];
                                    peta  = (1.0d - eta) * ue_i1k[0, 0, 0, m] + eta * ue_iny0k[0, 0, 0, m];
                                    pzeta = (1.0d - zeta) * ue_ij1[0, 0, 0, m] + zeta * ue_ijnz[0, 0, 0, m];
                                    u[k - 1, j + 1, i + 1, m] = pxi + peta + pzeta - pxi * peta - peta * pzeta - pzeta * pxi + pxi * peta * pzeta;
                                }
                            }
                        }
                    }
                }
            }
            return(0);
        }
        public override int go()
        {
            int    i, j, k, m, iglob, jglob;
            double tmp;

            double[,,,] u000ijk = new double[1, 1, 1, 5];
            double[] dummy = new double[5];
            errnm = new double[5];

            for (m = 0; m < 5; m++)
            {
                errnm[m] = 0.0d;
                dummy[m] = 0.0d;
            }

            for (k = 2; k <= nz - 1; k++)
            {
                for (j = jst; j <= jend; j++)
                {
                    jglob = jpt + j;
                    for (i = ist; i <= iend; i++)
                    {
                        iglob = ipt + i;
                        Exact.setParameters(iglob, jglob, k, u000ijk, 0, 0, 0);
                        Exact.go();
                        for (m = 0; m < 5; m++)
                        {
                            tmp      = (u000ijk[0, 0, 0, m] - u[k - 1, j + 1, i + 1, m]);
                            dummy[m] = dummy[m] + pow2(tmp);
                        }
                    }
                }
            }

            worldcomm.Allreduce <double>(dummy, MPI.Operation <double> .Add, ref errnm);

            for (m = 0; m < 5; m++)
            {
                errnm[m] = Math.Sqrt(errnm[m] / ((nx0 - 2) * (ny0 - 2) * (nz0 - 2)));
            }

            return(0);
        }
Ejemplo n.º 3
0
        public override int go()
        {
            int i, j, k, iglob, jglob;

            for (j = 1; j <= ny; j++)
            {
                jglob = jpt + j;
                for (i = 1; i <= nx; i++)
                {
                    iglob = ipt + i;
                    Exact.setParameters(iglob, jglob, 1, u, 0, j + 1, i + 1);
                    Exact.go();
                    Exact.setParameters(iglob, jglob, nz, u, nz - 1, j + 1, i + 1);
                    Exact.go();
                }
            }

            if (west == -1)
            {
                for (k = 1; k <= nz; k++)
                {
                    for (i = 1; i <= nx; i++)
                    {
                        iglob = ipt + i;
                        Exact.setParameters(iglob, 1, k, u, k - 1, 1 + 1, i + 1);
                        Exact.go();
                    }
                }
            }

            if (east == -1)
            {
                for (k = 1; k <= nz; k++)
                {
                    for (i = 1; i <= nx; i++)
                    {
                        iglob = ipt + i;
                        Exact.setParameters(iglob, ny0, k, u, k - 1, ny + 1, i + 1);
                        Exact.go();
                    }
                }
            }

            if (north == -1)
            {
                for (k = 1; k <= nz; k++)
                {
                    for (j = 1; j <= ny; j++)
                    {
                        jglob = jpt + j;
                        Exact.setParameters(1, jglob, k, u, k - 1, j + 1, 1 + 1);
                        Exact.go();
                    }
                }
            }

            if (south == -1)
            {
                for (k = 1; k <= nz; k++)
                {
                    for (j = 1; j <= ny; j++)
                    {
                        jglob = jpt + j;
                        Exact.setParameters(nx0, jglob, k, u, k - 1, j + 1, nx + 1);
                        Exact.go();
                    }
                }
            }
            return(0);
        }