40 #include <boost/math/special_functions/gamma.hpp> 
   94             m_session->LoadParameter (
"thermalConductivity",
 
  103             int nConvectiveFields = pFields.num_elements();
 
  104             int nScalars     = nConvectiveFields - 1;
 
  105             int nDim         = pFields[0]->GetCoordim(0);
 
  106             int nSolutionPts = pFields[0]->GetTotPoints();
 
  107             int nTracePts    = pFields[0]->GetTrace()->GetTotPoints();
 
  110             if (pSession->DefinesSolverInfo(
"HOMOGENEOUS"))
 
  151             for (i = 0; i < nScalars; ++i)
 
  160                 for (j = 0; j < nDim; ++j)
 
  171             for (i = 0; i < nConvectiveFields; ++i)
 
  179                 for (j = 0; j < nDim; ++j)
 
  190                 for (j = 0; j < nScalars; ++j)
 
  200                 for (j = 0; j < nScalars+1; ++j)
 
  230             int nLocalSolutionPts;
 
  231             int nElements    = pFields[0]->GetExpSize();            
 
  232             int nDimensions  = pFields[0]->GetCoordim(0);
 
  233             int nSolutionPts = pFields[0]->GetTotPoints();
 
  234             int nTracePts    = pFields[0]->GetTrace()->GetTotPoints();
 
  237             for (i = 0; i < nDimensions; ++i)
 
  256                     for (n = 0; n < nElements; ++n) 
 
  258                         ptsKeys = pFields[0]->GetExp(n)->GetPointsKeys();
 
  259                         nLocalSolutionPts = pFields[0]->GetExp(n)->GetTotPoints();
 
  260                         phys_offset = pFields[0]->GetPhys_Offset(n);
 
  261                         jac = pFields[0]->GetExp(n)
 
  264                         for (i = 0; i < nLocalSolutionPts; ++i)
 
  266                             m_jac[i+phys_offset] = jac[0];
 
  284                     for (n = 0; n < nElements; ++n)
 
  286                         base        = pFields[0]->GetExp(n)->GetBase();
 
  287                         nquad0      = base[0]->GetNumPoints();
 
  288                         nquad1      = base[1]->GetNumPoints();
 
  296                         pFields[0]->GetExp(n)->GetEdgeQFactors(
 
  297                             0, auxArray1 = m_Q2D_e0[n]);
 
  298                         pFields[0]->GetExp(n)->GetEdgeQFactors(
 
  299                             1, auxArray1 = m_Q2D_e1[n]);
 
  300                         pFields[0]->GetExp(n)->GetEdgeQFactors(
 
  301                             2, auxArray1 = m_Q2D_e2[n]);
 
  302                         pFields[0]->GetExp(n)->GetEdgeQFactors(
 
  303                             3, auxArray1 = m_Q2D_e3[n]);
 
  305                         ptsKeys = pFields[0]->GetExp(n)->GetPointsKeys();
 
  306                         nLocalSolutionPts = pFields[0]->GetExp(n)->GetTotPoints();
 
  307                         phys_offset = pFields[0]->GetPhys_Offset(n);
 
  309                         jac  = pFields[0]->GetExp(n)
 
  312                         gmat = pFields[0]->GetExp(n)
 
  316                         if (pFields[0]->GetExp(n)
 
  317                                 ->as<LocalRegions::Expansion2D>()->GetGeom2D()
 
  318                                 ->GetMetricInfo()->GetGtype()
 
  321                             for (i = 0; i < nLocalSolutionPts; ++i)
 
  323                                 m_jac[i+phys_offset]     = jac[i];
 
  324                                 m_gmat[0][i+phys_offset] = gmat[0][i];
 
  325                                 m_gmat[1][i+phys_offset] = gmat[1][i];
 
  326                                 m_gmat[2][i+phys_offset] = gmat[2][i];
 
  327                                 m_gmat[3][i+phys_offset] = gmat[3][i];
 
  332                             for (i = 0; i < nLocalSolutionPts; ++i)
 
  334                                 m_jac[i+phys_offset]     = jac[0];
 
  335                                 m_gmat[0][i+phys_offset] = gmat[0][0];
 
  336                                 m_gmat[1][i+phys_offset] = gmat[1][0];
 
  337                                 m_gmat[2][i+phys_offset] = gmat[2][0];
 
  338                                 m_gmat[3][i+phys_offset] = gmat[3][0];
 
  346                     ASSERTL0(
false,
"3DFR Metric terms not implemented yet");
 
  351                     ASSERTL0(
false, 
"Expansion dimension not recognised");
 
  381             int nquad0, nquad1, nquad2;
 
  382             int nmodes0, nmodes1, nmodes2;
 
  385             int nElements = pFields[0]->GetExpSize();            
 
  386             int nDim      = pFields[0]->GetCoordim(0);
 
  395                     for (n = 0; n < nElements; ++n)
 
  397                         base      = pFields[0]->GetExp(n)->GetBase();
 
  398                         nquad0    = base[0]->GetNumPoints();
 
  399                         nmodes0   = base[0]->GetNumModes();
 
  403                         base[0]->GetZW(z0, w0);
 
  415                         int p0 = nmodes0 - 1;
 
  421                         NekDouble ap0 = boost::math::tgamma(2 * p0 + 1) 
 
  423                            * boost::math::tgamma(p0 + 1) 
 
  424                            * boost::math::tgamma(p0 + 1));
 
  433                             c0 = 2.0 * p0 / ((2.0 * p0 + 1.0) * (p0 + 1.0) 
 
  434                                              * (ap0 * boost::math::tgamma(p0 + 1)) 
 
  435                                              * (ap0 * boost::math::tgamma(p0 + 1)));
 
  439                             c0 = 2.0 * (p0 + 1.0) / ((2.0 * p0 + 1.0) * p0 
 
  440                                                      * (ap0 * boost::math::tgamma(p0 + 1)) 
 
  441                                                      * (ap0 * boost::math::tgamma(p0 + 1)));
 
  445                             c0 = -2.0 / ((2.0 * p0 + 1.0) 
 
  446                                          * (ap0 * boost::math::tgamma(p0 + 1))
 
  447                                          * (ap0 * boost::math::tgamma(p0 + 1)));
 
  451                             c0 = 10000000000000000.0;
 
  454                         NekDouble etap0 = 0.5 * c0 * (2.0 * p0 + 1.0) 
 
  455                         * (ap0 * boost::math::tgamma(p0 + 1)) 
 
  456                         * (ap0 * boost::math::tgamma(p0 + 1));
 
  458                         NekDouble overeta0 = 1.0 / (1.0 + etap0);
 
  469                         for(i = 0; i < nquad0; ++i)
 
  475                             m_dGL_xi1[n][i]  = 0.5 * sign0 * m_dGL_xi1[n][i];
 
  479                         for(i = 0; i < nquad0; ++i)
 
  481                             m_dGR_xi1[n][i]  = etap0 * dLpm0[i];
 
  482                             m_dGR_xi1[n][i] += dLpp0[i];
 
  483                             m_dGR_xi1[n][i] *= overeta0;
 
  484                             m_dGR_xi1[n][i] += dLp0[i];
 
  485                             m_dGR_xi1[n][i]  = 0.5 * m_dGR_xi1[n][i];
 
  502                     for (n = 0; n < nElements; ++n)
 
  504                         base      = pFields[0]->GetExp(n)->GetBase();
 
  505                         nquad0    = base[0]->GetNumPoints();
 
  506                         nquad1    = base[1]->GetNumPoints();
 
  507                         nmodes0   = base[0]->GetNumModes();
 
  508                         nmodes1   = base[1]->GetNumModes(); 
 
  515                         base[0]->GetZW(z0, w0);
 
  516                         base[1]->GetZW(z1, w1);
 
  533                         int p0 = nmodes0 - 1;
 
  534                         int p1 = nmodes1 - 1;
 
  541                         NekDouble ap0 = boost::math::tgamma(2 * p0 + 1) 
 
  543                            * boost::math::tgamma(p0 + 1) 
 
  544                            * boost::math::tgamma(p0 + 1));
 
  546                         NekDouble ap1 = boost::math::tgamma(2 * p1 + 1) 
 
  548                            * boost::math::tgamma(p1 + 1) 
 
  549                            * boost::math::tgamma(p1 + 1));
 
  559                             c0 = 2.0 * p0 / ((2.0 * p0 + 1.0) * (p0 + 1.0) 
 
  560                                              * (ap0 * boost::math::tgamma(p0 + 1)) 
 
  561                                              * (ap0 * boost::math::tgamma(p0 + 1)));
 
  563                             c1 = 2.0 * p1 / ((2.0 * p1 + 1.0) * (p1 + 1.0) 
 
  564                                              * (ap1 * boost::math::tgamma(p1 + 1)) 
 
  565                                              * (ap1 * boost::math::tgamma(p1 + 1)));
 
  569                             c0 = 2.0 * (p0 + 1.0) / ((2.0 * p0 + 1.0) * p0 
 
  570                                                      * (ap0 * boost::math::tgamma(p0 + 1)) 
 
  571                                                      * (ap0 * boost::math::tgamma(p0 + 1)));
 
  573                             c1 = 2.0 * (p1 + 1.0) / ((2.0 * p1 + 1.0) * p1 
 
  574                                                      * (ap1 * boost::math::tgamma(p1 + 1)) 
 
  575                                                      * (ap1 * boost::math::tgamma(p1 + 1)));
 
  579                             c0 = -2.0 / ((2.0 * p0 + 1.0) 
 
  580                                          * (ap0 * boost::math::tgamma(p0 + 1))
 
  581                                          * (ap0 * boost::math::tgamma(p0 + 1)));
 
  583                             c1 = -2.0 / ((2.0 * p1 + 1.0) 
 
  584                                          * (ap1 * boost::math::tgamma(p1 + 1))
 
  585                                          * (ap1 * boost::math::tgamma(p1 + 1)));
 
  589                             c0 = 10000000000000000.0;
 
  590                             c1 = 10000000000000000.0;
 
  593                         NekDouble etap0 = 0.5 * c0 * (2.0 * p0 + 1.0) 
 
  594                         * (ap0 * boost::math::tgamma(p0 + 1)) 
 
  595                         * (ap0 * boost::math::tgamma(p0 + 1));
 
  597                         NekDouble etap1 = 0.5 * c1 * (2.0 * p1 + 1.0) 
 
  598                         * (ap1 * boost::math::tgamma(p1 + 1)) 
 
  599                         * (ap1 * boost::math::tgamma(p1 + 1));
 
  601                         NekDouble overeta0 = 1.0 / (1.0 + etap0);
 
  602                         NekDouble overeta1 = 1.0 / (1.0 + etap1);
 
  617                         for(i = 0; i < nquad0; ++i)
 
  623                             m_dGL_xi1[n][i]  = 0.5 * sign0 * m_dGL_xi1[n][i];
 
  627                         for(i = 0; i < nquad1; ++i)
 
  629                             m_dGL_xi2[n][i]  = etap1 * dLpm1[i];
 
  630                             m_dGL_xi2[n][i] += dLpp1[i];
 
  631                             m_dGL_xi2[n][i] *= overeta1;
 
  632                             m_dGL_xi2[n][i]  = dLp1[i] - m_dGL_xi2[n][i];
 
  633                             m_dGL_xi2[n][i]  = 0.5 * sign1 * m_dGL_xi2[n][i];
 
  637                         for(i = 0; i < nquad0; ++i)
 
  639                             m_dGR_xi1[n][i]  = etap0 * dLpm0[i];
 
  640                             m_dGR_xi1[n][i] += dLpp0[i];
 
  641                             m_dGR_xi1[n][i] *= overeta0;
 
  642                             m_dGR_xi1[n][i] += dLp0[i];
 
  643                             m_dGR_xi1[n][i]  = 0.5 * m_dGR_xi1[n][i];
 
  647                         for(i = 0; i < nquad1; ++i)
 
  649                             m_dGR_xi2[n][i]  = etap1 * dLpm1[i];
 
  650                             m_dGR_xi2[n][i] += dLpp1[i];
 
  651                             m_dGR_xi2[n][i] *= overeta1;
 
  652                             m_dGR_xi2[n][i] += dLp1[i];
 
  653                             m_dGR_xi2[n][i]  = 0.5 * m_dGR_xi2[n][i];
 
  667                     for (n = 0; n < nElements; ++n)
 
  669                         base      = pFields[0]->GetExp(n)->GetBase();
 
  670                         nquad0    = base[0]->GetNumPoints();
 
  671                         nquad1    = base[1]->GetNumPoints();
 
  672                         nquad2    = base[2]->GetNumPoints();
 
  673                         nmodes0   = base[0]->GetNumModes();
 
  674                         nmodes1   = base[1]->GetNumModes();
 
  675                         nmodes2   = base[2]->GetNumModes();
 
  684                         base[0]->GetZW(z0, w0);
 
  685                         base[1]->GetZW(z1, w1);
 
  686                         base[1]->GetZW(z2, w2);
 
  708                         int p0 = nmodes0 - 1;
 
  709                         int p1 = nmodes1 - 1;
 
  710                         int p2 = nmodes2 - 1;
 
  718                         NekDouble ap0 = boost::math::tgamma(2 * p0 + 1) 
 
  720                            * boost::math::tgamma(p0 + 1) 
 
  721                            * boost::math::tgamma(p0 + 1));
 
  724                         NekDouble ap1 = boost::math::tgamma(2 * p1 + 1) 
 
  726                            * boost::math::tgamma(p1 + 1) 
 
  727                            * boost::math::tgamma(p1 + 1));
 
  730                         NekDouble ap2 = boost::math::tgamma(2 * p2 + 1) 
 
  732                            * boost::math::tgamma(p2 + 1) 
 
  733                            * boost::math::tgamma(p2 + 1));
 
  744                             c0 = 2.0 * p0 / ((2.0 * p0 + 1.0) * (p0 + 1.0) 
 
  745                                              * (ap0 * boost::math::tgamma(p0 + 1)) 
 
  746                                              * (ap0 * boost::math::tgamma(p0 + 1)));
 
  748                             c1 = 2.0 * p1 / ((2.0 * p1 + 1.0) * (p1 + 1.0) 
 
  749                                              * (ap1 * boost::math::tgamma(p1 + 1)) 
 
  750                                              * (ap1 * boost::math::tgamma(p1 + 1)));
 
  752                             c2 = 2.0 * p2 / ((2.0 * p2 + 1.0) * (p2 + 1.0) 
 
  753                                              * (ap2 * boost::math::tgamma(p2 + 1)) 
 
  754                                              * (ap2 * boost::math::tgamma(p2 + 1)));
 
  758                             c0 = 2.0 * (p0 + 1.0) / ((2.0 * p0 + 1.0) * p0 
 
  759                                                      * (ap0 * boost::math::tgamma(p0 + 1)) 
 
  760                                                      * (ap0 * boost::math::tgamma(p0 + 1)));
 
  762                             c1 = 2.0 * (p1 + 1.0) / ((2.0 * p1 + 1.0) * p1 
 
  763                                                      * (ap1 * boost::math::tgamma(p1 + 1)) 
 
  764                                                      * (ap1 * boost::math::tgamma(p1 + 1)));
 
  766                             c2 = 2.0 * (p2 + 1.0) / ((2.0 * p2 + 1.0) * p2 
 
  767                                                      * (ap2 * boost::math::tgamma(p2 + 1)) 
 
  768                                                      * (ap2 * boost::math::tgamma(p2 + 1)));
 
  772                             c0 = -2.0 / ((2.0 * p0 + 1.0) 
 
  773                                          * (ap0 * boost::math::tgamma(p0 + 1))
 
  774                                          * (ap0 * boost::math::tgamma(p0 + 1)));
 
  776                             c1 = -2.0 / ((2.0 * p1 + 1.0) 
 
  777                                          * (ap1 * boost::math::tgamma(p1 + 1))
 
  778                                          * (ap1 * boost::math::tgamma(p1 + 1)));
 
  780                             c2 = -2.0 / ((2.0 * p2 + 1.0) 
 
  781                                          * (ap2 * boost::math::tgamma(p2 + 1))
 
  782                                          * (ap2 * boost::math::tgamma(p2 + 1)));
 
  786                             c0 = 10000000000000000.0;
 
  787                             c1 = 10000000000000000.0;
 
  788                             c2 = 10000000000000000.0;
 
  791                         NekDouble etap0 = 0.5 * c0 * (2.0 * p0 + 1.0) 
 
  792                         * (ap0 * boost::math::tgamma(p0 + 1)) 
 
  793                         * (ap0 * boost::math::tgamma(p0 + 1));
 
  795                         NekDouble etap1 = 0.5 * c1 * (2.0 * p1 + 1.0) 
 
  796                         * (ap1 * boost::math::tgamma(p1 + 1)) 
 
  797                         * (ap1 * boost::math::tgamma(p1 + 1));
 
  799                         NekDouble etap2 = 0.5 * c2 * (2.0 * p2 + 1.0) 
 
  800                         * (ap2 * boost::math::tgamma(p2 + 1)) 
 
  801                         * (ap2 * boost::math::tgamma(p2 + 1));
 
  803                         NekDouble overeta0 = 1.0 / (1.0 + etap0);
 
  804                         NekDouble overeta1 = 1.0 / (1.0 + etap1);
 
  805                         NekDouble overeta2 = 1.0 / (1.0 + etap2);
 
  824                         for(i = 0; i < nquad0; ++i)
 
  830                             m_dGL_xi1[n][i]  = 0.5 * sign0 * m_dGL_xi1[n][i];
 
  834                         for(i = 0; i < nquad1; ++i)
 
  836                             m_dGL_xi2[n][i]  = etap1 * dLpm1[i];
 
  837                             m_dGL_xi2[n][i] += dLpp1[i];
 
  838                             m_dGL_xi2[n][i] *= overeta1;
 
  839                             m_dGL_xi2[n][i]  = dLp1[i] - m_dGL_xi2[n][i];
 
  840                             m_dGL_xi2[n][i]  = 0.5 * sign1 * m_dGL_xi2[n][i];
 
  844                         for(i = 0; i < nquad2; ++i)
 
  846                             m_dGL_xi3[n][i]  = etap2 * dLpm2[i];
 
  847                             m_dGL_xi3[n][i] += dLpp2[i];
 
  848                             m_dGL_xi3[n][i] *= overeta2;
 
  849                             m_dGL_xi3[n][i]  = dLp2[i] - m_dGL_xi3[n][i];
 
  850                             m_dGL_xi3[n][i]  = 0.5 * sign2 * m_dGL_xi3[n][i];
 
  854                         for(i = 0; i < nquad0; ++i)
 
  856                             m_dGR_xi1[n][i]  = etap0 * dLpm0[i];
 
  857                             m_dGR_xi1[n][i] += dLpp0[i];
 
  858                             m_dGR_xi1[n][i] *= overeta0;
 
  859                             m_dGR_xi1[n][i] += dLp0[i];
 
  860                             m_dGR_xi1[n][i]  = 0.5 * m_dGR_xi1[n][i];
 
  864                         for(i = 0; i < nquad1; ++i)
 
  866                             m_dGR_xi2[n][i]  = etap1 * dLpm1[i];
 
  867                             m_dGR_xi2[n][i] += dLpp1[i];
 
  868                             m_dGR_xi2[n][i] *= overeta1;
 
  869                             m_dGR_xi2[n][i] += dLp1[i];
 
  870                             m_dGR_xi2[n][i]  = 0.5 * m_dGR_xi2[n][i];
 
  874                         for(i = 0; i < nquad2; ++i)
 
  876                             m_dGR_xi3[n][i]  = etap2 * dLpm2[i];
 
  877                             m_dGR_xi3[n][i] += dLpp2[i];
 
  878                             m_dGR_xi3[n][i] *= overeta2;
 
  879                             m_dGR_xi3[n][i] += dLp2[i];
 
  880                             m_dGR_xi3[n][i]  = 0.5 * m_dGR_xi3[n][i];
 
  887                     ASSERTL0(
false,
"Expansion dimension not recognised");
 
  902             const int                                         nConvectiveFields,
 
  915             Basis = fields[0]->GetExp(0)->GetBase();
 
  917             int nElements    = fields[0]->GetExpSize();            
 
  918             int nDim         = fields[0]->GetCoordim(0);
 
  919             int nScalars     = inarray.num_elements();
 
  920             int nSolutionPts = fields[0]->GetTotPoints();
 
  921             int nCoeffs      = fields[0]->GetNcoeffs();
 
  924             for (i = 0; i < nConvectiveFields; ++i)
 
  937                     for (i = 0; i < nScalars; ++i)
 
  941                         for (n = 0; n < nElements; n++)
 
  943                             phys_offset = fields[0]->GetPhys_Offset(n);
 
  945                             fields[i]->GetExp(n)->PhysDeriv(0, 
 
  946                                     auxArray1 = inarray[i] + phys_offset, 
 
  947                                     auxArray2 = 
m_DU1[i][0] + phys_offset);
 
  977                     for (i = 0; i < nConvectiveFields; ++i)
 
  981                         for (n = 0; n < nElements; n++)
 
  983                             phys_offset = fields[0]->GetPhys_Offset(n);
 
  985                             fields[i]->GetExp(n)->PhysDeriv(0, 
 
  987                                 auxArray2 = 
m_DD1[i][0] + phys_offset);
 
 1004                                     &
