Esempio n. 1
0
def function_2_ellipse(x):
    f = 0
    f = np.sin(np.pi * x[0] * x[1])
    f = f * weightfunction.ellipse(radius1, radius2, x)
    return f
Esempio n. 2
0
def function_1_ellipse(x):
    f = 0
    f = np.sin(8 * x[0]) + np.sin(7 * x[1])
    f = f * weightfunction.ellipse(radius1, radius2, x)
    return f
Esempio n. 3
0
 punkte = data['punkte']       
 dim = data['dim']
 degree = data['degree']
 level_x = data['level_x'] 
 level_y = data['level_y'] 
            
        
 # Pruefe ob Level hoch genug
 if level_x and level_y < np.log2(degree+1):
     print('Error: Level zu niedrig. Es muss Level >= log2(degree+1) sein ')
     quit()
        
 # Gitter fuer Kreis erzeugen und auswerten
 x0 = np.linspace(0, 1, 50)
 X = np.meshgrid(x0, x0) 
 Z = weightfunction.ellipse(radius1,radius2, X)
 h_x = data['h_x'] 
 h_y = data['h_y'] 
        
 # Definiere Knotenfolge
 # Not a Knot
 xi = data['xi'] 
 yi = data['yi'] 
        
        
 # Index von Bspline auf Knotenfolge        
 index_Bspline_x = data['index_Bspline_x'] 
 index_Bspline_y = data['index_Bspline_y']
    
        
 index_all_Bsplines = data['index_all_Bsplines'] 
Esempio n. 4
0
def NNsearch(sort, j, q):
    xblock = np.arange(I_all[int(sort[q, 1]), 0],
                       I_all[int(sort[q, 1]), 0] + (degree + 1) * h_x, h_x)
    yblock = np.arange(I_all[int(sort[q, 1]), 1],
                       I_all[int(sort[q, 1]), 1] + (degree + 1) * h_y, h_y)
    block = np.meshgrid(xblock, yblock)
    eval_block = np.zeros(((degree + 1)**2, 1))
    s = 0
    for i in range(degree + 1):
        for t in range(degree + 1):
            eval_block[s] = weightfunction.ellipse(
                radius1, radius2, [block[0][t, i], block[1][t, i]])
            s = s + 1
    if np.all(eval_block > 0) == True:
        s = 0
        for i in range(degree + 1):
            for t in range(degree + 1):
                NN[j, s] = [block[0][t, i], block[1][t, i]]
                s = s + 1
    else:
        xblock = np.arange(I_all[int(sort[q, 1]), 0],
                           I_all[int(sort[q, 1]), 0] + (degree + 1) * h_x, h_x)
        yblock = np.arange(I_all[int(sort[q, 1]), 1],
                           I_all[int(sort[q, 1]), 1] - (degree + 1) * h_y,
                           -h_y)
        block = np.meshgrid(xblock, yblock)
        s = 0
        for i in range(degree + 1):
            for t in range(degree + 1):
                eval_block[s] = weightfunction.ellipse(
                    radius1, radius2, [block[0][t, i], block[1][t, i]])
                s = s + 1
        if np.all(eval_block > 0) == True:
            s = 0
            for i in range(degree + 1):
                for t in range(degree + 1):
                    NN[j, s] = [block[0][t, i], block[1][t, i]]
                    s = s + 1
        else:
            xblock = np.arange(I_all[int(sort[q, 1]), 0],
                               I_all[int(sort[q, 1]), 0] - (degree + 1) * h_x,
                               -h_x)
            yblock = np.arange(I_all[int(sort[q, 1]), 1],
                               I_all[int(sort[q, 1]), 1] - (degree + 1) * h_y,
                               -h_y)
            block = np.meshgrid(xblock, yblock)
            s = 0
            for i in range(degree + 1):
                for t in range(degree + 1):
                    eval_block[s] = weightfunction.ellipse(
                        radius1, radius2, [block[0][t, i], block[1][t, i]])
                    s = s + 1
            if np.all(eval_block > 0) == True:
                s = 0
                for i in range(degree + 1):
                    for t in range(degree + 1):
                        NN[j, s] = [block[0][t, i], block[1][t, i]]
                        s = s + 1
            else:
                xblock = np.arange(
                    I_all[int(sort[q, 1]), 0],
                    I_all[int(sort[q, 1]), 0] - (degree + 1) * h_x, -h_x)
                yblock = np.arange(
                    I_all[int(sort[q, 1]), 1],
                    I_all[int(sort[q, 1]), 1] + (degree + 1) * h_y, h_y)
                block = np.meshgrid(xblock, yblock)
                s = 0
                for i in range(degree + 1):
                    for t in range(degree + 1):
                        eval_block[s] = weightfunction.ellipse(
                            radius1, radius2, [block[0][t, i], block[1][t, i]])
                        s = s + 1
                if np.all(eval_block > 0) == True:
                    s = 0
                    for i in range(degree + 1):
                        for t in range(degree + 1):
                            NN[j, s] = [block[0][t, i], block[1][t, i]]
                            s = s + 1
                elif q == len(I_all) - 1:
                    print(
                        'Fehler: kein (n+1)x(n+1) Block im Gebiet gefunden. Erhoehe Level.'
                    )
                    quit()
                else:
                    NNsearch(sort, j, q + 1)
    return NN
Esempio n. 5
0
dim = 2  # Dimension
radius1 = 0.45  # Radius von Kreis
radius2 = 0.1
degree = 5  # Grad von B-Splines (nur ungerade)
level_x = 4  # Level in x Richtung
level_y = 4  # Level in y Richtung

# Pruefe ob Level hoch genug
if level_x and level_y < np.log2(degree + 1):
    print('Error: Level zu niedrig. Es muss Level >= log2(degree+1) sein ')
    quit()

# Gitter fuer Kreis erzeugen und auswerten
x0 = np.linspace(0, 1, 100)
X = np.meshgrid(x0, x0)
Z = weightfunction.ellipse(radius1, radius2, X)

# Plot von Ellipse
plt.contour(X[0], X[1], Z, 0)
plt.axis('equal')
#plt.show()

# Gitterweite
h_x = 2**(-level_x)
h_y = 2**(-level_y)

# Definiere Knotenfolge

# Uniform
# xi = np.arange(-(degree+1)/2, 1/h_x+(degree+1)/2+1, 1)*h_x
# yi = np.arange(-(degree+1)/2, 1/h_y+(degree+1)/2+1, 1)*h_y
Esempio n. 6
0
        dim = data['dim']
        degree = data['degree']
        level_x = data['level_x']
        level_y = data['level_y']

        # Pruefe ob Level hoch genug
        if level_x and level_y < np.log2(degree + 1):
            print(
                'Error: Level zu niedrig. Es muss Level >= log2(degree+1) sein '
            )
            quit()

        # Gitter fuer Kreis erzeugen und auswerten
        x0 = np.linspace(0, 1, 50)
        X = np.meshgrid(x0, x0)
        Z = weightfunction.ellipse(radius1, radius2, X)
        h_x = data['h_x']
        h_y = data['h_y']

        # Definiere Knotenfolge
        # Not a Knot
        xi = data['xi']
        yi = data['yi']

        # Index von Bspline auf Knotenfolge
        index_Bspline_x = data['index_Bspline_x']
        index_Bspline_y = data['index_Bspline_y']

        index_all_Bsplines = data['index_all_Bsplines']

        # Index (x,y) der Bsplines mit Knotenmittelpunkt im inneren des Gebiets