ফেনিসিএস: উচ্চ আদেশের উপাদানগুলি ভিজ্যুয়ালাইজ করা


14

আমি সবেমাত্র এফআইএনসিএসের সাথে ঝামেলা শুরু করেছি। আমি তৃতীয় অর্ডার উপাদানগুলির সাথে পইসনকে সমাধান করছি এবং ফলাফলগুলি কল্পনা করতে চাই। যাইহোক, আমি যখন প্লট (ইউ) ব্যবহার করি তখন ভিজ্যুয়ালাইজেশন ফলাফলের কেবল একটি লিনিয়ার অন্তরঙ্গন হয়। আমি ভিটিকেতে আউটপুট দেওয়ার সময় একই জিনিসটি পাই। অন্য একটি কোডে আমি কাজ করছি, আমি একটি ভিটিকে আউটপুটটার লিখেছি যা উচ্চতর অর্ডার উপাদানগুলিকে উপস্থাপন করবে যাতে তারা আসলে প্যারাভিউতে উচ্চতর ক্রম দেখায় looked এফএনসিএস-এ এর মতো (বা আরও ভাল) কিছু আছে কি?

উত্তর:


12

আপনি সমাধানটি একটি সূক্ষ্ম জালের উপরে বিভক্ত করতে পারেন এবং তারপরে এটি প্লট করতে পারেন:

from dolfin import *

coarse_mesh = UnitSquareMesh(2, 2)
fine_mesh = refine(refine(refine(coarse_mesh)))

P2_coarse = FunctionSpace(coarse_mesh, "CG", 2)
P1_fine = FunctionSpace(fine_mesh, "CG", 1)

f = interpolate(Expression("sin(pi*x[0])*sin(pi*x[1])"), P2_coarse)
g = interpolate(f, P1_fine)

plot(f, title="Bad plot")
plot(g, title="Good plot")

interactive()

সূক্ষ্ম জাল নেভিগেশন আপনি প্লটটিতে মোটা পি 2 ত্রিভুজগুলির রূপরেখা কীভাবে দেখতে পাবেন তা লক্ষ্য করুন।

মোটা জালে পি 2 ফাংশনের প্লট

পি 2 ফাংশনের প্লট একটি জরিমানা জাল উপর একটি P1 ফাংশন interpolated


8

কাজটি করার জন্য আমি অভিযোজক সংশোধন সম্পর্কে কিছুটা কাজ করছি (নীচের কোডটি দেখুন)। মোট জাল আকার এবং জাল ফাংশনের মোট প্রকরণের সাথে ত্রুটি সূচকটির স্কেলিং সঠিক নয়, তবে আপনি এটি আপনার প্রয়োজনের সাথে মাপসই করতে পারেন। নীচের চিত্রগুলি টেস্টকেস # 4 এর জন্য। কোষের সংখ্যা ২০০ থেকে বেড়ে প্রায় ২৪,০০০ পর্যন্ত বেড়ে যায়, যা উপরে থেকে কিছুটা উপরে হতে পারে তবে ফলাফলটি বেশ চমৎকার। জাল দেখায় যে কেবলমাত্র প্রাসঙ্গিক অংশগুলি পরিমার্জন করা হয়েছে। তৃতীয় ক্রমের উপাদানগুলি যথাযথভাবে যথাযথভাবে উপস্থাপন করতে পারেনি সেগুলি আপনি এখনও দেখতে পাচ্ছেন নিদর্শনগুলি।

from dolfin import *
from numpy import abs


def compute_error(expr, mesh):
    DG = FunctionSpace(mesh, "DG", 0)
    e = project(expr, DG)
    err = abs(e.vector().array())
    dofmap = DG.dofmap()
    return err, dofmap


def refine_by_bool_array(mesh, to_mark, dofmap):
    cell_markers = CellFunction("bool", mesh)
    cell_markers.set_all(False)
    n = 0
    for cell in cells(mesh):
        index = dofmap.cell_dofs(cell.index())[0]
        if to_mark[index]:
            cell_markers[cell] = True
            n += 1
    mesh = refine(mesh, cell_markers)
    return mesh, n


def adapt_mesh(f, mesh, max_err=0.001, exp=0):
    V = FunctionSpace(mesh, "CG", 1)
    while True:
        fi = interpolate(f, V)
        v = CellVolume(mesh)
        expr = v**exp * abs(f-fi)
        err, dofmap = compute_error(expr, mesh)

        to_mark = (err>max_err)
        mesh, n = refine_by_bool_array(mesh, to_mark, dofmap)
        if not n:
            break

        V = FunctionSpace(mesh, "CG", 1)
    return fi, mesh


def show_testcase(i, p, N, fac, title1="", title2=""):
    funcs = ["sin(60*(x[0]-0.5)*(x[1]-0.5))",
             "sin(10*(x[0]-0.5)*(x[1]-0.5))",
             "sin(10*(x[0]-0.5))*sin(pow(3*(x[1]-0.05),2))"]

    mesh = UnitSquareMesh(N, N)
    U = FunctionSpace(mesh, "CG", p)
    f = interpolate(Expression(funcs[i]), U)

    v0 = (1.0/N) ** 2;
    exp = 1
    #exp = 0
    fac2 = (v0/100)**exp
    max_err = fac * fac2
    #print v0, fac, exp, fac2, max_err
    g, mesh2 = adapt_mesh(f, mesh, max_err=max_err, exp=exp)

    plot(mesh, title=title1 + " (mesh)")
    plot(f, title=title1)
    plot(mesh2, title=title2 + " (mesh)")
    plot(g, title=title2)
    interactive()


if __name__ == "__main__":
    N = 10
    fac = 0.01
    show_testcase(0, 1, 10, fac, "degree 1 - orig", "degree 1 - refined (no change)")
    show_testcase(0, 2, 10, fac, "degree 2 - orig", "degree 2 - refined")
    show_testcase(0, 3, 10, fac, "degree 3 - orig", "degree 3 - refined")
    show_testcase(0, 3, 10, 0.2*fac, "degree 3 - orig", "degree 3 - more refined")
    show_testcase(1, 2, 10, fac, "smooth: degree 2 - orig", "smooth: degree 2 - refined")
    show_testcase(1, 3, 10, fac, "smooth: degree 3 - orig", "smooth: degree 3 - refined")
    show_testcase(2, 2, 10, fac, "bumps: degree 2 - orig", "bumps: degree 2 - refined")
    show_testcase(2, 3, 10, fac, "bumps: degree 3 - orig", "bumps: degree 3 - refined")

অপরিশোধিত জাল প্লট করুন অপরিশোধিত জাল পরিশোধিত জাল উপর প্লট অভিযোজিতভাবে মিহি জাল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.