m_DD1[i][0][0], 1, &outarray[i][0], 1);
 
 1007                         if(!(Basis[0]->Collocation()))
 
 1009                             fields[i]->FwdTrans(outarray[i], outarrayCoeff[i]);
 
 1010                             fields[i]->BwdTrans(outarrayCoeff[i], outarray[i]);
 
 1018                     for(i = 0; i < nScalars; ++i)
 
 1020                         for (j = 0; j < nDim; ++j)
 
 1029                                             &
m_gmat[0][0], 1, &u1_hat[0], 1);
 
 1032                                             &
m_jac[0], 1, &u1_hat[0], 1);
 
 1035                                             &
m_gmat[1][0], 1, &u2_hat[0], 1);
 
 1038                                             &
m_jac[0], 1, &u2_hat[0], 1);
 
 1043                                             &
m_gmat[2][0], 1, &u1_hat[0], 1);
 
 1046                                             &
m_jac[0], 1, &u1_hat[0], 1);
 
 1049                                             &
m_gmat[3][0], 1, &u2_hat[0], 1);
 
 1052                                             &
m_jac[0], 1, &u2_hat[0], 1);
 
 1055                             for (n = 0; n < nElements; n++)
 
 1057                                 phys_offset = fields[0]->GetPhys_Offset(n);
 
 1059                                 fields[i]->GetExp(n)->StdPhysDeriv(0,
 
 1060                                     auxArray1 = u1_hat + phys_offset,
 
 1061                                     auxArray2 = 
m_tmp1[i][j] + phys_offset);
 
 1063                                 fields[i]->GetExp(n)->StdPhysDeriv(1,
 
 1064                                     auxArray1 = u2_hat + phys_offset,
 
 1065                                     auxArray2 = 
m_tmp2[i][j] + phys_offset);
 
 1070                                         &
