ENO(Essentially Non-Oscillatory polynomial interpolation)は風上差分を改良し, 3次多項式の形で近似することで3次精度を実現した方法である. ENOの最初のアイデアは ((A. Harten, B. Engquist, S. Osher and S. Chakravarthy, "Uniformly high-order accurate essentially non-oscillatory schemes III", J. Comput. Phys. 71, pp.231-303, 1987.)) で提案され, ((C.-W. Shu and S. Osher, "Efficient implementation of essentially non-oscillatory shock capturing schemes", J. Comput. Phys. 77, pp.439-471, 1988.)), ((C.-W. Shu and S. Osher, "Efficient implementation of essentially non-oscillatory shock capturing schemes II", J. Comput. Phys. 83, pp.32-78, 1989.)) で数値計算に適用され, ((S. Osher and J. Sethian, "Fronts propagating with curvature dependent speed: algorithms based on Hamilton-Jacobi formulations", J. Comput. Phys. 79, pp.12-49, 1988.)) でHamilton-Jacobi(HJ)方程式へ適用された(HJ ENO). 移流方程式はHJ方程式であるので,ここからは,HJ ENOについて説明する. HJ ENOの式を述べる前に,準備として差分式を定義しておく. &ref(eqa_phii.gif,,70%);のn階差分を&ref(eqa_Dinphi.gif,,70%);と表記する.とすると,n=0は, #ref(eqa_eno1.gif,,70%) &ref(eqa_phii.gif,nolink,70%);のn階差分を&ref(eqa_Dinphi.gif,nolink,70%);と表記する.とすると,n=0は, #ref(eqa_eno1.gif,nolink,70%) となる.ここで,iはグリッド番号(座標値&ref(eqa_xi.gif,,70%);). となる.ここで,iはグリッド番号(座標値&ref(eqa_xi.gif,nolink,70%);). 1階差分はグリッド間(i-1/2とi+1/2)で定義される. #ref(eqa_eno2.gif,,70%) #ref(eqa_eno3.gif,,70%) #ref(eqa_eno2.gif,nolink,70%) #ref(eqa_eno3.gif,nolink,70%) 2階差分はi-1/2とi+1/2での1階差分値を使って,iで定義される. #ref(eqa_eno4.gif,,70%) #ref(eqa_eno4.gif,nolink,70%) 同様に3階差分は, #ref(eqa_eno5.gif,,70%) #ref(eqa_eno6.gif,,70%) #ref(eqa_eno5.gif,nolink,70%) #ref(eqa_eno6.gif,nolink,70%) ENOでは3次多項式により&ref(eqa_phi.gif,,70%);を近似する. #ref(eqa_eno7.gif,,70%) ENOでは3次多項式により&ref(eqa_phi.gif,nolink,70%);を近似する. #ref(eqa_eno7.gif,nolink,70%) ここで,&ref(eqa_Qm.gif,,70%);はm次項である. &ref(eqa_phix+i.gif,,70%);, &ref(eqa_phix-i.gif,,70%);の式がほしいので, 上式を微分して,x=&ref(eqa_xi.gif,,70%);とすると, #ref(eqa_eno8.gif,,70%) ここで,&ref(eqa_Qm.gif,nolink,70%);はm次項である. &ref(eqa_phix+i.gif,nolink,70%);, &ref(eqa_phix-i.gif,nolink,70%);の式がほしいので, 上式を微分して,x=&ref(eqa_xi.gif,nolink,70%);とすると, #ref(eqa_eno8.gif,nolink,70%) -1次項&ref(eqa_Q1d.gif,,70%);~ &ref(eqa_phix-.gif,,70%);の場合k=i-1,&ref(eqa_phix+.gif,,70%);でk=iとすると, #ref(eqa_eno9.gif,,70%) #ref(eqa_eno10.gif,,70%) &ref(eqa_Q1d.gif,,70%);のみの場合が風上差分に相当する.これに,2次項,3次項を加えることで,3次精度を得る. -1次項&ref(eqa_Q1d.gif,nolink,70%);~ &ref(eqa_phix-.gif,nolink,70%);の場合k=i-1,&ref(eqa_phix+.gif,nolink,70%);でk=iとすると, #ref(eqa_eno9.gif,nolink,70%) #ref(eqa_eno10.gif,nolink,70%) &ref(eqa_Q1d.gif,nolink,70%);のみの場合が風上差分に相当する.これに,2次項,3次項を加えることで,3次精度を得る. -2次項&ref(eqa_Q2d.gif,,70%);~ #ref(eqa_eno11.gif,,70%) #ref(eqa_eno12.gif,,70%) -2次項&ref(eqa_Q2d.gif,nolink,70%);~ #ref(eqa_eno11.gif,nolink,70%) #ref(eqa_eno12.gif,nolink,70%) ここで, #ref(eqa_eno13.gif,,70%) #ref(eqa_eno13.gif,nolink,70%) -3次項&ref(eqa_Q3d.gif,,70%);~ #ref(eqa_eno14.gif,,70%) #ref(eqa_eno15.gif,,70%) -3次項&ref(eqa_Q3d.gif,nolink,70%);~ #ref(eqa_eno14.gif,nolink,70%) #ref(eqa_eno15.gif,nolink,70%) ここで, #ref(eqa_eno16.gif,,70%) #ref(eqa_eno17.gif,,70%) #ref(eqa_eno16.gif,nolink,70%) #ref(eqa_eno17.gif,nolink,70%) これらによって,&ref(eqa_phixxi.gif,,70%);を求め, #ref(eqa_eno18.gif,,70%) により&ref(eqa_phi.gif,,70%);を更新する. これらによって,&ref(eqa_phixxi.gif,nolink,70%);を求め, #ref(eqa_eno18.gif,nolink,70%) により&ref(eqa_phi.gif,nolink,70%);を更新する.