m_DU1[i][j][0], 1);
 
 1079                                           inarray[i], 
m_IF1[i][j], 
 
 1085                         for (j = 0; j < nSolutionPts; ++j)
 
 1108                         for (j = 0; j < nSolutionPts; j++)
 
 1117                             m_gmat[0][j] * m_BD1[i][1][j] - 
 
 1118                             m_gmat[1][j] * m_BD1[i][0][j];
 
 1122                         for (j = 0; j < nDim; ++j)
 
 1133                         for (i = 0; i < nScalars; ++i)
 
 1150                     for (i = 0; i < nConvectiveFields; ++i)
 
 1156                         for (j = 0; j < nSolutionPts; j++)
 
 1165                         for (n = 0; n < nElements; n++)
 
 1167                             phys_offset = fields[0]->GetPhys_Offset(n);
 
 1169                             fields[0]->GetExp(n)->StdPhysDeriv(0, 
 
 1170                                 auxArray1 = f_hat + phys_offset, 
 
 1171                                 auxArray2 = 
m_DD1[i][0] + phys_offset); 
 
 1173                             fields[0]->GetExp(n)->StdPhysDeriv(1, 
 
 1174                                 auxArray1 = g_hat + phys_offset, 
 
 1175                                 auxArray2 = 
m_DD1[i][1] + phys_offset);
 
 1183                         if (Basis[0]->GetPointsType() ==
 
 1185                             Basis[1]->GetPointsType() ==
 
 1203                                     &
m_divFC[i][0], 1, &outarray[i][0], 1);
 
 1208                                     &
m_jac[0], 1, &outarray[i][0], 1);
 
 1211                         if(!(Basis[0]->Collocation()))
 
 1213                             fields[i]->FwdTrans(outarray[i], outarrayCoeff[i]);
 
 1214                             fields[i]->BwdTrans(outarrayCoeff[i], outarray[i]);
 
 1222                     ASSERTL0(
false, 
"3D FRDG case not implemented yet");
 
 1240             int nTracePts = fields[0]->GetTrace()->GetTotPoints();
 
 1241             int nScalars  = inarray.num_elements();
 
 1242             int nDim      = fields[0]->GetCoordim(0);
 
 1248             for (i = 0; i < nDim; ++i)
 
 1250                 fields[0]->ExtractTracePhys(inarray[i], 
m_traceVel[i]);
 
 1260             for (i = 0; i < nScalars; ++i)
 
 1265                 fields[i]->GetFwdBwdTracePhys(inarray[i], Fwd[i], Bwd[i]);
 
 1266                 fields[0]->GetTrace()->Upwind(Vn, Fwd[i], Bwd[i], numflux[i]);
 
 1270             if (fields[0]->GetBndCondExpansions().num_elements())
 
 1276             for (j = 0; j < nDim; ++j)
 
 1278                 for (i = 0; i < nScalars; ++i)
 
 1281                                  numericalFluxO1[i][j], 1);
 
 1299             int nBndEdgePts, nBndEdges, nBndRegions;
 
 1301             int nTracePts = fields[0]->GetTrace()->GetTotPoints();
 
 1302             int nScalars  = inarray.num_elements();
 
 1312             for (i = 0; i < nScalars; ++i)
 
 1317                 fields[i]->ExtractTracePhys(inarray[i], uplus[i]);
 
 1321             for (i = 0; i < nScalars-1; ++i)
 
 1326                 nBndRegions = fields[i+1]->
 
 1327                 GetBndCondExpansions().num_elements();
 
 1328                 for (j = 0; j < nBndRegions; ++j)
 
 1330                     nBndEdges = fields[i+1]->
 
 1331                     GetBndCondExpansions()[j]->GetExpSize();
 
 1332                     for (e = 0; e < nBndEdges; ++e)
 
 1334                         nBndEdgePts = fields[i+1]->
 
 1335                         GetBndCondExpansions()[j]->GetExp(e)->GetTotPoints();
 
 1338                         GetBndCondExpansions()[j]->GetPhys_Offset(e);
 
 1340                         id2 = fields[0]->GetTrace()->
 
 1341                         GetPhys_Offset(fields[0]->GetTraceMap()->
 
 1342                                        GetBndCondTraceToGlobalTraceMap(cnt++));
 
 1345                         if (boost::iequals(fields[i]->GetBndConditions()[j]->
 
 1346                             GetUserDefined(),
"WallViscous") ||
 
 1347                             boost::iequals(fields[i]->GetBndConditions()[j]->
 
 1348                             GetUserDefined(),
"WallAdiabatic"))
 
 1351                                         &scalarVariables[i][id2], 1);
 
 1355                         else if (fields[i]->GetBndConditions()[j]->
 
 1356                                  GetBoundaryConditionType() == 
 
 1361                                           GetBndCondExpansions()[j]->
 
 1362                                           UpdatePhys())[id1], 1,
 
 1364                                           GetBndCondExpansions()[j]->
 
 1365                                           UpdatePhys())[id1], 1,
 
 1366                                         &scalarVariables[i][id2], 1);
 
 1370                         if (fields[i]->GetBndConditions()[j]->
 
 1371                             GetBoundaryConditionType() == 
 
 1375                                          &scalarVariables[i][id2], 1, 
 
 1376                                          &penaltyfluxO1[i][id2], 1);
 
 1380                         else if ((fields[i]->GetBndConditions()[j])->
 
 1381                                  GetBoundaryConditionType() == 
 
 1386                                          &penaltyfluxO1[i][id2], 1);
 
 1391                                     &scalarVariables[i][id2], 1,
 
 1392                                     &scalarVariables[i][id2], 1,
 
 1409             nBndRegions = fields[nScalars]->
 
 1410             GetBndCondExpansions().num_elements();
 
 1411             for (j = 0; j < nBndRegions; ++j)
 
 1413                 nBndEdges = fields[nScalars]->
 
 1414                 GetBndCondExpansions()[j]->GetExpSize();
 
 1415                 for (e = 0; e < nBndEdges; ++e)
 
 1417                     nBndEdgePts = fields[nScalars]->
 
 1418                     GetBndCondExpansions()[j]->GetExp(e)->GetTotPoints();
 
 1420                     id1 = fields[nScalars]->
 
 1421                     GetBndCondExpansions()[j]->GetPhys_Offset(e);
 
 1423                     id2 = fields[0]->GetTrace()->
 
 1424                     GetPhys_Offset(fields[0]->GetTraceMap()->
 
 1425                                    GetBndCondTraceToGlobalTraceMap(cnt++));
 
 1428                     if (boost::iequals(fields[i]->GetBndConditions()[j]->
 
 1429                                        GetUserDefined(),
"WallViscous"))
 
 1433                                      &scalarVariables[nScalars-1][id2], 1);
 
 1437                     else if (fields[i]->GetBndConditions()[j]->
 
 1438                              GetBoundaryConditionType() == 
 
 1443                                     &(fields[nScalars]->
 
 1444                                       GetBndCondExpansions()[j]->
 
 1447                                       GetBndCondExpansions()[j]->
 
 1449                                     &scalarVariables[nScalars-1][id2], 1);
 
 1453                                     &scalarVariables[nScalars-1][id2], 1,
 
 1455                                     &scalarVariables[nScalars-1][id2], 1);
 
 1459                                     &scalarVariables[nScalars-1][id2], 1,
 
 1460                                     &scalarVariables[nScalars-1][id2], 1);
 
 1464                     if (fields[nScalars]->GetBndConditions()[j]->
 
 1465                         GetBoundaryConditionType() ==
 
 1468                             fields[nScalars]->GetBndConditions()[j]
 
 1469                             ->GetUserDefined(), 
"WallAdiabatic"))
 
 1472                                      &scalarVariables[nScalars-1][id2], 1,
 
 1473                                      &penaltyfluxO1[nScalars-1][id2], 1);
 
 1478                     else if (((fields[nScalars]->GetBndConditions()[j])->
 
 1479                               GetBoundaryConditionType() ==
 
 1482                                  fields[nScalars]->GetBndConditions()[j]
 
 1483                                  ->GetUserDefined(), 
"WallAdiabatic"))
 
 1486                                      &uplus[nScalars-1][id2], 1,
 
 1487                                      &penaltyfluxO1[nScalars-1][id2], 1);
 
 1505             int nTracePts  = fields[0]->GetTrace()->GetTotPoints();
 
 1506             int nVariables = fields.num_elements();
 
 1507             int nDim       = fields[0]->GetCoordim(0);
 
 1518             for (i = 0; i < nDim; ++i)
 
 1520                 fields[0]->ExtractTracePhys(ufield[i], 
m_traceVel[i]);
 
 1528             for (i = 1; i < nVariables; ++i)
 
 1531                 for (j = 0; j < nDim; ++j)
 
 1534                     fields[i]->GetFwdBwdTracePhys(qfield[j][i], qFwd, qBwd);
 
 1537                     fields[i]->GetTrace()->Upwind(Vn, qBwd, qFwd, qfluxtemp);
 
 1544                     if (fields[0]->GetBndCondExpansions().num_elements())
 
 1569             int nBndEdges, nBndEdgePts;
 
 1573             int nTracePts   = fields[0]->GetTrace()->GetTotPoints();
 
 1574             int nBndRegions = fields[var]->GetBndCondExpansions().num_elements();
 
 1580             fields[var]->ExtractTracePhys(qfield, qtemp);
 
 1583             for (i = 0; i < nBndRegions; ++i)
 
 1586                 nBndEdges = fields[var]->
 
 1587                 GetBndCondExpansions()[i]->GetExpSize();
 
 1590                 for (e = 0; e < nBndEdges; ++e)
 
 1592                     nBndEdgePts = fields[var]->
 
 1593                     GetBndCondExpansions()[i]->GetExp(e)->GetTotPoints();
 
 1595                     id2 = fields[0]->GetTrace()->
 
 1596                     GetPhys_Offset(fields[0]->GetTraceMap()->
 
 1597                                    GetBndCondTraceToGlobalTraceMap(cnt++));
 
 1602                     if(fields[var]->GetBndConditions()[i]->
 
 1604                        && !boost::iequals(fields[var]->GetBndConditions()[i]
 
 1605                                           ->GetUserDefined(), 
"WallAdiabatic"))
 
 1610                                     &penaltyflux[id2], 1);
 
 1614                     else if((fields[var]->GetBndConditions()[i])->
 
 1618                                  "Neumann bcs not implemented for LFRNS");
 
 1620                     else if(boost::iequals(fields[var]->GetBndConditions()[i]
 
 1621                                            ->GetUserDefined(), 
"WallAdiabatic"))
 
 1633                                         &penaltyflux[id2], 1);
 
 1652             const int                                         nConvectiveFields,
 
 1659             int nLocalSolutionPts, phys_offset;
 
 1667             Basis = fields[0]->GetExp(0)->GetBasis(0);
 
 1669             int nElements = fields[0]->GetExpSize();            
 
 1670             int nPts      = fields[0]->GetTotPoints();
 
 1680             for (n = 0; n < nElements; ++n)
 
 1682                 nLocalSolutionPts = fields[0]->GetExp(n)->GetTotPoints();
 
 1683                 phys_offset = fields[0]->GetPhys_Offset(n);
 
 1688                              &flux[phys_offset], 1,
 
 1691                 fields[0]->GetExp(n)->GetVertexPhysVals(0, tmparrayX1,
 
 1693                 JumpL[n] =  iFlux[n] - tmpFluxVertex;
 
 1695                 fields[0]->GetExp(n)->GetVertexPhysVals(1, tmparrayX1,
 
 1697                 JumpR[n] =  iFlux[n+1] - tmpFluxVertex;
 
 1700             for (n = 0; n < nElements; ++n)
 
 1702                 ptsKeys = fields[0]->GetExp(n)->GetPointsKeys();
 
 1703                 nLocalSolutionPts = fields[0]->GetExp(n)->GetTotPoints();
 
 1704                 phys_offset       = fields[0]->GetPhys_Offset(n);
 
 1705                 jac               = fields[0]->GetExp(n)
 
 1709                 JumpL[n] = JumpL[n] * jac[0];
 
 1710                 JumpR[n] = JumpR[n] * jac[0];
 
 1721                 Vmath::Vadd(nLocalSolutionPts, &DCL[0], 1, &DCR[0], 1, 
 
 1722                             &derCFlux[phys_offset], 1);
 
 1742             const int                                         nConvectiveFields,
 
 1743             const int                                         direction,
 
 1749             int n, e, i, j, cnt;
 
 1753             int nElements   = fields[0]->GetExpSize();
 
 1754             int trace_offset, phys_offset;
 
 1755             int nLocalSolutionPts;
 
 1763             &elmtToTrace = fields[0]->GetTraceMap()->GetElmtToTrace();
 
 1766             for (n = 0; n < nElements; ++n)
 
 1769                 phys_offset = fields[0]->GetPhys_Offset(n);
 
 1770                 nLocalSolutionPts = fields[0]->GetExp(n)->GetTotPoints();
 
 1771                 ptsKeys = fields[0]->GetExp(n)->GetPointsKeys();
 
 1776                 base = fields[0]->GetExp(n)->GetBase();
 
 1777                 nquad0 = base[0]->GetNumPoints();
 
 1778                 nquad1 = base[1]->GetNumPoints();
 
 1786                 for (e = 0; e < fields[0]->GetExp(n)->GetNedges(); ++e)
 
 1789                     nEdgePts = fields[0]->GetExp(n)->GetEdgeNumPoints(e);
 
 1795                     trace_offset = fields[0]->GetTrace()->GetPhys_Offset(
 
 1796                                                 elmtToTrace[n][e]->GetElmtId());
 
 1805                     fields[0]->GetExp(n)->GetEdgePhysVals(
 
 1806                                                     e, elmtToTrace[n][e],
 
 1808                                                     auxArray1 = tmparray);
 
 1819                                 &tmparray[0], 1, &fluxJumps[0], 1);
 
 1823                     if (fields[0]->GetExp(n)->GetEorient(e) == 
 
 1832                     if (fields[0]->GetExp(n)->as<LocalRegions::Expansion2D>()
 
 1833                             ->GetGeom2D()->GetMetricInfo()->GetGtype()
 
 1838                         fields[0]->GetExp(n)->GetEdgePhysVals(
 
 1839                                                     e, elmtToTrace[n][e],
 
 1840                                                     jac, auxArray1 = jacEdge);
 
 1844                         if (fields[0]->GetExp(n)->GetEorient(e) == 
 
 1853                         for (j = 0; j < nEdgePts; j++)
 
 1855                             fluxJumps[j] = fluxJumps[j] * jacEdge[j];
 
 1873                             for (i = 0; i < nquad0; ++i)
 
 1878                                 for (j = 0; j < nquad1; ++j)
 
 1881                                     divCFluxE0[cnt] = fluxJumps[i] * 
m_dGL_xi2[n][j];
 
 1886                             for (i = 0; i < nquad1; ++i)
 
 1891                                 for (j = 0; j < nquad0; ++j)
 
 1893                                     cnt = (nquad0)*i + j;
 
 1894                                     divCFluxE1[cnt] = fluxJumps[i] * 
m_dGR_xi1[n][j];
 
 1899                             for (i = 0; i < nquad0; ++i)
 
 1904                                 for (j = 0; j < nquad1; ++j)
 
 1906                                     cnt = (nquad0 - 1) + j*nquad0 - i;
 
 1907                                     divCFluxE2[cnt] = fluxJumps[i] * 
m_dGR_xi2[n][j];
 
 1912                             for (i = 0; i < nquad1; ++i)
 
 1916                                 for (j = 0; j < nquad0; ++j)
 
 1918                                     cnt = (nquad0*nquad1 - nquad0) + j - i*nquad0;
 
 1919                                     divCFluxE3[cnt] = fluxJumps[i] * 
m_dGL_xi1[n][j];  
 
 1925                             ASSERTL0(
false, 
"edge value (< 3) is out of range");
 
 1939                                 &divCFluxE3[0], 1, &derCFlux[phys_offset], 1);
 
 1941                 else if (direction == 1)
 
 1944                                 &divCFluxE2[0], 1, &derCFlux[phys_offset], 1);
 
 1963             const int                                         nConvectiveFields,
 
 1970             int n, e, i, j, cnt;
 
 1972             int nElements = fields[0]->GetExpSize();
 
 1973             int nLocalSolutionPts;
 
 1984             &elmtToTrace = fields[0]->GetTraceMap()->GetElmtToTrace();
 
 1987             for(n = 0; n < nElements; ++n)
 
 1990                 phys_offset = fields[0]->GetPhys_Offset(n);
 
 1991                 nLocalSolutionPts = fields[0]->GetExp(n)->GetTotPoints();
 
 1993                 base = fields[0]->GetExp(n)->GetBase();
 
 1994                 nquad0 = base[0]->GetNumPoints();
 
 1995                 nquad1 = base[1]->GetNumPoints();
 
 2003                 for(e = 0; e < fields[0]->GetExp(n)->GetNedges(); ++e)
 
 2006                     nEdgePts = fields[0]->GetExp(n)->GetEdgeNumPoints(e);
 
 2015                     trace_offset  = fields[0]->GetTrace()->GetPhys_Offset(
 
 2016                                                 elmtToTrace[n][e]->GetElmtId());
 
 2020                     fields[0]->GetExp(n)->GetEdgeNormal(e);
 
 2024                     fields[0]->GetExp(n)->GetEdgePhysVals(
 
 2025                                                 e, elmtToTrace[n][e],
 
 2026                                                 fluxX1 + phys_offset,
 
 2027                                                 auxArray1 = tmparrayX1);
 
 2031                     fields[0]->GetExp(n)->GetEdgePhysVals(
 
 2032                                                 e, elmtToTrace[n][e],
 
 2033                                                 fluxX2 + phys_offset,
 
 2034                                                 auxArray1 = tmparrayX2);
 
 2037                     for (i = 0; i < nEdgePts; ++i)
 
 2046                                 &numericalFlux[trace_offset], 1, 
 
 2047                                 &fluxN[0], 1, &fluxJumps[0], 1);
 
 2050                     if (fields[0]->GetExp(n)->GetEorient(e) == 
 
 2054                                        auxArray1 = fluxJumps, 1,
 
 2055                                        auxArray2 = fluxJumps, 1);
 
 2058                     NekDouble fac = fields[0]->GetExp(n)->EdgeNormalNegated(e) ?
 
 2061                     for (i = 0; i < nEdgePts; ++i)
 
 2066                             fluxJumps[i] = -fluxJumps[i];
 
 2074                             for (i = 0; i < nquad0; ++i)
 
 2077                                 fluxJumps[i] = -(
m_Q2D_e0[n][i]) * fluxJumps[i];
 
 2079                                 for (j = 0; j < nquad1; ++j)
 
 2082                                     divCFluxE0[cnt] = fluxJumps[i] * 
m_dGL_xi2[n][j];
 
 2087                             for (i = 0; i < nquad1; ++i)
 
 2090                                 fluxJumps[i] = (
m_Q2D_e1[n][i]) * fluxJumps[i];
 
 2092                                 for (j = 0; j < nquad0; ++j)
 
 2094                                     cnt = (nquad0)*i + j;
 
 2095                                     divCFluxE1[cnt] = fluxJumps[i] * 
m_dGR_xi1[n][j];
 
 2100                             for (i = 0; i < nquad0; ++i)
 
 2103                                 fluxJumps[i] = (
m_Q2D_e2[n][i]) * fluxJumps[i];
 
 2105                                 for (j = 0; j < nquad1; ++j)
 
 2107                                     cnt = (nquad0 - 1) + j*nquad0 - i;
 
 2108                                     divCFluxE2[cnt] = fluxJumps[i] * 
m_dGR_xi2[n][j];
 
 2113                             for (i = 0; i < nquad1; ++i)
 
 2116                                 fluxJumps[i] = -(
m_Q2D_e3[n][i]) * fluxJumps[i];
 
 2117                                 for (j = 0; j < nquad0; ++j)
 
 2119                                     cnt = (nquad0*nquad1 - nquad0) + j - i*nquad0;
 
 2120                                     divCFluxE3[cnt] = fluxJumps[i] * 
m_dGL_xi1[n][j];
 
 2127                             ASSERTL0(
false,
"edge value (< 3) is out of range");
 
 2134                             &divCFluxE1[0], 1, &divCFlux[phys_offset], 1);
 
 2136                 Vmath::Vadd(nLocalSolutionPts, &divCFlux[phys_offset], 1, 
 
 2137                             &divCFluxE2[0], 1, &divCFlux[phys_offset], 1);
 
 2139                 Vmath::Vadd(nLocalSolutionPts, &divCFlux[phys_offset], 1, 
 
 2140                             &divCFluxE3[0], 1, &divCFlux[phys_offset], 1);
 
 2159             const int nConvectiveFields,
 
 2166             int n, e, i, j, cnt;
 
 2168             int nElements   = fields[0]->GetExpSize();
 
 2169             int nLocalSolutionPts;
 
 2180             &elmtToTrace = fields[0]->GetTraceMap()->GetElmtToTrace();
 
 2183             for(n = 0; n < nElements; ++n)
 
 2186                 phys_offset = fields[0]->GetPhys_Offset(n);
 
 2187                 nLocalSolutionPts = fields[0]->GetExp(n)->GetTotPoints();
 
 2189                 base = fields[0]->GetExp(n)->GetBase();
 
 2190                 nquad0 = base[0]->GetNumPoints();
 
 2191                 nquad1 = base[1]->GetNumPoints();
 
 2199                 for(e = 0; e < fields[0]->GetExp(n)->GetNedges(); ++e)
 
 2202                     nEdgePts = fields[0]->GetExp(n)->GetEdgeNumPoints(e);
 
 2211                     trace_offset = fields[0]->GetTrace()->GetPhys_Offset(
 
 2212                                                 elmtToTrace[n][e]->GetElmtId());
 
 2216                     fields[0]->GetExp(n)->GetEdgeNormal(e);
 
 2225                             fields[0]->GetExp(n)->GetEdgePhysVals(
 
 2226                                                 e, elmtToTrace[n][e],
 
 2227                                                 fluxX2 + phys_offset,
 
 2228                                                 auxArray1 = fluxN_D);
 
 2234                                          &numericalFlux[trace_offset], 1,
 
 2238                             if (fields[0]->GetExp(n)->GetEorient(e) ==
 
 2242                                                auxArray1 = fluxN, 1,
 
 2243                                                auxArray2 = fluxN, 1);
 
 2246                                                auxArray1 = fluxN_D, 1,
 
 2247                                                auxArray2 = fluxN_D, 1);
 
 2251                             for (i = 0; i < nquad0; ++i)
 
 2254                                 fluxN_R[i] = (
m_Q2D_e0[n][i]) * fluxN[i];
 
 2257                             for (i = 0; i < nEdgePts; ++i)
 
 2264                                     fluxN_R[i] = -fluxN_R[i];
 
 2272                                         &fluxN_D[0], 1, &fluxJumps[0], 1);
 
 2276                             for (i = 0; i < nquad0; ++i)
 
 2278                                 for (j = 0; j < nquad1; ++j)
 
 2290                             fields[0]->GetExp(n)->GetEdgePhysVals(
 
 2291                                     e, elmtToTrace[n][e],
 
 2292                                     fluxX1 + phys_offset,
 
 2293                                     auxArray1 = fluxN_D);
 
 2297                                          &numericalFlux[trace_offset], 1,
 
 2301                             if (fields[0]->GetExp(n)->GetEorient(e) ==
 
 2305                                                auxArray1 = fluxN, 1,
 
 2306                                                auxArray2 = fluxN, 1);
 
 2309                                                auxArray1 = fluxN_D, 1,
 
 2310                                                auxArray2 = fluxN_D, 1);
 
 2314                             for (i = 0; i < nquad1; ++i)
 
 2317                                 fluxN_R[i] = (
m_Q2D_e1[n][i]) * fluxN[i];
 
 2320                             for (i = 0; i < nEdgePts; ++i)
 
 2327                                     fluxN_R[i] = -fluxN_R[i];
 
 2335                                         &fluxN_D[0], 1, &fluxJumps[0], 1);
 
 2339                             for (i = 0; i < nquad1; ++i)
 
 2341                                 for (j = 0; j < nquad0; ++j)
 
 2343                                     cnt = (nquad0)*i + j;
 
 2355                             fields[0]->GetExp(n)->GetEdgePhysVals(
 
 2356                                     e, elmtToTrace[n][e],
 
 2357                                     fluxX2 + phys_offset,
 
 2358                                     auxArray1 = fluxN_D);
 
 2362                                          &numericalFlux[trace_offset], 1,
 
 2366                             if (fields[0]->GetExp(n)->GetEorient(e) ==
 
 2370                                                auxArray1 = fluxN, 1,
 
 2371                                                auxArray2 = fluxN, 1);
 
 2374                                                auxArray1 = fluxN_D, 1,
 
 2375                                                auxArray2 = fluxN_D, 1);
 
 2379                             for (i = 0; i < nquad0; ++i)
 
 2382                                 fluxN_R[i] = (
m_Q2D_e2[n][i]) * fluxN[i];
 
 2385                             for (i = 0; i < nEdgePts; ++i)
 
 2392                                     fluxN_R[i] = -fluxN_R[i];
 
 2401                                         &fluxN_D[0], 1, &fluxJumps[0], 1);
 
 2405                             for (i = 0; i < nquad0; ++i)
 
 2407                                 for (j = 0; j < nquad1; ++j)
 
 2409                                     cnt = (nquad0 - 1) + j*nquad0 - i;
 
 2420                             fields[0]->GetExp(n)->GetEdgePhysVals(
 
 2421                                     e, elmtToTrace[n][e],
 
 2422                                     fluxX1 + phys_offset,
 
 2423                                     auxArray1 = fluxN_D);
 
 2428                                          &numericalFlux[trace_offset], 1,
 
 2432                             if (fields[0]->GetExp(n)->GetEorient(e) ==
 
 2436                                                auxArray1 = fluxN, 1,
 
 2437                                                auxArray2 = fluxN, 1);
 
 2440                                                auxArray1 = fluxN_D, 1,
 
 2441                                                auxArray2 = fluxN_D, 1);
 
 2445                             for (i = 0; i < nquad1; ++i)
 
 2448                                 fluxN_R[i] = (
m_Q2D_e3[n][i]) * fluxN[i];
 
 2451                             for (i = 0; i < nEdgePts; ++i)
 
 2458                                     fluxN_R[i] = -fluxN_R[i];
 
 2467                                         &fluxN_D[0], 1, &fluxJumps[0], 1);
 
 2471                             for (i = 0; i < nquad1; ++i)
 
 2473                                 for (j = 0; j < nquad0; ++j)
 
 2475                                     cnt = (nquad0*nquad1 - nquad0) + j
 
 2483                             ASSERTL0(
false,
"edge value (< 3) is out of range");
 
 2491                             &divCFluxE1[0], 1, &divCFlux[phys_offset], 1);
 
 2493                 Vmath::Vadd(nLocalSolutionPts, &divCFlux[phys_offset], 1,
 
 2494                             &divCFluxE2[0], 1, &divCFlux[phys_offset], 1);
 
 2496                 Vmath::Vadd(nLocalSolutionPts, &divCFlux[phys_offset], 1,
 
 2497                             &divCFluxE3[0], 1, &divCFlux[phys_offset], 1);
 
Array< OneD, Array< OneD, NekDouble > > m_dGR_xi1
virtual void v_DerCFlux_2D(const int nConvectiveFields, const int direction, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, const NekDouble > &flux, const Array< OneD, NekDouble > &iFlux, Array< OneD, NekDouble > &derCFlux)
Compute the derivative of the corrective flux wrt a given coordinate for 2D problems. 
virtual void v_SetupMetrics(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
Setup the metric terms to compute the contravariant fluxes. (i.e. this special metric terms transform...
virtual void v_SetupCFunctions(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
Setup the derivatives of the correction functions. For more details see J Sci Comput (2011) 47: 50–7...
#define ASSERTL0(condition, msg)
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_DU1
std::vector< PointsKey > PointsKeyVector
virtual void v_DivCFlux_2D(const int nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, const NekDouble > &fluxX1, const Array< OneD, const NekDouble > &fluxX2, const Array< OneD, const NekDouble > &numericalFlux, Array< OneD, NekDouble > &divCFlux)
Compute the divergence of the corrective flux for 2D problems. 
Array< OneD, Array< OneD, NekDouble > > m_dGR_xi2
virtual void v_NumericalFluxO1(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &numericalFluxO1)
Builds the numerical flux for the 1st order derivatives. 
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_BD1
Array< OneD, Array< OneD, NekDouble > > m_traceNormals
std::string m_ViscosityType
virtual void v_WeakPenaltyO1(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &penaltyfluxO1)
Imposes appropriate bcs for the 1st order derivatives. 
DiffusionFactory & GetDiffusionFactory()
void Vvtvp(int n, const T *w, const int incw, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
vvtvp (vector times vector plus vector): z = w*x + y 
Array< OneD, Array< OneD, NekDouble > > m_Q2D_e0
LibUtilities::SessionReaderSharedPtr m_session
DiffusionLFRNS(std::string diffType)
DiffusionLFRNS uses the Flux Reconstruction (FR) approach to compute the diffusion term...
void Vdiv(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x/y. 
virtual void v_DivCFlux_2D_Gauss(const int nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, const NekDouble > &fluxX1, const Array< OneD, const NekDouble > &fluxX2, const Array< OneD, const NekDouble > &numericalFlux, Array< OneD, NekDouble > &divCFlux)
Compute the divergence of the corrective flux for 2D problems where POINTSTYPE="GaussGaussLegendre". 
DiffusionFluxVecCBNS m_fluxVectorNS
Array< OneD, Array< OneD, NekDouble > > m_dGL_xi1
virtual void v_DerCFlux_1D(const int nConvectiveFields, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, const NekDouble > &flux, const Array< OneD, const NekDouble > &iFlux, Array< OneD, NekDouble > &derCFlux)
Compute the derivative of the corrective flux for 1D problems. 
boost::shared_ptr< SessionReader > SessionReaderSharedPtr
Array< OneD, Array< OneD, NekDouble > > m_homoDerivs
Array< OneD, NekDouble > m_jac
1D Gauss-Gauss-Legendre quadrature points 
virtual void v_Diffuse(const int nConvective, const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &inarray, Array< OneD, Array< OneD, NekDouble > > &outarray)
Calculate FR Diffusion for the Navier-Stokes (NS) equations using an LDG interface flux...
virtual void v_WeakPenaltyO2(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const int var, const int dir, const Array< OneD, const NekDouble > &qfield, Array< OneD, NekDouble > &penaltyflux)
Imposes appropriate bcs for the 2nd order derivatives. 
static std::string type[]
Array< OneD, Array< OneD, NekDouble > > m_Q2D_e3
void Reverse(int n, const T *x, const int incx, T *y, const int incy)
void Smul(int n, const T alpha, const T *x, const int incx, T *y, const int incy)
Scalar multiply y = alpha*y. 
void jacobd(const int np, const double *z, double *polyd, const int n, const double alpha, const double beta)
Calculate the derivative of Jacobi polynomials. 
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_tmp2
Array< OneD, Array< OneD, NekDouble > > m_dGL_xi3
static DiffusionSharedPtr create(std::string diffType)
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_tmp1
Array< OneD, Array< OneD, NekDouble > > m_divFD
void Neg(int n, T *x, const int incx)
Negate x = -x. 
Array< OneD, Array< OneD, NekDouble > > m_dGR_xi3
NekDouble m_thermalConductivity
Array< OneD, Array< OneD, NekDouble > > m_dGL_xi2
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_IF1
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_DD1
void Vsub(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Subtract vector z = x-y. 
Array< OneD, Array< OneD, NekDouble > > m_Q2D_e2
Array< OneD, Array< OneD, NekDouble > > m_gmat
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_DFC1
const boost::shared_ptr< SpatialDomains::GeomFactors > & GetMetricInfo(void) const 
virtual void v_InitObject(LibUtilities::SessionReaderSharedPtr pSession, Array< OneD, MultiRegions::ExpListSharedPtr > pFields)
Initiliase DiffusionLFRNS objects and store them before starting the time-stepping. 
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_viscTensor
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_D1
Array< OneD, Array< OneD, Array< OneD, NekDouble > > > m_DFC2
boost::shared_ptr< Basis > BasisSharedPtr
Array< OneD, Array< OneD, NekDouble > > m_traceVel
void Zero(int n, T *x, const int incx)
Zero vector. 
Array< OneD, Array< OneD, NekDouble > > m_viscFlux
void Vcopy(int n, const T *x, const int incx, T *y, const int incy)
Geometry is curved or has non-constant factors. 
void Vadd(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Add vector z = x+y. 
void Vmul(int n, const T *x, const int incx, const T *y, const int incy, T *z, const int incz)
Multiply vector z = x*y. 
virtual void v_NumericalFluxO2(const Array< OneD, MultiRegions::ExpListSharedPtr > &fields, const Array< OneD, Array< OneD, NekDouble > > &ufield, Array< OneD, Array< OneD, Array< OneD, NekDouble > > > &qfield, Array< OneD, Array< OneD, NekDouble > > &qflux)
Build the numerical flux for the 2nd order derivatives. 
Array< OneD, Array< OneD, NekDouble > > m_divFC
tKey RegisterCreatorFunction(tKey idKey, CreatorFunction classCreator, tDescription pDesc="")
Register a class with the factory. 
Array< OneD, Array< OneD, NekDouble > > m_Q2D_e1