diff --git a/.gitignore b/.gitignore index c396f52d20df9ada99c0a9f03df8b42d64b5b26b..7081ba7543047065e8aa31a3fe641a2acfc7d4ff 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,10 @@ build/ *.vtu +#ignore output folders +/outputs_*/ +/results_*/ + # ignore png *.png diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 391288b61890af50b02c52001a2ae1b1bad93ece..2c7707a3e5a6578f71828867e2beb4dce244ced2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,27 +7,32 @@ before_script: &before - duneci-install-module https://gitlab.dune-project.org/fufem/dune-matrix-vector.git - duneci-install-module https://git.imp.fu-berlin.de/agnumpde/dune-solvers.git - duneci-install-module https://gitlab.dune-project.org/extensions/dune-vtk.git - - duneci-install-module https://gitlab.dune-project.org/klaus.boehnlein/dune-functions.git --branch bugfix/reducedcubichermite-local - duneci-install-module https://gitlab.dune-project.org/fufem/dune-fufem.git - - duneci-install-module https://gitlab.mn.tu-dresden.de/osander/dune-gfe.git --branch feature/bendingIsometries - - duneci-install-module https://gitlab.mn.tu-dresden.de/ag-sander/dune/dune-elasticity.git --branch releases/2.9 + - duneci-install-module https://gitlab.dune-project.org/extensions/dune-gmsh4 + - duneci-install-module https://gitlab.mn.tu-dresden.de/osander/dune-gfe.git -dune:2.9 debian-11 gcc-10 C++20: + +# Tests with the 2.10 release. That's the one in Debian trixie +#-------------------------------------------------------------------- +dune:2.10 gcc-10: + image: registry.dune-project.org/docker/ci/dune:2.10-debian-11-gcc-10-20 variables: - DUNECI_BRANCH: releases/2.9 - image: registry.dune-project.org/docker/ci/dune:2.9-debian-11-gcc-10-20 + DUNECI_BRANCH: releases/2.10 before_script: - *before script: duneci-standard-test -dune:git ubuntu-20-04 clang-10 C++20: - image: registry.dune-project.org/docker/ci/dune:git-ubuntu-20.04-clang-10-20 +# Tests with the git master branch +# Some, but not all optional dependencies are made available. +#------------------------------------------------------------------ +dune:git gcc-10 C++20: + image: registry.dune-project.org/docker/ci/dune:git-debian-11-gcc-10-20 before_script: - *before script: duneci-standard-test -dune:git debian-11 gcc-10 C++20: - image: registry.dune-project.org/docker/ci/dune:git-debian-11-gcc-10-20 +dune:git clang-11 C++20: + image: registry.dune-project.org/docker/ci/dune:git-debian-11-clang-11-20 before_script: - *before - script: duneci-standard-test + script: duneci-standard-test \ No newline at end of file diff --git a/Plot-Scripts/IndicatorFunctionVisualization.py b/Plot-Scripts/IndicatorFunctionVisualization.py new file mode 100644 index 0000000000000000000000000000000000000000..8ef7238df906c58b961bf3a93cd72073e53c51ba --- /dev/null +++ b/Plot-Scripts/IndicatorFunctionVisualization.py @@ -0,0 +1,141 @@ +import numpy as np +import matplotlib.pyplot as plt + + + +x_1 = 0.5; +a = (1-x_1)*(2-np.sqrt(3))/2 +b = x_1 * (2-np.sqrt(3))/2 + + +theta=0.2 +alpha = np.pi/3.0 + +def one_norm(X,Y): + return np.abs(X) + np.abs(Y) + +def two_norm(X,Y): + return np.sqrt(X**2 + Y**2) + +def infinity_norm(X,Y): + return np.maximum(np.abs(X),np.abs(Y)) + # return np.linalg.norm([X,Y]) + +def euclidean_distance(A,B): + return two_norm(A[0]-B[0],A[1]-B[1]) + +def one_norm_distance(A,B): + return one_norm(A[0]-B[0],A[1]-B[1]) + +def infinity_norm_distance(A,B): + return infinity_norm(A[0]-B[0],A[1]-B[1]) + +# Rumpf Example +def indicatorFunction(X,Y): + + # Rumpf example. + # tmp_1 = (one_norm(X,Y) < 1+ (b/2) ) + # tmp_2 = ((1-(b/2)) < one_norm(X,Y)) + # tmp_3 = (one_norm(X-1,Y) < 1+ (b/2) ) + # tmp_4 = ((1-(b/2)) < one_norm(X-1,Y)) + # tmp_5 = (X < (a/2.0)) + # tmp_6 = (X > (1-(a/2.0))) + # tmp_7 = (Y < (a/2.0)) + # tmp_8 = (Y > (1-(a/2.0))) + # out_tmp1 = np.logical_or(np.logical_and(tmp_1,tmp_2),np.logical_and(tmp_3,tmp_4)) + # out_tmp2 = np.logical_or(np.logical_or(tmp_5,tmp_6),np.logical_or(tmp_7,tmp_8)) + # out = np.logical_or(out_tmp1, out_tmp2) + + # abs(-np.cos(self.alpha)*x[0] + np.cos(self.alpha)*x[1] ) < self.theta and x[2] >= 0 ) + # out = abs(-np.cos(alpha)*X + np.sin(alpha)*Y)< theta + + + """ + indicator function for circles centered at midpoint and corner points. + """ + theta=0.1 + # define nodes + node1 = [-0.5,-0.5] + node2 = [0.5,-0.5] + node3 = [-0.5,0.5] + node4 = [0.5,0.5] + center = [0,0] + + tmp_1 = euclidean_distance([X,Y],node1) < theta + out = tmp_1 + + return out + + +#------------------------------------------------------------ + + + +# Define range for x and y. Domain: (0,1)^2 +# x = np.linspace(0, 1, 100) +# y = np.linspace(0, 1, 100) + +# Define range for x and y. Domain: (-0.5,0.5)^2 +x = np.linspace(-0.5, 0.5, 100) +y = np.linspace(-0.5, 0.5, 100) + + + + +# Create meshgrid +X, Y = np.meshgrid(x, y) + +# Define the function y = x +Z = Y - X + + +W = indicatorFunction(X,Y) + + +# print('Test:', one_norm(0.6,0) ) +# print('Test:', indicatorFunction(0.6,0) ) + + +# Plot the meshgrid +plt.figure(figsize=(8, 6)) +# plt.contourf(X, Y, Z, levels=[-np.inf, 0], colors=['orange'], alpha=0.5) +plt.contour(X, Y, Z, levels=[0], colors=['black']) +# plt.contourf(X, Y, Z, levels=[1e-12, np.inf], colors=['royalblue'], alpha=0.25) + +# Color points below the line y=x as orange, and others as blue +# plt.scatter(X[Z < 0], Y[Z < 0], color='orange', label='Below y=x') + + +plt.scatter(X[W], Y[W], color='green', label='Below y=x' , alpha=0.5) +# plt.contourf(X, Y, W, levels=[1,1e2], colors=['green'], alpha=0.25) +# plt.scatter(X[Z < 0], Y[Z < 0], color='orange', label='Below y=x') +# plt.scatter(X[Z >= 0], Y[Z >= 0], color='blue', label='Above or on y=x') + + +# Color points whose x-values are below 0.25 or above 0.75 in red +# plt.scatter(X[(X < (a/2.0)) | (X > (1-(a/2.0)))], Y[(X < (a/2.0)) | (X > (1-(a/2.0)))], color='red', label='x < 0.25 or x > 0.75') +# plt.scatter(X[(Y < (a/2.0)) | (Y > (1-(a/2.0)))], Y[(Y < (a/2.0)) | (Y > (1-(a/2.0)))], color='red', label='y < 0.25 or y > 0.75') + + + +# tmp = one_norm(X-1,Y) + + +# idx = ((b/np.sqrt(2))*one_norm(X-1,Y) )<1 | (Y < (a/2.0)) | (Y > (1-(a/2.0))) + +# idx = Y < (a/2.0) or (Y > (1-(a/2.0))) + +# plt.scatter(X[(Y < (a/2.0)) | (Y > (1-(a/2.0)))], Y[(Y < (a/2.0)) | (Y > (1-(a/2.0)))], color='red', label='y < 0.25 or y > 0.75') + +# plt.scatter(X[1-((b/np.sqrt(2))*one_norm(X-1,Y) )< 1 + (b/np.sqrt(2)) | 1 - (b/np.sqrt(2))*one_norm(X,Y) < 1 + (b/np.sqrt(2)) | (Y < (a/2.0)) | (Y > (1-(a/2.0)))], Y[1-((b/np.sqrt(2))*one_norm(X-1,Y) )< 1 + (b/np.sqrt(2)) | 1 - (b/np.sqrt(2))*one_norm(X,Y) < 1 + (b/np.sqrt(2)) | (Y < (a/2.0)) | (Y > (1-(a/2.0)))], color='red', label='y < 0.25 or y > 0.75') + + +# plt.scatter(X[idx], Y[idx], color='red', label='y < 0.25 or y > 0.75') + +plt.xlabel('X') +plt.ylabel('Y') +plt.title('Meshgrid with points colored based on y=x') +plt.legend() +plt.grid(True) +plt.axis('equal') +plt.show() diff --git a/Plot-Scripts/MacroMicrostructurePlot.py b/Plot-Scripts/MacroMicrostructurePlot.py new file mode 100644 index 0000000000000000000000000000000000000000..a3f7f175bb4b08ff4f0a3912c0e7b5a5b8a87fb5 --- /dev/null +++ b/Plot-Scripts/MacroMicrostructurePlot.py @@ -0,0 +1,586 @@ +import os +import sys +import re +import codecs +import math +import numpy as np +import matplotlib.pyplot as plt +from matplotlib.patches import Rectangle + + +""" + This script allows to plot a microstructure (that may varies on a macroscopic scale) + on a macroscopic domain discretized into "grain regions". + +""" + +def one_norm(X,Y): + return np.abs(X) + np.abs(Y) + +def two_norm(X,Y): + return np.sqrt(X**2 + Y**2) + +def infinity_norm(X,Y): + return np.maximum(np.abs(X),np.abs(Y)) + # return np.linalg.norm([X,Y]) + +def euclidean_distance(A,B): + return two_norm(A[0]-B[0],A[1]-B[1]) + +def one_norm_distance(A,B): + return one_norm(A[0]-B[0],A[1]-B[1]) + +def infinity_norm_distance(A,B): + return infinity_norm(A[0]-B[0],A[1]-B[1]) + + +resultPath = '/home/klaus/Desktop' +textwidth = 6.26894 # textwidth in inch +width = textwidth * 0.5 +# width = textwidth * 0.33 +height = textwidth/1.618 # The golden ratio. + + +# Domain and grain parameters +x_length = 2 +y_length = 1 +n = 2000 +num_grains_x = 12 +num_grains_y = 6 +grain_size_x = x_length / num_grains_x +grain_size_y = y_length / num_grains_y + +offset = 0.0 # Displacement along normal vector direction + +theta = 0.1 # Stripe width +alpha_degrees = 0 # Line angle + +# alpha_start = np.pi/12.0 +# alpha_target = np.pi/3.0 + +alpha_start = (np.pi/2.0) - np.pi/12.0 +alpha_target = (np.pi/2.0) - np.pi/3.0 + +theta_start = 0.2 +theta_target = 0.4 + + +# + +"""" + Variation of angle and Width: + angle grows in y-direction + fibre width grows in x-direction +""" +# angles = np.linspace(alpha_start,alpha_target,num_grains_y) # alpha changing in y-direction +angles = np.linspace(alpha_start,alpha_target,num_grains_x) # alpha changing in x-direction +thetas = np.linspace(theta_start,theta_target,num_grains_x) + +# Moon +t_start = 0.0 +t_target = 1.1 +t = np.linspace(t_start,t_target,num_grains_x) + + +# Cross +cdistance_start = 0.0 +cdistance_target = 0.3 +cdistance = np.linspace(cdistance_start,cdistance_target,num_grains_x) + + +#use fixed theta: +theta_fix = 0.15 +thetas = np.ones(num_grains_x) * theta_fix + +#use fixed angle: +alpha_fix = 0.0 +angles = np.ones(num_grains_x) * alpha_fix +# print('thetas:', thetas) + +# angles = [0.0,np.pi/4.0,np.pi/3.0,np.pi/2.0] + +# Convert angle to radians +alpha = np.deg2rad(alpha_degrees) + + + + +def distance_to_line(x, y, alpha , offset): + """Minimum distance from point (x,y) to offset center line + + Mathematical Basis: + 1. Line Representation: (x,y) = t*(cosθ, sinθ) + offset*n̂ + where n̂ = (-sinθ, cosθ) is the unit normal vector + 2. Distance Formula: |n·(p - p₀)| where p₀ is offset point + 3. Simplified Form: |-sinθ*x + cosθ*y - offset| + """ + # return np.abs(-np.sin(alpha)*x + np.cos(alpha)*y - offset) + return np.abs(-np.cos(alpha)*x + np.sin(alpha)*y - offset) + + + +# Create figure and axes explicitly +fig, ax = plt.subplots(figsize=(width,height)) + +# Create grid and initialize indicator +x = np.linspace(0, x_length, n) +y = np.linspace(0, y_length, n) +X, Y = np.meshgrid(x, y) +indicator = np.zeros_like(X) + +for i in range(num_grains_x): + for j in range(num_grains_y): + # Grain boundaries + x_min, x_max = i*grain_size_x, (i+1)*grain_size_x + y_min, y_max = j*grain_size_y, (j+1)*grain_size_y + + # Find points within current grain + in_grain = (X >= x_min) & (X < x_max) & (Y >= y_min) & (Y < y_max) + + # Corrected coordinate normalization to local domain (-0,5,0.5)^2 + X_local = (X[in_grain] - x_min)/grain_size_x - 0.5 + Y_local = (Y[in_grain] - y_min)/grain_size_y - 0.5 + + #Angle depending on macro-point + # alpha = angles[j] # alpha changing in y-direction + alpha = angles[i] # alpha changing in x-direction + theta = thetas[i] + # print('alpha:', alpha) + # print('theta:', theta) + + + """ + indicator function for (alpha) rotated Fibres with width theta + """ + # Calculate distances to offset line + # distances = distance_to_line(X_local, Y_local, alpha, offset) + # indicator[in_grain] = np.where(distances <= theta/2.0, 1, 0) + + + + + # define nodes + node1 = [-0.5,-0.5] + node2 = [0.5,-0.5] + node3 = [-0.5,0.5] + node4 = [0.5,0.5] + center = [0,0] + + """ + indicator function for circles centered at midpoint and corner points. + """ + # tmp_1 = euclidean_distance([X_local,Y_local],node1) < theta + # tmp_2 = euclidean_distance([X_local,Y_local],node2) < theta + # tmp_3 = euclidean_distance([X_local,Y_local],node3) < theta + # tmp_4 = euclidean_distance([X_local,Y_local],node4) < theta + # tmp_5 = euclidean_distance([X_local,Y_local],center) < theta + # boolQuantity = np.logical_or(tmp_1, np.logical_or(tmp_2, np.logical_or(tmp_3,np.logical_or(tmp_4,tmp_5)))) + # indicator[in_grain] = np.where(boolQuantity==True, 1, 0) + + """ + indicator function for diamonds (one-norm) centered at midpoint and corner points. + """ + # tmp_1 = one_norm_distance([X_local,Y_local],node1) < theta + # tmp_2 = one_norm_distance([X_local,Y_local],node2) < theta + # tmp_3 = one_norm_distance([X_local,Y_local],node3) < theta + # tmp_4 = one_norm_distance([X_local,Y_local],node4) < theta + # tmp_5 = one_norm_distance([X_local,Y_local],center) < theta + # boolQuantity = np.logical_or(tmp_1, np.logical_or(tmp_2, np.logical_or(tmp_3,np.logical_or(tmp_4,tmp_5)))) + # indicator[in_grain] = np.where(boolQuantity==True, 1, 0) + + + """ + indicator function for squares (inifnity-norm) centered at midpoint and corner points. + """ + # tmp_1 = infinity_norm_distance([X_local,Y_local],node1) < theta + # tmp_2 = infinity_norm_distance([X_local,Y_local],node2) < theta + # tmp_3 = infinity_norm_distance([X_local,Y_local],node3) < theta + # tmp_4 = infinity_norm_distance([X_local,Y_local],node4) < theta + # tmp_5 = infinity_norm_distance([X_local,Y_local],center) < theta + # boolQuantity = np.logical_or(tmp_1, np.logical_or(tmp_2, np.logical_or(tmp_3,np.logical_or(tmp_4,tmp_5)))) + # indicator[in_grain] = np.where(boolQuantity==True, 1, 0) + + + + """ + indicator function for stars + """ + # tmp_1 = euclidean_distance([X_local,Y_local],node1) > theta + # tmp_2 = euclidean_distance([X_local,Y_local],node2) > theta + # tmp_3 = euclidean_distance([X_local,Y_local],node3) > theta + # tmp_4 = euclidean_distance([X_local,Y_local],node4) > theta + # boolQuantity = np.logical_and(tmp_1, np.logical_and(tmp_2, np.logical_and(tmp_3,tmp_4))) + # indicator[in_grain] = np.where(boolQuantity==True, 1, 0) + + + + """ + indicator function for Circles + """ + # outerDiam = 0.4 + # tmp_1 = euclidean_distance([X_local,Y_local],center) < outerDiam + # tmp_2 = euclidean_distance([X_local,Y_local],center) > theta + # # tmp_1 = euclidean_distance([X_local,Y_local],node1) > theta + # # tmp_2 = euclidean_distance([X_local,Y_local],node2) > theta + # # tmp_3 = euclidean_distance([X_local,Y_local],node3) > theta + # # tmp_4 = euclidean_distance([X_local,Y_local],node4) > theta + # # boolQuantity = np.logical_and(tmp_1, np.logical_and(tmp_2, np.logical_and(tmp_3,tmp_4))) + # boolQuantity = np.logical_and(tmp_1, tmp_2) + # indicator[in_grain] = np.where(boolQuantity==True, 1, 0) + + + """ + indicator function for rising Sun + """ + # # midpoint = node1 + t[i] * (np.array(node4)-np.array(node1)) + # midpoint = [-0.5,0] + t[i] * (np.array([0.5,0])-np.array([-0.5,0])) + + # tmp_1 = euclidean_distance([X_local,Y_local],midpoint) < theta + # # tmp_2 = euclidean_distance([X_local,Y_local],center) > theta + # # tmp_1 = euclidean_distance([X_local,Y_local],node1) > theta + # # tmp_2 = euclidean_distance([X_local,Y_local],node2) > theta + # # tmp_3 = euclidean_distance([X_local,Y_local],node3) > theta + # # tmp_4 = euclidean_distance([X_local,Y_local],node4) > theta + # # boolQuantity = np.logical_and(tmp_1, np.logical_and(tmp_2, np.logical_and(tmp_3,tmp_4))) + # # boolQuantity = np.logical_and(tmp_1, tmp_2) + # boolQuantity = tmp_1 + # indicator[in_grain] = np.where(boolQuantity==True, 1, 0) + + """ + indicator function for Moon + """ + # # midpoint = node1 + t[i] * (np.array(node4)-np.array(node1)) + # midpoint = [-0.5,0] + t[i] * (np.array([0.5,0])-np.array([-0.5,0])) + # outerDiam = 0.3 + + # tmp_1 = euclidean_distance([X_local,Y_local],midpoint) > theta + # tmp_2 = euclidean_distance([X_local,Y_local],center) < outerDiam + # # tmp_2 = euclidean_distance([X_local,Y_local],center) > theta + # # tmp_1 = euclidean_distance([X_local,Y_local],node1) > theta + # # tmp_2 = euclidean_distance([X_local,Y_local],node2) > theta + # # tmp_3 = euclidean_distance([X_local,Y_local],node3) > theta + # # tmp_4 = euclidean_distance([X_local,Y_local],node4) > theta + # # boolQuantity = np.logical_and(tmp_1, np.logical_and(tmp_2, np.logical_and(tmp_3,tmp_4))) + # boolQuantity = np.logical_and(tmp_1, tmp_2) + # # boolQuantity = tmp_1 + # indicator[in_grain] = np.where(boolQuantity==True, 1, 0) + + + """ + indicator function for Cross + """ + # #cross + # tmp_1 = np.abs(Y_local) < theta + # tmp_2= np.abs(X_local) < theta + + # #center block + # center_theta = 0.3 + # tmp_3 = infinity_norm_distance([X_local,Y_local],center) < center_theta + + # boolQuantity = np.logical_or(tmp_1, np.logical_or(tmp_2,tmp_3)) + # # boolQuantity = tmp_3 + # indicator[in_grain] = np.where(boolQuantity==True, 1, 0) + + + """ + indicator function for Cross + """ + #cross + tmp_1 = np.abs(Y_local) < 0.05 + tmp_2= np.abs(X_local) < 0.05 + + tmp_3 = infinity_norm_distance([X_local,Y_local],center) > cdistance[i] + tmp_4 = infinity_norm_distance([X_local,Y_local],center) < cdistance[i] + theta + + + + # boolQuantity = np.logical_and(tmp_1, tmp_2) + boolQuantity = np.logical_or(tmp_1, np.logical_or(tmp_2, np.logical_and(tmp_3,tmp_4))) + + # #center block + # center_theta = 0.3 + # tmp_3 = infinity_norm_distance([X_local,Y_local],center) < center_theta + + # boolQuantity = np.logical_or(tmp_1, np.logical_or(tmp_2,tmp_3)) + # boolQuantity = tmp_3 + indicator[in_grain] = np.where(boolQuantity==True, 1, 0) + +# Visualization +# plt.figure(figsize=(12, 3)) +# ax = plt.gca() +# plt.pcolormesh(X, Y, indicator, cmap='Paired', shading='auto') + +# Plot main visualization +""" + Create plot with 'pcolormesh' + * Reducing the image-quality/file-size by using rasterized option: + * Looks much smoother without 'rasterize' option however file-size gets out of hand..: + * Together with the 'dpi=..' option of figsave we can control the file-size + * Advantage: Text etc. is still vectorized without having too large files. +""" +mesh = ax.pcolormesh(X, Y, indicator, cmap='Paired', shading='auto') +# mesh = ax.pcolormesh(X, Y, indicator, cmap='Paired', rasterized=True) +# plt.title(f'Offset Stripes: θ = {alpha_degrees}°, offset = {offset}', pad=15) + +# Add grain boundaries +for i in range(num_grains_x): + for j in range(num_grains_y): + rect = Rectangle((i*grain_size_x, j*grain_size_y), + grain_size_x, grain_size_y, + linewidth=1.0, + edgecolor='lightgray', + facecolor='none') + ax.add_patch(rect) + +# Clean axis +# ax.set_aspect(1/2) +ax.set_aspect(1) +ax.set_xticks([]) +ax.set_yticks([]) +# plt.box(False) +# plt.tight_layout() +# plt.show() +# Save Figure as pdf. +fig.set_size_inches(width, height) +fig.savefig(resultPath + '/MacroMicrostructurePlot'+'.png', dpi=800) #dpi on +# fig.savefig(resultPath + '/MacroMicrostructurePlot'+'.pdf',format='pdf', dpi=1500) #dpi on +print('Saved MacroMicrostructure-plot as figure.') + +################################################# + + +# import numpy as np +# import matplotlib.pyplot as plt +# from matplotlib.patches import Rectangle + +# # Domain parameters +# x_length = 4 +# y_length = 1 +# aspect_ratio = x_length/y_length +# n = 1000 +# num_grains_x = 8 +# num_grains_y = 2 +# grain_size_x = x_length/num_grains_x +# grain_size_y = y_length/num_grains_y +# base_epsilon = 0.08 # Visual width +# offset = 0.15 # Offset parameter +# initial_angle = 0 # Starting angle (degrees) +# angle_range = 180 # Total angular variation (degrees) + +# def distance_to_line(x, y, theta, offset=0, ar=aspect_ratio): +# """Distance calculation with aspect ratio and offset compensation""" +# x_scaled = x/ar +# return np.abs(-np.sin(theta)*x_scaled + np.cos(theta)*y - offset) + +# # Create figure and axes explicitly +# fig, ax = plt.subplots(figsize=(12, 3)) + +# # Create grid and initialize indicator +# x = np.linspace(0, x_length, n) +# y = np.linspace(0, y_length, n) +# X, Y = np.meshgrid(x, y) +# indicator = np.zeros_like(X) + +# for i in range(num_grains_x): +# for j in range(num_grains_y): +# x_center = (i + 0.5) * grain_size_x +# theta_deg = initial_angle + (x_center/x_length) * angle_range +# theta = np.deg2rad(theta_deg) + +# x_min, x_max = i*grain_size_x, (i+1)*grain_size_x +# y_min, y_max = j*grain_size_y, (j+1)*grain_size_y + +# in_grain = (X >= x_min) & (X < x_max) & (Y >= y_min) & (Y < y_max) + +# X_local = ((X[in_grain] - x_min)/grain_size_x) - 0.5 +# Y_local = ((Y[in_grain] - y_min)/grain_size_y) - 0.5 + +# distances = distance_to_line(X_local, Y_local, theta, offset) +# indicator[in_grain] = np.where(distances < base_epsilon, 1, 0) + +# # Plot main visualization +# mesh = ax.pcolormesh(X, Y, indicator, cmap='binary', shading='auto') + +# # Add grain boundaries +# for i in range(num_grains_x): +# for j in range(num_grains_y): +# rect = Rectangle((i*grain_size_x, j*grain_size_y), +# grain_size_x, grain_size_y, +# linewidth=1.2, +# edgecolor='lightgray', +# facecolor='none') +# ax.add_patch(rect) + +# # Configure axes +# ax.set_aspect(1/4) +# ax.set_title(f'Stripe Pattern: θ={initial_angle}-{initial_angle+angle_range}°, offset={offset}', +# pad=15, fontsize=14) +# ax.set_xticks([]) +# ax.set_yticks([]) +# ax.spines['top'].set_visible(False) +# ax.spines['right'].set_visible(False) +# ax.spines['bottom'].set_visible(False) +# ax.spines['left'].set_visible(False) + +# # Adjust layout and save +# plt.tight_layout() +# fig.savefig('grain_stripes.pdf', format='pdf', bbox_inches='tight', dpi=300) + +# # Optional: Close the figure to free memory +# plt.close(fig) + + +# ################## +# import numpy as np +# import matplotlib.pyplot as plt +# from matplotlib.patches import Rectangle + +# # Domain parameters +# x_length = 2 +# y_length = 1 +# aspect_ratio = x_length/y_length +# n = 800 +# num_grains_x = 8 +# num_grains_y = 4 +# grain_size_x = x_length/num_grains_x +# grain_size_y = y_length/num_grains_y +# base_epsilon = 0.08 +# offset = 0.15 +# initial_angle = 0 +# angle_range = 180 + + +# resultPath = '/home/klaus/Desktop/MacroMicroStructurePlot' +# textwidth = 6.26894 # textwidth in inch +# width = textwidth * 0.5 +# # width = textwidth * 0.33 +# height = textwidth/1.618 # The golden ratio. + +# def distance_to_line(x, y, theta, offset=0, ar=aspect_ratio): +# """Distance calculation with aspect ratio and offset compensation""" +# x_scaled = x/ar +# return np.abs(-np.sin(theta)*x_scaled + np.cos(theta)*y - offset) + +# # Create figure and axes explicitly +# # fig, ax = plt.subplots(figsize=(12, 3)) +# fig, ax = plt.subplots(figsize=(width, height)) + +# # Create grid and initialize indicator +# x = np.linspace(0, x_length, n) +# y = np.linspace(0, y_length, n) +# X, Y = np.meshgrid(x, y) +# indicator = np.zeros_like(X) + +# for i in range(num_grains_x): +# for j in range(num_grains_y): +# x_center = (i + 0.5) * grain_size_x +# theta_deg = initial_angle + (x_center/x_length) * angle_range +# theta = np.deg2rad(theta_deg) + +# x_min, x_max = i*grain_size_x, (i+1)*grain_size_x +# y_min, y_max = j*grain_size_y, (j+1)*grain_size_y + +# in_grain = (X >= x_min) & (X < x_max) & (Y >= y_min) & (Y < y_max) + +# # Fixed parentheses syntax +# X_local = ((X[in_grain] - x_min)/grain_size_x) - 0.5 # Corrected +# Y_local = ((Y[in_grain] - y_min)/grain_size_y) - 0.5 # Corrected + +# distances = distance_to_line(X_local, Y_local, theta, offset) +# indicator[in_grain] = np.where(distances < base_epsilon, 1, 0) + +# # Plot main visualization +# ax.pcolormesh(X, Y, indicator, cmap='binary', shading='auto') + +# # Add grain boundaries +# for i in range(num_grains_x): +# for j in range(num_grains_y): +# rect = Rectangle((i*grain_size_x, j*grain_size_y), +# grain_size_x, grain_size_y, +# linewidth=1.2, +# edgecolor='lightgray', +# facecolor='none') +# ax.add_patch(rect) + +# # Configure axes +# ax.set_aspect(1) +# ax.set_title(f'Stripe Pattern: θ={initial_angle}-{initial_angle+angle_range}°, offset={offset}', +# pad=15, fontsize=14) +# ax.set_axis_off() # Cleaner than individual spine/ticks removal + +# plt.show() + +# # Save and close +# plt.tight_layout() +# # fig.savefig('grain_stripes.pdf', format='pdf', bbox_inches='tight', dpi=300) +# fig.savefig('grain_stripes.png', bbox_inches='tight', dpi=500) +# plt.close(fig) +# print("PDF successfully generated at: grain_stripes.pdf") + + + + +# ################ +# import numpy as np +# import matplotlib.pyplot as plt +# from matplotlib.patches import Rectangle + +# # Optimized parameters +# x_length = 4 +# y_length = 1 +# n = 200 # Reduced resolution (was 1000) +# num_grains_x = 8 +# num_grains_y = 2 +# grain_size_x = x_length/num_grains_x +# grain_size_y = y_length/num_grains_y +# base_epsilon = 0.08 +# offset = 0.15 +# initial_angle = 0 +# angle_range = 180 + +# def distance_to_line(x, y, theta, offset=0, ar=x_length/y_length): +# x_scaled = x/ar +# return np.abs(-np.sin(theta)*x_scaled + np.cos(theta)*y - offset) + +# # Create figure +# fig, ax = plt.subplots(figsize=(12, 3)) + +# # Create optimized grid +# x = np.linspace(0, x_length, n) +# y = np.linspace(0, y_length, n) +# X, Y = np.meshgrid(x, y) +# indicator = np.zeros_like(X) + +# for i in range(num_grains_x): +# for j in range(num_grains_y): +# # ... [same grain processing as before] ... + +# # Rasterize the heatmap while keeping vectors for boundaries/text +# heatmap = ax.pcolormesh(X, Y, indicator, cmap='binary', shading='auto', +# rasterized=True) # Critical optimization + +# # Add grain boundaries (vector elements) +# for i in range(num_grains_x): +# for j in range(num_grains_y): +# rect = Rectangle((i*grain_size_x, j*grain_size_y), +# grain_size_x, grain_size_y, +# linewidth=1.2, +# edgecolor='lightgray', +# facecolor='none') +# ax.add_patch(rect) + +# # Final formatting +# ax.set_aspect(1/4) +# ax.set_title(f'Optimized Pattern: θ={initial_angle}-{initial_angle+angle_range}°', +# pad=15, fontsize=14) +# ax.set_axis_off() + +# # Save with optimized PDF settings +# plt.tight_layout() +# fig.savefig('optimized_grain_stripes.pdf', format='pdf', +# bbox_inches='tight', +# dpi=150, # Reduced from 300 +# metadata={'Creator': '', 'Producer': ''}, # Remove bloat +# ) +# plt.close(fig) +# print("Optimized PDF generated successfully") \ No newline at end of file diff --git a/dune-uncrustify.cfg b/dune-uncrustify.cfg new file mode 100644 index 0000000000000000000000000000000000000000..57275b1441a403e02e882e7c121331816ed86344 --- /dev/null +++ b/dune-uncrustify.cfg @@ -0,0 +1,125 @@ +tok_split_gte=false +utf8_byte=false +utf8_force=false +indent_cmt_with_tabs=false +indent_align_string=false +indent_braces=false +indent_braces_no_func=false +indent_braces_no_class=false +indent_braces_no_struct=false +indent_brace_parent=false +indent_namespace=true +indent_extern=true +indent_class=true +indent_class_colon=true +indent_else_if=false +indent_var_def_cont=false +indent_func_call_param=false +indent_func_def_param=false +indent_func_proto_param=false +indent_func_class_param=false +indent_func_ctor_var_param=false +indent_template_param=true +indent_func_param_double=true +indent_relative_single_line_comments=false +indent_col1_comment=true +indent_access_spec_body=false +indent_paren_nl=false +indent_comma_paren=false +indent_bool_paren=false +indent_first_bool_expr=false +indent_square_nl=false +indent_preserve_sql=false +indent_align_assign=true +sp_balance_nested_parens=false +align_keep_tabs=false +align_with_tabs=false +align_on_tabstop=false +align_number_left=false +align_func_params=false +align_same_func_call_params=false +align_var_def_colon=false +align_var_def_attribute=false +align_var_def_inline=false +align_right_cmt_mix=false +align_on_operator=false +align_mix_var_proto=false +align_single_line_func=false +align_single_line_brace=false +align_nl_cont=false +align_left_shift=true +align_oc_decl_colon=false +nl_collapse_empty_body=true +nl_assign_leave_one_liners=true +nl_class_leave_one_liners=true +nl_enum_leave_one_liners=true +nl_getset_leave_one_liners=false +nl_func_leave_one_liners=false +nl_if_leave_one_liners=false +nl_multi_line_cond=false +nl_multi_line_define=false +nl_before_case=false +nl_after_case=false +nl_after_return=false +nl_after_semicolon=false +nl_after_brace_open=false +nl_after_brace_open_cmt=false +nl_after_vbrace_open=false +nl_after_vbrace_open_empty=false +nl_after_brace_close=false +nl_after_vbrace_close=false +nl_define_macro=false +nl_squeeze_ifdef=false +nl_ds_struct_enum_cmt=false +nl_ds_struct_enum_close_brace=false +nl_create_if_one_liner=false +nl_create_for_one_liner=false +nl_create_while_one_liner=false +ls_for_split_full=false +ls_func_split_full=false +nl_after_multiline_comment=false +eat_blanks_after_open_brace=false +eat_blanks_before_close_brace=false +mod_full_brace_if_chain=false +mod_pawn_semicolon=false +mod_full_paren_if_bool=false +mod_remove_extra_semicolon=false +mod_sort_import=false +mod_sort_using=false +mod_sort_include=false +mod_move_case_break=false +mod_remove_empty_return=false +cmt_indent_multi=true +cmt_c_group=false +cmt_c_nl_start=false +cmt_c_nl_end=false +cmt_cpp_group=false +cmt_cpp_nl_start=false +cmt_cpp_nl_end=false +cmt_cpp_to_c=false +cmt_star_cont=false +cmt_multi_check_last=true +cmt_insert_before_preproc=false +pp_indent_at_level=false +pp_region_indent_code=false +pp_if_indent_code=false +pp_define_at_level=false +indent_columns=2 +indent_access_spec=-2 +nl_end_of_file_min=1 +indent_with_tabs=0 +sp_before_semi=ignore +sp_after_semi=ignore +sp_after_semi_for=ignore +sp_before_comma=ignore +sp_before_case_colon=ignore +sp_not=ignore +sp_inv=ignore +sp_addr=ignore +sp_member=ignore +sp_deref=ignore +sp_sign=ignore +sp_incdec=ignore +sp_before_nl_cont=ignore +nl_end_of_file=force +nl_before_if=ignore diff --git a/dune/microstructure/CorrectorComputer.hh b/dune/microstructure/CorrectorComputer.hh index 34917870853d2540a9221770afee63927feb3a21..91c2bf158c738f231214363d45b976c57cd81711 100644 --- a/dune/microstructure/CorrectorComputer.hh +++ b/dune/microstructure/CorrectorComputer.hh @@ -5,19 +5,19 @@ #include <dune/common/parametertree.hh> #include <dune/functions/functionspacebases/interpolate.hh> -#include <dune/functions/gridfunctions/gridviewfunction.hh> -#include <dune/functions/gridfunctions/discreteglobalbasisfunction.hh> +#include <dune/functions/gridfunctions/gridviewfunction.hh> +#include <dune/functions/gridfunctions/discreteglobalbasisfunction.hh> #include <dune/grid/io/file/vtk/subsamplingvtkwriter.hh> #include <dune/istl/matrixindexset.hh> -#include <dune/istl/eigenvalue/test/matrixinfo.hh> // TEST: compute condition Number +#include <dune/istl/eigenvalue/test/matrixinfo.hh> #include <dune/microstructure/matrix_operations.hh> #include <dune/microstructure/voigthelper.hh> -#include <dune/solvers/solvers/umfpacksolver.hh> -#include <dune/solvers/solvers/cholmodsolver.hh> +#include <dune/solvers/solvers/umfpacksolver.hh> +#include <dune/solvers/solvers/cholmodsolver.hh> using namespace MatrixOperations; using std::shared_ptr; @@ -28,20 +28,20 @@ template <class Basis, class Material> //, class LocalScalar, class Local2Tensor class CorrectorComputer { public: - static const int dimworld = 3; //GridView::dimensionworld; - static const int dim = Basis::GridView::dimension; //const int dim = Domain::dimension; - - using GridView = typename Basis::GridView; - using Domain = typename GridView::template Codim<0>::Geometry::GlobalCoordinate; - using VectorRT = Dune::FieldVector< double, dimworld>; - using MatrixRT = Dune::FieldMatrix< double, dimworld, dimworld>; - using FuncScalar = std::function< double(const Domain&) >; - using FuncVector = std::function< VectorRT(const Domain&) >; - using Func2Tensor = std::function< MatrixRT(const Domain&) >; - using Func2int = std::function< int(const Domain&) >; - using VectorCT = Dune::BlockVector<Dune::FieldVector<double,1> >; - using MatrixCT = Dune::BCRSMatrix<Dune::FieldMatrix<double,1,1> >; - using ElementMatrixCT = Dune::Matrix<double>; + static const int dimworld = 3; //GridView::dimensionworld; + static const int dim = Basis::GridView::dimension; //const int dim = Domain::dimension; + + using GridView = typename Basis::GridView; + using Domain = typename GridView::template Codim<0>::Geometry::GlobalCoordinate; + using VectorRT = Dune::FieldVector< double, dimworld>; + using MatrixRT = Dune::FieldMatrix< double, dimworld, dimworld>; + using FuncScalar = std::function< double (const Domain&) >; + using FuncVector = std::function< VectorRT (const Domain&) >; + using Func2Tensor = std::function< MatrixRT (const Domain&) >; + using Func2int = std::function< int (const Domain&) >; + using VectorCT = Dune::BlockVector<Dune::FieldVector<double,1> >; + using MatrixCT = Dune::BCRSMatrix<Dune::FieldMatrix<double,1,1> >; + using ElementMatrixCT = Dune::Matrix<double>; @@ -51,20 +51,20 @@ public: protected: - const Basis& basis_; + const Basis& basis_; // const Material& material_; // Material& material_; // Material material_; - // fstream& log_; // Output-log - const Dune::ParameterTree& parameterSet_; + // fstream& log_; // Output-log + const Dune::ParameterTree& parameterSet_; - MatrixCT stiffnessMatrix_; - VectorCT load_alpha1_,load_alpha2_,load_alpha3_; //right-hand side(load) vectors + MatrixCT stiffnessMatrix_; + VectorCT load_alpha1_,load_alpha2_,load_alpha3_; //right-hand side(load) vectors - VectorCT x_1_, x_2_, x_3_; // (all) Corrector coefficient vectors - VectorCT phi_1_, phi_2_, phi_3_; // Corrector phi_i coefficient vectors + VectorCT x_1_, x_2_, x_3_; // (all) Corrector coefficient vectors + VectorCT phi_1_, phi_2_, phi_3_; // Corrector phi_i coefficient vectors Dune::FieldVector<double,3> m_1_, m_2_, m_3_; // Corrector m_i coefficient vectors // (assembled) corrector matrices M_i @@ -77,119 +77,119 @@ protected: const std::array<VoigtVector<double,3>,3 > matrixBasis_; Func2Tensor x3G_1_ = [] (const Domain& x) { - return MatrixRT{{1.0*x[2], 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - }; + return MatrixRT{{1.0*x[2], 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + }; Func2Tensor x3G_2_ = [] (const Domain& x) { - return MatrixRT{{0.0, 0.0, 0.0}, {0.0, 1.0*x[2], 0.0}, {0.0, 0.0, 0.0}}; - }; + return MatrixRT{{0.0, 0.0, 0.0}, {0.0, 1.0*x[2], 0.0}, {0.0, 0.0, 0.0}}; + }; - Func2Tensor x3G_3_ = [] (const Domain& x) { - return MatrixRT{{0.0, (1.0/sqrt(2.0))*x[2], 0.0}, {(1.0/sqrt(2.0))*x[2], 0.0, 0.0}, {0.0, 0.0, 0.0}}; - }; + Func2Tensor x3G_3_ = [] (const Domain& x) { + return MatrixRT{{0.0, (1.0/sqrt(2.0))*x[2], 0.0}, {(1.0/sqrt(2.0))*x[2], 0.0, 0.0}, {0.0, 0.0, 0.0}}; + }; const std::array<Func2Tensor, 3> x3MatrixBasisContainer_ = {x3G_1_, x3G_2_, x3G_3_}; - // --- Offset between basis indices + // --- Offset between basis indices const int phiOffset_; -public: - /////////////////////////////// - // constructor - /////////////////////////////// - // CorrectorComputer(const Basis& basis, - // Material& material, - // std::fstream& log, - // const Dune::ParameterTree& parameterSet) - // : basis_(basis), - // material_(material), - // gamma_(material_.getGamma()), - // log_(log), - // parameterSet_(parameterSet), - // matrixBasis_(std::array<VoigtVector<double,3>,3>{matrixToVoigt(Dune::FieldMatrix<double,3,3>({{1, 0, 0}, {0, 0, 0}, {0, 0, 0}})), - // matrixToVoigt(Dune::FieldMatrix<double,3,3>({{0, 0, 0}, {0, 1, 0}, {0, 0, 0}})), - // matrixToVoigt(Dune::FieldMatrix<double,3,3>({{0, 1/std::sqrt(2.0), 0}, {1/std::sqrt(2.0), 0, 0}, {0, 0, 0}}))}), - // phiOffset_(basis.size()) - // {} - - CorrectorComputer(const Basis& basis, - std::shared_ptr<Material> material, - // std::fstream& log, - const Dune::ParameterTree& parameterSet) - : basis_(basis), - material_(material), - // gamma_(material_->getGamma()), - // log_(log), - parameterSet_(parameterSet), - matrixBasis_(std::array<VoigtVector<double,3>,3>{matrixToVoigt(Dune::FieldMatrix<double,3,3>({{1, 0, 0}, {0, 0, 0}, {0, 0, 0}})), - matrixToVoigt(Dune::FieldMatrix<double,3,3>({{0, 0, 0}, {0, 1, 0}, {0, 0, 0}})), - matrixToVoigt(Dune::FieldMatrix<double,3,3>({{0, 1/std::sqrt(2.0), 0}, {1/std::sqrt(2.0), 0, 0}, {0, 0, 0}}))}), - phiOffset_(basis.size()) - {} +public: + /////////////////////////////// + // constructor + /////////////////////////////// + // CorrectorComputer(const Basis& basis, + // Material& material, + // std::fstream& log, + // const Dune::ParameterTree& parameterSet) + // : basis_(basis), + // material_(material), + // gamma_(material_.getGamma()), + // log_(log), + // parameterSet_(parameterSet), + // matrixBasis_(std::array<VoigtVector<double,3>,3>{matrixToVoigt(Dune::FieldMatrix<double,3,3>({{1, 0, 0}, {0, 0, 0}, {0, 0, 0}})), + // matrixToVoigt(Dune::FieldMatrix<double,3,3>({{0, 0, 0}, {0, 1, 0}, {0, 0, 0}})), + // matrixToVoigt(Dune::FieldMatrix<double,3,3>({{0, 1/std::sqrt(2.0), 0}, {1/std::sqrt(2.0), 0, 0}, {0, 0, 0}}))}), + // phiOffset_(basis.size()) + // {} + + CorrectorComputer(const Basis& basis, + std::shared_ptr<Material> material, + // std::fstream& log, + const Dune::ParameterTree& parameterSet) + : basis_(basis), + material_(material), + // gamma_(material_->getGamma()), + // log_(log), + parameterSet_(parameterSet), + matrixBasis_(std::array<VoigtVector<double,3>,3>{matrixToVoigt(Dune::FieldMatrix<double,3,3>({{1, 0, 0}, {0, 0, 0}, {0, 0, 0}})), + matrixToVoigt(Dune::FieldMatrix<double,3,3>({{0, 0, 0}, {0, 1, 0}, {0, 0, 0}})), + matrixToVoigt(Dune::FieldMatrix<double,3,3>({{0, 1/std::sqrt(2.0), 0}, {1/std::sqrt(2.0), 0, 0}, {0, 0, 0}}))}), + phiOffset_(basis.size()) + {} // ----------------------------------------------------------------- // --- Assemble Corrector problems void assemble() { - Dune::Timer StiffnessTimer; - assembleCellStiffness(stiffnessMatrix_); - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "Stiffness assembly Timer: " << StiffnessTimer.elapsed() << std::endl; - + Dune::Timer StiffnessTimer; + assembleCellStiffness(stiffnessMatrix_); + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "Stiffness assembly Timer: " << StiffnessTimer.elapsed() << std::endl; + - Dune::Timer LoadVectorTimer; - assembleCellLoad(load_alpha1_ ,x3G_1_); - assembleCellLoad(load_alpha2_ ,x3G_2_); - assembleCellLoad(load_alpha3_ ,x3G_3_); - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "Load vector assembly Timer: " << LoadVectorTimer.elapsed() << std::endl; + Dune::Timer LoadVectorTimer; + assembleCellLoad(load_alpha1_ ,x3G_1_); + assembleCellLoad(load_alpha2_ ,x3G_2_); + assembleCellLoad(load_alpha3_ ,x3G_3_); + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "Load vector assembly Timer: " << LoadVectorTimer.elapsed() << std::endl; }; - // void updateMaterial(Material mat) - // { - // this->material_ = mat; - // } + // void updateMaterial(Material mat) + // { + // this->material_ = mat; + // } - void updateMaterial(std::shared_ptr<Material> mat) - { - // std::cout << "updateMaterial of CorrectorComputer" << std::endl; - material_ = mat; - } + void updateMaterial(std::shared_ptr<Material> mat) + { + // std::cout << "updateMaterial of CorrectorComputer" << std::endl; + material_ = mat; + } - /////////////////////////////// - // Getter - /////////////////////////////// - const shared_ptr<Basis> getBasis() {return make_shared<Basis>(basis_);} + /////////////////////////////// + // Getter + /////////////////////////////// + const shared_ptr<Basis> getBasis() {return make_shared<Basis>(basis_);} - Dune::ParameterTree getParameterSet() const {return parameterSet_;} + Dune::ParameterTree getParameterSet() const {return parameterSet_;} - // fstream* getLog(){return &log_;} + // fstream* getLog(){return &log_;} - // double getGamma(){return gamma_;} - double getGamma(){return material_->gamma_;} + // double getGamma(){return gamma_;} + double getGamma(){return material_->gamma_;} - shared_ptr<MatrixCT> getStiffnessMatrix(){return make_shared<MatrixCT>(stiffnessMatrix_);} - shared_ptr<VectorCT> getLoad_alpha1(){return make_shared<VectorCT>(load_alpha1_);} - shared_ptr<VectorCT> getLoad_alpha2(){return make_shared<VectorCT>(load_alpha2_);} - shared_ptr<VectorCT> getLoad_alpha3(){return make_shared<VectorCT>(load_alpha3_);} - // shared_ptr<Material> getMaterial(){return make_shared<Material>(material_);} - shared_ptr<Material> getMaterial(){return material_;} + shared_ptr<MatrixCT> getStiffnessMatrix(){return make_shared<MatrixCT>(stiffnessMatrix_);} + shared_ptr<VectorCT> getLoad_alpha1(){return make_shared<VectorCT>(load_alpha1_);} + shared_ptr<VectorCT> getLoad_alpha2(){return make_shared<VectorCT>(load_alpha2_);} + shared_ptr<VectorCT> getLoad_alpha3(){return make_shared<VectorCT>(load_alpha3_);} + // shared_ptr<Material> getMaterial(){return make_shared<Material>(material_);} + shared_ptr<Material> getMaterial(){return material_;} - // --- Get Correctors - auto getMcontainer(){return mContainer;} - shared_ptr<std::array<VectorCT, 3>> getPhicontainer(){return make_shared<std::array<VectorCT, 3>>(phiContainer);} + // --- Get Correctors + auto getMcontainer(){return mContainer;} + shared_ptr<std::array<VectorCT, 3> > getPhicontainer(){return make_shared<std::array<VectorCT, 3> >(phiContainer);} - auto getMatrixBasiscontainer(){return make_shared<std::array<VoigtVector<double,3>,3 >>(matrixBasis_);} - auto getx3MatrixBasiscontainer(){return x3MatrixBasisContainer_;} + auto getMatrixBasiscontainer(){return make_shared<std::array<VoigtVector<double,3>,3 > >(matrixBasis_);} + auto getx3MatrixBasiscontainer(){return x3MatrixBasisContainer_;} - shared_ptr<VectorCT> getCorr_phi1(){return make_shared<VectorCT>(phi_1_);} - shared_ptr<VectorCT> getCorr_phi2(){return make_shared<VectorCT>(phi_2_);} - shared_ptr<VectorCT> getCorr_phi3(){return make_shared<VectorCT>(phi_3_);} + shared_ptr<VectorCT> getCorr_phi1(){return make_shared<VectorCT>(phi_1_);} + shared_ptr<VectorCT> getCorr_phi2(){return make_shared<VectorCT>(phi_2_);} + shared_ptr<VectorCT> getCorr_phi3(){return make_shared<VectorCT>(phi_3_);} @@ -241,7 +241,7 @@ public: ////////////////////////////////////////////////////////////////// // setOneBaseFunctionToZero ////////////////////////////////////////////////////////////////// - if(parameterSet_.get<bool>("set_oneBasisFunction_Zero ", true)){ + if(parameterSet_.get<bool>("set_oneBasisFunction_Zero ", true)) { Dune::FieldVector<int,3> row; unsigned int arbitraryLeafIndex = parameterSet_.get<unsigned int>("arbitraryLeafIndex", 0); unsigned int arbitraryElementNumber = parameterSet_.get<unsigned int>("arbitraryElementNumber", 0); @@ -272,8 +272,8 @@ public: void computeElementStiffnessMatrix(const typename Basis::LocalView& localView, const Dune::QuadratureRule<double,dim>& quadRule, const std::vector<int>& phaseAtQuadPoint, - ElementMatrixCT& elementMatrix - ) + ElementMatrixCT& elementMatrix + ) { auto element = localView.element(); @@ -285,7 +285,7 @@ public: // LocalBasis-Offset const int localPhiOffset = localView.size(); - const auto& localFiniteElement = localView.tree().child(0).finiteElement(); + const auto& localFiniteElement = localView.tree().child(0).finiteElement(); const auto nSf = localFiniteElement.localBasis().size(); int QPcounter= 0; @@ -320,31 +320,31 @@ public: const auto phase = phaseAtQuadPoint[QPcounter-1]; for (size_t l=0; l< dimworld; l++) - for (size_t j=0; j < nSf; j++ ) - { + for (size_t j=0; j < nSf; j++ ) + { size_t row = localView.tree().child(l).localIndex(j); - + // "phi*phi"-part for (size_t k=0; k < dimworld; k++) - for (size_t i=0; i < nSf; i++) - { + for (size_t i=0; i < nSf; i++) + { double energyDensity= voigtScalarProduct(material_->applyElasticityTensor(deformationGradient[i][k],phase),deformationGradient[j][l]); - size_t col = localView.tree().child(k).localIndex(i); - + size_t col = localView.tree().child(k).localIndex(i); + elementMatrix[row][col] += energyDensity * quadPoint.weight() * integrationElement; - } - + } + // "m*phi" & "phi*m" - part for( size_t m=0; m<3; m++) { - double energyDensityGphi = voigtScalarProduct(material_->applyElasticityTensor(matrixBasis_[m],phase),deformationGradient[j][l]); + double energyDensityGphi = voigtScalarProduct(material_->applyElasticityTensor(matrixBasis_[m],phase),deformationGradient[j][l]); - auto value = energyDensityGphi * quadPoint.weight() * integrationElement; - elementMatrix[row][localPhiOffset+m] += value; - elementMatrix[localPhiOffset+m][row] += value; + auto value = energyDensityGphi * quadPoint.weight() * integrationElement; + elementMatrix[row][localPhiOffset+m] += value; + elementMatrix[localPhiOffset+m][row] += value; } - } + } // "m*m"-part for(size_t m=0; m<3; m++) //TODO ist symmetric.. reicht die hälfte zu berechnen!!! for(size_t n=0; n<3; n++) @@ -352,11 +352,11 @@ public: double energyDensityGG = voigtScalarProduct(material_->applyElasticityTensor(matrixBasis_[m],phase),matrixBasis_[n]); elementMatrix[localPhiOffset+m][localPhiOffset+n] += energyDensityGG * quadPoint.weight() * integrationElement; // += !!!!! (Fixed-Bug) - + } } - // std::cout << "Number of QuadPoints:" << QPcounter << std::endl; - // printmatrix(std::cout, elementMatrix, "elementMatrix", "--"); + // std::cout << "Number of QuadPoints:" << QPcounter << std::endl; + // printmatrix(std::cout, elementMatrix, "elementMatrix", "--"); } @@ -364,18 +364,18 @@ public: * @brief Compute element load vector. Layout: * | f*phi| * | f*m | - * - * @tparam Vector - * @tparam LocalForce - * @param localView - * @param elementRhs - * @param forceTerm + * + * @tparam Vector + * @tparam LocalForce + * @param localView + * @param elementRhs + * @param forceTerm */ template<class Vector, class LocalForce> void computeElementLoadVector( const typename Basis::LocalView& localView, - Vector& elementRhs, - const LocalForce& forceTerm - ) + Vector& elementRhs, + const LocalForce& forceTerm + ) { const auto element = localView.element(); const auto geometry = element.geometry(); @@ -393,7 +393,7 @@ public: // LocalBasis-Offset const int localPhiOffset = localView.size(); - int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1); + int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1); const auto& quad = Dune::QuadratureRules<double,dim>::rule(element.type(), orderQR); for (const auto& quadPoint : quad) @@ -407,7 +407,7 @@ public: for (size_t i=0; i< jacobians.size(); i++) jacobians[i] = jacobians[i] * geometryJacobianInverse; - + // "f*phi"-part for (size_t i=0; i < nSf; i++) @@ -418,7 +418,7 @@ public: tmpDefGradientV[k][0] = jacobians[i][0][0]; // Y tmpDefGradientV[k][1] = jacobians[i][0][1]; // X2 tmpDefGradientV[k][2] = jacobians[i][0][2]; // X3 - + VoigtVector<double,3> defGradientV = symVoigt(crossSectionDirectionScaling((1.0/(material_->gamma_)),tmpDefGradientV)); double energyDensity= voigtScalarProduct(material_->applyElasticityTensor((-1.0)*matrixToVoigt(forceTerm(quadPos)),localIndicatorFunction(quadPos)),defGradientV); @@ -454,7 +454,7 @@ public: bool cacheElementMatrices = parameterSet_.get<bool>("cacheElementMatrices", true); // bool cacheElementMatrices = false; // if(parameterSet_.get<bool>("cacheElementMatrices", true)) - if (parameterSet_.get<bool>("printMicroOutput ", false)) + if (parameterSet_.get<bool>("printMicroOutput", false)) { if (cacheElementMatrices) { @@ -513,37 +513,37 @@ public: { computeElementStiffnessMatrix(localView, quadRule, phaseAtQuadPoint, elementMatrix); } - - + + // TEST: Check Element-Stiffness-Symmetry: if(parameterSet_.get<bool>("print_debug", false)) { - for (size_t i=0; i<localPhiOffset; i++) + for (size_t i=0; i<localPhiOffset; i++) for (size_t j=0; j<localPhiOffset; j++ ) { - if(abs(elementMatrix[i][j] - elementMatrix[j][i]) > 1e-12 ) - std::cout << "ELEMENT-STIFFNESS MATRIX NOT SYMMETRIC!!!" << std::endl; + if(abs(elementMatrix[i][j] - elementMatrix[j][i]) > 1e-12 ) + std::cout << "ELEMENT-STIFFNESS MATRIX NOT SYMMETRIC!!!" << std::endl; } } ////////////////////////////////////////////////////////////////////////////// // GLOBAL STIFFNES ASSEMBLY ////////////////////////////////////////////////////////////////////////////// for (size_t i=0; i<localPhiOffset; i++) - for (size_t j=0; j<localPhiOffset; j++ ) - { + for (size_t j=0; j<localPhiOffset; j++ ) + { auto row = localView.index(i); auto col = localView.index(j); matrix[row][col] += elementMatrix[i][j]; - } + } for (size_t i=0; i<localPhiOffset; i++) - for(size_t m=0; m<3; m++) - { + for(size_t m=0; m<3; m++) + { auto row = localView.index(i); matrix[row][phiOffset+m] += elementMatrix[i][localPhiOffset+m]; matrix[phiOffset+m][row] += elementMatrix[localPhiOffset+m][i]; - } + } for (size_t m=0; m<3; m++ ) - for (size_t n=0; n<3; n++ ) + for (size_t n=0; n<3; n++ ) matrix[phiOffset+m][phiOffset+n] += elementMatrix[localPhiOffset+m][localPhiOffset+n]; // printmatrix(std::cout, matrix, "StiffnessMatrix", "--"); @@ -562,9 +562,9 @@ public: auto localView = basis_.localView(); const int phiOffset = basis_.dimension(); - // Transform G_alpha's to GridViewFunctions/LocalFunctions + // Transform G_alpha's to GridViewFunctions/LocalFunctions auto loadGVF = Dune::Functions::makeGridViewFunction(forceTerm, basis_.gridView()); - auto loadFunctional = localFunction(loadGVF); + auto loadFunctional = localFunction(loadGVF); for (const auto& element : elements(basis_.gridView())) { @@ -591,11 +591,14 @@ public: } } - // ----------------------------------------------------------------- - // --- Functions for global integral mean equals zero constraint + + /** + @brief This method is used to select 3 global indices that correspond to the 3 components of a given (by leadIdx) + local basis function. + */ auto arbitraryComponentwiseIndices(const int elementNumber, - const int leafIdx - ) + const int leafIdx + ) { // (Local Approach -- works for non Lagrangian-Basis too) // Input : elementNumber & localIdx @@ -622,48 +625,85 @@ public: return row; } + + /** + @brief Method that fixes 3 (one for each component of a basis function) degrees of freedom + to factor out the constant nullspace of the system. + */ void setOneBaseFunctionToZero() { - if (parameterSet_.get<bool>("printMicroOutput ", false)) + if (parameterSet_.get<bool>("printMicroOutput", false)) std::cout << "Setting one Basis-function to zero" << std::endl; - // constexpr int dim = Basis::LocalView::Element::dimension; - unsigned int arbitraryLeafIndex = parameterSet_.template get<unsigned int>("arbitraryLeafIndex", 0); unsigned int arbitraryElementNumber = parameterSet_.template get<unsigned int>("arbitraryElementNumber", 0); //Determine 3 global indices (one for each component of an arbitrary local FE-function) - Dune::FieldVector<std::size_t,3> row = arbitraryComponentwiseIndices(arbitraryElementNumber,arbitraryLeafIndex); + Dune::FieldVector<int,3> selectedIndices = arbitraryComponentwiseIndices(arbitraryElementNumber,arbitraryLeafIndex); + // printvector(std::cout, selectedIndices, "selectedIndices:", "--"); + // Replace the corresponding rows in the stiffness matrix with entries of the identity matrix. + // for (int k = 0; k<dim; k++) + // { + // load_alpha1_[selectedIndices[k]] = 0.0; + // load_alpha2_[selectedIndices[k]] = 0.0; + // load_alpha3_[selectedIndices[k]] = 0.0; + // auto cIt = stiffnessMatrix_[selectedIndices[k]].begin(); + // auto cEndIt = stiffnessMatrix_[selectedIndices[k]].end(); + // for (; cIt!=cEndIt; ++cIt) //iterate over row + // *cIt = (cIt.index()==selectedIndices[k]) ? 1.0 : 0.0; + // } + + // Replace the corresponding rows and columns in the stiffness matrix with entries of the identity matrix. for (int k = 0; k<dim; k++) { - load_alpha1_[row[k]] = 0.0; - load_alpha2_[row[k]] = 0.0; - load_alpha3_[row[k]] = 0.0; - auto cIt = stiffnessMatrix_[row[k]].begin(); - auto cEndIt = stiffnessMatrix_[row[k]].end(); - for (; cIt!=cEndIt; ++cIt) - *cIt = (cIt.index()==row[k]) ? 1.0 : 0.0; + load_alpha1_[selectedIndices[k]] = 0.0; + load_alpha2_[selectedIndices[k]] = 0.0; + load_alpha3_[selectedIndices[k]] = 0.0; + + //loop over all nonempty rows + for (auto row = stiffnessMatrix_.begin(); row != stiffnessMatrix_.end(); ++row) + { + // adjust column with index selectedIndices[k] + if(stiffnessMatrix_.exists(row.index(),selectedIndices[k])) + { + stiffnessMatrix_[row.index()][selectedIndices[k]] = (row.index()==selectedIndices[k]) ? 1.0 : 0.0; + } + // iterate over whole row of the selectedIndices[k]: + if(row.index() == selectedIndices[k]) + { + auto cIt = stiffnessMatrix_[selectedIndices[k]].begin(); + auto cEndIt = stiffnessMatrix_[selectedIndices[k]].end(); + for (; cIt!=cEndIt; ++cIt) + { + *cIt = (cIt.index()==selectedIndices[k]) ? 1.0 : 0.0; + } + } + } } + } + /** + @brief Method that determines global indices corresponding to the components k = 1,2,3 of the global basis functions + in order to subtract correct (component of) integral mean + + In : child/component integer + Out : all global basis indices that belong to that component + */ auto childToIndexMap(const int k) { - // Input : child/component - // Output : determine all Indices that belong to that component + auto localView = basis_.localView(); std::vector<int> r = { }; - // for (int n: r) - // std::cout << n << ","<< std::endl; - // Determine global indizes for each component k = 1,2,3.. in order to subtract correct (component of) integral Mean - // (global) Indices that correspond to component k = 1,2,3 + // Determine for(const auto& element : elements(basis_.gridView())) { localView.bind(element); - const auto& localFiniteElement = localView.tree().child(k).finiteElement(); - const auto nSf = localFiniteElement.localBasis().size(); + const auto& localFiniteElement = localView.tree().child(k).finiteElement(); + const auto nSf = localFiniteElement.localBasis().size(); for(size_t j=0; j<nSf; j++) { @@ -671,7 +711,7 @@ public: r.push_back(localView.index(Localidx)); // global indices } } - // Delete duplicate elements + // Delete duplicate elements. // first remove consecutive (adjacent) duplicates auto last = std::unique(r.begin(), r.end()); r.erase(last, r.end()); @@ -683,9 +723,13 @@ public: } + /** + @brief Method that computes the integral mean of a discrete function in the function space determined by the + coefficient vector of the basis representation. + */ auto integralMean(VectorCT& coeffVector) { - auto GVFunction = Dune::Functions::makeDiscreteGlobalBasisFunction<Dune::FieldVector<double,dim>>(basis_,coeffVector); + auto GVFunction = Dune::Functions::makeDiscreteGlobalBasisFunction<Dune::FieldVector<double,dim> >(basis_,coeffVector); auto localfun = localFunction(GVFunction); auto localView = basis_.localView(); @@ -699,8 +743,8 @@ public: localView.bind(element); localfun.bind(element); const auto& localFiniteElement = localView.tree().child(0).finiteElement(); - - // int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1)+5; //TEST + + // int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1)+5; //TEST int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1); const auto& quad = Dune::QuadratureRules<double, dim>::rule(element.type(), orderQR); @@ -709,7 +753,7 @@ public: const auto& quadPos = quadPoint.position(); const double integrationElement = element.geometry().integrationElement(quadPos); area += quadPoint.weight() * integrationElement; - + r += localfun(quadPos) * quadPoint.weight() * integrationElement; } } @@ -717,6 +761,9 @@ public: } + /** + @brief Compute and substract the integral mean to a given basis coefficient vector. + */ auto subtractIntegralMean(VectorCT& coeffVector) { // Subtract correct integral mean from each associated component function @@ -734,400 +781,385 @@ public: /** - * @brief Solve corrector problem for different right-hand sides. - * Choose between solvers: - * 1 : CG-Solver - * 2 : GMRES - * 3 : QR (default) - * 4 : UMFPACK - * - * @return auto + * @brief Solve the corrector problem for different right-hand sides. + * Choose between solvers: + * 1 : CHOLMOD (default) + * 2 : UMFPACK + * 3 : GMRES + * 4 : CG + * 5 : QR + * + * @return auto */ auto solve() { - - bool set_oneBasisFunction_Zero = parameterSet_.get<bool>("set_oneBasisFunction_Zero", false); - bool substract_integralMean = false; - if(parameterSet_.get<bool>("set_IntegralZero", false)) - { - set_oneBasisFunction_Zero = true; - substract_integralMean = true; - } - // set one basis-function to zero - if(set_oneBasisFunction_Zero) - setOneBaseFunctionToZero(); - - //TEST: Compute Condition Number (Can be very expensive !) - const bool verbose = true; - const unsigned int arppp_a_verbosity_level = 2; - const unsigned int pia_verbosity_level = 1; - if(parameterSet_.get<bool>("print_conditionNumber", false)) - { - MatrixInfo<MatrixCT> matrixInfo(stiffnessMatrix_,verbose,arppp_a_verbosity_level,pia_verbosity_level); - std::cout << "Get condition number of Stiffness_CE: " << matrixInfo.getCond2(true) << std::endl; - } + bool set_oneBasisFunction_Zero = parameterSet_.get<bool>("set_oneBasisFunction_Zero", false); + bool substract_integralMean = false; + if(parameterSet_.get<bool>("set_IntegralZero", false)) + { + set_oneBasisFunction_Zero = true; + substract_integralMean = true; + } + // set one basis-function to zero + if(set_oneBasisFunction_Zero) + setOneBaseFunctionToZero(); + + // Option: compute the condition number (This can be very expensive and serves mainly for debugging purposes.) + const bool verbose = true; + const unsigned int arppp_a_verbosity_level = 2; + const unsigned int pia_verbosity_level = 1; + if(parameterSet_.get<bool>("print_conditionNumber", false)) + { + MatrixInfo<MatrixCT> matrixInfo(stiffnessMatrix_,verbose,arppp_a_verbosity_level,pia_verbosity_level); + std::cout << "Get condition number of Stiffness_CE: " << matrixInfo.getCond2(true) << std::endl; + } + + unsigned int Solvertype = parameterSet_.get<unsigned int>("Solvertype", 1); + unsigned int Solver_verbosity = parameterSet_.get<unsigned int>("Solver_verbosity", 2); + + x_1_.resize(load_alpha1_.size()); + x_2_.resize(load_alpha2_.size()); + x_3_.resize(load_alpha3_.size()); - unsigned int Solvertype = parameterSet_.get<unsigned int>("Solvertype", 4); - unsigned int Solver_verbosity = parameterSet_.get<unsigned int>("Solver_verbosity", 2); + // printmatrix(std::cout, stiffnessMatrix_, "StiffnessMatrix", "--"); + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "start corrector solver..." << std::endl; + Dune::Timer SolverTimer; + //////////////////////////////////////////////////////////////////////////////////// + if (Solvertype==1) // CHOLMOD - SOLVER + { + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "------------ CHOLMOD - Solver ------------" << std::endl; + // log_ << "solveLinearSystems: We use CHOLMOD solver.\n"; + + if(basis_.dimension() > 1e6) + std::cout << "WARNING: Using a direct solver with " << basis_.dimension() << " degrees of freedom may be not feasible or slow." << std::endl; + + Dune::Solvers::CholmodSolver<MatrixCT,VectorCT> solver; + + // Since we have the same stiffness-matrix for three different right-hand sides, + // we first use the factorization of CHOLMOD once and use it to repeatedly solve for multiple right-hand sides. + // In my measurements this reduced the runtime to about ~30% compared to using 'setProblem' multiple times. + + // set first solution vector + solver.setSolutionVector(x_1_); + // Factorize the matrix + solver.setMatrix(stiffnessMatrix_); + solver.factorize(); + // set first right-hand side + solver.setRhs(load_alpha1_); + // solve for first vector + solver.solve(); + + // set second solution vector + solver.setSolutionVector(x_2_); + // set second right-hand side + solver.setRhs(load_alpha2_); + // solve for second vector + solver.solve(); + + // set third solution vector + solver.setSolutionVector(x_3_); + // set third right-hand side + solver.setRhs(load_alpha3_); + // solve for third vector + solver.solve(); + // log_ << "Solver-type used: " <<" CHOLMOD-Solver" << std::endl; + } + //////////////////////////////////////////////////////////////////////////////////// + else if (Solvertype==2) // UMFPACK - SOLVER + { + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "------------ UMFPACK - Solver ------------" << std::endl; + // log_ << "solveLinearSystems: We use UMFPACK solver.\n"; + + if(basis_.dimension() > 1e5) + std::cout << "WARNING: Using a direct solver with " << basis_.dimension() << " degrees of freedom may be not feasible or slow." << std::endl; + + Dune::Solvers::UMFPackSolver<MatrixCT,VectorCT> solver; + solver.setProblem(stiffnessMatrix_,x_1_,load_alpha1_); + // solver.preprocess(); + solver.solve(); + solver.setProblem(stiffnessMatrix_,x_2_,load_alpha2_); + // solver.preprocess(); + solver.solve(); + solver.setProblem(stiffnessMatrix_,x_3_,load_alpha3_); + // solver.preprocess(); + solver.solve(); + // log_ << "Solver-type used: " <<" UMFPACK-Solver" << std::endl; + } + //////////////////////////////////////////////////////////////////////////////////// + else if (Solvertype==3) // GMRES - SOLVER + { + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "------------ GMRES - Solver ------------" << std::endl; - // --- set initial values for solver + // --- set initial values for solver (only for the iterativer solvers) x_1_ = load_alpha1_; x_2_ = load_alpha2_; x_3_ = load_alpha3_; - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "start corrector solver..." << std::endl; - Dune::Timer SolverTimer; - if (Solvertype==1) // CG - SOLVER - { - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "------------ CG - Solver ------------" << std::endl; - Dune::MatrixAdapter<MatrixCT, VectorCT, VectorCT> op(stiffnessMatrix_); - - // Sequential incomplete LU decomposition as the preconditioner - Dune::SeqILU<MatrixCT, VectorCT, VectorCT> ilu0(stiffnessMatrix_,1.0); - int iter = parameterSet_.get<double>("iterations_CG", 999); - // Preconditioned conjugate-gradient solver - Dune::CGSolver<VectorCT> solver(op, - ilu0, //NULL, - 1e-8, // desired residual reduction factorlack - iter, // maximum number of iterations - Solver_verbosity, - true // Try to estimate condition_number - ); // verbosity of the solver - Dune::InverseOperatorResult statistics; - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "solve linear system for x_1.\n"; - solver.apply(x_1_, load_alpha1_, statistics); - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "solve linear system for x_2.\n"; - solver.apply(x_2_, load_alpha2_, statistics); - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "solve linear system for x_3.\n"; - solver.apply(x_3_, load_alpha3_, statistics); - // log_ << "Solver-type used: " <<" CG-Solver" << std::endl; - - - if(parameterSet_.get<bool>("printMicroOutput ", false) && Solver_verbosity > 0) - { - std::cout << "statistics.converged " << statistics.converged << std::endl; - std::cout << "statistics.condition_estimate: " << statistics.condition_estimate << std::endl; - std::cout << "statistics.iterations: " << statistics.iterations << std::endl; - } - } - //////////////////////////////////////////////////////////////////////////////////// - else if (Solvertype==2) // GMRES - SOLVER + // Turn the matrix into a linear operator + Dune::MatrixAdapter<MatrixCT,VectorCT,VectorCT> stiffnessOperator(stiffnessMatrix_); + + // Fancy (but only) way to not have a preconditioner at all + Dune::Richardson<VectorCT,VectorCT> preconditioner(1.0); + + // Construct the iterative solver + Dune::RestartedGMResSolver<VectorCT> solver( + stiffnessOperator, // Operator to invert + preconditioner, // Preconditioner + 1e-10, // Desired residual reduction factor + 500, // Number of iterations between restarts, + // here: no restarting + 500, // Maximum number of iterations + Solver_verbosity); // Verbosity of the solver + + // Object storing some statistics about the solving process + Dune::InverseOperatorResult statistics; + + // solve for different Correctors (alpha = 1,2,3) + solver.apply(x_1_, load_alpha1_, statistics); //load_alpha1 now contains the corresponding residual!! + solver.apply(x_2_, load_alpha2_, statistics); + solver.apply(x_3_, load_alpha3_, statistics); + // log_ << "Solver-type used: " <<" GMRES-Solver" << std::endl; + if(parameterSet_.get<bool>("printMicroOutput", false) && Solver_verbosity > 0) { - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "------------ GMRES - Solver ------------" << std::endl; - // Turn the matrix into a linear operator - Dune::MatrixAdapter<MatrixCT,VectorCT,VectorCT> stiffnessOperator(stiffnessMatrix_); - - // Fancy (but only) way to not have a preconditioner at all - Dune::Richardson<VectorCT,VectorCT> preconditioner(1.0); - - // Construct the iterative solver - Dune::RestartedGMResSolver<VectorCT> solver( - stiffnessOperator, // Operator to invert - preconditioner, // Preconditioner - 1e-10, // Desired residual reduction factor - 500, // Number of iterations between restarts, - // here: no restarting - 500, // Maximum number of iterations - Solver_verbosity); // Verbosity of the solver - - // Object storing some statistics about the solving process - Dune::InverseOperatorResult statistics; - - // solve for different Correctors (alpha = 1,2,3) - solver.apply(x_1_, load_alpha1_, statistics); //load_alpha1 now contains the corresponding residual!! - solver.apply(x_2_, load_alpha2_, statistics); - solver.apply(x_3_, load_alpha3_, statistics); - // log_ << "Solver-type used: " <<" GMRES-Solver" << std::endl; - if(parameterSet_.get<bool>("printMicroOutput ", false) && Solver_verbosity > 0) - { - std::cout << "statistics.converged " << statistics.converged << std::endl; - std::cout << "statistics.condition_estimate: " << statistics.condition_estimate << std::endl; - std::cout << "statistics.iterations: " << statistics.iterations << std::endl; - } + std::cout << "statistics.converged " << statistics.converged << std::endl; + std::cout << "statistics.condition_estimate: " << statistics.condition_estimate << std::endl; + std::cout << "statistics.iterations: " << statistics.iterations << std::endl; } - //////////////////////////////////////////////////////////////////////////////////// - else if ( Solvertype==3)// QR - SOLVER - { - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "------------ QR - Solver ------------" << std::endl; - // log_ << "solveLinearSystems: We use QR solver.\n"; - //TODO install suitesparse - Dune::SPQR<MatrixCT> sPQR(stiffnessMatrix_); - // sPQR.setVerbosity(1); - sPQR.setVerbosity(Solver_verbosity); - Dune::InverseOperatorResult statisticsQR; - - if(basis_.dimension() > 1e5) - std::cout << "WARNING: Using a direct solver with " << basis_.dimension() << " degrees of freedom may be not feasible or slow." << std::endl; - - sPQR.apply(x_1_, load_alpha1_, statisticsQR); - // std::cout << "statistics.converged " << statisticsQR.converged << std::endl; - // std::cout << "statistics.condition_estimate: " << statisticsQR.condition_estimate << std::endl; - // std::cout << "statistics.iterations: " << statisticsQR.iterations << std::endl; - sPQR.apply(x_2_, load_alpha2_, statisticsQR); - // std::cout << "statistics.converged " << statisticsQR.converged << std::endl; - // std::cout << "statistics.condition_estimate: " << statisticsQR.condition_estimate << std::endl; - // std::cout << "statistics.iterations: " << statisticsQR.iterations << std::endl; - sPQR.apply(x_3_, load_alpha3_, statisticsQR); - // std::cout << "statistics.converged " << statisticsQR.converged << std::endl; - // std::cout << "statistics.condition_estimate: " << statisticsQR.condition_estimate << std::endl; - // std::cout << "statistics.iterations: " << statisticsQR.iterations << std::endl; - // log_ << "Solver-type used: " <<" QR-Solver" << std::endl; - if(parameterSet_.get<bool>("printMicroOutput ", false) && Solver_verbosity > 0) - { - std::cout << "statistics.converged " << statisticsQR.converged << std::endl; - std::cout << "statistics.condition_estimate: " << statisticsQR.condition_estimate << std::endl; - std::cout << "statistics.iterations: " << statisticsQR.iterations << std::endl; - } + } + //////////////////////////////////////////////////////////////////////////////////// + else if (Solvertype==4) // CG - SOLVER + { + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "------------ CG - Solver ------------" << std::endl; - } - //////////////////////////////////////////////////////////////////////////////////// - else if (Solvertype==4)// UMFPACK - SOLVER - { - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "------------ UMFPACK - Solver ------------" << std::endl; - // log_ << "solveLinearSystems: We use UMFPACK solver.\n"; - - - // #if HAVE_UMFPACK - // std::cout << "HAVE_UMFPACK TRUE" << std::endl; - // #else - // std::cout << "HAVE_UMFPACK FALSE" << std::endl; - // #endif - - // #if HAVE_SUITESPARSE_UMFPACK - // std::cout << "HAVE_SUITESPARSE_UMFPACK TRUE" << std::endl; - // #else - // std::cout << "HAVE_SUITESPARSE_UMFPACK FALSE" << std::endl; - // #endif - - - - if(basis_.dimension() > 1e5) - std::cout << "WARNING: Using a direct solver with " << basis_.dimension() << " degrees of freedom may be not feasible or slow." << std::endl; - - Dune::Solvers::UMFPackSolver<MatrixCT,VectorCT> solver; - solver.setProblem(stiffnessMatrix_,x_1_,load_alpha1_); - // solver.preprocess(); - solver.solve(); - solver.setProblem(stiffnessMatrix_,x_2_,load_alpha2_); - // solver.preprocess(); - solver.solve(); - solver.setProblem(stiffnessMatrix_,x_3_,load_alpha3_); - // solver.preprocess(); - solver.solve(); - // sPQR.apply(x_1, load_alpha1, statisticsQR); - // std::cout << "statistics.converged " << statisticsQR.converged << std::endl; - // std::cout << "statistics.condition_estimate: " << statisticsQR.condition_estimate << std::endl; - // std::cout << "statistics.iterations: " << statisticsQR.iterations << std::endl; - // sPQR.apply(x_2, load_alpha2, statisticsQR); - // std::cout << "statistics.converged " << statisticsQR.converged << std::endl; - // std::cout << "statistics.condition_estimate: " << statisticsQR.condition_estimate << std::endl; - // std::cout << "statistics.iterations: " << statisticsQR.iterations << std::endl; - // sPQR.apply(x_3, load_alpha3, statisticsQR); - // std::cout << "statistics.converged " << statisticsQR.converged << std::endl; - // std::cout << "statistics.condition_estimate: " << statisticsQR.condition_estimate << std::endl; - // std::cout << "statistics.iterations: " << statisticsQR.iterations << std::endl; - // log_ << "Solver-type used: " <<" UMFPACK-Solver" << std::endl; - } - //////////////////////////////////////////////////////////////////////////////////// - else if (Solvertype==5)// CHOLDMOD - SOLVER - { - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "------------ CHOLMOD - Solver ------------" << std::endl; - // log_ << "solveLinearSystems: We use CHOLMOD solver.\n"; - - if(basis_.dimension() > 1e5) - std::cout << "WARNING: Using a direct solver with " << basis_.dimension() << " degrees of freedom may be not feasible or slow." << std::endl; - - Dune::Solvers::CholmodSolver<MatrixCT,VectorCT> solver; - solver.setProblem(stiffnessMatrix_,x_1_,load_alpha1_); - // solver.preprocess(); - solver.solve(); - solver.setProblem(stiffnessMatrix_,x_2_,load_alpha2_); - // solver.preprocess(); - solver.solve(); - solver.setProblem(stiffnessMatrix_,x_3_,load_alpha3_); - // solver.preprocess(); - solver.solve(); - // sPQR.apply(x_1, load_alpha1, statisticsQR); - // std::cout << "statistics.converged " << statisticsQR.converged << std::endl; - // std::cout << "statistics.condition_estimate: " << statisticsQR.condition_estimate << std::endl; - // std::cout << "statistics.iterations: " << statisticsQR.iterations << std::endl; - // sPQR.apply(x_2, load_alpha2, statisticsQR); - // std::cout << "statistics.converged " << statisticsQR.converged << std::endl; - // std::cout << "statistics.condition_estimate: " << statisticsQR.condition_estimate << std::endl; - // std::cout << "statistics.iterations: " << statisticsQR.iterations << std::endl; - // sPQR.apply(x_3, load_alpha3, statisticsQR); - // std::cout << "statistics.converged " << statisticsQR.converged << std::endl; - // std::cout << "statistics.condition_estimate: " << statisticsQR.condition_estimate << std::endl; - // std::cout << "statistics.iterations: " << statisticsQR.iterations << std::endl; - // log_ << "Solver-type used: " <<" CHOLMOD-Solver" << std::endl; - } - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "Corrector computation finished. Time required:" << SolverTimer.elapsed() << std::endl; - - //////////////////////////////////////////////////////////////////////////////////// - // Extract phi_alpha & M_alpha coefficients - //////////////////////////////////////////////////////////////////////////////////// - phi_1_.resize(basis_.size()); - phi_1_ = 0; - phi_2_.resize(basis_.size()); - phi_2_ = 0; - phi_3_.resize(basis_.size()); - phi_3_ = 0; - - for(size_t i=0; i<basis_.size(); i++) + // --- set initial values for solver (only for the iterativer solvers) + x_1_ = load_alpha1_; + x_2_ = load_alpha2_; + x_3_ = load_alpha3_; + + Dune::MatrixAdapter<MatrixCT, VectorCT, VectorCT> op(stiffnessMatrix_); + + // Sequential incomplete LU decomposition as the preconditioner + Dune::SeqILU<MatrixCT, VectorCT, VectorCT> ilu0(stiffnessMatrix_,1.0); + int iter = parameterSet_.get<double>("iterations_CG", 999); + // Preconditioned conjugate-gradient solver + Dune::CGSolver<VectorCT> solver(op, + ilu0, //NULL, + 1e-8, // desired residual reduction factorlack + iter, // maximum number of iterations + Solver_verbosity, + true // Try to estimate condition_number + ); // verbosity of the solver + Dune::InverseOperatorResult statistics; + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "solve linear system for x_1.\n"; + solver.apply(x_1_, load_alpha1_, statistics); + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "solve linear system for x_2.\n"; + solver.apply(x_2_, load_alpha2_, statistics); + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "solve linear system for x_3.\n"; + solver.apply(x_3_, load_alpha3_, statistics); + // log_ << "Solver-type used: " <<" CG-Solver" << std::endl; + + + if(parameterSet_.get<bool>("printMicroOutput", false) && Solver_verbosity > 0) { - phi_1_[i] = x_1_[i]; - phi_2_[i] = x_2_[i]; - phi_3_[i] = x_3_[i]; + std::cout << "statistics.converged " << statistics.converged << std::endl; + std::cout << "statistics.condition_estimate: " << statistics.condition_estimate << std::endl; + std::cout << "statistics.iterations: " << statistics.iterations << std::endl; } - for(size_t i=0; i<3; i++) + } + //////////////////////////////////////////////////////////////////////////////////// + else if ( Solvertype=5) // QR - SOLVER + { + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "------------ QR - Solver ------------" << std::endl; + // log_ << "solveLinearSystems: We use QR solver.\n"; + + //TODO install suitesparse + Dune::SPQR<MatrixCT> sPQR(stiffnessMatrix_); + // sPQR.setVerbosity(1); + sPQR.setVerbosity(Solver_verbosity); + Dune::InverseOperatorResult statisticsQR; + + if(basis_.dimension() > 1e5) + std::cout << "WARNING: Using a direct solver with " << basis_.dimension() << " degrees of freedom may be not feasible or slow." << std::endl; + + sPQR.apply(x_1_, load_alpha1_, statisticsQR); + sPQR.apply(x_2_, load_alpha2_, statisticsQR); + sPQR.apply(x_3_, load_alpha3_, statisticsQR); + // log_ << "Solver-type used: " <<" QR-Solver" << std::endl; + if(parameterSet_.get<bool>("printMicroOutput ", false) && Solver_verbosity > 0) { - m_1_[i] = x_1_[phiOffset_+i]; - m_2_[i] = x_2_[phiOffset_+i]; - m_3_[i] = x_3_[phiOffset_+i]; + std::cout << "statistics.converged " << statisticsQR.converged << std::endl; + std::cout << "statistics.condition_estimate: " << statisticsQR.condition_estimate << std::endl; + std::cout << "statistics.iterations: " << statisticsQR.iterations << std::endl; } - // assemble M_alpha's (actually iota(M_alpha) ) + } + //////////////////////////////////////////////////////////////////////////////////// + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "Corrector computation finished. Time required:" << SolverTimer.elapsed() << std::endl; + + //////////////////////////////////////////////////////////////////////////////////// + // Extract phi_alpha & M_alpha coefficients + //////////////////////////////////////////////////////////////////////////////////// + phi_1_.resize(basis_.size()); + phi_1_ = 0; + phi_2_.resize(basis_.size()); + phi_2_ = 0; + phi_3_.resize(basis_.size()); + phi_3_ = 0; + + for(size_t i=0; i<basis_.size(); i++) + { + phi_1_[i] = x_1_[i]; + phi_2_[i] = x_2_[i]; + phi_3_[i] = x_3_[i]; + } + for(size_t i=0; i<3; i++) + { + m_1_[i] = x_1_[phiOffset_+i]; + m_2_[i] = x_2_[phiOffset_+i]; + m_3_[i] = x_3_[phiOffset_+i]; + } + // assemble M_alpha's (actually iota(M_alpha) ) - for (auto& matrix : mContainer) - matrix = 0; + for (auto& matrix : mContainer) + matrix = 0; - for(size_t i=0; i<3; i++) - { - mContainer[0] += m_1_[i]*voigtToMatrix(matrixBasis_[i]); - mContainer[1] += m_2_[i]*voigtToMatrix(matrixBasis_[i]); - mContainer[2] += m_3_[i]*voigtToMatrix(matrixBasis_[i]); - } + for(size_t i=0; i<3; i++) + { + mContainer[0] += m_1_[i]*voigtToMatrix(matrixBasis_[i]); + mContainer[1] += m_2_[i]*voigtToMatrix(matrixBasis_[i]); + mContainer[2] += m_3_[i]*voigtToMatrix(matrixBasis_[i]); + } - if(parameterSet_.get<bool>("print_corrector_matrices", false)) - { - std::cout << "--- plot corrector-Matrices M_alpha --- " << std::endl; - printmatrix(std::cout, mContainer[0], "Corrector-Matrix M_1", "--"); - printmatrix(std::cout, mContainer[1], "Corrector-Matrix M_2", "--"); - printmatrix(std::cout, mContainer[2], "Corrector-Matrix M_3", "--"); - } + if(parameterSet_.get<bool>("print_corrector_matrices", false)) + { + std::cout << "--- plot corrector-Matrices M_alpha --- " << std::endl; + printmatrix(std::cout, mContainer[0], "Corrector-Matrix M_1", "--"); + printmatrix(std::cout, mContainer[1], "Corrector-Matrix M_2", "--"); + printmatrix(std::cout, mContainer[2], "Corrector-Matrix M_3", "--"); + } - if(parameterSet_.get<bool>("writeCorrectorsVTK", false)) - this->writeCorrectorsVTK(parameterSet_.get<int>("gridLevel", 0)); + if(parameterSet_.get<bool>("writeCorrectorsVTK", false)) + this->writeCorrectorsVTK(parameterSet_.get<int>("gridLevel", 0)); - // log_ << "---------- OUTPUT ----------" << std::endl; - // log_ << " --------------------" << std::endl; - // log_ << "Corrector-Matrix M_1: \n" << mContainer[0] << std::endl; - // log_ << " --------------------" << std::endl; - // log_ << "Corrector-Matrix M_2: \n" << mContainer[1] << std::endl; - // log_ << " --------------------" << std::endl; - // log_ << "Corrector-Matrix M_3: \n" << mContainer[2] << std::endl; - // log_ << " --------------------" << std::endl; + // log_ << "---------- OUTPUT ----------" << std::endl; + // log_ << " --------------------" << std::endl; + // log_ << "Corrector-Matrix M_1: \n" << mContainer[0] << std::endl; + // log_ << " --------------------" << std::endl; + // log_ << "Corrector-Matrix M_2: \n" << mContainer[1] << std::endl; + // log_ << " --------------------" << std::endl; + // log_ << "Corrector-Matrix M_3: \n" << mContainer[2] << std::endl; + // log_ << " --------------------" << std::endl; - if(parameterSet_.get<bool>("write_IntegralMean", false)) + if(parameterSet_.get<bool>("write_IntegralMean", false)) + { + std::cout << "check integralMean phi_1: " << std::endl; + auto A = integralMean(phi_1_); + for(size_t i=0; i<3; i++) { - std::cout << "check integralMean phi_1: " << std::endl; - auto A = integralMean(phi_1_); - for(size_t i=0; i<3; i++) - { - std::cout << "Integral-Mean phi_1 : " << A[i] << std::endl; - } + std::cout << "Integral-Mean phi_1 : " << A[i] << std::endl; } - if(substract_integralMean) + } + if(substract_integralMean) + { + Dune::Timer integralMeanTimer; + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << " --- subtracting integralMean --- " << std::endl; + subtractIntegralMean(phi_1_); + subtractIntegralMean(phi_2_); + subtractIntegralMean(phi_3_); + subtractIntegralMean(x_1_); + subtractIntegralMean(x_2_); + subtractIntegralMean(x_3_); + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "substract integral mean took " << integralMeanTimer.elapsed() << " seconds " << std::endl; + ////////////////////////////////////////// + // Check Integral-mean again: + ////////////////////////////////////////// + if(parameterSet_.get<bool>("write_IntegralMean", false)) { - Dune::Timer integralMeanTimer; - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << " --- subtracting integralMean --- " << std::endl; - subtractIntegralMean(phi_1_); - subtractIntegralMean(phi_2_); - subtractIntegralMean(phi_3_); - subtractIntegralMean(x_1_); - subtractIntegralMean(x_2_); - subtractIntegralMean(x_3_); - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "substract integral mean took " << integralMeanTimer.elapsed() << " seconds " << std::endl; - ////////////////////////////////////////// - // Check Integral-mean again: - ////////////////////////////////////////// - if(parameterSet_.get<bool>("write_IntegralMean", false)) - { - auto A = integralMean(phi_1_); - for(size_t i=0; i<3; i++) - { - std::cout << "Integral-Mean phi_1 (Check again) : " << A[i] << std::endl; - } - } + auto A = integralMean(phi_1_); + for(size_t i=0; i<3; i++) + { + std::cout << "Integral-Mean phi_1 (Check again) : " << A[i] << std::endl; + } } - ///////////////////////////////////////////////////////// - // Write Solution (Corrector Coefficients) in Logs - ///////////////////////////////////////////////////////// - // if(parameterSet_.get<bool>("write_corrector_phi1", false)) - // { - // log_ << "\nSolution of Corrector problems:\n"; - // log_ << "\n Corrector_phi1:\n"; - // log_ << x_1_ << std::endl; - // } - // if(parameterSet_.get<bool>("write_corrector_phi2", false)) - // { - // log_ << "-----------------------------------------------------"; - // log_ << "\n Corrector_phi2:\n"; - // log_ << x_2_ << std::endl; - // } - // if(parameterSet_.get<bool>("write_corrector_phi3", false)) - // { - // log_ << "-----------------------------------------------------"; - // log_ << "\n Corrector_phi3:\n"; - // log_ << x_3_ << std::endl; - // } + } + ///////////////////////////////////////////////////////// + // Write Solution (Corrector Coefficients) in Logs + ///////////////////////////////////////////////////////// + // if(parameterSet_.get<bool>("write_corrector_phi1", false)) + // { + // log_ << "\nSolution of Corrector problems:\n"; + // log_ << "\n Corrector_phi1:\n"; + // log_ << x_1_ << std::endl; + // } + // if(parameterSet_.get<bool>("write_corrector_phi2", false)) + // { + // log_ << "-----------------------------------------------------"; + // log_ << "\n Corrector_phi2:\n"; + // log_ << x_2_ << std::endl; + // } + // if(parameterSet_.get<bool>("write_corrector_phi3", false)) + // { + // log_ << "-----------------------------------------------------"; + // log_ << "\n Corrector_phi3:\n"; + // log_ << x_3_ << std::endl; + // } } /** * @brief Write correctors as grid functions to VTK. - * + * * @param level GridLevel */ void writeCorrectorsVTK(const int level) { - std::string baseName = parameterSet_.get("baseName", "CellProblem-result"); - std::string vtkOutputName = parameterSet_.get("resultPath", "../../outputs") + "/" + baseName; - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "Write Correctors to VTK with Filename:" << vtkOutputName << std::endl; - - - int subsamplingRefinement = parameterSet_.get<int>("subsamplingRefinement", 2); - Dune::SubsamplingVTKWriter<typename Basis::GridView> vtkWriter(basis_.gridView(), Dune::refinementLevels(subsamplingRefinement)); - // Dune::VTKWriter<typename Basis::GridView> vtkWriter(basis_.gridView()); - - vtkWriter.addVertexData( - Dune::Functions::makeDiscreteGlobalBasisFunction<VectorRT>(basis_, phi_1_), - Dune::VTK::FieldInfo("Corrector phi_1 level"+ std::to_string(level) , Dune::VTK::FieldInfo::Type::vector, dim)); - vtkWriter.addVertexData( - Dune::Functions::makeDiscreteGlobalBasisFunction<VectorRT>(basis_, phi_2_), - Dune::VTK::FieldInfo("Corrector phi_2 level"+ std::to_string(level) , Dune::VTK::FieldInfo::Type::vector, dim)); - vtkWriter.addVertexData( - Dune::Functions::makeDiscreteGlobalBasisFunction<VectorRT>(basis_, phi_3_), - Dune::VTK::FieldInfo("Corrector phi_3 level"+ std::to_string(level) , Dune::VTK::FieldInfo::Type::vector, dim)); - vtkWriter.write(vtkOutputName + "Correctors-level"+ std::to_string(level)); - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "wrote Corrector-VTK data to file: " + vtkOutputName + "-level" + std::to_string(level) << std::endl; + std::string baseName = parameterSet_.get("baseName", "CellProblem-result"); + std::string vtkOutputName = parameterSet_.get("resultPath", "../../outputs") + "/" + baseName; + if (parameterSet_.get<bool>("printMicroOutput", false)) + std::cout << "Write Correctors to VTK with Filename:" << vtkOutputName << std::endl; + + + int subsamplingRefinement = parameterSet_.get<int>("subsamplingRefinement", 2); + Dune::SubsamplingVTKWriter<typename Basis::GridView> vtkWriter(basis_.gridView(), Dune::refinementLevels(subsamplingRefinement)); + // Dune::VTKWriter<typename Basis::GridView> vtkWriter(basis_.gridView()); + + vtkWriter.addVertexData( + Dune::Functions::makeDiscreteGlobalBasisFunction<VectorRT>(basis_, phi_1_), + Dune::VTK::FieldInfo("Corrector phi_1 level"+ std::to_string(level) , Dune::VTK::FieldInfo::Type::vector, dim)); + vtkWriter.addVertexData( + Dune::Functions::makeDiscreteGlobalBasisFunction<VectorRT>(basis_, phi_2_), + Dune::VTK::FieldInfo("Corrector phi_2 level"+ std::to_string(level) , Dune::VTK::FieldInfo::Type::vector, dim)); + vtkWriter.addVertexData( + Dune::Functions::makeDiscreteGlobalBasisFunction<VectorRT>(basis_, phi_3_), + Dune::VTK::FieldInfo("Corrector phi_3 level"+ std::to_string(level) , Dune::VTK::FieldInfo::Type::vector, dim)); + vtkWriter.write(vtkOutputName + "Correctors-level"+ std::to_string(level)); + if (parameterSet_.get<bool>("printMicroOutput ", false)) + std::cout << "wrote Corrector-VTK data to file: " + vtkOutputName + "-level" + std::to_string(level) << std::endl; } // ----------------------------------------------------------------- // --- Compute norms of the corrector functions: void computeNorms() { - computeL2Norm(); - computeL2SymGrad(); - std::cout<< "Frobenius-Norm of M1_: " << mContainer[0].frobenius_norm() << std::endl; - std::cout<< "Frobenius-Norm of M2_: " << mContainer[1].frobenius_norm() << std::endl; - std::cout<< "Frobenius-Norm of M3_: " << mContainer[2].frobenius_norm() << std::endl; + computeL2Norm(); + computeL2SymGrad(); + std::cout<< "Frobenius-Norm of M1_: " << mContainer[0].frobenius_norm() << std::endl; + std::cout<< "Frobenius-Norm of M2_: " << mContainer[1].frobenius_norm() << std::endl; + std::cout<< "Frobenius-Norm of M3_: " << mContainer[2].frobenius_norm() << std::endl; } void computeL2Norm() @@ -1195,23 +1227,23 @@ public: localfun_3.bind(element); auto geometry = element.geometry(); - const auto& localFiniteElement = localView.tree().child(0).finiteElement(); + const auto& localFiniteElement = localView.tree().child(0).finiteElement(); - int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1 ); + int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1 ); const auto& quad = Dune::QuadratureRules<double,dim>::rule(element.type(), orderQR); for (const auto& quadPoint : quad) { - const auto& quadPos = quadPoint.position(); - const auto integrationElement = geometry.integrationElement(quadPos); + const auto& quadPos = quadPoint.position(); + const auto integrationElement = geometry.integrationElement(quadPos); - auto scaledSymGrad1 = sym(crossSectionDirectionScaling(1.0/(material_->gamma_), localfun_1(quadPos))); - auto scaledSymGrad2 = sym(crossSectionDirectionScaling(1.0/(material_->gamma_), localfun_2(quadPos))); - auto scaledSymGrad3 = sym(crossSectionDirectionScaling(1.0/(material_->gamma_), localfun_3(quadPos))); + auto scaledSymGrad1 = sym(crossSectionDirectionScaling(1.0/(material_->gamma_), localfun_1(quadPos))); + auto scaledSymGrad2 = sym(crossSectionDirectionScaling(1.0/(material_->gamma_), localfun_2(quadPos))); + auto scaledSymGrad3 = sym(crossSectionDirectionScaling(1.0/(material_->gamma_), localfun_3(quadPos))); - error_1 += scalarProduct(scaledSymGrad1,scaledSymGrad1) * quadPoint.weight() * integrationElement; - error_2 += scalarProduct(scaledSymGrad2,scaledSymGrad2) * quadPoint.weight() * integrationElement; - error_3 += scalarProduct(scaledSymGrad3,scaledSymGrad3) * quadPoint.weight() * integrationElement; + error_1 += scalarProduct(scaledSymGrad1,scaledSymGrad1) * quadPoint.weight() * integrationElement; + error_2 += scalarProduct(scaledSymGrad2,scaledSymGrad2) * quadPoint.weight() * integrationElement; + error_3 += scalarProduct(scaledSymGrad3,scaledSymGrad3) * quadPoint.weight() * integrationElement; } } std::cout << "L2-Norm(Symmetric scaled gradient of Corrector phi_1): " << sqrt(error_1) << std::endl; @@ -1221,10 +1253,10 @@ public: } /** - * @brief Test: Check orthogonality relation (75) in + * @brief Test: Check orthogonality relation (75) in * [Böhnlein,Neukamm,Padilla-Garza,Sander - A homogenized bending theory for prestrained plates]. - * - * @return auto + * + * @return auto */ auto check_Orthogonality() { @@ -1242,20 +1274,20 @@ public: const std::array<decltype(localfun_1)*,3> phiDerContainer = {&localfun_1 , &localfun_2 , &localfun_3 }; auto localIndicatorFunction = material_->getLocalIndicatorFunction(); - + for(int a=0; a<3; a++) - for(int b=0; b<3; b++) - { - double energy = 0.0; + for(int b=0; b<3; b++) + { + double energy = 0.0; - auto DerPhi1 = *phiDerContainer[a]; - auto DerPhi2 = *phiDerContainer[b]; - - auto matrixFieldGGVF = Dune::Functions::makeGridViewFunction(x3MatrixBasisContainer_[a], basis_.gridView()); - auto matrixFieldG = localFunction(matrixFieldGGVF); + auto DerPhi1 = *phiDerContainer[a]; + auto DerPhi2 = *phiDerContainer[b]; - for (const auto& e : elements(basis_.gridView())) - { + auto matrixFieldGGVF = Dune::Functions::makeGridViewFunction(x3MatrixBasisContainer_[a], basis_.gridView()); + auto matrixFieldG = localFunction(matrixFieldGGVF); + + for (const auto& e : elements(basis_.gridView())) + { localView.bind(e); matrixFieldG.bind(e); DerPhi1.bind(e); @@ -1271,33 +1303,33 @@ public: const auto& quad = Dune::QuadratureRules<double, dim>::rule(e.type(), orderQR); - for (const auto& quadPoint : quad) + for (const auto& quadPoint : quad) { - const auto& quadPos = quadPoint.position(); - const double integrationElement = geometry.integrationElement(quadPos); - - auto Chi = sym(crossSectionDirectionScaling(1.0/(material_->gamma_), DerPhi2(quadPos))) + mContainer[b]; + const auto& quadPos = quadPoint.position(); + const double integrationElement = geometry.integrationElement(quadPos); + + auto Chi = sym(crossSectionDirectionScaling(1.0/(material_->gamma_), DerPhi2(quadPos))) + mContainer[b]; - const auto strain1 = symVoigt(crossSectionDirectionScaling(1.0/(material_->gamma_), DerPhi1(quadPos))); - - auto G = matrixFieldG(quadPos); + const auto strain1 = symVoigt(crossSectionDirectionScaling(1.0/(material_->gamma_), DerPhi1(quadPos))); - auto tmp = matrixToVoigt(G + mContainer[a]) + strain1; + auto G = matrixFieldG(quadPos); - double energyDensity= voigtScalarProduct(material_->applyElasticityTensor(tmp,localIndicatorFunction(quadPos)),symVoigt(Chi)); + auto tmp = matrixToVoigt(G + mContainer[a]) + strain1; - elementEnergy += energyDensity * quadPoint.weight() * integrationElement; + double energyDensity= voigtScalarProduct(material_->applyElasticityTensor(tmp,localIndicatorFunction(quadPos)),symVoigt(Chi)); + + elementEnergy += energyDensity * quadPoint.weight() * integrationElement; } energy += elementEnergy; - } - if(parameterSet_.get<bool>("print_debug", false)) - std::cout << "check_Orthogonality:" << "("<< a <<"," << b << "): " << energy << std::endl; + } + if(parameterSet_.get<bool>("print_debug", false)) + std::cout << "check_Orthogonality:" << "("<< a <<"," << b << "): " << energy << std::endl; - if(energy > 1e-1) - std::cout << "WARNING: check_Orthogonality failed! apparently orthogonality (75) not satisfied on discrete level" << std::endl; + if(energy > 1e-1) + std::cout << "WARNING: check_Orthogonality failed! apparently orthogonality (75) not satisfied on discrete level" << std::endl; - } + } std::cout << "Time required for orthogonality check: " << orthogonalityTimer.elapsed() << std::endl; return 0; } @@ -1310,35 +1342,42 @@ public: auto localView = basis_.localView(); + bool symmetryFlag = false; + for (const auto& element : elements(basis_.gridView())) { localView.bind(element); const auto localPhiOffset = localView.size(); for(size_t i=0; i<localPhiOffset; i++) - for(size_t j=0; j<localPhiOffset; j++ ) - { + for(size_t j=0; j<localPhiOffset; j++ ) + { auto row = localView.index(i); auto col = localView.index(j); if(abs( stiffnessMatrix_[row][col] - stiffnessMatrix_[col][row]) > 1e-12 ) - std::cout << "STIFFNESS MATRIX NOT SYMMETRIC!!!" << std::endl; - } + symmetryFlag = true; + // std::cout << "STIFFNESS MATRIX NOT SYMMETRIC!!!" << std::endl; + } for(size_t i=0; i<localPhiOffset; i++) - for(size_t m=0; m<3; m++) - { + for(size_t m=0; m<3; m++) + { auto row = localView.index(i); if(abs( stiffnessMatrix_[row][phiOffset_+m] - stiffnessMatrix_[phiOffset_+m][row]) > 1e-12 ) - std::cout << "STIFFNESS MATRIX NOT SYMMETRIC!!!" << std::endl; + symmetryFlag = true; + // std::cout << "STIFFNESS MATRIX NOT SYMMETRIC!!!" << std::endl; - } + } for(size_t m=0; m<3; m++ ) - for(size_t n=0; n<3; n++ ) - { + for(size_t n=0; n<3; n++ ) + { if(abs(stiffnessMatrix_[phiOffset_+m][phiOffset_+n] - stiffnessMatrix_[phiOffset_+n][phiOffset_+m]) > 1e-12 ) - std::cout << "STIFFNESS MATRIX NOT SYMMETRIC!!!" << std::endl; - } + symmetryFlag = true; + // std::cout << "STIFFNESS MATRIX NOT SYMMETRIC!!!" << std::endl; + } } - std::cout << "--- Symmetry test passed ---" << std::endl; + + if(symmetryFlag) + std::cout << "STIFFNESS MATRIX NOT SYMMETRIC!!!" << std::endl; } diff --git a/dune/microstructure/EffectiveQuantitiesComputer.hh b/dune/microstructure/EffectiveQuantitiesComputer.hh index d6476cceaa5b81290346addaa53e14b0f89f8d02..99b60e2e76c4e707f8c996663b9ed36c2742b910 100644 --- a/dune/microstructure/EffectiveQuantitiesComputer.hh +++ b/dune/microstructure/EffectiveQuantitiesComputer.hh @@ -2,7 +2,7 @@ #define DUNE_MICROSTRUCTURE_EFFECTIVEQUANTITIESCOMPUTER_HH #include <dune/common/parametertree.hh> -#include <dune/istl/eigenvalue/test/matrixinfo.hh> // TEST: compute condition Number +#include <dune/istl/eigenvalue/test/matrixinfo.hh> // TEST: compute condition Number #include <dune/istl/io.hh> #include <dune/istl/matrix.hh> #include <dune/microstructure/matrix_operations.hh> @@ -20,248 +20,248 @@ template <class Basis, class Material> class EffectiveQuantitiesComputer { public: - static const int dimworld = 3; - static const int dim = Basis::GridView::dimension; - using Domain = typename CorrectorComputer<Basis,Material>::Domain; - using VectorRT = typename CorrectorComputer<Basis,Material>::VectorRT; - using MatrixRT = typename CorrectorComputer<Basis,Material>::MatrixRT; - using Func2Tensor = typename CorrectorComputer<Basis,Material>::Func2Tensor; - using FuncVector = typename CorrectorComputer<Basis,Material>::FuncVector; - using VectorCT = typename CorrectorComputer<Basis,Material>::VectorCT; - using Func2int = std::function< int(const Domain&) >; - using MatrixPhase = std::function< MatrixRT(const int&) >; + static const int dimworld = 3; + static const int dim = Basis::GridView::dimension; + using Domain = typename CorrectorComputer<Basis,Material>::Domain; + using VectorRT = typename CorrectorComputer<Basis,Material>::VectorRT; + using MatrixRT = typename CorrectorComputer<Basis,Material>::MatrixRT; + using Func2Tensor = typename CorrectorComputer<Basis,Material>::Func2Tensor; + using FuncVector = typename CorrectorComputer<Basis,Material>::FuncVector; + using VectorCT = typename CorrectorComputer<Basis,Material>::VectorCT; + using Func2int = std::function< int (const Domain&) >; + using MatrixPhase = std::function< MatrixRT(const int&) >; protected: - // CorrectorComputer<Basis,Material>& correctorComputer_; - std::shared_ptr<CorrectorComputer<Basis,Material>> correctorComputer_; - // const Material& material_; //Get this from correctorComputer_ this is now an std::shared_ptr. + // CorrectorComputer<Basis,Material>& correctorComputer_; + std::shared_ptr<CorrectorComputer<Basis,Material> > correctorComputer_; + // const Material& material_; //Get this from correctorComputer_ this is now an std::shared_ptr. public: - MatrixRT Qeff_; // Effective moduli COEFFICIENTS - VectorRT Bhat_; - VectorRT Beff_; // Effective prestrain COEFFICIENTS - - - /////////////////////////////// - // constructor - /////////////////////////////// - // EffectiveQuantitiesComputer(CorrectorComputer<Basis,Material>& correctorComputer, - // const Material& material) - // : correctorComputer_(correctorComputer), - // material_(material) - // {} - // EffectiveQuantitiesComputer(CorrectorComputer<Basis,Material>& correctorComputer) - // : correctorComputer_(correctorComputer) - // {} - EffectiveQuantitiesComputer(std::shared_ptr<CorrectorComputer<Basis,Material>> correctorComputer) - : correctorComputer_(correctorComputer) - {} + MatrixRT Qeff_; // Effective moduli COEFFICIENTS + VectorRT Bhat_; + VectorRT Beff_; // Effective prestrain COEFFICIENTS - /////////////////////////////// - // Getter - /////////////////////////////// - // CorrectorComputer<Basis,Material> getCorrectorComputer(){return correctorComputer_;} - CorrectorComputer<Basis,Material> getCorrectorComputer(){return *correctorComputer_;} + /////////////////////////////// + // constructor + /////////////////////////////// + // EffectiveQuantitiesComputer(CorrectorComputer<Basis,Material>& correctorComputer, + // const Material& material) + // : correctorComputer_(correctorComputer), + // material_(material) + // {} + // EffectiveQuantitiesComputer(CorrectorComputer<Basis,Material>& correctorComputer) + // : correctorComputer_(correctorComputer) + // {} + EffectiveQuantitiesComputer(std::shared_ptr<CorrectorComputer<Basis,Material> > correctorComputer) + : correctorComputer_(correctorComputer) + {} - const shared_ptr<Basis> getBasis() {return *correctorComputer_.getBasis();} + /////////////////////////////// + // Getter + /////////////////////////////// + // CorrectorComputer<Basis,Material> getCorrectorComputer(){return correctorComputer_;} + CorrectorComputer<Basis,Material> getCorrectorComputer(){return *correctorComputer_;} - auto getQeff(){return Qeff_;} - auto getBeff(){return Beff_;} + const shared_ptr<Basis> getBasis() {return *correctorComputer_.getBasis();} - void updateCorrectorComputer(std::shared_ptr<CorrectorComputer<Basis,Material>> correctorComputer) - { - correctorComputer_ = correctorComputer; - } + auto getQeff(){return Qeff_;} + auto getBeff(){return Beff_;} + + + void updateCorrectorComputer(std::shared_ptr<CorrectorComputer<Basis,Material> > correctorComputer) + { + correctorComputer_ = correctorComputer; + } // ----------------------------------------------------------------- // --- Compute Effective Quantities - void computeEffectiveQuantities() - { - Dune::Timer effectiveQuantitiesTimer; - Dune::ParameterTree parameterSet = correctorComputer_->getParameterSet(); - - if (parameterSet.get<bool>("printMicroOutput ", false)) - std::cout << "starting effective quantities computation..." << std::endl; - - - auto MContainer = correctorComputer_->getMcontainer(); - auto MatrixBasisContainer = correctorComputer_->getMatrixBasiscontainer(); - auto x3MatrixBasisContainer = correctorComputer_->getx3MatrixBasiscontainer(); - - auto gamma = correctorComputer_->getGamma(); - auto basis = *correctorComputer_->getBasis(); - - - shared_ptr<VectorCT> phiBasis[3] = {correctorComputer_->getCorr_phi1(), - correctorComputer_->getCorr_phi2(), - correctorComputer_->getCorr_phi3() - }; - - auto localIndicatorFunction = (correctorComputer_->material_)->getLocalIndicatorFunction(); - - Qeff_ = 0 ; - Bhat_ = 0; - - for(size_t a=0; a < 3; a++) - for(size_t b=0; b < 3; b++) - { - double energy = 0.0; - double prestrain = 0.0; - auto localView = basis.localView(); + void computeEffectiveQuantities() + { + Dune::Timer effectiveQuantitiesTimer; + Dune::ParameterTree parameterSet = correctorComputer_->getParameterSet(); - auto GVFunc_a = derivative(Dune::Functions::makeDiscreteGlobalBasisFunction<VectorRT>(basis,*phiBasis[a])); - auto localfun_a = localFunction(GVFunc_a); + if (parameterSet.get<bool>("printMicroOutput ", false)) + std::cout << "starting effective quantities computation..." << std::endl; - auto matrixFieldG1GVF = Dune::Functions::makeGridViewFunction(x3MatrixBasisContainer[a], basis.gridView()); - auto matrixFieldG1 = localFunction(matrixFieldG1GVF); - auto matrixFieldG2GVF = Dune::Functions::makeGridViewFunction(x3MatrixBasisContainer[b], basis.gridView()); - auto matrixFieldG2 = localFunction(matrixFieldG2GVF); - for (const auto& element : elements(basis.gridView())) - { - localView.bind(element); - matrixFieldG1.bind(element); - matrixFieldG2.bind(element); - localfun_a.bind(element); - - localIndicatorFunction.bind(element); - - double elementEnergy = 0.0; - double elementPrestrain = 0.0; - - auto geometry = element.geometry(); - const auto& localFiniteElement = localView.tree().child(0).finiteElement(); - - int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1); - - const auto& quad = Dune::QuadratureRules<double, dim>::rule(element.type(), orderQR); - - for (const auto& quadPoint : quad) - { - const auto& quadPos = quadPoint.position(); - const double integrationElement = geometry.integrationElement(quadPos); - - auto Chi1 = sym(crossSectionDirectionScaling(1.0/gamma, localfun_a(quadPos))) + MContainer[a]; - - auto G1 = matrixFieldG1(quadPos); - auto G2 = matrixFieldG2(quadPos); - - auto X1 = matrixToVoigt(G1 + Chi1); - - double energyDensity= voigtScalarProduct((correctorComputer_->material_)->applyElasticityTensor(X1,localIndicatorFunction(quadPos)), matrixToVoigt(sym(G2))); - - elementEnergy += energyDensity * quadPoint.weight() * integrationElement; // quad[quadPoint].weight() ??? - if (b==0) - { - auto prestrainPhaseValue = (correctorComputer_->material_)->prestrain(localIndicatorFunction(quadPos),element.geometry().global(quadPos)); - auto value = voigtScalarProduct((correctorComputer_->material_)->applyElasticityTensor(X1,localIndicatorFunction(quadPos)),matrixToVoigt(sym(prestrainPhaseValue))); - - elementPrestrain += value * quadPoint.weight() * integrationElement; - } - } - energy += elementEnergy; - prestrain += elementPrestrain; - - } - Qeff_[a][b] = energy; - if (b==0) - Bhat_[a] = prestrain; - } - if(parameterSet.get<bool>("print_debug", false)) - { - printmatrix(std::cout, Qeff_, "Qeff_", "--"); - printvector(std::cout, Bhat_, "Bhat_", "--"); - } + auto MContainer = correctorComputer_->getMcontainer(); + auto MatrixBasisContainer = correctorComputer_->getMatrixBasiscontainer(); + auto x3MatrixBasisContainer = correctorComputer_->getx3MatrixBasiscontainer(); - /////////////////////////////// - // Compute effective Prestrain B_eff (by solving linear system) - ////////////////////////////// - - // std::cout << "------- Information about Q matrix -----" << std::endl; // TODO - // MatrixInfo<MatrixRT> matrixInfo(Qeff_,true,2,1); - // std::cout << "----------------------------------------" << std::endl; - Qeff_.solve(Beff_,Bhat_); - if(parameterSet.get<bool>("print_debug", false)) - printvector(std::cout, Beff_, "Beff_", "--"); - - //LOG-Output - // auto& log = *(correctorComputer_.getLog()); - // log << "--- Effective moduli --- " << std::endl; - // log << "Qeff_: \n" << Qeff_ << std::endl; - // log << "------------------------ " << std::endl; - // log << "--- Prestrain Output --- " << std::endl; - // log << "Bhat_: " << Bhat_ << std::endl; - // log << "Beff_: " << Beff_ << " (Effective Prestrain)" << std::endl; - // log << "------------------------ " << std::endl; - - // std::cout << std::setprecision(std::numeric_limits<float_50>::digits10) << higherPrecEnergy << std::endl; - if (parameterSet.get<bool>("printMicroOutput ", false)) - std::cout << "Time required to solve for effective quantities: " << effectiveQuantitiesTimer.elapsed() << std::endl; - return ; - } + auto gamma = correctorComputer_->getGamma(); + auto basis = *correctorComputer_->getBasis(); - // ----------------------------------------------------------------- - // --- write Data to .Txt-File for Matlab / Optimization-Code - void writeEffectiveQuantitiesToTxt(std::string outputPath) - { - std::cout << "write effective quantities as .txt files to output folder..." << std::endl; - writeMatrixToMatlab(Qeff_, outputPath + "/QMatrix.txt"); - // write effective Prestrain in Matrix for Output - Dune::FieldMatrix<double,1,3> BeffMat; - BeffMat[0] = Beff_; - writeMatrixToMatlab(BeffMat, outputPath + "/BMatrix.txt"); - return; - } + shared_ptr<VectorCT> phiBasis[3] = {correctorComputer_->getCorr_phi1(), + correctorComputer_->getCorr_phi2(), + correctorComputer_->getCorr_phi3() + }; - template<class MatrixFunction> - double energySP(const MatrixFunction& matrixFieldFuncA, - const MatrixFunction& matrixFieldFuncB) - { + auto localIndicatorFunction = (correctorComputer_->material_)->getLocalIndicatorFunction(); + + Qeff_ = 0 ; + Bhat_ = 0; + + for(size_t a=0; a < 3; a++) + for(size_t b=0; b < 3; b++) + { double energy = 0.0; - auto mu_ = *correctorComputer_->getMu(); - auto lambda_ = *correctorComputer_->getLambda(); - auto gamma = correctorComputer_->getGamma(); - auto basis = *correctorComputer_->getBasis(); + double prestrain = 0.0; auto localView = basis.localView(); - auto localIndicatorFunction = (correctorComputer_->material_)->getLocalIndicatorFunction(); + auto GVFunc_a = derivative(Dune::Functions::makeDiscreteGlobalBasisFunction<VectorRT>(basis,*phiBasis[a])); + auto localfun_a = localFunction(GVFunc_a); - auto matrixFieldAGVF = Dune::Functions::makeGridViewFunction(matrixFieldFuncA, basis.gridView()); - auto matrixFieldA = localFunction(matrixFieldAGVF); - auto matrixFieldBGVF = Dune::Functions::makeGridViewFunction(matrixFieldFuncB, basis.gridView()); - auto matrixFieldB = localFunction(matrixFieldBGVF); + auto matrixFieldG1GVF = Dune::Functions::makeGridViewFunction(x3MatrixBasisContainer[a], basis.gridView()); + auto matrixFieldG1 = localFunction(matrixFieldG1GVF); + auto matrixFieldG2GVF = Dune::Functions::makeGridViewFunction(x3MatrixBasisContainer[b], basis.gridView()); + auto matrixFieldG2 = localFunction(matrixFieldG2GVF); - for (const auto& e : elements(basis.gridView())) + for (const auto& element : elements(basis.gridView())) { - localView.bind(e); - matrixFieldA.bind(e); - matrixFieldB.bind(e); - localIndicatorFunction.bind(e); + localView.bind(element); + matrixFieldG1.bind(element); + matrixFieldG2.bind(element); + localfun_a.bind(element); - double elementEnergy = 0.0; + localIndicatorFunction.bind(element); - auto geometry = e.geometry(); - const auto& localFiniteElement = localView.tree().child(0).finiteElement(); + double elementEnergy = 0.0; + double elementPrestrain = 0.0; - int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1); - const auto& quad = Dune::QuadratureRules<double, dim>::rule(e.type(), orderQR); - for (const auto& quadPoint : quad) - { - const auto& quadPos = quadPoint.position(); - const double integrationElement = geometry.integrationElement(quadPos); + auto geometry = element.geometry(); + const auto& localFiniteElement = localView.tree().child(0).finiteElement(); + + int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1); - double energyDensity= scalarProduct((correctorComputer_->material_)->applyElasticityTensor(matrixFieldA(quadPos),localIndicatorFunction(quadPos)),sym(matrixFieldB(quadPos))); + const auto& quad = Dune::QuadratureRules<double, dim>::rule(element.type(), orderQR); - elementEnergy += energyDensity * quadPoint.weight() * integrationElement; + for (const auto& quadPoint : quad) + { + const auto& quadPos = quadPoint.position(); + const double integrationElement = geometry.integrationElement(quadPos); + + auto Chi1 = sym(crossSectionDirectionScaling(1.0/gamma, localfun_a(quadPos))) + MContainer[a]; + + auto G1 = matrixFieldG1(quadPos); + auto G2 = matrixFieldG2(quadPos); + + auto X1 = matrixToVoigt(G1 + Chi1); + + double energyDensity= voigtScalarProduct((correctorComputer_->material_)->applyElasticityTensor(X1,localIndicatorFunction(quadPos)), matrixToVoigt(sym(G2))); + + elementEnergy += energyDensity * quadPoint.weight() * integrationElement; // quad[quadPoint].weight() ??? + if (b==0) + { + auto prestrainPhaseValue = (correctorComputer_->material_)->prestrain(localIndicatorFunction(quadPos),element.geometry().global(quadPos)); + auto value = voigtScalarProduct((correctorComputer_->material_)->applyElasticityTensor(X1,localIndicatorFunction(quadPos)),matrixToVoigt(sym(prestrainPhaseValue))); + + elementPrestrain += value * quadPoint.weight() * integrationElement; } - energy += elementEnergy; + } + energy += elementEnergy; + prestrain += elementPrestrain; + } - return energy; + Qeff_[a][b] = energy; + if (b==0) + Bhat_[a] = prestrain; + } + if(parameterSet.get<bool>("print_debug", false)) + { + printmatrix(std::cout, Qeff_, "Qeff_", "--"); + printvector(std::cout, Bhat_, "Bhat_", "--"); + } + + /////////////////////////////// + // Compute effective Prestrain B_eff (by solving linear system) + ////////////////////////////// + + // std::cout << "------- Information about Q matrix -----" << std::endl; // TODO + // MatrixInfo<MatrixRT> matrixInfo(Qeff_,true,2,1); + // std::cout << "----------------------------------------" << std::endl; + Qeff_.solve(Beff_,Bhat_); + if(parameterSet.get<bool>("print_debug", false)) + printvector(std::cout, Beff_, "Beff_", "--"); + + //LOG-Output + // auto& log = *(correctorComputer_.getLog()); + // log << "--- Effective moduli --- " << std::endl; + // log << "Qeff_: \n" << Qeff_ << std::endl; + // log << "------------------------ " << std::endl; + // log << "--- Prestrain Output --- " << std::endl; + // log << "Bhat_: " << Bhat_ << std::endl; + // log << "Beff_: " << Beff_ << " (Effective Prestrain)" << std::endl; + // log << "------------------------ " << std::endl; + + // std::cout << std::setprecision(std::numeric_limits<float_50>::digits10) << higherPrecEnergy << std::endl; + if (parameterSet.get<bool>("printMicroOutput ", false)) + std::cout << "Time required to solve for effective quantities: " << effectiveQuantitiesTimer.elapsed() << std::endl; + return ; + } + + + // ----------------------------------------------------------------- + // --- write Data to .Txt-File for Matlab / Optimization-Code + void writeEffectiveQuantitiesToTxt(std::string outputPath) + { + std::cout << "write effective quantities as .txt files to output folder..." << std::endl; + writeMatrixToMatlab(Qeff_, outputPath + "/QMatrix.txt"); + // write effective Prestrain in Matrix for Output + Dune::FieldMatrix<double,1,3> BeffMat; + BeffMat[0] = Beff_; + writeMatrixToMatlab(BeffMat, outputPath + "/BMatrix.txt"); + return; + } + + template<class MatrixFunction> + double energySP(const MatrixFunction& matrixFieldFuncA, + const MatrixFunction& matrixFieldFuncB) + { + double energy = 0.0; + auto mu_ = *correctorComputer_->getMu(); + auto lambda_ = *correctorComputer_->getLambda(); + auto gamma = correctorComputer_->getGamma(); + auto basis = *correctorComputer_->getBasis(); + auto localView = basis.localView(); + + auto localIndicatorFunction = (correctorComputer_->material_)->getLocalIndicatorFunction(); + + auto matrixFieldAGVF = Dune::Functions::makeGridViewFunction(matrixFieldFuncA, basis.gridView()); + auto matrixFieldA = localFunction(matrixFieldAGVF); + auto matrixFieldBGVF = Dune::Functions::makeGridViewFunction(matrixFieldFuncB, basis.gridView()); + auto matrixFieldB = localFunction(matrixFieldBGVF); + + for (const auto& e : elements(basis.gridView())) + { + localView.bind(e); + matrixFieldA.bind(e); + matrixFieldB.bind(e); + localIndicatorFunction.bind(e); + + double elementEnergy = 0.0; + + auto geometry = e.geometry(); + const auto& localFiniteElement = localView.tree().child(0).finiteElement(); + + int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1); + const auto& quad = Dune::QuadratureRules<double, dim>::rule(e.type(), orderQR); + for (const auto& quadPoint : quad) + { + const auto& quadPos = quadPoint.position(); + const double integrationElement = geometry.integrationElement(quadPos); + + double energyDensity= scalarProduct((correctorComputer_->material_)->applyElasticityTensor(matrixFieldA(quadPos),localIndicatorFunction(quadPos)),sym(matrixFieldB(quadPos))); + + elementEnergy += energyDensity * quadPoint.weight() * integrationElement; + } + energy += elementEnergy; } + return energy; + } }; // end class diff --git a/dune/microstructure/bendingisometryaddons.hh b/dune/microstructure/bendingisometryaddons.hh new file mode 100644 index 0000000000000000000000000000000000000000..06a798ad4d031ecc203d331b485adef4e02e048c --- /dev/null +++ b/dune/microstructure/bendingisometryaddons.hh @@ -0,0 +1,409 @@ +#ifndef DUNE_MICROSTRUCTURE_BENDINGISOMETRYADDONS_HH +#define DUNE_MICROSTRUCTURE_BENDINGISOMETRYADDONS_HH + +/** + This serves as an interface for passing into an interpolation method + of a hermite basis. + */ +template<class K,class ValueGridViewFunction,class DerivativeGridViewFunction> +class GlobalIsometryFunction +{ +public: + GlobalIsometryFunction(ValueGridViewFunction& valueGVF, + DerivativeGridViewFunction& derGVF) + : valueGridViewFunction_(valueGVF), + derivativeGridViewFunction_(derGVF) + {} + + Dune::FieldVector<K,3> operator() (const Dune::FieldVector<K,2>& x) const + { + return valueGridViewFunction_(x); + } + + /** + * \brief Obtain derivative function + */ + friend auto derivative(const GlobalIsometryFunction& p) + { + return p.derivativeGridViewFunction_; + } + + ValueGridViewFunction& valueGridViewFunction_; + DerivativeGridViewFunction& derivativeGridViewFunction_; +}; + +/** + * @brief Test that checks the isometry constraint at the nodes of the Triangulation + */ +template<class LocalDiscreteKirchhoffFunction, class GridView> +auto nodewiseIsometryTest(LocalDiscreteKirchhoffFunction& deformationFunction, + GridView& gridView) +{ + for (const auto &element : elements(gridView)) + { + auto geometry = element.geometry(); + deformationFunction.bind(element); + // evaluate at nodes: + for (int i=0; i<geometry.corners(); i++) + { + auto rot = deformationFunction.evaluateDerivative(geometry.local(geometry.corner(i))); + Dune::FieldMatrix<double,2,2> I = Dune::ScaledIdentityMatrix<double,2>(1); + auto diff = (rot.transposed()*rot) - I; + // std::cout << "diff.frobenius_norm():" << diff.frobenius_norm() << std::endl; + if(diff.frobenius_norm()>1e-8) + DUNE_THROW(Dune::Exception, "Nodewise Isometry Test failed! with error"<< diff.frobenius_norm()); + } + } + std::cout << "nodewiseIsometryTest passed." << std::endl; +} + +/** + * @brief Test that checks the isometry constraint at the nodes of the Triangulation + * - For a differentiable gridview function. + */ +template<class DeformationFunction> +auto nodewiseIsometryTest(DeformationFunction& deformationGridViewFunction) +{ + auto localDeformation = localFunction(deformationGridViewFunction); + auto localRotation = derivative(localDeformation); + auto gridView = deformationGridViewFunction.basis().gridView(); + for (const auto &element : elements(gridView)) + { + auto geometry = element.geometry(); + localDeformation.bind(element); + localRotation.bind(element); + + // evaluate at nodes: + for (int i=0; i<geometry.corners(); i++) + { + auto rot = localRotation(geometry.local(geometry.corner(i))); + auto product = rot.transposed()*rot; + + Dune::FieldMatrix<double,2,2> I = Dune::ScaledIdentityMatrix<double,2>(1); + auto diff = (rot.transposed()*rot) - I; + + if(diff.frobenius_norm()>1e-8) + DUNE_THROW(Dune::Exception, "Nodewise Isometry Test failed! with error"<< diff.frobenius_norm()); + } + } + std::cout << "Node-wise IsometryTest passed." << std::endl; +} + + + + +/** + * @brief Compute L2/L1-Isometry Error: | (\nabla u)^T (\nabla u) - I | over the grid. + */ +template<class LocalDiscreteKirchhoffFunction, class GridView> +auto isometryError(LocalDiscreteKirchhoffFunction& deformationFunction, + GridView& gridView) +{ + std::cout << "measuring isometry error ... " << std::endl; + + int quadOrder = 3; + constexpr static int gridDim = LocalDiscreteKirchhoffFunction::gridDim; + + // The error to be compute + double isometryL2Error = 0; + double isometryL1Error = 0; + + Dune::FieldMatrix<double,2,2> IdentityMatrix = Dune::ScaledIdentityMatrix<double,2>(1); + for (auto&& element : elements(gridView)) + { + deformationFunction.bind(element); + + const auto &quadRule = Dune::QuadratureRules<double, gridDim>::rule(element.type(), quadOrder); + + for (auto quadPoint : quadRule) + { + auto quadPos = quadPoint.position(); + const auto integrationElement = element.geometry().integrationElement(quadPos); + const auto weight = quadPoint.weight(); + + auto numDir = deformationFunction.evaluateDerivative(quadPos); + auto isoValue = numDir.transposed() * numDir; + // printmatrix(std::cout, isoValue , "isoValue: ", "--"); + + // integrate error + isometryL2Error += (isoValue - IdentityMatrix).frobenius_norm2() * weight * integrationElement; + isometryL1Error += (isoValue - IdentityMatrix).frobenius_norm() * weight * integrationElement; + } + } + std::cout << std::setprecision(6); + std::cout << "L2-Isometry-error: " << std::sqrt(isometryL2Error) + << " " + << "L1-Isometry-error: " << isometryL1Error << std::endl; + + std::vector<double> errorVector = {isometryL1Error,isometryL2Error}; + + return errorVector; +} + + + + +/** + * @brief Measure L2/H1-Error + * between discrete deformation and analytical reference solution. + */ +template<class LocalDiscreteKirchhoffFunction, class GridView> +auto measureAnalyticalError(LocalDiscreteKirchhoffFunction& deformationFunction, + GridView& gridView, + Python::Module pyModule) +{ + std::cout << "measuring analytical error ... " << std::endl; + + // Get reference solution + // auto referenceSolution = Python::makeDifferentiableFunction<Dune::FieldVector<double,3>(Dune::FieldVector<double,2>)>(pyModule.get("displacement"), pyModule.get("displacementGradient")); + // auto referenceDerivative = derivative(referenceSolution); + auto referenceSolution = Python::makeDifferentiableFunction<Dune::FieldVector<double,3>(Dune::FieldVector<double,2>)>(pyModule.get("deformation"), pyModule.get("deformationGradient")); + auto referenceDerivative = derivative(referenceSolution); + + // Trapezoidal-rule: + // std::vector<Dune::QuadraturePoint<double,2>> quadRule = { {{0.0,0.0}, 1.0/6.0}, {{1.0,0.0}, 1.0/6.0}, {{0.0,1.0}, 1.0/6.0} }; + int quadOrder = 4; + constexpr static int gridDim = LocalDiscreteKirchhoffFunction::gridDim; + + // The error to be computed + double l2ErrorSquared = 0; + double h1ErrorSquared = 0; + + + //TEST + // QuadratureRuleKey quadKey(2,6); + + for (auto&& element : elements(gridView)) + { + deformationFunction.bind(element); + + const auto &quadRule = Dune::QuadratureRules<double, gridDim>::rule(element.type(), quadOrder); + + for (auto quadPoint : quadRule) + { + auto quadPos = quadPoint.position(); + const auto integrationElement = element.geometry().integrationElement(quadPos); + const auto weight = quadPoint.weight(); + + auto refValue = referenceSolution(element.geometry().global(quadPos)); + auto numValue = deformationFunction.evaluate(quadPos).globalCoordinates(); + + auto numDir = deformationFunction.evaluateDerivative(quadPos); + auto refDir = referenceDerivative(element.geometry().global(quadPos)); + auto diff = numDir - refDir; + + // integrate error + l2ErrorSquared += (numValue - refValue)* (numValue - refValue) * weight * integrationElement; + h1ErrorSquared += diff.frobenius_norm2() * weight * integrationElement; + } + } + std::cout << "elements: " << gridView.size(0) + << " " + << "L2-error: " << std::sqrt(l2ErrorSquared) + << " "; + std::cout << "H1-error: " << std::sqrt(h1ErrorSquared) << std::endl; + + std::vector<double> errorVector = {std::sqrt(l2ErrorSquared), std::sqrt(h1ErrorSquared)}; + + return errorVector; +} + +// DEBUG: conversion of coefficient vectors (back & forth) +template<class Coefficients, class DeformationBasis, class CoefficientBasis, class IsometryCoefficients> +void coefficientConversionTest(const Coefficients& coefficients, + const DeformationBasis& deformationBasis, + const CoefficientBasis& coefficientBasis) +{ + Coefficients x_convert = coefficients; + IsometryCoefficients isometryCoefficientsTMP(coefficientBasis.size()); + Dune::GFE::Impl::vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x_convert,isometryCoefficientsTMP); + Dune::GFE::Impl::isometryToVectorCoefficientMap(deformationBasis,coefficientBasis,x_convert,isometryCoefficientsTMP); + //Check difference + for(int i=0; i<coefficients.size(); i++) + { + if((coefficients[i]-x_convert[i]).two_norm() > 1e-4) + std::cout << "Coefficient conversion failed! with x[i]-x_convert[i]:" << coefficients[i]-x_convert[i] << std::endl; + } +} + + + + +// template<class LocalDiscreteKirchhoffFunction, class NormalBasis> +// auto computeDiscreteSurfaceNormal(LocalDiscreteKirchhoffFunction& deformationFunction, +// const NormalBasis& normalBasis) +// { +// std::vector<Dune::FieldVector<double,3> > discreteNormalVectorCoefficients(normalBasis.size()); + +// auto localView = normalBasis.localView(); +// for (auto&& element : elements(normalBasis.gridView())) +// { +// auto geometry = element.geometry(); + +// localView.bind(element); +// const auto nSf = localView.tree().child(0).finiteElement().localBasis().size(); + +// deformationFunction.bind(element); + +// for (int i=0; i<geometry.corners(); i++) +// { +// auto numDir = deformationFunction.evaluateDerivative(geometry.local(geometry.corner(i))); +// // printmatrix(std::cout, numDir, "numDir: ", "--"); + +// //cross product to get normal vector. +// Dune::FieldVector<double,3> normal = {numDir[1][0]*numDir[2][1] - numDir[1][1]*numDir[2][0], +// numDir[2][0]*numDir[0][1] - numDir[0][0]*numDir[2][1], +// numDir[0][0]*numDir[1][1] - numDir[1][0]*numDir[0][1]}; +// // printvector(std::cout, normal, "discrete normal:" , "--"); +// for (size_t k=0; k < 3; k++) +// for (size_t i=0; i < nSf; i++) +// { +// size_t localIdx = localView.tree().child(k).localIndex(i); // hier i:leafIdx +// size_t globalIdx = localView.index(localIdx); +// discreteNormalVectorCoefficients[globalIdx] = normal[k]; +// } +// } +// } + +// return discreteNormalVectorCoefficients; + +// // does not work: +// // auto surfaceNormalDiscrete = Dune::Functions::makeDiscreteGlobalBasisFunction<Dune::FieldVector<double,3>>(normalBasis, discreteNormalVectorCoefficients); +// // return surfaceNormalDiscrete; +// } + + + +/** + * @brief Comparison of different function definitions for debugging purposes. + */ +template<class LocalDiscreteKirchhoffFunction,class DeformationFunction, class GridView> +auto compare(LocalDiscreteKirchhoffFunction& kirchhoffFunction, + DeformationFunction& deformationFunction, + GridView& gridView) +{ + std::cout << "COMPARE:" << std::endl; + auto localDeformation = localFunction(deformationFunction); + auto rotation = derivative(deformationFunction); + auto localRotation = localFunction(rotation); + auto localRotation_2 = derivative(localDeformation); + for (const auto &element : elements(gridView)) + { + auto geometry = element.geometry(); + + kirchhoffFunction.bind(element); + localDeformation.bind(element); + localRotation.bind(element); + localRotation_2.bind(element); + + //evaluate at nodes: + for (int i=0; i<geometry.corners(); i++) + { + auto kirchhoffOut = kirchhoffFunction.evaluate(geometry.local(geometry.corner(i))).globalCoordinates(); + auto KirchhoffRot = kirchhoffFunction.evaluateDerivative(geometry.local(geometry.corner(i))); + //Test + const auto& jacobian = geometry.jacobian(geometry.corner(i)); + printmatrix(std::cout, jacobian, "jacobianInverse:", "--"); + + auto defOut = localDeformation(geometry.local(geometry.corner(i))); + auto defRot = localRotation(geometry.local(geometry.corner(i))); + auto defRot_2 = localRotation_2(geometry.local(geometry.corner(i))); + + printvector(std::cout, kirchhoffOut, "kirchhoffOut:", "--"); + printvector(std::cout, defOut, "defOut:", "--"); + printmatrix(std::cout, KirchhoffRot, "KirchhoffRot:", "--"); + printmatrix(std::cout, defRot, "defRot:", "--"); + } + } +} + + + +// /** +// * @brief Symmetric part of a matrix. +// * +// * @param M +// * @return FieldMatrix<RT,2,2> +// */ +// template<class RT> +// static Dune::FieldMatrix<RT,2,2> sym (Dune::FieldMatrix<RT,2,2> M) { // 1/2 (M^T + M) +// Dune::FieldMatrix<RT,2,2> ret(0); +// for (int i=0; i<2; i++) +// { +// ret[i][i] = M[i][i]; +// for (int j=i+1; j<2; j++) +// { +// ret[i][j] = 0.5*(M[i][j] + M[j][i]); +// ret[j][i] = ret[i][j]; +// } +// } +// return ret; +// } + + + +/** + * @brief Taking the symmetric part of a 2x2 matrix and represent it in + * (canonical) orthonormal basis of 2x2-symmetric matrices. + * Return the 3 coefficients as a vector + * + * Matrix A -> sym(A) -> coefficients in R_sym^(2x2) + * + * @param M + * @return Coefficient vector + */ +template<class RT> +static Dune::FieldVector<RT,3> matrixToSymCoefficients(Dune::FieldMatrix<RT,2,2> M) { + Dune::FieldVector<RT,3> ret = {M[0][0], M[1][1], (1.0/sqrt(2.0))*(M[0][1]+M[1][0])}; + + return ret; +} + +/** + * @brief same for each slice of a 3x2x2-Tensor. + */ +template<class RT, class OutputType> +static auto tensorToSymCoefficients(Dune::GFE::Tensor3<RT,3,2,2> M, OutputType& ret) { + for(int k=0; k<3; k++) + { + ret[k][0] = M[k][0][0]; + ret[k][1] = M[k][1][1]; + ret[k][2] = (1.0/sqrt(2.0))*(M[k][0][1]+M[k][1][0]); + } + return ret; +} + + +template<class RT> +static Dune::FieldMatrix<RT,2,2> CoefficientsToSymMatrix(Dune::FieldVector<RT,3> C) +{ + Dune::FieldMatrix<RT,2,2> ret = {{C[0] , C[2]*(1.0/sqrt(2.0))}, + {C[2]*(1.0/sqrt(2.0)), C[1]}}; + + return ret; +} + +/** + * @brief This is used to convert FieldMatrices to 'adouble' + * since adouble-type can not be read from ParSet. + * is there a better way? + * + * @tparam Rtype + * @tparam IMatrixType + * @param A + * @param B + */ +template<class Rtype> +static void convertFieldMatrix(auto& A, + auto& B) +{ + for(size_t i=0; i<B.N(); i++) + for(size_t j=0; j<B.M(); j++) + B[i][j] = (Rtype)A[i][j]; + + return; +} + + + +#endif diff --git a/dune/microstructure/deprecated_headers/materialDefinitions.hh b/dune/microstructure/deprecated_headers/materialDefinitions.hh index 1a03b8832c93a87d13a680217f7c482772f0ed6e..19468d4551cc67f519ecd111c69a20317a74a144 100644 --- a/dune/microstructure/deprecated_headers/materialDefinitions.hh +++ b/dune/microstructure/deprecated_headers/materialDefinitions.hh @@ -20,11 +20,11 @@ using VectorRT = FieldVector< double, 3>; -// (30.8.22) DEPRECATED CLASS! +// (30.8.22) DEPRECATED CLASS! - ////---------------------------------------------------------------------------------- +////---------------------------------------------------------------------------------- // template<class Domain> // int indicatorFunction_material_new(const Domain& x) // { @@ -33,7 +33,7 @@ using VectorRT = FieldVector< double, 3>; // return 1; //#Phase1 // else if (x[1]<(-0.5+theta) and x[2]>(0.5-theta)) // return 2; //#Phase2 -// else +// else // return 3; //#Phase3 // } // MatrixRT material_new(const MatrixRT& G, const int& phase) @@ -45,7 +45,7 @@ using VectorRT = FieldVector< double, 3>; // // return 2.0 * mu[0] * sym(G) + lambda[0] * trace(sym(G)) * Id(); //#Phase1 //Isotrop(mu,lambda) // else if (phase == 2) // return 2.0 * mu[1] * sym(G) + lambda[1] * trace(sym(G)) * Id(); //#Phase2 -// else +// else // return 2.0 * mu[2] * sym(G) + lambda[2] * trace(sym(G)) * Id(); //#Phase3 // } // MatrixRT prestrain_material_new(const int& phase) @@ -60,208 +60,208 @@ using VectorRT = FieldVector< double, 3>; // {0.0, 1.0, 0.0}, // {0.0, 0.0, 1.0} // }; -// else +// else // return {{0.0, 0.0, 0.0}, //#Phase3 // {0.0, 0.0, 0.0}, // {0.0, 0.0, 0.0} // }; // } - ////---------------------------------------------------------------------------------- - - - - - - // ---------------------------------------------------------------------------------- - template<class Domain> - int indicatorFunction_material_neukamm(const Domain& x) - { - double theta=0.25; - if (x[0] <(-0.5+theta) and x[2]<(-0.5+theta)) - return 1; //#Phase1 - else if (x[1]<(-0.5+theta) and x[2]>(0.5-theta)) - return 2; //#Phase2 - else - return 3; //#Phase3 - } - MatrixRT material_neukamm(const MatrixRT& G, const int& phase) - { - const FieldVector<double,3> mu = {80.0, 80.0, 60.0}; - const FieldVector<double,3> lambda = {80.0, 80.0, 25.0}; - if (phase == 1) - return 2.0 * mu[0] * sym(G) + lambda[0] * trace(sym(G)) * Id(); //#Phase1 //Isotrop(mu,lambda) - else if (phase == 2) - return 2.0 * mu[1] * sym(G) + lambda[1] * trace(sym(G)) * Id(); //#Phase2 - else - return 2.0 * mu[2] * sym(G) + lambda[2] * trace(sym(G)) * Id(); //#Phase3 - } - MatrixRT prestrain_material_neukamm(const int& phase) - { - if (phase == 1) - return {{1.0, 0.0, 0.0}, //#Phase1 - {0.0, 1.0, 0.0}, - {0.0, 0.0, 1.0} - }; - else if (phase == 2) - return {{1.0, 0.0, 0.0}, //#Phase2 - {0.0, 1.0, 0.0}, - {0.0, 0.0, 1.0} - }; - else - return {{0.0, 0.0, 0.0}, //#Phase3 - {0.0, 0.0, 0.0}, - {0.0, 0.0, 0.0} - }; - } - // ---------------------------------------------------------------------------------- - - - // ---------------------------------------------------------------------------------- - template<class Domain> - int indicatorFunction_two_phase_material_1(const Domain& x) - { - double theta=0.25; - if(abs(x[0]) > (theta/2.0)) - return 1; //#Phase1 - else - return 0; //#Phase2 - } - MatrixRT two_phase_material_1(const MatrixRT& G, const int& phase) - { - const FieldVector<double,2> mu = {80.0, 160.0}; - const FieldVector<double,2> lambda = {80.0, 160.0}; - if (phase == 1) - return 2.0 * mu[0] * sym(G) + lambda[0] * trace(sym(G)) * Id(); - else - return 2.0 * mu[1] * sym(G) + lambda[1] * trace(sym(G)) * Id(); - } - MatrixRT prestrain_two_phase_material_1(const int& phase) - { - const FieldVector<double,2> rho = {3.0, 5.0}; - if (phase == 1) - return {{rho[0], 0.0, 0.0}, //#Phase1 - {0.0, rho[0], 0.0}, - {0.0, 0.0, rho[0]} - }; - else - return {{rho[1], 0.0, 0.0}, //#Phase2 - {0.0, rho[1], 0.0}, - {0.0, 0.0, rho[1]} - }; - } - // ---------------------------------------------------------------------------------- - - - // ---------------------------------------------------------------------------------- - template<class Domain> - int indicatorFunction_two_phase_material_2(const Domain& x) - { - double theta=0.25; - if(abs(x[0]) > (theta/2.0)) - return 1; //#Phase1 - else - return 0; //#Phase2 - } - MatrixRT two_phase_material_2(const MatrixRT& G, const int& phase) - { - const FieldVector<double,2> mu = {5.0, 15.0}; - const FieldVector<double,2> lambda = {6.0, 8.0}; - if (phase == 1) - return 2.0 * mu[0] * sym(G) + lambda[0] * trace(sym(G)) * Id(); - else - return 2.0 * mu[1] * sym(G) + lambda[1] * trace(sym(G)) * Id(); - } - MatrixRT prestrain_two_phase_material_2(const int& phase) - { - const FieldVector<double,2> rho = {3.0, 5.0}; - if (phase == 1) - return {{rho[0], 0.0, 0.0}, //#Phase1 - {0.0, rho[0], 0.0}, - {0.0, 0.0, rho[0]} - }; - else - return {{rho[1], 0.0, 0.0}, //#Phase2 - {0.0, rho[1], 0.0}, - {0.0, 0.0, rho[1]} - }; - } - // ---------------------------------------------------------------------------------- - - - - // ---------------------------------------------------------------------------------- - template<class Domain> - int indicatorFunction_material_2(const Domain& x) - { - double theta=0.25; - if(abs(x[0]) > (theta/2.0)) - return 1; //#Phase1 - else - return 0; //#Phase2 - } - MatrixRT material_2(const MatrixRT& G, const int& phase) - { - const FieldVector<double,2> mu = {80.0, 160.0}; - const FieldVector<double,2> lambda = {80.0, 160.0}; - if (phase == 1) - return 2.0 * mu[0] * sym(G) + lambda[0] * trace(sym(G)) * Id(); //#Phase1 - else - return 2.0 * mu[1] * sym(G) + lambda[1] * trace(sym(G)) * Id(); //#Phase2 - } - MatrixRT prestrain_material_2(const int& phase) - { - const FieldVector<double,2> rho = {3.0, 5.0}; - if (phase == 1) - return {{rho[0], 0.0, 0.0}, //#Phase1 - {0.0, rho[0], 0.0}, - {0.0, 0.0, rho[0]} - }; - else - return {{rho[1], 0.0, 0.0}, //#Phase2 - {0.0, rho[1], 0.0}, - {0.0, 0.0, rho[1]} - }; - } - // ---------------------------------------------------------------------------------- - - - // ---------------------------------------------------------------------------------- - template<class Domain> - int indicatorFunction_material_homogeneous(const Domain& x) - { - return 0; - } - MatrixRT material_homogeneous(const MatrixRT& G, const int& phase) - { - const FieldVector<double,1> mu = {80.0}; - const FieldVector<double,1> lambda = {80.0}; - return 2.0 * mu[0] * sym(G) + lambda[0] * trace(sym(G)) * Id(); - } - MatrixRT prestrain_homogeneous(const int& phase) - { - if (phase == 1) - return {{1.0, 0.0, 0.0}, //#Phase1 - {0.0, 1.0, 0.0}, - {0.0, 0.0, 1.0} - }; - else if (phase == 2) - return {{1.0, 0.0, 0.0}, //#Phase2 - {0.0, 1.0, 0.0}, - {0.0, 0.0, 1.0} - }; - else - return {{1.0, 0.0, 0.0}, //#Phase3 - {0.0, 1.0, 0.0}, - {0.0, 0.0, 1.0} - }; - } - // ---------------------------------------------------------------------------------- - - - - - - +////---------------------------------------------------------------------------------- + + + + + +// ---------------------------------------------------------------------------------- +template<class Domain> +int indicatorFunction_material_neukamm(const Domain& x) +{ + double theta=0.25; + if (x[0] <(-0.5+theta) and x[2]<(-0.5+theta)) + return 1; //#Phase1 + else if (x[1]<(-0.5+theta) and x[2]>(0.5-theta)) + return 2; //#Phase2 + else + return 3; //#Phase3 +} +MatrixRT material_neukamm(const MatrixRT& G, const int& phase) +{ + const FieldVector<double,3> mu = {80.0, 80.0, 60.0}; + const FieldVector<double,3> lambda = {80.0, 80.0, 25.0}; + if (phase == 1) + return 2.0 * mu[0] * sym(G) + lambda[0] * trace(sym(G)) * Id(); //#Phase1 //Isotrop(mu,lambda) + else if (phase == 2) + return 2.0 * mu[1] * sym(G) + lambda[1] * trace(sym(G)) * Id(); //#Phase2 + else + return 2.0 * mu[2] * sym(G) + lambda[2] * trace(sym(G)) * Id(); //#Phase3 +} +MatrixRT prestrain_material_neukamm(const int& phase) +{ + if (phase == 1) + return {{1.0, 0.0, 0.0}, //#Phase1 + {0.0, 1.0, 0.0}, + {0.0, 0.0, 1.0} + }; + else if (phase == 2) + return {{1.0, 0.0, 0.0}, //#Phase2 + {0.0, 1.0, 0.0}, + {0.0, 0.0, 1.0} + }; + else + return {{0.0, 0.0, 0.0}, //#Phase3 + {0.0, 0.0, 0.0}, + {0.0, 0.0, 0.0} + }; +} +// ---------------------------------------------------------------------------------- + + +// ---------------------------------------------------------------------------------- +template<class Domain> +int indicatorFunction_two_phase_material_1(const Domain& x) +{ + double theta=0.25; + if(abs(x[0]) > (theta/2.0)) + return 1; //#Phase1 + else + return 0; //#Phase2 +} +MatrixRT two_phase_material_1(const MatrixRT& G, const int& phase) +{ + const FieldVector<double,2> mu = {80.0, 160.0}; + const FieldVector<double,2> lambda = {80.0, 160.0}; + if (phase == 1) + return 2.0 * mu[0] * sym(G) + lambda[0] * trace(sym(G)) * Id(); + else + return 2.0 * mu[1] * sym(G) + lambda[1] * trace(sym(G)) * Id(); +} +MatrixRT prestrain_two_phase_material_1(const int& phase) +{ + const FieldVector<double,2> rho = {3.0, 5.0}; + if (phase == 1) + return {{rho[0], 0.0, 0.0}, //#Phase1 + {0.0, rho[0], 0.0}, + {0.0, 0.0, rho[0]} + }; + else + return {{rho[1], 0.0, 0.0}, //#Phase2 + {0.0, rho[1], 0.0}, + {0.0, 0.0, rho[1]} + }; +} +// ---------------------------------------------------------------------------------- + + +// ---------------------------------------------------------------------------------- +template<class Domain> +int indicatorFunction_two_phase_material_2(const Domain& x) +{ + double theta=0.25; + if(abs(x[0]) > (theta/2.0)) + return 1; //#Phase1 + else + return 0; //#Phase2 +} +MatrixRT two_phase_material_2(const MatrixRT& G, const int& phase) +{ + const FieldVector<double,2> mu = {5.0, 15.0}; + const FieldVector<double,2> lambda = {6.0, 8.0}; + if (phase == 1) + return 2.0 * mu[0] * sym(G) + lambda[0] * trace(sym(G)) * Id(); + else + return 2.0 * mu[1] * sym(G) + lambda[1] * trace(sym(G)) * Id(); +} +MatrixRT prestrain_two_phase_material_2(const int& phase) +{ + const FieldVector<double,2> rho = {3.0, 5.0}; + if (phase == 1) + return {{rho[0], 0.0, 0.0}, //#Phase1 + {0.0, rho[0], 0.0}, + {0.0, 0.0, rho[0]} + }; + else + return {{rho[1], 0.0, 0.0}, //#Phase2 + {0.0, rho[1], 0.0}, + {0.0, 0.0, rho[1]} + }; +} +// ---------------------------------------------------------------------------------- + + + +// ---------------------------------------------------------------------------------- +template<class Domain> +int indicatorFunction_material_2(const Domain& x) +{ + double theta=0.25; + if(abs(x[0]) > (theta/2.0)) + return 1; //#Phase1 + else + return 0; //#Phase2 +} +MatrixRT material_2(const MatrixRT& G, const int& phase) +{ + const FieldVector<double,2> mu = {80.0, 160.0}; + const FieldVector<double,2> lambda = {80.0, 160.0}; + if (phase == 1) + return 2.0 * mu[0] * sym(G) + lambda[0] * trace(sym(G)) * Id(); //#Phase1 + else + return 2.0 * mu[1] * sym(G) + lambda[1] * trace(sym(G)) * Id(); //#Phase2 +} +MatrixRT prestrain_material_2(const int& phase) +{ + const FieldVector<double,2> rho = {3.0, 5.0}; + if (phase == 1) + return {{rho[0], 0.0, 0.0}, //#Phase1 + {0.0, rho[0], 0.0}, + {0.0, 0.0, rho[0]} + }; + else + return {{rho[1], 0.0, 0.0}, //#Phase2 + {0.0, rho[1], 0.0}, + {0.0, 0.0, rho[1]} + }; +} +// ---------------------------------------------------------------------------------- + + +// ---------------------------------------------------------------------------------- +template<class Domain> +int indicatorFunction_material_homogeneous(const Domain& x) +{ + return 0; +} +MatrixRT material_homogeneous(const MatrixRT& G, const int& phase) +{ + const FieldVector<double,1> mu = {80.0}; + const FieldVector<double,1> lambda = {80.0}; + return 2.0 * mu[0] * sym(G) + lambda[0] * trace(sym(G)) * Id(); +} +MatrixRT prestrain_homogeneous(const int& phase) +{ + if (phase == 1) + return {{1.0, 0.0, 0.0}, //#Phase1 + {0.0, 1.0, 0.0}, + {0.0, 0.0, 1.0} + }; + else if (phase == 2) + return {{1.0, 0.0, 0.0}, //#Phase2 + {0.0, 1.0, 0.0}, + {0.0, 0.0, 1.0} + }; + else + return {{1.0, 0.0, 0.0}, //#Phase3 + {0.0, 1.0, 0.0}, + {0.0, 0.0, 1.0} + }; +} +// ---------------------------------------------------------------------------------- + + + + + + @@ -280,4 +280,4 @@ using VectorRT = FieldVector< double, 3>; -#endif \ No newline at end of file +#endif diff --git a/dune/microstructure/deprecated_headers/prestrain_material_geometry.hh b/dune/microstructure/deprecated_headers/prestrain_material_geometry.hh index 55def935a783ea2ae1fb3db94317ac503ae686b8..cae2f3651b3539c26b5c1088d28e6768b2aa88de 100644 --- a/dune/microstructure/deprecated_headers/prestrain_material_geometry.hh +++ b/dune/microstructure/deprecated_headers/prestrain_material_geometry.hh @@ -18,460 +18,460 @@ using std::cos; -template <int dim> -class IsotropicMaterialImp +template <int dim> +class IsotropicMaterialImp { public: static const int dimWorld = dim; - using CellGridType = YaspGrid< dim, EquidistantOffsetCoordinates< double, dim>>; + using CellGridType = YaspGrid< dim, EquidistantOffsetCoordinates< double, dim> >; using Domain = typename CellGridType::LeafGridView::template Codim<0>::Geometry::GlobalCoordinate; using MatrixRT = FieldMatrix< double, dimWorld, dimWorld>; using Func2Tensor = std::function< MatrixRT(const Domain&) >; - using FuncScalar = std::function< double(const Domain&) >; + using FuncScalar = std::function< double (const Domain&) >; FuncScalar getMu(ParameterTree parameters){ std::string imp = parameters.get<std::string>("material_prestrain_imp", "analytical_Example"); //std::array<std::string,5> imps({"homogen_poisson" "bilayer_poisson" "chess_poisson" "3Dchess_poisson" "vertical_bilayer_poisson"}); - - double phi = M_PI*parameters.get<double>("material_angle", 0.0)/180; //TODO + + double phi = M_PI*parameters.get<double>("material_angle", 0.0)/180; //TODO double theta = parameters.get<double>("theta",1.0/4.0); //TODO alle parameter hier laden? - + double width = parameters.get<double>("width", 1.0); double height = parameters.get<double>("height", 1.0); - if (imp == "homogeneous"){ + if (imp == "homogeneous") { double mu1 = parameters.get<double>("mu1", 10); auto muTerm = [mu1] (const Domain& z) {return mu1;}; - + return muTerm; } - else if (imp == "material_neukamm"){ -// std::array<double,2> mu = parameters.get<std::array<double,2>>("mu", {1.0,3.0}); - // std::array<double,3> mu = parameters.get<std::array<double,3>>("mu", {1.0,3.0,2.0}); - std::array<double,3> mu = parameters.get<std::array<double,3>>("mu", {80.0, 80.0, 60.0}); + else if (imp == "material_neukamm") { + // std::array<double,2> mu = parameters.get<std::array<double,2>>("mu", {1.0,3.0}); + // std::array<double,3> mu = parameters.get<std::array<double,3>>("mu", {1.0,3.0,2.0}); + std::array<double,3> mu = parameters.get<std::array<double,3> >("mu", {80.0, 80.0, 60.0}); // Python::Module module = Python::import(parameters.get<std::string>("material_neukamm")); Python::Module module = Python::import("material_neukamm"); auto indicatorFunction = Python::make_function<double>(module.get("f")); - auto muTerm = [mu,indicatorFunction] (const Domain& z) - { - // std::cout << "Test:" << indicatorFunction(z) << std::endl; - if (indicatorFunction(z) == 1) - return mu[0]; - else if (indicatorFunction(z) == 2) - return mu[1]; - else - return mu[2]; - }; + auto muTerm = [mu,indicatorFunction] (const Domain& z) + { + // std::cout << "Test:" << indicatorFunction(z) << std::endl; + if (indicatorFunction(z) == 1) + return mu[0]; + else if (indicatorFunction(z) == 2) + return mu[1]; + else + return mu[2]; + }; return muTerm; } - else if (imp == "two_phase_material_1"){ - std::array<double,2> mu = parameters.get<std::array<double,2>>("mu", {1.0,3.0}); + else if (imp == "two_phase_material_1") { + std::array<double,2> mu = parameters.get<std::array<double,2> >("mu", {1.0,3.0}); // Python::Module module = Python::import(parameters.get<std::string>("two_phase_material_1")); Python::Module module = Python::import("two_phase_material_1"); auto indicatorFunction = Python::make_function<double>(module.get("f")); - auto muTerm = [mu,indicatorFunction] (const Domain& z) - { - // std::cout << "Test:" << indicatorFunction(z) << std::endl; - if (indicatorFunction(z) == 1) - return mu[0]; - else - return mu[1]; - }; + auto muTerm = [mu,indicatorFunction] (const Domain& z) + { + // std::cout << "Test:" << indicatorFunction(z) << std::endl; + if (indicatorFunction(z) == 1) + return mu[0]; + else + return mu[1]; + }; return muTerm; } - else if (imp == "two_phase_material_2"){ - std::array<double,2> mu = parameters.get<std::array<double,2>>("mu", {1.0,3.0}); + else if (imp == "two_phase_material_2") { + std::array<double,2> mu = parameters.get<std::array<double,2> >("mu", {1.0,3.0}); // Python::Module module = Python::import(parameters.get<std::string>("two_phase_material_1")); Python::Module module = Python::import("two_phase_material_2"); auto indicatorFunction = Python::make_function<double>(module.get("f")); - auto muTerm = [mu,indicatorFunction] (const Domain& z) - { - // std::cout << "Test:" << indicatorFunction(z) << std::endl; - if (indicatorFunction(z) == 1) - return mu[0]; - else - return mu[1]; - }; + auto muTerm = [mu,indicatorFunction] (const Domain& z) + { + // std::cout << "Test:" << indicatorFunction(z) << std::endl; + if (indicatorFunction(z) == 1) + return mu[0]; + else + return mu[1]; + }; return muTerm; } - else if (imp == "two_phase_material_3"){ - std::array<double,2> mu = parameters.get<std::array<double,2>>("mu", {1.0,3.0}); + else if (imp == "two_phase_material_3") { + std::array<double,2> mu = parameters.get<std::array<double,2> >("mu", {1.0,3.0}); // Python::Module module = Python::import(parameters.get<std::string>("two_phase_material_1")); Python::Module module = Python::import("two_phase_material_3"); auto indicatorFunction = Python::make_function<double>(module.get("f")); - auto muTerm = [mu,indicatorFunction] (const Domain& z) - { - // std::cout << "Test:" << indicatorFunction(z) << std::endl; - if (indicatorFunction(z) == 1) - return mu[0]; - else - return mu[1]; - }; + auto muTerm = [mu,indicatorFunction] (const Domain& z) + { + // std::cout << "Test:" << indicatorFunction(z) << std::endl; + if (indicatorFunction(z) == 1) + return mu[0]; + else + return mu[1]; + }; return muTerm; } else if (imp == "isotropic_bilayer") - { - double mu1 = parameters.get<double>("mu1",10.0); - double beta = parameters.get<double>("beta",2.0); - double mu2 = beta*mu1; - - auto muTerm = [mu1, mu2, theta] (const Domain& z) { - if (z[2]>0) - return mu1; - else - return mu2; - }; - - return muTerm; - } - else if (imp == "analytical_Example"){ + { + double mu1 = parameters.get<double>("mu1",10.0); + double beta = parameters.get<double>("beta",2.0); + double mu2 = beta*mu1; + + auto muTerm = [mu1, mu2, theta] (const Domain& z) { + if (z[2]>0) + return mu1; + else + return mu2; + }; + + return muTerm; + } + else if (imp == "analytical_Example") { double mu1 = parameters.get<double>("mu1",10.0); - double beta = parameters.get<double>("beta",2.0); + double beta = parameters.get<double>("beta",2.0); double mu2 = beta*mu1; - + auto muTerm = [mu1, mu2, theta] (const Domain& z) { - // std::cout << "Analytical-MU is used" << std::endl; - if (abs(z[0]) >= (theta/2.0)) + // std::cout << "Analytical-MU is used" << std::endl; + if (abs(z[0]) >= (theta/2.0)) return mu1; - else + else return mu2; }; - + return muTerm; } - else if (imp == "parametrized_Laminate"){ + else if (imp == "parametrized_Laminate") { double mu1 = parameters.get<double>("mu1",1.0); - double beta = parameters.get<double>("beta",2.0); + double beta = parameters.get<double>("beta",2.0); double mu2 = beta*mu1; - + auto muTerm = [mu1, mu2, theta] (const Domain& z) { - // std::cout << "Analytical-MU is used" << std::endl; - // if (abs(z[0]) >= (theta/2.0)) - if (abs(z[0]) > (theta/2.0)) + // std::cout << "Analytical-MU is used" << std::endl; + // if (abs(z[0]) >= (theta/2.0)) + if (abs(z[0]) > (theta/2.0)) return mu1; - else + else return mu2; }; - + return muTerm; } - else if (imp == "circle_fiber"){ + else if (imp == "circle_fiber") { double mu1 = parameters.get<double>("mu1",10.0); - double beta = parameters.get<double>("beta",2.0); + double beta = parameters.get<double>("beta",2.0); double mu2 = beta*mu1; - auto muTerm = [mu1,mu2,width] (const Domain& z) { - if (z[0] < 0 && sqrt(pow(z[1],2) + pow(z[2],2) ) < width/4.0 || 0 < z[0] && sqrt(pow(z[1],2) + pow(z[2],2) ) > width/4.0) - return mu1; - else - return mu2; - }; - + auto muTerm = [mu1,mu2,width] (const Domain& z) { + if (z[0] < 0 && sqrt(pow(z[1],2) + pow(z[2],2) ) < width/4.0 || 0 < z[0] && sqrt(pow(z[1],2) + pow(z[2],2) ) > width/4.0) + return mu1; + else + return mu2; + }; + return muTerm; } - else if (imp == "square_fiber"){ + else if (imp == "square_fiber") { double mu1 = parameters.get<double>("mu1",10.0); - double beta = parameters.get<double>("beta",2.0); + double beta = parameters.get<double>("beta",2.0); double mu2 = beta*mu1; - auto muTerm = [mu1,mu2,width] (const Domain& z) { - if (z[0] < 0 && std::max(abs(z[1]), abs(z[2])) < width/4.0 || 0 < z[0] && std::max(abs(z[1]), abs(z[2])) > width/4.0) - return mu1; - else - return mu2; - }; - + auto muTerm = [mu1,mu2,width] (const Domain& z) { + if (z[0] < 0 && std::max(abs(z[1]), abs(z[2])) < width/4.0 || 0 < z[0] && std::max(abs(z[1]), abs(z[2])) > width/4.0) + return mu1; + else + return mu2; + }; + return muTerm; } else if (imp == "matrix_material_circles") // Matrix material with prestrained Fiber inclusions (circular cross-section) - { - double mu1 = parameters.get<double>("mu1",10.0); - double beta = parameters.get<double>("beta",2.0); - double mu2 = beta*mu1; - - int nF = parameters.get<int>("nF", 2); //number of Fibers in each Layer - double rF = parameters.get<double>("rF", 0.5*(width/(2.0*nF)) ); //default: half of the max-fiber-radius mrF = (width/(2.0*nF)) - - - - assert( (2*rF)*nF <= width && (height/4)+rF <= height); //check that fibers are not bigger than Domain - - auto muTerm = [mu1,mu2,theta,nF,rF,height,width] (const Domain& x) - { - //TODO if Domain == 1... if Domain == 2 ... - // double domainShift = 1.0/2.0; - // TEST - double domainShift = 0.0; - // shift x to domain [0,1]^3 - FieldVector<double,3> s = {x[0]+domainShift, x[1]+domainShift, x[2]+domainShift}; - // std::cout << "matrixMaterial-MU is used" << std::endl; - - double output; - - // determine if point is in upper/lower Layer - if ( 0 <= s[2] && s[2] <= 1.0/2.0) // upper Layer - { - for(size_t i=0; i<nF ;i++) // running through all the Fibers.. - { - if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) // have to evenly space fibers... - { - // std::cout << " i : " << i << std::endl; - // printvector(std::cout, s, "s" , "--"); - // compute Fiber center - FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , 1.0/4.0}; - // printvector(std::cout, Fcenter, "Fcenter" , "--"); - // - if(sqrt(pow(s[0]-Fcenter[0],2)+pow(s[2]-Fcenter[1],2)) <= rF ) - output = mu2; - // return mu2; //richtig so? Fiber hat tendenziell größeres mu? - else - output = mu1; - // return mu1; - } - else {} - } - } - else // lower Layer - { - for(size_t i=0; i<nF ;i++) // running through all the Fibers.. - { - if(-1.0/2.0 + (1.0/double(nF))*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) - { - // std::cout << " i : " << i << std::endl; - // printvector(std::cout, s, "s" , "--"); - // compute Fiber center - FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , -1.0/4.0 }; - // printvector(std::cout, Fcenter, "Fcenter" , "--"); - - if(sqrt(pow(s[0]-Fcenter[0],2)+pow(s[2]-Fcenter[1],2)) <= rF ) - output = mu2; - // return mu2; //richtig so? Fiber hat tendenziell größeres mu? - else - output = mu1; - // return mu1; - } - else{} - } - - } - return output; - }; - return muTerm; - } + { + double mu1 = parameters.get<double>("mu1",10.0); + double beta = parameters.get<double>("beta",2.0); + double mu2 = beta*mu1; + + int nF = parameters.get<int>("nF", 2); //number of Fibers in each Layer + double rF = parameters.get<double>("rF", 0.5*(width/(2.0*nF)) ); //default: half of the max-fiber-radius mrF = (width/(2.0*nF)) + + + + assert( (2*rF)*nF <= width && (height/4)+rF <= height); //check that fibers are not bigger than Domain + + auto muTerm = [mu1,mu2,theta,nF,rF,height,width] (const Domain& x) + { + //TODO if Domain == 1... if Domain == 2 ... + // double domainShift = 1.0/2.0; + // TEST + double domainShift = 0.0; + // shift x to domain [0,1]^3 + FieldVector<double,3> s = {x[0]+domainShift, x[1]+domainShift, x[2]+domainShift}; + // std::cout << "matrixMaterial-MU is used" << std::endl; + + double output; + + // determine if point is in upper/lower Layer + if ( 0 <= s[2] && s[2] <= 1.0/2.0) // upper Layer + { + for(size_t i=0; i<nF ; i++) // running through all the Fibers.. + { + if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) // have to evenly space fibers... + { + // std::cout << " i : " << i << std::endl; + // printvector(std::cout, s, "s" , "--"); + // compute Fiber center + FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , 1.0/4.0}; + // printvector(std::cout, Fcenter, "Fcenter" , "--"); + // + if(sqrt(pow(s[0]-Fcenter[0],2)+pow(s[2]-Fcenter[1],2)) <= rF ) + output = mu2; + // return mu2; //richtig so? Fiber hat tendenziell größeres mu? + else + output = mu1; + // return mu1; + } + else {} + } + } + else // lower Layer + { + for(size_t i=0; i<nF ; i++) // running through all the Fibers.. + { + if(-1.0/2.0 + (1.0/double(nF))*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) + { + // std::cout << " i : " << i << std::endl; + // printvector(std::cout, s, "s" , "--"); + // compute Fiber center + FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , -1.0/4.0 }; + // printvector(std::cout, Fcenter, "Fcenter" , "--"); + + if(sqrt(pow(s[0]-Fcenter[0],2)+pow(s[2]-Fcenter[1],2)) <= rF ) + output = mu2; + // return mu2; //richtig so? Fiber hat tendenziell größeres mu? + else + output = mu1; + // return mu1; + } + else{} + } + + } + return output; + }; + return muTerm; + } else if (imp == "matrix_material_squares") // Matrix material with prestrained Fiber inclusions (square-shaped cross-section) - { - double mu1 = parameters.get<double>("mu1",10.0); - double beta = parameters.get<double>("beta",2.0); - double mu2 = beta*mu1; - - int nF = parameters.get<int>("nF", 2); //number of Fibers in each Layer - double rF = parameters.get<double>("rF", 0.5*(width/(2.0*nF)) ); //default: half of the max-fiber-radius mrF = (width/(2.0*nF)) - - - - assert( (2*rF)*nF <= width && (height/4)+rF <= height); //check that fibers are not bigger than Domain - - auto muTerm = [mu1,mu2,theta,nF,rF,height,width] (const Domain& x) - { - //TODO if Domain == 1... if Domain == 2 ... - // double domainShift = 1.0/2.0; - // TEST - double domainShift = 0.0; - // shift x to domain [0,1]^3 - FieldVector<double,3> s = {x[0]+domainShift, x[1]+domainShift, x[2]+domainShift}; - // std::cout << "matrixMaterial-MU is used" << std::endl; - double output; - - // determine if point is in upper/lower Layer - if ( 0 <= s[2] && s[2] <= 1.0/2.0) // upper Layer - { - for(size_t i=0; i<nF ;i++) // running through all the Fibers.. - { - if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) // have to evenly space fibers... - { - // std::cout << " i : " << i << std::endl; - // printvector(std::cout, s, "s" , "--"); - // compute Fiber center - FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , 1.0/4.0}; - // printvector(std::cout, Fcenter, "Fcenter" , "--"); - // - if(std::max( abs(s[0]-Fcenter[0]), abs(s[2]-Fcenter[1]) ) <= rF ) - output = mu2; - // return mu2; //richtig so? Fiber hat tendenziell größeres mu? - else - output = mu1; - // return mu1; - } - } - } - else // lower Layer - { - for(size_t i=0; i<nF ;i++) // running through all the Fibers.. - { - if(-1.0/2.0 + (1.0/double(nF))*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) - { - // std::cout << " i : " << i << std::endl; - // printvector(std::cout, s, "s" , "--"); - // compute Fiber center - FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , -1.0/4.0 }; - // printvector(std::cout, Fcenter, "Fcenter" , "--"); - - if(std::max( abs(s[0]-Fcenter[0]), abs(s[2]-Fcenter[1]) ) <= rF ) - output = mu2; - // return mu2; //richtig so? Fiber hat tendenziell größeres mu? - else - output = mu1; - // return mu1; - } - } - } - return output; - }; - return muTerm; - } - else if (imp == "bilayer"){ + { double mu1 = parameters.get<double>("mu1",10.0); - double beta = parameters.get<double>("beta",2.0); + double beta = parameters.get<double>("beta",2.0); + double mu2 = beta*mu1; + + int nF = parameters.get<int>("nF", 2); //number of Fibers in each Layer + double rF = parameters.get<double>("rF", 0.5*(width/(2.0*nF)) ); //default: half of the max-fiber-radius mrF = (width/(2.0*nF)) + + + + assert( (2*rF)*nF <= width && (height/4)+rF <= height); //check that fibers are not bigger than Domain + + auto muTerm = [mu1,mu2,theta,nF,rF,height,width] (const Domain& x) + { + //TODO if Domain == 1... if Domain == 2 ... + // double domainShift = 1.0/2.0; + // TEST + double domainShift = 0.0; + // shift x to domain [0,1]^3 + FieldVector<double,3> s = {x[0]+domainShift, x[1]+domainShift, x[2]+domainShift}; + // std::cout << "matrixMaterial-MU is used" << std::endl; + double output; + + // determine if point is in upper/lower Layer + if ( 0 <= s[2] && s[2] <= 1.0/2.0) // upper Layer + { + for(size_t i=0; i<nF ; i++) // running through all the Fibers.. + { + if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) // have to evenly space fibers... + { + // std::cout << " i : " << i << std::endl; + // printvector(std::cout, s, "s" , "--"); + // compute Fiber center + FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , 1.0/4.0}; + // printvector(std::cout, Fcenter, "Fcenter" , "--"); + // + if(std::max( abs(s[0]-Fcenter[0]), abs(s[2]-Fcenter[1]) ) <= rF ) + output = mu2; + // return mu2; //richtig so? Fiber hat tendenziell größeres mu? + else + output = mu1; + // return mu1; + } + } + } + else // lower Layer + { + for(size_t i=0; i<nF ; i++) // running through all the Fibers.. + { + if(-1.0/2.0 + (1.0/double(nF))*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) + { + // std::cout << " i : " << i << std::endl; + // printvector(std::cout, s, "s" , "--"); + // compute Fiber center + FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , -1.0/4.0 }; + // printvector(std::cout, Fcenter, "Fcenter" , "--"); + + if(std::max( abs(s[0]-Fcenter[0]), abs(s[2]-Fcenter[1]) ) <= rF ) + output = mu2; + // return mu2; //richtig so? Fiber hat tendenziell größeres mu? + else + output = mu1; + // return mu1; + } + } + } + return output; + }; + return muTerm; + } + else if (imp == "bilayer") { + double mu1 = parameters.get<double>("mu1",10.0); + double beta = parameters.get<double>("beta",2.0); double mu2 = beta*mu1; - + auto muTerm = [mu1, mu2, phi] (const Domain& z) { - if (isInRotatedPlane(phi, z[dim-2], z[dim-1])) - return mu1; - else - return mu2; - }; - + if (isInRotatedPlane(phi, z[dim-2], z[dim-1])) + return mu1; + else + return mu2; + }; + return muTerm; } - - else if (imp == "helix_poisson"){ // interessant! + + else if (imp == "helix_poisson") { // interessant! double mu1 = parameters.get<double>("mu1",10.0); - double beta = parameters.get<double>("beta",2.0); + double beta = parameters.get<double>("beta",2.0); double mu2 = beta*mu1; double r = parameters.get<double>("radius"); double r2 = parameters.get<double>("radius_helix"); auto muTerm = [mu1, mu2, r, r2] (const Domain& z) { - std::array<double,2> h = {r*cos(2*M_PI*z[0]), r*sin(2*M_PI*z[0])}; - if ( sqrt(pow(z[1]-h[0],2)+pow(z[2]-h[1],2)) < r2 ) // distance to the helix? - return mu1; - else - return mu2; - }; - + std::array<double,2> h = {r*cos(2*M_PI*z[0]), r*sin(2*M_PI*z[0])}; + if ( sqrt(pow(z[1]-h[0],2)+pow(z[2]-h[1],2)) < r2 ) // distance to the helix? + return mu1; + else + return mu2; + }; + return muTerm; } - else if (imp == "chess_poisson"){ + else if (imp == "chess_poisson") { double mu1 = parameters.get<double>("mu1",10.0); - double beta = parameters.get<double>("beta",2.0); + double beta = parameters.get<double>("beta",2.0); double mu2 = beta*mu1; auto muTerm = [mu1, mu2, phi] (const Domain& z) { - if ( (isInRotatedPlane(phi, z[dim-2], z[dim-1]) and isInRotatedPlane(phi + M_PI/2 , z[dim-2], z[dim-1])) or - (isInRotatedPlane(phi + M_PI, z[dim-2], z[dim-1]) and isInRotatedPlane(phi + 3*M_PI/2, z[dim-2], z[dim-1])) ) - return mu1; - else - return mu2; - }; - + if ( (isInRotatedPlane(phi, z[dim-2], z[dim-1]) and isInRotatedPlane(phi + M_PI/2 , z[dim-2], z[dim-1])) or + (isInRotatedPlane(phi + M_PI, z[dim-2], z[dim-1]) and isInRotatedPlane(phi + 3*M_PI/2, z[dim-2], z[dim-1])) ) + return mu1; + else + return mu2; + }; + return muTerm; } - // else if (imp == "3Dchess_poisson"){ - // double E1 = parameters.get<double>("E1", 17e6); //Faser - // double nu1 = parameters.get<double>("nu1", 0.3); - // double mu1 = lameMu(E1, nu1); - // - // double E2 = parameters.get<double>("E2", 17e6); //Polymer, weicher, Querkontraktion groß - // double nu2 = parameters.get<double>("nu2", 0.5); - // double mu2 = lameMu(E2, nu2); - // - // auto muTerm = [mu1, mu2, phi] (const Domain& z) { - // if (z[0]<0.5) - // if ( (isInRotatedPlane(phi, z[1], z[2]) and isInRotatedPlane(phi + M_PI/2 , z[1], z[2])) or - // (isInRotatedPlane(phi + M_PI, z[1], z[2]) and isInRotatedPlane(phi + 3*M_PI/2, z[1], z[2])) ) - // return mu1; - // else - // return mu2; - // else - // if ( (isInRotatedPlane(phi, z[1], z[2]) and isInRotatedPlane(phi + M_PI/2 , z[1], z[2])) or - // (isInRotatedPlane(phi + M_PI, z[1], z[2]) and isInRotatedPlane(phi + 3*M_PI/2, z[1], z[2])) ) - // return mu2; - // else - // return mu1; - // }; - // - // return muTerm; - // } - // else if (imp == "vertical_bilayer_poisson"){ - // double E1 = parameters.get<double>("E1", 17e6); //material1 - // double nu1 = parameters.get<double>("nu1", 0.3); - // double mu1 = lameMu(E1, nu1); - // double E2 = parameters.get<double>("E2", 17e6); //material2 - // double nu2 = parameters.get<double>("nu2", 0.5); - // double mu2 = lameMu(E2, nu2); - // - // auto muTerm = [mu1, mu2, phi] (const Domain& z) { - // if ( isInRotatedPlane(phi+M_PI/2.0, z[dim-2], z[dim-1]) )//x3 - // return mu1; - // else - // return mu2; }; - // - // return muTerm; - // } - // - // else if (imp == "microstructured_bilayer_poisson"){ - // double E1 = parameters.get<double>("E1", 17e6); //material1 - // double nu1 = parameters.get<double>("nu1", 0.3); - // double mu1 = lameMu(E1, nu1); - // double E2 = parameters.get<double>("E2", 17e6); //material2 - // double nu2 = parameters.get<double>("nu2", 0.5); - // double mu2 = lameMu(E2, nu2); - // - // auto muTerm = [mu1, mu2, phi] (const Domain& z) { - // if ( isInRotatedPlane(phi, z[0]-0.5, z[1]) ) //TODO understand this - // return mu1; - // else - // return mu2; }; - // - // return muTerm; - // } - // - // else { //(imp == "bilayer_poisson") - // double E1 = parameters.get<double>("E1", 17e6); //material1 - // double nu1 = parameters.get<double>("nu1", 0.3); - // double mu1 = lameMu(E1, nu1); - // double E2 = parameters.get<double>("E2", 17e6); //material2 - // double nu2 = parameters.get<double>("nu2", 0.5); - // double mu2 = lameMu(E2, nu2); - // - // auto muTerm = [mu1, mu2, phi] (const Domain& z) { - // if ( isInRotatedPlane(phi, z[dim-2], z[dim-1]) ) //x2 - // return mu1; - // else - // return mu2; }; - // - // return muTerm; - // } + // else if (imp == "3Dchess_poisson"){ + // double E1 = parameters.get<double>("E1", 17e6); //Faser + // double nu1 = parameters.get<double>("nu1", 0.3); + // double mu1 = lameMu(E1, nu1); + // + // double E2 = parameters.get<double>("E2", 17e6); //Polymer, weicher, Querkontraktion groß + // double nu2 = parameters.get<double>("nu2", 0.5); + // double mu2 = lameMu(E2, nu2); + // + // auto muTerm = [mu1, mu2, phi] (const Domain& z) { + // if (z[0]<0.5) + // if ( (isInRotatedPlane(phi, z[1], z[2]) and isInRotatedPlane(phi + M_PI/2 , z[1], z[2])) or + // (isInRotatedPlane(phi + M_PI, z[1], z[2]) and isInRotatedPlane(phi + 3*M_PI/2, z[1], z[2])) ) + // return mu1; + // else + // return mu2; + // else + // if ( (isInRotatedPlane(phi, z[1], z[2]) and isInRotatedPlane(phi + M_PI/2 , z[1], z[2])) or + // (isInRotatedPlane(phi + M_PI, z[1], z[2]) and isInRotatedPlane(phi + 3*M_PI/2, z[1], z[2])) ) + // return mu2; + // else + // return mu1; + // }; + // + // return muTerm; + // } + // else if (imp == "vertical_bilayer_poisson"){ + // double E1 = parameters.get<double>("E1", 17e6); //material1 + // double nu1 = parameters.get<double>("nu1", 0.3); + // double mu1 = lameMu(E1, nu1); + // double E2 = parameters.get<double>("E2", 17e6); //material2 + // double nu2 = parameters.get<double>("nu2", 0.5); + // double mu2 = lameMu(E2, nu2); + // + // auto muTerm = [mu1, mu2, phi] (const Domain& z) { + // if ( isInRotatedPlane(phi+M_PI/2.0, z[dim-2], z[dim-1]) )//x3 + // return mu1; + // else + // return mu2; }; + // + // return muTerm; + // } + // + // else if (imp == "microstructured_bilayer_poisson"){ + // double E1 = parameters.get<double>("E1", 17e6); //material1 + // double nu1 = parameters.get<double>("nu1", 0.3); + // double mu1 = lameMu(E1, nu1); + // double E2 = parameters.get<double>("E2", 17e6); //material2 + // double nu2 = parameters.get<double>("nu2", 0.5); + // double mu2 = lameMu(E2, nu2); + // + // auto muTerm = [mu1, mu2, phi] (const Domain& z) { + // if ( isInRotatedPlane(phi, z[0]-0.5, z[1]) ) //TODO understand this + // return mu1; + // else + // return mu2; }; + // + // return muTerm; + // } + // + // else { //(imp == "bilayer_poisson") + // double E1 = parameters.get<double>("E1", 17e6); //material1 + // double nu1 = parameters.get<double>("nu1", 0.3); + // double mu1 = lameMu(E1, nu1); + // double E2 = parameters.get<double>("E2", 17e6); //material2 + // double nu2 = parameters.get<double>("nu2", 0.5); + // double mu2 = lameMu(E2, nu2); + // + // auto muTerm = [mu1, mu2, phi] (const Domain& z) { + // if ( isInRotatedPlane(phi, z[dim-2], z[dim-1]) ) //x2 + // return mu1; + // else + // return mu2; }; + // + // return muTerm; + // } } FuncScalar getLambda(ParameterTree parameters) @@ -483,441 +483,442 @@ public: //std::string imp = imps[i_imp]; double phi = M_PI*parameters.get<double>("material_angle", 0.0)/180; double theta = parameters.get<double>("theta",1.0/4.0); //TODO alle parameter hier laden? - + double width = parameters.get<double>("width", 1.0); double height = parameters.get<double>("height", 1.0); - if (imp == "homogeneous"){ + if (imp == "homogeneous") { double lambda1 = parameters.get<double>("lambda1",0.0); auto lambdaTerm = [lambda1] (const Domain& z) {return lambda1;}; - + return lambdaTerm; } - if (imp == "material_neukamm"){ -// std::array<double,2> lambda = parameters.get<std::array<double,2>>("lambda", {1.0,3.0}); - // std::array<double,3> lambda = parameters.get<std::array<double,3>>("lambda", {1.0,3.0,2.0}); - std::array<double,3> lambda = parameters.get<std::array<double,3>>("lambda", {80.0, 80.0, 25.0}); - + if (imp == "material_neukamm") { + // std::array<double,2> lambda = parameters.get<std::array<double,2>>("lambda", {1.0,3.0}); + // std::array<double,3> lambda = parameters.get<std::array<double,3>>("lambda", {1.0,3.0,2.0}); + std::array<double,3> lambda = parameters.get<std::array<double,3> >("lambda", {80.0, 80.0, 25.0}); + Python::Module module = Python::import("material_neukamm"); auto indicatorFunction = Python::make_function<double>(module.get("f")); - auto lambdaTerm = [lambda,indicatorFunction] (const Domain& z) - { - // std::cout << "Test:" << indicatorFunction(z) << std::endl; - if (indicatorFunction(z) == 1) - return lambda[0]; - else if (indicatorFunction(z) == 2) - return lambda[1]; - else - return lambda[2]; - }; + auto lambdaTerm = [lambda,indicatorFunction] (const Domain& z) + { + // std::cout << "Test:" << indicatorFunction(z) << std::endl; + if (indicatorFunction(z) == 1) + return lambda[0]; + else if (indicatorFunction(z) == 2) + return lambda[1]; + else + return lambda[2]; + }; return lambdaTerm; } - if (imp == "two_phase_material_1"){ - std::array<double,2> lambda = parameters.get<std::array<double,2>>("lambda", {1.0,3.0}); + if (imp == "two_phase_material_1") { + std::array<double,2> lambda = parameters.get<std::array<double,2> >("lambda", {1.0,3.0}); // Python::Module module = Python::import(parameters.get<std::string>("two_phase_material_1")); Python::Module module = Python::import("two_phase_material_1"); auto indicatorFunction = Python::make_function<double>(module.get("f")); - auto lambdaTerm = [lambda,indicatorFunction] (const Domain& z) - { - // std::cout << "Test:" << indicatorFunction(z) << std::endl; - if (indicatorFunction(z) == 1) - return lambda[0]; - else - return lambda[1]; - }; + auto lambdaTerm = [lambda,indicatorFunction] (const Domain& z) + { + // std::cout << "Test:" << indicatorFunction(z) << std::endl; + if (indicatorFunction(z) == 1) + return lambda[0]; + else + return lambda[1]; + }; return lambdaTerm; } - if (imp == "two_phase_material_2"){ - std::array<double,2> lambda = parameters.get<std::array<double,2>>("lambda", {1.0,3.0}); + if (imp == "two_phase_material_2") { + std::array<double,2> lambda = parameters.get<std::array<double,2> >("lambda", {1.0,3.0}); // Python::Module module = Python::import(parameters.get<std::string>("two_phase_material_1")); Python::Module module = Python::import("two_phase_material_2"); auto indicatorFunction = Python::make_function<double>(module.get("f")); - auto lambdaTerm = [lambda,indicatorFunction] (const Domain& z) - { - // std::cout << "Test:" << indicatorFunction(z) << std::endl; - if (indicatorFunction(z) == 1) - return lambda[0]; - else - return lambda[1]; - }; + auto lambdaTerm = [lambda,indicatorFunction] (const Domain& z) + { + // std::cout << "Test:" << indicatorFunction(z) << std::endl; + if (indicatorFunction(z) == 1) + return lambda[0]; + else + return lambda[1]; + }; return lambdaTerm; } - if (imp == "two_phase_material_3"){ - std::array<double,2> lambda = parameters.get<std::array<double,2>>("lambda", {1.0,3.0}); + if (imp == "two_phase_material_3") { + std::array<double,2> lambda = parameters.get<std::array<double,2> >("lambda", {1.0,3.0}); // Python::Module module = Python::import(parameters.get<std::string>("two_phase_material_1")); Python::Module module = Python::import("two_phase_material_3"); auto indicatorFunction = Python::make_function<double>(module.get("f")); - auto lambdaTerm = [lambda,indicatorFunction] (const Domain& z) - { - // std::cout << "Test:" << indicatorFunction(z) << std::endl; - if (indicatorFunction(z) == 1) - return lambda[0]; - else - return lambda[1]; - }; + auto lambdaTerm = [lambda,indicatorFunction] (const Domain& z) + { + // std::cout << "Test:" << indicatorFunction(z) << std::endl; + if (indicatorFunction(z) == 1) + return lambda[0]; + else + return lambda[1]; + }; return lambdaTerm; } else if (imp == "isotropic_bilayer") - { - double lambda1 = parameters.get<double>("lambda1",0.0); - double beta = parameters.get<double>("beta",2.0); - double lambda2 = beta*lambda1; - - auto lambdaTerm = [lambda1,lambda2, theta] (const Domain& z) { - if (z[2]>0) - return lambda1; - else - return lambda2; - }; - return lambdaTerm; - } - - else if (imp == "analytical_Example"){ + { double lambda1 = parameters.get<double>("lambda1",0.0); - double beta = parameters.get<double>("beta",2.0); + double beta = parameters.get<double>("beta",2.0); double lambda2 = beta*lambda1; - + auto lambdaTerm = [lambda1,lambda2, theta] (const Domain& z) { - - // std::cout << "Analytical-LAMBDA is used" << std::endl; //TEST - if (abs(z[0]) >= (theta/2.0)) - return lambda1; - else - return lambda2; - }; + if (z[2]>0) + return lambda1; + else + return lambda2; + }; return lambdaTerm; } - else if (imp == "parametrized_Laminate"){ + + else if (imp == "analytical_Example") { double lambda1 = parameters.get<double>("lambda1",0.0); - double beta = parameters.get<double>("beta",2.0); + double beta = parameters.get<double>("beta",2.0); double lambda2 = beta*lambda1; - + auto lambdaTerm = [lambda1,lambda2, theta] (const Domain& z) { - - // std::cout << "Analytical-LAMBDA is used" << std::endl; //TEST - // std::cout << "Lambda1:" << lambda1 << std::endl; - // if (abs(z[0]) > (theta/2.0)) - if (abs(z[0]) > (theta/2.0)) - return lambda1; - else - return lambda2; - }; + + // std::cout << "Analytical-LAMBDA is used" << std::endl; //TEST + if (abs(z[0]) >= (theta/2.0)) + return lambda1; + else + return lambda2; + }; return lambdaTerm; } - else if (imp == "circle_fiber"){ + else if (imp == "parametrized_Laminate") { double lambda1 = parameters.get<double>("lambda1",0.0); - double beta = parameters.get<double>("beta",2.0); + double beta = parameters.get<double>("beta",2.0); + double lambda2 = beta*lambda1; + + auto lambdaTerm = [lambda1,lambda2, theta] (const Domain& z) { + + // std::cout << "Analytical-LAMBDA is used" << std::endl; //TEST + // std::cout << "Lambda1:" << lambda1 << std::endl; + // if (abs(z[0]) > (theta/2.0)) + if (abs(z[0]) > (theta/2.0)) + return lambda1; + else + return lambda2; + }; + return lambdaTerm; + } + else if (imp == "circle_fiber") { + double lambda1 = parameters.get<double>("lambda1",0.0); + double beta = parameters.get<double>("beta",2.0); double lambda2 = beta*lambda1; auto lambdaTerm = [lambda1,lambda2,width] (const Domain& z) // Prestrain inducing twist (bisher nur extension) - { - if (z[0] < 0 && sqrt(pow(z[1],2) + pow(z[2],2) ) < width/4.0 || 0 < z[0] && sqrt(pow(z[1],2) + pow(z[2],2) ) > width/4.0) - return lambda1; - else - return lambda2; - }; - + { + if (z[0] < 0 && sqrt(pow(z[1],2) + pow(z[2],2) ) < width/4.0 || 0 < z[0] && sqrt(pow(z[1],2) + pow(z[2],2) ) > width/4.0) + return lambda1; + else + return lambda2; + }; + return lambdaTerm; } - else if (imp == "square_fiber"){ + else if (imp == "square_fiber") { double lambda1 = parameters.get<double>("lambda1",0.0); - double beta = parameters.get<double>("beta",2.0); + double beta = parameters.get<double>("beta",2.0); double lambda2 = beta*lambda1; auto lambdaTerm = [lambda1,lambda2,width] (const Domain& z) // Prestrain inducing twist (bisher nur extension) - { - if (z[0] < 0 && std::max(abs(z[1]), abs(z[2])) < width/4.0 || 0 < z[0] && std::max(abs(z[1]), abs(z[2])) > width/4.0) - return lambda1; - else - return lambda2; - }; - + { + if (z[0] < 0 && std::max(abs(z[1]), abs(z[2])) < width/4.0 || 0 < z[0] && std::max(abs(z[1]), abs(z[2])) > width/4.0) + return lambda1; + else + return lambda2; + }; + return lambdaTerm; } else if (imp == "matrix_material_circles") // Matrix material with prestrained Fiber inclusions (circular cross-section) - { - double lambda1 = parameters.get<double>("lambda1",0.0); - double beta = parameters.get<double>("beta",2.0); - double lambda2 = beta*lambda1; - - int nF = parameters.get<int>("nF", 2); //number of Fibers in each Layer - double rF = parameters.get<double>("rF", 0.5*(width/(2.0*nF)) ); //default: half of the max-fiber-radius mrF = (width/(2.0*nF)) - - - - assert( (2*rF)*nF <= width && (height/4)+rF <= height); //check that fibers are not bigger than Domain - - auto lambdaTerm = [lambda1,lambda2, theta,nF,rF,height,width] (const Domain& x) - { - //TODO if Domain == 1... if Domain == 2 ... - // double domainShift = 1.0/2.0; - // TEST - double domainShift = 0.0; - // shift x to domain [0,1]^3 - FieldVector<double,3> s = {x[0]+domainShift, x[1]+domainShift, x[2]+domainShift}; - // std::cout << "matrixMaterial-MU is used" << std::endl; - double output; - - // determine if point is in upper/lower Layer - if ( 0 <= s[2] && s[2] <= 1.0/2.0) // upper Layer - { - for(size_t i=0; i<nF ;i++) // running through all the Fibers.. - { - if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) // have to evenly space fibers... - { - // std::cout << " i : " << i << std::endl; - // printvector(std::cout, s, "s" , "--"); - // compute Fiber center - FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , 1.0/4.0}; - // printvector(std::cout, Fcenter, "Fcenter" , "--"); - // - if(sqrt(pow(s[0]-Fcenter[0],2)+pow(s[2]-Fcenter[1],2)) <= rF ) - output = lambda2; - // return lambda2; //richtig so? Fiber hat tendenziell größeres mu? - else - output = lambda1; - // return lambda1; - } - } - } - else // lower Layer - { - for(size_t i=0; i<nF ;i++) // running through all the Fibers.. - { - if(-1.0/2.0 + (1.0/double(nF))*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) - { - // std::cout << " i : " << i << std::endl; - // printvector(std::cout, s, "s" , "--"); - // compute Fiber center - FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , -1.0/4.0 }; - // printvector(std::cout, Fcenter, "Fcenter" , "--"); - - if(sqrt(pow(s[0]-Fcenter[0],2)+pow(s[2]-Fcenter[1],2)) <= rF ) - output = lambda2; - // return lambda2; //richtig so? Fiber hat tendenziell größeres mu? - else - output = lambda1; - // return lambda1; - } - } - - } - return output; - }; - return lambdaTerm; - } + { + double lambda1 = parameters.get<double>("lambda1",0.0); + double beta = parameters.get<double>("beta",2.0); + double lambda2 = beta*lambda1; + + int nF = parameters.get<int>("nF", 2); //number of Fibers in each Layer + double rF = parameters.get<double>("rF", 0.5*(width/(2.0*nF)) ); //default: half of the max-fiber-radius mrF = (width/(2.0*nF)) + + + + assert( (2*rF)*nF <= width && (height/4)+rF <= height); //check that fibers are not bigger than Domain + + auto lambdaTerm = [lambda1,lambda2, theta,nF,rF,height,width] (const Domain& x) + { + //TODO if Domain == 1... if Domain == 2 ... + // double domainShift = 1.0/2.0; + // TEST + double domainShift = 0.0; + // shift x to domain [0,1]^3 + FieldVector<double,3> s = {x[0]+domainShift, x[1]+domainShift, x[2]+domainShift}; + // std::cout << "matrixMaterial-MU is used" << std::endl; + double output; + + // determine if point is in upper/lower Layer + if ( 0 <= s[2] && s[2] <= 1.0/2.0) // upper Layer + { + for(size_t i=0; i<nF ; i++) // running through all the Fibers.. + { + if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) // have to evenly space fibers... + { + // std::cout << " i : " << i << std::endl; + // printvector(std::cout, s, "s" , "--"); + // compute Fiber center + FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , 1.0/4.0}; + // printvector(std::cout, Fcenter, "Fcenter" , "--"); + // + if(sqrt(pow(s[0]-Fcenter[0],2)+pow(s[2]-Fcenter[1],2)) <= rF ) + output = lambda2; + // return lambda2; //richtig so? Fiber hat tendenziell größeres mu? + else + output = lambda1; + // return lambda1; + } + } + } + else // lower Layer + { + for(size_t i=0; i<nF ; i++) // running through all the Fibers.. + { + if(-1.0/2.0 + (1.0/double(nF))*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) + { + // std::cout << " i : " << i << std::endl; + // printvector(std::cout, s, "s" , "--"); + // compute Fiber center + FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , -1.0/4.0 }; + // printvector(std::cout, Fcenter, "Fcenter" , "--"); + + if(sqrt(pow(s[0]-Fcenter[0],2)+pow(s[2]-Fcenter[1],2)) <= rF ) + output = lambda2; + // return lambda2; //richtig so? Fiber hat tendenziell größeres mu? + else + output = lambda1; + // return lambda1; + } + } + + } + return output; + }; + return lambdaTerm; + } else if (imp == "matrix_material_squares") // Matrix material with prestrained Fiber inclusions (square-shaped cross-section) - { - double lambda1 = parameters.get<double>("lambda1",0.0); - double beta = parameters.get<double>("beta",2.0); - double lambda2 = beta*lambda1; - - int nF = parameters.get<int>("nF", 2); //number of Fibers in each Layer - double rF = parameters.get<double>("rF", 0.5*(width/(2.0*nF)) ); //default: half of the max-fiber-radius mrF = (width/(2.0*nF)) - - assert( (2*rF)*nF <= width && (height/4)+rF <= height); //check that fibers are not bigger than Domain - - auto lambdaTerm = [lambda1,lambda2, theta,nF,rF,height,width] (const Domain& x) - { - //TODO if Domain == 1... if Domain == 2 ... - // double domainShift = 1.0/2.0; - // TEST - double domainShift = 0.0; - // shift x to domain [0,1]^3 - FieldVector<double,3> s = {x[0]+domainShift, x[1]+domainShift, x[2]+domainShift}; - // std::cout << "matrixMaterial-MU is used" << std::endl; - double output; - - // determine if point is in upper/lower Layer - if ( 0 <= s[2] && s[2] <= 1.0/2.0) // upper Layer - { - for(size_t i=0; i<nF ;i++) // running through all the Fibers.. - { - if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) // have to evenly space fibers... - { - // std::cout << " i : " << i << std::endl; - // printvector(std::cout, s, "s" , "--"); - // compute Fiber center - FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , 1.0/4.0}; - // printvector(std::cout, Fcenter, "Fcenter" , "--"); - // - if(std::max( abs(s[0]-Fcenter[0]), abs(s[2]-Fcenter[1]) ) <= rF ) - output = lambda2; - // return lambda2; //richtig so? Fiber hat tendenziell größeres mu? - else - output = lambda1; - // return lambda1; - } - } - } - else // lower Layer - { - for(size_t i=0; i<nF ;i++) // running through all the Fibers.. - { - if(-1.0/2.0 + (1.0/double(nF))*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) - { - // std::cout << " i : " << i << std::endl; - // printvector(std::cout, s, "s" , "--"); - // compute Fiber center - FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , -1.0/4.0 }; - // printvector(std::cout, Fcenter, "Fcenter" , "--"); - - if(std::max( abs(s[0]-Fcenter[0]), abs(s[2]-Fcenter[1]) ) <= rF ) - output = lambda2; - // return lambda2; //richtig so? Fiber hat tendenziell größeres mu? - else - output = lambda1; - // return lambda1; - } - } - } - return output; - }; - return lambdaTerm; - } - else if (imp == "bilayer_lame"){ + { + double lambda1 = parameters.get<double>("lambda1",0.0); + double beta = parameters.get<double>("beta",2.0); + double lambda2 = beta*lambda1; + + int nF = parameters.get<int>("nF", 2); //number of Fibers in each Layer + double rF = parameters.get<double>("rF", 0.5*(width/(2.0*nF)) ); //default: half of the max-fiber-radius mrF = (width/(2.0*nF)) + + assert( (2*rF)*nF <= width && (height/4)+rF <= height); //check that fibers are not bigger than Domain + + auto lambdaTerm = [lambda1,lambda2, theta,nF,rF,height,width] (const Domain& x) + { + //TODO if Domain == 1... if Domain == 2 ... + // double domainShift = 1.0/2.0; + // TEST + double domainShift = 0.0; + // shift x to domain [0,1]^3 + FieldVector<double,3> s = {x[0]+domainShift, x[1]+domainShift, x[2]+domainShift}; + // std::cout << "matrixMaterial-MU is used" << std::endl; + double output; + + // determine if point is in upper/lower Layer + if ( 0 <= s[2] && s[2] <= 1.0/2.0) // upper Layer + { + for(size_t i=0; i<nF ; i++) // running through all the Fibers.. + { + if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) // have to evenly space fibers... + { + // std::cout << " i : " << i << std::endl; + // printvector(std::cout, s, "s" , "--"); + // compute Fiber center + FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , 1.0/4.0}; + // printvector(std::cout, Fcenter, "Fcenter" , "--"); + // + if(std::max( abs(s[0]-Fcenter[0]), abs(s[2]-Fcenter[1]) ) <= rF ) + output = lambda2; + // return lambda2; //richtig so? Fiber hat tendenziell größeres mu? + else + output = lambda1; + // return lambda1; + } + } + } + else // lower Layer + { + for(size_t i=0; i<nF ; i++) // running through all the Fibers.. + { + if(-1.0/2.0 + (1.0/double(nF))*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/double(nF))*(i+1)) + { + // std::cout << " i : " << i << std::endl; + // printvector(std::cout, s, "s" , "--"); + // compute Fiber center + FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , -1.0/4.0 }; + // printvector(std::cout, Fcenter, "Fcenter" , "--"); + + if(std::max( abs(s[0]-Fcenter[0]), abs(s[2]-Fcenter[1]) ) <= rF ) + output = lambda2; + // return lambda2; //richtig so? Fiber hat tendenziell größeres mu? + else + output = lambda1; + // return lambda1; + } + } + } + return output; + }; + return lambdaTerm; + } + else if (imp == "bilayer_lame") { double lambda1 = parameters.get<double>("mu1",384.615); - double lambda2 = parameters.get<double>("mu2",384.615); - + double lambda2 = parameters.get<double>("mu2",384.615); + auto lambdaTerm = [lambda1, lambda2, phi] (const Domain& z) { - if ( isInRotatedPlane(phi, z[dim-2], z[dim-1]) ) - return lambda1; - else - return lambda2; }; - + if ( isInRotatedPlane(phi, z[dim-2], z[dim-1]) ) + return lambda1; + else + return lambda2; + }; + return lambdaTerm; } - else if (imp == "helix_poisson"){ + else if (imp == "helix_poisson") { double E1 = parameters.get<double>("E1", 17e6); //Faser double nu1 = parameters.get<double>("nu1", 0.3); double lambda1 = lameLambda(E1,nu1); double E2 = parameters.get<double>("E2", 17e6); //Polymer, weicher, Querkontraktion groß - double nu2 = parameters.get<double>("nu2", 0.5); + double nu2 = parameters.get<double>("nu2", 0.5); double lambda2 = lameLambda(E2, nu2); double r = parameters.get<double>("radius"); double r2 = parameters.get<double>("radius_helix"); auto lambdaTerm = [lambda1, lambda2, r, r2] (const Domain& z) { - std::array<double,2> h = {r*cos(2*M_PI*z[0]), r*sin(2*M_PI*z[0])}; - MatrixRT ret(0.0); - if ( sqrt(pow(z[1]-h[0],2)+pow(z[2]-h[1],2)) < r2 ) - return lambda1; - else - return lambda2; - }; - + std::array<double,2> h = {r*cos(2*M_PI*z[0]), r*sin(2*M_PI*z[0])}; + MatrixRT ret(0.0); + if ( sqrt(pow(z[1]-h[0],2)+pow(z[2]-h[1],2)) < r2 ) + return lambda1; + else + return lambda2; + }; + return lambdaTerm; } - else if (imp == "chess_poisson"){ + else if (imp == "chess_poisson") { double E1 = parameters.get<double>("E1", 17e6); //Faser double nu1 = parameters.get<double>("nu1", 0.3); double lambda1 = lameLambda(E1,nu1); double E2 = parameters.get<double>("E2", 17e6); //Polymer, weicher, Querkontraktion groß - double nu2 = parameters.get<double>("nu2", 0.5); + double nu2 = parameters.get<double>("nu2", 0.5); double lambda2 = lameLambda(E2, nu2); auto lambdaTerm = [lambda1, lambda2, phi] (const Domain& z) { - if ( (isInRotatedPlane(phi, z[dim-2], z[dim-1]) and isInRotatedPlane(phi + M_PI/2 , z[dim-2], z[dim-1])) or - (isInRotatedPlane(phi + M_PI, z[dim-2], z[dim-1]) and isInRotatedPlane(phi + 3*M_PI/2, z[dim-2], z[dim-1])) ) - return lambda1; - else - return lambda2; - }; - + if ( (isInRotatedPlane(phi, z[dim-2], z[dim-1]) and isInRotatedPlane(phi + M_PI/2 , z[dim-2], z[dim-1])) or + (isInRotatedPlane(phi + M_PI, z[dim-2], z[dim-1]) and isInRotatedPlane(phi + 3*M_PI/2, z[dim-2], z[dim-1])) ) + return lambda1; + else + return lambda2; + }; + return lambdaTerm; } - // else if (imp == "3Dchess_poisson"){ - // double E1 = parameters.get<double>("E1", 17e6); //Faser - // double nu1 = parameters.get<double>("nu1", 0.3); - // double lambda1 = lameLambda(E1,nu1); - // - // double E2 = parameters.get<double>("E2", 17e6); //Polymer, weicher, Querkontraktion groß - // double nu2 = parameters.get<double>("nu2", 0.5); - // double lambda2 = lameLambda(E2, nu2); - // - // auto lambdaTerm = [lambda1, lambda2, phi] (const Domain& z) { - // if (z[0]<0.5) - // if ( (isInRotatedPlane(phi, z[1], z[2]) and isInRotatedPlane(phi + M_PI/2 , z[1], z[2])) or - // (isInRotatedPlane(phi + M_PI, z[1], z[2]) and isInRotatedPlane(phi + 3*M_PI/2, z[1], z[2])) ) - // return lambda1; - // else - // return lambda2; - // else - // if ( (isInRotatedPlane(phi, z[1], z[2]) and isInRotatedPlane(phi + M_PI/2 , z[1], z[2])) or - // (isInRotatedPlane(phi + M_PI, z[1], z[2]) and isInRotatedPlane(phi + 3*M_PI/2, z[1], z[2])) ) - // return lambda2; - // else - // return lambda1; - // }; - // - // return lambdaTerm; - // } - // - // else if (imp == "vertical_bilayer_poisson"){ - // double E1 = parameters.get<double>("E1", 17e6); //material1 - // double nu1 = parameters.get<double>("nu1", 0.3); - // double lambda1 = lameLambda(E1,nu1); - // double E2 = parameters.get<double>("E2", 17e6); //material2 - // double nu2 = parameters.get<double>("nu2", 0.5); - // double lambda2 = lameLambda(E2, nu2); - // - // auto lambdaTerm = [lambda1, lambda2, phi] (const Domain& z) { - // if ( isInRotatedPlane(phi+M_PI/2.0, z[dim-2], z[dim-1]) ) - // return lambda1; - // else - // return lambda2; }; - // - // return lambdaTerm; - // } - // - // else if (imp == "microstructured_bilayer_poisson"){ - // double E1 = parameters.get<double>("E1", 17e6); //material1 - // double nu1 = parameters.get<double>("nu1", 0.3); - // double lambda1 = lameLambda(E1,nu1); - // double E2 = parameters.get<double>("E2", 17e6); //material2 - // double nu2 = parameters.get<double>("nu2", 0.5); - // double lambda2 = lameLambda(E2, nu2); - // - // auto lambdaTerm = [lambda1, lambda2, phi] (const Domain& z) { - // if ( isInRotatedPlane(phi, z[0]-0.5, z[1]) ) - // return lambda1; - // else - // return lambda2; }; - // - // return lambdaTerm; - // } - // - // else { //(imp == "bilayer_poisson") - // double E1 = parameters.get<double>("E1", 17e6); //material1 - // double nu1 = parameters.get<double>("nu1", 0.3); - // double lambda1 = lameLambda(E1, nu1); - // double E2 = parameters.get<double>("E2", 17e6); //material2 - // double nu2 = parameters.get<double>("nu2", 0.5); - // double lambda2 = lameLambda(E2, nu2); - // - // auto lambdaTerm = [lambda1, lambda2, phi] (const Domain& z) { - // if ( isInRotatedPlane(phi, z[dim-2], z[dim-1]) ) - // return lambda1; - // else - // return lambda2; }; - // - // return lambdaTerm; - // } + // else if (imp == "3Dchess_poisson"){ + // double E1 = parameters.get<double>("E1", 17e6); //Faser + // double nu1 = parameters.get<double>("nu1", 0.3); + // double lambda1 = lameLambda(E1,nu1); + // + // double E2 = parameters.get<double>("E2", 17e6); //Polymer, weicher, Querkontraktion groß + // double nu2 = parameters.get<double>("nu2", 0.5); + // double lambda2 = lameLambda(E2, nu2); + // + // auto lambdaTerm = [lambda1, lambda2, phi] (const Domain& z) { + // if (z[0]<0.5) + // if ( (isInRotatedPlane(phi, z[1], z[2]) and isInRotatedPlane(phi + M_PI/2 , z[1], z[2])) or + // (isInRotatedPlane(phi + M_PI, z[1], z[2]) and isInRotatedPlane(phi + 3*M_PI/2, z[1], z[2])) ) + // return lambda1; + // else + // return lambda2; + // else + // if ( (isInRotatedPlane(phi, z[1], z[2]) and isInRotatedPlane(phi + M_PI/2 , z[1], z[2])) or + // (isInRotatedPlane(phi + M_PI, z[1], z[2]) and isInRotatedPlane(phi + 3*M_PI/2, z[1], z[2])) ) + // return lambda2; + // else + // return lambda1; + // }; + // + // return lambdaTerm; + // } + // + // else if (imp == "vertical_bilayer_poisson"){ + // double E1 = parameters.get<double>("E1", 17e6); //material1 + // double nu1 = parameters.get<double>("nu1", 0.3); + // double lambda1 = lameLambda(E1,nu1); + // double E2 = parameters.get<double>("E2", 17e6); //material2 + // double nu2 = parameters.get<double>("nu2", 0.5); + // double lambda2 = lameLambda(E2, nu2); + // + // auto lambdaTerm = [lambda1, lambda2, phi] (const Domain& z) { + // if ( isInRotatedPlane(phi+M_PI/2.0, z[dim-2], z[dim-1]) ) + // return lambda1; + // else + // return lambda2; }; + // + // return lambdaTerm; + // } + // + // else if (imp == "microstructured_bilayer_poisson"){ + // double E1 = parameters.get<double>("E1", 17e6); //material1 + // double nu1 = parameters.get<double>("nu1", 0.3); + // double lambda1 = lameLambda(E1,nu1); + // double E2 = parameters.get<double>("E2", 17e6); //material2 + // double nu2 = parameters.get<double>("nu2", 0.5); + // double lambda2 = lameLambda(E2, nu2); + // + // auto lambdaTerm = [lambda1, lambda2, phi] (const Domain& z) { + // if ( isInRotatedPlane(phi, z[0]-0.5, z[1]) ) + // return lambda1; + // else + // return lambda2; }; + // + // return lambdaTerm; + // } + // + // else { //(imp == "bilayer_poisson") + // double E1 = parameters.get<double>("E1", 17e6); //material1 + // double nu1 = parameters.get<double>("nu1", 0.3); + // double lambda1 = lameLambda(E1, nu1); + // double E2 = parameters.get<double>("E2", 17e6); //material2 + // double nu2 = parameters.get<double>("nu2", 0.5); + // double lambda2 = lameLambda(E2, nu2); + // + // auto lambdaTerm = [lambda1, lambda2, phi] (const Domain& z) { + // if ( isInRotatedPlane(phi, z[dim-2], z[dim-1]) ) + // return lambda1; + // else + // return lambda2; }; + // + // return lambdaTerm; + // } } @@ -931,17 +932,17 @@ public: -// TODO add log here? +// TODO add log here? template <int dim> -class PrestrainImp +class PrestrainImp { public: // static const int dim = 3; static const int dimWorld = 3; - using CellGridType = YaspGrid< dim, EquidistantOffsetCoordinates< double, dim>>; + using CellGridType = YaspGrid< dim, EquidistantOffsetCoordinates< double, dim> >; // using GridView = CellGridType::LeafGridView; using Domain = typename CellGridType::LeafGridView::template Codim<0>::Geometry::GlobalCoordinate; // using Domain = GridView::Codim<0>::Geometry::GlobalCoordinate; @@ -952,335 +953,335 @@ public: using FuncMatrix = std::function< MatrixRT(const Domain&) >; using FuncVector = std::function< VectorRT(const Domain&) >; protected: - // double p1, p2, theta; - // double width; //Cell geometry + // double p1, p2, theta; + // double width; //Cell geometry public: - + // Func2Tensor getPrestrain(std::string imp) Func2Tensor getPrestrain(ParameterTree parameters) { - + std::string imp = parameters.get<std::string>("material_prestrain_imp", "analytical_Example"); - + double width = parameters.get<double>("width", 1.0); double height = parameters.get<double>("height", 1.0); - - double theta = parameters.get<double>("theta",1.0/4.0); + + double theta = parameters.get<double>("theta",1.0/4.0); double p1 = parameters.get<double>("rho1", 1.0); double alpha = parameters.get<double>("alpha", 2.0); double p2 = alpha*p1; - - - if (imp == "homogeneous"){ + + + if (imp == "homogeneous") { Func2Tensor B = [p1] (const Domain& x) // ISOTROPIC PRESSURE - { - return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - }; + { + return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + }; std::cout <<" Prestrain Type: homogeneous" << std::endl; return B; } - else if (imp == "two_phase_material_1"){ - std::array<double,2> rho = parameters.get<std::array<double,2>>("rho", {1.0,3.0}); + else if (imp == "two_phase_material_1") { + std::array<double,2> rho = parameters.get<std::array<double,2> >("rho", {1.0,3.0}); // Python::Module module = Python::import(parameters.get<std::string>("two_phase_material_1")); Python::Module module = Python::import("two_phase_material_1"); auto indicatorFunction = Python::make_function<double>(module.get("f")); - - Func2Tensor B = [rho,indicatorFunction] (const Domain& x) - { - // std::cout << "Test:" << indicatorFunction(z) << std::endl; - if (indicatorFunction(x) == 1) - return MatrixRT{{rho[0], 0.0 , 0.0}, {0.0, rho[0], 0.0}, {0.0, 0.0, rho[0]}}; - else - return MatrixRT{{rho[1], 0.0 , 0.0}, {0.0, rho[1], 0.0}, {0.0, 0.0, rho[1]}}; - }; + + Func2Tensor B = [rho,indicatorFunction] (const Domain& x) + { + // std::cout << "Test:" << indicatorFunction(z) << std::endl; + if (indicatorFunction(x) == 1) + return MatrixRT{{rho[0], 0.0 , 0.0}, {0.0, rho[0], 0.0}, {0.0, 0.0, rho[0]}}; + else + return MatrixRT{{rho[1], 0.0 , 0.0}, {0.0, rho[1], 0.0}, {0.0, 0.0, rho[1]}}; + }; std::cout <<" Prestrain Type: two_phase_material_1" << std::endl; return B; } - else if (imp == "material_neukamm"){ -// std::array<double,2> rho = parameters.get<std::array<double,2>>("rho", {1.0,3.0}); + else if (imp == "material_neukamm") { + // std::array<double,2> rho = parameters.get<std::array<double,2>>("rho", {1.0,3.0}); // Python::Module module = Python::import(parameters.get<std::string>("two_phase_material_1")); Python::Module module = Python::import("material_neukamm"); auto indicatorFunction = Python::make_function<double>(module.get("f")); - + auto B1 = Python::make_function<MatrixRT>(module.get("b1")); auto B2 = Python::make_function<MatrixRT>(module.get("b2")); auto B3 = Python::make_function<MatrixRT>(module.get("b3")); - -// Func2Tensor B = [rho,indicatorFunction] (const Domain& x) - Func2Tensor B = [indicatorFunction,B1,B2,B3] (const Domain& x) - { - // std::cout << "Test:" << indicatorFunction(z) << std::endl; - if (indicatorFunction(x) == 1) - { -// return MatrixRT{{rho[0], 0.0 , 0.0}, {0.0, rho[0], 0.0}, {0.0, 0.0, rho[0]}}; -// printmatrix(std::cout, B1(x), "Matrix B1(x)", "--"); - return B1(x); - } - else if (indicatorFunction(x) == 2) -// return MatrixRT{{rho[1], 0.0 , 0.0}, {0.0, rho[1], 0.0}, {0.0, 0.0, rho[1]}}; - return B2(x); - else - return B3(x); - }; + + // Func2Tensor B = [rho,indicatorFunction] (const Domain& x) + Func2Tensor B = [indicatorFunction,B1,B2,B3] (const Domain& x) + { + // std::cout << "Test:" << indicatorFunction(z) << std::endl; + if (indicatorFunction(x) == 1) + { + // return MatrixRT{{rho[0], 0.0 , 0.0}, {0.0, rho[0], 0.0}, {0.0, 0.0, rho[0]}}; + // printmatrix(std::cout, B1(x), "Matrix B1(x)", "--"); + return B1(x); + } + else if (indicatorFunction(x) == 2) + // return MatrixRT{{rho[1], 0.0 , 0.0}, {0.0, rho[1], 0.0}, {0.0, 0.0, rho[1]}}; + return B2(x); + else + return B3(x); + }; std::cout <<" Prestrain Type: material_neukamm" << std::endl; return B; } - else if (imp == "two_phase_material_2"){ - std::array<double,2> rho = parameters.get<std::array<double,2>>("rho", {1.0,3.0}); + else if (imp == "two_phase_material_2") { + std::array<double,2> rho = parameters.get<std::array<double,2> >("rho", {1.0,3.0}); // Python::Module module = Python::import(parameters.get<std::string>("two_phase_material_1")); Python::Module module = Python::import("two_phase_material_2"); auto indicatorFunction = Python::make_function<double>(module.get("f")); - - Func2Tensor B = [rho,indicatorFunction] (const Domain& x) - { - // std::cout << "Test:" << indicatorFunction(z) << std::endl; - if (indicatorFunction(x) == 1) - return MatrixRT{{rho[0], 0.0 , 0.0}, {0.0, rho[0], 0.0}, {0.0, 0.0, rho[0]}}; - else - return MatrixRT{{rho[1], 0.0 , 0.0}, {0.0, rho[1], 0.0}, {0.0, 0.0, rho[1]}}; - }; + + Func2Tensor B = [rho,indicatorFunction] (const Domain& x) + { + // std::cout << "Test:" << indicatorFunction(z) << std::endl; + if (indicatorFunction(x) == 1) + return MatrixRT{{rho[0], 0.0 , 0.0}, {0.0, rho[0], 0.0}, {0.0, 0.0, rho[0]}}; + else + return MatrixRT{{rho[1], 0.0 , 0.0}, {0.0, rho[1], 0.0}, {0.0, 0.0, rho[1]}}; + }; std::cout <<" Prestrain Type: two_phase_material_2" << std::endl; return B; } - else if (imp == "two_phase_material_3"){ - std::array<double,2> rho = parameters.get<std::array<double,2>>("rho", {1.0,3.0}); + else if (imp == "two_phase_material_3") { + std::array<double,2> rho = parameters.get<std::array<double,2> >("rho", {1.0,3.0}); // Python::Module module = Python::import(parameters.get<std::string>("two_phase_material_1")); Python::Module module = Python::import("two_phase_material_3"); auto indicatorFunction = Python::make_function<double>(module.get("f")); - - Func2Tensor B = [rho,indicatorFunction] (const Domain& x) - { - // std::cout << "Test:" << indicatorFunction(z) << std::endl; - if (indicatorFunction(x) == 1) - return MatrixRT{{rho[0], 0.0 , 0.0}, {0.0, rho[0], 0.0}, {0.0, 0.0, rho[0]}}; - else - return MatrixRT{{rho[1], 0.0 , 0.0}, {0.0, rho[1], 0.0}, {0.0, 0.0, rho[1]}}; - }; + + Func2Tensor B = [rho,indicatorFunction] (const Domain& x) + { + // std::cout << "Test:" << indicatorFunction(z) << std::endl; + if (indicatorFunction(x) == 1) + return MatrixRT{{rho[0], 0.0 , 0.0}, {0.0, rho[0], 0.0}, {0.0, 0.0, rho[0]}}; + else + return MatrixRT{{rho[1], 0.0 , 0.0}, {0.0, rho[1], 0.0}, {0.0, 0.0, rho[1]}}; + }; std::cout <<" Prestrain Type: two_phase_material_3" << std::endl; return B; } else if (imp == "isotropic_bilayer") - { - Func2Tensor B = [p1,p2,theta] (const Domain& x) // ISOTROPIC PRESSURE - { - if (x[2] > 0) - return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - else if (x[2] < 0) - return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; - else - return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - - }; - std::cout <<" Prestrain Type: isotropic_bilayer " << std::endl; - return B; - } - + { + Func2Tensor B = [p1,p2,theta] (const Domain& x) // ISOTROPIC PRESSURE + { + if (x[2] > 0) + return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + else if (x[2] < 0) + return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; + else + return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + + }; + std::cout <<" Prestrain Type: isotropic_bilayer " << std::endl; + return B; + } + else if (imp == "analytical_Example") - { - Func2Tensor B = [p1,theta] (const Domain& x) // Bilayer with one rectangular Fiber & ISOTROPIC PRESSURE - { - // if (abs(x[0]) < (theta/2) && x[2] < 0 ) //does not make a difference - if (abs(x[0]) < (theta/2) && x[2] < 0 && x[2] > -(1.0/2.0) ) - return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - else - return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - }; - std::cout <<" Prestrain Type: analytical_Example "<< std::endl; - return B; - } + { + Func2Tensor B = [p1,theta] (const Domain& x) // Bilayer with one rectangular Fiber & ISOTROPIC PRESSURE + { + // if (abs(x[0]) < (theta/2) && x[2] < 0 ) //does not make a difference + if (abs(x[0]) < (theta/2) && x[2] < 0 && x[2] > -(1.0/2.0) ) + return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + else + return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + }; + std::cout <<" Prestrain Type: analytical_Example "<< std::endl; + return B; + } else if (imp == "parametrized_Laminate") - { - Func2Tensor B = [p1,p2,theta] (const Domain& x) - { - if (abs(x[0]) < (theta/2) && x[2] < 0 ) - return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; - else if (abs(x[0]) > (theta/2) && x[2] > 0 ) - return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - else - return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - }; - std::cout <<"Prestrain Type: parametrized_Laminate"<< std::endl; - return B; - } - else if (imp == "circle_fiber"){ - - Func2Tensor B = [p1,theta,width] (const Domain& x) // Bilayer with one rectangular Fiber & ISOTROPIC PRESSURE - { - if (x[0] < 0 && sqrt(pow(x[1],2) + pow(x[2],2) ) < width/4.0 || 0 < x[0] && sqrt(pow(x[1],2) + pow(x[2],2) ) > width/4.0) - return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - else - return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - }; + { + Func2Tensor B = [p1,p2,theta] (const Domain& x) + { + if (abs(x[0]) < (theta/2) && x[2] < 0 ) + return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; + else if (abs(x[0]) > (theta/2) && x[2] > 0 ) + return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + else + return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + }; + std::cout <<"Prestrain Type: parametrized_Laminate"<< std::endl; + return B; + } + else if (imp == "circle_fiber") { + + Func2Tensor B = [p1,theta,width] (const Domain& x) // Bilayer with one rectangular Fiber & ISOTROPIC PRESSURE + { + if (x[0] < 0 && sqrt(pow(x[1],2) + pow(x[2],2) ) < width/4.0 || 0 < x[0] && sqrt(pow(x[1],2) + pow(x[2],2) ) > width/4.0) + return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + else + return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + }; std::cout <<" Prestrain Type: circle_fiber"<< std::endl; return B; } - else if (imp == "square_fiber"){ - - Func2Tensor B = [p1,theta,width] (const Domain& x) // Bilayer with one rectangular Fiber & ISOTROPIC PRESSURE - { - if (x[0] < 0 && std::max(abs(x[1]), abs(x[2])) < width/4.0 || 0 < x[0] && std::max(abs(x[1]), abs(x[2])) > width/4.0) - return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - else - return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - }; + else if (imp == "square_fiber") { + + Func2Tensor B = [p1,theta,width] (const Domain& x) // Bilayer with one rectangular Fiber & ISOTROPIC PRESSURE + { + if (x[0] < 0 && std::max(abs(x[1]), abs(x[2])) < width/4.0 || 0 < x[0] && std::max(abs(x[1]), abs(x[2])) > width/4.0) + return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + else + return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + }; std::cout <<" Prestrain Type: square_fiber"<< std::endl; return B; } else if (imp == "matrix_material_circles") // Matrix material with prestrained Fiber inclusions - { - int nF = parameters.get<int>("nF", 3); //number of Fibers in each Layer - double rF = parameters.get<double>("rF", 0.5*(width/(2.0*nF)) ); //default: half of the max-fiber-radius mrF = (width/(2.0*nF)) - - assert( (2*rF)*nF <= width && (height/4)+rF <= height); //check that fibers are not bigger than Domain - - Func2Tensor B = [p1,p2,theta,nF,rF,height,width] (const Domain& x) - { - //TODO if Domain == 1... if Domain == 2 ... - // double domainShift = 1.0/2.0; - double domainShift = 0.0; - // shift x to domain [0,1]^3 - FieldVector<double,3> s = {x[0]+domainShift, x[1]+domainShift, x[2]+domainShift}; - - MatrixRT output; - - // determine if point is in upper/lower Layer - if ((0.0 <= s[2] && s[2] <= 1.0/2.0)) // upperLayer - { - for(size_t i=0; i<nF ;i++) // running through all the Fibers.. - { - if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/nF)*(i+1)) - { - // compute Fiber center - FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , 1.0/4.0}; - // - if(sqrt(pow(s[0]-Fcenter[0],2)+pow(s[2]-Fcenter[1],2)) <= rF ) - output = MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - // return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - else - output = MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - // return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - // return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; - } - } - } - else // lower Layer - { - for(size_t i=0; i<nF ;i++) // running through all the Fibers.. - { - if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/nF)*(i+1)) - { - // compute Fiber center - FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , -1.0/4.0}; - - if(sqrt(pow(s[0]-Fcenter[0],2)+pow(s[2]-Fcenter[1],2)) <= rF ) - output = MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - // return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - else - output = MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - // return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - // return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; - } - } - - } - return output; - }; - std::cout <<" Prestrain Type: matrix_material"<< std::endl; - return B; - } - + { + int nF = parameters.get<int>("nF", 3); //number of Fibers in each Layer + double rF = parameters.get<double>("rF", 0.5*(width/(2.0*nF)) ); //default: half of the max-fiber-radius mrF = (width/(2.0*nF)) + + assert( (2*rF)*nF <= width && (height/4)+rF <= height); //check that fibers are not bigger than Domain + + Func2Tensor B = [p1,p2,theta,nF,rF,height,width] (const Domain& x) + { + //TODO if Domain == 1... if Domain == 2 ... + // double domainShift = 1.0/2.0; + double domainShift = 0.0; + // shift x to domain [0,1]^3 + FieldVector<double,3> s = {x[0]+domainShift, x[1]+domainShift, x[2]+domainShift}; + + MatrixRT output; + + // determine if point is in upper/lower Layer + if ((0.0 <= s[2] && s[2] <= 1.0/2.0)) // upperLayer + { + for(size_t i=0; i<nF ; i++) // running through all the Fibers.. + { + if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/nF)*(i+1)) + { + // compute Fiber center + FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , 1.0/4.0}; + // + if(sqrt(pow(s[0]-Fcenter[0],2)+pow(s[2]-Fcenter[1],2)) <= rF ) + output = MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + // return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + else + output = MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + // return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + // return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; + } + } + } + else // lower Layer + { + for(size_t i=0; i<nF ; i++) // running through all the Fibers.. + { + if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/nF)*(i+1)) + { + // compute Fiber center + FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , -1.0/4.0}; + + if(sqrt(pow(s[0]-Fcenter[0],2)+pow(s[2]-Fcenter[1],2)) <= rF ) + output = MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + // return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + else + output = MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + // return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + // return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; + } + } + + } + return output; + }; + std::cout <<" Prestrain Type: matrix_material"<< std::endl; + return B; + } + else if (imp == "matrix_material_squares") // Matrix material with prestrained Fiber inclusions - { - int nF = parameters.get<int>("nF", 3); //number of Fibers in each Layer - double rF = parameters.get<double>("rF", 0.5*(width/(2.0*nF)) ); //default: half of the max-fiber-radius mrF = (width/(2.0*nF)) - - assert( (2*rF)*nF <= width && (height/4)+rF <= height); //check that fibers are not bigger than Domain - - Func2Tensor B = [p1,p2,theta,nF,rF,height,width] (const Domain& x) - { - //TODO if Domain == 1... if Domain == 2 ... - // double domainShift = 1.0/2.0; - double domainShift = 0.0; - // shift x to domain [0,1]^3 - FieldVector<double,3> s = {x[0]+domainShift, x[1]+domainShift, x[2]+domainShift}; - - MatrixRT output; - - // determine if point is in upper/lower Layer - if ((0.0 <= s[2] && s[2] <= 1.0/2.0)) // upperLayer - { - for(size_t i=0; i<nF ;i++) // running through all the Fibers.. - { - if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/nF)*(i+1)) - { - // compute Fiber center - FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , 1.0/4.0}; - // - if(std::max( abs(s[0]-Fcenter[0]), abs(s[2]-Fcenter[1]) ) <= rF ) - output = MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - // return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - else - output = MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - // return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - // return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; - } - } - } - else // lower Layer - { - for(size_t i=0; i<nF ;i++) // running through all the Fibers.. - { - if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/nF)*(i+1)) - { - // compute Fiber center - FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , -1.0/4.0}; - - if(std::max( abs(s[0]-Fcenter[0]), abs(s[2]-Fcenter[1]) ) <= rF ) - output = MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - // return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - else - output = MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - // return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - // return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; - } - } - - } - return output; - }; - std::cout <<" Prestrain Type: matrix_material"<< std::endl; - return B; - } - else - { - // TODO other geometries etc... - - } + { + int nF = parameters.get<int>("nF", 3); //number of Fibers in each Layer + double rF = parameters.get<double>("rF", 0.5*(width/(2.0*nF)) ); //default: half of the max-fiber-radius mrF = (width/(2.0*nF)) + + assert( (2*rF)*nF <= width && (height/4)+rF <= height); //check that fibers are not bigger than Domain + + Func2Tensor B = [p1,p2,theta,nF,rF,height,width] (const Domain& x) + { + //TODO if Domain == 1... if Domain == 2 ... + // double domainShift = 1.0/2.0; + double domainShift = 0.0; + // shift x to domain [0,1]^3 + FieldVector<double,3> s = {x[0]+domainShift, x[1]+domainShift, x[2]+domainShift}; + + MatrixRT output; + + // determine if point is in upper/lower Layer + if ((0.0 <= s[2] && s[2] <= 1.0/2.0)) // upperLayer + { + for(size_t i=0; i<nF ; i++) // running through all the Fibers.. + { + if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/nF)*(i+1)) + { + // compute Fiber center + FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , 1.0/4.0}; + // + if(std::max( abs(s[0]-Fcenter[0]), abs(s[2]-Fcenter[1]) ) <= rF ) + output = MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + // return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + else + output = MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + // return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + // return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; + } + } + } + else // lower Layer + { + for(size_t i=0; i<nF ; i++) // running through all the Fibers.. + { + if(-1.0/2.0 + (1.0/nF)*i<= s[0] && s[0] <= -1.0/2.0 + (1.0/nF)*(i+1)) + { + // compute Fiber center + FieldVector<double,2> Fcenter = { (1.0/(2.0*nF))+((1.0/double(nF))*i)-(1.0/2.0) , -1.0/4.0}; + + if(std::max( abs(s[0]-Fcenter[0]), abs(s[2]-Fcenter[1]) ) <= rF ) + output = MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + // return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + else + output = MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + // return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + // return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; + } + } + + } + return output; + }; + std::cout <<" Prestrain Type: matrix_material"<< std::endl; + return B; + } + else + { + // TODO other geometries etc... + + } // TODO ANISOTROPIC PRESSURE - + } - - - + + + FuncScalar getNormPrestrain(const FuncMatrix& B) { FuncScalar normB = [&](const Domain& z) { - return norm(B(z)); - }; - return normB; + return norm(B(z)); + }; + return normB; } diff --git a/dune/microstructure/deprecated_headers/prestrainimp.hh b/dune/microstructure/deprecated_headers/prestrainimp.hh index 443de31641e6406e5702a52621ab49606ddb0d07..adc6470d95639c9408e976328e93077534d64263 100644 --- a/dune/microstructure/deprecated_headers/prestrainimp.hh +++ b/dune/microstructure/deprecated_headers/prestrainimp.hh @@ -15,99 +15,99 @@ class PrestrainImp { public: - static const int dim = 3; - static const int nCompo = 3; + static const int dim = 3; + static const int nCompo = 3; -// using GridType_Ce = typename MicrostructuredRodGrid::CellGridType; - using CellGridType = YaspGrid< dim, EquidistantOffsetCoordinates< double, dim>>; - using GridView = CellGridType::LeafGridView; - using Domain = GridView::Codim<0>::Geometry::GlobalCoordinate; + // using GridType_Ce = typename MicrostructuredRodGrid::CellGridType; + using CellGridType = YaspGrid< dim, EquidistantOffsetCoordinates< double, dim> >; + using GridView = CellGridType::LeafGridView; + using Domain = GridView::Codim<0>::Geometry::GlobalCoordinate; - using MatrixRT = FieldMatrix< double, nCompo, nCompo>; - using Func2Tensor = std::function< MatrixRT(const Domain&) >; -// using Domain = typename GridType_Ce::LeafGridView::template Codim<0>::Geometry::GlobalCoordinate; -// using MatrixRT = FieldMatrix< double, nCompo, nCompo>; -// using Func2Tensor = std::function< MatrixRT(const Domain&) >; + using MatrixRT = FieldMatrix< double, nCompo, nCompo>; + using Func2Tensor = std::function< MatrixRT(const Domain&) >; + // using Domain = typename GridType_Ce::LeafGridView::template Codim<0>::Geometry::GlobalCoordinate; + // using MatrixRT = FieldMatrix< double, nCompo, nCompo>; + // using Func2Tensor = std::function< MatrixRT(const Domain&) >; protected: - double p1, p2, theta; - double width; //cell geometry + double p1, p2, theta; + double width; //cell geometry public: - PrestrainImp(double p1, double p2, double theta, double width) : p1(p1), p2(p2), theta(theta), width(width){} + PrestrainImp(double p1, double p2, double theta, double width) : p1(p1), p2(p2), theta(theta), width(width){} - Func2Tensor getPrestrain(unsigned int imp) + Func2Tensor getPrestrain(unsigned int imp) + { + using std::pow; + using std::abs; + using std::sqrt; + using std::sin; + using std::cos; + + if (imp==1) { - using std::pow; - using std::abs; - using std::sqrt; - using std::sin; - using std::cos; - - if (imp==1) - { - - Func2Tensor B1_ = [this] (const Domain& x) { // ISOTROPIC PRESSURE - if (abs(x[0]) > (theta/2) && x[2] > 0) - return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - if (abs(x[0]) < (theta/2) && x[2] < 0) - return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; - else - return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - - }; - std::cout <<" Prestrain Type: 1 "<< std::endl; - return B1_; - } - else if (imp==2) - { - Func2Tensor B2_ = [this] (const Domain& x) { // Bilayer with one rectangular Fiber & ISOTROPIC PRESSURE - - if (abs(x[0]) < (theta/2) && x[2] < 0 && x[2] > -(1.0/2.0) ) - return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; - else - return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; - - - }; - std::cout <<" Prestrain Type: 2 "<< std::endl; - return B2_; - - - } - - - - - // TODO ANISOTROPIC PRESSURE - -// else if (imp==2) -// { -// -// Func2Tensor B2_ = [this] (const Domain& z) -// { -// auto pi = std::acos(-1.0); -// double beta = pi/4.0 + pi/4.0*z[1]; //z[1]=x3 -// MatrixRT Id(0); -// for (int i=0;i<nCompo;i++) -// Id[i][i]=1.0; -// MatrixRT pressure = Id; -// pressure *= 1.0/6.0; -// MatrixRT n_ot_n = { -// {cos(beta)*cos(beta), 0.0, cos(beta)*sin(beta)}, -// {0.0, 0.0, 0.0 }, -// {cos(beta)*sin(beta), 0.0, sin(beta)*sin(beta)} -// }; -// n_ot_n*=0.5; -// pressure += n_ot_n; -// pressure *= this->a; -// return pressure; -// }; -// return B2_; -// } + + Func2Tensor B1_ = [this] (const Domain& x) { // ISOTROPIC PRESSURE + if (abs(x[0]) > (theta/2) && x[2] > 0) + return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + if (abs(x[0]) < (theta/2) && x[2] < 0) + return MatrixRT{{p2, 0.0 , 0.0}, {0.0, p2, 0.0}, {0.0, 0.0, p2}}; + else + return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + + }; + std::cout <<" Prestrain Type: 1 "<< std::endl; + return B1_; } + else if (imp==2) + { + Func2Tensor B2_ = [this] (const Domain& x) { // Bilayer with one rectangular Fiber & ISOTROPIC PRESSURE + + if (abs(x[0]) < (theta/2) && x[2] < 0 && x[2] > -(1.0/2.0) ) + return MatrixRT{{p1, 0.0 , 0.0}, {0.0, p1, 0.0}, {0.0, 0.0, p1}}; + else + return MatrixRT{{0.0, 0.0 , 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}}; + + + }; + std::cout <<" Prestrain Type: 2 "<< std::endl; + return B2_; + + + } + + + + + // TODO ANISOTROPIC PRESSURE + + // else if (imp==2) + // { + // + // Func2Tensor B2_ = [this] (const Domain& z) + // { + // auto pi = std::acos(-1.0); + // double beta = pi/4.0 + pi/4.0*z[1]; //z[1]=x3 + // MatrixRT Id(0); + // for (int i=0;i<nCompo;i++) + // Id[i][i]=1.0; + // MatrixRT pressure = Id; + // pressure *= 1.0/6.0; + // MatrixRT n_ot_n = { + // {cos(beta)*cos(beta), 0.0, cos(beta)*sin(beta)}, + // {0.0, 0.0, 0.0 }, + // {cos(beta)*sin(beta), 0.0, sin(beta)*sin(beta)} + // }; + // n_ot_n*=0.5; + // pressure += n_ot_n; + // pressure *= this->a; + // return pressure; + // }; + // return B2_; + // } + } }; diff --git a/dune/microstructure/deprecated_headers/vtk_filler.hh b/dune/microstructure/deprecated_headers/vtk_filler.hh index aa61fb2c1c8b475338d0d9def75e57c8709180ca..191272d3a09614ec3c7dfdc56f6eef1a5feafc0a 100644 --- a/dune/microstructure/deprecated_headers/vtk_filler.hh +++ b/dune/microstructure/deprecated_headers/vtk_filler.hh @@ -8,819 +8,819 @@ #include <dune/microstructure/prestrain_material_geometry.hh> - using std::string; - using namespace Dune; - using namespace Functions; - using namespace Functions::BasisFactory; - - //static const int dimworld = 3; - - //using GT = UGGrid<dim>; //typename MicrostructuredRodGrid::GT<dim>; - //using GV = typename GT::LeafGridView; - /* - using MatrixRT = FieldMatrix< double, dimworld, dimworld>; - using VectorRT = FieldVector< double, dimworld>; - using ScalarRT = double; - - - using ScalarCT = std::vector<double>; - using VectorCT = BlockVector<FieldVector<double,1> >; - - using HierarchicVectorView = Dune::Functions::HierarchicVectorWrapper< VectorCT, double>; -*/ - /* - template<class Basis> - static auto scalarDiscGlobalBasisFunc( - const Basis& feBasis, - std::function< double(const typename Basis::GridView::template Codim<0>::Geometry::GlobalCoordinate&) >& scalarFunc) - { - ScalarCT values; - Functions::interpolate(feBasis, values, scalarFunc); - auto discGlobalBasisFunc = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (feBasis, values); - return discGlobalBasisFunc; - } - - template<class Basis> - static auto vectorDiscGlobalBasisFunc( - const Basis& feBasis, - std::function< FieldVector< double, dimworld>(const typename Basis::GridView::template Codim<0>::Geometry::GlobalCoordinate&) >& vectorFunc) - { - VectorCT values; - Functions::interpolate(feBasis, values, vectorFunc); - auto discGlobalBasisFunc = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(feBasis), HierarchicVectorView(values)); - return discGlobalBasisFunc; - } -*/ - -template <int dim> -class FTKfillerContainer { - -public: - - static const int dimworld = 3; - -// using GT = UGGrid<dim>; //typename MicrostructuredRodGrid::GT<dim>; - using GT =YaspGrid<dim, EquidistantOffsetCoordinates<double, dim> >; - using GV = typename GT::LeafGridView; - using Domain = typename GV::template Codim<0>::Geometry::GlobalCoordinate; - using MatrixRT = FieldMatrix< double, dimworld, dimworld>; - using VectorRT = FieldVector< double, dimworld>; - using ScalarRT = double; - using FuncMatrix = std::function< MatrixRT(const Domain&) >; - using FuncVector = std::function< VectorRT(const Domain&) >; - using FuncScalar = std::function< ScalarRT(const Domain&) >; +using std::string; +using namespace Dune; +using namespace Functions; +using namespace Functions::BasisFactory; - using ScalarCT = std::vector<double>; - using VectorCT = BlockVector<FieldVector<double,1> >; - using HierarchicVectorView = Dune::Functions::HierarchicVectorWrapper< VectorCT, double>; +//static const int dimworld = 3; +//using GT = UGGrid<dim>; //typename MicrostructuredRodGrid::GT<dim>; +//using GV = typename GT::LeafGridView; +/* + using MatrixRT = FieldMatrix< double, dimworld, dimworld>; + using VectorRT = FieldVector< double, dimworld>; + using ScalarRT = double; - void vtkPrestrainNorm(const GV& gridView, const FuncMatrix& B, string filename) // Updated - { - VTKWriter<typename GT::LeafGridView> vtkWriter(gridView); - Functions::LagrangeBasis<typename GT::LeafGridView, 1> feBasis(gridView); - FuncScalar normB = PrestrainImp<dim>().getNormPrestrain(B); -// auto discGlobalBasisFunc = scalarDiscGlobalBasisFunc(feBasis, normB); - auto discGlobalBasisFunc = Dune::Functions::makeGridViewFunction(normB, gridView); -// auto muLocal = localFunction(muGridF); + using ScalarCT = std::vector<double>; + using VectorCT = BlockVector<FieldVector<double,1> >; + using HierarchicVectorView = Dune::Functions::HierarchicVectorWrapper< VectorCT, double>; + */ +/* + template<class Basis> + static auto scalarDiscGlobalBasisFunc( + const Basis& feBasis, + std::function< double(const typename Basis::GridView::template Codim<0>::Geometry::GlobalCoordinate&) >& scalarFunc) + { + ScalarCT values; + Functions::interpolate(feBasis, values, scalarFunc); + auto discGlobalBasisFunc = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (feBasis, values); + return discGlobalBasisFunc; + } + + template<class Basis> + static auto vectorDiscGlobalBasisFunc( + const Basis& feBasis, + std::function< FieldVector< double, dimworld>(const typename Basis::GridView::template Codim<0>::Geometry::GlobalCoordinate&) >& vectorFunc) + { + VectorCT values; + Functions::interpolate(feBasis, values, vectorFunc); + auto discGlobalBasisFunc = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(feBasis), HierarchicVectorView(values)); + return discGlobalBasisFunc; + } + */ - ScalarCT values; - Functions::interpolate(feBasis, values, normB); - auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (feBasis, values); - vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); - vtkWriter.write(filename); +template <int dim> +class FTKfillerContainer { - } +public: - void vtkPrestrainDirector(const typename GT::LeafGridView& gridView, const FuncVector& b, string filename) - { - VTKWriter<typename GT::LeafGridView> vtkWriter(gridView); + static const int dimworld = 3; - using namespace Functions::BasisFactory; + // using GT = UGGrid<dim>; //typename MicrostructuredRodGrid::GT<dim>; + using GT =YaspGrid<dim, EquidistantOffsetCoordinates<double, dim> >; + using GV = typename GT::LeafGridView; + using Domain = typename GV::template Codim<0>::Geometry::GlobalCoordinate; + using MatrixRT = FieldMatrix< double, dimworld, dimworld>; + using VectorRT = FieldVector< double, dimworld>; + using ScalarRT = double; + using FuncMatrix = std::function< MatrixRT(const Domain&) >; + using FuncVector = std::function< VectorRT(const Domain&) >; + using FuncScalar = std::function< ScalarRT(const Domain&) >; - auto basis_CE = makeBasis( - gridView, - power<dimworld>( - lagrange<1>(), - flatLexicographic()));//flatInterleaved() + using ScalarCT = std::vector<double>; + using VectorCT = BlockVector<FieldVector<double,1> >; + using HierarchicVectorView = Dune::Functions::HierarchicVectorWrapper< VectorCT, double>; - VectorCT values; - Functions::interpolate(basis_CE, values, b); - auto b_DGBF = Functions::makeDiscreteGlobalBasisFunction< VectorRT > (basis_CE, values); - vtkWriter.addVertexData(b_DGBF, VTK::FieldInfo("prestrain_director", VTK::FieldInfo::Type::vector, dimworld)); - vtkWriter.write(filename); - } + void vtkPrestrainNorm(const GV& gridView, const FuncMatrix& B, string filename) // Updated + { + VTKWriter<typename GT::LeafGridView> vtkWriter(gridView); + Functions::LagrangeBasis<typename GT::LeafGridView, 1> feBasis(gridView); + FuncScalar normB = PrestrainImp<dim>().getNormPrestrain(B); + // auto discGlobalBasisFunc = scalarDiscGlobalBasisFunc(feBasis, normB); + auto discGlobalBasisFunc = Dune::Functions::makeGridViewFunction(normB, gridView); + // auto muLocal = localFunction(muGridF); - void vtkMaterialCell(const GV& gridView_CE, - const FuncScalar& mu_Func, - std::string filename) - { - std::cout << "vtkMaterialCell ...\n"; + ScalarCT values; + Functions::interpolate(feBasis, values, normB); + auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (feBasis, values); + vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); + vtkWriter.write(filename); - VTKWriter<GV> vtkWriter(gridView_CE); + } - // Scalar data - Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_CE); + void vtkPrestrainDirector(const typename GT::LeafGridView& gridView, const FuncVector& b, string filename) + { + VTKWriter<typename GT::LeafGridView> vtkWriter(gridView); - ScalarCT material_Coeff; - Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); - auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, material_Coeff); - vtkWriter.addCellData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); + using namespace Functions::BasisFactory; - vtkWriter.write(filename); + auto basis_CE = makeBasis( + gridView, + power<dimworld>( + lagrange<1>(), + flatLexicographic()));//flatInterleaved() - std::cout << "vtkMaterialCell done.\n"; - } + VectorCT values; + Functions::interpolate(basis_CE, values, b); + auto b_DGBF = Functions::makeDiscreteGlobalBasisFunction< VectorRT > (basis_CE, values); + vtkWriter.addVertexData(b_DGBF, VTK::FieldInfo("prestrain_director", VTK::FieldInfo::Type::vector, dimworld)); + vtkWriter.write(filename); + } - void vtkMaterial3DRod(const GV& gridView_R3D, double eps, - const FuncVector& domain_Func, const FuncScalar& mu_Func, - std::string filename) - { - std::cout << "vtkProblem ...\n"; + void vtkMaterialCell(const GV& gridView_CE, + const FuncScalar& mu_Func, + std::string filename) + { - VTKWriter<GV> vtkWriter(gridView_R3D); + std::cout << "vtkMaterialCell ...\n"; - // Vector data - const auto basis_R3D = makeBasis(gridView_R3D, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() + VTKWriter<GV> vtkWriter(gridView_CE); - VectorCT domain_Coeff; - Functions::interpolate(basis_R3D, domain_Coeff, domain_Func); - auto domain_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(domain_Coeff)); - vtkWriter.addVertexData(domain_DGBF, VTK::FieldInfo("Domain", VTK::FieldInfo::Type::vector, 3)); + // Scalar data + Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_CE); - // Scalar data - Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_R3D); + ScalarCT material_Coeff; + Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); + auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, material_Coeff); + vtkWriter.addCellData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); - ScalarCT material_Coeff; - Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); - auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, material_Coeff); - vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); + vtkWriter.write(filename); - vtkWriter.write(filename); + std::cout << "vtkMaterialCell done.\n"; + } - std::cout << "vtkProblem done.\n"; - } + void vtkMaterial3DRod(const GV& gridView_R3D, double eps, + const FuncVector& domain_Func, const FuncScalar& mu_Func, + std::string filename) + { - void vtkProblemCell(const GV& gridView_CE, - const FuncMatrix& B_Func, const FuncScalar& mu_Func, - std::string filename) - { + std::cout << "vtkProblem ...\n"; - std::cout << "vtkProblemCell ...\n"; - - VTKWriter<GV> vtkWriter(gridView_CE); - - // Vector data - const auto basis_CE = makeBasis(gridView_CE, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() - - - FuncVector Be1_Func = [B_Func](const auto& x) - { - return B_Func(x)[0]; - }; - VectorCT Be1_Coeff; - Functions::interpolate(basis_CE, Be1_Coeff, Be1_Func); - auto Be1_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be1_Coeff)); - vtkWriter.addVertexData(Be1_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); - - FuncVector Be2_Func = [B_Func](const auto& x) - { - return B_Func(x)[1]; - }; - VectorCT Be2_Coeff; - Functions::interpolate(basis_CE, Be2_Coeff, Be2_Func); - auto Be2_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be2_Coeff)); - vtkWriter.addVertexData(Be2_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be3_Func = [B_Func](const auto& x) - { - return B_Func(x)[2]; - }; - VectorCT Be3_Coeff; - Functions::interpolate(basis_CE, Be3_Coeff, Be3_Func); - auto Be3_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be3_Coeff)); - vtkWriter.addVertexData(Be3_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); - - // Scalar data - Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_CE); - FuncScalar normB_Func = PrestrainImp<dim>().getNormPrestrain(B_Func); - ScalarCT prestrain_Coeff; - Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_Func); - auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, prestrain_Coeff); - vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); - - ScalarCT material_Coeff; - Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); - auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, material_Coeff); - vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); - - vtkWriter.write(filename); - - std::cout << "vtkProblem done.\n"; - } + VTKWriter<GV> vtkWriter(gridView_R3D); - void vtkProblemCellBVec(const GV& gridView_CE, - const FuncMatrix& B_Func, const FuncVector& B_vec_Func, const FuncScalar& mu_Func, - std::string filename) - { + // Vector data + const auto basis_R3D = makeBasis(gridView_R3D, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() - std::cout << "vtkProblemCellBVec ...\n"; + VectorCT domain_Coeff; + Functions::interpolate(basis_R3D, domain_Coeff, domain_Func); + auto domain_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(domain_Coeff)); + vtkWriter.addVertexData(domain_DGBF, VTK::FieldInfo("Domain", VTK::FieldInfo::Type::vector, 3)); - VTKWriter<GV> vtkWriter(gridView_CE); + // Scalar data + Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_R3D); - // Vector data - const auto basis_CE = makeBasis(gridView_CE, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() + ScalarCT material_Coeff; + Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); + auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, material_Coeff); + vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); + vtkWriter.write(filename); - FuncVector Be1_Func = [B_Func](const auto& x) - { - return B_Func(x)[0]; - }; - VectorCT Be1_Coeff; - Functions::interpolate(basis_CE, Be1_Coeff, Be1_Func); - auto Be1_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be1_Coeff)); - vtkWriter.addVertexData(Be1_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); + std::cout << "vtkProblem done.\n"; + } - FuncVector Be2_Func = [B_Func](const auto& x) - { - return B_Func(x)[1]; - }; - VectorCT Be2_Coeff; - Functions::interpolate(basis_CE, Be2_Coeff, Be2_Func); - auto Be2_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be2_Coeff)); - vtkWriter.addVertexData(Be2_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); + void vtkProblemCell(const GV& gridView_CE, + const FuncMatrix& B_Func, const FuncScalar& mu_Func, + std::string filename) + { + std::cout << "vtkProblemCell ...\n"; - FuncVector Be3_Func = [B_Func](const auto& x) - { - return B_Func(x)[2]; - }; - VectorCT Be3_Coeff; - Functions::interpolate(basis_CE, Be3_Coeff, Be3_Func); - auto Be3_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be3_Coeff)); - vtkWriter.addVertexData(Be3_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); + VTKWriter<GV> vtkWriter(gridView_CE); + // Vector data + const auto basis_CE = makeBasis(gridView_CE, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() - VectorCT B_vec_Coeff; - Functions::interpolate(basis_CE, B_vec_Coeff, B_vec_Func); - auto B_vec_DGBF = Functions::makeDiscreteGlobalBasisFunction< VectorRT > (basis_CE, B_vec_Coeff); - vtkWriter.addVertexData(B_vec_DGBF, VTK::FieldInfo("B_vec", VTK::FieldInfo::Type::vector, dimworld)); + FuncVector Be1_Func = [B_Func](const auto& x) + { + return B_Func(x)[0]; + }; + VectorCT Be1_Coeff; + Functions::interpolate(basis_CE, Be1_Coeff, Be1_Func); + auto Be1_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be1_Coeff)); + vtkWriter.addVertexData(Be1_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); - // Scalar data - Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_CE); + FuncVector Be2_Func = [B_Func](const auto& x) + { + return B_Func(x)[1]; + }; + VectorCT Be2_Coeff; + Functions::interpolate(basis_CE, Be2_Coeff, Be2_Func); + auto Be2_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be2_Coeff)); + vtkWriter.addVertexData(Be2_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); - FuncScalar normB_Func = PrestrainImp<dim>().getNormPrestrain(B_Func); - ScalarCT prestrain_Coeff; - Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_Func); - auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, prestrain_Coeff); - vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); - ScalarCT material_Coeff; - Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); - auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, material_Coeff); - vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); + FuncVector Be3_Func = [B_Func](const auto& x) + { + return B_Func(x)[2]; + }; + VectorCT Be3_Coeff; + Functions::interpolate(basis_CE, Be3_Coeff, Be3_Func); + auto Be3_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be3_Coeff)); + vtkWriter.addVertexData(Be3_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); - vtkWriter.write(filename); + // Scalar data + Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_CE); + FuncScalar normB_Func = PrestrainImp<dim>().getNormPrestrain(B_Func); + ScalarCT prestrain_Coeff; + Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_Func); + auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, prestrain_Coeff); + vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); - std::cout << "vtkProblem done.\n"; - } + ScalarCT material_Coeff; + Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); + auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, material_Coeff); + vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); + vtkWriter.write(filename); - void vtkProblem3DRod(const GV& gridView_R3D, double eps, - const FuncVector& domain_Func, const FuncMatrix& B_Func, const FuncScalar& mu_Func, - std::string filename) - { + std::cout << "vtkProblem done.\n"; + } - std::cout << "vtkProblem ...\n"; - - VTKWriter<GV> vtkWriter(gridView_R3D); - - // Vector data - const auto basis_R3D = makeBasis(gridView_R3D, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() - - VectorCT domain_Coeff; - Functions::interpolate(basis_R3D, domain_Coeff, domain_Func); - auto domain_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(domain_Coeff)); - vtkWriter.addVertexData(domain_DGBF, VTK::FieldInfo("Domain", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be1_R3D_Func = [B_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_Func(x_Ce)[0]; - }; - VectorCT Be1_R3D_Coeff; - Functions::interpolate(basis_R3D, Be1_R3D_Coeff, Be1_R3D_Func); - auto Be1_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be1_R3D_Coeff)); - vtkWriter.addVertexData(Be1_R3D_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be2_R3D_Func = [B_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_Func(x_Ce)[1]; - }; - VectorCT Be2_R3D_Coeff; - Functions::interpolate(basis_R3D, Be2_R3D_Coeff, Be2_R3D_Func); - auto Be2_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be2_R3D_Coeff)); - vtkWriter.addVertexData(Be2_R3D_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be3_R3D_Func = [B_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_Func(x_Ce)[2]; - }; - VectorCT Be3_R3D_Coeff; - Functions::interpolate(basis_R3D, Be3_R3D_Coeff, Be3_R3D_Func); - auto Be3_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be3_R3D_Coeff)); - vtkWriter.addVertexData(Be3_R3D_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); - - - - // Scalar data - Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_R3D); - - FuncScalar normB_Func = PrestrainImp<dim>().getNormPrestrain(B_Func); - FuncScalar normB_R3D_Func = [normB_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return normB_Func(x_Ce); - }; - ScalarCT prestrain_Coeff; - Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_R3D_Func); - auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, prestrain_Coeff); - vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); - - ScalarCT material_Coeff; - Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); - auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, material_Coeff); - vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); - - vtkWriter.write(filename); - - std::cout << "vtkProblem done.\n"; - } + void vtkProblemCellBVec(const GV& gridView_CE, + const FuncMatrix& B_Func, const FuncVector& B_vec_Func, const FuncScalar& mu_Func, + std::string filename) + { - void vtkProblem3DRodBVec(const GV& gridView_R3D, double eps, - const FuncVector& domain_Func, const FuncMatrix& B_Func, const FuncVector& B_vec_Func, const FuncScalar& mu_Func, - std::string filename) - { + std::cout << "vtkProblemCellBVec ...\n"; - std::cout << "vtkProblem ...\n"; - - VTKWriter<GV> vtkWriter(gridView_R3D); - - // Vector data - const auto basis_R3D = makeBasis(gridView_R3D, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() - - VectorCT domain_Coeff; - Functions::interpolate(basis_R3D, domain_Coeff, domain_Func); - auto domain_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(domain_Coeff)); - vtkWriter.addVertexData(domain_DGBF, VTK::FieldInfo("Domain", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be1_R3D_Func = [B_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_Func(x_Ce)[0]; - }; - VectorCT Be1_R3D_Coeff; - Functions::interpolate(basis_R3D, Be1_R3D_Coeff, Be1_R3D_Func); - auto Be1_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be1_R3D_Coeff)); - vtkWriter.addVertexData(Be1_R3D_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be2_R3D_Func = [B_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_Func(x_Ce)[1]; - }; - VectorCT Be2_R3D_Coeff; - Functions::interpolate(basis_R3D, Be2_R3D_Coeff, Be2_R3D_Func); - auto Be2_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be2_R3D_Coeff)); - vtkWriter.addVertexData(Be2_R3D_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be3_R3D_Func = [B_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_Func(x_Ce)[2]; - }; - VectorCT Be3_R3D_Coeff; - Functions::interpolate(basis_R3D, Be3_R3D_Coeff, Be3_R3D_Func); - auto Be3_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be3_R3D_Coeff)); - vtkWriter.addVertexData(Be3_R3D_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); - - FuncVector B_vec_R3D_Func = [B_vec_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_vec_Func(x_Ce); - }; - VectorCT B_vec_Coeff; - Functions::interpolate(basis_R3D, B_vec_Coeff, B_vec_R3D_Func); - auto B_vec_DGBF = Functions::makeDiscreteGlobalBasisFunction< VectorRT > (basis_R3D, B_vec_Coeff); - vtkWriter.addVertexData(B_vec_DGBF, VTK::FieldInfo("B_vec", VTK::FieldInfo::Type::vector, dimworld)); - - - - // Scalar data - Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_R3D); - - FuncScalar normB_Func = PrestrainImp<dim>().getNormPrestrain(B_Func); - FuncScalar normB_R3D_Func = [normB_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return normB_Func(x_Ce); - }; - ScalarCT prestrain_Coeff; - Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_R3D_Func); - auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, prestrain_Coeff); - vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); - - FuncScalar mu_R3D_Func = [mu_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return mu_Func(x_Ce); - }; - ScalarCT material_Coeff; - Functions::interpolate(scalarFeBasis, material_Coeff, mu_R3D_Func); - auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, material_Coeff); - vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); - - vtkWriter.write(filename); - - std::cout << "vtkProblem done.\n"; - } + VTKWriter<GV> vtkWriter(gridView_CE); + + // Vector data + const auto basis_CE = makeBasis(gridView_CE, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() + + + FuncVector Be1_Func = [B_Func](const auto& x) + { + return B_Func(x)[0]; + }; + VectorCT Be1_Coeff; + Functions::interpolate(basis_CE, Be1_Coeff, Be1_Func); + auto Be1_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be1_Coeff)); + vtkWriter.addVertexData(Be1_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be2_Func = [B_Func](const auto& x) + { + return B_Func(x)[1]; + }; + VectorCT Be2_Coeff; + Functions::interpolate(basis_CE, Be2_Coeff, Be2_Func); + auto Be2_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be2_Coeff)); + vtkWriter.addVertexData(Be2_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be3_Func = [B_Func](const auto& x) + { + return B_Func(x)[2]; + }; + VectorCT Be3_Coeff; + Functions::interpolate(basis_CE, Be3_Coeff, Be3_Func); + auto Be3_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be3_Coeff)); + vtkWriter.addVertexData(Be3_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); + + + VectorCT B_vec_Coeff; + Functions::interpolate(basis_CE, B_vec_Coeff, B_vec_Func); + auto B_vec_DGBF = Functions::makeDiscreteGlobalBasisFunction< VectorRT > (basis_CE, B_vec_Coeff); + vtkWriter.addVertexData(B_vec_DGBF, VTK::FieldInfo("B_vec", VTK::FieldInfo::Type::vector, dimworld)); + + + // Scalar data + Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_CE); + + FuncScalar normB_Func = PrestrainImp<dim>().getNormPrestrain(B_Func); + ScalarCT prestrain_Coeff; + Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_Func); + auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, prestrain_Coeff); + vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); + + ScalarCT material_Coeff; + Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); + auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, material_Coeff); + vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); + + vtkWriter.write(filename); + + std::cout << "vtkProblem done.\n"; + } + + + void vtkProblem3DRod(const GV& gridView_R3D, double eps, + const FuncVector& domain_Func, const FuncMatrix& B_Func, const FuncScalar& mu_Func, + std::string filename) + { + + std::cout << "vtkProblem ...\n"; + + VTKWriter<GV> vtkWriter(gridView_R3D); + + // Vector data + const auto basis_R3D = makeBasis(gridView_R3D, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() + + VectorCT domain_Coeff; + Functions::interpolate(basis_R3D, domain_Coeff, domain_Func); + auto domain_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(domain_Coeff)); + vtkWriter.addVertexData(domain_DGBF, VTK::FieldInfo("Domain", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be1_R3D_Func = [B_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_Func(x_Ce)[0]; + }; + VectorCT Be1_R3D_Coeff; + Functions::interpolate(basis_R3D, Be1_R3D_Coeff, Be1_R3D_Func); + auto Be1_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be1_R3D_Coeff)); + vtkWriter.addVertexData(Be1_R3D_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be2_R3D_Func = [B_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_Func(x_Ce)[1]; + }; + VectorCT Be2_R3D_Coeff; + Functions::interpolate(basis_R3D, Be2_R3D_Coeff, Be2_R3D_Func); + auto Be2_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be2_R3D_Coeff)); + vtkWriter.addVertexData(Be2_R3D_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be3_R3D_Func = [B_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_Func(x_Ce)[2]; + }; + VectorCT Be3_R3D_Coeff; + Functions::interpolate(basis_R3D, Be3_R3D_Coeff, Be3_R3D_Func); + auto Be3_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be3_R3D_Coeff)); + vtkWriter.addVertexData(Be3_R3D_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); + + + + // Scalar data + Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_R3D); + + FuncScalar normB_Func = PrestrainImp<dim>().getNormPrestrain(B_Func); + FuncScalar normB_R3D_Func = [normB_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return normB_Func(x_Ce); + }; + ScalarCT prestrain_Coeff; + Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_R3D_Func); + auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, prestrain_Coeff); + vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); + + ScalarCT material_Coeff; + Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); + auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, material_Coeff); + vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); + + vtkWriter.write(filename); + + std::cout << "vtkProblem done.\n"; + } + + void vtkProblem3DRodBVec(const GV& gridView_R3D, double eps, + const FuncVector& domain_Func, const FuncMatrix& B_Func, const FuncVector& B_vec_Func, const FuncScalar& mu_Func, + std::string filename) + { + + std::cout << "vtkProblem ...\n"; + + VTKWriter<GV> vtkWriter(gridView_R3D); + + // Vector data + const auto basis_R3D = makeBasis(gridView_R3D, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() + + VectorCT domain_Coeff; + Functions::interpolate(basis_R3D, domain_Coeff, domain_Func); + auto domain_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(domain_Coeff)); + vtkWriter.addVertexData(domain_DGBF, VTK::FieldInfo("Domain", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be1_R3D_Func = [B_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_Func(x_Ce)[0]; + }; + VectorCT Be1_R3D_Coeff; + Functions::interpolate(basis_R3D, Be1_R3D_Coeff, Be1_R3D_Func); + auto Be1_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be1_R3D_Coeff)); + vtkWriter.addVertexData(Be1_R3D_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be2_R3D_Func = [B_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_Func(x_Ce)[1]; + }; + VectorCT Be2_R3D_Coeff; + Functions::interpolate(basis_R3D, Be2_R3D_Coeff, Be2_R3D_Func); + auto Be2_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be2_R3D_Coeff)); + vtkWriter.addVertexData(Be2_R3D_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be3_R3D_Func = [B_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_Func(x_Ce)[2]; + }; + VectorCT Be3_R3D_Coeff; + Functions::interpolate(basis_R3D, Be3_R3D_Coeff, Be3_R3D_Func); + auto Be3_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be3_R3D_Coeff)); + vtkWriter.addVertexData(Be3_R3D_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); + + FuncVector B_vec_R3D_Func = [B_vec_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_vec_Func(x_Ce); + }; + VectorCT B_vec_Coeff; + Functions::interpolate(basis_R3D, B_vec_Coeff, B_vec_R3D_Func); + auto B_vec_DGBF = Functions::makeDiscreteGlobalBasisFunction< VectorRT > (basis_R3D, B_vec_Coeff); + vtkWriter.addVertexData(B_vec_DGBF, VTK::FieldInfo("B_vec", VTK::FieldInfo::Type::vector, dimworld)); + + + + // Scalar data + Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_R3D); + + FuncScalar normB_Func = PrestrainImp<dim>().getNormPrestrain(B_Func); + FuncScalar normB_R3D_Func = [normB_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return normB_Func(x_Ce); + }; + ScalarCT prestrain_Coeff; + Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_R3D_Func); + auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, prestrain_Coeff); + vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); + + FuncScalar mu_R3D_Func = [mu_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return mu_Func(x_Ce); + }; + ScalarCT material_Coeff; + Functions::interpolate(scalarFeBasis, material_Coeff, mu_R3D_Func); + auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, material_Coeff); + vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); + + vtkWriter.write(filename); + + std::cout << "vtkProblem done.\n"; + } }; /* - template<int dim> - void vtkProblemCell(const typename UGGrid<dim>::LeafGridView& gridView_CE, - const std::function< MatrixRT(const typename UGGrid<dim>::LeafGridView::template Codim<0>::Geometry::GlobalCoordinate&)& B_Func, - const std::function< ScalarRT(const typename UGGrid<dim>::LeafGridView::template Codim<0>::Geometry::GlobalCoordinate&)& mu_Func, - std::string filename) + template<int dim> + void vtkProblemCell(const typename UGGrid<dim>::LeafGridView& gridView_CE, + const std::function< MatrixRT(const typename UGGrid<dim>::LeafGridView::template Codim<0>::Geometry::GlobalCoordinate&)& B_Func, + const std::function< ScalarRT(const typename UGGrid<dim>::LeafGridView::template Codim<0>::Geometry::GlobalCoordinate&)& mu_Func, + std::string filename) { - using GT = UGGrid<dim>; - using GV = typename GT::LeafGridView; - using Domain = typename GV::template Codim<0>::Geometry::GlobalCoordinate; - using FuncMatrix = std::function< MatrixRT(const Domain&) >; - using FuncVector = std::function< VectorRT(const Domain&) >; - using FuncScalar = std::function< ScalarRT(const Domain&) >; - std::cout << "vtkProblemCell ...\n"; - - VTKWriter<GV> vtkWriter(gridView_CE); - - // Vector data - const auto basis_CE = makeBasis(gridView_CE, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() - - - FuncVector Be1_Func = [B_Func](const auto& x) - { - return B_Func(x)[0]; - }; - VectorCT Be1_Coeff; - Functions::interpolate(basis_CE, Be1_Coeff, Be1_Func); - auto Be1_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be1_Coeff)); - vtkWriter.addVertexData(Be1_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be2_Func = [B_Func](const auto& x) - { - return B_Func(x)[1]; - }; - VectorCT Be2_Coeff; - Functions::interpolate(basis_CE, Be2_Coeff, Be2_Func); - auto Be2_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be2_Coeff)); - vtkWriter.addVertexData(Be2_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be3_Func = [B_Func](const auto& x) - { - return B_Func(x)[2]; - }; - VectorCT Be3_Coeff; - Functions::interpolate(basis_CE, Be3_Coeff, Be3_Func); - auto Be3_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be3_Coeff)); - vtkWriter.addVertexData(Be3_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); - - - // Scalar data - Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_CE); - - FuncScalar normB_Func = getNormPrestrain(B_Func); - ScalarCT prestrain_Coeff; - Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_Func); - auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, prestrain_Coeff); - vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); - - ScalarCT material_Coeff; - Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); - auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, material_Coeff); - vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); - - vtkWriter.write(filename); - - std::cout << "vtkProblem done.\n"; + using GT = UGGrid<dim>; + using GV = typename GT::LeafGridView; + using Domain = typename GV::template Codim<0>::Geometry::GlobalCoordinate; + using FuncMatrix = std::function< MatrixRT(const Domain&) >; + using FuncVector = std::function< VectorRT(const Domain&) >; + using FuncScalar = std::function< ScalarRT(const Domain&) >; + std::cout << "vtkProblemCell ...\n"; + + VTKWriter<GV> vtkWriter(gridView_CE); + + // Vector data + const auto basis_CE = makeBasis(gridView_CE, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() + + + FuncVector Be1_Func = [B_Func](const auto& x) + { + return B_Func(x)[0]; + }; + VectorCT Be1_Coeff; + Functions::interpolate(basis_CE, Be1_Coeff, Be1_Func); + auto Be1_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be1_Coeff)); + vtkWriter.addVertexData(Be1_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be2_Func = [B_Func](const auto& x) + { + return B_Func(x)[1]; + }; + VectorCT Be2_Coeff; + Functions::interpolate(basis_CE, Be2_Coeff, Be2_Func); + auto Be2_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be2_Coeff)); + vtkWriter.addVertexData(Be2_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be3_Func = [B_Func](const auto& x) + { + return B_Func(x)[2]; + }; + VectorCT Be3_Coeff; + Functions::interpolate(basis_CE, Be3_Coeff, Be3_Func); + auto Be3_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be3_Coeff)); + vtkWriter.addVertexData(Be3_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); + + + // Scalar data + Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_CE); + + FuncScalar normB_Func = getNormPrestrain(B_Func); + ScalarCT prestrain_Coeff; + Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_Func); + auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, prestrain_Coeff); + vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); + + ScalarCT material_Coeff; + Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); + auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, material_Coeff); + vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); + + vtkWriter.write(filename); + + std::cout << "vtkProblem done.\n"; } void vtkProblemCellBVec(const GV& gridView_CE, - const FuncMatrix& B_Func, const FuncVector& B_vec_Func, const FuncScalar& mu_Func, - std::string filename) + const FuncMatrix& B_Func, const FuncVector& B_vec_Func, const FuncScalar& mu_Func, + std::string filename) { - std::cout << "vtkProblemCell ...\n"; + std::cout << "vtkProblemCell ...\n"; - VTKWriter<GV> vtkWriter(gridView_CE); + VTKWriter<GV> vtkWriter(gridView_CE); - // Vector data - const auto basis_CE = makeBasis(gridView_CE, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() + // Vector data + const auto basis_CE = makeBasis(gridView_CE, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() - FuncVector Be1_Func = [B_Func](const auto& x) - { - return B_Func(x)[0]; - }; - VectorCT Be1_Coeff; - Functions::interpolate(basis_CE, Be1_Coeff, Be1_Func); - auto Be1_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be1_Coeff)); - vtkWriter.addVertexData(Be1_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); + FuncVector Be1_Func = [B_Func](const auto& x) + { + return B_Func(x)[0]; + }; + VectorCT Be1_Coeff; + Functions::interpolate(basis_CE, Be1_Coeff, Be1_Func); + auto Be1_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be1_Coeff)); + vtkWriter.addVertexData(Be1_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); - FuncVector Be2_Func = [B_Func](const auto& x) - { - return B_Func(x)[1]; - }; - VectorCT Be2_Coeff; - Functions::interpolate(basis_CE, Be2_Coeff, Be2_Func); - auto Be2_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be2_Coeff)); - vtkWriter.addVertexData(Be2_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); + FuncVector Be2_Func = [B_Func](const auto& x) + { + return B_Func(x)[1]; + }; + VectorCT Be2_Coeff; + Functions::interpolate(basis_CE, Be2_Coeff, Be2_Func); + auto Be2_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be2_Coeff)); + vtkWriter.addVertexData(Be2_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); - FuncVector Be3_Func = [B_Func](const auto& x) - { - return B_Func(x)[2]; - }; - VectorCT Be3_Coeff; - Functions::interpolate(basis_CE, Be3_Coeff, Be3_Func); - auto Be3_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be3_Coeff)); - vtkWriter.addVertexData(Be3_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); + FuncVector Be3_Func = [B_Func](const auto& x) + { + return B_Func(x)[2]; + }; + VectorCT Be3_Coeff; + Functions::interpolate(basis_CE, Be3_Coeff, Be3_Func); + auto Be3_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_CE), HierarchicVectorView(Be3_Coeff)); + vtkWriter.addVertexData(Be3_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); - VectorCT B_vec_Coeff; - Functions::interpolate(basis_CE, B_vec_Coeff, B_vec_Func); - auto B_vec_DGBF = Functions::makeDiscreteGlobalBasisFunction< VectorRT > (basis_CE, B_vec_Coeff); - vtkWriter.addVertexData(B_vec_DGBF, VTK::FieldInfo("B_vec", VTK::FieldInfo::Type::vector, dimworld)); + VectorCT B_vec_Coeff; + Functions::interpolate(basis_CE, B_vec_Coeff, B_vec_Func); + auto B_vec_DGBF = Functions::makeDiscreteGlobalBasisFunction< VectorRT > (basis_CE, B_vec_Coeff); + vtkWriter.addVertexData(B_vec_DGBF, VTK::FieldInfo("B_vec", VTK::FieldInfo::Type::vector, dimworld)); - // Scalar data - Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_CE); + // Scalar data + Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_CE); - FuncScalar normB_Func = getNormPrestrain(B_Func); - ScalarCT prestrain_Coeff; - Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_Func); - auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, prestrain_Coeff); - vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); + FuncScalar normB_Func = getNormPrestrain(B_Func); + ScalarCT prestrain_Coeff; + Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_Func); + auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, prestrain_Coeff); + vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); - ScalarCT material_Coeff; - Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); - auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, material_Coeff); - vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); + ScalarCT material_Coeff; + Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); + auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, material_Coeff); + vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); - vtkWriter.write(filename); + vtkWriter.write(filename); - std::cout << "vtkProblem done.\n"; + std::cout << "vtkProblem done.\n"; } void vtkProblem3DRod(const GV& gridView_R3D, double eps, - const FuncVector& domain_Func, const FuncMatrix& B_Func, const FuncScalar& mu_Func, - std::string filename) + const FuncVector& domain_Func, const FuncMatrix& B_Func, const FuncScalar& mu_Func, + std::string filename) { - std::cout << "vtkProblem ...\n"; - - VTKWriter<GV> vtkWriter(gridView_R3D); - - // Vector data - const auto basis_R3D = makeBasis(gridView_R3D, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() - - VectorCT domain_Coeff; - Functions::interpolate(basis_R3D, domain_Coeff, domain_Func); - auto domain_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(domain_Coeff)); - vtkWriter.addVertexData(domain_DGBF, VTK::FieldInfo("Domain", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be1_R3D_Func = [B_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_Func(x_Ce)[0]; - }; - VectorCT Be1_R3D_Coeff; - Functions::interpolate(basis_R3D, Be1_R3D_Coeff, Be1_R3D_Func); - auto Be1_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be1_R3D_Coeff)); - vtkWriter.addVertexData(Be1_R3D_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be2_R3D_Func = [B_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_Func(x_Ce)[1]; - }; - VectorCT Be2_R3D_Coeff; - Functions::interpolate(basis_R3D, Be2_R3D_Coeff, Be2_R3D_Func); - auto Be2_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be2_R3D_Coeff)); - vtkWriter.addVertexData(Be2_R3D_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be3_R3D_Func = [B_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_Func(x_Ce)[2]; - }; - VectorCT Be3_R3D_Coeff; - Functions::interpolate(basis_R3D, Be3_R3D_Coeff, Be3_R3D_Func); - auto Be3_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be3_R3D_Coeff)); - vtkWriter.addVertexData(Be3_R3D_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); - - - - // Scalar data - Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_R3D); - - FuncScalar normB_Func = getNormPrestrain(B_Func); - FuncScalar normB_R3D_Func = [normB_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return normB_Func(x_Ce); - }; - ScalarCT prestrain_Coeff; - Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_R3D_Func); - auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, prestrain_Coeff); - vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); - - ScalarCT material_Coeff; - Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); - auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, material_Coeff); - vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); - - vtkWriter.write(filename); - - std::cout << "vtkProblem done.\n"; + std::cout << "vtkProblem ...\n"; + + VTKWriter<GV> vtkWriter(gridView_R3D); + + // Vector data + const auto basis_R3D = makeBasis(gridView_R3D, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() + + VectorCT domain_Coeff; + Functions::interpolate(basis_R3D, domain_Coeff, domain_Func); + auto domain_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(domain_Coeff)); + vtkWriter.addVertexData(domain_DGBF, VTK::FieldInfo("Domain", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be1_R3D_Func = [B_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_Func(x_Ce)[0]; + }; + VectorCT Be1_R3D_Coeff; + Functions::interpolate(basis_R3D, Be1_R3D_Coeff, Be1_R3D_Func); + auto Be1_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be1_R3D_Coeff)); + vtkWriter.addVertexData(Be1_R3D_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be2_R3D_Func = [B_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_Func(x_Ce)[1]; + }; + VectorCT Be2_R3D_Coeff; + Functions::interpolate(basis_R3D, Be2_R3D_Coeff, Be2_R3D_Func); + auto Be2_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be2_R3D_Coeff)); + vtkWriter.addVertexData(Be2_R3D_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be3_R3D_Func = [B_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_Func(x_Ce)[2]; + }; + VectorCT Be3_R3D_Coeff; + Functions::interpolate(basis_R3D, Be3_R3D_Coeff, Be3_R3D_Func); + auto Be3_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be3_R3D_Coeff)); + vtkWriter.addVertexData(Be3_R3D_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); + + + + // Scalar data + Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_R3D); + + FuncScalar normB_Func = getNormPrestrain(B_Func); + FuncScalar normB_R3D_Func = [normB_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return normB_Func(x_Ce); + }; + ScalarCT prestrain_Coeff; + Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_R3D_Func); + auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, prestrain_Coeff); + vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); + + ScalarCT material_Coeff; + Functions::interpolate(scalarFeBasis, material_Coeff, mu_Func); + auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, material_Coeff); + vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); + + vtkWriter.write(filename); + + std::cout << "vtkProblem done.\n"; } void vtkProblem3DRodBVec(const GV& gridView_R3D, double eps, - const FuncVector& domain_Func, const FuncMatrix& B_Func, const FuncVector& B_vec_Func, const FuncScalar& mu_Func, - std::string filename) + const FuncVector& domain_Func, const FuncMatrix& B_Func, const FuncVector& B_vec_Func, const FuncScalar& mu_Func, + std::string filename) { - std::cout << "vtkProblem ...\n"; - - VTKWriter<GV> vtkWriter(gridView_R3D); - - // Vector data - const auto basis_R3D = makeBasis(gridView_R3D, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() - - VectorCT domain_Coeff; - Functions::interpolate(basis_R3D, domain_Coeff, domain_Func); - auto domain_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(domain_Coeff)); - vtkWriter.addVertexData(domain_DGBF, VTK::FieldInfo("Domain", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be1_R3D_Func = [B_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_Func(x_Ce)[0]; - }; - VectorCT Be1_R3D_Coeff; - Functions::interpolate(basis_R3D, Be1_R3D_Coeff, Be1_R3D_Func); - auto Be1_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be1_R3D_Coeff)); - vtkWriter.addVertexData(Be1_R3D_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be2_R3D_Func = [B_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_Func(x_Ce)[1]; - }; - VectorCT Be2_R3D_Coeff; - Functions::interpolate(basis_R3D, Be2_R3D_Coeff, Be2_R3D_Func); - auto Be2_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be2_R3D_Coeff)); - vtkWriter.addVertexData(Be2_R3D_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); - - - FuncVector Be3_R3D_Func = [B_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_Func(x_Ce)[2]; - }; - VectorCT Be3_R3D_Coeff; - Functions::interpolate(basis_R3D, Be3_R3D_Coeff, Be3_R3D_Func); - auto Be3_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> - (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be3_R3D_Coeff)); - vtkWriter.addVertexData(Be3_R3D_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); - - FuncVector B_vec_R3D_Func = [B_vec_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return B_vec_Func(x_Ce); - }; - VectorCT B_vec_Coeff; - Functions::interpolate(basis_R3D, B_vec_Coeff, B_vec_R3D_Func); - auto B_vec_DGBF = Functions::makeDiscreteGlobalBasisFunction< VectorRT > (basis_R3D, B_vec_Coeff); - vtkWriter.addVertexData(B_vec_DGBF, VTK::FieldInfo("B_vec", VTK::FieldInfo::Type::vector, dimworld)); - - - - // Scalar data - Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_R3D); - - FuncScalar normB_Func = getNormPrestrain(B_Func); - FuncScalar normB_R3D_Func = [normB_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return normB_Func(x_Ce); - }; - ScalarCT prestrain_Coeff; - Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_R3D_Func); - auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, prestrain_Coeff); - vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); - - FuncScalar mu_R3D_Func = [mu_Func, eps](const auto& x) - { - auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; - return mu_Func(x_Ce); - }; - ScalarCT material_Coeff; - Functions::interpolate(scalarFeBasis, material_Coeff, mu_R3D_Func); - auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > - (scalarFeBasis, material_Coeff); - vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); - - vtkWriter.write(filename); - - std::cout << "vtkProblem done.\n"; + std::cout << "vtkProblem ...\n"; + + VTKWriter<GV> vtkWriter(gridView_R3D); + + // Vector data + const auto basis_R3D = makeBasis(gridView_R3D, power<dimworld>(lagrange<1>(), flatLexicographic())); //flatInterleaved() + + VectorCT domain_Coeff; + Functions::interpolate(basis_R3D, domain_Coeff, domain_Func); + auto domain_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(domain_Coeff)); + vtkWriter.addVertexData(domain_DGBF, VTK::FieldInfo("Domain", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be1_R3D_Func = [B_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_Func(x_Ce)[0]; + }; + VectorCT Be1_R3D_Coeff; + Functions::interpolate(basis_R3D, Be1_R3D_Coeff, Be1_R3D_Func); + auto Be1_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be1_R3D_Coeff)); + vtkWriter.addVertexData(Be1_R3D_DGBF, VTK::FieldInfo("B_e1", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be2_R3D_Func = [B_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_Func(x_Ce)[1]; + }; + VectorCT Be2_R3D_Coeff; + Functions::interpolate(basis_R3D, Be2_R3D_Coeff, Be2_R3D_Func); + auto Be2_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be2_R3D_Coeff)); + vtkWriter.addVertexData(Be2_R3D_DGBF, VTK::FieldInfo("B_e2", VTK::FieldInfo::Type::vector, 3)); + + + FuncVector Be3_R3D_Func = [B_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_Func(x_Ce)[2]; + }; + VectorCT Be3_R3D_Coeff; + Functions::interpolate(basis_R3D, Be3_R3D_Coeff, Be3_R3D_Func); + auto Be3_R3D_DGBF = Functions::makeDiscreteGlobalBasisFunction<VectorRT> + (Functions::subspaceBasis(basis_R3D), HierarchicVectorView(Be3_R3D_Coeff)); + vtkWriter.addVertexData(Be3_R3D_DGBF, VTK::FieldInfo("B_e3", VTK::FieldInfo::Type::vector, 3)); + + FuncVector B_vec_R3D_Func = [B_vec_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return B_vec_Func(x_Ce); + }; + VectorCT B_vec_Coeff; + Functions::interpolate(basis_R3D, B_vec_Coeff, B_vec_R3D_Func); + auto B_vec_DGBF = Functions::makeDiscreteGlobalBasisFunction< VectorRT > (basis_R3D, B_vec_Coeff); + vtkWriter.addVertexData(B_vec_DGBF, VTK::FieldInfo("B_vec", VTK::FieldInfo::Type::vector, dimworld)); + + + + // Scalar data + Functions::LagrangeBasis<GV, 1> scalarFeBasis(gridView_R3D); + + FuncScalar normB_Func = getNormPrestrain(B_Func); + FuncScalar normB_R3D_Func = [normB_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return normB_Func(x_Ce); + }; + ScalarCT prestrain_Coeff; + Functions::interpolate(scalarFeBasis, prestrain_Coeff, normB_R3D_Func); + auto normB_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, prestrain_Coeff); + vtkWriter.addVertexData(normB_DGBF, VTK::FieldInfo("normB", VTK::FieldInfo::Type::scalar, 1)); + + FuncScalar mu_R3D_Func = [mu_Func, eps](const auto& x) + { + auto x_Ce = {x[0]/eps - int(x[0]/eps),x[1],x[2]}; + return mu_Func(x_Ce); + }; + ScalarCT material_Coeff; + Functions::interpolate(scalarFeBasis, material_Coeff, mu_R3D_Func); + auto material_DGBF = Functions::makeDiscreteGlobalBasisFunction< ScalarRT > + (scalarFeBasis, material_Coeff); + vtkWriter.addVertexData(material_DGBF, VTK::FieldInfo("mu", VTK::FieldInfo::Type::scalar, 1)); + + vtkWriter.write(filename); + + std::cout << "vtkProblem done.\n"; } -*/ + */ #endif diff --git a/dune/microstructure/energies/discretekirchhoffbendingenergyprestrained.hh b/dune/microstructure/energies/discretekirchhoffbendingenergyprestrained.hh index c86a1e7e5378d57083285cd91db5d453b0f64284..757e4d60131d85b1ff2e151c2c48922e7394ccff 100644 --- a/dune/microstructure/energies/discretekirchhoffbendingenergyprestrained.hh +++ b/dune/microstructure/energies/discretekirchhoffbendingenergyprestrained.hh @@ -9,57 +9,28 @@ #include <dune/gfe/assemblers/localenergy.hh> #include <dune/gfe/bendingisometryhelper.hh> #include <dune/gfe/tensor3.hh> +#include <dune/gfe/linearalgebra.hh> #include <dune/localfunctions/lagrange/lagrangesimplex.hh> - +#include <dune/microstructure/bendingisometryaddons.hh> #include <dune/microstructure/microproblem.hh> #include <cmath> -#include <string> +#include <string> #include <map> - // template <class T> - // constexpr std::string_view type_name() - // { - // using namespace std; - // #ifdef __clang__ - // string_view p = __PRETTY_FUNCTION__; - // return string_view(p.data() + 34, p.size() - 34 - 1); - // #elif defined(__GNUC__) - // string_view p = __PRETTY_FUNCTION__; - // # if __cplusplus < 201402 - // return string_view(p.data() + 36, p.size() - 36 - 1); - // # else - // return string_view(p.data() + 49, p.find(';', 49) - 49); - // # endif - // #elif defined(_MSC_VER) - // string_view p = __FUNCSIG__; - // return string_view(p.data() + 84, p.size() - 84 - 7); - // #endif - // } - - - - -/** - * \brief Assemble the discrete Kirchhoff bending energy for a single element. - * - * The Kirchhoff bending energy consists of two parts: - * - * 1. The energy of Qhom(II - Beff) where II is the second fundamental form of the surface parametrized by the deformation function - * and Beff is a (given) effective prestrain tensor. - * - * This contribution is split intro three parts which corresponds to the binomial formula (a+b)^2 = a^2 + 2ab + b^2 - * each term is discretized separately. - * - * 2. An integral over the scalar product of a forcing term and the discrete deformation - * (i.e. the evaluation of localFunction_ ). +/** + * \brief Assemble the discrete Kirchhoff bending energy for a single element. + * + * The Kirchhoff bending energy consists of: Qhom(II - Beff) where II is the second fundamental form of the surface parametrized by the deformation function + * and Beff is a (given) effective prestrain tensor. This contribution is split intro three parts which corresponds to the binomial formula (a+b)^2 = a^2 + 2ab + b^2 + * each term is discretized separately. */ namespace Dune::GFE { - template<class Basis, class LocalDiscreteKirchhoffFunction, class LocalForce, class TargetSpace> + template<class Basis, class DiscreteKirchhoffFunction, class TargetSpace> class DiscreteKirchhoffBendingEnergyPrestrained : public Dune::GFE::LocalEnergy<Basis,TargetSpace> { @@ -67,7 +38,7 @@ namespace Dune::GFE typedef typename Basis::GridView GridView; typedef typename GridView::ctype DT; typedef typename TargetSpace::ctype RT; - typedef typename LocalDiscreteKirchhoffFunction::DerivativeType DerivativeType; + typedef typename DiscreteKirchhoffFunction::DerivativeType DerivativeType; typedef typename Dune::FieldMatrix<double,2,2> PrestrainType; typedef typename Dune::FieldMatrix<double,3,3> MatrixType; // Grid dimension @@ -77,13 +48,13 @@ namespace Dune::GFE using Domain = typename Basis::GridView ::template Codim<0>::Geometry::GlobalCoordinate; - using IndicatorType = std::function<int(const Domain&)>; - using IndicatorGridViewFunctionType = GridViewFunction<int(const Domain&), GridView>; - using LocalIndicatorFunctionType = LocalFunction<int(const Domain&), typename GridViewEntitySet<GridView, 0>::Element >; + using IndicatorType = std::function<int (const Domain&)>; + using IndicatorGridViewFunctionType = GridViewFunction<int (const Domain&), GridView>; + using LocalIndicatorFunctionType = LocalFunction<int (const Domain&), typename GridViewEntitySet<GridView, 0>::Element >; - LocalDiscreteKirchhoffFunction& localFunction_; + DiscreteKirchhoffFunction& localFunction_; - LocalForce& localForce_; + // LocalForce& localForce_; P2LocalFiniteElement lagrangeLFE_; @@ -106,26 +77,26 @@ namespace Dune::GFE // Python::Module module_; // Python::Callable microstructureClass_; //we use this class to create microstructure objects passed to microproblem. - // MicroProblem microProblem_; + // MicroProblem microProblem_; - // std::shared_ptr<Python::Callable> anotherMicroProblem_; - // std::shared_ptr<MicroProblem> microProblem_; + // std::shared_ptr<Python::Callable> anotherMicroProblem_; + // std::shared_ptr<MicroProblem> microProblem_; - // std::vector<std::shared_ptr<MicroProblem>> microProblem_; - std::map<int,std::shared_ptr<MicroProblem> > microProblem_; + // std::vector<std::shared_ptr<MicroProblem>> microProblem_; + std::map<int,std::shared_ptr<MicroProblem> > microProblem_; IndicatorType macroPhaseIndicator_; mutable LocalIndicatorFunctionType macroPhaseIndicatorLocalFunction_; - int numberOfMacroPhases_; + int numberOfMacroPhases_; std::vector<bool> constantMicrostructureVector_; /** - * @brief This is just used to initialize the MicrostructureClass with some macroscopic point + * @brief This is just used to initialize the MicrostructureClass with some macroscopic point * in the case of a macroscopically varying microstructure. */ // static constexpr Domain initialMacroPoint{0.0}; @@ -137,18 +108,16 @@ namespace Dune::GFE public: - DiscreteKirchhoffBendingEnergyPrestrained(LocalDiscreteKirchhoffFunction &localFunction, - LocalForce &localForce, - const Dune::ParameterTree& parameterSet, - const Python::Module pyModule) - : localFunction_(localFunction), - localForce_(localForce), - parameterSet_(parameterSet), - module_(pyModule), - globalMicrostructureClass_(setupGlobalMicrostructureClass()) - // microstructureClass_(setupMicrostructureClass()) - // - // microProblem_(setupMicroProblem()) // This is necessary since there is no default.constructor in for MicroProblem class. + DiscreteKirchhoffBendingEnergyPrestrained(DiscreteKirchhoffFunction &localFunction, + const Dune::ParameterTree& parameterSet, + const Python::Module pyModule) + : localFunction_(localFunction), + parameterSet_(parameterSet), + module_(pyModule), + globalMicrostructureClass_(setupGlobalMicrostructureClass()) + // microstructureClass_(setupMicrostructureClass()) + // + // microProblem_(setupMicroProblem()) // This is necessary since there is no default.constructor in for MicroProblem class. { // setupGlobalMicrostructureClass(); setupEffectiveQuantities(); @@ -156,7 +125,7 @@ namespace Dune::GFE // const Python::Callable setupMicrostructureClass() const - // { + // { // std::cout << "Enter setupMicroStructureClass" << std::endl; // Python::Callable microstructureClass; @@ -174,24 +143,24 @@ namespace Dune::GFE // std::cerr << "Error during DiscreteKirchhoffBendingEnergyPrestrained setup" << e << std::endl; // } // } - + // return microstructureClass; // } - - + + const Python::Callable setupGlobalMicrostructureClass() const - { + { Python::Callable globalMicrostructureClass; - try { - globalMicrostructureClass = module_.get("GlobalMicrostructure"); - } catch (Dune::Exception &e) { - std::cout << "There is no class 'GlobalMicrostructure' in the Python module!" << std::endl; - std::cerr << "Error during DiscreteKirchhoffBendingEnergyPrestrained setup" << e << std::endl; - } + try { + globalMicrostructureClass = module_.get("GlobalMicrostructure"); + } catch (Dune::Exception &e) { + std::cout << "There is no class 'GlobalMicrostructure' in the Python module!" << std::endl; + std::cerr << "Error during DiscreteKirchhoffBendingEnergyPrestrained setup" << e << std::endl; + } // TEST // std::cout << "Trying to access inner class directly without creating an instance:" << std::endl; @@ -202,7 +171,7 @@ namespace Dune::GFE // const Python::Callable setupMicrostructureClass() const - // { + // { // // std::cout << "Enter setupMicroStructureClass" << std::endl; // Python::Callable microstructureClass; @@ -230,233 +199,233 @@ namespace Dune::GFE // // return MicroProblem(); // if(parameterSet_.get<bool>("macroscopically_varying_microstructure", 0)) // return MicroProblem(microstructureClass_(0),parameterSet_, module_); //TODO Replace 0 with Domain input type. using Domain = typename GridView::template Codim<0>::Geometry::GlobalCoordinate; - // else + // else // return MicroProblem(microstructureClass_(),parameterSet_, module_); //pass a constant microstructure object // } void setupEffectiveQuantities() { - /** - * @brief If the microstructure is constant on a macroscopic level, - * we read the effective quantitites from the ParameterTree - * and set them up once here. - * - * If no effective quanitities are provided, we solve the - * micro problem once to obtain them. - * - * - * If the microscture is varying on a macroscopic scale, - * the microProblem is initialized with a default value - * and gets updated for each each macro point later on - * in the quadrature loop. - */ + /** + * @brief If the microstructure is constant on a macroscopic level, + * we read the effective quantitites from the ParameterTree + * and set them up once here. + * + * If no effective quanitities are provided, we solve the + * micro problem once to obtain them. + * + * + * If the microscture is varying on a macroscopic scale, + * the microProblem is initialized with a default value + * and gets updated for each each macro point later on + * in the quadrature loop. + */ - //create instance of globalMicrostructureClass_ - // Python::Reference globalMicrostructure = globalMicrostructureClass_(); - globalMicrostructure_ = globalMicrostructureClass_(); + //create instance of globalMicrostructureClass_ + // Python::Reference globalMicrostructure = globalMicrostructureClass_(); + globalMicrostructure_ = globalMicrostructureClass_(); - // = globalMicrostructure.get("macroPhases", 1) - globalMicrostructure_.get("macroPhases").toC<int>(numberOfMacroPhases_); - std::cout << "numberOfMacroPhases: " << numberOfMacroPhases_ << std::endl; + // = globalMicrostructure.get("macroPhases", 1) + globalMicrostructure_.get("macroPhases").toC<int>(numberOfMacroPhases_); + std::cout << "numberOfMacroPhases: " << numberOfMacroPhases_ << std::endl; - // Get the macroPhaseIndicator function - try { - macroPhaseIndicator_ = Python::make_function<int>(Python::Callable(globalMicrostructure_.get("macroPhaseIndicator"))); - // auto macroPhaseIndicatorGVF = Dune::Functions::makeGridViewFunction(macroPhaseIndicator_, localFunction_.gridView()); - macroPhaseIndicatorLocalFunction_ = localFunction(Dune::Functions::makeGridViewFunction(macroPhaseIndicator_, localFunction_.gridView())); - } catch (Dune::Exception &e) { - std::cout << "Piecewise constant microstructure but no macroPhaseIndicator was provided. Assuming macroscopically constant microstructure" << std::endl; - // Using constant True function - macroPhaseIndicator_ = Python::make_function<int>(Python::Callable(Python::evaluate("lambda x: 1"))); - } - //VTK-Write macroPhaseIndicator: - if(parameterSet_.get<bool>("VTKwriteMacroPhaseIndicator", 0)) - VTKwriteMacroPhaseIndicator(); - + // Get the macroPhaseIndicator function + try { + macroPhaseIndicator_ = Python::make_function<int>(Python::Callable(globalMicrostructure_.get("macroPhaseIndicator"))); + // auto macroPhaseIndicatorGVF = Dune::Functions::makeGridViewFunction(macroPhaseIndicator_, localFunction_.gridView()); + macroPhaseIndicatorLocalFunction_ = localFunction(Dune::Functions::makeGridViewFunction(macroPhaseIndicator_, localFunction_.gridView())); + } catch (Dune::Exception &e) { + std::cout << "Piecewise constant microstructure but no macroPhaseIndicator was provided. Assuming macroscopically constant microstructure" << std::endl; + // Using constant True function + macroPhaseIndicator_ = Python::make_function<int>(Python::Callable(Python::evaluate("lambda x: 1"))); + } + //VTK-Write macroPhaseIndicator: + if(parameterSet_.get<bool>("VTKwriteMacroPhaseIndicator", 0)) + VTKwriteMacroPhaseIndicator(); - Qhom_.resize(numberOfMacroPhases_); - Beff_.resize(numberOfMacroPhases_); - constantMicrostructureVector_.resize(numberOfMacroPhases_); - + Qhom_.resize(numberOfMacroPhases_); + Beff_.resize(numberOfMacroPhases_); - for(size_t i=0; i<numberOfMacroPhases_; i++) - { - std::cout << "------------------- " + std::to_string(i+1) + "-th macro phase setup " + "------------------- " << std::endl; - LocalMicrostructureClass_.push_back(globalMicrostructure_.get("LocalMicrostructure_"+std::to_string(i+1))); + constantMicrostructureVector_.resize(numberOfMacroPhases_); - // microProblem_.push_back(std::make_shared<MicroProblem>(LocalMicrostructureClass_[i](),parameterSet_, module_)); - // also store these quantities in a vector instead? - //---Create localMicrostructure object - // auto LocalMicrostructure = microProblem_[i]->getMicrostructure(); - auto LocalMicrostructure = LocalMicrostructureClass_[i](); + for(size_t i=0; i<numberOfMacroPhases_; i++) + { + std::cout << "------------------- " + std::to_string(i+1) + "-th macro phase setup " + "------------------- " << std::endl; + LocalMicrostructureClass_.push_back(globalMicrostructure_.get("LocalMicrostructure_"+std::to_string(i+1))); - // std::string testString; - // LocalMicrostructure.get("phase" + std::to_string(1) + "_type").toC<std::string>(testString); - // std::cout << "Teststring:" << testString << std::endl; + // microProblem_.push_back(std::make_shared<MicroProblem>(LocalMicrostructureClass_[i](),parameterSet_, module_)); + // also store these quantities in a vector instead? + //---Create localMicrostructure object + // auto LocalMicrostructure = microProblem_[i]->getMicrostructure(); + auto LocalMicrostructure = LocalMicrostructureClass_[i](); - // bool .macroPhase2_readEffectiveQuantities - bool constantMicrostructure = true; - globalMicrostructure_.get("macroPhase" + std::to_string(i+1) + "_constantMicrostructure").toC<bool>(constantMicrostructure); + // std::string testString; + // LocalMicrostructure.get("phase" + std::to_string(1) + "_type").toC<std::string>(testString); + // std::cout << "Teststring:" << testString << std::endl; - constantMicrostructureVector_[i] = constantMicrostructure; - if (constantMicrostructure) - { - std::cout << "[Constant Microstructure]" << std::endl; - // Check whether to read effective quantities for current phase or to compute them. - bool readEffectiveQuantities = false; //default - globalMicrostructure_.get("macroPhase" + std::to_string(i+1) + "_readEffectiveQuantities").toC<bool>(readEffectiveQuantities); - - std::cout << "readEffectiveQuantities:" << readEffectiveQuantities << std::endl; - - if(readEffectiveQuantities) - { - std::cout << "(Read effective quantities for phase " + std::to_string(i+1) + ")" << std::endl; - LocalMicrostructure.get("effectiveQuadraticForm").toC<Dune::FieldMatrix<double,3,3>>(Qhom_[i]); - LocalMicrostructure.get("effectivePrestrain").toC<Dune::FieldMatrix<double,2,2>>(Beff_[i]); - } else { - std::cout << "(Solving the Micro-Problem once to obtain effective quantities ...)" << std::endl; - - microProblem_.insert({i,std::make_shared<MicroProblem>(LocalMicrostructureClass_[i](),parameterSet_, module_)}); - (microProblem_[i])->getEffectiveQuantities(Beff_[i],Qhom_[i]); - } - - printmatrix(std::cout, Qhom_[i], "Setup effective Quadratic form (Qhom) for Phase " +std::to_string(i+1) + " as ", "--"); - printmatrix(std::cout, Beff_[i], "Setup effective prestrain (Beff) for Phase " +std::to_string(i+1) + " as ", "--"); - } - else - std::cout << "[Macroscopically varying Microstructure]" << std::endl; + // bool .macroPhase2_readEffectiveQuantities + bool constantMicrostructure = true; + globalMicrostructure_.get("macroPhase" + std::to_string(i+1) + "_constantMicrostructure").toC<bool>(constantMicrostructure); - } //end-macroPhaseLoop + constantMicrostructureVector_[i] = constantMicrostructure; - // TEST Call python inner-class - // std::cout << "Try to access inner python-class: " << std::endl; - // Python::Reference innerClass; - // globalMicrostructure_.get("lg").toC<Python::Reference>(innerClass); //conversion to C of Python::Reference not implemented! + if (constantMicrostructure) + { + std::cout << "[Constant Microstructure]" << std::endl; + // Check whether to read effective quantities for current phase or to compute them. + bool readEffectiveQuantities = false; //default + globalMicrostructure_.get("macroPhase" + std::to_string(i+1) + "_readEffectiveQuantities").toC<bool>(readEffectiveQuantities); - // Python::Callable LocalMicrostructureClass = globalMicrostructure_.get(Python::Callable("LocalMicrostructure")); - // Python::Callable LocalMicrostructureClass = globalMicrostructure_.get("LocalMicrostructure_1"); - // LocalMicrostructureClass_[0] = globalMicrostructure_.get("LocalMicrostructure_1"); + std::cout << "readEffectiveQuantities:" << readEffectiveQuantities << std::endl; - // create instance of inner class: - // auto LocalMicrostructure = LocalMicrostructureClass(); + if(readEffectiveQuantities) + { + std::cout << "(Read effective quantities for phase " + std::to_string(i+1) + ")" << std::endl; + LocalMicrostructure.get("effectiveQuadraticForm").toC<Dune::FieldMatrix<double,3,3> >(Qhom_[i]); + LocalMicrostructure.get("effectivePrestrain").toC<Dune::FieldMatrix<double,2,2> >(Beff_[i]); + } else { + std::cout << "(Solving the Micro-Problem once to obtain effective quantities ...)" << std::endl; + + microProblem_.insert({i,std::make_shared<MicroProblem>(LocalMicrostructureClass_[i](),parameterSet_, module_)}); + (microProblem_[i])->getEffectiveQuantities(Beff_[i],Qhom_[i]); + } + printmatrix(std::cout, Qhom_[i], "Setup effective Quadratic form (Qhom) for Phase " +std::to_string(i+1) + " as ", "--"); + printmatrix(std::cout, Beff_[i], "Setup effective prestrain (Beff) for Phase " +std::to_string(i+1) + " as ", "--"); + } + else + std::cout << "[Macroscopically varying Microstructure]" << std::endl; + } //end-macroPhaseLoop + // TEST Call python inner-class + // std::cout << "Try to access inner python-class: " << std::endl; + // Python::Reference innerClass; + // globalMicrostructure_.get("lg").toC<Python::Reference>(innerClass); //conversion to C of Python::Reference not implemented! - // int numberOfMacroPhases_ = parameterSet_.get<int>("numberOfMacroPhases_", 1); + // Python::Callable LocalMicrostructureClass = globalMicrostructure_.get(Python::Callable("LocalMicrostructure")); + // Python::Callable LocalMicrostructureClass = globalMicrostructure_.get("LocalMicrostructure_1"); + // LocalMicrostructureClass_[0] = globalMicrostructure_.get("LocalMicrostructure_1"); + // create instance of inner class: + // auto LocalMicrostructure = LocalMicrostructureClass(); - // microProblem_ = std::make_shared<MicroProblem>(microstructureClass_(),parameterSet_, module_); - // microProblem_ = std::make_shared<MicroProblem>(LocalMicrostructureClass_[0](),parameterSet_, module_); - // auto LocalMicrostructure = microProblem_->getMicrostructure(); + // int numberOfMacroPhases_ = parameterSet_.get<int>("numberOfMacroPhases_", 1); - // access members of inner class: - // auto test = LocalMicrostructure.get("name"); + // microProblem_ = std::make_shared<MicroProblem>(microstructureClass_(),parameterSet_, module_); + // microProblem_ = std::make_shared<MicroProblem>(LocalMicrostructureClass_[0](),parameterSet_, module_); - // std::string test; - // LocalMicrostructure.get("name").toC<std::string>(test); - // std::cout << "access member of inner class: " << test << std::endl; + // auto LocalMicrostructure = microProblem_->getMicrostructure(); - + // access members of inner class: + // auto test = LocalMicrostructure.get("name"); + // std::string test; + // LocalMicrostructure.get("name").toC<std::string>(test); + // std::cout << "access member of inner class: " << test << std::endl; - // if(parameterSet_.get<bool>("macroscopically_varying_microstructure", 0)) - // { - // std::cout << "MACROSCOPICALLY VARYING MICROSTRUCTURE is used! " << std::endl; - // /* - // * This 'default' microstructureClass_() is just used for an initial setup. - // */ - // // microProblem_ = std::make_shared<MicroProblem>(microstructureClass_(initialMacroPoint),parameterSet_, module_); - // // microProblem_ = std::make_shared<MicroProblem>(microstructureClass_(),parameterSet_, module_); - // } - // else{ - // std::cout << "CONSTANT MICROSTRUCTURE is used with effective quantities..." << std::endl; - // // Get Number of MacroPhases - // // If possible read the effective quantities from ParameterTree - // if(parameterSet_.get<bool>("read_effectiveQuantities_from_Parset", 1)) - // { - // std::cout << "READ EFFECTIVE QUANTITIES FROM PARSET..." << std::endl; - // // module_.get("effectiveQuadraticForm").toC<Dune::FieldMatrix<double,3,3>>(Qhom_[0]); - // // module_.get("effectivePrestrain").toC<Dune::FieldMatrix<double,2,2>>(Beff_[0]); + // if(parameterSet_.get<bool>("macroscopically_varying_microstructure", 0)) + // { + // std::cout << "MACROSCOPICALLY VARYING MICROSTRUCTURE is used! " << std::endl; + // /* + // * This 'default' microstructureClass_() is just used for an initial setup. + // */ + // // microProblem_ = std::make_shared<MicroProblem>(microstructureClass_(initialMacroPoint),parameterSet_, module_); + // // microProblem_ = std::make_shared<MicroProblem>(microstructureClass_(),parameterSet_, module_); + // } + // else{ + // std::cout << "CONSTANT MICROSTRUCTURE is used with effective quantities..." << std::endl; - // std::cout << "Obtain effective quantitites from Microstructure-Class:" << std::endl; + // // Get Number of MacroPhases - - // // (microProblem_->microstructure_).get("phase" + std::to_string(1) + "_type").toC<std::string>(testString); + // // If possible read the effective quantities from ParameterTree + // if(parameterSet_.get<bool>("read_effectiveQuantities_from_Parset", 1)) + // { - // std::string testString; - // LocalMicrostructure.get("phase" + std::to_string(1) + "_type").toC<std::string>(testString); - // std::cout << "Teststring:" << testString << std::endl; + // std::cout << "READ EFFECTIVE QUANTITIES FROM PARSET..." << std::endl; + // // module_.get("effectiveQuadraticForm").toC<Dune::FieldMatrix<double,3,3>>(Qhom_[0]); + // // module_.get("effectivePrestrain").toC<Dune::FieldMatrix<double,2,2>>(Beff_[0]); - // LocalMicrostructure.get("effectiveQuadraticForm").toC<Dune::FieldMatrix<double,3,3>>(Qhom_[0]); - // LocalMicrostructure.get("effectivePrestrain").toC<Dune::FieldMatrix<double,2,2>>(Beff_[0]); + // std::cout << "Obtain effective quantitites from Microstructure-Class:" << std::endl; - // } - // else{ - // std::cout << "Solving the Micro/Cell-Problem (once) to obtain effective quantities ..." << std::endl; - // // microProblem_ = std::make_shared<MicroProblem>(microstructureClass_(),parameterSet_, module_); - // // microProblem_.updateMicrostructure(microstructureClass_()); // pass a constant microstructure object. - // microProblem_->getEffectiveQuantities(Beff_[0],Qhom_[0]); - // } + // // (microProblem_->microstructure_).get("phase" + std::to_string(1) + "_type").toC<std::string>(testString); + + + + // std::string testString; + // LocalMicrostructure.get("phase" + std::to_string(1) + "_type").toC<std::string>(testString); + // std::cout << "Teststring:" << testString << std::endl; + + + // LocalMicrostructure.get("effectiveQuadraticForm").toC<Dune::FieldMatrix<double,3,3>>(Qhom_[0]); + // LocalMicrostructure.get("effectivePrestrain").toC<Dune::FieldMatrix<double,2,2>>(Beff_[0]); + + // } + // else{ + // std::cout << "Solving the Micro/Cell-Problem (once) to obtain effective quantities ..." << std::endl; + + // // microProblem_ = std::make_shared<MicroProblem>(microstructureClass_(),parameterSet_, module_); + // // microProblem_.updateMicrostructure(microstructureClass_()); // pass a constant microstructure object. + // microProblem_->getEffectiveQuantities(Beff_[0],Qhom_[0]); + // } + + // printmatrix(std::cout, Qhom_[0], "Setup effective Quadratic form (Qhom) as ", "--"); + // printmatrix(std::cout, Beff_[0], "Setup effective prestrain (Beff) as ", "--"); + // } - // printmatrix(std::cout, Qhom_[0], "Setup effective Quadratic form (Qhom) as ", "--"); - // printmatrix(std::cout, Beff_[0], "Setup effective prestrain (Beff) as ", "--"); - // } - } void VTKwriteMacroPhaseIndicator() const { - std::cout << "VTK write macroPhaseIndicator" << std::endl; - std::string resultPath = parameterSet_.get("resultPath", "../../outputs"); - // std::string baseName = parameterSet_.get("baseName", "CellProblem-result"); - std::string baseName = "MacroPhaseIndicator"; - int subsamplingRefinement = parameterSet_.get<int>("MacroPhaseSubsamplingRefinement", 0); - - Dune::SubsamplingVTKWriter<GridView> MacroPhaseVtkWriter(localFunction_.gridView(), Dune::refinementLevels(subsamplingRefinement)); - - MacroPhaseVtkWriter.addCellData( - macroPhaseIndicator_, - Dune::VTK::FieldInfo("macroPhaseIndicator_", Dune::VTK::FieldInfo::Type::scalar, 1)); - - MacroPhaseVtkWriter.write(resultPath + "/" + baseName ); - std::cout << "wrote data to file:" + resultPath + "/" + baseName << std::endl; - - return; + std::cout << "VTK write macroPhaseIndicator" << std::endl; + std::string resultPath = parameterSet_.get("resultPath", "../../outputs"); + // std::string baseName = parameterSet_.get("baseName", "CellProblem-result"); + std::string baseName = "MacroPhaseIndicator"; + int subsamplingRefinement = parameterSet_.get<int>("MacroPhaseSubsamplingRefinement", 0); + + Dune::SubsamplingVTKWriter<GridView> MacroPhaseVtkWriter(localFunction_.gridView(), Dune::refinementLevels(subsamplingRefinement)); + + MacroPhaseVtkWriter.addCellData( + macroPhaseIndicator_, + Dune::VTK::FieldInfo("macroPhaseIndicator_", Dune::VTK::FieldInfo::Type::scalar, 1)); + + MacroPhaseVtkWriter.write(resultPath + "/" + baseName ); + std::cout << "wrote data to file:" + resultPath + "/" + baseName << std::endl; + + return; }; @@ -465,21 +434,21 @@ namespace Dune::GFE template<class Itype> void resetEffectiveQuadraticForm(const Dune::FieldMatrix<Itype,3,3>& A, const int macroPhase) const { - std::cout << "reset quadratic form ..." << std::endl; - convertFieldMatrix<RT>(A,Qhom_[macroPhase]); + std::cout << "reset quadratic form ..." << std::endl; + convertFieldMatrix<RT>(A,Qhom_[macroPhase]); } template<class Itype> void resetEffectivePrestrain(const Dune::FieldMatrix<Itype,2,2>& B, const int macroPhase) const { - std::cout << "reset effective prestrain ..." << std::endl; - convertFieldMatrix<RT>(B,Beff_[macroPhase]); + std::cout << "reset effective prestrain ..." << std::endl; + convertFieldMatrix<RT>(B,Beff_[macroPhase]); } /** * @brief Apply to effective quadratic form (Qhom). - * + * * @param Qhom effective elastic moduli * @param A coefficient vector of first input (coefficient vectors of R_sym^{2x2} matrix in orthonormal basis) * @param B coefficient vector of second input (coefficient vectors of R_sym^{2x2} matrix in orthonormal basis) @@ -487,23 +456,29 @@ namespace Dune::GFE */ auto applyQhom(const MatrixType& Qhom,const Dune::FieldVector<RT,3>& A, const Dune::FieldVector<RT,3>& B) const { - return Qhom[0][0]*A[0]*B[0] + Qhom[0][1]*A[1]*B[0] + Qhom[0][2]*A[2]*B[0] - + Qhom[1][0]*A[0]*B[1] + Qhom[1][1]*A[1]*B[1] + Qhom[1][2]*A[2]*B[1] - + Qhom[2][0]*A[0]*B[2] + Qhom[2][1]*A[1]*B[2] + Qhom[2][2]*A[2]*B[2]; + return Qhom[0][0]*A[0]*B[0] + Qhom[0][1]*A[1]*B[0] + Qhom[0][2]*A[2]*B[0] + + Qhom[1][0]*A[0]*B[1] + Qhom[1][1]*A[1]*B[1] + Qhom[1][2]*A[2]*B[1] + + Qhom[2][0]*A[0]*B[2] + Qhom[2][1]*A[1]*B[2] + Qhom[2][2]*A[2]*B[2]; + } + + + + /** \brief Assemble the energy for a single element */ + virtual RT energy (const typename Basis::LocalView& localView, + const typename Impl::LocalEnergyTypes<TargetSpace>::CompositeCoefficients& coefficients) const override + { + DUNE_THROW(NotImplemented, "!"); } - /** \brief Assemble the energy for a single element */ - virtual RT energy (const typename Basis::LocalView& localView, - const std::vector<TargetSpace>& localSolution) const + virtual RT energy (const typename Basis::LocalView& localView, + const std::vector<TargetSpace>& localConfiguration) const override { - RT energy = 0; - /** * @brief TEST reset effective quantities. - * + * */ // Dune::FieldMatrix<double,2,2> A = {{2.0, 0.0}, {0.0, 2.0}}; // Dune::FieldMatrix<double,3,3> Q = {{1.0, 2.0, 3.0}, {4.0,5.0,6.0}, {1.0,2.0,3.0}}; @@ -527,7 +502,6 @@ namespace Dune::GFE // int quadOrder = 1; //too low. bad results. // int quadOrder = 6; // Same as used/explained by [Rumpf et al. - Two-scale Finite elements approximation of a homogenized model] - int quadOrder = parameterSet_.get<int>("macroQuadOrder", 6); #else if (localFiniteElement.localBasis().order()==1) @@ -536,68 +510,79 @@ namespace Dune::GFE quadOrder = (localFiniteElement.type().isSimplex()) ? (localFiniteElement.localBasis().order() - 1) * 2 : (localFiniteElement.localBasis().order() * gridDim - 1) * 2; #endif - + const auto element = localView.element(); auto geometry = element.geometry(); auto gridView = localFunction_.gridView(); const auto &indexSet = gridView.indexSet(); - // bind to current element. - localFunction_.bind(element); - localForce_.bind(element); + + + /** + bind the underlying Hermite basis to the current element. + Note: The DiscreteKirchhoffFunction object stores a vector of global + and local basis coefficients that are accessed for evaluation + methods (linear combinations of hermite basis function and local coefficients). + Therefore the local configuration is passed to the bind method as well since + these coefficient vectors need to be updated with the new local configuration + previous to evaluation. + */ + localFunction_.bind(element,localConfiguration); + // // bind to current element. + // localFunction_.bind(element); + // localForce_.bind(element); macroPhaseIndicatorLocalFunction_.bind(element); - /** - * @brief We need to update the Coefficients of localFunction_ - * on the current element. - */ - localFunction_.updateLocalCoefficients(localSolution,element); + // /** + // * @brief We need to update the Coefficients of localFunction_ + // * on the current element. + // */ + // localFunction_.updateLocalCoefficients(localConfiguration,element); if(PRINT_DEBUG) { - std::cout << " -------------------------------------------- " << std::endl; - std::cout << "ELEMENT NUMBER( indexSet.index(element)) ):" << indexSet.index(element) << std::endl; - std::cout << "geometry.corner(0): " << geometry.corner(0) << std::endl; - std::cout << "geometry.corner(1)): " << geometry.corner(1) << std::endl; - std::cout << "geometry.corner(2): " << geometry.corner(2) << std::endl; + std::cout << " -------------------------------------------- " << std::endl; + std::cout << "ELEMENT NUMBER( indexSet.index(element)) ):" << indexSet.index(element) << std::endl; + std::cout << "geometry.corner(0): " << geometry.corner(0) << std::endl; + std::cout << "geometry.corner(1)): " << geometry.corner(1) << std::endl; + std::cout << "geometry.corner(2): " << geometry.corner(2) << std::endl; } /** - * @brief Get Coefficients of the discrete Gradient - * + * @brief Get Coefficients of the discrete Gradient + * * The discrete Gradient is a special linear combination represented in a [P2]^2 - (Lagrange) space * The coefficients of this linear combination correspond to certain linear combinations of the Gradients of localfunction_ . * The coefficients are stored in the form [Basisfunctions x components x gridDim] * in a BlockVector<FieldMatrix<RT, 3, gridDim>> . */ - BlockVector<FieldMatrix<RT, 3, gridDim>> discreteJacobianCoefficients; - discreteGradientCoefficients(discreteJacobianCoefficients,lagrangeLFE_,localFunction_,element); - - - - + // BlockVector<FieldMatrix<RT, 3, gridDim> > discreteJacobianCoefficients; + // discreteGradientCoefficients(discreteJacobianCoefficients,lagrangeLFE_,localFunction_,element); + + + + /** * @brief Compute The energy contribution of Qhom(II - Beff). - * This is called 'harmonicEnergy' for historical reasons: * without prestrain and if Qhom=|.|^2 (squared Frobenius-Norm), * This is just the harmonic energy of the deformation Gradient. - * - * - * Mixed version using the binomal formula (a-b)^2 = a^2 - 2ab + b^2 - * for | II - Beff |^2 and discretize every term individually. + * + * + * Mixed version using the binomal formula (a-b)^2 = a^2 - 2ab + b^2 + * for | II - Beff |^2 and discretize every term individually. */ - RT harmonicEnergy = 0; + RT bendingEnergy = 0; // Gauss-Legendre-Quadrature (default): const auto &quadRule = QuadratureRules<double, gridDim>::rule(lagrangeLFE_.type(), quadOrder); - //TEST Gauß-Jacobi-Quadrature formula: + //TEST Gauß-Jacobi-Quadrature formula: // const auto &quadRule = QuadratureRules<double, gridDim>::rule(lagrangeLFE_.type(), quadOrder, QuadratureType::GaussJacobi_1_0); @@ -620,7 +605,7 @@ namespace Dune::GFE // exit(0); - // Determine macro phase and type + // Determine macro phase and type int currentPhase = macroPhaseIndicatorLocalFunction_(quadPos); // bool constantMicrostructure = true; @@ -630,18 +615,18 @@ namespace Dune::GFE if(!constantMicrostructure) { - std::cout << "Compute effective quantities at current quadrature point: " << element.geometry().global(quadPos) << std::endl; + std::cout << "Compute effective quantities at current quadrature point: " << element.geometry().global(quadPos) << std::endl; + - // microProblem_.insert({(currentPhase-1),std::make_shared<MicroProblem>(LocalMicrostructureClass_[(currentPhase-1)](),parameterSet_, module_)}); // (microProblem_[(currentPhase-1)])->getEffectiveQuantities(Beff_[(currentPhase-1)],Qhom_[(currentPhase-1)]); //this doesnt work in const-method?! - auto currentMicroProblem = std::make_shared<MicroProblem>(LocalMicrostructureClass_[(currentPhase-1)](),parameterSet_, module_); + auto currentMicroProblem = std::make_shared<MicroProblem>(LocalMicrostructureClass_[(currentPhase-1)](element.geometry().global(quadPos)),parameterSet_, module_); currentMicroProblem->getEffectiveQuantities(Beff_[(currentPhase-1)],Qhom_[(currentPhase-1)]); // auto microProblem = microProblem_.find(currentPhase); - // ((*microProblem).second)->updateMicrostructure(LocalMicrostructureClass_[(currentPhase-1)](element.geometry().global(quadPos))); + // ((*microProblem).second)->updateMicrostructure(LocalMicrostructureClass_[(currentPhase-1)](element.geometry().global(quadPos))); // ((*microProblem).second)->getEffectiveQuantities(Beff_[(currentPhase-1)],Qhom_[(currentPhase-1)]); } @@ -658,41 +643,41 @@ namespace Dune::GFE // //USAGE: - // //TODO + // //TODO // //create instance of globalMicrostructure_Class_ // // Python::Reference globalMicrostructure_ = globalMicrostructure_Class_(); // // //get LocalMicrostructureClass // // Python::Callable LocalMicrostructureClass = globalMicrostructure_.get("LocalMicrostructure_1"); - + // auto microProblem = microProblem_.find(0); - // ((*microProblem).second)->updateMicrostructure(LocalMicrostructureClass_[0](element.geometry().global(quadPos))); + // ((*microProblem).second)->updateMicrostructure(LocalMicrostructureClass_[0](element.geometry().global(quadPos))); // ((*microProblem).second)->getEffectiveQuantities(Beff_[0],Qhom_[0]); - // // (*microProblem_[0])->updateMicrostructure(LocalMicrostructureClass_[0](element.geometry().global(quadPos))); + // // (*microProblem_[0])->updateMicrostructure(LocalMicrostructureClass_[0](element.geometry().global(quadPos))); // // (*microProblem_[0])->getEffectiveQuantities(Beff_[0],Qhom_[0]); - + // //easier to simply create new microProblem object ... - // // microProblem_->updateMicrostructure(LocalMicrostructureClass_[0](element.geometry().global(quadPos))); + // // microProblem_->updateMicrostructure(LocalMicrostructureClass_[0](element.geometry().global(quadPos))); // // microProblem_->getEffectiveQuantities(Beff_[0],Qhom_[0]); - // // microProblem_->updateMicrostructure(microstructureClass_(element.geometry().global(quadPos))); + // // microProblem_->updateMicrostructure(microstructureClass_(element.geometry().global(quadPos))); // // microProblem_->getEffectiveQuantities(Beff_,Qhom_,count); // // count++; - + // /** - // * @brief TODO .. - // * + // * @brief TODO .. + // * // * 1.information from each quadrature point has to enter. // * 2. Caching of Effective Quantities - // * + // * // */ // // exit(0); @@ -705,30 +690,35 @@ namespace Dune::GFE - //Get values of the P2-Basis functions on current quadrature point - std::vector<FieldVector<double,1>> basisValues; - lagrangeLFE_.localBasis().evaluateFunction(quadPos, basisValues); + // //Get values of the P2-Basis functions on current quadrature point + // std::vector<FieldVector<double,1> > basisValues; + // lagrangeLFE_.localBasis().evaluateFunction(quadPos, basisValues); - const auto geometryJacobianInverse = geometry.jacobianInverse(quadPos); - std::vector<FieldMatrix<double,1,gridDim> > gradients; - lagrangeLFE_.localBasis().evaluateJacobian(quadPos, gradients); + // const auto geometryJacobianInverse = geometry.jacobianInverse(quadPos); + // std::vector<FieldMatrix<double,1,gridDim> > gradients; + // lagrangeLFE_.localBasis().evaluateJacobian(quadPos, gradients); - for (size_t i=0; i< gradients.size(); i++) - gradients[i] = gradients[i] * geometryJacobianInverse; + // for (size_t i=0; i< gradients.size(); i++) + // gradients[i] = gradients[i] * geometryJacobianInverse; - Tensor3<RT,3,gridDim,gridDim> discreteHessian(0); - FieldMatrix<RT, 3, gridDim> discreteGradient(0); + // Tensor3<RT,3,gridDim,gridDim> discreteHessian(0); + // FieldMatrix<RT, 3, gridDim> discreteGradient(0); + + // for (int k=0; k<3; k++) + // for (int l=0; l<gridDim; l++) + // for (std::size_t i=0; i<lagrangeLFE_.size(); i++) + // { + // discreteGradient[k][l] += discreteJacobianCoefficients[i][k][l]*basisValues[i]; + // discreteHessian[k][l][0] += discreteJacobianCoefficients[i][k][l]*gradients[i][0][0]; + // discreteHessian[k][l][1] += discreteJacobianCoefficients[i][k][l]*gradients[i][0][1]; + // } + + // Evaluate discrete Gradient and Hessian. + auto discreteGradient= localFunction_.evaluateDiscreteGradient(quadPoint.position()); + auto discreteHessian= localFunction_.evaluateDiscreteHessian(quadPoint.position()); + - for (int k=0; k<3; k++) - for (int l=0; l<gridDim; l++) - for (std::size_t i=0; i<lagrangeLFE_.size(); i++) - { - discreteGradient[k][l] += discreteJacobianCoefficients[i][k][l]*basisValues[i]; - discreteHessian[k][l][0] += discreteJacobianCoefficients[i][k][l]*gradients[i][0][0]; - discreteHessian[k][l][1] += discreteJacobianCoefficients[i][k][l]*gradients[i][0][1]; - } - if(PRINT_DEBUG) { /** @@ -739,27 +729,27 @@ namespace Dune::GFE FieldMatrix<RT, gridDim, gridDim> discreteHessian_slice3(0); for (int i=0; i<gridDim; i++) - for (int l=0; l<gridDim; l++) - { + for (int l=0; l<gridDim; l++) + { discreteHessian_slice1[i][l] = discreteHessian[0][i][l]; discreteHessian_slice2[i][l] = discreteHessian[1][i][l]; discreteHessian_slice3[i][l] = discreteHessian[2][i][l]; - } - printmatrix(std::cout, discreteHessian_slice1, "discreteHessian_slice1: ", "--"); - printmatrix(std::cout, discreteHessian_slice2, "discreteHessian_slice2: ", "--"); - printmatrix(std::cout, discreteHessian_slice3, "discreteHessian_slice3: ", "--"); - printmatrix(std::cout, sym(discreteHessian_slice1), "SYM discreteHessian_slice1: ", "--"); - printmatrix(std::cout, sym(discreteHessian_slice2), "SYM discreteHessian_slice2: ", "--"); - printmatrix(std::cout, sym(discreteHessian_slice3), "SYM discreteHessian_slice3: ", "--"); + } + // printmatrix(std::cout, discreteHessian_slice1, "discreteHessian_slice1: ", "--"); + // printmatrix(std::cout, discreteHessian_slice2, "discreteHessian_slice2: ", "--"); + // printmatrix(std::cout, discreteHessian_slice3, "discreteHessian_slice3: ", "--"); + // printmatrix(std::cout, sym(discreteHessian_slice1), "SYM discreteHessian_slice1: ", "--"); + // printmatrix(std::cout, sym(discreteHessian_slice2), "SYM discreteHessian_slice2: ", "--"); + // printmatrix(std::cout, sym(discreteHessian_slice3), "SYM discreteHessian_slice3: ", "--"); } /** - * @brief Compute the normal vector of the surface parametrized by the - * discrete deformation. This is given by the + * @brief Compute the normal vector of the surface parametrized by the + * discrete deformation. This is given by the * cross product of partial derivatives - */ + */ FieldVector<RT,3> partialX = {discreteGradient[0][0], discreteGradient[1][0], discreteGradient[2][0]}; FieldVector<RT,3> partialY = {discreteGradient[0][1], discreteGradient[1][1], discreteGradient[2][1]}; // Normalize if requested @@ -780,16 +770,26 @@ namespace Dune::GFE * @brief Compute the second fundamental form of the surface parametrized by the * discrete deformation. * We have to multiply by (-1.0) to get the right sign/normal/orientation. - */ + */ FieldMatrix<RT,gridDim,gridDim> secondFF(0); for(size_t m=0; m<2; m++) - for(size_t n=0; n<2; n++) - for(size_t k=0; k<3; k++) - secondFF[m][n] += surfaceNormal[k]*discreteHessian[k][n][m]; + for(size_t n=0; n<2; n++) + for(size_t k=0; k<3; k++) + secondFF[m][n] += surfaceNormal[k]*discreteHessian[k][n][m]; // To get the right sign: secondFF *= -1.0; + if(PRINT_DEBUG) + { + // Check Symmetry of discrete second fundamental form + if((secondFF - sym(secondFF)).frobenius_norm() > 1e-8) + { + std::cout << "frobenius-norm of skew-symmetric part of discrete second fundamental form :" << (secondFF - sym(secondFF)).frobenius_norm() << std::endl; + printmatrix(std::cout, secondFF, "secondFF: ", "--"); + } + + } /** * @brief Compute the first term: Qhom(II) @@ -799,17 +799,15 @@ namespace Dune::GFE RT term1 = 0.0; - std::vector<FieldVector<RT,3>> X(3); + std::vector<FieldVector<RT,3> > X(3); tensorToSymCoefficients(discreteHessian, X); - // apply Qhom to each slice of the Hessian... + // apply Qhom to each slice of the Hessian... for(int k=0; k<3; k++) - term1 += applyQhom(Qhom_[currentPhase-1],X[k], X[k]); - - - term1 *= weight; + term1 += applyQhom(Qhom_[currentPhase-1],X[k], X[k]); + term1 *= weight; /** @@ -826,50 +824,25 @@ namespace Dune::GFE RT term3 = weight * applyQhom(Qhom_[currentPhase-1],BeffCoefficients,BeffCoefficients); - harmonicEnergy += term1 - term2 + term3; - // std::cout << "harmonicEnergy: " << harmonicEnergy << std::endl; - + bendingEnergy += term1 - term2 + term3; + // std::cout << "bendingEnergy: " << bendingEnergy << std::endl; + /** * @brief Test: Discretize II-Beff directly. * This time with higher quad orders. * * Does not seem to produce good results.. - * + * */ // RT newTerm = weight* applyQhom(Qhom_[currentPhase-1],(secondFFCoefficients - BeffCoefficients),(secondFFCoefficients - BeffCoefficients)); - // harmonicEnergy += newTerm; + // bendingEnergy += newTerm; } - - - /** - * @brief Compute contribution of the force Term - * - * Integrate the scalar product of the force 'f' - * with the local deformation function 'localFunction_' - * over the current element. - */ - RT forceTermEnergy = 0; - - if (parameterSet_.get<bool>("assemble_force_term", 1)) - { - for (auto&& quadPoint : quadRule) - { - auto deformationValue = localFunction_.evaluate(quadPoint.position()); - auto forceValue = localForce_(quadPoint.position()); - auto weight = quadPoint.weight() * element.geometry().integrationElement(quadPoint.position()); - forceTermEnergy += deformationValue.globalCoordinates() * forceValue * weight; - } - } - - /** - * @brief Return total energy. - */ - return harmonicEnergy - forceTermEnergy; + return bendingEnergy; } }; } // namespace Dune::GFE -#endif \ No newline at end of file +#endif diff --git a/dune/microstructure/energies/discretekirchhoffbendingenergyprestrained_debug.hh b/dune/microstructure/energies/discretekirchhoffbendingenergyprestrained_debug.hh index c6c5091307d64b0c7902b242a0732bdae9dfd733..2d2994da6edfa804596e579972e7294c53fd9d42 100644 --- a/dune/microstructure/energies/discretekirchhoffbendingenergyprestrained_debug.hh +++ b/dune/microstructure/energies/discretekirchhoffbendingenergyprestrained_debug.hh @@ -11,18 +11,18 @@ #include <dune/localfunctions/lagrange/lagrangesimplex.hh> #include <cmath> -/** - * \brief Assemble the discrete Kirchhoff bending energy for a single element. - * - * The Kirchhoff bending energy consists of two parts: - * - * 1. The energy of Qhom(II - Beff) where II is the second fundamental form of the surface parametrized by the deformation function - * and Beff is a (given) effective prestrain tensor. - * +/** + * \brief Assemble the discrete Kirchhoff bending energy for a single element. + * + * The Kirchhoff bending energy consists of two parts: + * + * 1. The energy of Qhom(II - Beff) where II is the second fundamental form of the surface parametrized by the deformation function + * and Beff is a (given) effective prestrain tensor. + * * This contribution is split intro three parts which corresponds to the binomial formula (a+b)^2 = a^2 + 2ab + b^2 * each term is discretized separately. - * - * 2. An integral over the scalar product of a forcing term and the discrete deformation + * + * 2. An integral over the scalar product of a forcing term and the discrete deformation * (i.e. the evaluation of localFunction_ ). */ namespace Dune::GFE @@ -45,17 +45,17 @@ namespace Dune::GFE public: DiscreteKirchhoffBendingEnergyPrestrained(LocalDiscreteKirchhoffFunction &localFunction, - LocalForce &localForce, - const Dune::ParameterTree& parameterSet) - : localFunction_(localFunction), - localForce_(localForce), - parameterSet_(parameterSet) + LocalForce &localForce, + const Dune::ParameterTree& parameterSet) + : localFunction_(localFunction), + localForce_(localForce), + parameterSet_(parameterSet) {} /** \brief Assemble the energy for a single element */ - virtual RT energy (const typename Basis::LocalView& localView, - const std::vector<TargetSpace>& localSolution) const + virtual RT energy (const typename Basis::LocalView& localView, + const std::vector<TargetSpace>& localSolution) const { RT energy = 0; @@ -70,27 +70,27 @@ namespace Dune::GFE // MatrixType Qhom = quadraticForm_; - /** + /** * @brief Get effective prestrain Tensor */ - Dune::FieldVector<RT,3> Beffvec = parameterSet_.get<Dune::FieldVector<RT,3>>("effectivePrestrain", {0.0, 0.0, 0.0}); + Dune::FieldVector<RT,3> Beffvec = parameterSet_.get<Dune::FieldVector<RT,3> >("effectivePrestrain", {0.0, 0.0, 0.0}); Dune::FieldMatrix<RT,2,2> Beff = {{Beffvec[0], Beffvec[2]}, {Beffvec[2], Beffvec[1]} }; // printmatrix(std::cout, Beff, "effective prestrain (Beff): ", "--"); /** * @brief Get effective quadratic form Qhom - * + * * input-vector: [q_1,q_2,q_3,q_12,q_13,q_23] * is assembled into a matrix where the off-diagonal entries are divided by 2 (compare with definition in the paper) * ( q_1 , 0.5*q_12 , 0.5*q_13 ) * Q = ( 0.5*q_12 , q_2 , 0.5*q_23 ) * ( 0.5*q_13 , 0.5*q_23 , q_3 ) */ - Dune::FieldVector<RT,6> Qhomvec = parameterSet_.get<Dune::FieldVector<RT,6>>("effectiveQuadraticForm", {1.0, 1.0, 1.0, 0.0, 0.0, 0.0}); - MatrixType Qhom = {{Qhomvec[0] , 0.5*Qhomvec[3], 0.5*Qhomvec[4]}, - {0.5*Qhomvec[3], Qhomvec[1], 0.5*Qhomvec[5]}, - {0.5*Qhomvec[4], 0.5*Qhomvec[5], Qhomvec[2]}}; + Dune::FieldVector<RT,6> Qhomvec = parameterSet_.get<Dune::FieldVector<RT,6> >("effectiveQuadraticForm", {1.0, 1.0, 1.0, 0.0, 0.0, 0.0}); + MatrixType Qhom = {{Qhomvec[0] , 0.5*Qhomvec[3], 0.5*Qhomvec[4]}, + {0.5*Qhomvec[3], Qhomvec[1], 0.5*Qhomvec[5]}, + {0.5*Qhomvec[4], 0.5*Qhomvec[5], Qhomvec[2]}}; // printmatrix(std::cout, Qhom, "effective quadratic form (Qhom): ", "--"); @@ -110,7 +110,7 @@ namespace Dune::GFE quadOrder = (localFiniteElement.type().isSimplex()) ? (localFiniteElement.localBasis().order() - 1) * 2 : (localFiniteElement.localBasis().order() * gridDim - 1) * 2; #endif - + const auto element = localView.element(); auto geometry = element.geometry(); auto gridView = localFunction_.gridView(); @@ -131,40 +131,40 @@ namespace Dune::GFE // std::cout <<"ELEMENT NUMBER( indexSet.index(element)) ):" << indexSet.index(element) << std::endl; if(PRINT_DEBUG) { - std::cout << "geometry.corner(0): " << geometry.corner(0) << std::endl; - std::cout << "geometry.corner(1)): " << geometry.corner(1) << std::endl; - std::cout << "geometry.corner(2): " << geometry.corner(2) << std::endl; + std::cout << "geometry.corner(0): " << geometry.corner(0) << std::endl; + std::cout << "geometry.corner(1)): " << geometry.corner(1) << std::endl; + std::cout << "geometry.corner(2): " << geometry.corner(2) << std::endl; } /** - * @brief Get Coefficients of the discrete Jacobian - * + * @brief Get Coefficients of the discrete Jacobian + * * The discrete Jacobian is a special linear combination represented in a [P2]^2 - (Lagrange) space * The coefficients of this linear combination correspond to certain linear combinations of the Jacobians of localfunction_ . * The coefficients are stored in the form [Basisfunctions x components x gridDim] * in a BlockVector<FieldMatrix<RT, 3, gridDim>> . */ - BlockVector<FieldMatrix<RT, 3, gridDim>> discreteJacobianCoefficients; + BlockVector<FieldMatrix<RT, 3, gridDim> > discreteJacobianCoefficients; discreteGradientCoefficients(discreteJacobianCoefficients,lagrangeLFE_,localFunction_,element); - - - - + + + + /** * @brief Compute harmonic energy contribution: */ RT harmonicEnergy = 0; - + //VERSION - 1 #if 0 /** - * @brief Setup Quadrature rule. - * + * @brief Setup Quadrature rule. + * */ // Gauss-Quadrature: const auto &quadRule = QuadratureRules<double, gridDim>::rule(lagrangeLFE_.type(), quadOrder); @@ -175,7 +175,7 @@ namespace Dune::GFE for (auto&& quadPoint : quadRule) { //Get values of the P2-Basis functions on current quadrature point - std::vector<FieldVector<double,1>> basisValues; + std::vector<FieldVector<double,1> > basisValues; lagrangeLFE_.localBasis().evaluateFunction(quadPoint.position(), basisValues); // if(PRINT_DEBUG) @@ -186,14 +186,14 @@ namespace Dune::GFE // } // Get Jacobians of the P2-Basis functions on current quadrature point - std::vector<FieldMatrix<double, 1, gridDim>> referenceGradients; + std::vector<FieldMatrix<double, 1, gridDim> > referenceGradients; lagrangeLFE_.localBasis().evaluateJacobian(quadPoint.position(), referenceGradients); const auto jacobian = geometry.jacobianInverseTransposed(quadPoint.position()); const auto integrationElement = geometry.integrationElement(quadPoint.position()); // printmatrix(std::cout, jacobian , "jacobian : ", "--"); - std::vector<FieldVector<RT, gridDim>> gradients(referenceGradients.size()); + std::vector<FieldVector<RT, gridDim> > gradients(referenceGradients.size()); for (size_t i = 0; i<gradients.size(); i++) jacobian.mv(referenceGradients[i][0], gradients[i]); @@ -203,30 +203,30 @@ namespace Dune::GFE // lagrangeLFE_.localBasis().evaluateJacobian(quadPoint.position(), gradients); - Tensor3<RT,3,2,2> discreteHessian(0); + Tensor3<RT,3,2,2> discreteHessian(0); FieldMatrix<RT, 3, gridDim> discreteGradient(0); - /** - * @brief Compute the discrete Hessian and discrete Gradient as a linear combination of - * function and gradient evaluations of the P2-basis functions with the coefficients given - * by 'discreteJacobianCoefficients'. - * Since the deformation function has k=3 components we get - * - discreteGradient : 3x2 matrix - * - discreteHessian: 3x2x2 tensor - */ + /** + * @brief Compute the discrete Hessian and discrete Gradient as a linear combination of + * function and gradient evaluations of the P2-basis functions with the coefficients given + * by 'discreteJacobianCoefficients'. + * Since the deformation function has k=3 components we get + * - discreteGradient : 3x2 matrix + * - discreteHessian: 3x2x2 tensor + */ for (int k=0; k<3; k++) - for (int l=0; l<gridDim; l++) - for(std::size_t i=0; i<lagrangeLFE_.size(); i++) - { - // Compute discrete gradient - discreteGradient[k][l] += discreteJacobianCoefficients[i][k][l]*basisValues[i]; - // Compute discrete Hessian - discreteHessian[k][l][0] += discreteJacobianCoefficients[i][k][l]*gradients[i][0]; - discreteHessian[k][l][1] += discreteJacobianCoefficients[i][k][l]*gradients[i][1]; - // discreteHessian[k][l][0] += discreteJacobianCoefficients[i][k][l]*gradients[i][0][0]; - // discreteHessian[k][l][1] += discreteJacobianCoefficients[i][k][l]*gradients[i][0][1]; - } + for (int l=0; l<gridDim; l++) + for(std::size_t i=0; i<lagrangeLFE_.size(); i++) + { + // Compute discrete gradient + discreteGradient[k][l] += discreteJacobianCoefficients[i][k][l]*basisValues[i]; + // Compute discrete Hessian + discreteHessian[k][l][0] += discreteJacobianCoefficients[i][k][l]*gradients[i][0]; + discreteHessian[k][l][1] += discreteJacobianCoefficients[i][k][l]*gradients[i][1]; + // discreteHessian[k][l][0] += discreteJacobianCoefficients[i][k][l]*gradients[i][0][0]; + // discreteHessian[k][l][1] += discreteJacobianCoefficients[i][k][l]*gradients[i][0][1]; + } // DerivativeType whJacobianValue = localFunction_.evaluateDerivative(quadPoint.position()); @@ -239,7 +239,7 @@ namespace Dune::GFE // - + @@ -262,17 +262,17 @@ namespace Dune::GFE // if(PRINT_DEBUG) // { - /** - * @brief print the (two) different 3x2 slices of the discrete Hessian - */ + /** + * @brief print the (two) different 3x2 slices of the discrete Hessian + */ FieldMatrix<RT, 3, 2> discreteHessian_slice1(0); FieldMatrix<RT, 3, 2> discreteHessian_slice2(0); for (int k=0; k<3; k++) - for (int l=0; l<gridDim; l++) - { + for (int l=0; l<gridDim; l++) + { discreteHessian_slice1[k][l] = discreteHessian[k][l][0]; discreteHessian_slice2[k][l] = discreteHessian[k][l][1]; - } + } // printmatrix(std::cout, discreteHessian_slice1, "discreteHessian_slice1: ", "--"); // printmatrix(std::cout, discreteHessian_slice2, "discreteHessian_slice2: ", "--"); // } @@ -287,7 +287,7 @@ namespace Dune::GFE /** - * @brief Compute the surface normal given by the cross-product of the two different partial derivatives + * @brief Compute the surface normal given by the cross-product of the two different partial derivatives * of the discrete gradient. * This is needed to compute the second fundamental form. */ @@ -299,7 +299,7 @@ namespace Dune::GFE auto normY = partialY.two_norm(); /** - * @brief Test: normalize + * @brief Test: normalize */ // partialX /= normX; // partialY /= normY; @@ -311,9 +311,9 @@ namespace Dune::GFE // std::cout << "surfaceNormal.two_norm() : " << surfaceNormal.two_norm() << std::endl; // surfaceNormal *= -1.0; - + /** - * @brief Test: normalize + * @brief Test: normalize */ // auto norm = surfaceNormal.two_norm(); // surfaceNormal /= norm; @@ -326,24 +326,24 @@ namespace Dune::GFE FieldMatrix<RT,2,2> secondFF(0); for(size_t m=0; m<2; m++) - for(size_t n=0; n<2; n++) - for(size_t k=0; k<3; k++) - { - secondFF[m][n] += surfaceNormal[k]*discreteHessian[k][n][m]; - - - //Test: transposed version - // secondFF[m][n] += discreteHessian[k][m][n]*surfaceNormal[k]; - // secondFF[0][0] += surfaceNormal[k]*discreteHessian[k][0][0]; - // secondFF[0][1] += surfaceNormal[k]*discreteHessian[k][1][0]; - // secondFF[1][0] += surfaceNormal[k]*discreteHessian[k][0][1]; - // secondFF[1][1] += surfaceNormal[k]*discreteHessian[k][1][1]; - } + for(size_t n=0; n<2; n++) + for(size_t k=0; k<3; k++) + { + secondFF[m][n] += surfaceNormal[k]*discreteHessian[k][n][m]; + + + //Test: transposed version + // secondFF[m][n] += discreteHessian[k][m][n]*surfaceNormal[k]; + // secondFF[0][0] += surfaceNormal[k]*discreteHessian[k][0][0]; + // secondFF[0][1] += surfaceNormal[k]*discreteHessian[k][1][0]; + // secondFF[1][0] += surfaceNormal[k]*discreteHessian[k][0][1]; + // secondFF[1][1] += surfaceNormal[k]*discreteHessian[k][1][1]; + } // printmatrix(std::cout, secondFF , "secondFF: ", "--"); /** - * @brief Check orthogonality between discrete Hessian and discrete gradient + * @brief Check orthogonality between discrete Hessian and discrete gradient * at nodes. */ // std::cout << "---- ORTHOGONALITY CHECK 1: ----" << std::endl; @@ -402,7 +402,7 @@ namespace Dune::GFE /** * @brief Subtract the effective prestrain */ - auto G = secondFF - Beff; + auto G = secondFF - Beff; // auto symG = 0.5*(G.transposed() + G); @@ -415,7 +415,7 @@ namespace Dune::GFE auto weight = quadPoint.weight() * element.geometry().integrationElement(quadPoint.position()); /** - * @brief TEST: Check the difference between the squared Frobenius norm of the + * @brief TEST: Check the difference between the squared Frobenius norm of the * second fundamental form and discrete Hessian. * (Note that for isometries, these should be equal.) */ @@ -441,7 +441,7 @@ namespace Dune::GFE // { // term2 += weight * secondFF[i][j] * Beff[i][j]; // } - // auto term3 = 0.5 * weight * Beff.frobenius_norm2(); + // auto term3 = 0.5 * weight * Beff.frobenius_norm2(); // std::cout << "term1-term2+term3 :" << term1-term2+term3 << std::endl; // } @@ -496,17 +496,17 @@ namespace Dune::GFE // std::cout << "------ print P2-Basis evaluation -----" << std::endl; // for(std::size_t i=0; i<lagrangeLFE_.size(); i++) // { - // std::cout << i << "-th P2-basis function: " << std::endl; + // std::cout << i << "-th P2-basis function: " << std::endl; // printvector(std::cout, basisValues_edge1[i] , "basisValues_edge1[i] ", "--"); // } // for(std::size_t i=0; i<lagrangeLFE_.size(); i++) // { - // std::cout << i << "-th P2-basis function: " << std::endl; + // std::cout << i << "-th P2-basis function: " << std::endl; // printvector(std::cout, basisValues_edge2[i] , "basisValues_edge2[i] ", "--"); // } // for(std::size_t i=0; i<lagrangeLFE_.size(); i++) // { - // std::cout << i << "-th P2-basis function: " << std::endl; + // std::cout << i << "-th P2-basis function: " << std::endl; // printvector(std::cout, basisValues_edge3[i] , "basisValues_edge3[i] ", "--"); // } @@ -538,7 +538,7 @@ namespace Dune::GFE // // std::cout << "cos(geometry.global({0.5,0.5})[0]): " << cos(geometry.global({0.5,0.5})[0]) << std::endl; // // std::cout << "sin(geometry.global({0.0,0.5})[0]): " << sin(geometry.global({0.0,0.5})[0]) << std::endl; // // std::cout << "cos(geometry.global({0.0,0.5})[0]): " << cos(geometry.global({0.0,0.5})[0]) << std::endl; - // // TEST VERTICES + // // TEST VERTICES // // std::cout << "sin(geometry.global({0.0,0.0})[0]): " << sin(geometry.global({0.0,0.0})[0]) << std::endl; // // std::cout << "cos(geometry.global({0.0,0.0})[0]): " << cos(geometry.global({0.0,0.0})[0]) << std::endl; // // std::cout << "sin(geometry.global({1.0,0.0})[0]): " << sin(geometry.global({1.0,0.0})[0]) << std::endl; @@ -550,10 +550,10 @@ namespace Dune::GFE // exit(0); - // #if 0 + // #if 0 /** - * @brief VERSION - 2 : Mixed version using the binomal formula (a-b)^2 = a^2 - 2ab + b^2 - * for | II - Beff |^2 and discretize every term individually. + * @brief VERSION - 2 : Mixed version using the binomal formula (a-b)^2 = a^2 - 2ab + b^2 + * for | II - Beff |^2 and discretize every term individually. */ // Gauss-Quadrature: const auto &quadRule = QuadratureRules<double, gridDim>::rule(lagrangeLFE_.type(), quadOrder); @@ -565,49 +565,49 @@ namespace Dune::GFE { //Get values of the P2-Basis functions on current quadrature point - std::vector<FieldVector<double,1>> basisValues; + std::vector<FieldVector<double,1> > basisValues; lagrangeLFE_.localBasis().evaluateFunction(quadPoint.position(), basisValues); // Get Jacobians of the P2-Basis functions on current quadrature point - std::vector<FieldMatrix<double, 1, gridDim>> referenceGradients; + std::vector<FieldMatrix<double, 1, gridDim> > referenceGradients; lagrangeLFE_.localBasis().evaluateJacobian(quadPoint.position(), referenceGradients); const auto jacobian = geometry.jacobianInverseTransposed(quadPoint.position()); const auto integrationElement = geometry.integrationElement(quadPoint.position()); - std::vector<FieldVector<RT, gridDim>> gradients(referenceGradients.size()); + std::vector<FieldVector<RT, gridDim> > gradients(referenceGradients.size()); for (size_t i = 0; i<gradients.size(); i++) jacobian.mv(referenceGradients[i][0], gradients[i]); - Tensor3<RT,3,2,2> discreteHessian(0); + Tensor3<RT,3,2,2> discreteHessian(0); FieldMatrix<RT, 3, gridDim> discreteGradient(0); for (int k=0; k<3; k++) - for (int l=0; l<gridDim; l++) - for(std::size_t i=0; i<lagrangeLFE_.size(); i++) - { - discreteGradient[k][l] += discreteJacobianCoefficients[i][k][l]*basisValues[i]; - discreteHessian[k][l][0] += discreteJacobianCoefficients[i][k][l]*gradients[i][0]; - discreteHessian[k][l][1] += discreteJacobianCoefficients[i][k][l]*gradients[i][1]; - - } - + for (int l=0; l<gridDim; l++) + for(std::size_t i=0; i<lagrangeLFE_.size(); i++) + { + discreteGradient[k][l] += discreteJacobianCoefficients[i][k][l]*basisValues[i]; + discreteHessian[k][l][0] += discreteJacobianCoefficients[i][k][l]*gradients[i][0]; + discreteHessian[k][l][1] += discreteJacobianCoefficients[i][k][l]*gradients[i][1]; + + } + /** - * @brief print the (three) 2x2 slices of the discrete Hessian (check for symmetry) - */ + * @brief print the (three) 2x2 slices of the discrete Hessian (check for symmetry) + */ FieldMatrix<RT, 2, 2> discreteHessian_slice1(0); FieldMatrix<RT, 2, 2> discreteHessian_slice2(0); FieldMatrix<RT, 2, 2> discreteHessian_slice3(0); for (int i=0; i<2; i++) - for (int l=0; l<gridDim; l++) - { + for (int l=0; l<gridDim; l++) + { discreteHessian_slice1[i][l] = discreteHessian[0][i][l]; discreteHessian_slice2[i][l] = discreteHessian[1][i][l]; discreteHessian_slice3[i][l] = discreteHessian[2][i][l]; - } + } // printmatrix(std::cout, discreteHessian_slice1, "discreteHessian_slice1: ", "--"); // printmatrix(std::cout, discreteHessian_slice2, "discreteHessian_slice2: ", "--"); @@ -644,20 +644,20 @@ namespace Dune::GFE FieldMatrix<RT,2,2> secondFF(0); for(size_t m=0; m<2; m++) - for(size_t n=0; n<2; n++) - for(size_t k=0; k<3; k++) - { - secondFF[m][n] += surfaceNormal[k]*discreteHessian[k][n][m]; - } + for(size_t n=0; n<2; n++) + for(size_t k=0; k<3; k++) + { + secondFF[m][n] += surfaceNormal[k]*discreteHessian[k][n][m]; + } // To get the right sign: secondFF = -1.0*secondFF; - // substract effective prestrain - // G = G + Beff; + // substract effective prestrain + // G = G + Beff; - //Take symmetric part? + //Take symmetric part? // auto symG = 0.5*(G.transposed() + G); @@ -698,9 +698,9 @@ namespace Dune::GFE for(int k=0; k<3; k++) { // term1 += Qhom[0][0]*pow((2.0*discreteHessian[k][0][0]),2)+ Qhom[0][1]* ... more efficient (TODO) Qhom is symmetric - term1 += Qhom[0][0]*pow(X[k][0],2) + Qhom[0][1]*X[k][1]*X[k][0] + Qhom[0][2]*X[k][2]*X[k][0] - + Qhom[1][0]*X[k][0]*X[k][1] + Qhom[1][1]*pow(X[k][1],2) + Qhom[1][2]*X[k][2]*X[k][1] - + Qhom[2][0]*X[k][0]*X[k][2] + Qhom[2][1]*X[k][1]*X[k][2] + Qhom[2][2]*pow(X[k][2],2); + term1 += Qhom[0][0]*pow(X[k][0],2) + Qhom[0][1]*X[k][1]*X[k][0] + Qhom[0][2]*X[k][2]*X[k][0] + + Qhom[1][0]*X[k][0]*X[k][1] + Qhom[1][1]*pow(X[k][1],2) + Qhom[1][2]*X[k][2]*X[k][1] + + Qhom[2][0]*X[k][0]*X[k][2] + Qhom[2][1]*X[k][1]*X[k][2] + Qhom[2][2]*pow(X[k][2],2); } // term1 = term1 * 0.5 * weight; term1 = term1 * weight; @@ -719,29 +719,29 @@ namespace Dune::GFE // { // term2 += weight * secondFF[i][j] * Beff[i][j]; // } - + FieldVector<RT,3> secondFFCoefficients = matrixToSymCoefficients(secondFF); FieldVector<RT,3> BeffCoefficients = matrixToSymCoefficients(Beff); RT term2 = 0.0; - term2 += Qhom[0][0]*BeffCoefficients[0]*secondFFCoefficients[0] + Qhom[0][1]*BeffCoefficients[1]*secondFFCoefficients[0] + Qhom[0][2]*BeffCoefficients[2]*secondFFCoefficients[0] - + Qhom[1][0]*BeffCoefficients[0]*secondFFCoefficients[1] + Qhom[1][1]*BeffCoefficients[1]*secondFFCoefficients[1] + Qhom[1][2]*BeffCoefficients[2]*secondFFCoefficients[1] - + Qhom[2][0]*BeffCoefficients[0]*secondFFCoefficients[2] + Qhom[2][1]*BeffCoefficients[1]*secondFFCoefficients[2] + Qhom[2][2]*BeffCoefficients[2]*secondFFCoefficients[2]; + term2 += Qhom[0][0]*BeffCoefficients[0]*secondFFCoefficients[0] + Qhom[0][1]*BeffCoefficients[1]*secondFFCoefficients[0] + Qhom[0][2]*BeffCoefficients[2]*secondFFCoefficients[0] + + Qhom[1][0]*BeffCoefficients[0]*secondFFCoefficients[1] + Qhom[1][1]*BeffCoefficients[1]*secondFFCoefficients[1] + Qhom[1][2]*BeffCoefficients[2]*secondFFCoefficients[1] + + Qhom[2][0]*BeffCoefficients[0]*secondFFCoefficients[2] + Qhom[2][1]*BeffCoefficients[1]*secondFFCoefficients[2] + Qhom[2][2]*BeffCoefficients[2]*secondFFCoefficients[2]; term2 = 2.0 * term2 * weight; - // auto term3 = 0.5 * weight* Beff.frobenius_norm2(); + // auto term3 = 0.5 * weight* Beff.frobenius_norm2(); + + RT term3 = 0.0; - RT term3 = 0.0; + term3 += Qhom[0][0]*BeffCoefficients[0]*BeffCoefficients[0] + Qhom[0][1]*BeffCoefficients[1]*BeffCoefficients[0] + Qhom[0][2]*BeffCoefficients[2]*BeffCoefficients[0] + + Qhom[1][0]*BeffCoefficients[0]*BeffCoefficients[1] + Qhom[1][1]*BeffCoefficients[1]*BeffCoefficients[1] + Qhom[1][2]*BeffCoefficients[2]*BeffCoefficients[1] + + Qhom[2][0]*BeffCoefficients[0]*BeffCoefficients[2] + Qhom[2][1]*BeffCoefficients[1]*BeffCoefficients[2] + Qhom[2][2]*BeffCoefficients[2]*BeffCoefficients[2]; - term3 += Qhom[0][0]*BeffCoefficients[0]*BeffCoefficients[0] + Qhom[0][1]*BeffCoefficients[1]*BeffCoefficients[0] + Qhom[0][2]*BeffCoefficients[2]*BeffCoefficients[0] - + Qhom[1][0]*BeffCoefficients[0]*BeffCoefficients[1] + Qhom[1][1]*BeffCoefficients[1]*BeffCoefficients[1] + Qhom[1][2]*BeffCoefficients[2]*BeffCoefficients[1] - + Qhom[2][0]*BeffCoefficients[0]*BeffCoefficients[2] + Qhom[2][1]*BeffCoefficients[1]*BeffCoefficients[2] + Qhom[2][2]*BeffCoefficients[2]*BeffCoefficients[2]; - // term3 = term3 * 0.5 * weight ; term3 = term3 * weight ; @@ -751,7 +751,7 @@ namespace Dune::GFE // std::cout << "term1 - term2 + term3: " << term1 - term2 + term3 << std::endl; // harmonicEnergy += weight * G.frobenius_norm2(); - harmonicEnergy += term1 - term2 + term3; //eigentlich muss man term2 abziehen bei | II - Z | + harmonicEnergy += term1 - term2 + term3; //eigentlich muss man term2 abziehen bei | II - Z | // std::cout << "harmonicEnergy: " << harmonicEnergy << std::endl; } @@ -760,8 +760,8 @@ namespace Dune::GFE #if 0 /** - * @brief VERSION - 3 : Mixed version using the binomal formula (a-b)^2 = a^2 - 2ab + b^2 - * for | II - Beff |^2 and discretize every term individually. + * @brief VERSION - 3 : Mixed version using the binomal formula (a-b)^2 = a^2 - 2ab + b^2 + * for | II - Beff |^2 and discretize every term individually. * *But with |II|^2 instead of |D^2y|^2 */ // Gauss-Quadrature: @@ -774,34 +774,34 @@ namespace Dune::GFE { //Get values of the P2-Basis functions on current quadrature point - std::vector<FieldVector<double,1>> basisValues; + std::vector<FieldVector<double,1> > basisValues; lagrangeLFE_.localBasis().evaluateFunction(quadPoint.position(), basisValues); // Get Jacobians of the P2-Basis functions on current quadrature point - std::vector<FieldMatrix<double, 1, gridDim>> referenceGradients; + std::vector<FieldMatrix<double, 1, gridDim> > referenceGradients; lagrangeLFE_.localBasis().evaluateJacobian(quadPoint.position(), referenceGradients); const auto jacobian = geometry.jacobianInverseTransposed(quadPoint.position()); const auto integrationElement = geometry.integrationElement(quadPoint.position()); - std::vector<FieldVector<RT, gridDim>> gradients(referenceGradients.size()); + std::vector<FieldVector<RT, gridDim> > gradients(referenceGradients.size()); for (size_t i = 0; i<gradients.size(); i++) jacobian.mv(referenceGradients[i][0], gradients[i]); - Tensor3<RT,3,2,2> discreteHessian(0); + Tensor3<RT,3,2,2> discreteHessian(0); FieldMatrix<RT, 3, gridDim> discreteGradient(0); for (int k=0; k<3; k++) - for (int l=0; l<gridDim; l++) - for(std::size_t i=0; i<lagrangeLFE_.size(); i++) - { - discreteGradient[k][l] += discreteJacobianCoefficients[i][k][l]*basisValues[i]; - discreteHessian[k][l][0] += discreteJacobianCoefficients[i][k][l]*gradients[i][0]; - discreteHessian[k][l][1] += discreteJacobianCoefficients[i][k][l]*gradients[i][1]; - - } + for (int l=0; l<gridDim; l++) + for(std::size_t i=0; i<lagrangeLFE_.size(); i++) + { + discreteGradient[k][l] += discreteJacobianCoefficients[i][k][l]*basisValues[i]; + discreteHessian[k][l][0] += discreteJacobianCoefficients[i][k][l]*gradients[i][0]; + discreteHessian[k][l][1] += discreteJacobianCoefficients[i][k][l]*gradients[i][1]; + + } //compute normal vector (cross product of partial derivatives) @@ -831,22 +831,22 @@ namespace Dune::GFE FieldMatrix<RT,2,2> secondFF(0); for(size_t m=0; m<2; m++) - for(size_t n=0; n<2; n++) - for(size_t k=0; k<3; k++) - { - secondFF[m][n] += surfaceNormal[k]*discreteHessian[k][n][m]; - //Test: transposed version - // secondFF[m][n] += discreteHessian[k][m][n]*surfaceNormal[k]; - // secondFF[0][0] += surfaceNormal[k]*discreteHessian[k][0][0]; - // secondFF[0][1] += surfaceNormal[k]*discreteHessian[k][1][0]; - // secondFF[1][0] += surfaceNormal[k]*discreteHessian[k][0][1]; - // secondFF[1][1] += surfaceNormal[k]*discreteHessian[k][1][1]; - } - - // substract effective prestrain - // G = G + Beff; - - //Take symmetric part? + for(size_t n=0; n<2; n++) + for(size_t k=0; k<3; k++) + { + secondFF[m][n] += surfaceNormal[k]*discreteHessian[k][n][m]; + //Test: transposed version + // secondFF[m][n] += discreteHessian[k][m][n]*surfaceNormal[k]; + // secondFF[0][0] += surfaceNormal[k]*discreteHessian[k][0][0]; + // secondFF[0][1] += surfaceNormal[k]*discreteHessian[k][1][0]; + // secondFF[1][0] += surfaceNormal[k]*discreteHessian[k][0][1]; + // secondFF[1][1] += surfaceNormal[k]*discreteHessian[k][1][1]; + } + + // substract effective prestrain + // G = G + Beff; + + //Take symmetric part? // auto symG = 0.5*(G.transposed() + G); @@ -885,12 +885,12 @@ namespace Dune::GFE RT term2 = 0.0; for(size_t i=0; i<2; i++) - for(size_t j=0; j<2; j++) - { - term2 += weight * secondFF[i][j] * Beff[i][j]; - } + for(size_t j=0; j<2; j++) + { + term2 += weight * secondFF[i][j] * Beff[i][j]; + } - auto term3 = 0.5 * weight* Beff.frobenius_norm2(); + auto term3 = 0.5 * weight* Beff.frobenius_norm2(); // std::cout << "term1: " << term1 << std::endl; // std::cout << "term2: " << term2 << std::endl; @@ -898,7 +898,7 @@ namespace Dune::GFE // std::cout << "term1 - term2 + term3: " << term1 - term2 + term3 << std::endl; // harmonicEnergy += weight * G.frobenius_norm2(); - harmonicEnergy += term1 - term2 + term3; //eigentlich muss man term2 abziehen bei | II - Z | + harmonicEnergy += term1 - term2 + term3; //eigentlich muss man term2 abziehen bei | II - Z | // std::cout << "harmonicEnergy: " << harmonicEnergy << std::endl; } @@ -907,8 +907,8 @@ namespace Dune::GFE /** * @brief Compute contribution of the force Term - * - * Integrate the scalar product of the force 'f' + * + * Integrate the scalar product of the force 'f' * with the local deformation function 'localFunction_' * over the current element. */ @@ -918,17 +918,17 @@ namespace Dune::GFE { for (auto&& quadPoint : quadRule) { - auto deformationValue = localFunction_.evaluate(quadPoint.position()); - auto forceValue = localForce_(quadPoint.position()); - // printvector(std::cout, deformationValue.globalCoordinates(), "deformationValue", "--"); - // printvector(std::cout, forceValue, "forceValue", "--"); - // const auto jacobian = geometry.jacobianInverseTransposed(quadPoint.position()); - auto weight = quadPoint.weight() * element.geometry().integrationElement(quadPoint.position()); - forceTermEnergy += deformationValue.globalCoordinates() * forceValue * weight; - // std::cout << "forceTermEnergy:" << forceTermEnergy << std::endl; + auto deformationValue = localFunction_.evaluate(quadPoint.position()); + auto forceValue = localForce_(quadPoint.position()); + // printvector(std::cout, deformationValue.globalCoordinates(), "deformationValue", "--"); + // printvector(std::cout, forceValue, "forceValue", "--"); + // const auto jacobian = geometry.jacobianInverseTransposed(quadPoint.position()); + auto weight = quadPoint.weight() * element.geometry().integrationElement(quadPoint.position()); + forceTermEnergy += deformationValue.globalCoordinates() * forceValue * weight; + // std::cout << "forceTermEnergy:" << forceTermEnergy << std::endl; } } - + return harmonicEnergy - forceTermEnergy; } @@ -947,4 +947,4 @@ namespace Dune::GFE }; } // namespace Dune::GFE -#endif \ No newline at end of file +#endif diff --git a/dune/microstructure/localdiscretekirchhoffbendingisometry.hh b/dune/microstructure/localdiscretekirchhoffbendingisometry.hh new file mode 100644 index 0000000000000000000000000000000000000000..6ebf07fe88a13d9f1e19ff29652644cf431ccfd5 --- /dev/null +++ b/dune/microstructure/localdiscretekirchhoffbendingisometry.hh @@ -0,0 +1,388 @@ +#ifndef DUNE_MICROSTRUCTURE_LOCALDISCRETEKIRCHHOFFBENDINGISOMETRY_HH +#define DUNE_MICROSTRUCTURE_LOCALDISCRETEKIRCHHOFFBENDINGISOMETRY_HH + +#include <vector> + +#include <dune/common/fvector.hh> + +#include <dune/geometry/type.hh> +#include <dune/geometry/quadraturerules.hh> + +#include <dune/gfe/spaces/productmanifold.hh> +#include <dune/gfe/spaces/realtuple.hh> +#include <dune/gfe/spaces/rotation.hh> +#include <dune/gfe/functions/localisometrycomponentfunction.hh> +#include <dune/gfe/localprojectedfefunction.hh> +#include <dune/gfe/bendingisometryhelper.hh> + +#include <dune/functions/functionspacebases/cubichermitebasis.hh> + +namespace Dune::GFE +{ + /** \brief Interpolate a Discrete Kirchhoff finite element function from a set of RealTuple x Rotation coefficients + * + * The Discrete Kirchhoff finite element is a Hermite-type element. + * The Rotation component of the coefficient set represents the deformation gradient. + * + * The class stores both a global coefficient vector 'coefficients_' + * as well as a local coefficient vector 'localHermiteCoefficients_' + * that is used for local evaluation after binding to an element. + * + * + * \tparam DiscreteKirchhoffBasis The basis used to compute function values + * \tparam CoefficientBasis The basis used to index the coefficient vector. + * \tparam Coefficients The container of global coefficients + */ + template <int dim, class ctype, class LocalHermiteFiniteElement> + class LocalDiscreteKirchhoffBendingIsometry + { + + public: + using TargetSpace = GFE::ProductManifold<RealTuple<double,3>, Rotation<double,3> >; + using ATargetSpace = typename TargetSpace::template rebind<adouble>::other; + + using IsometryCoefficients = std::vector<TargetSpace>; + + constexpr static int gridDim = dim; + using RT = ctype; + // using Coefficient = typename Coefficients::value_type; + // using RT = typename Coefficient::ctype; + + static constexpr int components_ = 3; + + + // typedef typename GFE::RealTuple<RT, components_ > ValueType; + using ValueType = RealTuple<double,components_>; + + typedef typename Dune::LagrangeSimplexLocalFiniteElement<ctype, double, gridDim, 1> P1LagrangeLFE; + + typedef Dune::GFE::LocalProjectedFEFunction<gridDim, ctype, P1LagrangeLFE, Dune::GFE::ProductManifold<RealTuple<RT,components_>, Rotation<RT,components_> > > LocalPBInterpolationRule; + + /** \brief The type used for derivatives */ + typedef Dune::FieldMatrix<RT, components_, gridDim> DerivativeType; + + + // /** \brief Constructor + // * \param basis An object of Hermite basis type + // * \param coefficientBasis An object of type LagrangeBasis<GridView,1> + // * \param globalIsometryCoefficients Values and derivatives of the function at the Lagrange points + // */ + // LocalDiscreteKirchhoffBendingIsometry(const DiscreteKirchhoffBasis& discreteKirchhoffBasis, + // const CoefficientBasis& coefficientBasis, + // Coefficients& globalIsometryCoefficients) + // : basis_(discreteKirchhoffBasis), + // coefficientBasis_(coefficientBasis), + // localView_(basis_), + // localViewCoefficient_(coefficientBasis_), + // globalIsometryCoefficients_(globalIsometryCoefficients) + // {} + /** \brief Constructor + * \param localHermiteFiniteElement A Hermite finite element + * \param coefficients Values of the function at the Lagrange points + */ + LocalDiscreteKirchhoffBendingIsometry(const LocalHermiteFiniteElement& localHermiteFiniteElement, + const IsometryCoefficients& isometryCoefficients) + : localHermiteFiniteElement_(localHermiteFiniteElement), + isometryCoefficients_(isometryCoefficients) + { + convertIsometryToHermiteCoefficients(isometryCoefficients); + } + + // /** \brief The number of Local degrees of freedom */ + // unsigned int size() const + // { + // return LocalHermiteFiniteElement_.localBasis().size(); + // } + + /** \brief The type of the reference element */ + Dune::GeometryType type() const + { + return localHermiteFiniteElement_.type(); + } + + const LocalHermiteFiniteElement& localFiniteElement() const + { + return localHermiteFiniteElement_; + } + + + // /** \brief Evaluate the function */ + // auto evaluate(const Dune::FieldVector<ctype, dim>& local) const; + + // /** \brief Evaluate the derivative of the function */ + // DerivativeType evaluateDerivative(const Dune::FieldVector<ctype, dim>& local) const; + + // // /** \brief Evaluate the derivative of the function, if you happen to know the function value (much faster!) + // // * \param local Local coordinates in the reference element where to evaluate the derivative + // // * \param q Value of the local gfe function at 'local'. If you provide something wrong here the result will be wrong, too! + // // * + // // * \note This method is only usable in the conforming setting, because it requires the caller + // // * to hand over the interpolation value as a TargetSpace object. + // // */ + // // DerivativeType evaluateDerivative(const Dune::FieldVector<ctype, dim>& local, + // // const TargetSpace& q) const; + + // /** \brief Evaluate the value and the derivative of the interpolation function + // * + // * \return A std::pair containing the value and the first derivative of the interpolation function. + // * If the interpolation is conforming then the first member of the pair will be a TargetSpace. + // * Otherwise it will be a RealTuple. + // */ + // auto evaluateValueAndDerivative(const Dune::FieldVector<ctype, dim>& local) const; + + + + /** \brief Get the i'th base coefficient. */ + const TargetSpace& coefficient(int i) const + { + return isometryCoefficients_[i]; + } + + + + + /** + The coefficients are of "manifold"-type. In order to construct a linear combination of these values + with the values of the Hermite-basis evaluations we need to first interpolate them into the hermite basis + to get the scaling right. + */ + void convertIsometryToHermiteCoefficients(const IsometryCoefficients& localIsometryCoefficients) + { + // localViewCoefficient_.bind(element); + + //Create a LocalProjected-Finite element from the local coefficients used for interpolation. + // auto P1LagrangeLFE = localViewCoefficient_.tree().finiteElement(); + Dune::LagrangeSimplexLocalFiniteElement<ctype, double, gridDim, 2> P1LagrangeLFE ; + LocalPBInterpolationRule localPBfunction(P1LagrangeLFE,localIsometryCoefficients); + + /** + Interpolate into the local hermite space for each component. + */ + // const auto &localHermiteFiniteElement = localView_.tree().child(0).finiteElement(); + for(size_t k=0; k<components_; k++) + { + std::vector<RT> hermiteComponentCoefficients; + Dune::GFE::Impl::LocalIsometryComponentFunction<double,LocalPBInterpolationRule> localIsometryComponentFunction(localPBfunction,k); + + localHermiteFiniteElement_.localInterpolation().interpolate(localIsometryComponentFunction,hermiteComponentCoefficients); + + for(size_t i=0; i<localHermiteFiniteElement_.size(); i++) + localHermiteCoefficients_[i][k] = hermiteComponentCoefficients[i]; + } + } + + + + // ------------------------------------------------- + + // void bind(const typename GridView::template Codim<0>::Entity& element) + // { + // localView_.bind(element); + + // /** extract the local coefficients from the global coefficient vector */ + // std::vector<Coefficient> localIsometryCoefficients; + // getLocalIsometryCoefficients(localIsometryCoefficients,element); + // updateLocalHermiteCoefficients(localIsometryCoefficients,element); + // } + + // /** bind to an element and update the coefficient member variables for a set of new local coefficients */ + // void bind(const typename GridView::template Codim<0>::Entity& element,const Coefficients& newLocalCoefficients) + // { + // this->bind(element); + + // // Update the global isometry coefficients. + // for (unsigned int vertex=0; vertex<3; ++vertex) + // { + // size_t localIdx = localViewCoefficient_.tree().localIndex(vertex); + // size_t globalIdx = localViewCoefficient_.index(localIdx); + // globalIsometryCoefficients_[globalIdx] = newLocalCoefficients[vertex]; + // } + + // // Update the local hermite coefficients. + // updateLocalHermiteCoefficients(newLocalCoefficients,element); + // } + + + /** \brief Evaluate the function */ + auto evaluate(const Dune::FieldVector<ctype, gridDim>& local) const + { + // const auto &localFiniteElement = localView_.tree().child(0).finiteElement(); + + // Evaluate the shape functions + std::vector<FieldVector<double, 1> > values; + localHermiteFiniteElement_.localBasis().evaluateFunction(local, values); + + FieldVector<RT,components_> result(0); + + for(size_t i=0; i<localHermiteFiniteElement_.size(); i++) + result.axpy(values[i][0], localHermiteCoefficients_[i]); + + return (RealTuple<RT, components_>)result; + } + + /** \brief Evaluate the derivative of the function */ + DerivativeType evaluateDerivative(const Dune::FieldVector<ctype, gridDim>& local) const + { + // const auto &LocalHermiteFiniteElement = localView_.tree().child(0).finiteElement(); + // const auto jacobianInverse = localView_.element().geometry().jacobianInverse(local); + + std::vector<FieldMatrix<double,1,gridDim> > jacobianValues; + localHermiteFiniteElement_.localBasis().evaluateJacobian(local, jacobianValues); + // for (size_t i = 0; i<jacobianValues.size(); i++) + // jacobianValues[i] = jacobianValues[i] * jacobianInverse; + + DerivativeType result(0); + + for(size_t i=0; i<localHermiteFiniteElement_.size(); i++) + for (unsigned int k = 0; k<components_; k++) + for (unsigned int j = 0; j<gridDim; ++j) + result[k][j] += (jacobianValues[i][0][j] * localHermiteCoefficients_[i][k]); + + return result; + } + + + auto evaluateValueAndDerivative(const Dune::FieldVector<ctype, dim>& local) const + { + // Construct the type of the result -- it depends on whether the interpolation + // is conforming or not. + // using Value = std::conditional_t<conforming,TargetSpace,RealTuple<RT,embeddedDim> >; + + + std::pair<ValueType,DerivativeType> result; + + /////////////////////////////////////////////////////////// + // Compute the value of the interpolation function + /////////////////////////////////////////////////////////// + + // Evaluate the shape functions + std::vector<FieldVector<double, 1> > values; + localHermiteFiniteElement_.localBasis().evaluateFunction(local, values); + + FieldVector<RT,components_> value_result(0); + + for(size_t i=0; i<localHermiteFiniteElement_.size(); i++) + value_result.axpy(values[i][0], localHermiteCoefficients_[i]); + + result.first = (RealTuple<RT, components_>)value_result; + + + /////////////////////////////////////////////////////////// + // Compute the derivative of the interpolation function + /////////////////////////////////////////////////////////// + + std::vector<FieldMatrix<double,1,gridDim> > jacobianValues; + localHermiteFiniteElement_.localBasis().evaluateJacobian(local, jacobianValues); + + DerivativeType der_result(0); + + for(size_t i=0; i<localHermiteFiniteElement_.size(); i++) + for (unsigned int k = 0; k<components_; k++) + for (unsigned int j = 0; j<gridDim; ++j) + der_result[k][j] += (jacobianValues[i][0][j] * localHermiteCoefficients_[i][k]); + + result.second = der_result; + + return result; + } + + /** \brief Evaluate the derivative of the function, if you happen to know the function value (much faster!) + * \param local Local coordinates in the reference element where to evaluate the derivative + * \param q Value of the local gfe function at 'local'. If you provide something wrong here the result will be wrong, too! + */ + DerivativeType evaluateDerivative(const Dune::FieldVector<ctype, gridDim>& local, + const ValueType& q) const + { + return evaluateDerivative(local); + } + + // //! Obtain the grid view that the basis is defined on + // const GridView &gridView() const + // { + // return basis_.gridView(); + // } + + // void updateglobalIsometryCoefficients(const Coefficients& newCoefficients) + // { + // globalIsometryCoefficients_ = newCoefficients; +// } + +// /** +// Update the local hermite basis coefficient vector +// */ +// void updateLocalHermiteCoefficients(const Coefficients& localIsometryCoefficients,const typename GridView::template Codim<0>::Entity& element) +// { +// localViewCoefficient_.bind(element); + +// //Create a LocalProjected-Finite element from the local coefficients used for interpolation. +// auto P1LagrangeLFE = localViewCoefficient_.tree().finiteElement(); +// LocalInterpolationRule localPBfunction(P1LagrangeLFE,localIsometryCoefficients); + +// /** +// Interpolate into the local hermite space for each component. +// */ +// const auto &localHermiteFiniteElement = localView_.tree().child(0).finiteElement(); + +// for(size_t k=0; k<components_; k++) +// { +// std::vector<RT> hermiteComponentCoefficients; +// Dune::GFE::Impl::LocalIsometryComponentFunction<double,LocalInterpolationRule> localIsometryComponentFunction(localPBfunction,k); + +// localHermiteFiniteElement.localInterpolation().interpolate(localIsometryComponentFunction,hermiteComponentCoefficients); + +// for(size_t i=0; i<localHermiteFiniteElement.size(); i++) +// localHermiteCoefficients_[i][k] = hermiteComponentCoefficients[i]; +// } +// } + +// /** Extract the local isometry coefficients. */ +// void getLocalIsometryCoefficients(std::vector<Coefficient>& in,const typename GridView::template Codim<0>::Entity& element) +// { +// localViewCoefficient_.bind(element); + +// in.resize(3); +// for (unsigned int vertex = 0; vertex<3; ++vertex) +// { +// size_t localIdx = localViewCoefficient_.tree().localIndex(vertex); +// size_t globalIdx = localViewCoefficient_.index(localIdx); +// in[vertex] = globalIsometryCoefficients_[globalIdx]; +// } +// } + + +// #if 0 +// /** \brief Get the i'th base coefficient. */ +// TargetSpace coefficient(int i) const +// { +// return globalIsometryCoefficients_[i]; +// } +// #endif + private: + + /** \brief Hermite Finite element */ + const LocalHermiteFiniteElement& localHermiteFiniteElement_; + + // /** \brief The Lagrange basis used to assign manifold-valued degrees of freedom */ + // const CoefficientBasis& coefficientBasis_; + + // /** \brief The hermite basis used to represent deformations */ + // const DiscreteKirchhoffBasis& basis_; + + // mutable typename DiscreteKirchhoffBasis::LocalView localView_; + // mutable typename CoefficientBasis::LocalView localViewCoefficient_; + + // /** \brief The global coefficient vector */ + // Coefficients& globalIsometryCoefficients_; + + // The coefficients of this interpolation rule + IsometryCoefficients isometryCoefficients_; + + static constexpr int localHermiteBasisSize_ = Dune::Functions::Impl::CubicHermiteLocalCoefficients<gridDim,true>::size(); + + /** \brief The local coefficient vector of the hermite basis. */ + std::array<Dune::FieldVector<RT,components_>,localHermiteBasisSize_> localHermiteCoefficients_; + + }; + +} // end namespace Dune::GFE +#endif // DUNE_MICROSTRUCTURE_LOCALDISCRETEKIRCHHOFFBENDINGISOMETRY_HH diff --git a/dune/microstructure/matrix_operations.hh b/dune/microstructure/matrix_operations.hh index e99a6112b9dc22746703dbf6a3aae01e7ccc3fb5..868e254dcfcc2a59d2f36aa9665a602da468dfb2 100644 --- a/dune/microstructure/matrix_operations.hh +++ b/dune/microstructure/matrix_operations.hh @@ -3,230 +3,180 @@ namespace MatrixOperations { - using MatrixRT = Dune::FieldMatrix< double, 3, 3>; - using VectorRT = Dune::FieldVector< double, 3>; - - using std::sin; - using std::cos; - - - - static MatrixRT sym (MatrixRT M) { // 1/2 (M^T + M) - MatrixRT ret(0); - for (int i=0; i<3; i++) - { - ret[i][i] = M[i][i]; - for (int j=i+1; j<3; j++) - { - ret[i][j] = 0.5*(M[i][j] + M[j][i]); - ret[j][i] = ret[i][j]; - } - } - return ret; - } - - - static VectorRT crossProduct (VectorRT v, VectorRT w) { // v otimes w - return {v[1]*w[2] - v[2]*w[1], -1*(v[0]*w[2] - v[2]*w[0]), v[0]*w[1] - v[1]*w[0]}; - } - - static MatrixRT rankoneTensorproduct (VectorRT v, VectorRT w) { // v otimes w - return - {{v[0]*w[0], v[1]*w[0], v[2]*w[0]}, - {v[0]*w[1], v[1]*w[1], v[2]*w[1]}, - {v[0]*w[2], v[1]*w[2], v[2]*w[2]}}; - } - - static MatrixRT nematicLiquidCrystal (double p, VectorRT n){ //B = 1/6*p*Id + 1/2*p*(n otimes n) - MatrixRT B(0); - for (int i=0;i<3;i++) - B[i][i]=p/6.0; - MatrixRT n_ot_n = rankoneTensorproduct(n,n); - n_ot_n*=p/2.0; - B += n_ot_n; - return B; - } - - static MatrixRT biotStrainApprox (VectorRT U, VectorRT k, VectorRT e_cs){ //E_h = (U + k x e_cs, 0, 0) - VectorRT k_x_ecs = crossProduct(k, e_cs); - VectorRT U_plus_k_x_ecs = U + k_x_ecs; - VectorRT e_1 = {1, 0, 0}; - return rankoneTensorproduct(U_plus_k_x_ecs, e_1); - } - - - static MatrixRT crossSectionDirectionScaling(double w, MatrixRT M){ - return {{M[0][0], M[0][1], w*M[0][2]}, - {M[1][0], M[1][1], w*M[1][2]}, - {M[2][0], M[2][1], w*M[2][2]} - }; - } - - static double trace (MatrixRT M){ - return M[0][0]+ M[1][1] + M[2][2]; - } - - static double scalarProduct (MatrixRT M1, MatrixRT M2){ - double sum = 0.0; - for (int i=0; i<3; i++) - for (int j=0; j<3; j++) - sum += M1[i][j] * M2[i][j]; - return sum; - } - - - /** - * @brief Determines rotation matrix based on an axis and an angle - * - * @param axis - * @param angle - * @return MatrixRT - */ - static MatrixRT rotationMatrix(int axis, double angle){ - - switch (axis) - { - case 0: - { - return {{1.0, 0, 0 }, - { 0, cos(angle), -1.0*sin(angle)}, - { 0, sin(angle), cos(angle)}}; - } - case 1: - { - return {{ cos(angle), 0, sin(angle)}, - { 0, 1.0, 0 }, - {-1.0*sin(angle), 0, cos(angle)}}; - } - case 2: - { - return {{cos(angle), -1.0*sin(angle), 0}, - {sin(angle), cos(angle), 0}, - { 0, 0, 1.0}}; - } - default: - DUNE_THROW(Dune::Exception, " axis not feasible. rotationMatrix is only implemented for 3x3-matrices. Choose between 0: x-axis, 1: y-axis, 2: z-axis"); - } - } - - /** - * @brief 6x6 matrix that transforms the strain tensor. This matrix is used to - * transform the compliance matrix (given in Voigt notation) into another frame. - * see 'https://en.wikipedia.org/wiki/Orthotropic_material#Condition_for_material_symmetry_2' - * for details. - * - * @param axis - * @param angle - * @return MatrixRT - */ - static Dune::FieldMatrix<double,6,6> rotationMatrixCompliance(int axis, double angle){ - - MatrixRT R = rotationMatrix(axis,angle); - - return {{ R[0][0]*R[0][0], R[0][1]*R[0][1], R[0][2]*R[0][2], R[0][1]*R[0][2], R[0][0]*R[0][2], R[0][0]*R[0][1]}, - { R[1][0]*R[1][0], R[1][1]*R[1][1], R[1][2]*R[1][2], R[1][1]*R[1][2], R[1][0]*R[1][2], R[1][0]*R[1][1]}, - { R[2][0]*R[2][0], R[2][1]*R[2][1], R[2][2]*R[2][2], R[2][1]*R[2][2], R[2][0]*R[2][2], R[2][0]*R[2][1]}, - {2.0*R[1][0]*R[2][0], 2.0*R[1][1]*R[2][1], 2.0*R[1][2]*R[2][2], R[1][1]*R[2][2]+R[1][2]*R[2][1], R[1][0]*R[2][2]+R[1][2]*R[2][0], R[1][0]*R[2][1]+R[1][1]*R[2][0]}, - {2.0*R[0][0]*R[2][0], 2.0*R[0][1]*R[2][1], 2.0*R[0][2]*R[2][2], R[0][1]*R[2][2]+R[0][2]*R[2][1], R[0][0]*R[2][2]+R[0][2]*R[2][0], R[0][0]*R[2][1]+R[0][1]*R[2][0]}, - {2.0*R[0][0]*R[1][0], 2.0*R[0][1]*R[1][1], 2.0*R[0][2]*R[1][2], R[0][1]*R[1][2]+R[0][2]*R[1][1], R[0][0]*R[1][2]+R[0][2]*R[1][0], R[0][0]*R[1][1]+R[0][1]*R[1][0]} - }; - } - - - /** - * @brief Scale last three columns of stiffness matrix by a factor of 2. - * Inserting this facotr in the stiffness matrix allows to use the - * same Matrix-to-Vector mapping for both the stress and the strain. - * - * @param S Stiffness matrix - */ - static void scaleStiffnessMatrix(Dune::FieldMatrix<double,6,6>& S){ - for(size_t i = 0; i<6; i++) + using MatrixRT = Dune::FieldMatrix< double, 3, 3>; + using VectorRT = Dune::FieldVector< double, 3>; + + using std::sin; + using std::cos; + + + + static MatrixRT sym (MatrixRT M) { // 1/2 (M^T + M) + MatrixRT ret(0); + for (int i=0; i<3; i++) + { + ret[i][i] = M[i][i]; + for (int j=i+1; j<3; j++) + { + ret[i][j] = 0.5*(M[i][j] + M[j][i]); + ret[j][i] = ret[i][j]; + } + } + return ret; + } + + + static MatrixRT rankoneTensorproduct (VectorRT v, VectorRT w) { // v otimes w + return + {{v[0]*w[0], v[1]*w[0], v[2]*w[0]}, + {v[0]*w[1], v[1]*w[1], v[2]*w[1]}, + {v[0]*w[2], v[1]*w[2], v[2]*w[2]}}; + } + + static MatrixRT crossSectionDirectionScaling(double w, MatrixRT M){ + return {{M[0][0], M[0][1], w*M[0][2]}, + {M[1][0], M[1][1], w*M[1][2]}, + {M[2][0], M[2][1], w*M[2][2]} + }; + } + + static double trace (MatrixRT M){ + return M[0][0]+ M[1][1] + M[2][2]; + } + + static double scalarProduct (MatrixRT M1, MatrixRT M2){ + double sum = 0.0; + for (int i=0; i<3; i++) + for (int j=0; j<3; j++) + sum += M1[i][j] * M2[i][j]; + return sum; + } + + + /** + * @brief Determines rotation matrix based on an axis and an angle + * + * @param axis + * @param angle + * @return MatrixRT + */ + static MatrixRT rotationMatrix(int axis, double angle){ + + switch (axis) + { + case 0 : + { + return {{1.0, 0, 0 }, + { 0, cos(angle), -1.0*sin(angle)}, + { 0, sin(angle), cos(angle)}}; + } + case 1 : + { + return {{ cos(angle), 0, sin(angle)}, + { 0, 1.0, 0 }, + {-1.0*sin(angle), 0, cos(angle)}}; + } + case 2 : + { + return {{cos(angle), -1.0*sin(angle), 0}, + {sin(angle), cos(angle), 0}, + { 0, 0, 1.0}}; + } + default : + DUNE_THROW(Dune::Exception, " axis not feasible. rotationMatrix is only implemented for 3x3-matrices. Choose between 0: x-axis, 1: y-axis, 2: z-axis"); + } + } + + /** + * @brief 6x6 matrix that transforms the strain tensor. This matrix is used to + * transform the compliance matrix (given in Voigt notation) into another frame. + * see 'https://en.wikipedia.org/wiki/Orthotropic_material#Condition_for_material_symmetry_2' + * for details. + * + * @param axis + * @param angle + * @return MatrixRT + */ + static Dune::FieldMatrix<double,6,6> rotationMatrixCompliance(int axis, double angle){ + + MatrixRT R = rotationMatrix(axis,angle); + + return {{ R[0][0]*R[0][0], R[0][1]*R[0][1], R[0][2]*R[0][2], R[0][1]*R[0][2], R[0][0]*R[0][2], R[0][0]*R[0][1]}, + { R[1][0]*R[1][0], R[1][1]*R[1][1], R[1][2]*R[1][2], R[1][1]*R[1][2], R[1][0]*R[1][2], R[1][0]*R[1][1]}, + { R[2][0]*R[2][0], R[2][1]*R[2][1], R[2][2]*R[2][2], R[2][1]*R[2][2], R[2][0]*R[2][2], R[2][0]*R[2][1]}, + {2.0*R[1][0]*R[2][0], 2.0*R[1][1]*R[2][1], 2.0*R[1][2]*R[2][2], R[1][1]*R[2][2]+R[1][2]*R[2][1], R[1][0]*R[2][2]+R[1][2]*R[2][0], R[1][0]*R[2][1]+R[1][1]*R[2][0]}, + {2.0*R[0][0]*R[2][0], 2.0*R[0][1]*R[2][1], 2.0*R[0][2]*R[2][2], R[0][1]*R[2][2]+R[0][2]*R[2][1], R[0][0]*R[2][2]+R[0][2]*R[2][0], R[0][0]*R[2][1]+R[0][1]*R[2][0]}, + {2.0*R[0][0]*R[1][0], 2.0*R[0][1]*R[1][1], 2.0*R[0][2]*R[1][2], R[0][1]*R[1][2]+R[0][2]*R[1][1], R[0][0]*R[1][2]+R[0][2]*R[1][0], R[0][0]*R[1][1]+R[0][1]*R[1][0]} + }; + } + + + /** + * @brief Scale last three columns of stiffness matrix by a factor of 2. + * Inserting this facotr in the stiffness matrix allows to use the + * same Matrix-to-Vector mapping for both the stress and the strain. + * + * @param S Stiffness matrix + */ + static void scaleStiffnessMatrix(Dune::FieldMatrix<double,6,6>& S){ + for(size_t i = 0; i<6; i++) for(size_t j = 3; j<6; j++) { S[i][j] = 2.0*S[i][j]; } - } - - static double linearizedStVenantKirchhoffDensity(double mu, double lambda, MatrixRT E1, MatrixRT E2) // CHANGED - { - auto t1 = 2.0 * mu * sym(E1) + MatrixRT(Dune::ScaledIdentityMatrix<double,3>(lambda * trace(sym(E1)))); - auto tmp1 = scalarProduct(t1,sym(E2)); - return tmp1; - - } - - - - // --- Generalization: Define Quadratic QuadraticForm - static double QuadraticForm(const double mu, const double lambda, const MatrixRT M){ - - auto tmp1 = sym(M); - double tmp2 = tmp1.frobenius_norm(); -// double tmp2 = norm(M); //TEST - return lambda*std::pow(trace(M),2) + 2.0*mu*pow( tmp2 ,2); -// return lambda*std::pow(trace(M),2) + 2*mu*pow( norm( sym(M) ),2); - } + } - + static double linearizedStVenantKirchhoffDensity(double mu, double lambda, MatrixRT E1, MatrixRT E2) // CHANGED + { + auto t1 = 2.0 * mu * sym(E1) + MatrixRT(Dune::ScaledIdentityMatrix<double,3>(lambda * trace(sym(E1)))); + auto tmp1 = scalarProduct(t1,sym(E2)); + return tmp1; - static double generalizedDensity(const double mu, const double lambda, MatrixRT F, MatrixRT G){ - /// Write this whole File as a Class that uses lambda,mu as members ? - - // Define L via Polarization-Identity from QuadratifForm - // <LF,G> := (1/2)*(Q(F+G) - Q(F) - Q(G) ) - return (1.0/2.0)*(QuadraticForm(mu,lambda,F+G) - QuadraticForm(mu,lambda,F) - QuadraticForm(mu,lambda,G) ); - } + } + + + + // --- Generalization: Define Quadratic QuadraticForm + static double QuadraticForm(const double mu, const double lambda, const MatrixRT M){ + + auto tmp1 = sym(M); + double tmp2 = tmp1.frobenius_norm(); + // double tmp2 = norm(M); //TEST + return lambda*std::pow(trace(M),2) + 2.0*mu*pow( tmp2 ,2); + // return lambda*std::pow(trace(M),2) + 2*mu*pow( norm( sym(M) ),2); + } + + + + static double generalizedDensity(const double mu, const double lambda, MatrixRT F, MatrixRT G){ + /// Write this whole File as a Class that uses lambda,mu as members ? + + // Define L via Polarization-Identity from QuadratifForm + // <LF,G> := (1/2)*(Q(F+G) - Q(F) - Q(G) ) + return (1.0/2.0)*(QuadraticForm(mu,lambda,F+G) - QuadraticForm(mu,lambda,F) - QuadraticForm(mu,lambda,G) ); + } + + + /** + * @brief This is used to convert FieldMatrices to 'adouble' + * since adouble-type can not be read from ParSet. + * is there a better way? + * + * @tparam Rtype + * @tparam IMatrixType + * @param A + * @param B + */ + template<class Rtype> + static void convertFieldMatrix(auto& A, + auto& B) + { + for(size_t i=0; i<B.N(); i++) + for(size_t j=0; j<B.M(); j++) + B[i][j] = (Rtype)A[i][j]; - static MatrixRT matrixSqrt(MatrixRT M){ - std::cout << "matrixSqrt not implemented!!!" << std::endl;//implement this - return M; - } - - static double lameMu(double E, double nu){ - return 0.5 * 1.0/(1.0 + nu) * E; - } - - static double lameLambda(double E, double nu){ - return nu/(1.0-2.0*nu) * 1.0/(1.0+nu) * E; - } - - static bool isInRotatedPlane(double phi, double x1, double x2){ - return cos(phi)*x1 + sin(phi)*x2 > 0; - } - - - extern "C" - { - - MatrixRT new_sym(MatrixRT M) - { - return sym(M); - } - - } - - - /** - * @brief This is used to convert FieldMatrices to 'adouble' - * since adouble-type can not be read from ParSet. - * is there a better way? - * - * @tparam Rtype - * @tparam IMatrixType - * @param A - * @param B - */ - template<class Rtype> - static void convertFieldMatrix(auto& A, - auto& B) - { - for(size_t i=0; i<B.N(); i++) - for(size_t j=0; j<B.M(); j++) - B[i][j] = (Rtype)A[i][j]; - - return; - } + return; + } diff --git a/dune/microstructure/microproblem.hh b/dune/microstructure/microproblem.hh index 3a4bbfdbc73ba88e85614fc92a650f2e01f0f9db..621f0ea8b29f282f7d68f88c8a1215c425f407ec 100644 --- a/dune/microstructure/microproblem.hh +++ b/dune/microstructure/microproblem.hh @@ -26,12 +26,13 @@ #include <dune/istl/spqr.hh> #include <dune/istl/preconditioners.hh> #include <dune/istl/io.hh> -#include <dune/istl/eigenvalue/test/matrixinfo.hh> // TEST: compute condition Number +#include <dune/istl/eigenvalue/test/matrixinfo.hh> // TEST: compute condition Number #include <dune/functions/functionspacebases/interpolate.hh> #include <dune/functions/backends/istlvectorbackend.hh> #include <dune/functions/functionspacebases/powerbasis.hh> #include <dune/functions/functionspacebases/compositebasis.hh> +#include <dune/functions/functionspacebases/cubichermitebasis.hh> #include <dune/functions/functionspacebases/lagrangebasis.hh> #include <dune/functions/functionspacebases/periodicbasis.hh> #include <dune/functions/functionspacebases/subspacebasis.hh> @@ -40,11 +41,11 @@ #include <dune/functions/gridfunctions/gridviewfunction.hh> #include <dune/microstructure/matrix_operations.hh> -#include <dune/microstructure/CorrectorComputer.hh> -#include <dune/microstructure/EffectiveQuantitiesComputer.hh> -#include <dune/microstructure/prestrainedMaterial.hh> +#include <dune/microstructure/CorrectorComputer.hh> +#include <dune/microstructure/EffectiveQuantitiesComputer.hh> +#include <dune/microstructure/prestrainedMaterial.hh> -#include <dune/solvers/solvers/umfpacksolver.hh> +#include <dune/solvers/solvers/umfpacksolver.hh> // #include <iomanip> // needed when working with relative paths e.g. from python-scripts @@ -52,7 +53,7 @@ // using namespace MatrixOperations; - // method to print types of objects: +// method to print types of objects: // template <class T> // constexpr std::string_view type_name() // { @@ -77,254 +78,254 @@ //-------------------------------------------------------- class MicroProblem { - private: - static const int dim = 3; - using CellGridType = Dune::YaspGrid<dim, Dune::EquidistantOffsetCoordinates<double, dim> >; - using GridView = typename CellGridType::LeafGridView; - // typedef typename Dune::Functions::DefaultGlobalBasis<Dune::Functions::PowerPreBasis<Dune::Functions::BasisFactory::FlatLexicographic, \ - // Dune::Functions::Experimental::TransformedIndexPreBasis<Dune::Functions::LagrangePreBasis<Dune::GridView< \ - // Dune::DefaultLeafGridViewTraits<const Dune::YaspGrid<3, Dune::EquidistantOffsetCoordinates<double, dim> > > >, 1, double>, \ - // Dune::Functions::BasisFactory::Experimental::Impl::PeriodicIndexingTransformation>, dim> > BasisType; - - - using BasisType = typename Dune::Functions::DefaultGlobalBasis<Dune::Functions::PowerPreBasis<Dune::Functions::BasisFactory::FlatLexicographic, \ - Dune::Functions::Experimental::TransformedIndexPreBasis<Dune::Functions::LagrangePreBasis<Dune::GridView< \ - Dune::DefaultLeafGridViewTraits<const Dune::YaspGrid<3, Dune::EquidistantOffsetCoordinates<double, dim> > > >, 1, double>, \ - Dune::Functions::BasisFactory::Experimental::Impl::PeriodicIndexingTransformation>, dim> >; - - using MaterialType = prestrainedMaterial<GridView>; - - - Python::Reference microstructure_; - const Dune::ParameterTree parameterSet_; - const Python::Module module_; - const CellGridType grid_; - const GridView gridView_; - const BasisType basis_; - // Dune::ParameterTree parameterSet_; - // Python::Module module_; - // CellGridType grid_; - // GridView gridView_; - // BasisType basis_; - - - // std::fstream log_; // deprecated: only used to define CorrectorComputer object. - - - // MaterialType material_; - std::shared_ptr<MaterialType> material_; - - // CorrectorComputer<BasisType, MaterialType> correctorComputer_; - std::shared_ptr<CorrectorComputer<BasisType, MaterialType> > correctorComputer_; - EffectiveQuantitiesComputer<BasisType,MaterialType> effectiveQuantitiesComputer_; - - - - public: - - - //Constructor - MicroProblem(const Python::Reference microstructure, - const Dune::ParameterTree& parameterSet, - const Python::Module pyModule) - : microstructure_(microstructure), - parameterSet_(parameterSet), - module_(pyModule), - grid_(createGrid()), - gridView_(grid_.leafGridView()), - basis_(createPeriodicBasis()), - // material_(setupMaterial(gridView_)) - // material_(gridView_,microstructure_,parameterSet_,module_), - material_(std::make_shared<MaterialType>(gridView_,microstructure_,parameterSet_,module_)), - correctorComputer_(std::make_shared<CorrectorComputer<BasisType, MaterialType>>(basis_, material_, parameterSet_)), - // correctorComputer_(basis_, material_, parameterSet_), - effectiveQuantitiesComputer_(correctorComputer_) - // effectiveQuantitiesComputer_(correctorComputer_,material_) // Remove material dependency - {}; - // //Constructor - // MicroProblem(const Dune::ParameterTree& parameterSet, - // Python::Module pyModule) - // : parameterSet_(parameterSet), - // module_(pyModule), - // grid_(createGrid()), - // gridView_(grid_.leafGridView()), - // basis_(createPeriodicBasis()) - // { - // initialSetup(); - // }; - - - // Create a default constructor like this? - // MicroProblem() = default; - - - // MaterialType setupMaterial(const GridView& gridView) const - // { - // return MaterialType(gridView,microstructure_,parameterSet_,module_); - // } - - - - /** - * @brief Infrastructure for handling periodicity. - * Check whether two points are equal on R/Z x R/Z x R - */ - static constexpr auto equivalent = [](const Dune::FieldVector<double,3>& x, const Dune::FieldVector<double,3>& y) +private: + static const int dim = 3; + using CellGridType = Dune::YaspGrid<dim, Dune::EquidistantOffsetCoordinates<double, dim> >; + using GridView = typename CellGridType::LeafGridView; + // typedef typename Dune::Functions::DefaultGlobalBasis<Dune::Functions::PowerPreBasis<Dune::Functions::BasisFactory::FlatLexicographic, \ + // Dune::Functions::Experimental::TransformedIndexPreBasis<Dune::Functions::LagrangePreBasis<Dune::GridView< \ + // Dune::DefaultLeafGridViewTraits<const Dune::YaspGrid<3, Dune::EquidistantOffsetCoordinates<double, dim> > > >, 1, double>, \ + // Dune::Functions::BasisFactory::Experimental::Impl::PeriodicIndexingTransformation>, dim> > BasisType; + + + using BasisType = typename Dune::Functions::DefaultGlobalBasis<Dune::Functions::PowerPreBasis<Dune::Functions::BasisFactory::FlatLexicographic, \ + Dune::Functions::Experimental::TransformedIndexPreBasis<Dune::Functions::LagrangePreBasis<Dune::GridView< \ + Dune::DefaultLeafGridViewTraits<const Dune::YaspGrid<3, Dune::EquidistantOffsetCoordinates<double, dim> > > >, 1, double>, \ + Dune::Functions::BasisFactory::Experimental::Impl::PeriodicIndexingTransformation>, dim> >; + + using MaterialType = prestrainedMaterial<GridView>; + + + Python::Reference microstructure_; + const Dune::ParameterTree parameterSet_; + const Python::Module module_; + const CellGridType grid_; + const GridView gridView_; + const BasisType basis_; + // Dune::ParameterTree parameterSet_; + // Python::Module module_; + // CellGridType grid_; + // GridView gridView_; + // BasisType basis_; + + + // std::fstream log_; // deprecated: only used to define CorrectorComputer object. + + + // MaterialType material_; + std::shared_ptr<MaterialType> material_; + + // CorrectorComputer<BasisType, MaterialType> correctorComputer_; + std::shared_ptr<CorrectorComputer<BasisType, MaterialType> > correctorComputer_; + EffectiveQuantitiesComputer<BasisType,MaterialType> effectiveQuantitiesComputer_; + + + +public: + + + //Constructor + MicroProblem(const Python::Reference microstructure, + const Dune::ParameterTree& parameterSet, + const Python::Module pyModule) + : microstructure_(microstructure), + parameterSet_(parameterSet), + module_(pyModule), + grid_(createGrid()), + gridView_(grid_.leafGridView()), + basis_(createPeriodicBasis()), + // material_(setupMaterial(gridView_)) + // material_(gridView_,microstructure_,parameterSet_,module_), + material_(std::make_shared<MaterialType>(gridView_,microstructure_,parameterSet_,module_)), + correctorComputer_(std::make_shared<CorrectorComputer<BasisType, MaterialType> >(basis_, material_, parameterSet_)), + // correctorComputer_(basis_, material_, parameterSet_), + effectiveQuantitiesComputer_(correctorComputer_) + // effectiveQuantitiesComputer_(correctorComputer_,material_) // Remove material dependency + {}; + // //Constructor + // MicroProblem(const Dune::ParameterTree& parameterSet, + // Python::Module pyModule) + // : parameterSet_(parameterSet), + // module_(pyModule), + // grid_(createGrid()), + // gridView_(grid_.leafGridView()), + // basis_(createPeriodicBasis()) + // { + // initialSetup(); + // }; + + + // Create a default constructor like this? + // MicroProblem() = default; + + + // MaterialType setupMaterial(const GridView& gridView) const + // { + // return MaterialType(gridView,microstructure_,parameterSet_,module_); + // } + + + + /** + * @brief Infrastructure for handling periodicity. + * Check whether two points are equal on R/Z x R/Z x R + */ + static constexpr auto equivalent = [](const Dune::FieldVector<double,3>& x, const Dune::FieldVector<double,3>& y) + { + return ( (Dune::FloatCmp::eq(x[0],y[0]) or Dune::FloatCmp::eq(x[0]+1,y[0]) or Dune::FloatCmp::eq(x[0]-1,y[0])) + and (Dune::FloatCmp::eq(x[1],y[1]) or Dune::FloatCmp::eq(x[1]+1,y[1]) or Dune::FloatCmp::eq(x[1]-1,y[1])) + and (Dune::FloatCmp::eq(x[2],y[2])) + ); + }; + + + /** + * @brief Generate the grid. + * Corrector Problem Domain (-1/2,1/2)^3. + */ + const CellGridType createGrid() const + { + Dune::FieldVector<double,dim> lower({-1.0/2.0, -1.0/2.0, -1.0/2.0}); + Dune::FieldVector<double,dim> upper({1.0/2.0, 1.0/2.0, 1.0/2.0}); + int microGridLevel = parameterSet_.get<int>("microGridLevel", 0); + std::array<int, dim> nElements = {(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel)}; + // std::cout << "Number of Grid-Elements in each direction: " << nElements << std::endl; + std::cout << "Number of Micro Grid-Elements in each direction: " << (int)std::pow(2,microGridLevel) << std::endl; + + return CellGridType(lower,upper,nElements); + } + + const BasisType createPeriodicBasis() const + { + // using namespace Functions::BasisFactory; + Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet periodicIndices; + + //--- Get PeriodicIndices for periodicBasis (Don't do the following in real life: It has quadratic run-time in the number of vertices.) + for (const auto& v1 : vertices(gridView_)) + for (const auto& v2 : vertices(gridView_)) + if (equivalent(v1.geometry().corner(0), v2.geometry().corner(0))) { - return ( (Dune::FloatCmp::eq(x[0],y[0]) or Dune::FloatCmp::eq(x[0]+1,y[0]) or Dune::FloatCmp::eq(x[0]-1,y[0])) - and (Dune::FloatCmp::eq(x[1],y[1]) or Dune::FloatCmp::eq(x[1]+1,y[1]) or Dune::FloatCmp::eq(x[1]-1,y[1])) - and (Dune::FloatCmp::eq(x[2],y[2])) - ); - }; - - - /** - * @brief Generate the grid. - * Corrector Problem Domain (-1/2,1/2)^3. - */ - const CellGridType createGrid() const - { - Dune::FieldVector<double,dim> lower({-1.0/2.0, -1.0/2.0, -1.0/2.0}); - Dune::FieldVector<double,dim> upper({1.0/2.0, 1.0/2.0, 1.0/2.0}); - int microGridLevel = parameterSet_.get<int>("microGridLevel", 0); - std::array<int, dim> nElements = {(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel)}; - // std::cout << "Number of Grid-Elements in each direction: " << nElements << std::endl; - std::cout << "Number of Micro Grid-Elements in each direction: " << (int)std::pow(2,microGridLevel) << std::endl; - - return CellGridType(lower,upper,nElements); + periodicIndices.unifyIndexPair({gridView_.indexSet().index(v1)}, {gridView_.indexSet().index(v2)}); } - const BasisType createPeriodicBasis() const - { - // using namespace Functions::BasisFactory; - Dune::Functions::BasisFactory::Experimental::PeriodicIndexSet periodicIndices; - - //--- Get PeriodicIndices for periodicBasis (Don't do the following in real life: It has quadratic run-time in the number of vertices.) - for (const auto& v1 : vertices(gridView_)) - for (const auto& v2 : vertices(gridView_)) - if (equivalent(v1.geometry().corner(0), v2.geometry().corner(0))) - { - periodicIndices.unifyIndexPair({gridView_.indexSet().index(v1)}, {gridView_.indexSet().index(v2)}); - } - - return makeBasis(gridView_, - power<dim>( - Dune::Functions::BasisFactory::Experimental::periodic(lagrange<1>(), periodicIndices), - flatLexicographic() - )); - } + return makeBasis(gridView_, + power<dim>( + Dune::Functions::BasisFactory::Experimental::periodic(lagrange<1>(), periodicIndices), + flatLexicographic() + )); + } - void updateMicrostructure(Python::Reference microstructure) - { - microstructure_ = microstructure; + void updateMicrostructure(Python::Reference microstructure) + { + microstructure_ = microstructure; - // material_.updateMicrostructure(microstructure_); - material_->updateMicrostructure(microstructure_); - correctorComputer_->updateMaterial(material_); - effectiveQuantitiesComputer_.updateCorrectorComputer(correctorComputer_); - } + // material_.updateMicrostructure(microstructure_); + material_->updateMicrostructure(microstructure_); + correctorComputer_->updateMaterial(material_); + effectiveQuantitiesComputer_.updateCorrectorComputer(correctorComputer_); + } - Python::Reference getMicrostructure() - { - return microstructure_; - } + Python::Reference getMicrostructure() + { + return microstructure_; + } - // template<class Btype,class Qtype> - // void getEffectiveQuantities(Btype& B, Qtype& Q, int count = 0) - template<class Btype,class Qtype> - void getEffectiveQuantities(Btype& B, Qtype& Q) - { - Dune::Timer microProblemTimer; - // std::cout << "getting effective quantities.. " << std::endl; + // template<class Btype,class Qtype> + // void getEffectiveQuantities(Btype& B, Qtype& Q, int count = 0) + template<class Btype,class Qtype> + void getEffectiveQuantities(Btype& B, Qtype& Q) + { + Dune::Timer microProblemTimer; + // std::cout << "getting effective quantities.. " << std::endl; - // --- Get scale ratio - // double gamma = parameterSet_.get<double>("gamma",1.0); - double gamma; - microstructure_.get("gamma").toC<double>(gamma); - if (parameterSet_.get<bool>("printMicroOutput ", false)) - std::cout << "Microstructure scale ratio (gamma) set to : " << gamma << std::endl; + // --- Get scale ratio + // double gamma = parameterSet_.get<double>("gamma",1.0); + double gamma; + microstructure_.get("gamma").toC<double>(gamma); + if (parameterSet_.get<bool>("printMicroOutput ", false)) + std::cout << "Microstructure scale ratio (gamma) set to : " << gamma << std::endl; - // /** - // * @brief Create Log (Remove later) - // * - // */ - // std::string baseName = parameterSet_.get("baseName", "CellProblem-result"); - // std::string outputPath = parameterSet_.get("resultPath", "../../outputs") ; - // //--- setup Log-File - // std::fstream log; - // log.open(outputPath + "/" + baseName + "_log.txt" ,std::ios::out); + // /** + // * @brief Create Log (Remove later) + // * + // */ + // std::string baseName = parameterSet_.get("baseName", "CellProblem-result"); + // std::string outputPath = parameterSet_.get("resultPath", "../../outputs") ; + // //--- setup Log-File + // std::fstream log; + // log.open(outputPath + "/" + baseName + "_log.txt" ,std::ios::out); - // std::cout << "log done" << std::endl; - - // // Create prestrained material object - // auto material = prestrainedMaterial(basis_.gridView(),microstructure_,parameterSet_,module_); + // std::cout << "log done" << std::endl; + // // Create prestrained material object + // auto material = prestrainedMaterial(basis_.gridView(),microstructure_,parameterSet_,module_); - // std::cout << "type_name<decltype(material_)>():" << type_name<decltype(material_)>() << std::endl; - // std::cout << "type_name<decltype(material)>():" << type_name<decltype(material)>() << std::endl; + // std::cout << "type_name<decltype(material_)>():" << type_name<decltype(material_)>() << std::endl; + // std::cout << "type_name<decltype(material)>():" << type_name<decltype(material)>() << std::endl; - // // std::cout << "TEST-VTK write.." << std::endl; - // material.writeVTKMaterialFunctions(parameterSet_.get<int>("microGridLevel", 0)); - // std::cout << "Part1 works." << std::endl; + // // std::cout << "TEST-VTK write.." << std::endl; + // material.writeVTKMaterialFunctions(parameterSet_.get<int>("microGridLevel", 0)); + // std::cout << "Part1 works." << std::endl; - if (parameterSet_.get<bool>("write_materialFunctions", false)) - material_->writeVTKMaterialFunctions(parameterSet_.get<int>("microGridLevel", 0)); - // exit(0); + if (parameterSet_.get<bool>("write_materialFunctions", false)) + material_->writeVTKMaterialFunctions(parameterSet_.get<int>("microGridLevel", 0)); - // std::cout << "Material setup done" << std::endl; + // exit(0); - // // Compute Correctors - // auto correctorComputer = CorrectorComputer(basis_, material, log, parameterSet_); - // #if 0 + // std::cout << "Material setup done" << std::endl; - // std::cout << "Starting Corrector assembly" << std::endl; - correctorComputer_->assemble(); - // std::cout << "Starting Corrector solve..." << std::endl; - correctorComputer_->solve(); + // // Compute Correctors + // auto correctorComputer = CorrectorComputer(basis_, material, log, parameterSet_); + // #if 0 + // std::cout << "Starting Corrector assembly" << std::endl; + correctorComputer_->assemble(); + // std::cout << "Starting Corrector solve..." << std::endl; + correctorComputer_->solve(); - // std::cout << "Corrector done" << std::endl; - // //--- Compute effective quantities - // auto effectiveQuantitiesComputer = EffectiveQuantitiesComputer(correctorComputer,material); - effectiveQuantitiesComputer_.computeEffectiveQuantities(); + // std::cout << "Corrector done" << std::endl; + // //--- Compute effective quantities + // auto effectiveQuantitiesComputer = EffectiveQuantitiesComputer(correctorComputer,material); + effectiveQuantitiesComputer_.computeEffectiveQuantities(); - // std::cout << "effective Quantities done" << std::endl; - // //--- Get effective quantities - auto Beffvec = effectiveQuantitiesComputer_.getBeff(); - // // convert CoefficientVector to matrix - auto Beff = CoefficientsToSymMatrix(Beffvec); - Q = effectiveQuantitiesComputer_.getQeff(); - B = CoefficientsToSymMatrix(Beffvec); + // std::cout << "effective Quantities done" << std::endl; + // //--- Get effective quantities + auto Beffvec = effectiveQuantitiesComputer_.getBeff(); + // // convert CoefficientVector to matrix + auto Beff = CoefficientsToSymMatrix(Beffvec); + Q = effectiveQuantitiesComputer_.getQeff(); + B = CoefficientsToSymMatrix(Beffvec); - if (parameterSet_.get<bool>("printMicroOutput ", false)) - { - printmatrix(std::cout, Q, "Matrix Qeff", "--"); - printmatrix(std::cout, B, "Beff", "--"); - } - std::cout << "Micro-Problem took " << microProblemTimer.elapsed() << " seconds." << std::endl; + if (parameterSet_.get<bool>("printMicroOutput ", false)) + { + printmatrix(std::cout, Q, "Matrix Qeff", "--"); + printmatrix(std::cout, B, "Beff", "--"); + } - // #endif + std::cout << "Micro-Problem took " << microProblemTimer.elapsed() << " seconds." << std::endl; - // exit(0); - } + // #endif + + // exit(0); + } }; -#endif \ No newline at end of file +#endif diff --git a/dune/microstructure/prestrainedMaterial.hh b/dune/microstructure/prestrainedMaterial.hh index 008952bde46cf19fef09e092a8f29c8e60d01ab4..2e2f5460ff3883d5ca7048c1880b1f6c181fc2fb 100644 --- a/dune/microstructure/prestrainedMaterial.hh +++ b/dune/microstructure/prestrainedMaterial.hh @@ -37,13 +37,13 @@ using std::make_shared; * @brief The 'prestrainedMaterial' class descripes the LOCAL microstructure. * It stores all the necessary information to define the local Cell-problem. * This includes: - * + * * Indicatorfunction, #Phases, Prestrain, elasticity/compliance tensors ,scale-ratio 'gamma' - * + * */ -//-------------------------------------------------------- -template <class GridView> +//-------------------------------------------------------- +template <class GridView> class prestrainedMaterial { @@ -56,16 +56,16 @@ public: using ScalarRT = Dune::FieldVector< double, 1>; using VectorRT = Dune::FieldVector< double, dimworld>; using MatrixRT = Dune::FieldMatrix< double, dimworld, dimworld>; - using FuncScalar = std::function< double(const Domain&) >; - using Func2int = std::function< int(const Domain&) >; + using FuncScalar = std::function< double (const Domain&) >; + using Func2int = std::function< int (const Domain&) >; using Func2Tensor = std::function< MatrixRT(const Domain&) >; using Func2TensorParam = std::function< MatrixRT(const MatrixRT& ,const Domain&) >; using Func2TensorPhase = std::function< MatrixRT(const MatrixRT& ,const int&) >; using MatrixFunc = std::function< MatrixRT(const MatrixRT&) >; using MatrixPhase = std::function< MatrixRT(const int&) >; - using IndicatorGridViewFunctionType = GridViewFunction<int(const Domain&), GridView>; - using LocalIndicatorFunctionType = LocalFunction<int(const Domain&), typename GridViewEntitySet<GridView, 0>::Element >; + using IndicatorGridViewFunctionType = GridViewFunction<int (const Domain&), GridView>; + using LocalIndicatorFunctionType = LocalFunction<int (const Domain&), typename GridViewEntitySet<GridView, 0>::Element >; // const GridView& gridView_; @@ -91,169 +91,169 @@ public: IndicatorGridViewFunctionType indicatorFunctionGVF_; LocalIndicatorFunctionType localIndicatorFunction_; - double gamma_; + double gamma_; -public: - prestrainedMaterial(const GridView& gridView, - Python::Reference microstructure, - const Dune::ParameterTree& parameterSet, - const Python::Module pyModule) - : gridView_(gridView), - microstructure_(microstructure), - parameterSet_(parameterSet), - module_(pyModule) - { - setup(); - } - ~prestrainedMaterial(){std::cout << "prestrainedMaterial object destroyed!" << std::endl;}; - - // prestrainedMaterial() = default; - - //copy constructor - prestrainedMaterial(const prestrainedMaterial& that) = default; - - // Copy assignment operator - // prestrainedMaterial& operator=(prestrainedMaterial const& that) - // { - // gridView_ = that.gridView_; - // parameterSet_ = that.parameterSet_; - // L_ = that.L_; - // prestrain_ = that.prestrain_; - // module_ = that.module_; - // microstructure_ = that.microstructure_; - - // return *this; - // } - - - void updateMicrostructure(const Python::Reference microstructure) +public: + prestrainedMaterial(const GridView& gridView, + Python::Reference microstructure, + const Dune::ParameterTree& parameterSet, + const Python::Module pyModule) + : gridView_(gridView), + microstructure_(microstructure), + parameterSet_(parameterSet), + module_(pyModule) { - // std::cout << "updateMicrostrucrue of prestrainedMaterial" << std::endl; - microstructure_ = microstructure; + setup(); } + ~prestrainedMaterial(){std::cout << "prestrainedMaterial object destroyed!" << std::endl;}; + // prestrainedMaterial() = default; - void updateGamma(const double gamma) - { - gamma_ = gamma; - } + //copy constructor + prestrainedMaterial(const prestrainedMaterial& that) = default; + // Copy assignment operator + // prestrainedMaterial& operator=(prestrainedMaterial const& that) + // { + // gridView_ = that.gridView_; + // parameterSet_ = that.parameterSet_; + // L_ = that.L_; + // prestrain_ = that.prestrain_; + // module_ = that.module_; + // microstructure_ = that.microstructure_; -/** - * @brief TODO: Code allows a spatially varying prestrain. However most of the time we only - * use a constant prestrain. - * - Add switch (constant/non-constant) prestrain? - * - * @param phase material phase - * @return Func2Tensor - */ -Func2Tensor setupPrestrainPhase(const int phase){ - - // auto prestrain = Python::make_function<MatrixRT>(module_.get("prestrain_phase" + std::to_string(phase))); - auto prestrain = Python::make_function<MatrixRT>(Python::Callable(microstructure_.get("prestrain_phase" + std::to_string(phase)))); + // return *this; + // } - //TODO... - int axis = 0; - double angle = 0; - try + void updateMicrostructure(const Python::Reference microstructure) { - // module_.get("phase" + std::to_string(phase) + "_axis").toC<int>(axis); - // module_.get("phase" + std::to_string(phase) + "_angle").toC<double>(angle); - axis = parameterSet_.get<int>("phase" + std::to_string(phase) + "_axis", 0); - angle = parameterSet_.get<double>("phase" + std::to_string(phase) + "_angle", 0); + // std::cout << "updateMicrostrucrue of prestrainedMaterial" << std::endl; + microstructure_ = microstructure; } - catch(Dune::Exception&) + + + void updateGamma(const double gamma) { - //default frame is used. + gamma_ = gamma; } + + /** - * @brief (optional) Tramsform prestrain to the correct frame. + * @brief TODO: Code allows a spatially varying prestrain. However most of the time we only + * use a constant prestrain. + * - Add switch (constant/non-constant) prestrain? + * + * @param phase material phase + * @return Func2Tensor */ - if(abs(angle) > 1e-12){ - auto R = rotationMatrix(axis,angle); - Func2Tensor f = [prestrain,R] (const Domain& x) { return (prestrain(x).leftmultiply(R)).rightmultiply(R.transposed()); }; + Func2Tensor setupPrestrainPhase(const int phase){ + + // auto prestrain = Python::make_function<MatrixRT>(module_.get("prestrain_phase" + std::to_string(phase))); + auto prestrain = Python::make_function<MatrixRT>(Python::Callable(microstructure_.get("prestrain_phase" + std::to_string(phase)))); - return f; + //TODO... + + int axis = 0; + double angle = 0; + try + { + // module_.get("phase" + std::to_string(phase) + "_axis").toC<int>(axis); + // module_.get("phase" + std::to_string(phase) + "_angle").toC<double>(angle); + axis = parameterSet_.get<int>("phase" + std::to_string(phase) + "_axis", 0); + angle = parameterSet_.get<double>("phase" + std::to_string(phase) + "_angle", 0); + } + catch(Dune::Exception&) + { + //default frame is used. + } + /** + * @brief (optional) Tramsform prestrain to the correct frame. + */ + if(abs(angle) > 1e-12) { + auto R = rotationMatrix(axis,angle); + Func2Tensor f = [prestrain,R] (const Domain& x) { return (prestrain(x).leftmultiply(R)).rightmultiply(R.transposed()); }; + + return f; + } + else + return prestrain; } - else - return prestrain; -} -// Dune::FieldMatrix<double,6,6> setupPhase(const std::string phaseType, Python::Module module, int phase) -Dune::FieldMatrix<double,6,6> setupPhase(const int phase) -{ - std::string phaseType; + // Dune::FieldMatrix<double,6,6> setupPhase(const std::string phaseType, Python::Module module, int phase) + Dune::FieldMatrix<double,6,6> setupPhase(const int phase) + { + std::string phaseType; - // phaseType = parameterSet_.get<std::string>("phase" + std::to_string(phase) + "_type"); - microstructure_.get("phase" + std::to_string(phase) + "_type").toC<std::string>(phaseType); + // phaseType = parameterSet_.get<std::string>("phase" + std::to_string(phase) + "_type"); + microstructure_.get("phase" + std::to_string(phase) + "_type").toC<std::string>(phaseType); - std::cout << "Setup phase "<< phase << " as " << phaseType << " material." << std::endl; + std::cout << "Setup phase "<< phase << " as " << phaseType << " material." << std::endl; - if(phaseType == "isotropic") - { + if(phaseType == "isotropic") + { Dune::FieldVector<double,2> materialParameters(0); // module_.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,2>>(materialParameters); - microstructure_.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,2>>(materialParameters); + microstructure_.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,2> >(materialParameters); std::cout << "Lame-Parameters (mu,lambda): (" << materialParameters[0] << "," << materialParameters[1] << ") " << std::endl; return isotropic(materialParameters[0],materialParameters[1]); - } + } - /** - * @brief For other material classes. The stiffness-/compliance matrix depends on the - * coordinate frame. - * - * (optional) rotate material coordinate frame by an 'angle' around 'axis' - */ - int axis = 0; - double angle = 0; + /** + * @brief For other material classes. The stiffness-/compliance matrix depends on the + * coordinate frame. + * + * (optional) rotate material coordinate frame by an 'angle' around 'axis' + */ + int axis = 0; + double angle = 0; - try - { - // axis = parameterSet_.get<int>("phase" + std::to_string(phase) + "_axis", 0); - // angle = parameterSet_.get<double>("phase" + std::to_string(phase) + "_angle", 0); - microstructure_.get("phase" + std::to_string(phase) + "_axis").toC<int>(axis); - microstructure_.get("phase" + std::to_string(phase) + "_angle").toC<double>(angle); - } - catch(Dune::Exception& e) - { - std::cout << "(Could not read rotation axis & angle for material phase) " << phase << ": - Canonical Frame (default) is used." << std::endl; - } + try + { + // axis = parameterSet_.get<int>("phase" + std::to_string(phase) + "_axis", 0); + // angle = parameterSet_.get<double>("phase" + std::to_string(phase) + "_angle", 0); + microstructure_.get("phase" + std::to_string(phase) + "_axis").toC<int>(axis); + microstructure_.get("phase" + std::to_string(phase) + "_angle").toC<double>(angle); + } + catch(Dune::Exception& e) + { + std::cout << "(Could not read rotation axis & angle for material phase) " << phase << ": - Canonical Frame (default) is used." << std::endl; + } - if(phaseType == "orthotropic") - { + if(phaseType == "orthotropic") + { Dune::FieldVector<double,9> materialParameters(0); // module_.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,9>>(materialParameters); - microstructure_.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,9>>(materialParameters); + microstructure_.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,9> >(materialParameters); return orthotropic(axis,angle,materialParameters); - } - if(phaseType == "transversely_isotropic") - { + } + if(phaseType == "transversely_isotropic") + { Dune::FieldVector<double,5> materialParameters(0); // module_.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,5>>(materialParameters); - microstructure_.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,5>>(materialParameters); + microstructure_.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,5> >(materialParameters); return transversely_isotropic(axis,angle,materialParameters); - } - if(phaseType == "general_anisotropic") - { + } + if(phaseType == "general_anisotropic") + { Dune::FieldMatrix<double,6,6> materialParameters(0); //compliance matric // module_.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldMatrix<double,6,6>>(materialParameters); - microstructure_.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldMatrix<double,6,6>>(materialParameters); + microstructure_.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldMatrix<double,6,6> >(materialParameters); return general_anisotropic(axis,angle,materialParameters); + } + else + DUNE_THROW(Dune::Exception, " Unknown material class for phase " + std::to_string(phase)); } - else - DUNE_THROW(Dune::Exception, " Unknown material class for phase " + std::to_string(phase)); -} /** * @brief Setup method that determines the correct stiffness-matrix (constitutive law) - * for each material phase separately. - * + * for each material phase separately. + * */ void setup() { @@ -269,7 +269,7 @@ Dune::FieldMatrix<double,6,6> setupPhase(const int phase) localIndicatorFunction_ = localFunction(indicatorFunctionGVF_); int phases; - // phases = parameterSet_.get<int>("Phases"); + // phases = parameterSet_.get<int>("Phases"); microstructure_.get("phases").toC<int>(phases); std::cout << "---- Starting material setup... (Number of Phases: "<< phases << ") " << std::endl; @@ -292,13 +292,13 @@ Dune::FieldMatrix<double,6,6> setupPhase(const int phase) /** \brief Isotropic stiffness matrix in Voigt notation but scaled by a factor of 2 in the last three columns. */ Dune::FieldMatrix<double,6,6> isotropic(const double& mu, const double& lambda) { - return {{lambda+2.0*mu, lambda , lambda , 0.0 , 0.0 , 0.0 }, - {lambda , lambda+2.0*mu, lambda , 0.0 , 0.0 , 0.0 }, - {lambda , lambda , lambda+2.0*mu, 0.0 , 0.0 , 0.0 }, - { 0.0 , 0.0 , 0.0 , 2.0*mu, 0.0 , 0.0 }, - { 0.0 , 0.0 , 0.0 , 0.0 , 2.0*mu, 0.0 }, - { 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 2.0*mu } - }; + return {{lambda+2.0*mu, lambda , lambda , 0.0 , 0.0 , 0.0 }, + {lambda , lambda+2.0*mu, lambda , 0.0 , 0.0 , 0.0 }, + {lambda , lambda , lambda+2.0*mu, 0.0 , 0.0 , 0.0 }, + { 0.0 , 0.0 , 0.0 , 2.0*mu, 0.0 , 0.0 }, + { 0.0 , 0.0 , 0.0 , 0.0 , 2.0*mu, 0.0 }, + { 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 2.0*mu } + }; } //------------------------------------------------------------------------------- @@ -308,74 +308,74 @@ Dune::FieldMatrix<double,6,6> setupPhase(const int phase) * The convention in literature is to provide the elastic constants in form of the 'compliance matrix' * In order to compute stresses from strain, we have to invert the 'compliance matrix' to obtain the 'stiffness matrix' * (see https://en.wikipedia.org/wiki/Orthotropic_material for more details) - * + * * @param axis rotate material frame around axis - * @param angle rotation angle + * @param angle rotation angle * @param p elastic constants: (E1,E2,E3,G12,G23,G31,nu12,nu13,nu23) * @return Stiffness matrix */ Dune::FieldMatrix<double,6,6> orthotropic(const int& axis, const double& angle, const Dune::FieldVector<double,9>& p - ) + ) { - auto E_1 = p[0]; - auto E_2 = p[1]; - auto E_3 = p[2]; - auto G_12 = p[3]; - auto G_23 = p[4]; - auto G_31 = p[5]; - auto nu_12 = p[6]; - auto nu_13 = p[7]; - auto nu_23 = p[8]; - //other three poisson ratios are not independent - auto nu_21 = (p[6]/p[0])*p[1]; - auto nu_31 = (p[7]/p[0])*p[2]; - auto nu_32 = (p[8]/p[1])*p[2]; - - std::string axis_string; - switch (axis) - { - case 0: - axis_string = "x - axis"; - break; - case 1: - axis_string = "y - axis"; - break; - case 2: - axis_string = "z - axis"; - break; - default: break; - } - - // Compliance matrix - Dune::FieldMatrix<double,6,6> Compliance = {{1.0/E_1 , -nu_21/E_2 , -nu_31/E_3 , 0.0 , 0.0 , 0.0 }, - {-nu_12/E_1 , 1.0/E_2 , -nu_32/E_3 , 0.0 , 0.0 , 0.0 }, - {-nu_13/E_1 , -nu_23/E_2 , 1.0/E_3 , 0.0 , 0.0 , 0.0 }, - { 0.0 , 0.0 , 0.0 , 1.0/G_23, 0.0 , 0.0 }, - { 0.0 , 0.0 , 0.0 , 0.0 , 1.0/G_31, 0.0 }, - { 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.0/G_12} - }; - - - /** - * @brief (optional) Tramsform compliance matrix to the correct frame. - */ - if(abs(angle) > 1e-12){ - std::cout << "material frame rotated around axis: " << axis_string << " by an angle of: " << angle << std::endl; - Dune::FieldMatrix<double,6,6> C_rot = rotationMatrixCompliance(axis,angle); - (Compliance.leftmultiply(C_rot)).rightmultiply(C_rot.transposed()); - } - - printmatrix(std::cout, Compliance, "Compliance matrix used:", "--"); - - // invert Compliance matrix to obtain elasticity/stiffness matrix - Compliance.invert(); - // printmatrix(std::cout, Compliance, "Stiffness Tensor", "--"); - scaleStiffnessMatrix(Compliance); - // printmatrix(std::cout, Compliance, "Stiffness Tensor scaled", "--"); - // printmatrix(std::cout, Compliance, "Stiffness Tensor", "--"); - return Compliance; + auto E_1 = p[0]; + auto E_2 = p[1]; + auto E_3 = p[2]; + auto G_12 = p[3]; + auto G_23 = p[4]; + auto G_31 = p[5]; + auto nu_12 = p[6]; + auto nu_13 = p[7]; + auto nu_23 = p[8]; + //other three poisson ratios are not independent + auto nu_21 = (p[6]/p[0])*p[1]; + auto nu_31 = (p[7]/p[0])*p[2]; + auto nu_32 = (p[8]/p[1])*p[2]; + + std::string axis_string; + switch (axis) + { + case 0 : + axis_string = "x - axis"; + break; + case 1 : + axis_string = "y - axis"; + break; + case 2 : + axis_string = "z - axis"; + break; + default : break; + } + + // Compliance matrix + Dune::FieldMatrix<double,6,6> Compliance = {{1.0/E_1 , -nu_21/E_2 , -nu_31/E_3 , 0.0 , 0.0 , 0.0 }, + {-nu_12/E_1 , 1.0/E_2 , -nu_32/E_3 , 0.0 , 0.0 , 0.0 }, + {-nu_13/E_1 , -nu_23/E_2 , 1.0/E_3 , 0.0 , 0.0 , 0.0 }, + { 0.0 , 0.0 , 0.0 , 1.0/G_23, 0.0 , 0.0 }, + { 0.0 , 0.0 , 0.0 , 0.0 , 1.0/G_31, 0.0 }, + { 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.0/G_12} + }; + + + /** + * @brief (optional) Tramsform compliance matrix to the correct frame. + */ + if(abs(angle) > 1e-12) { + std::cout << "material frame rotated around axis: " << axis_string << " by an angle of: " << angle << std::endl; + Dune::FieldMatrix<double,6,6> C_rot = rotationMatrixCompliance(axis,angle); + (Compliance.leftmultiply(C_rot)).rightmultiply(C_rot.transposed()); + } + + printmatrix(std::cout, Compliance, "Compliance matrix used:", "--"); + + // invert Compliance matrix to obtain elasticity/stiffness matrix + Compliance.invert(); + // printmatrix(std::cout, Compliance, "Stiffness Tensor", "--"); + scaleStiffnessMatrix(Compliance); + // printmatrix(std::cout, Compliance, "Stiffness Tensor scaled", "--"); + // printmatrix(std::cout, Compliance, "Stiffness Tensor", "--"); + return Compliance; } //------------------------------------------------------------------------------- @@ -383,124 +383,124 @@ Dune::FieldMatrix<double,6,6> setupPhase(const int phase) * @brief Definition of transversely isotropic elasticity tensor (in Voigt notation) * (see https://en.wikipedia.org/wiki/Poisson%27s_ratio) * @param axis rotate material frame around axis - * @param angle rotation angle + * @param angle rotation angle * @param p elastic constants: {E1,E2,G12,nu12,nu23} * @return Stiffness matrix */ Dune::FieldMatrix<double,6,6> transversely_isotropic(const int& axis, - const double& angle, - const Dune::FieldVector<double,5>& p - ) + const double& angle, + const Dune::FieldVector<double,5>& p + ) { // (see https://en.wikipedia.org/wiki/Poisson%27s_ratio) - auto E_1 = p[0]; - auto E_2 = p[1]; - auto E_3 = E_2; - auto nu_12 = p[3]; - auto nu_13 = nu_12; - auto nu_21 = (nu_12/E_1)*E_2; - auto nu_31 = nu_21; - auto nu_23 = p[4]; - auto nu_32 = nu_23; - auto G_12 = p[2]; - auto G_23 = E_2/(2.0*(1+nu_23)); - auto G_31 = G_23; - //other three poisson ratios are not independent - - std::string axis_string; - switch (axis) - { - case 0: - axis_string = "x - axis"; - break; - case 1: - axis_string = "y - axis"; - break; - case 2: - axis_string = "z - axis"; - break; - default: break; - } - - //---compliance matrix - Dune::FieldMatrix<double,6,6> Compliance = {{1.0/E_1 , -nu_21/E_2 , -nu_31/E_3 , 0.0 , 0.0 , 0.0 }, - {-nu_12/E_1 , 1.0/E_2 , -nu_32/E_3 , 0.0 , 0.0 , 0.0 }, - {-nu_13/E_1 , -nu_23/E_2 , 1.0/E_3 , 0.0 , 0.0 , 0.0 }, - { 0.0 , 0.0 , 0.0 , 1.0/G_23, 0.0 , 0.0 }, - { 0.0 , 0.0 , 0.0 , 0.0 , 1.0/G_31, 0.0 }, - { 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.0/G_12} - }; - - /** - * @brief (optional) Tramsform compliance matrix to the correct frame. - */ - if(abs(angle) > 1e-12){ - // std::cout << "material frame rotated around axis: " << axis << " by an angle of: " << angle << std::endl; - std::cout << "material frame rotated around axis: " << axis_string << " by an angle of: " << angle << std::endl; - Dune::FieldMatrix<double,6,6> C_rot = rotationMatrixCompliance(axis,angle); - (Compliance.leftmultiply(C_rot)).rightmultiply(C_rot.transposed()); - } - - printmatrix(std::cout, Compliance, "Compliance matrix used:", "--"); - - // invert Compliance matrix to obtain elasticity/stiffness matrix - Compliance.invert(); - // printmatrix(std::cout, Compliance, "Stiffness Tensor", "--"); - - scaleStiffnessMatrix(Compliance); - - return Compliance; + auto E_1 = p[0]; + auto E_2 = p[1]; + auto E_3 = E_2; + auto nu_12 = p[3]; + auto nu_13 = nu_12; + auto nu_21 = (nu_12/E_1)*E_2; + auto nu_31 = nu_21; + auto nu_23 = p[4]; + auto nu_32 = nu_23; + auto G_12 = p[2]; + auto G_23 = E_2/(2.0*(1+nu_23)); + auto G_31 = G_23; + //other three poisson ratios are not independent + + std::string axis_string; + switch (axis) + { + case 0 : + axis_string = "x - axis"; + break; + case 1 : + axis_string = "y - axis"; + break; + case 2 : + axis_string = "z - axis"; + break; + default : break; + } + + //---compliance matrix + Dune::FieldMatrix<double,6,6> Compliance = {{1.0/E_1 , -nu_21/E_2 , -nu_31/E_3 , 0.0 , 0.0 , 0.0 }, + {-nu_12/E_1 , 1.0/E_2 , -nu_32/E_3 , 0.0 , 0.0 , 0.0 }, + {-nu_13/E_1 , -nu_23/E_2 , 1.0/E_3 , 0.0 , 0.0 , 0.0 }, + { 0.0 , 0.0 , 0.0 , 1.0/G_23, 0.0 , 0.0 }, + { 0.0 , 0.0 , 0.0 , 0.0 , 1.0/G_31, 0.0 }, + { 0.0 , 0.0 , 0.0 , 0.0 , 0.0 , 1.0/G_12} + }; + + /** + * @brief (optional) Tramsform compliance matrix to the correct frame. + */ + if(abs(angle) > 1e-12) { + // std::cout << "material frame rotated around axis: " << axis << " by an angle of: " << angle << std::endl; + std::cout << "material frame rotated around axis: " << axis_string << " by an angle of: " << angle << std::endl; + Dune::FieldMatrix<double,6,6> C_rot = rotationMatrixCompliance(axis,angle); + (Compliance.leftmultiply(C_rot)).rightmultiply(C_rot.transposed()); + } + + printmatrix(std::cout, Compliance, "Compliance matrix used:", "--"); + + // invert Compliance matrix to obtain elasticity/stiffness matrix + Compliance.invert(); + // printmatrix(std::cout, Compliance, "Stiffness Tensor", "--"); + + scaleStiffnessMatrix(Compliance); + + return Compliance; } //------------------------------------------------------------------------------- /** * @brief Definition of general anisotropic elasticity tensor (in Voigt notation) - * + * * @param axis rotate material frame around axis - * @param angle rotation angle + * @param angle rotation angle * @param Compliance Compliance matrix * @return Stiffness matrix - */ + */ Dune::FieldMatrix<double,6,6> general_anisotropic(const int& axis, const double& angle, Dune::FieldMatrix<double,6,6>& Compliance - ) + ) { - std::string axis_string; - switch (axis) - { - case 0: - axis_string = "x - axis"; - break; - case 1: - axis_string = "y - axis"; - break; - case 2: - axis_string = "z - axis"; - break; - default: break; - } - - /** - * @brief (optional) Tramsform compliance matrix to the correct frame. - */ - if(abs(angle) > 1e-12){ - // std::cout << "material frame rotated around axis: " << axis << " by an angle of: " << angle << std::endl; - std::cout << "material frame rotated around axis: " << axis_string << " by an angle of: " << angle << std::endl; - Dune::FieldMatrix<double,6,6> C_rot = rotationMatrixCompliance(axis,angle); - (Compliance.leftmultiply(C_rot)).rightmultiply(C_rot.transposed()); - } - printmatrix(std::cout, Compliance, "Compliance matrix used:", "--"); - - - // invert Compliance matrix to obtain elasticity/stiffness matrix - Compliance.invert(); - // printmatrix(std::cout, Compliance, "Stiffness Tensor", "--"); - - scaleStiffnessMatrix(Compliance); - - return Compliance; + std::string axis_string; + switch (axis) + { + case 0 : + axis_string = "x - axis"; + break; + case 1 : + axis_string = "y - axis"; + break; + case 2 : + axis_string = "z - axis"; + break; + default : break; + } + + /** + * @brief (optional) Tramsform compliance matrix to the correct frame. + */ + if(abs(angle) > 1e-12) { + // std::cout << "material frame rotated around axis: " << axis << " by an angle of: " << angle << std::endl; + std::cout << "material frame rotated around axis: " << axis_string << " by an angle of: " << angle << std::endl; + Dune::FieldMatrix<double,6,6> C_rot = rotationMatrixCompliance(axis,angle); + (Compliance.leftmultiply(C_rot)).rightmultiply(C_rot.transposed()); + } + printmatrix(std::cout, Compliance, "Compliance matrix used:", "--"); + + + // invert Compliance matrix to obtain elasticity/stiffness matrix + Compliance.invert(); + // printmatrix(std::cout, Compliance, "Stiffness Tensor", "--"); + + scaleStiffnessMatrix(Compliance); + + return Compliance; } //------------------------------------------------------------------------------- @@ -515,7 +515,7 @@ Dune::FieldMatrix<double,6,6> setupPhase(const int phase) } - MatrixRT prestrain(const int& phase,const Domain& x) const + MatrixRT prestrain(const int& phase,const Domain& x) const { return prestrain_[phase-1](x); } @@ -527,21 +527,21 @@ Dune::FieldMatrix<double,6,6> setupPhase(const int phase) } - /////////////////////////////// - // Getter - /////////////////////////////// - Dune::ParameterTree getParameterSet() const {return parameterSet_;} - std::vector<VoigtMatrix<double,3>> getElasticityTensor() const {return L_;} + /////////////////////////////// + // Getter + /////////////////////////////// + Dune::ParameterTree getParameterSet() const {return parameterSet_;} + std::vector<VoigtMatrix<double,3> > getElasticityTensor() const {return L_;} - MatrixPhase getPrestrainFunction() const {return prestrain_;} + MatrixPhase getPrestrainFunction() const {return prestrain_;} - auto getLocalIndicatorFunction() const {return localIndicatorFunction_;} //get as localFunction - auto getIndicatorFunctionGVF() const {return indicatorFunctionGVF_;} //get as GridViewFunction - auto getIndicatorFunction() const {return indicatorFunction_;} + auto getLocalIndicatorFunction() const {return localIndicatorFunction_;} //get as localFunction + auto getIndicatorFunctionGVF() const {return indicatorFunctionGVF_;} //get as GridViewFunction + auto getIndicatorFunction() const {return indicatorFunction_;} - auto getGamma() const {return gamma_;} + auto getGamma() const {return gamma_;} /////////////////////////////// @@ -551,53 +551,53 @@ Dune::FieldMatrix<double,6,6> setupPhase(const int phase) /** * @brief Write material indicator function as a grid function to VTK. * The Writer uses piecewise constant (P0) interpolation - * + * * @param level GridLevel */ // void writeVTKMaterialFunctions(const int level, double vtkIndex = 1) const void writeVTKMaterialFunctions(const int level) const { - // std::string outputPath = parameterSet_.get("outputPath", "../../outputs"); - std::string resultPath = parameterSet_.get("resultPath", "../../outputs"); - std::string baseName = parameterSet_.get("baseName", "CellProblem-result"); + // std::string outputPath = parameterSet_.get("outputPath", "../../outputs"); + std::string resultPath = parameterSet_.get("resultPath", "../../outputs"); + std::string baseName = parameterSet_.get("baseName", "CellProblem-result"); + + int subsamplingRefinement = parameterSet_.get<int>("MaterialSubsamplingRefinement", 2); + + Dune::SubsamplingVTKWriter<GridView> MaterialVtkWriter(gridView_, Dune::refinementLevels(subsamplingRefinement)); - int subsamplingRefinement = parameterSet_.get<int>("MaterialSubsamplingRefinement", 2); + MaterialVtkWriter.addCellData( + indicatorFunction_, + Dune::VTK::FieldInfo("materialIndicatorFunction_", Dune::VTK::FieldInfo::Type::scalar, 1)); - Dune::SubsamplingVTKWriter<GridView> MaterialVtkWriter(gridView_, Dune::refinementLevels(subsamplingRefinement)); - - MaterialVtkWriter.addCellData( - indicatorFunction_, - Dune::VTK::FieldInfo("materialIndicatorFunction_", Dune::VTK::FieldInfo::Type::scalar, 1)); + MaterialVtkWriter.write(resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level) ); + std::cout << "wrote data to file:" + resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level) << std::endl; - MaterialVtkWriter.write(resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level) ); - std::cout << "wrote data to file:" + resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level) << std::endl; - - //-- Version using the Dune::VTKSequenceWriter - // std::shared_ptr<Dune::SubsamplingVTKWriter<GridView> > MaterialVtkWriter = std::make_shared<Dune::SubsamplingVTKWriter<GridView>>(gridView_, Dune::refinementLevels(subsamplingRefinement)); + //-- Version using the Dune::VTKSequenceWriter + // std::shared_ptr<Dune::SubsamplingVTKWriter<GridView> > MaterialVtkWriter = std::make_shared<Dune::SubsamplingVTKWriter<GridView>>(gridView_, Dune::refinementLevels(subsamplingRefinement)); - // MaterialVtkWriter->addCellData(indicatorFunction_, - // Dune::VTK::FieldInfo("materialIndicatorFunction_", Dune::VTK::FieldInfo::Type::scalar, 1)); + // MaterialVtkWriter->addCellData(indicatorFunction_, + // Dune::VTK::FieldInfo("materialIndicatorFunction_", Dune::VTK::FieldInfo::Type::scalar, 1)); - // Dune::VTKSequenceWriter<GridView> SequenceMaterialVTK(MaterialVtkWriter, resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level)); - // SequenceMaterialVTK.write(vtkIndex); - // std::cout << "wrote data to file:" + resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level) + "-" + std::to_string(vtkIndex) << std::endl; + // Dune::VTKSequenceWriter<GridView> SequenceMaterialVTK(MaterialVtkWriter, resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level)); + // SequenceMaterialVTK.write(vtkIndex); + // std::cout << "wrote data to file:" + resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level) + "-" + std::to_string(vtkIndex) << std::endl; - //--Version using dune-vtk - // Dune::Vtk::DiscontinuousDataCollector<GridView> discontinuousDataCollector(gridView_); - // Dune::Vtk::YaspDataCollector<GridView, 4> yaspDataCollector(gridView_); - // Dune::Vtk::LagrangeDataCollector<GridView, 4> lagrangeDataCollector(gridView_); - // Dune::Vtk::UnstructuredGridWriter writer(lagrangeDataCollector, Dune::Vtk::FormatTypes::ASCII, Dune::Vtk::DataTypes::FLOAT32); - // // Dune::Vtk::UnstructuredGridWriter writer(discontinuousDataCollector, Dune::Vtk::FormatTypes::ASCII, Dune::Vtk::DataTypes::FLOAT32); + //--Version using dune-vtk + // Dune::Vtk::DiscontinuousDataCollector<GridView> discontinuousDataCollector(gridView_); + // Dune::Vtk::YaspDataCollector<GridView, 4> yaspDataCollector(gridView_); + // Dune::Vtk::LagrangeDataCollector<GridView, 4> lagrangeDataCollector(gridView_); + // Dune::Vtk::UnstructuredGridWriter writer(lagrangeDataCollector, Dune::Vtk::FormatTypes::ASCII, Dune::Vtk::DataTypes::FLOAT32); + // // Dune::Vtk::UnstructuredGridWriter writer(discontinuousDataCollector, Dune::Vtk::FormatTypes::ASCII, Dune::Vtk::DataTypes::FLOAT32); - // auto f2 = Dune::Functions::makeAnalyticGridViewFunction(indicatorFunction_ ,gridView_); - // // writer.addPointData(f2 , "IndicatorFunction"); - // writer.addCellData(f2 , "IndicatorFunction"); - // writer.write(resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level) + "_DuneVTK"); - return; + // auto f2 = Dune::Functions::makeAnalyticGridViewFunction(indicatorFunction_ ,gridView_); + // // writer.addPointData(f2 , "IndicatorFunction"); + // writer.addCellData(f2 , "IndicatorFunction"); + // writer.write(resultPath + "/" + baseName + "_MaterialFunction-level"+ std::to_string(level) + "_DuneVTK"); + return; }; }; -#endif \ No newline at end of file +#endif diff --git a/dune/microstructure/voigthelper.hh b/dune/microstructure/voigthelper.hh index 5058f710ec2b21a535b8da7f51aec7082d498646..a3ed64d17e4f1478c57b0eca7539c18a20223c56 100644 --- a/dune/microstructure/voigthelper.hh +++ b/dune/microstructure/voigthelper.hh @@ -17,12 +17,12 @@ using VoigtMatrix = Dune::FieldMatrix<T,dim*(dim+1)/2,dim*(dim+1)/2>; /** - * @brief Voigt-notation(https://de.wikipedia.org/wiki/Voigtsche_Notation) distinguishes + * @brief Voigt-notation(https://de.wikipedia.org/wiki/Voigtsche_Notation) distinguishes * in the transformation from Matrix to Vector between stresses and strains. The transformation - * for strains features an additional factor 2 for the non-diagonal entries. In order to avoid + * for strains features an additional factor 2 for the non-diagonal entries. In order to avoid * the use of different data structures for both stresses & strains we use the same Matrix-to-Vector - * mapping ('matrixToVoigt') and incorporate the factors in suitable places. namely: - * - The Stiffness matrix of the constitutive relation get scaled by a factor of 2 in the last three columns + * mapping ('matrixToVoigt') and incorporate the factors in suitable places. namely: + * - The Stiffness matrix of the constitutive relation get scaled by a factor of 2 in the last three columns * - The 'voigtScalarProduct' scales the lase three products by a factor of 2 */ diff --git a/experiment/macro-problem/L-clamped-Plate.py b/experiment/macro-problem/L-clamped-Plate.py index c48aa2dc9ab9f2710a2d786bbd01496ef86289f3..44bffbef77a9f4227cbe98a93ad863fa58b067ba 100644 --- a/experiment/macro-problem/L-clamped-Plate.py +++ b/experiment/macro-problem/L-clamped-Plate.py @@ -25,15 +25,15 @@ parameterSet.baseName= 'L-clamped-Plate' ############################################# # Grid parameters ############################################# -nX=8 -nY=8 +nX=1 +nY=1 parameterSet.structuredGrid = 'simplex' parameterSet.lower = '0 0' parameterSet.upper = '4 4' parameterSet.elements = str(nX)+' '+ str(nY) -parameterSet.macroGridLevel = 1 +parameterSet.macroGridLevel = 3 ############################################# # Options ############################################# @@ -47,6 +47,8 @@ parameterSet.conforming_DiscreteJacobian = 0 ############################################# # Solver parameters ############################################# +# Choose solver: "RNHM" (Default:Riemannian Newton with Hessian modification), "RiemannianTR" (Riemannain Trust-region method) +parameterSet.Solver = "RNHM" # Tolerance of the multigrid solver parameterSet.tolerance = 1e-12 # Maximum number of multigrid iterations @@ -99,8 +101,8 @@ def dirichlet_indicator(x) : #boundary-values/derivative function -def boundaryValues(x): - return [x[0], x[1], 0] +# def boundaryValues(x): +# return [x[0], x[1], 0] # def boundaryValuesDerivative(x): diff --git a/experiment/macro-problem/MVM_infinitynorm.py b/experiment/macro-problem/MVM_infinitynorm.py new file mode 100644 index 0000000000000000000000000000000000000000..c76b48a7cec2ef8f951462a383f0ecd28d410009 --- /dev/null +++ b/experiment/macro-problem/MVM_infinitynorm.py @@ -0,0 +1,333 @@ +import math +import numpy as np + +class ParameterSet(dict): + def __init__(self, *args, **kwargs): + super(ParameterSet, self).__init__(*args, **kwargs) + self.__dict__ = self + +parameterSet = ParameterSet() + + +"""" + Experiment: (0,2) x (0,1) domain + with Microstructure with infinity distances (squares) from vertices + and RVE center but constant in one space direction. + +""" + +############################################# +# Paths +############################################# +parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/outputs_MVM_infinitynorm' +parameterSet.baseName= 'MVM_infinitynorm' + +############################################# +# Grid parameters +############################################# +nX=8 +nY=4 + +parameterSet.structuredGrid = 'simplex' +parameterSet.lower = '0 0' +parameterSet.upper = '2 1' +parameterSet.elements = str(nX)+' '+ str(nY) + +parameterSet.macroGridLevel = 2 +############################################# +# Options +############################################# +parameterSet.measure_analyticalError = False +parameterSet.measure_isometryError = False +parameterSet.vtkWrite_analyticalSurfaceNormal = False +parameterSet.vtkwrite_analyticalSolution = False + + +parameterSet.conforming_DiscreteJacobian = 0 +############################################# +# Solver parameters +############################################# +# Tolerance of the multigrid solver +parameterSet.tolerance = 1e-12 +# Maximum number of multigrid iterations +parameterSet.maxProximalNewtonSteps = 1000 +# Initial regularization +parameterSet.initialRegularization = 1000 +# Measure convergence +parameterSet.instrumented = 0 + +# parameterSet.regularizationNorm = 'Euclidean' +parameterSet.regularizationNorm = 'H1semi' + +############################ +# Problem specifications +############################ +# Dimension of the domain (only used for numerical-test python files) +parameterSet.dim = 2 + +############################################# +# VTK/Output +############################################# +# Write discrete solution as .vtk-File +parameterSet.writeVTK = 1 +parameterSet.vtkwrite_analyticalSolution = 0 +parameterSet.vtkWrite_analyticalSurfaceNormal = 0 + +# The grid can be refined several times for a higher resolution in the VTK-file. +parameterSet.subsamplingRefinement = 0 + +# Write Dof-Vector to .txt-file +parameterSet.writeDOFvector = 0 + +############################################# +# Dirichlet boundary indicator +############################################# +# def dirichlet_indicator(x) : +# if( (x[0] <= 0.01) or (x[0] >= 1.99)): +# return True +# else: +# return False + +# one-sided bc +def dirichlet_indicator(x) : + if( (x[0] <= 0.01) ): + return True + else: + return False + +# def dirichlet_indicator(x) : +# return False + + +############################################# +# MICROSTRUCTURE +############################################ +parameterSet.VTKwriteMacroPhaseIndicator = True +parameterSet.MacroPhaseSubsamplingRefinement = 3 + + +class GlobalMicrostructure: + """ Class that represents the global microstructure. + + The global microstructure can be defined individually + for different (finitely many) macroscopic phases. + Each macroscopic phase corresponds to a 'LocalMicrostructure_' + sub-class that defines the necessary data for the local + micro-problem. + + Currently, there are three possibilities for the LocalMicrostructure: + (1) Read the effective quantities (Qhom,Beff) from this parset. + (Constant local microstructure) + (2) Solve the micro-problem once to obtain the effective quantities. + (Constant local microstructure) + (3) Solve for micro-problem for each macroscopic quadrature point. + (Macroscopocally varying local microstructure)) + """ + def __init__(self,macroPoint=[0,0]): + self.macroPhases = 1 + + # define first local microstructure options. + # self.macroPhase1_constantMicrostructure = True + self.macroPhase1_constantMicrostructure = False + self.macroPhase1_readEffectiveQuantities = False; + + + def macroPhaseIndicator(self,y): #y :macroscopic point + """ Indicatorfunction that determines the domains + i.e. macro-phases of different local microstructures. + """ + return 1; + + # Represents the local microstructure in Phase 1 + class LocalMicrostructure_1: + def __init__(self,macroPoint=[0,0]): #default value for initialization + self.macroPoint = macroPoint + + self.gamma = 1.0 #in the future this might change depending on macroPoint. + self.phases = 2 #in the future this might change depending on macroPoint. + #--- Define different material phases: + + #- PHASE 1 + self.phase1_type="isotropic" + self.materialParameters_phase1 = [28.7,22.5] # glass (Fibre) + #- PHASE 2 + self.phase2_type="isotropic" + self.materialParameters_phase2 = [1.2,2.58] #Matrix-material: polystyrene + + + # self.cacheMacroPhase=True + # self.macroPhases = [] #store macro phase numbers. + # self.macroPhaseCount = 0 + + + + + self.theta = 0.2 # only used with constant microstructure. + + self.theta_start = 0.1 + self.theta_target = 0.3 + + + def one_norm(self,v): + # r = 0 + # for i in range(0, len(v)): + # r += np.abs(v[i]) + # return r + return np.linalg.norm(v,1) + + def two_norm(self,v): + # r = 0 + # for i in range(0, len(v)): + # r += v[i]**2 + # return np.sqrt(r) + return np.linalg.norm(v, 'fro') # frobenius-norm (default) + + + def infinity_norm(self,v): + # return np.abs(v).max() + return np.linalg.norm(v,np.inf) # Use already exisiting norm from numpy.. + + + """ + extract subarray from A with index i removed. + """ + def subArray(self,v,i): + r = [] + for j in range(0,len(v)): + if not (j == i): + r.append(v[j]) + + return np.array(r) + + + + #--- Indicator function for material phases + def indicatorFunction(self,y): + + # get local theta value (varies linearly in x1 - direction): + macrolength_x = 2.0 #macroscopic length in x1-direction + theta = self.theta_start + (self.macroPoint[0]/macrolength_x) * (self.theta_target-self.theta_start) + + # theta = self.theta #used with constant microstructure. + + # cast to numpy array + x = np.array(y) + # print('y:', y) + + """ + We assume constancy in one space-direction: + """ + # constant in ... + # x = self.subArray(x,0) #y1-direction + # x = self.subArray(x,1) #y2-direction + x = self.subArray(x,2) #x3-direction + # print('y:', y) + + # Dfine nodes (2D as we assume constanty in one direction) + node1 = [-0.5,-0.5] + node2 = [0.5,-0.5] + node3 = [-0.5,0.5] + node4 = [0.5,0.5] + center = [0,0] + + indicator = (self.infinity_norm(x-node1) < theta) | (self.infinity_norm(x-node2) < theta) \ + | (self.infinity_norm(x-node3) < theta) | (self.infinity_norm(x-node4) < theta) \ + | (self.infinity_norm(x-center) < theta) + + + indicator = indicator & (y[2]>= 0) + + if(indicator): + return 1 #Phase1 + else : + return 2 #Phase2 + + def prestrain_phase1(self,x): + rho = 1.0 + return [[rho*1.0, 0, 0], [0,rho*1.0,0], [0,0,rho*1.0]] + + def prestrain_phase2(self,x): + return [[0, 0, 0], [0,0,0], [0,0,0]] + + + + + + + +# def f(x): +# a = (3.0/16.0) +# if(x[0] <= 0.01): +# return [x[0]+a, x[1], 0] +# elif(x[0] >= 1.99): +# return [x[0] - a, x[1], 0] +# else: +# return [x[0], x[1], 0] + + +def f(x): + return [x[0], x[1], 0] + + +def df(x): + return ((1,0), + (0,1), + (0,0)) + + + +fdf = (f, df) + + +############################################# +# Force +############################################ +parameterSet.assemble_force_term = False + +def force(x): + return [0, 0, 0] + + + +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + +############################################# +# Grid parameters +############################################# +parameterSet.microGridLevel = 3 + +############################################# +# Assembly options +############################################# +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices + +############################################# +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) +############################################# +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output + +############################################# +# Write/Output options #(default=false) +############################################# +# --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: +parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition +#parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) +parameterSet.MaterialSubsamplingRefinement= 2 +# --- Write Correctos to VTK-File: +parameterSet.writeCorrectorsVTK = 0 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = False + +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/experiment/macro-problem/MVM_onenorm.py b/experiment/macro-problem/MVM_onenorm.py new file mode 100644 index 0000000000000000000000000000000000000000..3cfbe7b7a6386ae66eb35ead762c3871d97873ef --- /dev/null +++ b/experiment/macro-problem/MVM_onenorm.py @@ -0,0 +1,324 @@ +import math +import numpy as np + +class ParameterSet(dict): + def __init__(self, *args, **kwargs): + super(ParameterSet, self).__init__(*args, **kwargs) + self.__dict__ = self + +parameterSet = ParameterSet() + + +"""" + Experiment: (0,2) x (0,1) domain + with Microstructure with infinity distances (squares) from vertices + and RVE center but constant in one space direction. + +""" + +############################################# +# Paths +############################################# +parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/outputs_MVM_onenorm' +parameterSet.baseName= 'MVM_onenorm' + +############################################# +# Grid parameters +############################################# +nX=8 +nY=4 + +parameterSet.structuredGrid = 'simplex' +parameterSet.lower = '0 0' +parameterSet.upper = '2 1' +parameterSet.elements = str(nX)+' '+ str(nY) + +parameterSet.macroGridLevel = 2 +############################################# +# Options +############################################# +parameterSet.measure_analyticalError = False +parameterSet.measure_isometryError = False +parameterSet.vtkWrite_analyticalSurfaceNormal = False +parameterSet.vtkwrite_analyticalSolution = False + + +parameterSet.conforming_DiscreteJacobian = 0 +############################################# +# Solver parameters +############################################# +# Tolerance of the multigrid solver +parameterSet.tolerance = 1e-12 +# Maximum number of multigrid iterations +parameterSet.maxProximalNewtonSteps = 200 +# Initial regularization +parameterSet.initialRegularization = 200 +# Measure convergence +parameterSet.instrumented = 0 + +# parameterSet.regularizationNorm = 'Euclidean' +parameterSet.regularizationNorm = 'H1semi' + +############################ +# Problem specifications +############################ +# Dimension of the domain (only used for numerical-test python files) +parameterSet.dim = 2 + +############################################# +# VTK/Output +############################################# +# Write discrete solution as .vtk-File +parameterSet.writeVTK = 1 +parameterSet.vtkwrite_analyticalSolution = 0 +parameterSet.vtkWrite_analyticalSurfaceNormal = 0 + +# The grid can be refined several times for a higher resolution in the VTK-file. +parameterSet.subsamplingRefinement = 0 + +# Write Dof-Vector to .txt-file +parameterSet.writeDOFvector = 0 + +############################################# +# Dirichlet boundary indicator +############################################# +# def dirichlet_indicator(x) : +# if( (x[0] <= 0.01) or (x[0] >= 1.99)): +# return True +# else: +# return False + +def dirichlet_indicator(x) : + return False + + +############################################# +# MICROSTRUCTURE +############################################ +parameterSet.VTKwriteMacroPhaseIndicator = True +parameterSet.MacroPhaseSubsamplingRefinement = 3 + + +class GlobalMicrostructure: + """ Class that represents the global microstructure. + + The global microstructure can be defined individually + for different (finitely many) macroscopic phases. + Each macroscopic phase corresponds to a 'LocalMicrostructure_' + sub-class that defines the necessary data for the local + micro-problem. + + Currently, there are three possibilities for the LocalMicrostructure: + (1) Read the effective quantities (Qhom,Beff) from this parset. + (Constant local microstructure) + (2) Solve the micro-problem once to obtain the effective quantities. + (Constant local microstructure) + (3) Solve for micro-problem for each macroscopic quadrature point. + (Macroscopocally varying local microstructure)) + """ + def __init__(self,macroPoint=[0,0]): + self.macroPhases = 1 + + # define first local microstructure options. + self.macroPhase1_constantMicrostructure = False + self.macroPhase1_readEffectiveQuantities = False; + + + def macroPhaseIndicator(self,y): #y :macroscopic point + """ Indicatorfunction that determines the domains + i.e. macro-phases of different local microstructures. + """ + return 1; + + # Represents the local microstructure in Phase 1 + class LocalMicrostructure_1: + def __init__(self,macroPoint=[0,0]): #default value for initialization + self.macroPoint = macroPoint + + self.gamma = 1.0 #in the future this might change depending on macroPoint. + self.phases = 2 #in the future this might change depending on macroPoint. + #--- Define different material phases: + + #- PHASE 1 + self.phase1_type="isotropic" + self.materialParameters_phase1 = [28.7,22.5] # glass (Fibre) + #- PHASE 2 + self.phase2_type="isotropic" + self.materialParameters_phase2 = [1.2,2.58] #Matrix-material: polystyrene + + + # self.cacheMacroPhase=True + # self.macroPhases = [] #store macro phase numbers. + # self.macroPhaseCount = 0 + + + + + # self.theta = 0.1 + + self.theta_start = 0.1 + self.theta_target = 0.3 + + + def one_norm(self,v): + # r = 0 + # for i in range(0, len(v)): + # r += np.abs(v[i]) + # return r + return np.linalg.norm(v,1) + + def two_norm(self,v): + # r = 0 + # for i in range(0, len(v)): + # r += v[i]**2 + # return np.sqrt(r) + return np.linalg.norm(v, 'fro') # frobenius-norm (default) + + + def infinity_norm(self,v): + # return np.abs(v).max() + return np.linalg.norm(v,np.inf) # Use already exisiting norm from numpy.. + + + """ + extract subarray from A with index i removed. + """ + def subArray(self,v,i): + r = [] + for j in range(0,len(v)): + if not (j == i): + r.append(v[j]) + + return np.array(r) + + + + #--- Indicator function for material phases + def indicatorFunction(self,y): + + # get local theta value (varies linearly in x1 - direction): + macrolength_x = 2.0 #macroscopic length in x1-direction + theta = self.theta_start + (self.macroPoint[0]/macrolength_x) * (self.theta_target-self.theta_start) + + + # cast to numpy array + x = np.array(y) + # print('y:', y) + + """ + We assume constancy in one space-direction: + """ + # constant in ... + # x = self.subArray(x,0) #y1-direction + # x = self.subArray(x,1) #y2-direction + x = self.subArray(x,2) #x3-direction + # print('y:', y) + + # Dfine nodes (2D as we assume constanty in one direction) + node1 = [-0.5,-0.5] + node2 = [0.5,-0.5] + node3 = [-0.5,0.5] + node4 = [0.5,0.5] + center = [0,0] + + indicator = (self.one_norm(x-node1) < theta) | (self.one_norm(x-node2) < theta) \ + | (self.one_norm(x-node3) < theta) | (self.one_norm(x-node4) < theta) \ + | (self.one_norm(x-center) < theta) + + + indicator = indicator & (y[2]>= 0) + + if(indicator): + return 1 #Phase1 + else : + return 2 #Phase2 + + def prestrain_phase1(self,x): + rho = 1.0 + return [[rho*1.0, 0, 0], [0,rho*1.0,0], [0,0,rho*1.0]] + + def prestrain_phase2(self,x): + return [[0, 0, 0], [0,0,0], [0,0,0]] + + + + + + + + + +def f(x): + a = (3.0/16.0) + if(x[0] <= 0.01): + return [x[0]+a, x[1], 0] + elif(x[0] >= 1.99): + return [x[0] - a, x[1], 0] + else: + return [x[0], x[1], 0] + + + +def df(x): + return ((1,0), + (0,1), + (0,0)) + + + +fdf = (f, df) + + +############################################# +# Force +############################################ +parameterSet.assemble_force_term = False + +def force(x): + return [0, 0, 1e-2] + + + +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + +############################################# +# Grid parameters +############################################# +parameterSet.microGridLevel = 3 + + +############################################# +# Assembly options +############################################# +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices + +############################################# +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) +############################################# +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output + +############################################# +# Write/Output options #(default=false) +############################################# +# --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: +parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition +#parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) +parameterSet.MaterialSubsamplingRefinement= 2 +# --- Write Correctos to VTK-File: +parameterSet.writeCorrectorsVTK = 0 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = False + +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/experiment/macro-problem/Rumpf-Experiments/diagonal-trusses.py b/experiment/macro-problem/Rumpf-Experiments/diagonal-trusses.py index 2529eab2363fb8a9f2869904528d72d389012500..dd4cb6f0d6750f5fec83c91076561071a706afcd 100644 --- a/experiment/macro-problem/Rumpf-Experiments/diagonal-trusses.py +++ b/experiment/macro-problem/Rumpf-Experiments/diagonal-trusses.py @@ -91,7 +91,6 @@ def dirichlet_indicator(x) : ############################################# # MICROSTRUCTURE ############################################ -parameterSet.printMicroOutput = False parameterSet.VTKwriteMacroPhaseIndicator = True parameterSet.MacroPhaseSubsamplingRefinement = 3 @@ -546,6 +545,7 @@ def force(x): # return [[0, 0, 0], [0,0,0], [0,0,0]] +parameterSet.printMicroOutput = 0 # Flag that allows to supress the output of the micro-problem. ############################################# # Grid parameters @@ -555,17 +555,18 @@ parameterSet.microGridLevel = 2 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) @@ -573,20 +574,16 @@ parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for sol # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) -parameterSet.MaterialSubsamplingRefinement = 1 +parameterSet.MaterialSubsamplingRefinement= 2 +# --- Write Correctos to VTK-File: +parameterSet.writeCorrectorsVTK = 0 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = False -# --- (Additional debug output) +############################################# +# Debug options +############################################# parameterSet.print_debug = 0 #(default=false) - +parameterSet.print_conditionNumber = 0 parameterSet.print_corrector_matrices = 0 - -# --- Write Correctos to VTK-File: -parameterSet.write_VTK = 0 - -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - - - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/experiment/macro-problem/Rumpf-Experiments/twisted-valley.py b/experiment/macro-problem/Rumpf-Experiments/twisted-valley.py index c8c08672a4698c2d6b10c84b1e5372e297b54c09..b3c3b18857515b60eb412ef4951ff0394293d3a8 100644 --- a/experiment/macro-problem/Rumpf-Experiments/twisted-valley.py +++ b/experiment/macro-problem/Rumpf-Experiments/twisted-valley.py @@ -91,7 +91,6 @@ def dirichlet_indicator(x) : ############################################# # MICROSTRUCTURE ############################################ -parameterSet.printMicroOutput = False parameterSet.VTKwriteMacroPhaseIndicator = True parameterSet.MacroPhaseSubsamplingRefinement = 3 @@ -288,6 +287,8 @@ def force(x): return [0, 0, -1e-4] +parameterSet.printMicroOutput = 0 # Flag that allows to supress the output of the micro-problem. + ############################################# # Grid parameters ############################################# @@ -296,38 +297,35 @@ parameterSet.microGridLevel = 4 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) ############################################# # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: -parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition +parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) -parameterSet.MaterialSubsamplingRefinement = 1 +parameterSet.MaterialSubsamplingRefinement= 2 +# --- Write Correctos to VTK-File: +parameterSet.writeCorrectorsVTK = 0 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = True -# --- (Additional debug output) +############################################# +# Debug options +############################################# parameterSet.print_debug = 0 #(default=false) - +parameterSet.print_conditionNumber = 0 parameterSet.print_corrector_matrices = 0 - -# --- Write Correctos to VTK-File: -parameterSet.writeCorrectorsVTK = 1 - -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - - - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/experiment/macro-problem/buckling_experiment/ParaviewBucklingExperiment.py b/experiment/macro-problem/buckling_experiment/ParaviewBucklingExperiment.py new file mode 100644 index 0000000000000000000000000000000000000000..a195c128fd1ec3badd4c264abd468e96ba2f90fb --- /dev/null +++ b/experiment/macro-problem/buckling_experiment/ParaviewBucklingExperiment.py @@ -0,0 +1,2203 @@ +# trace generated using paraview version 5.10.0-RC1 +#import paraview +#paraview.compatibility.major = 5 +#paraview.compatibility.minor = 10 + +#### import the simple module from the paraview +from paraview.simple import * +#### disable automatic camera reset on 'Show' +paraview.simple._DisableFirstRenderCameraReset() + +# Disconnect() +# Connect() +# ResetSession() + +gridLevel = 3 + +rho = 0.0 +# rho = 1.0 + +"""" + remove decimal points for string +""" +rhoString = (str(rho)).replace('.', '') + +basePath = '/home/klaus/Desktop/Dune_TestTest/dune-microstructure/outputs_buckling_experiment/' +experimentName = 'buckling_experiment_rho' + rhoString + '_level'+ str(gridLevel) + '_NC.vtu' +fileName = basePath + experimentName +print('fileName:', fileName) + + +outputPath = '/home/klaus/Desktop/' +outputName = outputPath + 'Buckling_rho' + rhoString + +#----------------------- Create Boxes to visualize boundary conditions: +# create a new 'Box' +box1 = Box(registrationName='Box1') + +# Properties modified on box1 +box1.XLength = 0.1 +box1.YLength = 1.0 +box1.ZLength = 0.1 + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') + +# show data in view +box1Display = Show(box1, renderView1, 'GeometryRepresentation') + +# trace defaults for the display properties. +box1Display.Representation = 'Surface' +box1Display.ColorArrayName = [None, ''] +box1Display.SelectTCoordArray = 'TCoords' +box1Display.SelectNormalArray = 'Normals' +box1Display.SelectTangentArray = 'None' +box1Display.OSPRayScaleArray = 'Normals' +box1Display.OSPRayScaleFunction = 'PiecewiseFunction' +box1Display.SelectOrientationVectors = 'None' +box1Display.ScaleFactor = 0.3140000104904175 +box1Display.SelectScaleArray = 'None' +box1Display.GlyphType = 'Arrow' +box1Display.GlyphTableIndexArray = 'None' +box1Display.GaussianRadius = 0.015700000524520873 +box1Display.SetScaleArray = ['POINTS', 'Normals'] +box1Display.ScaleTransferFunction = 'PiecewiseFunction' +box1Display.OpacityArray = ['POINTS', 'Normals'] +box1Display.OpacityTransferFunction = 'PiecewiseFunction' +box1Display.DataAxesGrid = 'GridAxesRepresentation' +box1Display.PolarAxes = 'PolarAxesRepresentation' + +# init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' +box1Display.ScaleTransferFunction.Points = [-1.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + +# init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' +box1Display.OpacityTransferFunction.Points = [-1.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + +# reset view to fit data +renderView1.ResetCamera(False) + +# update the view to ensure updated data information +renderView1.Update() + +# Properties modified on box1Display +box1Display.Position = [0, 0.5, 0.0] + +# Properties modified on box1Display.DataAxesGrid +box1Display.DataAxesGrid.Position = [0, 0.5, 0.0] + +# Properties modified on box1Display.PolarAxes +box1Display.PolarAxes.Translation = [0, 0.5, 0.0] + +# change solid color +# change solid color +box1Display.AmbientColor = [1.0, 0.8196078431372549, 0.7607843137254902] +box1Display.DiffuseColor = [1.0, 0.8196078431372549, 0.7607843137254902] + +# create a new 'Box' +box2 = Box(registrationName='Box2') + +# Properties modified on box2 +box2.XLength = 0.1 +box2.YLength = 1.0 +box2.ZLength = 0.1 + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') + +# show data in view +box2Display = Show(box2, renderView1, 'GeometryRepresentation') + +# trace defaults for the display properties. +box2Display.Representation = 'Surface' +box2Display.ColorArrayName = [None, ''] +box2Display.SelectTCoordArray = 'TCoords' +box2Display.SelectNormalArray = 'Normals' +box2Display.SelectTangentArray = 'None' +box2Display.OSPRayScaleArray = 'Normals' +box2Display.OSPRayScaleFunction = 'PiecewiseFunction' +box2Display.SelectOrientationVectors = 'None' +box2Display.ScaleFactor = 0.3140000104904175 +box2Display.SelectScaleArray = 'None' +box2Display.GlyphType = 'Arrow' +box2Display.GlyphTableIndexArray = 'None' +box2Display.GaussianRadius = 0.015700000524520873 +box2Display.SetScaleArray = ['POINTS', 'Normals'] +box2Display.ScaleTransferFunction = 'PiecewiseFunction' +box2Display.OpacityArray = ['POINTS', 'Normals'] +box2Display.OpacityTransferFunction = 'PiecewiseFunction' +box2Display.DataAxesGrid = 'GridAxesRepresentation' +box2Display.PolarAxes = 'PolarAxesRepresentation' + +# init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' +box2Display.ScaleTransferFunction.Points = [-1.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + +# init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' +box2Display.OpacityTransferFunction.Points = [-1.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + +# reset view to fit data +renderView1.ResetCamera(False) + +# update the view to ensure updated data information +renderView1.Update() + +# Properties modified on box2Display +box2Display.Position = [3.5, 0.5, 0.0] + +# Properties modified on box2Display.DataAxesGrid +box2Display.DataAxesGrid.Position = [3.5, 0.5, 0.0] + +# Properties modified on box2Display.PolarAxes +box2Display.PolarAxes.Translation = [3.5, 0.5, 0.0] + +# change solid color +# change solid color +box2Display.AmbientColor = [1.0, 0.8196078431372549, 0.7607843137254902] +box2Display.DiffuseColor = [1.0, 0.8196078431372549, 0.7607843137254902] + +#---------------------------------------------------------------------------------------------- + +# create a new 'XML Unstructured Grid Reader' +buckling_experiment_rho10_level3_NCvtu = XMLUnstructuredGridReader(registrationName=experimentName, FileName=[fileName]) +buckling_experiment_rho10_level3_NCvtu.CellArrayStatus = [] +buckling_experiment_rho10_level3_NCvtu.PointArrayStatus = ['Displacement dune-VTK', 'IsometryErrorFunction', 'SurfaceNormalDiscrete'] +buckling_experiment_rho10_level3_NCvtu.TimeArray = 'TimeValue' + +# find source +box1 = FindSource('Box1') + +# Properties modified on buckling_experiment_rho10_level3_NCvtu +buckling_experiment_rho10_level3_NCvtu.TimeArray = 'None' + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') + +# show data in view +buckling_experiment_rho10_level3_NCvtuDisplay = Show(buckling_experiment_rho10_level3_NCvtu, renderView1, 'UnstructuredGridRepresentation') + +# get 2D transfer function for 'IsometryErrorFunction' +isometryErrorFunctionTF2D = GetTransferFunction2D('IsometryErrorFunction') +isometryErrorFunctionTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +isometryErrorFunctionTF2D.Boxes = [] +isometryErrorFunctionTF2D.ScalarRangeInitialized = 0 +isometryErrorFunctionTF2D.Range = [0.0, 1.0, 0.0, 1.0] +isometryErrorFunctionTF2D.OutputDimensions = [10, 10] + +# get color transfer function/color map for 'IsometryErrorFunction' +isometryErrorFunctionLUT = GetColorTransferFunction('IsometryErrorFunction') +isometryErrorFunctionLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +isometryErrorFunctionLUT.InterpretValuesAsCategories = 0 +isometryErrorFunctionLUT.AnnotationsInitialized = 0 +isometryErrorFunctionLUT.ShowCategoricalColorsinDataRangeOnly = 0 +isometryErrorFunctionLUT.RescaleOnVisibilityChange = 0 +isometryErrorFunctionLUT.EnableOpacityMapping = 0 +isometryErrorFunctionLUT.TransferFunction2D = isometryErrorFunctionTF2D +isometryErrorFunctionLUT.Use2DTransferFunction = 0 +isometryErrorFunctionLUT.RGBPoints = [0.0, 0.231373, 0.298039, 0.752941, 0.021906808018684387, 0.865003, 0.865003, 0.865003, 0.043813616037368774, 0.705882, 0.0156863, 0.14902] +isometryErrorFunctionLUT.UseLogScale = 0 +isometryErrorFunctionLUT.UseOpacityControlPointsFreehandDrawing = 0 +isometryErrorFunctionLUT.ShowDataHistogram = 0 +isometryErrorFunctionLUT.AutomaticDataHistogramComputation = 0 +isometryErrorFunctionLUT.DataHistogramNumberOfBins = 10 +isometryErrorFunctionLUT.ColorSpace = 'Diverging' +isometryErrorFunctionLUT.UseBelowRangeColor = 0 +isometryErrorFunctionLUT.BelowRangeColor = [0.0, 0.0, 0.0] +isometryErrorFunctionLUT.UseAboveRangeColor = 0 +isometryErrorFunctionLUT.AboveRangeColor = [0.5, 0.5, 0.5] +isometryErrorFunctionLUT.NanColor = [1.0, 1.0, 0.0] +isometryErrorFunctionLUT.NanOpacity = 1.0 +isometryErrorFunctionLUT.Discretize = 1 +isometryErrorFunctionLUT.NumberOfTableValues = 256 +isometryErrorFunctionLUT.ScalarRangeInitialized = 1.0 +isometryErrorFunctionLUT.HSVWrap = 0 +isometryErrorFunctionLUT.VectorComponent = 0 +isometryErrorFunctionLUT.VectorMode = 'Magnitude' +isometryErrorFunctionLUT.AllowDuplicateScalars = 1 +isometryErrorFunctionLUT.Annotations = [] +isometryErrorFunctionLUT.ActiveAnnotatedValues = [] +isometryErrorFunctionLUT.IndexedColors = [] +isometryErrorFunctionLUT.IndexedOpacities = [] + +# get opacity transfer function/opacity map for 'IsometryErrorFunction' +isometryErrorFunctionPWF = GetOpacityTransferFunction('IsometryErrorFunction') +isometryErrorFunctionPWF.Points = [0.0, 0.0, 0.5, 0.0, 0.043813616037368774, 1.0, 0.5, 0.0] +isometryErrorFunctionPWF.AllowDuplicateScalars = 1 +isometryErrorFunctionPWF.UseLogScale = 0 +isometryErrorFunctionPWF.ScalarRangeInitialized = 1 + +# trace defaults for the display properties. +buckling_experiment_rho10_level3_NCvtuDisplay.Selection = None +buckling_experiment_rho10_level3_NCvtuDisplay.Representation = 'Surface' +buckling_experiment_rho10_level3_NCvtuDisplay.ColorArrayName = ['POINTS', 'IsometryErrorFunction'] +buckling_experiment_rho10_level3_NCvtuDisplay.LookupTable = isometryErrorFunctionLUT +buckling_experiment_rho10_level3_NCvtuDisplay.MapScalars = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.MultiComponentsMapping = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.InterpolateScalarsBeforeMapping = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.Opacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PointSize = 2.0 +buckling_experiment_rho10_level3_NCvtuDisplay.LineWidth = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.RenderLinesAsTubes = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.RenderPointsAsSpheres = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.Interpolation = 'Gouraud' +buckling_experiment_rho10_level3_NCvtuDisplay.Specular = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.SpecularColor = [1.0, 1.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.SpecularPower = 100.0 +buckling_experiment_rho10_level3_NCvtuDisplay.Luminosity = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.Ambient = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.Diffuse = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.Roughness = 0.3 +buckling_experiment_rho10_level3_NCvtuDisplay.Metallic = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.EdgeTint = [1.0, 1.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.Anisotropy = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.AnisotropyRotation = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.BaseIOR = 1.5 +buckling_experiment_rho10_level3_NCvtuDisplay.CoatStrength = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.CoatIOR = 2.0 +buckling_experiment_rho10_level3_NCvtuDisplay.CoatRoughness = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.CoatColor = [1.0, 1.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.SelectTCoordArray = 'None' +buckling_experiment_rho10_level3_NCvtuDisplay.SelectNormalArray = 'None' +buckling_experiment_rho10_level3_NCvtuDisplay.SelectTangentArray = 'None' +buckling_experiment_rho10_level3_NCvtuDisplay.Texture = None +buckling_experiment_rho10_level3_NCvtuDisplay.RepeatTextures = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.InterpolateTextures = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.SeamlessU = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.SeamlessV = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.UseMipmapTextures = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.ShowTexturesOnBackface = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.BaseColorTexture = None +buckling_experiment_rho10_level3_NCvtuDisplay.NormalTexture = None +buckling_experiment_rho10_level3_NCvtuDisplay.NormalScale = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.CoatNormalTexture = None +buckling_experiment_rho10_level3_NCvtuDisplay.CoatNormalScale = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.MaterialTexture = None +buckling_experiment_rho10_level3_NCvtuDisplay.OcclusionStrength = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.AnisotropyTexture = None +buckling_experiment_rho10_level3_NCvtuDisplay.EmissiveTexture = None +buckling_experiment_rho10_level3_NCvtuDisplay.EmissiveFactor = [1.0, 1.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.FlipTextures = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.BackfaceRepresentation = 'Follow Frontface' +buckling_experiment_rho10_level3_NCvtuDisplay.BackfaceAmbientColor = [1.0, 1.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.BackfaceOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.Position = [0.0, 0.0, 0.0] +buckling_experiment_rho10_level3_NCvtuDisplay.Scale = [1.0, 1.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.Orientation = [0.0, 0.0, 0.0] +buckling_experiment_rho10_level3_NCvtuDisplay.Origin = [0.0, 0.0, 0.0] +buckling_experiment_rho10_level3_NCvtuDisplay.CoordinateShiftScaleMethod = 'Always Auto Shift Scale' +buckling_experiment_rho10_level3_NCvtuDisplay.Pickable = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.Triangulate = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.UseShaderReplacements = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.ShaderReplacements = '' +buckling_experiment_rho10_level3_NCvtuDisplay.NonlinearSubdivisionLevel = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.UseDataPartitions = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.OSPRayUseScaleArray = 'All Approximate' +buckling_experiment_rho10_level3_NCvtuDisplay.OSPRayScaleArray = 'IsometryErrorFunction' +buckling_experiment_rho10_level3_NCvtuDisplay.OSPRayScaleFunction = 'PiecewiseFunction' +buckling_experiment_rho10_level3_NCvtuDisplay.OSPRayMaterial = 'None' +buckling_experiment_rho10_level3_NCvtuDisplay.BlockSelectors = ['/'] +buckling_experiment_rho10_level3_NCvtuDisplay.BlockColors = [] +buckling_experiment_rho10_level3_NCvtuDisplay.BlockOpacities = [] +buckling_experiment_rho10_level3_NCvtuDisplay.Orient = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.OrientationMode = 'Direction' +buckling_experiment_rho10_level3_NCvtuDisplay.SelectOrientationVectors = 'Displacement dune-VTK' +buckling_experiment_rho10_level3_NCvtuDisplay.Scaling = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.ScaleMode = 'No Data Scaling Off' +buckling_experiment_rho10_level3_NCvtuDisplay.ScaleFactor = 0.4 +buckling_experiment_rho10_level3_NCvtuDisplay.SelectScaleArray = 'IsometryErrorFunction' +buckling_experiment_rho10_level3_NCvtuDisplay.GlyphType = 'Arrow' +buckling_experiment_rho10_level3_NCvtuDisplay.UseGlyphTable = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.GlyphTableIndexArray = 'IsometryErrorFunction' +buckling_experiment_rho10_level3_NCvtuDisplay.UseCompositeGlyphTable = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.UseGlyphCullingAndLOD = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.LODValues = [] +buckling_experiment_rho10_level3_NCvtuDisplay.ColorByLODIndex = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.GaussianRadius = 0.02 +buckling_experiment_rho10_level3_NCvtuDisplay.ShaderPreset = 'Sphere' +buckling_experiment_rho10_level3_NCvtuDisplay.CustomTriangleScale = 3 +buckling_experiment_rho10_level3_NCvtuDisplay.CustomShader = """ // This custom shader code define a gaussian blur + // Please take a look into vtkSMPointGaussianRepresentation.cxx + // for other custom shader examples + //VTK::Color::Impl + float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy); + float gaussian = exp(-0.5*dist2); + opacity = opacity*gaussian; +""" +buckling_experiment_rho10_level3_NCvtuDisplay.Emissive = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.ScaleByArray = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] +buckling_experiment_rho10_level3_NCvtuDisplay.ScaleArrayComponent = '' +buckling_experiment_rho10_level3_NCvtuDisplay.UseScaleFunction = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.ScaleTransferFunction = 'PiecewiseFunction' +buckling_experiment_rho10_level3_NCvtuDisplay.OpacityByArray = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.OpacityArray = ['POINTS', 'IsometryErrorFunction'] +buckling_experiment_rho10_level3_NCvtuDisplay.OpacityArrayComponent = '' +buckling_experiment_rho10_level3_NCvtuDisplay.OpacityTransferFunction = 'PiecewiseFunction' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid = 'GridAxesRepresentation' +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionCellLabelBold = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionCellLabelColor = [0.0, 1.0, 0.0] +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionCellLabelFontFamily = 'Arial' +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionCellLabelFontFile = '' +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionCellLabelFontSize = 18 +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionCellLabelItalic = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionCellLabelJustification = 'Left' +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionCellLabelOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionCellLabelShadow = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionPointLabelBold = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionPointLabelColor = [1.0, 1.0, 0.0] +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionPointLabelFontFamily = 'Arial' +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionPointLabelFontFile = '' +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionPointLabelFontSize = 18 +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionPointLabelItalic = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionPointLabelJustification = 'Left' +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionPointLabelOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.SelectionPointLabelShadow = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes = 'PolarAxesRepresentation' +buckling_experiment_rho10_level3_NCvtuDisplay.ScalarOpacityFunction = isometryErrorFunctionPWF +buckling_experiment_rho10_level3_NCvtuDisplay.ScalarOpacityUnitDistance = 0.5153882032022076 +buckling_experiment_rho10_level3_NCvtuDisplay.UseSeparateOpacityArray = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.OpacityArrayName = ['POINTS', 'IsometryErrorFunction'] +buckling_experiment_rho10_level3_NCvtuDisplay.OpacityComponent = '' +buckling_experiment_rho10_level3_NCvtuDisplay.SelectMapper = 'Projected tetra' +buckling_experiment_rho10_level3_NCvtuDisplay.SamplingDimensions = [128, 128, 128] +buckling_experiment_rho10_level3_NCvtuDisplay.UseFloatingPointFrameBuffer = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] +buckling_experiment_rho10_level3_NCvtuDisplay.NumberOfSteps = 40 +buckling_experiment_rho10_level3_NCvtuDisplay.StepSize = 0.25 +buckling_experiment_rho10_level3_NCvtuDisplay.NormalizeVectors = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.EnhancedLIC = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.ColorMode = 'Blend' +buckling_experiment_rho10_level3_NCvtuDisplay.LICIntensity = 0.8 +buckling_experiment_rho10_level3_NCvtuDisplay.MapModeBias = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.EnhanceContrast = 'Off' +buckling_experiment_rho10_level3_NCvtuDisplay.LowLICContrastEnhancementFactor = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.HighLICContrastEnhancementFactor = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.LowColorContrastEnhancementFactor = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.HighColorContrastEnhancementFactor = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.AntiAlias = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.MaskOnSurface = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.MaskThreshold = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.MaskIntensity = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.MaskColor = [0.5, 0.5, 0.5] +buckling_experiment_rho10_level3_NCvtuDisplay.GenerateNoiseTexture = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.NoiseType = 'Gaussian' +buckling_experiment_rho10_level3_NCvtuDisplay.NoiseTextureSize = 128 +buckling_experiment_rho10_level3_NCvtuDisplay.NoiseGrainSize = 2 +buckling_experiment_rho10_level3_NCvtuDisplay.MinNoiseValue = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.MaxNoiseValue = 0.8 +buckling_experiment_rho10_level3_NCvtuDisplay.NumberOfNoiseLevels = 1024 +buckling_experiment_rho10_level3_NCvtuDisplay.ImpulseNoiseProbability = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.ImpulseNoiseBackgroundValue = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.NoiseGeneratorSeed = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.CompositeStrategy = 'AUTO' +buckling_experiment_rho10_level3_NCvtuDisplay.UseLICForLOD = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.WriteLog = '' + +# init the 'PiecewiseFunction' selected for 'OSPRayScaleFunction' +buckling_experiment_rho10_level3_NCvtuDisplay.OSPRayScaleFunction.Points = [0.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] +buckling_experiment_rho10_level3_NCvtuDisplay.OSPRayScaleFunction.UseLogScale = 0 + +# init the 'Arrow' selected for 'GlyphType' +buckling_experiment_rho10_level3_NCvtuDisplay.GlyphType.TipResolution = 100 +buckling_experiment_rho10_level3_NCvtuDisplay.GlyphType.TipRadius = 0.075 +buckling_experiment_rho10_level3_NCvtuDisplay.GlyphType.TipLength = 0.35 +buckling_experiment_rho10_level3_NCvtuDisplay.GlyphType.ShaftResolution = 100 +buckling_experiment_rho10_level3_NCvtuDisplay.GlyphType.ShaftRadius = 0.015 +buckling_experiment_rho10_level3_NCvtuDisplay.GlyphType.Invert = 0 + +# init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' +buckling_experiment_rho10_level3_NCvtuDisplay.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.043813616037368774, 1.0, 0.5, 0.0] +buckling_experiment_rho10_level3_NCvtuDisplay.ScaleTransferFunction.UseLogScale = 0 + +# init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' +buckling_experiment_rho10_level3_NCvtuDisplay.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.043813616037368774, 1.0, 0.5, 0.0] +buckling_experiment_rho10_level3_NCvtuDisplay.OpacityTransferFunction.UseLogScale = 0 + +# init the 'GridAxesRepresentation' selected for 'DataAxesGrid' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XTitle = 'X Axis' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YTitle = 'Y Axis' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZTitle = 'Z Axis' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XTitleFontFamily = 'Arial' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XTitleFontFile = '' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XTitleBold = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XTitleItalic = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XTitleFontSize = 12 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XTitleShadow = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XTitleOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YTitleFontFamily = 'Arial' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YTitleFontFile = '' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YTitleBold = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YTitleItalic = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YTitleFontSize = 12 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YTitleShadow = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YTitleOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZTitleFontFamily = 'Arial' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZTitleFontFile = '' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZTitleBold = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZTitleItalic = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZTitleFontSize = 12 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZTitleShadow = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZTitleOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.FacesToRender = 63 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.CullBackface = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.CullFrontface = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ShowGrid = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ShowEdges = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ShowTicks = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.LabelUniqueEdgesOnly = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.AxesToLabel = 63 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XLabelFontFamily = 'Arial' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XLabelFontFile = '' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XLabelBold = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XLabelItalic = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XLabelFontSize = 12 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XLabelShadow = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XLabelOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YLabelFontFamily = 'Arial' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YLabelFontFile = '' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YLabelBold = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YLabelItalic = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YLabelFontSize = 12 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YLabelShadow = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YLabelOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZLabelFontFamily = 'Arial' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZLabelFontFile = '' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZLabelBold = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZLabelItalic = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZLabelFontSize = 12 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZLabelShadow = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZLabelOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XAxisNotation = 'Mixed' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XAxisPrecision = 2 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XAxisUseCustomLabels = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.XAxisLabels = [] +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YAxisNotation = 'Mixed' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YAxisPrecision = 2 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YAxisUseCustomLabels = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.YAxisLabels = [] +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZAxisNotation = 'Mixed' +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZAxisPrecision = 2 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZAxisUseCustomLabels = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.ZAxisLabels = [] +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.UseCustomBounds = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.DataAxesGrid.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + +# init the 'PolarAxesRepresentation' selected for 'PolarAxes' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.Visibility = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.Translation = [0.0, 0.0, 0.0] +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.Scale = [1.0, 1.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.Orientation = [0.0, 0.0, 0.0] +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.EnableCustomBounds = [0, 0, 0] +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.EnableCustomRange = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.CustomRange = [0.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisVisibility = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.RadialAxesVisibility = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.DrawRadialGridlines = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarArcsVisibility = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.DrawPolarArcsGridlines = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.NumberOfRadialAxes = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.AutoSubdividePolarAxis = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.NumberOfPolarAxis = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.MinimumRadius = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.MinimumAngle = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.MaximumAngle = 90.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.RadialAxesOriginToPolarAxis = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.Ratio = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisColor = [1.0, 1.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarArcsColor = [1.0, 1.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.LastRadialAxisColor = [1.0, 1.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.SecondaryPolarArcsColor = [1.0, 1.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesColor = [1.0, 1.0, 1.0] +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleVisibility = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisTitle = 'Radial Distance' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleLocation = 'Bottom' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarLabelVisibility = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarLabelFormat = '%-#6.3g' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarLabelExponentLocation = 'Labels' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.RadialLabelVisibility = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.RadialLabelFormat = '%-#3.1f' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.RadialLabelLocation = 'Bottom' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.RadialUnitsVisibility = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.ScreenSize = 10.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleFontFamily = 'Arial' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleFontFile = '' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleBold = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleItalic = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleShadow = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleFontSize = 12 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelFontFamily = 'Arial' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelFontFile = '' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelBold = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelItalic = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelShadow = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelFontSize = 12 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextFontFamily = 'Arial' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextFontFile = '' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextBold = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextItalic = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextShadow = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextFontSize = 12 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextOpacity = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontFamily = 'Arial' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontFile = '' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextBold = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextItalic = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextShadow = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontSize = 12 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.EnableDistanceLOD = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.DistanceLODThreshold = 0.7 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.EnableViewAngleLOD = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.ViewAngleLODThreshold = 0.7 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.SmallestVisiblePolarAngle = 0.5 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarTicksVisibility = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.ArcTicksOriginToPolarAxis = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.TickLocation = 'Both' +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.AxisTickVisibility = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.AxisMinorTickVisibility = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.ArcTickVisibility = 1 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.ArcMinorTickVisibility = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.DeltaAngleMajor = 10.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.DeltaAngleMinor = 5.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisMajorTickSize = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisTickRatioSize = 0.3 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisMajorTickThickness = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.PolarAxisTickRatioThickness = 0.5 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.LastRadialAxisMajorTickSize = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTickRatioSize = 0.3 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.LastRadialAxisMajorTickThickness = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTickRatioThickness = 0.5 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.ArcMajorTickSize = 0.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.ArcTickRatioSize = 0.3 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.ArcMajorTickThickness = 1.0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.ArcTickRatioThickness = 0.5 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.Use2DMode = 0 +buckling_experiment_rho10_level3_NCvtuDisplay.PolarAxes.UseLogAxis = 0 + +# show color bar/color legend +buckling_experiment_rho10_level3_NCvtuDisplay.SetScalarBarVisibility(renderView1, True) + +# find source +box2 = FindSource('Box2') + +# update the view to ensure updated data information +renderView1.Update() + +# set scalar coloring +ColorBy(buckling_experiment_rho10_level3_NCvtuDisplay, ('POINTS', 'Displacement dune-VTK', 'Magnitude')) + +# Hide the scalar bar for this color map if no visible data is colored by it. +HideScalarBarIfNotNeeded(isometryErrorFunctionLUT, renderView1) + +# rescale color and/or opacity maps used to include current data range +buckling_experiment_rho10_level3_NCvtuDisplay.RescaleTransferFunctionToDataRange(True, False) + +# show color bar/color legend +buckling_experiment_rho10_level3_NCvtuDisplay.SetScalarBarVisibility(renderView1, True) + +# get 2D transfer function for 'DisplacementduneVTK' +displacementduneVTKTF2D = GetTransferFunction2D('DisplacementduneVTK') +displacementduneVTKTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +displacementduneVTKTF2D.Boxes = [] +displacementduneVTKTF2D.ScalarRangeInitialized = 0 +displacementduneVTKTF2D.Range = [0.0, 1.0, 0.0, 1.0] +displacementduneVTKTF2D.OutputDimensions = [10, 10] + +# get color transfer function/color map for 'DisplacementduneVTK' +displacementduneVTKLUT = GetColorTransferFunction('DisplacementduneVTK') +displacementduneVTKLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +displacementduneVTKLUT.InterpretValuesAsCategories = 0 +displacementduneVTKLUT.AnnotationsInitialized = 0 +displacementduneVTKLUT.ShowCategoricalColorsinDataRangeOnly = 0 +displacementduneVTKLUT.RescaleOnVisibilityChange = 0 +displacementduneVTKLUT.EnableOpacityMapping = 0 +displacementduneVTKLUT.TransferFunction2D = displacementduneVTKTF2D +displacementduneVTKLUT.Use2DTransferFunction = 0 +displacementduneVTKLUT.RGBPoints = [0.0, 0.231373, 0.298039, 0.752941, 0.4440353065316699, 0.865003, 0.865003, 0.865003, 0.8880706130633398, 0.705882, 0.0156863, 0.14902] +displacementduneVTKLUT.UseLogScale = 0 +displacementduneVTKLUT.UseOpacityControlPointsFreehandDrawing = 0 +displacementduneVTKLUT.ShowDataHistogram = 0 +displacementduneVTKLUT.AutomaticDataHistogramComputation = 0 +displacementduneVTKLUT.DataHistogramNumberOfBins = 10 +displacementduneVTKLUT.ColorSpace = 'Diverging' +displacementduneVTKLUT.UseBelowRangeColor = 0 +displacementduneVTKLUT.BelowRangeColor = [0.0, 0.0, 0.0] +displacementduneVTKLUT.UseAboveRangeColor = 0 +displacementduneVTKLUT.AboveRangeColor = [0.5, 0.5, 0.5] +displacementduneVTKLUT.NanColor = [1.0, 1.0, 0.0] +displacementduneVTKLUT.NanOpacity = 1.0 +displacementduneVTKLUT.Discretize = 1 +displacementduneVTKLUT.NumberOfTableValues = 256 +displacementduneVTKLUT.ScalarRangeInitialized = 1.0 +displacementduneVTKLUT.HSVWrap = 0 +displacementduneVTKLUT.VectorComponent = 0 +displacementduneVTKLUT.VectorMode = 'Magnitude' +displacementduneVTKLUT.AllowDuplicateScalars = 1 +displacementduneVTKLUT.Annotations = [] +displacementduneVTKLUT.ActiveAnnotatedValues = [] +displacementduneVTKLUT.IndexedColors = [] +displacementduneVTKLUT.IndexedOpacities = [] + +# get opacity transfer function/opacity map for 'DisplacementduneVTK' +displacementduneVTKPWF = GetOpacityTransferFunction('DisplacementduneVTK') +displacementduneVTKPWF.Points = [0.0, 0.0, 0.5, 0.0, 0.8880706130633398, 1.0, 0.5, 0.0] +displacementduneVTKPWF.AllowDuplicateScalars = 1 +displacementduneVTKPWF.UseLogScale = 0 +displacementduneVTKPWF.ScalarRangeInitialized = 1 + +# create a new 'Warp By Vector' +warpByVector1 = WarpByVector(registrationName='WarpByVector1', Input=buckling_experiment_rho10_level3_NCvtu) +warpByVector1.Vectors = ['POINTS', 'Displacement dune-VTK'] +warpByVector1.ScaleFactor = 1.0 + +# show data in view +warpByVector1Display = Show(warpByVector1, renderView1, 'UnstructuredGridRepresentation') + +# trace defaults for the display properties. +warpByVector1Display.Selection = None +warpByVector1Display.Representation = 'Surface' +warpByVector1Display.ColorArrayName = ['POINTS', 'IsometryErrorFunction'] +warpByVector1Display.LookupTable = isometryErrorFunctionLUT +warpByVector1Display.MapScalars = 1 +warpByVector1Display.MultiComponentsMapping = 0 +warpByVector1Display.InterpolateScalarsBeforeMapping = 1 +warpByVector1Display.Opacity = 1.0 +warpByVector1Display.PointSize = 2.0 +warpByVector1Display.LineWidth = 1.0 +warpByVector1Display.RenderLinesAsTubes = 0 +warpByVector1Display.RenderPointsAsSpheres = 0 +warpByVector1Display.Interpolation = 'Gouraud' +warpByVector1Display.Specular = 0.0 +warpByVector1Display.SpecularColor = [1.0, 1.0, 1.0] +warpByVector1Display.SpecularPower = 100.0 +warpByVector1Display.Luminosity = 0.0 +warpByVector1Display.Ambient = 0.0 +warpByVector1Display.Diffuse = 1.0 +warpByVector1Display.Roughness = 0.3 +warpByVector1Display.Metallic = 0.0 +warpByVector1Display.EdgeTint = [1.0, 1.0, 1.0] +warpByVector1Display.Anisotropy = 0.0 +warpByVector1Display.AnisotropyRotation = 0.0 +warpByVector1Display.BaseIOR = 1.5 +warpByVector1Display.CoatStrength = 0.0 +warpByVector1Display.CoatIOR = 2.0 +warpByVector1Display.CoatRoughness = 0.0 +warpByVector1Display.CoatColor = [1.0, 1.0, 1.0] +warpByVector1Display.SelectTCoordArray = 'None' +warpByVector1Display.SelectNormalArray = 'None' +warpByVector1Display.SelectTangentArray = 'None' +warpByVector1Display.Texture = None +warpByVector1Display.RepeatTextures = 1 +warpByVector1Display.InterpolateTextures = 0 +warpByVector1Display.SeamlessU = 0 +warpByVector1Display.SeamlessV = 0 +warpByVector1Display.UseMipmapTextures = 0 +warpByVector1Display.ShowTexturesOnBackface = 1 +warpByVector1Display.BaseColorTexture = None +warpByVector1Display.NormalTexture = None +warpByVector1Display.NormalScale = 1.0 +warpByVector1Display.CoatNormalTexture = None +warpByVector1Display.CoatNormalScale = 1.0 +warpByVector1Display.MaterialTexture = None +warpByVector1Display.OcclusionStrength = 1.0 +warpByVector1Display.AnisotropyTexture = None +warpByVector1Display.EmissiveTexture = None +warpByVector1Display.EmissiveFactor = [1.0, 1.0, 1.0] +warpByVector1Display.FlipTextures = 0 +warpByVector1Display.BackfaceRepresentation = 'Follow Frontface' +warpByVector1Display.BackfaceAmbientColor = [1.0, 1.0, 1.0] +warpByVector1Display.BackfaceOpacity = 1.0 +warpByVector1Display.Position = [0.0, 0.0, 0.0] +warpByVector1Display.Scale = [1.0, 1.0, 1.0] +warpByVector1Display.Orientation = [0.0, 0.0, 0.0] +warpByVector1Display.Origin = [0.0, 0.0, 0.0] +warpByVector1Display.CoordinateShiftScaleMethod = 'Always Auto Shift Scale' +warpByVector1Display.Pickable = 1 +warpByVector1Display.Triangulate = 0 +warpByVector1Display.UseShaderReplacements = 0 +warpByVector1Display.ShaderReplacements = '' +warpByVector1Display.NonlinearSubdivisionLevel = 1 +warpByVector1Display.UseDataPartitions = 0 +warpByVector1Display.OSPRayUseScaleArray = 'All Approximate' +warpByVector1Display.OSPRayScaleArray = 'IsometryErrorFunction' +warpByVector1Display.OSPRayScaleFunction = 'PiecewiseFunction' +warpByVector1Display.OSPRayMaterial = 'None' +warpByVector1Display.BlockSelectors = ['/'] +warpByVector1Display.BlockColors = [] +warpByVector1Display.BlockOpacities = [] +warpByVector1Display.Orient = 0 +warpByVector1Display.OrientationMode = 'Direction' +warpByVector1Display.SelectOrientationVectors = 'Displacement dune-VTK' +warpByVector1Display.Scaling = 0 +warpByVector1Display.ScaleMode = 'No Data Scaling Off' +warpByVector1Display.ScaleFactor = 0.35000000000000003 +warpByVector1Display.SelectScaleArray = 'IsometryErrorFunction' +warpByVector1Display.GlyphType = 'Arrow' +warpByVector1Display.UseGlyphTable = 0 +warpByVector1Display.GlyphTableIndexArray = 'IsometryErrorFunction' +warpByVector1Display.UseCompositeGlyphTable = 0 +warpByVector1Display.UseGlyphCullingAndLOD = 0 +warpByVector1Display.LODValues = [] +warpByVector1Display.ColorByLODIndex = 0 +warpByVector1Display.GaussianRadius = 0.0175 +warpByVector1Display.ShaderPreset = 'Sphere' +warpByVector1Display.CustomTriangleScale = 3 +warpByVector1Display.CustomShader = """ // This custom shader code define a gaussian blur + // Please take a look into vtkSMPointGaussianRepresentation.cxx + // for other custom shader examples + //VTK::Color::Impl + float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy); + float gaussian = exp(-0.5*dist2); + opacity = opacity*gaussian; +""" +warpByVector1Display.Emissive = 0 +warpByVector1Display.ScaleByArray = 0 +warpByVector1Display.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] +warpByVector1Display.ScaleArrayComponent = '' +warpByVector1Display.UseScaleFunction = 1 +warpByVector1Display.ScaleTransferFunction = 'PiecewiseFunction' +warpByVector1Display.OpacityByArray = 0 +warpByVector1Display.OpacityArray = ['POINTS', 'IsometryErrorFunction'] +warpByVector1Display.OpacityArrayComponent = '' +warpByVector1Display.OpacityTransferFunction = 'PiecewiseFunction' +warpByVector1Display.DataAxesGrid = 'GridAxesRepresentation' +warpByVector1Display.SelectionCellLabelBold = 0 +warpByVector1Display.SelectionCellLabelColor = [0.0, 1.0, 0.0] +warpByVector1Display.SelectionCellLabelFontFamily = 'Arial' +warpByVector1Display.SelectionCellLabelFontFile = '' +warpByVector1Display.SelectionCellLabelFontSize = 18 +warpByVector1Display.SelectionCellLabelItalic = 0 +warpByVector1Display.SelectionCellLabelJustification = 'Left' +warpByVector1Display.SelectionCellLabelOpacity = 1.0 +warpByVector1Display.SelectionCellLabelShadow = 0 +warpByVector1Display.SelectionPointLabelBold = 0 +warpByVector1Display.SelectionPointLabelColor = [1.0, 1.0, 0.0] +warpByVector1Display.SelectionPointLabelFontFamily = 'Arial' +warpByVector1Display.SelectionPointLabelFontFile = '' +warpByVector1Display.SelectionPointLabelFontSize = 18 +warpByVector1Display.SelectionPointLabelItalic = 0 +warpByVector1Display.SelectionPointLabelJustification = 'Left' +warpByVector1Display.SelectionPointLabelOpacity = 1.0 +warpByVector1Display.SelectionPointLabelShadow = 0 +warpByVector1Display.PolarAxes = 'PolarAxesRepresentation' +warpByVector1Display.ScalarOpacityFunction = isometryErrorFunctionPWF +warpByVector1Display.ScalarOpacityUnitDistance = 0.46736141372385986 +warpByVector1Display.UseSeparateOpacityArray = 0 +warpByVector1Display.OpacityArrayName = ['POINTS', 'IsometryErrorFunction'] +warpByVector1Display.OpacityComponent = '' +warpByVector1Display.SelectMapper = 'Projected tetra' +warpByVector1Display.SamplingDimensions = [128, 128, 128] +warpByVector1Display.UseFloatingPointFrameBuffer = 1 +warpByVector1Display.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] +warpByVector1Display.NumberOfSteps = 40 +warpByVector1Display.StepSize = 0.25 +warpByVector1Display.NormalizeVectors = 1 +warpByVector1Display.EnhancedLIC = 1 +warpByVector1Display.ColorMode = 'Blend' +warpByVector1Display.LICIntensity = 0.8 +warpByVector1Display.MapModeBias = 0.0 +warpByVector1Display.EnhanceContrast = 'Off' +warpByVector1Display.LowLICContrastEnhancementFactor = 0.0 +warpByVector1Display.HighLICContrastEnhancementFactor = 0.0 +warpByVector1Display.LowColorContrastEnhancementFactor = 0.0 +warpByVector1Display.HighColorContrastEnhancementFactor = 0.0 +warpByVector1Display.AntiAlias = 0 +warpByVector1Display.MaskOnSurface = 1 +warpByVector1Display.MaskThreshold = 0.0 +warpByVector1Display.MaskIntensity = 0.0 +warpByVector1Display.MaskColor = [0.5, 0.5, 0.5] +warpByVector1Display.GenerateNoiseTexture = 0 +warpByVector1Display.NoiseType = 'Gaussian' +warpByVector1Display.NoiseTextureSize = 128 +warpByVector1Display.NoiseGrainSize = 2 +warpByVector1Display.MinNoiseValue = 0.0 +warpByVector1Display.MaxNoiseValue = 0.8 +warpByVector1Display.NumberOfNoiseLevels = 1024 +warpByVector1Display.ImpulseNoiseProbability = 1.0 +warpByVector1Display.ImpulseNoiseBackgroundValue = 0.0 +warpByVector1Display.NoiseGeneratorSeed = 1 +warpByVector1Display.CompositeStrategy = 'AUTO' +warpByVector1Display.UseLICForLOD = 0 +warpByVector1Display.WriteLog = '' + +# init the 'PiecewiseFunction' selected for 'OSPRayScaleFunction' +warpByVector1Display.OSPRayScaleFunction.Points = [0.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] +warpByVector1Display.OSPRayScaleFunction.UseLogScale = 0 + +# # init the 'Arrow' selected for 'GlyphType' +# warpByVector1Display.GlyphType.TipResolution = 6 +# warpByVector1Display.GlyphType.TipRadius = 0.1 +# warpByVector1Display.GlyphType.TipLength = 0.35 +# warpByVector1Display.GlyphType.ShaftResolution = 6 +# warpByVector1Display.GlyphType.ShaftRadius = 0.03 +# warpByVector1Display.GlyphType.Invert = 0 + +# init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' +warpByVector1Display.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.043813616037368774, 1.0, 0.5, 0.0] +warpByVector1Display.ScaleTransferFunction.UseLogScale = 0 + +# init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' +warpByVector1Display.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.043813616037368774, 1.0, 0.5, 0.0] +warpByVector1Display.OpacityTransferFunction.UseLogScale = 0 + +# init the 'GridAxesRepresentation' selected for 'DataAxesGrid' +warpByVector1Display.DataAxesGrid.XTitle = 'X Axis' +warpByVector1Display.DataAxesGrid.YTitle = 'Y Axis' +warpByVector1Display.DataAxesGrid.ZTitle = 'Z Axis' +warpByVector1Display.DataAxesGrid.XTitleFontFamily = 'Arial' +warpByVector1Display.DataAxesGrid.XTitleFontFile = '' +warpByVector1Display.DataAxesGrid.XTitleBold = 0 +warpByVector1Display.DataAxesGrid.XTitleItalic = 0 +warpByVector1Display.DataAxesGrid.XTitleFontSize = 12 +warpByVector1Display.DataAxesGrid.XTitleShadow = 0 +warpByVector1Display.DataAxesGrid.XTitleOpacity = 1.0 +warpByVector1Display.DataAxesGrid.YTitleFontFamily = 'Arial' +warpByVector1Display.DataAxesGrid.YTitleFontFile = '' +warpByVector1Display.DataAxesGrid.YTitleBold = 0 +warpByVector1Display.DataAxesGrid.YTitleItalic = 0 +warpByVector1Display.DataAxesGrid.YTitleFontSize = 12 +warpByVector1Display.DataAxesGrid.YTitleShadow = 0 +warpByVector1Display.DataAxesGrid.YTitleOpacity = 1.0 +warpByVector1Display.DataAxesGrid.ZTitleFontFamily = 'Arial' +warpByVector1Display.DataAxesGrid.ZTitleFontFile = '' +warpByVector1Display.DataAxesGrid.ZTitleBold = 0 +warpByVector1Display.DataAxesGrid.ZTitleItalic = 0 +warpByVector1Display.DataAxesGrid.ZTitleFontSize = 12 +warpByVector1Display.DataAxesGrid.ZTitleShadow = 0 +warpByVector1Display.DataAxesGrid.ZTitleOpacity = 1.0 +warpByVector1Display.DataAxesGrid.FacesToRender = 63 +warpByVector1Display.DataAxesGrid.CullBackface = 0 +warpByVector1Display.DataAxesGrid.CullFrontface = 1 +warpByVector1Display.DataAxesGrid.ShowGrid = 0 +warpByVector1Display.DataAxesGrid.ShowEdges = 1 +warpByVector1Display.DataAxesGrid.ShowTicks = 1 +warpByVector1Display.DataAxesGrid.LabelUniqueEdgesOnly = 1 +warpByVector1Display.DataAxesGrid.AxesToLabel = 63 +warpByVector1Display.DataAxesGrid.XLabelFontFamily = 'Arial' +warpByVector1Display.DataAxesGrid.XLabelFontFile = '' +warpByVector1Display.DataAxesGrid.XLabelBold = 0 +warpByVector1Display.DataAxesGrid.XLabelItalic = 0 +warpByVector1Display.DataAxesGrid.XLabelFontSize = 12 +warpByVector1Display.DataAxesGrid.XLabelShadow = 0 +warpByVector1Display.DataAxesGrid.XLabelOpacity = 1.0 +warpByVector1Display.DataAxesGrid.YLabelFontFamily = 'Arial' +warpByVector1Display.DataAxesGrid.YLabelFontFile = '' +warpByVector1Display.DataAxesGrid.YLabelBold = 0 +warpByVector1Display.DataAxesGrid.YLabelItalic = 0 +warpByVector1Display.DataAxesGrid.YLabelFontSize = 12 +warpByVector1Display.DataAxesGrid.YLabelShadow = 0 +warpByVector1Display.DataAxesGrid.YLabelOpacity = 1.0 +warpByVector1Display.DataAxesGrid.ZLabelFontFamily = 'Arial' +warpByVector1Display.DataAxesGrid.ZLabelFontFile = '' +warpByVector1Display.DataAxesGrid.ZLabelBold = 0 +warpByVector1Display.DataAxesGrid.ZLabelItalic = 0 +warpByVector1Display.DataAxesGrid.ZLabelFontSize = 12 +warpByVector1Display.DataAxesGrid.ZLabelShadow = 0 +warpByVector1Display.DataAxesGrid.ZLabelOpacity = 1.0 +warpByVector1Display.DataAxesGrid.XAxisNotation = 'Mixed' +warpByVector1Display.DataAxesGrid.XAxisPrecision = 2 +warpByVector1Display.DataAxesGrid.XAxisUseCustomLabels = 0 +warpByVector1Display.DataAxesGrid.XAxisLabels = [] +warpByVector1Display.DataAxesGrid.YAxisNotation = 'Mixed' +warpByVector1Display.DataAxesGrid.YAxisPrecision = 2 +warpByVector1Display.DataAxesGrid.YAxisUseCustomLabels = 0 +warpByVector1Display.DataAxesGrid.YAxisLabels = [] +warpByVector1Display.DataAxesGrid.ZAxisNotation = 'Mixed' +warpByVector1Display.DataAxesGrid.ZAxisPrecision = 2 +warpByVector1Display.DataAxesGrid.ZAxisUseCustomLabels = 0 +warpByVector1Display.DataAxesGrid.ZAxisLabels = [] +warpByVector1Display.DataAxesGrid.UseCustomBounds = 0 +warpByVector1Display.DataAxesGrid.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + +# init the 'PolarAxesRepresentation' selected for 'PolarAxes' +warpByVector1Display.PolarAxes.Visibility = 0 +warpByVector1Display.PolarAxes.Translation = [0.0, 0.0, 0.0] +warpByVector1Display.PolarAxes.Scale = [1.0, 1.0, 1.0] +warpByVector1Display.PolarAxes.Orientation = [0.0, 0.0, 0.0] +warpByVector1Display.PolarAxes.EnableCustomBounds = [0, 0, 0] +warpByVector1Display.PolarAxes.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] +warpByVector1Display.PolarAxes.EnableCustomRange = 0 +warpByVector1Display.PolarAxes.CustomRange = [0.0, 1.0] +warpByVector1Display.PolarAxes.PolarAxisVisibility = 1 +warpByVector1Display.PolarAxes.RadialAxesVisibility = 1 +warpByVector1Display.PolarAxes.DrawRadialGridlines = 1 +warpByVector1Display.PolarAxes.PolarArcsVisibility = 1 +warpByVector1Display.PolarAxes.DrawPolarArcsGridlines = 1 +warpByVector1Display.PolarAxes.NumberOfRadialAxes = 0 +warpByVector1Display.PolarAxes.AutoSubdividePolarAxis = 1 +warpByVector1Display.PolarAxes.NumberOfPolarAxis = 0 +warpByVector1Display.PolarAxes.MinimumRadius = 0.0 +warpByVector1Display.PolarAxes.MinimumAngle = 0.0 +warpByVector1Display.PolarAxes.MaximumAngle = 90.0 +warpByVector1Display.PolarAxes.RadialAxesOriginToPolarAxis = 1 +warpByVector1Display.PolarAxes.Ratio = 1.0 +warpByVector1Display.PolarAxes.PolarAxisColor = [1.0, 1.0, 1.0] +warpByVector1Display.PolarAxes.PolarArcsColor = [1.0, 1.0, 1.0] +warpByVector1Display.PolarAxes.LastRadialAxisColor = [1.0, 1.0, 1.0] +warpByVector1Display.PolarAxes.SecondaryPolarArcsColor = [1.0, 1.0, 1.0] +warpByVector1Display.PolarAxes.SecondaryRadialAxesColor = [1.0, 1.0, 1.0] +warpByVector1Display.PolarAxes.PolarAxisTitleVisibility = 1 +warpByVector1Display.PolarAxes.PolarAxisTitle = 'Radial Distance' +warpByVector1Display.PolarAxes.PolarAxisTitleLocation = 'Bottom' +warpByVector1Display.PolarAxes.PolarLabelVisibility = 1 +warpByVector1Display.PolarAxes.PolarLabelFormat = '%-#6.3g' +warpByVector1Display.PolarAxes.PolarLabelExponentLocation = 'Labels' +warpByVector1Display.PolarAxes.RadialLabelVisibility = 1 +warpByVector1Display.PolarAxes.RadialLabelFormat = '%-#3.1f' +warpByVector1Display.PolarAxes.RadialLabelLocation = 'Bottom' +warpByVector1Display.PolarAxes.RadialUnitsVisibility = 1 +warpByVector1Display.PolarAxes.ScreenSize = 10.0 +warpByVector1Display.PolarAxes.PolarAxisTitleOpacity = 1.0 +warpByVector1Display.PolarAxes.PolarAxisTitleFontFamily = 'Arial' +warpByVector1Display.PolarAxes.PolarAxisTitleFontFile = '' +warpByVector1Display.PolarAxes.PolarAxisTitleBold = 0 +warpByVector1Display.PolarAxes.PolarAxisTitleItalic = 0 +warpByVector1Display.PolarAxes.PolarAxisTitleShadow = 0 +warpByVector1Display.PolarAxes.PolarAxisTitleFontSize = 12 +warpByVector1Display.PolarAxes.PolarAxisLabelOpacity = 1.0 +warpByVector1Display.PolarAxes.PolarAxisLabelFontFamily = 'Arial' +warpByVector1Display.PolarAxes.PolarAxisLabelFontFile = '' +warpByVector1Display.PolarAxes.PolarAxisLabelBold = 0 +warpByVector1Display.PolarAxes.PolarAxisLabelItalic = 0 +warpByVector1Display.PolarAxes.PolarAxisLabelShadow = 0 +warpByVector1Display.PolarAxes.PolarAxisLabelFontSize = 12 +warpByVector1Display.PolarAxes.LastRadialAxisTextOpacity = 1.0 +warpByVector1Display.PolarAxes.LastRadialAxisTextFontFamily = 'Arial' +warpByVector1Display.PolarAxes.LastRadialAxisTextFontFile = '' +warpByVector1Display.PolarAxes.LastRadialAxisTextBold = 0 +warpByVector1Display.PolarAxes.LastRadialAxisTextItalic = 0 +warpByVector1Display.PolarAxes.LastRadialAxisTextShadow = 0 +warpByVector1Display.PolarAxes.LastRadialAxisTextFontSize = 12 +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextOpacity = 1.0 +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextFontFamily = 'Arial' +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextFontFile = '' +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextBold = 0 +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextItalic = 0 +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextShadow = 0 +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextFontSize = 12 +warpByVector1Display.PolarAxes.EnableDistanceLOD = 1 +warpByVector1Display.PolarAxes.DistanceLODThreshold = 0.7 +warpByVector1Display.PolarAxes.EnableViewAngleLOD = 1 +warpByVector1Display.PolarAxes.ViewAngleLODThreshold = 0.7 +warpByVector1Display.PolarAxes.SmallestVisiblePolarAngle = 0.5 +warpByVector1Display.PolarAxes.PolarTicksVisibility = 1 +warpByVector1Display.PolarAxes.ArcTicksOriginToPolarAxis = 1 +warpByVector1Display.PolarAxes.TickLocation = 'Both' +warpByVector1Display.PolarAxes.AxisTickVisibility = 1 +warpByVector1Display.PolarAxes.AxisMinorTickVisibility = 0 +warpByVector1Display.PolarAxes.ArcTickVisibility = 1 +warpByVector1Display.PolarAxes.ArcMinorTickVisibility = 0 +warpByVector1Display.PolarAxes.DeltaAngleMajor = 10.0 +warpByVector1Display.PolarAxes.DeltaAngleMinor = 5.0 +warpByVector1Display.PolarAxes.PolarAxisMajorTickSize = 0.0 +warpByVector1Display.PolarAxes.PolarAxisTickRatioSize = 0.3 +warpByVector1Display.PolarAxes.PolarAxisMajorTickThickness = 1.0 +warpByVector1Display.PolarAxes.PolarAxisTickRatioThickness = 0.5 +warpByVector1Display.PolarAxes.LastRadialAxisMajorTickSize = 0.0 +warpByVector1Display.PolarAxes.LastRadialAxisTickRatioSize = 0.3 +warpByVector1Display.PolarAxes.LastRadialAxisMajorTickThickness = 1.0 +warpByVector1Display.PolarAxes.LastRadialAxisTickRatioThickness = 0.5 +warpByVector1Display.PolarAxes.ArcMajorTickSize = 0.0 +warpByVector1Display.PolarAxes.ArcTickRatioSize = 0.3 +warpByVector1Display.PolarAxes.ArcMajorTickThickness = 1.0 +warpByVector1Display.PolarAxes.ArcTickRatioThickness = 0.5 +warpByVector1Display.PolarAxes.Use2DMode = 0 +warpByVector1Display.PolarAxes.UseLogAxis = 0 + +# hide data in view +Hide(buckling_experiment_rho10_level3_NCvtu, renderView1) + +# show color bar/color legend +warpByVector1Display.SetScalarBarVisibility(renderView1, True) + +# update the view to ensure updated data information +renderView1.Update() + +# set active source +SetActiveSource(buckling_experiment_rho10_level3_NCvtu) + +# show data in view +buckling_experiment_rho10_level3_NCvtuDisplay = Show(buckling_experiment_rho10_level3_NCvtu, renderView1, 'UnstructuredGridRepresentation') + +# show color bar/color legend +buckling_experiment_rho10_level3_NCvtuDisplay.SetScalarBarVisibility(renderView1, True) + +# hide data in view +Hide(buckling_experiment_rho10_level3_NCvtu, renderView1) + +# Apply a preset using its name. Note this may not work as expected when presets have duplicate names. +displacementduneVTKLUT.ApplyPreset('Greens', True) + +# set active source +SetActiveSource(warpByVector1) + +# Apply a preset using its name. Note this may not work as expected when presets have duplicate names. +isometryErrorFunctionLUT.ApplyPreset('Greens', True) + +# set scalar coloring +ColorBy(warpByVector1Display, ('POINTS', 'Displacement dune-VTK', 'Magnitude')) + +# Hide the scalar bar for this color map if no visible data is colored by it. +HideScalarBarIfNotNeeded(isometryErrorFunctionLUT, renderView1) + +# rescale color and/or opacity maps used to include current data range +warpByVector1Display.RescaleTransferFunctionToDataRange(True, False) + +# show color bar/color legend +warpByVector1Display.SetScalarBarVisibility(renderView1, True) + +# hide color bar/color legend +warpByVector1Display.SetScalarBarVisibility(renderView1, False) + +# Properties modified on warpByVector1Display +warpByVector1Display.NonlinearSubdivisionLevel = 4 + +# Properties modified on renderView1 +renderView1.OrientationAxesVisibility = 0 + +#================================================================ +# addendum: following script captures some of the application +# state to faithfully reproduce the visualization during playback +#================================================================ + + + +#-------------------------------------------- +# uncomment the following to render all views +# RenderAllViews() +# alternatively, if you want to write images, you can use SaveScreenshot(...). + + + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') + +renderView1.ApplyIsometricView() + +# reset view to fit data +renderView1.ResetCamera(False) + +renderView1.AdjustRoll(-90.0) + +# reset view to fit data +renderView1.ResetCamera(True) + +# reset view to fit data bounds +renderView1.ResetCamera(0.0, 3.5, -0.0007144344272091985, 1.0007144212722778, -0.00020493667398113757, 0.8521557450294495, False) + +# reset view to fit data bounds +renderView1.ResetCamera(0.0, 3.5, -0.0007144344272091985, 1.0007144212722778, -0.00020493667398113757, 0.8521557450294495, True) + +# reset view to fit data +renderView1.ResetCamera(False) + +# get active source. +warpByVector1 = GetActiveSource() + +# get display properties +warpByVector1Display = GetDisplayProperties(warpByVector1, view=renderView1) + +# Properties modified on warpByVector1Display +warpByVector1Display.Ambient = 0.15 +warpByVector1Display.Ambient = 0.3 + +# get 2D transfer function for 'DisplacementduneVTK' +displacementduneVTKTF2D = GetTransferFunction2D('DisplacementduneVTK') +displacementduneVTKTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +displacementduneVTKTF2D.Boxes = [] +displacementduneVTKTF2D.ScalarRangeInitialized = 0 +displacementduneVTKTF2D.Range = [0.0, 1.0, 0.0, 1.0] +displacementduneVTKTF2D.OutputDimensions = [10, 10] + +# get color transfer function/color map for 'DisplacementduneVTK' +displacementduneVTKLUT = GetColorTransferFunction('DisplacementduneVTK') +displacementduneVTKLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +displacementduneVTKLUT.InterpretValuesAsCategories = 0 +displacementduneVTKLUT.AnnotationsInitialized = 0 +displacementduneVTKLUT.ShowCategoricalColorsinDataRangeOnly = 0 +displacementduneVTKLUT.RescaleOnVisibilityChange = 0 +displacementduneVTKLUT.EnableOpacityMapping = 0 +displacementduneVTKLUT.TransferFunction2D = displacementduneVTKTF2D +displacementduneVTKLUT.Use2DTransferFunction = 0 +displacementduneVTKLUT.RGBPoints = [0.0, 0.0, 0.266667, 0.105882, 0.05572199061665925, 0.0, 0.347374, 0.139346, 0.1114439812333185, 0.000538, 0.427912, 0.172933, 0.1671664158852843, 0.069435, 0.486967, 0.222145, 0.22288840650194355, 0.138178, 0.546082, 0.271326, 0.2786103971186028, 0.197232, 0.609073, 0.31857, 0.334332387735262, 0.257255, 0.671742, 0.365859, 0.3900543783519213, 0.357647, 0.720953, 0.415071, 0.4457766220687053, 0.45767, 0.769919, 0.465021, 0.5014988036205464, 0.546251, 0.811257, 0.537855, 0.5572207942372056, 0.634295, 0.852211, 0.610688, 0.6129427848538649, 0.709097, 0.883706, 0.683522, 0.6686647754705242, 0.78316, 0.914833, 0.755894, 0.7243872101224899, 0.842215, 0.938454, 0.818885, 0.7801092007391492, 0.899977, 0.961538, 0.880692, 0.8358311913558085, 0.935409, 0.975317, 0.92203, 0.8880706130633398, 0.968627, 0.988235, 0.960784] +displacementduneVTKLUT.UseLogScale = 0 +displacementduneVTKLUT.UseOpacityControlPointsFreehandDrawing = 0 +displacementduneVTKLUT.ShowDataHistogram = 0 +displacementduneVTKLUT.AutomaticDataHistogramComputation = 0 +displacementduneVTKLUT.DataHistogramNumberOfBins = 10 +displacementduneVTKLUT.ColorSpace = 'Lab' +displacementduneVTKLUT.UseBelowRangeColor = 0 +displacementduneVTKLUT.BelowRangeColor = [0.0, 0.0, 0.0] +displacementduneVTKLUT.UseAboveRangeColor = 0 +displacementduneVTKLUT.AboveRangeColor = [0.5, 0.5, 0.5] +displacementduneVTKLUT.NanColor = [1.0, 1.0, 0.0] +displacementduneVTKLUT.NanOpacity = 1.0 +displacementduneVTKLUT.Discretize = 1 +displacementduneVTKLUT.NumberOfTableValues = 256 +displacementduneVTKLUT.ScalarRangeInitialized = 1.0 +displacementduneVTKLUT.HSVWrap = 0 +displacementduneVTKLUT.VectorComponent = 0 +displacementduneVTKLUT.VectorMode = 'Magnitude' +displacementduneVTKLUT.AllowDuplicateScalars = 1 +displacementduneVTKLUT.Annotations = [] +displacementduneVTKLUT.ActiveAnnotatedValues = [] +displacementduneVTKLUT.IndexedColors = [] +displacementduneVTKLUT.IndexedOpacities = [] + +# get opacity transfer function/opacity map for 'DisplacementduneVTK' +displacementduneVTKPWF = GetOpacityTransferFunction('DisplacementduneVTK') +displacementduneVTKPWF.Points = [0.0, 0.0, 0.5, 0.0, 0.8880706130633398, 1.0, 0.5, 0.0] +displacementduneVTKPWF.AllowDuplicateScalars = 1 +displacementduneVTKPWF.UseLogScale = 0 +displacementduneVTKPWF.ScalarRangeInitialized = 1 + +# Properties modified on warpByVector1Display +warpByVector1Display.Specular = 0.5 +# warpByVector1Display.Specular = 0.3 + + + +# ----- Normal vector field +# find source +warpByVector1 = FindSource('WarpByVector1') + +# create a new 'Glyph' +glyph1 = Glyph(registrationName='Glyph1', Input=warpByVector1, + GlyphType='Arrow') +glyph1.OrientationArray = ['POINTS', 'Displacement dune-VTK'] +glyph1.ScaleArray = ['POINTS', 'IsometryErrorFunction'] +glyph1.VectorScaleMode = 'Scale by Magnitude' +glyph1.ScaleFactor = 0.35000000000000003 +glyph1.GlyphTransform = 'Transform2' +glyph1.GlyphMode = 'Uniform Spatial Distribution (Bounds Based)' +glyph1.MaximumNumberOfSamplePoints = 5000 +glyph1.Seed = 10339 +glyph1.Stride = 1 + +# init the 'Arrow' selected for 'GlyphType' +glyph1.GlyphType.TipResolution = 100 +glyph1.GlyphType.TipRadius = 0.075 +glyph1.GlyphType.TipLength = 0.35 +glyph1.GlyphType.ShaftResolution = 100 +glyph1.GlyphType.ShaftRadius = 0.015 +glyph1.GlyphType.Invert = 0 + +# init the 'Transform2' selected for 'GlyphTransform' +glyph1.GlyphTransform.Translate = [0.0, 0.0, 0.0] +glyph1.GlyphTransform.Rotate = [0.0, 0.0, 0.0] +glyph1.GlyphTransform.Scale = [1.0, 1.0, 1.0] + +# find source +box1 = FindSource('Box1') + +# Properties modified on glyph1 +glyph1.OrientationArray = ['POINTS', 'SurfaceNormalDiscrete'] +glyph1.ScaleArray = ['POINTS', 'No scale array'] +glyph1.ScaleFactor = 0.1 + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') + +# show data in view +glyph1Display = Show(glyph1, renderView1, 'GeometryRepresentation') + +# get 2D transfer function for 'IsometryErrorFunction' +isometryErrorFunctionTF2D = GetTransferFunction2D('IsometryErrorFunction') +isometryErrorFunctionTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +isometryErrorFunctionTF2D.Boxes = [] +isometryErrorFunctionTF2D.ScalarRangeInitialized = 0 +isometryErrorFunctionTF2D.Range = [0.0, 1.0, 0.0, 1.0] +isometryErrorFunctionTF2D.OutputDimensions = [10, 10] + +# get color transfer function/color map for 'IsometryErrorFunction' +isometryErrorFunctionLUT = GetColorTransferFunction('IsometryErrorFunction') +isometryErrorFunctionLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +isometryErrorFunctionLUT.InterpretValuesAsCategories = 0 +isometryErrorFunctionLUT.AnnotationsInitialized = 0 +isometryErrorFunctionLUT.ShowCategoricalColorsinDataRangeOnly = 0 +isometryErrorFunctionLUT.RescaleOnVisibilityChange = 0 +isometryErrorFunctionLUT.EnableOpacityMapping = 0 +isometryErrorFunctionLUT.TransferFunction2D = isometryErrorFunctionTF2D +isometryErrorFunctionLUT.Use2DTransferFunction = 0 +isometryErrorFunctionLUT.RGBPoints = [0.0, 0.0, 0.266667, 0.105882, 0.0027490853382647036, 0.0, 0.347374, 0.139346, 0.005498170676529407, 0.000538, 0.427912, 0.172933, 0.00824727792160213, 0.069435, 0.486967, 0.222145, 0.010996363259866833, 0.138178, 0.546082, 0.271326, 0.013745448598131538, 0.197232, 0.609073, 0.31857, 0.01649453393639624, 0.257255, 0.671742, 0.365859, 0.019243619274660943, 0.357647, 0.720953, 0.415071, 0.021992717099806217, 0.45767, 0.769919, 0.465021, 0.024741811857998373, 0.546251, 0.811257, 0.537855, 0.027490897196263075, 0.634295, 0.852211, 0.610688, 0.03023998253452778, 0.709097, 0.883706, 0.683522, 0.03298906787279249, 0.78316, 0.914833, 0.755894, 0.0357381751178652, 0.842215, 0.938454, 0.818885, 0.03848726045612991, 0.899977, 0.961538, 0.880692, 0.04123634579439461, 0.935409, 0.975317, 0.92203, 0.043813616037368774, 0.968627, 0.988235, 0.960784] +isometryErrorFunctionLUT.UseLogScale = 0 +isometryErrorFunctionLUT.UseOpacityControlPointsFreehandDrawing = 0 +isometryErrorFunctionLUT.ShowDataHistogram = 0 +isometryErrorFunctionLUT.AutomaticDataHistogramComputation = 0 +isometryErrorFunctionLUT.DataHistogramNumberOfBins = 10 +isometryErrorFunctionLUT.ColorSpace = 'Lab' +isometryErrorFunctionLUT.UseBelowRangeColor = 0 +isometryErrorFunctionLUT.BelowRangeColor = [0.0, 0.0, 0.0] +isometryErrorFunctionLUT.UseAboveRangeColor = 0 +isometryErrorFunctionLUT.AboveRangeColor = [0.5, 0.5, 0.5] +isometryErrorFunctionLUT.NanColor = [1.0, 1.0, 0.0] +isometryErrorFunctionLUT.NanOpacity = 1.0 +isometryErrorFunctionLUT.Discretize = 1 +isometryErrorFunctionLUT.NumberOfTableValues = 256 +isometryErrorFunctionLUT.ScalarRangeInitialized = 1.0 +isometryErrorFunctionLUT.HSVWrap = 0 +isometryErrorFunctionLUT.VectorComponent = 0 +isometryErrorFunctionLUT.VectorMode = 'Magnitude' +isometryErrorFunctionLUT.AllowDuplicateScalars = 1 +isometryErrorFunctionLUT.Annotations = [] +isometryErrorFunctionLUT.ActiveAnnotatedValues = [] +isometryErrorFunctionLUT.IndexedColors = [] +isometryErrorFunctionLUT.IndexedOpacities = [] + +# trace defaults for the display properties. +glyph1Display.Selection = None +glyph1Display.Representation = 'Surface' +glyph1Display.ColorArrayName = ['POINTS', 'IsometryErrorFunction'] +glyph1Display.LookupTable = isometryErrorFunctionLUT +glyph1Display.MapScalars = 1 +glyph1Display.MultiComponentsMapping = 0 +glyph1Display.InterpolateScalarsBeforeMapping = 1 +glyph1Display.Opacity = 1.0 +glyph1Display.PointSize = 2.0 +glyph1Display.LineWidth = 1.0 +glyph1Display.RenderLinesAsTubes = 0 +glyph1Display.RenderPointsAsSpheres = 0 +glyph1Display.Interpolation = 'Gouraud' +glyph1Display.Specular = 0.0 +glyph1Display.SpecularColor = [1.0, 1.0, 1.0] +glyph1Display.SpecularPower = 100.0 +glyph1Display.Luminosity = 0.0 +glyph1Display.Ambient = 0.0 +glyph1Display.Diffuse = 1.0 +glyph1Display.Roughness = 0.3 +glyph1Display.Metallic = 0.0 +glyph1Display.EdgeTint = [1.0, 1.0, 1.0] +glyph1Display.Anisotropy = 0.0 +glyph1Display.AnisotropyRotation = 0.0 +glyph1Display.BaseIOR = 1.5 +glyph1Display.CoatStrength = 0.0 +glyph1Display.CoatIOR = 2.0 +glyph1Display.CoatRoughness = 0.0 +glyph1Display.CoatColor = [1.0, 1.0, 1.0] +glyph1Display.SelectTCoordArray = 'None' +glyph1Display.SelectNormalArray = 'None' +glyph1Display.SelectTangentArray = 'None' +glyph1Display.Texture = None +glyph1Display.RepeatTextures = 1 +glyph1Display.InterpolateTextures = 0 +glyph1Display.SeamlessU = 0 +glyph1Display.SeamlessV = 0 +glyph1Display.UseMipmapTextures = 0 +glyph1Display.ShowTexturesOnBackface = 1 +glyph1Display.BaseColorTexture = None +glyph1Display.NormalTexture = None +glyph1Display.NormalScale = 1.0 +glyph1Display.CoatNormalTexture = None +glyph1Display.CoatNormalScale = 1.0 +glyph1Display.MaterialTexture = None +glyph1Display.OcclusionStrength = 1.0 +glyph1Display.AnisotropyTexture = None +glyph1Display.EmissiveTexture = None +glyph1Display.EmissiveFactor = [1.0, 1.0, 1.0] +glyph1Display.FlipTextures = 0 +glyph1Display.BackfaceRepresentation = 'Follow Frontface' +glyph1Display.BackfaceAmbientColor = [1.0, 1.0, 1.0] +glyph1Display.BackfaceOpacity = 1.0 +glyph1Display.Position = [0.0, 0.0, 0.0] +glyph1Display.Scale = [1.0, 1.0, 1.0] +glyph1Display.Orientation = [0.0, 0.0, 0.0] +glyph1Display.Origin = [0.0, 0.0, 0.0] +glyph1Display.CoordinateShiftScaleMethod = 'Always Auto Shift Scale' +glyph1Display.Pickable = 1 +glyph1Display.Triangulate = 0 +glyph1Display.UseShaderReplacements = 0 +glyph1Display.ShaderReplacements = '' +glyph1Display.NonlinearSubdivisionLevel = 1 +glyph1Display.UseDataPartitions = 0 +glyph1Display.OSPRayUseScaleArray = 'All Approximate' +glyph1Display.OSPRayScaleArray = 'IsometryErrorFunction' +glyph1Display.OSPRayScaleFunction = 'PiecewiseFunction' +glyph1Display.OSPRayMaterial = 'None' +glyph1Display.BlockSelectors = ['/'] +glyph1Display.BlockColors = [] +glyph1Display.BlockOpacities = [] +glyph1Display.Orient = 0 +glyph1Display.OrientationMode = 'Direction' +glyph1Display.SelectOrientationVectors = 'Displacement dune-VTK' +glyph1Display.Scaling = 0 +glyph1Display.ScaleMode = 'No Data Scaling Off' +glyph1Display.ScaleFactor = 0.35175590813159946 +glyph1Display.SelectScaleArray = 'IsometryErrorFunction' +glyph1Display.GlyphType = 'Arrow' +glyph1Display.UseGlyphTable = 0 +glyph1Display.GlyphTableIndexArray = 'IsometryErrorFunction' +glyph1Display.UseCompositeGlyphTable = 0 +glyph1Display.UseGlyphCullingAndLOD = 0 +glyph1Display.LODValues = [] +glyph1Display.ColorByLODIndex = 0 +glyph1Display.GaussianRadius = 0.01758779540657997 +glyph1Display.ShaderPreset = 'Sphere' +glyph1Display.CustomTriangleScale = 3 +glyph1Display.CustomShader = """ // This custom shader code define a gaussian blur + // Please take a look into vtkSMPointGaussianRepresentation.cxx + // for other custom shader examples + //VTK::Color::Impl + float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy); + float gaussian = exp(-0.5*dist2); + opacity = opacity*gaussian; +""" +glyph1Display.Emissive = 0 +glyph1Display.ScaleByArray = 0 +glyph1Display.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] +glyph1Display.ScaleArrayComponent = '' +glyph1Display.UseScaleFunction = 1 +glyph1Display.ScaleTransferFunction = 'PiecewiseFunction' +glyph1Display.OpacityByArray = 0 +glyph1Display.OpacityArray = ['POINTS', 'IsometryErrorFunction'] +glyph1Display.OpacityArrayComponent = '' +glyph1Display.OpacityTransferFunction = 'PiecewiseFunction' +glyph1Display.DataAxesGrid = 'GridAxesRepresentation' +glyph1Display.SelectionCellLabelBold = 0 +glyph1Display.SelectionCellLabelColor = [0.0, 1.0, 0.0] +glyph1Display.SelectionCellLabelFontFamily = 'Arial' +glyph1Display.SelectionCellLabelFontFile = '' +glyph1Display.SelectionCellLabelFontSize = 18 +glyph1Display.SelectionCellLabelItalic = 0 +glyph1Display.SelectionCellLabelJustification = 'Left' +glyph1Display.SelectionCellLabelOpacity = 1.0 +glyph1Display.SelectionCellLabelShadow = 0 +glyph1Display.SelectionPointLabelBold = 0 +glyph1Display.SelectionPointLabelColor = [1.0, 1.0, 0.0] +glyph1Display.SelectionPointLabelFontFamily = 'Arial' +glyph1Display.SelectionPointLabelFontFile = '' +glyph1Display.SelectionPointLabelFontSize = 18 +glyph1Display.SelectionPointLabelItalic = 0 +glyph1Display.SelectionPointLabelJustification = 'Left' +glyph1Display.SelectionPointLabelOpacity = 1.0 +glyph1Display.SelectionPointLabelShadow = 0 +glyph1Display.PolarAxes = 'PolarAxesRepresentation' +glyph1Display.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] +glyph1Display.NumberOfSteps = 40 +glyph1Display.StepSize = 0.25 +glyph1Display.NormalizeVectors = 1 +glyph1Display.EnhancedLIC = 1 +glyph1Display.ColorMode = 'Blend' +glyph1Display.LICIntensity = 0.8 +glyph1Display.MapModeBias = 0.0 +glyph1Display.EnhanceContrast = 'Off' +glyph1Display.LowLICContrastEnhancementFactor = 0.0 +glyph1Display.HighLICContrastEnhancementFactor = 0.0 +glyph1Display.LowColorContrastEnhancementFactor = 0.0 +glyph1Display.HighColorContrastEnhancementFactor = 0.0 +glyph1Display.AntiAlias = 0 +glyph1Display.MaskOnSurface = 1 +glyph1Display.MaskThreshold = 0.0 +glyph1Display.MaskIntensity = 0.0 +glyph1Display.MaskColor = [0.5, 0.5, 0.5] +glyph1Display.GenerateNoiseTexture = 0 +glyph1Display.NoiseType = 'Gaussian' +glyph1Display.NoiseTextureSize = 128 +glyph1Display.NoiseGrainSize = 2 +glyph1Display.MinNoiseValue = 0.0 +glyph1Display.MaxNoiseValue = 0.8 +glyph1Display.NumberOfNoiseLevels = 1024 +glyph1Display.ImpulseNoiseProbability = 1.0 +glyph1Display.ImpulseNoiseBackgroundValue = 0.0 +glyph1Display.NoiseGeneratorSeed = 1 +glyph1Display.CompositeStrategy = 'AUTO' +glyph1Display.UseLICForLOD = 0 +glyph1Display.WriteLog = '' + +# init the 'PiecewiseFunction' selected for 'OSPRayScaleFunction' +glyph1Display.OSPRayScaleFunction.Points = [0.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] +glyph1Display.OSPRayScaleFunction.UseLogScale = 0 + +# init the 'Arrow' selected for 'GlyphType' +glyph1Display.GlyphType.TipResolution = 100 +glyph1Display.GlyphType.TipRadius = 0.075 +glyph1Display.GlyphType.TipLength = 0.35 +glyph1Display.GlyphType.ShaftResolution = 100 +glyph1Display.GlyphType.ShaftRadius = 0.015 +glyph1Display.GlyphType.Invert = 0 + +# init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' +glyph1Display.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.042020171880722046, 1.0, 0.5, 0.0] +glyph1Display.ScaleTransferFunction.UseLogScale = 0 + +# init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' +glyph1Display.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.042020171880722046, 1.0, 0.5, 0.0] +glyph1Display.OpacityTransferFunction.UseLogScale = 0 + +# init the 'GridAxesRepresentation' selected for 'DataAxesGrid' +glyph1Display.DataAxesGrid.XTitle = 'X Axis' +glyph1Display.DataAxesGrid.YTitle = 'Y Axis' +glyph1Display.DataAxesGrid.ZTitle = 'Z Axis' +glyph1Display.DataAxesGrid.XTitleFontFamily = 'Arial' +glyph1Display.DataAxesGrid.XTitleFontFile = '' +glyph1Display.DataAxesGrid.XTitleBold = 0 +glyph1Display.DataAxesGrid.XTitleItalic = 0 +glyph1Display.DataAxesGrid.XTitleFontSize = 12 +glyph1Display.DataAxesGrid.XTitleShadow = 0 +glyph1Display.DataAxesGrid.XTitleOpacity = 1.0 +glyph1Display.DataAxesGrid.YTitleFontFamily = 'Arial' +glyph1Display.DataAxesGrid.YTitleFontFile = '' +glyph1Display.DataAxesGrid.YTitleBold = 0 +glyph1Display.DataAxesGrid.YTitleItalic = 0 +glyph1Display.DataAxesGrid.YTitleFontSize = 12 +glyph1Display.DataAxesGrid.YTitleShadow = 0 +glyph1Display.DataAxesGrid.YTitleOpacity = 1.0 +glyph1Display.DataAxesGrid.ZTitleFontFamily = 'Arial' +glyph1Display.DataAxesGrid.ZTitleFontFile = '' +glyph1Display.DataAxesGrid.ZTitleBold = 0 +glyph1Display.DataAxesGrid.ZTitleItalic = 0 +glyph1Display.DataAxesGrid.ZTitleFontSize = 12 +glyph1Display.DataAxesGrid.ZTitleShadow = 0 +glyph1Display.DataAxesGrid.ZTitleOpacity = 1.0 +glyph1Display.DataAxesGrid.FacesToRender = 63 +glyph1Display.DataAxesGrid.CullBackface = 0 +glyph1Display.DataAxesGrid.CullFrontface = 1 +glyph1Display.DataAxesGrid.ShowGrid = 0 +glyph1Display.DataAxesGrid.ShowEdges = 1 +glyph1Display.DataAxesGrid.ShowTicks = 1 +glyph1Display.DataAxesGrid.LabelUniqueEdgesOnly = 1 +glyph1Display.DataAxesGrid.AxesToLabel = 63 +glyph1Display.DataAxesGrid.XLabelFontFamily = 'Arial' +glyph1Display.DataAxesGrid.XLabelFontFile = '' +glyph1Display.DataAxesGrid.XLabelBold = 0 +glyph1Display.DataAxesGrid.XLabelItalic = 0 +glyph1Display.DataAxesGrid.XLabelFontSize = 12 +glyph1Display.DataAxesGrid.XLabelShadow = 0 +glyph1Display.DataAxesGrid.XLabelOpacity = 1.0 +glyph1Display.DataAxesGrid.YLabelFontFamily = 'Arial' +glyph1Display.DataAxesGrid.YLabelFontFile = '' +glyph1Display.DataAxesGrid.YLabelBold = 0 +glyph1Display.DataAxesGrid.YLabelItalic = 0 +glyph1Display.DataAxesGrid.YLabelFontSize = 12 +glyph1Display.DataAxesGrid.YLabelShadow = 0 +glyph1Display.DataAxesGrid.YLabelOpacity = 1.0 +glyph1Display.DataAxesGrid.ZLabelFontFamily = 'Arial' +glyph1Display.DataAxesGrid.ZLabelFontFile = '' +glyph1Display.DataAxesGrid.ZLabelBold = 0 +glyph1Display.DataAxesGrid.ZLabelItalic = 0 +glyph1Display.DataAxesGrid.ZLabelFontSize = 12 +glyph1Display.DataAxesGrid.ZLabelShadow = 0 +glyph1Display.DataAxesGrid.ZLabelOpacity = 1.0 +glyph1Display.DataAxesGrid.XAxisNotation = 'Mixed' +glyph1Display.DataAxesGrid.XAxisPrecision = 2 +glyph1Display.DataAxesGrid.XAxisUseCustomLabels = 0 +glyph1Display.DataAxesGrid.XAxisLabels = [] +glyph1Display.DataAxesGrid.YAxisNotation = 'Mixed' +glyph1Display.DataAxesGrid.YAxisPrecision = 2 +glyph1Display.DataAxesGrid.YAxisUseCustomLabels = 0 +glyph1Display.DataAxesGrid.YAxisLabels = [] +glyph1Display.DataAxesGrid.ZAxisNotation = 'Mixed' +glyph1Display.DataAxesGrid.ZAxisPrecision = 2 +glyph1Display.DataAxesGrid.ZAxisUseCustomLabels = 0 +glyph1Display.DataAxesGrid.ZAxisLabels = [] +glyph1Display.DataAxesGrid.UseCustomBounds = 0 +glyph1Display.DataAxesGrid.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + +# init the 'PolarAxesRepresentation' selected for 'PolarAxes' +glyph1Display.PolarAxes.Visibility = 0 +glyph1Display.PolarAxes.Translation = [0.0, 0.0, 0.0] +glyph1Display.PolarAxes.Scale = [1.0, 1.0, 1.0] +glyph1Display.PolarAxes.Orientation = [0.0, 0.0, 0.0] +glyph1Display.PolarAxes.EnableCustomBounds = [0, 0, 0] +glyph1Display.PolarAxes.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] +glyph1Display.PolarAxes.EnableCustomRange = 0 +glyph1Display.PolarAxes.CustomRange = [0.0, 1.0] +glyph1Display.PolarAxes.PolarAxisVisibility = 1 +glyph1Display.PolarAxes.RadialAxesVisibility = 1 +glyph1Display.PolarAxes.DrawRadialGridlines = 1 +glyph1Display.PolarAxes.PolarArcsVisibility = 1 +glyph1Display.PolarAxes.DrawPolarArcsGridlines = 1 +glyph1Display.PolarAxes.NumberOfRadialAxes = 0 +glyph1Display.PolarAxes.AutoSubdividePolarAxis = 1 +glyph1Display.PolarAxes.NumberOfPolarAxis = 0 +glyph1Display.PolarAxes.MinimumRadius = 0.0 +glyph1Display.PolarAxes.MinimumAngle = 0.0 +glyph1Display.PolarAxes.MaximumAngle = 90.0 +glyph1Display.PolarAxes.RadialAxesOriginToPolarAxis = 1 +glyph1Display.PolarAxes.Ratio = 1.0 +glyph1Display.PolarAxes.PolarAxisColor = [1.0, 1.0, 1.0] +glyph1Display.PolarAxes.PolarArcsColor = [1.0, 1.0, 1.0] +glyph1Display.PolarAxes.LastRadialAxisColor = [1.0, 1.0, 1.0] +glyph1Display.PolarAxes.SecondaryPolarArcsColor = [1.0, 1.0, 1.0] +glyph1Display.PolarAxes.SecondaryRadialAxesColor = [1.0, 1.0, 1.0] +glyph1Display.PolarAxes.PolarAxisTitleVisibility = 1 +glyph1Display.PolarAxes.PolarAxisTitle = 'Radial Distance' +glyph1Display.PolarAxes.PolarAxisTitleLocation = 'Bottom' +glyph1Display.PolarAxes.PolarLabelVisibility = 1 +glyph1Display.PolarAxes.PolarLabelFormat = '%-#6.3g' +glyph1Display.PolarAxes.PolarLabelExponentLocation = 'Labels' +glyph1Display.PolarAxes.RadialLabelVisibility = 1 +glyph1Display.PolarAxes.RadialLabelFormat = '%-#3.1f' +glyph1Display.PolarAxes.RadialLabelLocation = 'Bottom' +glyph1Display.PolarAxes.RadialUnitsVisibility = 1 +glyph1Display.PolarAxes.ScreenSize = 10.0 +glyph1Display.PolarAxes.PolarAxisTitleOpacity = 1.0 +glyph1Display.PolarAxes.PolarAxisTitleFontFamily = 'Arial' +glyph1Display.PolarAxes.PolarAxisTitleFontFile = '' +glyph1Display.PolarAxes.PolarAxisTitleBold = 0 +glyph1Display.PolarAxes.PolarAxisTitleItalic = 0 +glyph1Display.PolarAxes.PolarAxisTitleShadow = 0 +glyph1Display.PolarAxes.PolarAxisTitleFontSize = 12 +glyph1Display.PolarAxes.PolarAxisLabelOpacity = 1.0 +glyph1Display.PolarAxes.PolarAxisLabelFontFamily = 'Arial' +glyph1Display.PolarAxes.PolarAxisLabelFontFile = '' +glyph1Display.PolarAxes.PolarAxisLabelBold = 0 +glyph1Display.PolarAxes.PolarAxisLabelItalic = 0 +glyph1Display.PolarAxes.PolarAxisLabelShadow = 0 +glyph1Display.PolarAxes.PolarAxisLabelFontSize = 12 +glyph1Display.PolarAxes.LastRadialAxisTextOpacity = 1.0 +glyph1Display.PolarAxes.LastRadialAxisTextFontFamily = 'Arial' +glyph1Display.PolarAxes.LastRadialAxisTextFontFile = '' +glyph1Display.PolarAxes.LastRadialAxisTextBold = 0 +glyph1Display.PolarAxes.LastRadialAxisTextItalic = 0 +glyph1Display.PolarAxes.LastRadialAxisTextShadow = 0 +glyph1Display.PolarAxes.LastRadialAxisTextFontSize = 12 +glyph1Display.PolarAxes.SecondaryRadialAxesTextOpacity = 1.0 +glyph1Display.PolarAxes.SecondaryRadialAxesTextFontFamily = 'Arial' +glyph1Display.PolarAxes.SecondaryRadialAxesTextFontFile = '' +glyph1Display.PolarAxes.SecondaryRadialAxesTextBold = 0 +glyph1Display.PolarAxes.SecondaryRadialAxesTextItalic = 0 +glyph1Display.PolarAxes.SecondaryRadialAxesTextShadow = 0 +glyph1Display.PolarAxes.SecondaryRadialAxesTextFontSize = 12 +glyph1Display.PolarAxes.EnableDistanceLOD = 1 +glyph1Display.PolarAxes.DistanceLODThreshold = 0.7 +glyph1Display.PolarAxes.EnableViewAngleLOD = 1 +glyph1Display.PolarAxes.ViewAngleLODThreshold = 0.7 +glyph1Display.PolarAxes.SmallestVisiblePolarAngle = 0.5 +glyph1Display.PolarAxes.PolarTicksVisibility = 1 +glyph1Display.PolarAxes.ArcTicksOriginToPolarAxis = 1 +glyph1Display.PolarAxes.TickLocation = 'Both' +glyph1Display.PolarAxes.AxisTickVisibility = 1 +glyph1Display.PolarAxes.AxisMinorTickVisibility = 0 +glyph1Display.PolarAxes.ArcTickVisibility = 1 +glyph1Display.PolarAxes.ArcMinorTickVisibility = 0 +glyph1Display.PolarAxes.DeltaAngleMajor = 10.0 +glyph1Display.PolarAxes.DeltaAngleMinor = 5.0 +glyph1Display.PolarAxes.PolarAxisMajorTickSize = 0.0 +glyph1Display.PolarAxes.PolarAxisTickRatioSize = 0.3 +glyph1Display.PolarAxes.PolarAxisMajorTickThickness = 1.0 +glyph1Display.PolarAxes.PolarAxisTickRatioThickness = 0.5 +glyph1Display.PolarAxes.LastRadialAxisMajorTickSize = 0.0 +glyph1Display.PolarAxes.LastRadialAxisTickRatioSize = 0.3 +glyph1Display.PolarAxes.LastRadialAxisMajorTickThickness = 1.0 +glyph1Display.PolarAxes.LastRadialAxisTickRatioThickness = 0.5 +glyph1Display.PolarAxes.ArcMajorTickSize = 0.0 +glyph1Display.PolarAxes.ArcTickRatioSize = 0.3 +glyph1Display.PolarAxes.ArcMajorTickThickness = 1.0 +glyph1Display.PolarAxes.ArcTickRatioThickness = 0.5 +glyph1Display.PolarAxes.Use2DMode = 0 +glyph1Display.PolarAxes.UseLogAxis = 0 + +# show color bar/color legend +glyph1Display.SetScalarBarVisibility(renderView1, True) + +# find source +buckling_experiment_rho10_level3_NCvtu = FindSource('buckling_experiment_rho10_level3_NC.vtu') + +# find source +box2 = FindSource('Box2') + +# update the view to ensure updated data information +renderView1.Update() + +# get opacity transfer function/opacity map for 'IsometryErrorFunction' +isometryErrorFunctionPWF = GetOpacityTransferFunction('IsometryErrorFunction') +isometryErrorFunctionPWF.Points = [0.0, 0.0, 0.5, 0.0, 0.043813616037368774, 1.0, 0.5, 0.0] +isometryErrorFunctionPWF.AllowDuplicateScalars = 1 +isometryErrorFunctionPWF.UseLogScale = 0 +isometryErrorFunctionPWF.ScalarRangeInitialized = 1 + +# update the view to ensure updated data information +renderView1.Update() + +# Properties modified on glyph1 +glyph1.GlyphMode = 'Every Nth Point' +glyph1.Stride = 15 + +# update the view to ensure updated data information +renderView1.Update() + +# turn off scalar coloring +ColorBy(glyph1Display, None) + +# Hide the scalar bar for this color map if no visible data is colored by it. +HideScalarBarIfNotNeeded(isometryErrorFunctionLUT, renderView1) + +# change solid color +glyph1Display.AmbientColor = [0.0, 0.0, 0.0] +glyph1Display.DiffuseColor = [0.0, 0.0, 0.0] + +# Properties modified on glyph1Display +glyph1Display.Opacity = 0.75 + +# Properties modified on glyph1Display +glyph1Display.Opacity = 0.25 + +# Properties modified on glyph1Display +glyph1Display.Opacity = 0.5 + +# # Properties modified on glyph1Display +# glyph1Display.Opacity = 1.0 + +############################### + + + + +### Nice Camera Angle: +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995387, -6.373117888516298, 3.0455402693025477] +renderView1.CameraFocalPoint = [1.7499999999999973, 0.49948221910744894, 0.03305599093437161] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.4285092855481871 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995387, -6.373117888516298, 3.0455402693025477] +renderView1.CameraFocalPoint = [1.7499999999999973, 0.49948221910744894, 0.03305599093437161] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.4285092855481871 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995387, -6.373117888516298, 3.0455402693025477] +renderView1.CameraFocalPoint = [1.7499999999999973, 0.49948221910744894, 0.03305599093437161] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.4285092855481871 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995387, -6.373117888516298, 3.0455402693025477] +renderView1.CameraFocalPoint = [1.7499999999999973, 0.49948221910744894, 0.03305599093437161] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.4285092855481871 + +# reset view to fit data +renderView1.ResetCamera(True) +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 + +# reset view to fit data bounds +renderView1.ResetCamera(-0.0070663392543792725, 3.507066249847412, -0.020176716148853302, 1.0201082229614258, -0.879596471786499, 0.0999700278043747, False) +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-0.9127173710767202, -5.7533624403677806, 2.3512240239158935] +renderView1.CameraFocalPoint = [1.7499999552965164, 0.49996575340628624, -0.38981322199106216] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.8967650839948296 + +# reset view to fit data +renderView1.ResetCamera(True) +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 + +# reset view to fit data bounds +renderView1.ResetCamera(-0.0070663392543792725, 3.507066249847412, -0.020176716148853302, 1.0201082229614258, -0.879596471786499, 0.0999700278043747, True) +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-0.9127173710767202, -5.7533624403677806, 2.3512240239158935] +renderView1.CameraFocalPoint = [1.7499999552965164, 0.49996575340628624, -0.38981322199106216] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 0.9539530708784568 + +# reset view to fit data +renderView1.ResetCamera(True) +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 + + + +# Replace colormap by solid color and use LIGHTING View +# set active source +SetActiveSource(warpByVector1) + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 + +# get 2D transfer function for 'DisplacementduneVTK' +displacementduneVTKTF2D = GetTransferFunction2D('DisplacementduneVTK') +displacementduneVTKTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +displacementduneVTKTF2D.Boxes = [] +displacementduneVTKTF2D.ScalarRangeInitialized = 0 +displacementduneVTKTF2D.Range = [0.0, 1.0, 0.0, 1.0] +displacementduneVTKTF2D.OutputDimensions = [10, 10] + +# get color transfer function/color map for 'DisplacementduneVTK' +displacementduneVTKLUT = GetColorTransferFunction('DisplacementduneVTK') +displacementduneVTKLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +displacementduneVTKLUT.InterpretValuesAsCategories = 0 +displacementduneVTKLUT.AnnotationsInitialized = 0 +displacementduneVTKLUT.ShowCategoricalColorsinDataRangeOnly = 0 +displacementduneVTKLUT.RescaleOnVisibilityChange = 0 +displacementduneVTKLUT.EnableOpacityMapping = 0 +displacementduneVTKLUT.TransferFunction2D = displacementduneVTKTF2D +displacementduneVTKLUT.Use2DTransferFunction = 0 +displacementduneVTKLUT.RGBPoints = [0.0, 0.0, 0.266667, 0.105882, 0.05572199061665925, 0.0, 0.347374, 0.139346, 0.1114439812333185, 0.000538, 0.427912, 0.172933, 0.1671664158852843, 0.069435, 0.486967, 0.222145, 0.22288840650194355, 0.138178, 0.546082, 0.271326, 0.2786103971186028, 0.197232, 0.609073, 0.31857, 0.334332387735262, 0.257255, 0.671742, 0.365859, 0.3900543783519213, 0.357647, 0.720953, 0.415071, 0.4457766220687053, 0.45767, 0.769919, 0.465021, 0.5014988036205464, 0.546251, 0.811257, 0.537855, 0.5572207942372056, 0.634295, 0.852211, 0.610688, 0.6129427848538649, 0.709097, 0.883706, 0.683522, 0.6686647754705242, 0.78316, 0.914833, 0.755894, 0.7243872101224899, 0.842215, 0.938454, 0.818885, 0.7801092007391492, 0.899977, 0.961538, 0.880692, 0.8358311913558085, 0.935409, 0.975317, 0.92203, 0.8880706130633398, 0.968627, 0.988235, 0.960784] +displacementduneVTKLUT.UseLogScale = 0 +displacementduneVTKLUT.UseOpacityControlPointsFreehandDrawing = 0 +displacementduneVTKLUT.ShowDataHistogram = 0 +displacementduneVTKLUT.AutomaticDataHistogramComputation = 0 +displacementduneVTKLUT.DataHistogramNumberOfBins = 10 +displacementduneVTKLUT.ColorSpace = 'Lab' +displacementduneVTKLUT.UseBelowRangeColor = 0 +displacementduneVTKLUT.BelowRangeColor = [0.0, 0.0, 0.0] +displacementduneVTKLUT.UseAboveRangeColor = 0 +displacementduneVTKLUT.AboveRangeColor = [0.5, 0.5, 0.5] +displacementduneVTKLUT.NanColor = [1.0, 1.0, 0.0] +displacementduneVTKLUT.NanOpacity = 1.0 +displacementduneVTKLUT.Discretize = 1 +displacementduneVTKLUT.NumberOfTableValues = 256 +displacementduneVTKLUT.ScalarRangeInitialized = 1.0 +displacementduneVTKLUT.HSVWrap = 0 +displacementduneVTKLUT.VectorComponent = 0 +displacementduneVTKLUT.VectorMode = 'Magnitude' +displacementduneVTKLUT.AllowDuplicateScalars = 1 +displacementduneVTKLUT.Annotations = [] +displacementduneVTKLUT.ActiveAnnotatedValues = [] +displacementduneVTKLUT.IndexedColors = [] +displacementduneVTKLUT.IndexedOpacities = [] + +# get opacity transfer function/opacity map for 'DisplacementduneVTK' +displacementduneVTKPWF = GetOpacityTransferFunction('DisplacementduneVTK') +displacementduneVTKPWF.Points = [0.0, 0.0, 0.5, 0.0, 0.8880706130633398, 1.0, 0.5, 0.0] +displacementduneVTKPWF.AllowDuplicateScalars = 1 +displacementduneVTKPWF.UseLogScale = 0 +displacementduneVTKPWF.ScalarRangeInitialized = 1 + +# get display properties +warpByVector1Display = GetDisplayProperties(warpByVector1, view=renderView1) +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 + +# turn off scalar coloring +ColorBy(warpByVector1Display, None) + +# Hide the scalar bar for this color map if no visible data is colored by it. +HideScalarBarIfNotNeeded(displacementduneVTKLUT, renderView1) +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 + +# change solid color +warpByVector1Display.AmbientColor = [0.2901960784313726, 0.5843137254901961, 0.43137254901960786] +warpByVector1Display.DiffuseColor = [0.2901960784313726, 0.5843137254901961, 0.43137254901960786] +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 + +# Properties modified on warpByVector1Display +warpByVector1Display.Ambient = 0.2 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 + +# Properties modified on warpByVector1Display +warpByVector1Display.Ambient = 0.15 +warpByVector1Display.Ambient = 0.3 +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 + +# change solid color +warpByVector1Display.AmbientColor = [0.3254901960784314, 0.6549019607843137, 0.47843137254901963] +warpByVector1Display.DiffuseColor = [0.3254901960784314, 0.6549019607843137, 0.47843137254901963] +# Adjust camera + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 + + + + +renderView1.UseLight = 0 +# Create a new 'Light' +light1 = AddLight(view=renderView1) +light1.Enable = 1 +light1.Coords = 'Scene' +light1.Intensity = 1.0 +light1.Type = 'Directional' +light1.Position = [0.0, 0.0, 1.0] +light1.FocalPoint = [0.0, 0.0, 0.0] +light1.DiffuseColor = [1.0, 1.0, 1.0] +light1.ConeAngle = 30.0 +light1.Radius = 0.0 + +# toggle interactive widget visibility (only when running from the GUI) +ShowInteractiveWidgets(proxy=light1) + +#update a light +light1.Position = [-0.9716648057044535, -5.891721101441701, 3.2497098661047565] +light1.FocalPoint = [1.75, 0.5000438429415226, 0.44799128733575344] + +#update a light +light1.Position = [-0.9716648057044535, -5.891721101441701, 3.2497098661047565] +light1.FocalPoint = [1.75, 0.5000438429415226, 0.44799128733575344] + +# Properties modified on light1 +light1.Type = 'Positional' + +# Properties modified on light1 +light1.Intensity = 1.75 + +# Properties modified on light1 +light1.Position = [2.5, -5.891721101441701, 3.2497098661047565] + +# Properties modified on light1 +light1.Position = [2.5, 10.0, 3.2497098661047565] + +# Properties modified on light1 +# light1.Position = [2.5, 10.0, 7.0] +light1.Position = [5, 12, 8.5] + +# Properties modified on light1 +light1.FocalPoint = [0.75, 0.5000438429415226, 0.44799128733575344] + +# Properties modified on light1 +light1.FocalPoint = [0.75, 0.768, 0.44799128733575344] + +# Properties modified on light1 +light1.FocalPoint = [0.75, 0.768, 0.5] + +#================================================================ +# addendum: following script captures some of the application +# state to faithfully reproduce the visualization during playback +#================================================================ + +# # get layout +# layout1 = GetLayout() + +# #-------------------------------- +# # saving layout sizes for layouts + +# # layout/tab size in pixels +# layout1.SetSize(850, 750) +##################################################################### + + + + + + + + + + + +#================================================================ +# addendum: following script captures some of the application +# state to faithfully reproduce the visualization during playback +#================================================================ + +# get layout +layout1 = GetLayout() + +#-------------------------------- +# saving layout sizes for layouts + +# layout/tab size in pixels +layout1.SetSize(2923, 908) + +#----------------------------------- +# saving camera placements for views + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +renderView1.CameraParallelScale = 1.3953474628479614 + + + +# reset view to fit data +renderView1.ResetCamera(True) +# -------------------------------------------------------------- + + +# #TEST:Set Size in Pixels: +# # layout/tab size in pixels +# layout1.SetSize(850, 750) +# reset view to fit data +renderView1.ResetCamera(True) + +# layout1.SetSize(2560, 1440) +layout1.SetSize(2257, 1395) +# layout1.SetSize(4514, 2790) +# layout1.SetSize(4514, 4514) + +# reset view to fit data +renderView1.ResetCamera(True) + + + +# Write to pdf +# ExportView(outputName + '.pdf', view=renderView1) + +ExportView(outputName + '.pdf', view=renderView1, Plottitle='ParaView GL2PS Export', + Compressoutputfile=0, + Drawbackground=1, + Cullhiddenprimitives=1, + Linewidthscalingfactor=0.714, + Pointsizescalingfactor=0.714, + GL2PSdepthsortmethod='Simple sorting (fast, good)', + Rasterize3Dgeometry=1, + Dontrasterizecubeaxes=1, + Rendertextaspaths=1) + + +# # get layout +layout1 = GetLayout() + +# layout1.SetSize(850, 750) +layout1.SetSize(2257, 1395) +# layout1.SetSize(4514, 4514) + + + +# # get active view +# renderView1 = GetActiveViewOrCreate('RenderView') + +# # get layout +# layout1 = GetLayout() + +# # layout/tab size in pixels +# layout1.SetSize(2922, 908) + +# # current camera placement for renderView1 +# renderView1.InteractionMode = '2D' +# renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] +# renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] +# renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] +# renderView1.CameraParallelScale = 1.3953474628479614 + +# save screenshot +SaveScreenshot(outputName + '.png', renderView1, ImageResolution=[5844, 1816], + FontScaling='Scale fonts proportionally', + OverrideColorPalette='WhiteBackground', + StereoMode='No change', + TransparentBackground=0, + # PNG options + CompressionLevel='5', + MetaData=['Application', 'ParaView']) + +# SaveScreenshot(outputName + '.png', renderView1, ImageResolution=[1500, 1240], +# FontScaling='Scale fonts proportionally', +# OverrideColorPalette='WhiteBackground', +# StereoMode='No change', +# TransparentBackground=0, +# # PNG options +# CompressionLevel='5', +# MetaData=['Application', 'ParaView']) + + +# # export view +# ExportView('/home/klaus/Desktop/output.pdf', view=renderView1, Plottitle='ParaView GL2PS Export', +# Compressoutputfile=0, +# Drawbackground=1, +# Cullhiddenprimitives=1, +# Linewidthscalingfactor=0.714, +# Pointsizescalingfactor=0.714, +# GL2PSdepthsortmethod='Simple sorting (fast, good)', +# Rasterize3Dgeometry=1, +# Dontrasterizecubeaxes=1, +# Rendertextaspaths=1) + +#================================================================ +# addendum: following script captures some of the application +# state to faithfully reproduce the visualization during playback +#================================================================ + +# # get layout +# layout1 = GetLayout() + +# #-------------------------------- +# # saving layout sizes for layouts + +# # layout/tab size in pixels +# layout1.SetSize(2923, 908) + +# #----------------------------------- +# # saving camera placements for views + +# # current camera placement for renderView1 +# renderView1.CameraPosition = [6.037484195894283, 4.7874841893168165, 4.688562068036481] +# renderView1.CameraFocalPoint = [1.75, 0.4999999934225343, 0.4010778721421957] +# renderView1.CameraViewUp = [-0.7071067811865478, 8.326672684688675e-17, 0.7071067811865474] +# renderView1.CameraParallelScale = 1.922026583673492 + +#-------------------------------------------- +# uncomment the following to render all views +# RenderAllViews() +# alternatively, if you want to write images, you can use SaveScreenshot(...). \ No newline at end of file diff --git a/experiment/macro-problem/buckling_experiment/buckling_experiment.py b/experiment/macro-problem/buckling_experiment/buckling_experiment.py index 4686e42cbf3de28da8ac993772bc81763dd4c2f7..4f21698710221c5d3112e83a064f1f24a660cff1 100644 --- a/experiment/macro-problem/buckling_experiment/buckling_experiment.py +++ b/experiment/macro-problem/buckling_experiment/buckling_experiment.py @@ -21,18 +21,29 @@ parameterSet = ParameterSet() parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/outputs_buckling_experiment' parameterSet.baseName= 'buckling_experiment' + + +""" + ----- MACRO-PROBLEM PARAMETERS: ----- +""" + ############################################# -# Grid parameters +# Macro-Grid parameters ############################################# +# nX=8 +# nY=8 +# nX=4 +# nY=4 nX=8 -nY=8 +nY=2 + parameterSet.structuredGrid = 'simplex' parameterSet.lower = '0 0' parameterSet.upper = '4 1' parameterSet.elements = str(nX)+' '+ str(nY) -parameterSet.macroGridLevel = 3 +parameterSet.macroGridLevel = 1 parameterSet.macroQuadOrder = 6 @@ -61,6 +72,8 @@ parameterSet.initialRegularization = 2000 # Measure convergence parameterSet.instrumented = 0 +# parameterSet.regularizationNorm = 'Euclidean' +parameterSet.regularizationNorm = 'H1semi' # --- (optional) Riemannian Trust-region solver: @@ -99,8 +112,8 @@ parameterSet.writeVTK = 1 parameterSet.vtkwrite_analyticalSolution = 0 parameterSet.vtkWrite_analyticalSurfaceNormal = 0 -# The grid can be refined several times for a higher resolution in the VTK-file. -parameterSet.subsamplingRefinement = 2 +# # The grid can be refined several times for a higher resolution in the VTK-file. +# parameterSet.subsamplingRefinement = 2 # Write Dof-Vector to .txt-file parameterSet.writeDOFvector = 0 @@ -152,13 +165,6 @@ def dirichlet_indicator(x) : ############################################# # Initial iterate function ############################################# -# def f(x): -# return [x[0], x[1], 0] - -# def df(x): -# return ((1,0), -# (0,1), -# (0,0)) #Rotation: def R(beta): return [[math.cos(beta),0], @@ -176,8 +182,9 @@ def f(x): return [x[0], x[1], 0] +### Rotation angle (boundary condition). # beta = math.pi/4.0 -beta= 0.05 +beta= 0.025 # beta= math.pi/12.0 # beta= 0.10 # beta = 0 @@ -198,22 +205,6 @@ def df(x): -# def f(x): -# # a = 0.4 -# a = 1.4 -# if(x[0] <= -1.99): -# return [x[0] + a, x[1], 0] -# elif(x[0] >= 1.99): -# return [x[0] - a, x[1], 0] -# else: -# return [x[0], x[1], 0] - - -# def df(x): -# return ((1,0), -# (0,1), -# (0,0)) - fdf = (f, df) @@ -226,8 +217,6 @@ parameterSet.assemble_force_term = False def force(x): return [0, 0, 0] - - ############################################# # Analytical reference Solution ############################################# @@ -236,9 +225,6 @@ def force(x): ############################################# # MICROSTRUCTURE ############################################ - - -parameterSet.printMicroOutput = False parameterSet.VTKwriteMacroPhaseIndicator = True parameterSet.MacroPhaseSubsamplingRefinement = 3 @@ -279,19 +265,30 @@ class GlobalMicrostructure: # Represents the local microstructure in Phase 1 class LocalMicrostructure_1: + + # prestrain parameter + rho = 0.0 + def __init__(self,macroPoint=[0,0]): # gamma = 1.0 # self.macroPoint = macroPoint self.gamma = 1.0 #in the future this might change depending on macroPoint. - self.phases = 2 #in the future this might change depending on macroPoint. #--- Define different material phases: + # #- PHASE 1 + # self.phase1_type="isotropic" + # self.materialParameters_phase1 = [200, 1.0] + # #- PHASE 2 + # self.phase2_type="isotropic" + # self.materialParameters_phase2 = [100, 1.0] + #- PHASE 1 self.phase1_type="isotropic" - self.materialParameters_phase1 = [200, 1.0] + self.materialParameters_phase1 = [28.7,22.5] # glass (Fibre) + #- PHASE 2 - self.phase2_type="isotropic" - self.materialParameters_phase2 = [100, 1.0] + self.phase2_type="isotropic" + self.materialParameters_phase2 = [1.2,2.58] #Matrix-material: polystyrene # self.effectivePrestrain= np.array([[-0.725, 0.0], # [0.0, -1.0]]); @@ -300,68 +297,118 @@ class GlobalMicrostructure: # [0.8, 20.3, 0.0], # [0.0, 0.0, 19.3]]); - #--- Indicator function for material phases def indicatorFunction(self,x): - # if (abs(x[0]) < (theta/2) and x[2] >= 0 ): - if (abs(x[0]) < (1.0/4.0) and x[2] <= 0 ): + fibreRadius = (1.0/4.0) + # if (abs(x[0]) < fibreRadius and x[2] <= 0 ): #bottom x2_aligned fibre + # if (abs(x[0]) < fibreRadius and x[2] >= 0 ): #top x2_aligned fibre + if (abs(x[1]) < fibreRadius and x[2] >= 0 ): #top x1_aligned fibre + # if (abs(x[1]) < fibreRadius and x[2] <= 0 ): #bottom x1_aligned fibre + # if (abs(x[1]) < fibreRadius and x[2] >= 0 ): #top x1_aligned fibre return 1 #Phase1 else : return 2 #Phase2 #--- Define prestrain function for each phase (also works with non-constant values) def prestrain_phase1(self,x): - # return [[2, 0, 0], [0,2,0], [0,0,2]] - # rho = 1.0 - rho = 1.0 - return [[rho*1.0, 0, 0], [0,rho*1.0,0], [0,0,rho*1.0]] + return [[self.rho*1.0, 0, 0], [0,self.rho*1.0,0], [0,0,self.rho*1.0]] def prestrain_phase2(self,x): return [[0, 0, 0], [0,0,0], [0,0,0]] + + + #TEST: Use three-phase-composite: + # class LocalMicrostructure_1: + # def __init__(self,macroPoint=[0,0]): + + # self.gamma = 1.0 #in the future this might change depending on macroPoint. + # self.phases = 3 #in the future this might change depending on macroPoint. + # #--- Define different material phases: + # #- PHASE 1 + # self.phase1_type="isotropic" + # self.materialParameters_phase1 = [200, 1.0] + # #- PHASE 2 + # self.phase2_type="isotropic" + # self.materialParameters_phase2 = [200, 1.0] + # #- PHASE 3 + # self.phase3_type="isotropic" + # # self.materialParameters_phase3 = [100, 1.0] #(Matrix-material) + # self.materialParameters_phase3 = [50, 0.5] #(Matrix-material) + + # #--- Three-phase composite phase indicator + # def indicatorFunction(self,x): + # # l = 1.0/4.0 # center point of fibre with quadratic cross section of area r**2 + # # # l = 3.0/8.0 # center point of fibre with quadratic cross section of area r**2 + # # r = 1.0/4.0 + # # if (np.max([abs(x[2]-l), abs(x[1]-0.5)]) < r): + # fibreRadius = 1.0/4.0 + # if (abs(x[0]) < fibreRadius and x[2] > 0 ): + # return 1 #Phase1 + # elif (abs(x[1]) < fibreRadius and x[2] < 0 ): + # return 2 #Phase2 + # else : + # return 3 #Phase3 + + # # prestrained fibre in top layer , e2-aligned + # def prestrain_phase1(self,x): + # return [[1.0, 0, 0], [0,1.0,0], [0,0,1.0]] + + # # prestrained fibre in bottom layer , e1-aligned + # def prestrain_phase2(self,x): + # #prestrain ratio + # rho = 0.0 + # return [[rho*1.0, 0, 0], [0,rho*1.0,0], [0,0,rho*1.0]] + + # # no prestrain in matrix-material + # def prestrain_phase3(self,x): + # return [[0, 0, 0], [0,0,0], [0,0,0]] + + + +""" + ----- MICRO-PROBLEM PARAMETERS: ----- +""" + +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + ############################################# -# Grid parameters +# Micro-Grid parameters ############################################# parameterSet.microGridLevel = 3 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) ############################################# # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: -parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition +parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) parameterSet.MaterialSubsamplingRefinement= 2 - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - -parameterSet.print_corrector_matrices = 0 - # --- Write Correctos to VTK-File: parameterSet.writeCorrectorsVTK = 1 - -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 - -# --- write effective quantities (Qhom,Beff) to .txt-files -# Qhom is written as a Coefficient-matrix -# Beff is written as Coefficient-vector +# --- write effective quantities (Qhom.Beff) to .txt-files parameterSet.write_EffectiveQuantitiesToTxt = True + +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/experiment/macro-problem/buckling_experiment/buckling_experiment_Top.py b/experiment/macro-problem/buckling_experiment/buckling_experiment_Top.py index 845c02a0967a46b7a7223c0821bb129df67bbd56..1fb45bd8b46713ffe3f63f16d57b7c556efbdfe3 100644 --- a/experiment/macro-problem/buckling_experiment/buckling_experiment_Top.py +++ b/experiment/macro-problem/buckling_experiment/buckling_experiment_Top.py @@ -122,8 +122,6 @@ parameterSet.macroscopically_varying_microstructure = False parameterSet.read_effectiveQuantities_from_Parset = False # Otherwise the Micro/Cell-Problem is solved once to obtain the quantities. # parameterSet.read_effectiveQuantities_from_Parset = True # Otherwise the Micro/Cell-Problem is solved once to obtain the quantities. -parameterSet.printMicroOutput = False - # parameterSet.read_effectiveQuantities_from_Parset = True effectivePrestrain= np.array([[-0.725, 0.0], [0.0, -1.0]]); @@ -230,9 +228,7 @@ def force(x): ##################### MICROSCALE PROBLEM #################### - # Microstructure used: Isotropic matrix material (phase 2) with prestrained fibers (phase 1) in the top layer aligned with the e2-direction. - class Microstructure: def __init__(self): # self.macroPoint = macroPoint @@ -313,6 +309,7 @@ class Microstructure: # return [[0, 0, 0], [0,0,0], [0,0,0]] +parameterSet.printMicroOutput = 0 # Flag that allows to supress the output of the micro-problem. ############################################# # Grid parameters @@ -322,36 +319,35 @@ parameterSet.microGridLevel = 3 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) ############################################# # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: -parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition +parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) parameterSet.MaterialSubsamplingRefinement= 2 - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - -parameterSet.print_corrector_matrices = 0 - # --- Write Correctos to VTK-File: parameterSet.writeCorrectorsVTK = 1 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = True -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/experiment/macro-problem/buckling_experiment/buckling_experiment_rho_0.py b/experiment/macro-problem/buckling_experiment/buckling_experiment_rho_0.py new file mode 100644 index 0000000000000000000000000000000000000000..b6795df7e2ca9d48d02e4fdf3d8dd19797297a44 --- /dev/null +++ b/experiment/macro-problem/buckling_experiment/buckling_experiment_rho_0.py @@ -0,0 +1,5 @@ +from buckling_experiment import* + + +# Change parameter +GlobalMicrostructure.LocalMicrostructure_1.rho = 0.0 \ No newline at end of file diff --git a/experiment/macro-problem/buckling_experiment/buckling_experiment_rho_1.py b/experiment/macro-problem/buckling_experiment/buckling_experiment_rho_1.py new file mode 100644 index 0000000000000000000000000000000000000000..efab639c1b0ee5ea5320748caf24893074966dde --- /dev/null +++ b/experiment/macro-problem/buckling_experiment/buckling_experiment_rho_1.py @@ -0,0 +1,4 @@ +from buckling_experiment import* + +# Change parameter +GlobalMicrostructure.LocalMicrostructure_1.rho = 1.0 \ No newline at end of file diff --git a/experiment/macro-problem/buckling_experiment/buckling_experiment_xAlignedLow.py b/experiment/macro-problem/buckling_experiment/buckling_experiment_xAlignedLow.py index 24db5dad9a647c59b48c8b8bdc4d91ed0c961ae7..acec0ac7cffc1171284e109b88fc19111a7e0f5d 100644 --- a/experiment/macro-problem/buckling_experiment/buckling_experiment_xAlignedLow.py +++ b/experiment/macro-problem/buckling_experiment/buckling_experiment_xAlignedLow.py @@ -122,7 +122,6 @@ parameterSet.macroscopically_varying_microstructure = False parameterSet.read_effectiveQuantities_from_Parset = False # Otherwise the Micro/Cell-Problem is solved once to obtain the quantities. # parameterSet.read_effectiveQuantities_from_Parset = True # Otherwise the Micro/Cell-Problem is solved once to obtain the quantities. -parameterSet.printMicroOutput = False # parameterSet.read_effectiveQuantities_from_Parset = True effectivePrestrain= np.array([[-0.725, 0.0], @@ -315,6 +314,8 @@ class Microstructure: +parameterSet.printMicroOutput = 0 # Flag that allows to supress the output of the micro-problem. + ############################################# # Grid parameters ############################################# @@ -323,36 +324,35 @@ parameterSet.microGridLevel = 3 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) ############################################# # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: -parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition +parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) parameterSet.MaterialSubsamplingRefinement= 2 - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - -parameterSet.print_corrector_matrices = 0 - # --- Write Correctos to VTK-File: parameterSet.writeCorrectorsVTK = 1 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = True -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. \ No newline at end of file diff --git a/experiment/macro-problem/buckling_experiment/buckling_experiment_xAlignedTop.py b/experiment/macro-problem/buckling_experiment/buckling_experiment_xAlignedTop.py index 2ce12efdb4069d2cd5f49474bc75d07f45c1b816..5080cbbbbec8b4192fceb7ad0c069c565d43fa1a 100644 --- a/experiment/macro-problem/buckling_experiment/buckling_experiment_xAlignedTop.py +++ b/experiment/macro-problem/buckling_experiment/buckling_experiment_xAlignedTop.py @@ -122,8 +122,6 @@ parameterSet.macroscopically_varying_microstructure = False parameterSet.read_effectiveQuantities_from_Parset = False # Otherwise the Micro/Cell-Problem is solved once to obtain the quantities. # parameterSet.read_effectiveQuantities_from_Parset = True # Otherwise the Micro/Cell-Problem is solved once to obtain the quantities. -parameterSet.printMicroOutput = False - # parameterSet.read_effectiveQuantities_from_Parset = True effectivePrestrain= np.array([[-0.725, 0.0], [0.0, -1.0]]); @@ -314,6 +312,7 @@ class Microstructure: # return [[0, 0, 0], [0,0,0], [0,0,0]] +parameterSet.printMicroOutput = 0 # Flag that allows to supress the output of the micro-problem. ############################################# # Grid parameters @@ -323,36 +322,35 @@ parameterSet.microGridLevel = 3 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) ############################################# # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: -parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition +parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) parameterSet.MaterialSubsamplingRefinement= 2 - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - -parameterSet.print_corrector_matrices = 0 - # --- Write Correctos to VTK-File: parameterSet.writeCorrectorsVTK = 1 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = True -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. \ No newline at end of file diff --git a/experiment/macro-problem/fibreRotation.py b/experiment/macro-problem/fibreRotation.py new file mode 100644 index 0000000000000000000000000000000000000000..60f06e004e123849586465050221b58c89c4550f --- /dev/null +++ b/experiment/macro-problem/fibreRotation.py @@ -0,0 +1,321 @@ +import math +import numpy as np + +class ParameterSet(dict): + def __init__(self, *args, **kwargs): + super(ParameterSet, self).__init__(*args, **kwargs) + self.__dict__ = self + +parameterSet = ParameterSet() + + +"""" + Experiment: (0,2) x (0,1) domain + with Microstructure with infinity distances (squares) from vertices + and RVE center but constant in one space direction. + +""" + +############################################# +# Paths +############################################# +parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/outputs_fibreRotation' +parameterSet.baseName= 'fibreRotation' + +############################################# +# Grid parameters +############################################# +nX=8 +nY=4 +# nX=1 +# nY=1 + + + +parameterSet.structuredGrid = 'simplex' +parameterSet.lower = '0 0' +parameterSet.upper = '2 1' +parameterSet.elements = str(nX)+' '+ str(nY) + +parameterSet.macroGridLevel = 2 +############################################# +# Options +############################################# +parameterSet.measure_analyticalError = False +parameterSet.measure_isometryError = False +parameterSet.vtkWrite_analyticalSurfaceNormal = False +parameterSet.vtkwrite_analyticalSolution = False + + +parameterSet.conforming_DiscreteJacobian = 0 +############################################# +# Solver parameters +############################################# +# Tolerance of the multigrid solver +parameterSet.tolerance = 1e-12 +# Maximum number of multigrid iterations +parameterSet.maxProximalNewtonSteps = 200 +# Initial regularization +parameterSet.initialRegularization = 200 +# Measure convergence +parameterSet.instrumented = 0 + +############################ +# Problem specifications +############################ +# Dimension of the domain (only used for numerical-test python files) +parameterSet.dim = 2 + +############################################# +# VTK/Output +############################################# +# Write discrete solution as .vtk-File +parameterSet.writeVTK = 1 +parameterSet.vtkwrite_analyticalSolution = 0 +parameterSet.vtkWrite_analyticalSurfaceNormal = 0 + +# The grid can be refined several times for a higher resolution in the VTK-file. +parameterSet.subsamplingRefinement = 0 + +# Write Dof-Vector to .txt-file +parameterSet.writeDOFvector = 0 + +############################################# +# Dirichlet boundary indicator +############################################# +# def dirichlet_indicator(x) : +# if( (x[0] <= 0.01) or (x[0] >= 1.99)): +# return True +# else: +# return False + +# one-sided bc +def dirichlet_indicator(x) : + if( (x[0] <= 0.01) ): + return True + else: + return False + +# def dirichlet_indicator(x) : +# return False + + +############################################# +# MICROSTRUCTURE +############################################ +parameterSet.VTKwriteMacroPhaseIndicator = True +parameterSet.MacroPhaseSubsamplingRefinement = 3 + + +class GlobalMicrostructure: + """ Class that represents the global microstructure. + + The global microstructure can be defined individually + for different (finitely many) macroscopic phases. + Each macroscopic phase corresponds to a 'LocalMicrostructure_' + sub-class that defines the necessary data for the local + micro-problem. + + Currently, there are three possibilities for the LocalMicrostructure: + (1) Read the effective quantities (Qhom,Beff) from this parset. + (Constant local microstructure) + (2) Solve the micro-problem once to obtain the effective quantities. + (Constant local microstructure) + (3) Solve for micro-problem for each macroscopic quadrature point. + (Macroscopocally varying local microstructure)) + """ + def __init__(self,macroPoint=[0,0]): + self.macroPhases = 1 + + # define first local microstructure options. + # self.macroPhase1_constantMicrostructure = True + self.macroPhase1_constantMicrostructure = False + self.macroPhase1_readEffectiveQuantities = False; + + + def macroPhaseIndicator(self,y): #y :macroscopic point + """ Indicatorfunction that determines the domains + i.e. macro-phases of different local microstructures. + """ + return 1; + + # Represents the local microstructure in Phase 1 + class LocalMicrostructure_1: + def __init__(self,macroPoint=[0,0]): #default value for initialization + self.macroPoint = macroPoint + + self.gamma = 1.0 #in the future this might change depending on macroPoint. + self.phases = 2 #in the future this might change depending on macroPoint. + #--- Define different material phases: + + #- PHASE 1 + self.phase1_type="isotropic" + self.materialParameters_phase1 = [28.7,22.5] # glass (Fibre) + #- PHASE 2 + self.phase2_type="isotropic" + self.materialParameters_phase2 = [1.2,2.58] #Matrix-material: polystyrene + + + # self.cacheMacroPhase=True + # self.macroPhases = [] #store macro phase numbers. + # self.macroPhaseCount = 0 + + + + + # self.theta = 0.2 # only used with constant microstructure. + # self.alpha = (np.pi/2.0) - np.pi/3.0 + + self.theta_start = 0.1 + self.theta_target = 0.4 + + + self.alpha_start = (np.pi/2.0) - np.pi/12.0 + self.alpha_target = (np.pi/2.0) - np.pi/3.0 + + + + def one_norm(self,v): + # r = 0 + # for i in range(0, len(v)): + # r += np.abs(v[i]) + # return r + return np.linalg.norm(v,1) + + def two_norm(self,v): + # r = 0 + # for i in range(0, len(v)): + # r += v[i]**2 + # return np.sqrt(r) + return np.linalg.norm(v, 'fro') # frobenius-norm (default) + + + def infinity_norm(self,v): + # return np.abs(v).max() + return np.linalg.norm(v,np.inf) # Use already exisiting norm from numpy.. + + + """ + extract subarray from A with index i removed. + """ + def subArray(self,v,i): + r = [] + for j in range(0,len(v)): + if not (j == i): + r.append(v[j]) + + return np.array(r) + + + + #--- Indicator function for material phases + def indicatorFunction(self,y): + # get local theta value (varies linearly in x1 - direction): + macrolength_x = 2.0 #macroscopic length in x1-direction + macrolength_y = 1.0 #macroscopic length in x2-direction + theta = self.theta_start + (self.macroPoint[0]/macrolength_x) * (self.theta_target-self.theta_start) + alpha = self.alpha_start + (self.macroPoint[1]/macrolength_y) * (self.alpha_target-self.alpha_start) + + + # theta = self.theta + # alpah = self.alpha + + + # cast to numpy array + x = np.array(y) + + #Rotated Fibre of width theta + if (abs(-np.cos(alpha)*x[0] + np.sin(alpha)*x[1] ) < theta and x[2] >= 0 ): + return 1 #Phase1 + else : + return 2 #Phase2 + + def prestrain_phase1(self,x): + rho = 1.0 + return [[rho*1.0, 0, 0], [0,rho*1.0,0], [0,0,rho*1.0]] + + def prestrain_phase2(self,x): + return [[0, 0, 0], [0,0,0], [0,0,0]] + + + + + + + +# def f(x): +# a = (3.0/16.0) +# if(x[0] <= 0.01): +# return [x[0]+a, x[1], 0] +# elif(x[0] >= 1.99): +# return [x[0] - a, x[1], 0] +# else: +# return [x[0], x[1], 0] + + +def f(x): + return [x[0], x[1], 0] + + +def df(x): + return ((1,0), + (0,1), + (0,0)) + + + +fdf = (f, df) + + +############################################# +# Force +############################################ +parameterSet.assemble_force_term = False + +def force(x): + return [0, 0, 0] + + + +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + +############################################# +# Grid parameters +############################################# +parameterSet.microGridLevel = 3 + +############################################# +# Assembly options +############################################# +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices + +############################################# +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) +############################################# +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output + +############################################# +# Write/Output options #(default=false) +############################################# +# --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: +parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition +#parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) +parameterSet.MaterialSubsamplingRefinement= 2 +# --- Write Correctos to VTK-File: +parameterSet.writeCorrectorsVTK = 0 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = False + +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/experiment/macro-problem/self-folding-box/self-folding-box.py b/experiment/macro-problem/self-folding-box/self-folding-box.py index 918501f639cc0b3b19c0eb22a13aa42d4305864b..2eba3933d1c69eabb0edf34d3ba1b3cc1ea56336 100644 --- a/experiment/macro-problem/self-folding-box/self-folding-box.py +++ b/experiment/macro-problem/self-folding-box/self-folding-box.py @@ -189,7 +189,6 @@ def force(x): # parameterSet.prestrainFlag = True #deprecated # parameterSet.macroscopically_varying_microstructure = False # parameterSet.read_effectiveQuantities_from_Parset = True # Otherwise the Micro/Cell-Problem is solved once to obtain the quantities. -parameterSet.printMicroOutput = False #New # parameterSet.piecewiseConstantMicrostructure = True @@ -489,6 +488,7 @@ class GlobalMicrostructure: # +parameterSet.printMicroOutput = 0 # Flag that allows to supress the output of the micro-problem. ############################################# # Grid parameters @@ -498,36 +498,35 @@ parameterSet.microGridLevel = 3 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = 0 -parameterSet.set_oneBasisFunction_Zero = 1 #(default = 0 -#parameterSet.arbitraryLocalIndex = 7 #(default = 0 -#parameterSet.arbitraryElementNumber = 3 #(default = 0 +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 0 - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# -# Write/Output options #(default = 0 +# Write/Output options #(default=false) ############################################# # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) parameterSet.MaterialSubsamplingRefinement= 2 - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default = 0 - -parameterSet.print_corrector_matrices = 0 - # --- Write Correctos to VTK-File: parameterSet.writeCorrectorsVTK = 1 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = True -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/experiment/macro-problem/validation/ParaView-validationGrids.py b/experiment/macro-problem/validation/ParaView-validationGrids.py new file mode 100644 index 0000000000000000000000000000000000000000..d131548073dbf213372ad0ba3b8c0e3da2b04ec6 --- /dev/null +++ b/experiment/macro-problem/validation/ParaView-validationGrids.py @@ -0,0 +1,164 @@ +# trace generated using paraview version 5.11.2 +#import paraview +#paraview.compatibility.major = 5 +#paraview.compatibility.minor = 11 + +#### import the simple module from the paraview +from paraview.simple import * +#### disable automatic camera reset on 'Show' +paraview.simple._DisableFirstRenderCameraReset() + + +fileName = ['/home/klaus/Desktop/Dune_TestTest/dune-microstructure/outputs_validation/validation_level3_NC_DuneVTK.vtu'] +# fileName = ['/home/klaus/Desktop/Validation-experiment/outputs_validation/validation_level3_NC_DuneVTK.vtu'] + +outputPath = '/home/klaus/Desktop/' +outputName = outputPath + 'RegularGrid.pdf' +outputName = outputPath + 'SymmetricGrid.pdf' + + +# create a new 'XML Unstructured Grid Reader' +validation_level3_NC_DuneVTKvtu = XMLUnstructuredGridReader(registrationName='validation_level3_NC_DuneVTK.vtu', FileName=fileName) +validation_level3_NC_DuneVTKvtu.PointArrayStatus = ['Displacement dune-VTK', 'IsometryErrorFunction', 'SurfaceNormalDiscrete'] + +# Properties modified on validation_level3_NC_DuneVTKvtu +validation_level3_NC_DuneVTKvtu.TimeArray = 'None' + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') + +# show data in view +validation_level3_NC_DuneVTKvtuDisplay = Show(validation_level3_NC_DuneVTKvtu, renderView1, 'UnstructuredGridRepresentation') + +# get 2D transfer function for 'IsometryErrorFunction' +isometryErrorFunctionTF2D = GetTransferFunction2D('IsometryErrorFunction') + +# get color transfer function/color map for 'IsometryErrorFunction' +isometryErrorFunctionLUT = GetColorTransferFunction('IsometryErrorFunction') +isometryErrorFunctionLUT.TransferFunction2D = isometryErrorFunctionTF2D +isometryErrorFunctionLUT.RGBPoints = [0.0, 0.231373, 0.298039, 0.752941, 1.5060151815414429, 0.865003, 0.865003, 0.865003, 3.0120303630828857, 0.705882, 0.0156863, 0.14902] +isometryErrorFunctionLUT.ScalarRangeInitialized = 1.0 + +# get opacity transfer function/opacity map for 'IsometryErrorFunction' +isometryErrorFunctionPWF = GetOpacityTransferFunction('IsometryErrorFunction') +isometryErrorFunctionPWF.Points = [0.0, 0.0, 0.5, 0.0, 3.0120303630828857, 1.0, 0.5, 0.0] +isometryErrorFunctionPWF.ScalarRangeInitialized = 1 + +# trace defaults for the display properties. +validation_level3_NC_DuneVTKvtuDisplay.Representation = 'Surface' +validation_level3_NC_DuneVTKvtuDisplay.ColorArrayName = ['POINTS', 'IsometryErrorFunction'] +validation_level3_NC_DuneVTKvtuDisplay.LookupTable = isometryErrorFunctionLUT +validation_level3_NC_DuneVTKvtuDisplay.SelectTCoordArray = 'None' +validation_level3_NC_DuneVTKvtuDisplay.SelectNormalArray = 'None' +validation_level3_NC_DuneVTKvtuDisplay.SelectTangentArray = 'None' +validation_level3_NC_DuneVTKvtuDisplay.OSPRayScaleArray = 'IsometryErrorFunction' +validation_level3_NC_DuneVTKvtuDisplay.OSPRayScaleFunction = 'PiecewiseFunction' +validation_level3_NC_DuneVTKvtuDisplay.SelectOrientationVectors = 'Displacement dune-VTK' +validation_level3_NC_DuneVTKvtuDisplay.ScaleFactor = 0.31415901184082035 +validation_level3_NC_DuneVTKvtuDisplay.SelectScaleArray = 'IsometryErrorFunction' +validation_level3_NC_DuneVTKvtuDisplay.GlyphType = 'Arrow' +validation_level3_NC_DuneVTKvtuDisplay.GlyphTableIndexArray = 'IsometryErrorFunction' +validation_level3_NC_DuneVTKvtuDisplay.GaussianRadius = 0.015707950592041015 +validation_level3_NC_DuneVTKvtuDisplay.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] +validation_level3_NC_DuneVTKvtuDisplay.ScaleTransferFunction = 'PiecewiseFunction' +validation_level3_NC_DuneVTKvtuDisplay.OpacityArray = ['POINTS', 'IsometryErrorFunction'] +validation_level3_NC_DuneVTKvtuDisplay.OpacityTransferFunction = 'PiecewiseFunction' +validation_level3_NC_DuneVTKvtuDisplay.DataAxesGrid = 'GridAxesRepresentation' +validation_level3_NC_DuneVTKvtuDisplay.PolarAxes = 'PolarAxesRepresentation' +validation_level3_NC_DuneVTKvtuDisplay.ScalarOpacityFunction = isometryErrorFunctionPWF +validation_level3_NC_DuneVTKvtuDisplay.ScalarOpacityUnitDistance = 2.221439676435089 +validation_level3_NC_DuneVTKvtuDisplay.OpacityArrayName = ['POINTS', 'IsometryErrorFunction'] +validation_level3_NC_DuneVTKvtuDisplay.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] +validation_level3_NC_DuneVTKvtuDisplay.WriteLog = '' + +# init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' +validation_level3_NC_DuneVTKvtuDisplay.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 3.0120303630828857, 1.0, 0.5, 0.0] + +# init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' +validation_level3_NC_DuneVTKvtuDisplay.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 3.0120303630828857, 1.0, 0.5, 0.0] + +# reset view to fit data +renderView1.ResetCamera(False) + +#changing interaction mode based on data extents +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [1.5707950592041016, 1.5707950592041016, 10.52432689666748] +renderView1.CameraFocalPoint = [1.5707950592041016, 1.5707950592041016, 0.0] + +# show color bar/color legend +validation_level3_NC_DuneVTKvtuDisplay.SetScalarBarVisibility(renderView1, True) + +# update the view to ensure updated data information +renderView1.Update() + +# turn off scalar coloring +ColorBy(validation_level3_NC_DuneVTKvtuDisplay, None) + +# Hide the scalar bar for this color map if no visible data is colored by it. +HideScalarBarIfNotNeeded(isometryErrorFunctionLUT, renderView1) + +# change solid color +validation_level3_NC_DuneVTKvtuDisplay.AmbientColor = [0.0, 0.6666666666666666, 1.0] +validation_level3_NC_DuneVTKvtuDisplay.DiffuseColor = [0.0, 0.6666666666666666, 1.0] + +# change representation type +validation_level3_NC_DuneVTKvtuDisplay.SetRepresentationType('Surface With Edges') + +# Properties modified on validation_level3_NC_DuneVTKvtuDisplay +validation_level3_NC_DuneVTKvtuDisplay.LineWidth = 3.0 + +# Properties modified on validation_level3_NC_DuneVTKvtuDisplay +validation_level3_NC_DuneVTKvtuDisplay.LineWidth = 2.0 + +# Properties modified on validation_level3_NC_DuneVTKvtuDisplay +validation_level3_NC_DuneVTKvtuDisplay.LineWidth = 1.0 + +# Properties modified on validation_level3_NC_DuneVTKvtuDisplay +validation_level3_NC_DuneVTKvtuDisplay.LineWidth = 2.0 + +# Properties modified on validation_level3_NC_DuneVTKvtuDisplay +validation_level3_NC_DuneVTKvtuDisplay.Specular = 0.5 + +# Properties modified on validation_level3_NC_DuneVTKvtuDisplay +validation_level3_NC_DuneVTKvtuDisplay.Ambient = 0.1 + +# Properties modified on validation_level3_NC_DuneVTKvtuDisplay +validation_level3_NC_DuneVTKvtuDisplay.EdgeColor = [0.1411764705882353, 0.12156862745098039, 0.19215686274509805] + +# Properties modified on validation_level3_NC_DuneVTKvtuDisplay +validation_level3_NC_DuneVTKvtuDisplay.NonlinearSubdivisionLevel = 0 + +# Properties modified on renderView1 +renderView1.OrientationAxesVisibility = 0 + +# export view +# ExportView('/home/klaus/Desktop/Dune_TestTest/dune-microstructure/outputs_validation/Grid2.pdf', view=renderView1) +ExportView(outputName, view=renderView1) + +#================================================================ +# addendum: following script captures some of the application +# state to faithfully reproduce the visualization during playback +#================================================================ + +# get layout +layout1 = GetLayout() + +#-------------------------------- +# saving layout sizes for layouts + +# layout/tab size in pixels +layout1.SetSize(2844, 1165) + +#----------------------------------- +# saving camera placements for views + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [1.5707950592041016, 1.5707950592041016, 10.52432689666748] +renderView1.CameraFocalPoint = [1.5707950592041016, 1.5707950592041016, 0.0] +renderView1.CameraParallelScale = 2.221439676435089 + +#-------------------------------------------- +# uncomment the following to render all views +# RenderAllViews() +# alternatively, if you want to write images, you can use SaveScreenshot(...). \ No newline at end of file diff --git a/experiment/macro-problem/validation/Paraview_GridValidationMinimizer.py b/experiment/macro-problem/validation/Paraview_GridValidationMinimizer.py new file mode 100644 index 0000000000000000000000000000000000000000..f87bc3b531065397d95e07948de014af3fa38ad3 --- /dev/null +++ b/experiment/macro-problem/validation/Paraview_GridValidationMinimizer.py @@ -0,0 +1,1137 @@ +# trace generated using paraview version 5.11.2 +#import paraview +#paraview.compatibility.major = 5 +#paraview.compatibility.minor = 11 + +#### import the simple module from the paraview +from paraview.simple import * +#### disable automatic camera reset on 'Show' +paraview.simple._DisableFirstRenderCameraReset() + + +fileName = ['/home/klaus/Desktop/Validation-experiment/REGULAR_FreeMinimizer/LongStrip/validation_level6_NC_DuneVTK.vtu'] +fileName = ['/home/klaus/Desktop/Validation-experiment/SYMMETRIC_FreeMinimizer/LongStrip/validation_level12_NC_DuneVTK.vtu'] + +outputPath = '/home/klaus/Desktop/' +outputName = outputPath + 'RegularGridMinimizer.pdf' +outputName = outputPath + 'SymmetricGridMinimizer.pdf' + + +# create a new 'XML Unstructured Grid Reader' +validation_level6_NC_DuneVTKvtu = XMLUnstructuredGridReader(registrationName='validation_level6_NC_DuneVTK.vtu', FileName=fileName) +validation_level6_NC_DuneVTKvtu.CellArrayStatus = [] +validation_level6_NC_DuneVTKvtu.PointArrayStatus = ['Displacement dune-VTK', 'IsometryErrorFunction', 'Displacement_analytical dune-VTK', 'SurfaceNormalDiscrete'] +validation_level6_NC_DuneVTKvtu.TimeArray = 'TimeValue' + +# Properties modified on validation_level6_NC_DuneVTKvtu +validation_level6_NC_DuneVTKvtu.TimeArray = 'None' + +# get active view +renderView1 = GetActiveViewOrCreate('RenderView') + +# show data in view +validation_level6_NC_DuneVTKvtuDisplay = Show(validation_level6_NC_DuneVTKvtu, renderView1, 'UnstructuredGridRepresentation') + +# get 2D transfer function for 'IsometryErrorFunction' +isometryErrorFunctionTF2D = GetTransferFunction2D('IsometryErrorFunction') +isometryErrorFunctionTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +isometryErrorFunctionTF2D.Boxes = [] +isometryErrorFunctionTF2D.ScalarRangeInitialized = 0 +isometryErrorFunctionTF2D.Range = [0.0, 1.0, 0.0, 1.0] +isometryErrorFunctionTF2D.OutputDimensions = [10, 10] + +# get color transfer function/color map for 'IsometryErrorFunction' +isometryErrorFunctionLUT = GetColorTransferFunction('IsometryErrorFunction') +isometryErrorFunctionLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +isometryErrorFunctionLUT.InterpretValuesAsCategories = 0 +isometryErrorFunctionLUT.AnnotationsInitialized = 0 +isometryErrorFunctionLUT.ShowCategoricalColorsinDataRangeOnly = 0 +isometryErrorFunctionLUT.RescaleOnVisibilityChange = 0 +isometryErrorFunctionLUT.EnableOpacityMapping = 0 +isometryErrorFunctionLUT.TransferFunction2D = isometryErrorFunctionTF2D +isometryErrorFunctionLUT.Use2DTransferFunction = 0 +isometryErrorFunctionLUT.RGBPoints = [0.0, 0.231373, 0.298039, 0.752941, 0.03546995297074318, 0.865003, 0.865003, 0.865003, 0.07093990594148636, 0.705882, 0.0156863, 0.14902] +isometryErrorFunctionLUT.UseLogScale = 0 +isometryErrorFunctionLUT.UseOpacityControlPointsFreehandDrawing = 0 +isometryErrorFunctionLUT.ShowDataHistogram = 0 +isometryErrorFunctionLUT.AutomaticDataHistogramComputation = 0 +isometryErrorFunctionLUT.DataHistogramNumberOfBins = 10 +isometryErrorFunctionLUT.ColorSpace = 'Diverging' +isometryErrorFunctionLUT.UseBelowRangeColor = 0 +isometryErrorFunctionLUT.BelowRangeColor = [0.0, 0.0, 0.0] +isometryErrorFunctionLUT.UseAboveRangeColor = 0 +isometryErrorFunctionLUT.AboveRangeColor = [0.5, 0.5, 0.5] +isometryErrorFunctionLUT.NanColor = [1.0, 1.0, 0.0] +isometryErrorFunctionLUT.NanOpacity = 1.0 +isometryErrorFunctionLUT.Discretize = 1 +isometryErrorFunctionLUT.NumberOfTableValues = 256 +isometryErrorFunctionLUT.ScalarRangeInitialized = 1.0 +isometryErrorFunctionLUT.HSVWrap = 0 +isometryErrorFunctionLUT.VectorComponent = 0 +isometryErrorFunctionLUT.VectorMode = 'Magnitude' +isometryErrorFunctionLUT.AllowDuplicateScalars = 1 +isometryErrorFunctionLUT.Annotations = [] +isometryErrorFunctionLUT.ActiveAnnotatedValues = [] +isometryErrorFunctionLUT.IndexedColors = [] +isometryErrorFunctionLUT.IndexedOpacities = [] + +# get opacity transfer function/opacity map for 'IsometryErrorFunction' +isometryErrorFunctionPWF = GetOpacityTransferFunction('IsometryErrorFunction') +isometryErrorFunctionPWF.Points = [0.0, 0.0, 0.5, 0.0, 0.07093990594148636, 1.0, 0.5, 0.0] +isometryErrorFunctionPWF.AllowDuplicateScalars = 1 +isometryErrorFunctionPWF.UseLogScale = 0 +isometryErrorFunctionPWF.ScalarRangeInitialized = 1 + +# trace defaults for the display properties. +validation_level6_NC_DuneVTKvtuDisplay.Selection = None +validation_level6_NC_DuneVTKvtuDisplay.Representation = 'Surface' +validation_level6_NC_DuneVTKvtuDisplay.ColorArrayName = ['POINTS', 'IsometryErrorFunction'] +validation_level6_NC_DuneVTKvtuDisplay.LookupTable = isometryErrorFunctionLUT +validation_level6_NC_DuneVTKvtuDisplay.MapScalars = 1 +validation_level6_NC_DuneVTKvtuDisplay.MultiComponentsMapping = 0 +validation_level6_NC_DuneVTKvtuDisplay.InterpolateScalarsBeforeMapping = 1 +validation_level6_NC_DuneVTKvtuDisplay.Opacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.PointSize = 2.0 +validation_level6_NC_DuneVTKvtuDisplay.LineWidth = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.RenderLinesAsTubes = 0 +validation_level6_NC_DuneVTKvtuDisplay.RenderPointsAsSpheres = 0 +validation_level6_NC_DuneVTKvtuDisplay.Interpolation = 'Gouraud' +validation_level6_NC_DuneVTKvtuDisplay.Specular = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.SpecularColor = [1.0, 1.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.SpecularPower = 100.0 +validation_level6_NC_DuneVTKvtuDisplay.Luminosity = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.Ambient = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.Diffuse = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.Roughness = 0.3 +validation_level6_NC_DuneVTKvtuDisplay.Metallic = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.EdgeTint = [1.0, 1.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.Anisotropy = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.AnisotropyRotation = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.BaseIOR = 1.5 +validation_level6_NC_DuneVTKvtuDisplay.CoatStrength = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.CoatIOR = 2.0 +validation_level6_NC_DuneVTKvtuDisplay.CoatRoughness = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.CoatColor = [1.0, 1.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.SelectTCoordArray = 'None' +validation_level6_NC_DuneVTKvtuDisplay.SelectNormalArray = 'None' +validation_level6_NC_DuneVTKvtuDisplay.SelectTangentArray = 'None' +validation_level6_NC_DuneVTKvtuDisplay.Texture = None +validation_level6_NC_DuneVTKvtuDisplay.RepeatTextures = 1 +validation_level6_NC_DuneVTKvtuDisplay.InterpolateTextures = 0 +validation_level6_NC_DuneVTKvtuDisplay.SeamlessU = 0 +validation_level6_NC_DuneVTKvtuDisplay.SeamlessV = 0 +validation_level6_NC_DuneVTKvtuDisplay.UseMipmapTextures = 0 +validation_level6_NC_DuneVTKvtuDisplay.ShowTexturesOnBackface = 1 +validation_level6_NC_DuneVTKvtuDisplay.BaseColorTexture = None +validation_level6_NC_DuneVTKvtuDisplay.NormalTexture = None +validation_level6_NC_DuneVTKvtuDisplay.NormalScale = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.CoatNormalTexture = None +validation_level6_NC_DuneVTKvtuDisplay.CoatNormalScale = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.MaterialTexture = None +validation_level6_NC_DuneVTKvtuDisplay.OcclusionStrength = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.AnisotropyTexture = None +validation_level6_NC_DuneVTKvtuDisplay.EmissiveTexture = None +validation_level6_NC_DuneVTKvtuDisplay.EmissiveFactor = [1.0, 1.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.FlipTextures = 0 +validation_level6_NC_DuneVTKvtuDisplay.BackfaceRepresentation = 'Follow Frontface' +validation_level6_NC_DuneVTKvtuDisplay.BackfaceAmbientColor = [1.0, 1.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.BackfaceOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.Position = [0.0, 0.0, 0.0] +validation_level6_NC_DuneVTKvtuDisplay.Scale = [1.0, 1.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.Orientation = [0.0, 0.0, 0.0] +validation_level6_NC_DuneVTKvtuDisplay.Origin = [0.0, 0.0, 0.0] +validation_level6_NC_DuneVTKvtuDisplay.CoordinateShiftScaleMethod = 'Always Auto Shift Scale' +validation_level6_NC_DuneVTKvtuDisplay.Pickable = 1 +validation_level6_NC_DuneVTKvtuDisplay.Triangulate = 0 +validation_level6_NC_DuneVTKvtuDisplay.UseShaderReplacements = 0 +validation_level6_NC_DuneVTKvtuDisplay.ShaderReplacements = '' +validation_level6_NC_DuneVTKvtuDisplay.NonlinearSubdivisionLevel = 1 +validation_level6_NC_DuneVTKvtuDisplay.UseDataPartitions = 0 +validation_level6_NC_DuneVTKvtuDisplay.OSPRayUseScaleArray = 'All Approximate' +validation_level6_NC_DuneVTKvtuDisplay.OSPRayScaleArray = 'IsometryErrorFunction' +validation_level6_NC_DuneVTKvtuDisplay.OSPRayScaleFunction = 'PiecewiseFunction' +validation_level6_NC_DuneVTKvtuDisplay.OSPRayMaterial = 'None' +validation_level6_NC_DuneVTKvtuDisplay.BlockSelectors = ['/'] +validation_level6_NC_DuneVTKvtuDisplay.BlockColors = [] +validation_level6_NC_DuneVTKvtuDisplay.BlockOpacities = [] +validation_level6_NC_DuneVTKvtuDisplay.Orient = 0 +validation_level6_NC_DuneVTKvtuDisplay.OrientationMode = 'Direction' +validation_level6_NC_DuneVTKvtuDisplay.SelectOrientationVectors = 'Displacement dune-VTK' +validation_level6_NC_DuneVTKvtuDisplay.Scaling = 0 +validation_level6_NC_DuneVTKvtuDisplay.ScaleMode = 'No Data Scaling Off' +validation_level6_NC_DuneVTKvtuDisplay.ScaleFactor = 0.628000020980835 +validation_level6_NC_DuneVTKvtuDisplay.SelectScaleArray = 'IsometryErrorFunction' +validation_level6_NC_DuneVTKvtuDisplay.GlyphType = 'Arrow' +validation_level6_NC_DuneVTKvtuDisplay.UseGlyphTable = 0 +validation_level6_NC_DuneVTKvtuDisplay.GlyphTableIndexArray = 'IsometryErrorFunction' +validation_level6_NC_DuneVTKvtuDisplay.UseCompositeGlyphTable = 0 +validation_level6_NC_DuneVTKvtuDisplay.UseGlyphCullingAndLOD = 0 +validation_level6_NC_DuneVTKvtuDisplay.LODValues = [] +validation_level6_NC_DuneVTKvtuDisplay.ColorByLODIndex = 0 +validation_level6_NC_DuneVTKvtuDisplay.GaussianRadius = 0.03140000104904175 +validation_level6_NC_DuneVTKvtuDisplay.ShaderPreset = 'Sphere' +validation_level6_NC_DuneVTKvtuDisplay.CustomTriangleScale = 3 +validation_level6_NC_DuneVTKvtuDisplay.CustomShader = """ // This custom shader code define a gaussian blur + // Please take a look into vtkSMPointGaussianRepresentation.cxx + // for other custom shader examples + //VTK::Color::Impl + float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy); + float gaussian = exp(-0.5*dist2); + opacity = opacity*gaussian; +""" +validation_level6_NC_DuneVTKvtuDisplay.Emissive = 0 +validation_level6_NC_DuneVTKvtuDisplay.ScaleByArray = 0 +validation_level6_NC_DuneVTKvtuDisplay.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] +validation_level6_NC_DuneVTKvtuDisplay.ScaleArrayComponent = '' +validation_level6_NC_DuneVTKvtuDisplay.UseScaleFunction = 1 +validation_level6_NC_DuneVTKvtuDisplay.ScaleTransferFunction = 'PiecewiseFunction' +validation_level6_NC_DuneVTKvtuDisplay.OpacityByArray = 0 +validation_level6_NC_DuneVTKvtuDisplay.OpacityArray = ['POINTS', 'IsometryErrorFunction'] +validation_level6_NC_DuneVTKvtuDisplay.OpacityArrayComponent = '' +validation_level6_NC_DuneVTKvtuDisplay.OpacityTransferFunction = 'PiecewiseFunction' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid = 'GridAxesRepresentation' +validation_level6_NC_DuneVTKvtuDisplay.SelectionCellLabelBold = 0 +validation_level6_NC_DuneVTKvtuDisplay.SelectionCellLabelColor = [0.0, 1.0, 0.0] +validation_level6_NC_DuneVTKvtuDisplay.SelectionCellLabelFontFamily = 'Arial' +validation_level6_NC_DuneVTKvtuDisplay.SelectionCellLabelFontFile = '' +validation_level6_NC_DuneVTKvtuDisplay.SelectionCellLabelFontSize = 18 +validation_level6_NC_DuneVTKvtuDisplay.SelectionCellLabelItalic = 0 +validation_level6_NC_DuneVTKvtuDisplay.SelectionCellLabelJustification = 'Left' +validation_level6_NC_DuneVTKvtuDisplay.SelectionCellLabelOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.SelectionCellLabelShadow = 0 +validation_level6_NC_DuneVTKvtuDisplay.SelectionPointLabelBold = 0 +validation_level6_NC_DuneVTKvtuDisplay.SelectionPointLabelColor = [1.0, 1.0, 0.0] +validation_level6_NC_DuneVTKvtuDisplay.SelectionPointLabelFontFamily = 'Arial' +validation_level6_NC_DuneVTKvtuDisplay.SelectionPointLabelFontFile = '' +validation_level6_NC_DuneVTKvtuDisplay.SelectionPointLabelFontSize = 18 +validation_level6_NC_DuneVTKvtuDisplay.SelectionPointLabelItalic = 0 +validation_level6_NC_DuneVTKvtuDisplay.SelectionPointLabelJustification = 'Left' +validation_level6_NC_DuneVTKvtuDisplay.SelectionPointLabelOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.SelectionPointLabelShadow = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes = 'PolarAxesRepresentation' +validation_level6_NC_DuneVTKvtuDisplay.ScalarOpacityFunction = isometryErrorFunctionPWF +validation_level6_NC_DuneVTKvtuDisplay.ScalarOpacityUnitDistance = 0.5529451794983521 +validation_level6_NC_DuneVTKvtuDisplay.UseSeparateOpacityArray = 0 +validation_level6_NC_DuneVTKvtuDisplay.OpacityArrayName = ['POINTS', 'IsometryErrorFunction'] +validation_level6_NC_DuneVTKvtuDisplay.OpacityComponent = '' +validation_level6_NC_DuneVTKvtuDisplay.SelectMapper = 'Projected tetra' +validation_level6_NC_DuneVTKvtuDisplay.SamplingDimensions = [128, 128, 128] +validation_level6_NC_DuneVTKvtuDisplay.UseFloatingPointFrameBuffer = 1 +validation_level6_NC_DuneVTKvtuDisplay.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] +validation_level6_NC_DuneVTKvtuDisplay.NumberOfSteps = 40 +validation_level6_NC_DuneVTKvtuDisplay.StepSize = 0.25 +validation_level6_NC_DuneVTKvtuDisplay.NormalizeVectors = 1 +validation_level6_NC_DuneVTKvtuDisplay.EnhancedLIC = 1 +validation_level6_NC_DuneVTKvtuDisplay.ColorMode = 'Blend' +validation_level6_NC_DuneVTKvtuDisplay.LICIntensity = 0.8 +validation_level6_NC_DuneVTKvtuDisplay.MapModeBias = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.EnhanceContrast = 'Off' +validation_level6_NC_DuneVTKvtuDisplay.LowLICContrastEnhancementFactor = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.HighLICContrastEnhancementFactor = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.LowColorContrastEnhancementFactor = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.HighColorContrastEnhancementFactor = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.AntiAlias = 0 +validation_level6_NC_DuneVTKvtuDisplay.MaskOnSurface = 1 +validation_level6_NC_DuneVTKvtuDisplay.MaskThreshold = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.MaskIntensity = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.MaskColor = [0.5, 0.5, 0.5] +validation_level6_NC_DuneVTKvtuDisplay.GenerateNoiseTexture = 0 +validation_level6_NC_DuneVTKvtuDisplay.NoiseType = 'Gaussian' +validation_level6_NC_DuneVTKvtuDisplay.NoiseTextureSize = 128 +validation_level6_NC_DuneVTKvtuDisplay.NoiseGrainSize = 2 +validation_level6_NC_DuneVTKvtuDisplay.MinNoiseValue = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.MaxNoiseValue = 0.8 +validation_level6_NC_DuneVTKvtuDisplay.NumberOfNoiseLevels = 1024 +validation_level6_NC_DuneVTKvtuDisplay.ImpulseNoiseProbability = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.ImpulseNoiseBackgroundValue = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.NoiseGeneratorSeed = 1 +validation_level6_NC_DuneVTKvtuDisplay.CompositeStrategy = 'AUTO' +validation_level6_NC_DuneVTKvtuDisplay.UseLICForLOD = 0 +validation_level6_NC_DuneVTKvtuDisplay.WriteLog = '' + +# init the 'PiecewiseFunction' selected for 'OSPRayScaleFunction' +validation_level6_NC_DuneVTKvtuDisplay.OSPRayScaleFunction.Points = [0.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] +validation_level6_NC_DuneVTKvtuDisplay.OSPRayScaleFunction.UseLogScale = 0 + +# init the 'Arrow' selected for 'GlyphType' +validation_level6_NC_DuneVTKvtuDisplay.GlyphType.TipResolution = 6 +validation_level6_NC_DuneVTKvtuDisplay.GlyphType.TipRadius = 0.1 +validation_level6_NC_DuneVTKvtuDisplay.GlyphType.TipLength = 0.35 +validation_level6_NC_DuneVTKvtuDisplay.GlyphType.ShaftResolution = 6 +validation_level6_NC_DuneVTKvtuDisplay.GlyphType.ShaftRadius = 0.03 +validation_level6_NC_DuneVTKvtuDisplay.GlyphType.Invert = 0 + +# init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' +validation_level6_NC_DuneVTKvtuDisplay.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.07093990594148636, 1.0, 0.5, 0.0] +validation_level6_NC_DuneVTKvtuDisplay.ScaleTransferFunction.UseLogScale = 0 + +# init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' +validation_level6_NC_DuneVTKvtuDisplay.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.07093990594148636, 1.0, 0.5, 0.0] +validation_level6_NC_DuneVTKvtuDisplay.OpacityTransferFunction.UseLogScale = 0 + +# init the 'GridAxesRepresentation' selected for 'DataAxesGrid' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XTitle = 'X Axis' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YTitle = 'Y Axis' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZTitle = 'Z Axis' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XTitleFontFamily = 'Arial' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XTitleFontFile = '' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XTitleBold = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XTitleItalic = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XTitleFontSize = 12 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XTitleShadow = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XTitleOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YTitleFontFamily = 'Arial' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YTitleFontFile = '' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YTitleBold = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YTitleItalic = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YTitleFontSize = 12 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YTitleShadow = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YTitleOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZTitleFontFamily = 'Arial' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZTitleFontFile = '' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZTitleBold = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZTitleItalic = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZTitleFontSize = 12 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZTitleShadow = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZTitleOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.FacesToRender = 63 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.CullBackface = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.CullFrontface = 1 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ShowGrid = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ShowEdges = 1 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ShowTicks = 1 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.LabelUniqueEdgesOnly = 1 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.AxesToLabel = 63 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XLabelFontFamily = 'Arial' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XLabelFontFile = '' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XLabelBold = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XLabelItalic = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XLabelFontSize = 12 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XLabelShadow = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XLabelOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YLabelFontFamily = 'Arial' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YLabelFontFile = '' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YLabelBold = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YLabelItalic = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YLabelFontSize = 12 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YLabelShadow = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YLabelOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZLabelFontFamily = 'Arial' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZLabelFontFile = '' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZLabelBold = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZLabelItalic = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZLabelFontSize = 12 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZLabelShadow = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZLabelOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XAxisNotation = 'Mixed' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XAxisPrecision = 2 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XAxisUseCustomLabels = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.XAxisLabels = [] +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YAxisNotation = 'Mixed' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YAxisPrecision = 2 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YAxisUseCustomLabels = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.YAxisLabels = [] +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZAxisNotation = 'Mixed' +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZAxisPrecision = 2 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZAxisUseCustomLabels = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.ZAxisLabels = [] +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.UseCustomBounds = 0 +validation_level6_NC_DuneVTKvtuDisplay.DataAxesGrid.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + +# init the 'PolarAxesRepresentation' selected for 'PolarAxes' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.Visibility = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.Translation = [0.0, 0.0, 0.0] +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.Scale = [1.0, 1.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.Orientation = [0.0, 0.0, 0.0] +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.EnableCustomBounds = [0, 0, 0] +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.EnableCustomRange = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.CustomRange = [0.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisVisibility = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.RadialAxesVisibility = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.DrawRadialGridlines = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarArcsVisibility = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.DrawPolarArcsGridlines = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.NumberOfRadialAxes = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.AutoSubdividePolarAxis = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.NumberOfPolarAxis = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.MinimumRadius = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.MinimumAngle = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.MaximumAngle = 90.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.RadialAxesOriginToPolarAxis = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.Ratio = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisColor = [1.0, 1.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarArcsColor = [1.0, 1.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.LastRadialAxisColor = [1.0, 1.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.SecondaryPolarArcsColor = [1.0, 1.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.SecondaryRadialAxesColor = [1.0, 1.0, 1.0] +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisTitleVisibility = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisTitle = 'Radial Distance' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisTitleLocation = 'Bottom' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarLabelVisibility = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarLabelFormat = '%-#6.3g' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarLabelExponentLocation = 'Labels' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.RadialLabelVisibility = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.RadialLabelFormat = '%-#3.1f' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.RadialLabelLocation = 'Bottom' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.RadialUnitsVisibility = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.ScreenSize = 10.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisTitleOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisTitleFontFamily = 'Arial' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisTitleFontFile = '' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisTitleBold = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisTitleItalic = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisTitleShadow = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisTitleFontSize = 12 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisLabelOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisLabelFontFamily = 'Arial' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisLabelFontFile = '' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisLabelBold = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisLabelItalic = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisLabelShadow = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisLabelFontSize = 12 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.LastRadialAxisTextOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.LastRadialAxisTextFontFamily = 'Arial' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.LastRadialAxisTextFontFile = '' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.LastRadialAxisTextBold = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.LastRadialAxisTextItalic = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.LastRadialAxisTextShadow = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.LastRadialAxisTextFontSize = 12 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.SecondaryRadialAxesTextOpacity = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontFamily = 'Arial' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontFile = '' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.SecondaryRadialAxesTextBold = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.SecondaryRadialAxesTextItalic = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.SecondaryRadialAxesTextShadow = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontSize = 12 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.EnableDistanceLOD = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.DistanceLODThreshold = 0.7 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.EnableViewAngleLOD = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.ViewAngleLODThreshold = 0.7 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.SmallestVisiblePolarAngle = 0.5 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarTicksVisibility = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.ArcTicksOriginToPolarAxis = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.TickLocation = 'Both' +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.AxisTickVisibility = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.AxisMinorTickVisibility = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.ArcTickVisibility = 1 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.ArcMinorTickVisibility = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.DeltaAngleMajor = 10.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.DeltaAngleMinor = 5.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisMajorTickSize = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisTickRatioSize = 0.3 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisMajorTickThickness = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.PolarAxisTickRatioThickness = 0.5 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.LastRadialAxisMajorTickSize = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.LastRadialAxisTickRatioSize = 0.3 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.LastRadialAxisMajorTickThickness = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.LastRadialAxisTickRatioThickness = 0.5 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.ArcMajorTickSize = 0.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.ArcTickRatioSize = 0.3 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.ArcMajorTickThickness = 1.0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.ArcTickRatioThickness = 0.5 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.Use2DMode = 0 +validation_level6_NC_DuneVTKvtuDisplay.PolarAxes.UseLogAxis = 0 + +# reset view to fit data +renderView1.ResetCamera(False) + +#changing interaction mode based on data extents +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [3.140000104904175, 1.5707963705062866, 21.03800070285797] +renderView1.CameraFocalPoint = [3.140000104904175, 1.5707963705062866, 0.0] + +# show color bar/color legend +validation_level6_NC_DuneVTKvtuDisplay.SetScalarBarVisibility(renderView1, True) + +# update the view to ensure updated data information +renderView1.Update() + +# create a new 'Warp By Vector' +warpByVector1 = WarpByVector(registrationName='WarpByVector1', Input=validation_level6_NC_DuneVTKvtu) +warpByVector1.Vectors = ['POINTS', 'Displacement dune-VTK'] +warpByVector1.ScaleFactor = 1.0 + +# show data in view +warpByVector1Display = Show(warpByVector1, renderView1, 'UnstructuredGridRepresentation') + +# trace defaults for the display properties. +warpByVector1Display.Selection = None +warpByVector1Display.Representation = 'Surface' +warpByVector1Display.ColorArrayName = ['POINTS', 'IsometryErrorFunction'] +warpByVector1Display.LookupTable = isometryErrorFunctionLUT +warpByVector1Display.MapScalars = 1 +warpByVector1Display.MultiComponentsMapping = 0 +warpByVector1Display.InterpolateScalarsBeforeMapping = 1 +warpByVector1Display.Opacity = 1.0 +warpByVector1Display.PointSize = 2.0 +warpByVector1Display.LineWidth = 1.0 +warpByVector1Display.RenderLinesAsTubes = 0 +warpByVector1Display.RenderPointsAsSpheres = 0 +warpByVector1Display.Interpolation = 'Gouraud' +warpByVector1Display.Specular = 0.0 +warpByVector1Display.SpecularColor = [1.0, 1.0, 1.0] +warpByVector1Display.SpecularPower = 100.0 +warpByVector1Display.Luminosity = 0.0 +warpByVector1Display.Ambient = 0.0 +warpByVector1Display.Diffuse = 1.0 +warpByVector1Display.Roughness = 0.3 +warpByVector1Display.Metallic = 0.0 +warpByVector1Display.EdgeTint = [1.0, 1.0, 1.0] +warpByVector1Display.Anisotropy = 0.0 +warpByVector1Display.AnisotropyRotation = 0.0 +warpByVector1Display.BaseIOR = 1.5 +warpByVector1Display.CoatStrength = 0.0 +warpByVector1Display.CoatIOR = 2.0 +warpByVector1Display.CoatRoughness = 0.0 +warpByVector1Display.CoatColor = [1.0, 1.0, 1.0] +warpByVector1Display.SelectTCoordArray = 'None' +warpByVector1Display.SelectNormalArray = 'None' +warpByVector1Display.SelectTangentArray = 'None' +warpByVector1Display.Texture = None +warpByVector1Display.RepeatTextures = 1 +warpByVector1Display.InterpolateTextures = 0 +warpByVector1Display.SeamlessU = 0 +warpByVector1Display.SeamlessV = 0 +warpByVector1Display.UseMipmapTextures = 0 +warpByVector1Display.ShowTexturesOnBackface = 1 +warpByVector1Display.BaseColorTexture = None +warpByVector1Display.NormalTexture = None +warpByVector1Display.NormalScale = 1.0 +warpByVector1Display.CoatNormalTexture = None +warpByVector1Display.CoatNormalScale = 1.0 +warpByVector1Display.MaterialTexture = None +warpByVector1Display.OcclusionStrength = 1.0 +warpByVector1Display.AnisotropyTexture = None +warpByVector1Display.EmissiveTexture = None +warpByVector1Display.EmissiveFactor = [1.0, 1.0, 1.0] +warpByVector1Display.FlipTextures = 0 +warpByVector1Display.BackfaceRepresentation = 'Follow Frontface' +warpByVector1Display.BackfaceAmbientColor = [1.0, 1.0, 1.0] +warpByVector1Display.BackfaceOpacity = 1.0 +warpByVector1Display.Position = [0.0, 0.0, 0.0] +warpByVector1Display.Scale = [1.0, 1.0, 1.0] +warpByVector1Display.Orientation = [0.0, 0.0, 0.0] +warpByVector1Display.Origin = [0.0, 0.0, 0.0] +warpByVector1Display.CoordinateShiftScaleMethod = 'Always Auto Shift Scale' +warpByVector1Display.Pickable = 1 +warpByVector1Display.Triangulate = 0 +warpByVector1Display.UseShaderReplacements = 0 +warpByVector1Display.ShaderReplacements = '' +warpByVector1Display.NonlinearSubdivisionLevel = 1 +warpByVector1Display.UseDataPartitions = 0 +warpByVector1Display.OSPRayUseScaleArray = 'All Approximate' +warpByVector1Display.OSPRayScaleArray = 'IsometryErrorFunction' +warpByVector1Display.OSPRayScaleFunction = 'PiecewiseFunction' +warpByVector1Display.OSPRayMaterial = 'None' +warpByVector1Display.BlockSelectors = ['/'] +warpByVector1Display.BlockColors = [] +warpByVector1Display.BlockOpacities = [] +warpByVector1Display.Orient = 0 +warpByVector1Display.OrientationMode = 'Direction' +warpByVector1Display.SelectOrientationVectors = 'Displacement dune-VTK' +warpByVector1Display.Scaling = 0 +warpByVector1Display.ScaleMode = 'No Data Scaling Off' +warpByVector1Display.ScaleFactor = 0.4831523358821869 +warpByVector1Display.SelectScaleArray = 'IsometryErrorFunction' +warpByVector1Display.GlyphType = 'Arrow' +warpByVector1Display.UseGlyphTable = 0 +warpByVector1Display.GlyphTableIndexArray = 'IsometryErrorFunction' +warpByVector1Display.UseCompositeGlyphTable = 0 +warpByVector1Display.UseGlyphCullingAndLOD = 0 +warpByVector1Display.LODValues = [] +warpByVector1Display.ColorByLODIndex = 0 +warpByVector1Display.GaussianRadius = 0.024157616794109344 +warpByVector1Display.ShaderPreset = 'Sphere' +warpByVector1Display.CustomTriangleScale = 3 +warpByVector1Display.CustomShader = """ // This custom shader code define a gaussian blur + // Please take a look into vtkSMPointGaussianRepresentation.cxx + // for other custom shader examples + //VTK::Color::Impl + float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy); + float gaussian = exp(-0.5*dist2); + opacity = opacity*gaussian; +""" +warpByVector1Display.Emissive = 0 +warpByVector1Display.ScaleByArray = 0 +warpByVector1Display.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] +warpByVector1Display.ScaleArrayComponent = '' +warpByVector1Display.UseScaleFunction = 1 +warpByVector1Display.ScaleTransferFunction = 'PiecewiseFunction' +warpByVector1Display.OpacityByArray = 0 +warpByVector1Display.OpacityArray = ['POINTS', 'IsometryErrorFunction'] +warpByVector1Display.OpacityArrayComponent = '' +warpByVector1Display.OpacityTransferFunction = 'PiecewiseFunction' +warpByVector1Display.DataAxesGrid = 'GridAxesRepresentation' +warpByVector1Display.SelectionCellLabelBold = 0 +warpByVector1Display.SelectionCellLabelColor = [0.0, 1.0, 0.0] +warpByVector1Display.SelectionCellLabelFontFamily = 'Arial' +warpByVector1Display.SelectionCellLabelFontFile = '' +warpByVector1Display.SelectionCellLabelFontSize = 18 +warpByVector1Display.SelectionCellLabelItalic = 0 +warpByVector1Display.SelectionCellLabelJustification = 'Left' +warpByVector1Display.SelectionCellLabelOpacity = 1.0 +warpByVector1Display.SelectionCellLabelShadow = 0 +warpByVector1Display.SelectionPointLabelBold = 0 +warpByVector1Display.SelectionPointLabelColor = [1.0, 1.0, 0.0] +warpByVector1Display.SelectionPointLabelFontFamily = 'Arial' +warpByVector1Display.SelectionPointLabelFontFile = '' +warpByVector1Display.SelectionPointLabelFontSize = 18 +warpByVector1Display.SelectionPointLabelItalic = 0 +warpByVector1Display.SelectionPointLabelJustification = 'Left' +warpByVector1Display.SelectionPointLabelOpacity = 1.0 +warpByVector1Display.SelectionPointLabelShadow = 0 +warpByVector1Display.PolarAxes = 'PolarAxesRepresentation' +warpByVector1Display.ScalarOpacityFunction = isometryErrorFunctionPWF +warpByVector1Display.ScalarOpacityUnitDistance = 0.4798796485453529 +warpByVector1Display.UseSeparateOpacityArray = 0 +warpByVector1Display.OpacityArrayName = ['POINTS', 'IsometryErrorFunction'] +warpByVector1Display.OpacityComponent = '' +warpByVector1Display.SelectMapper = 'Projected tetra' +warpByVector1Display.SamplingDimensions = [128, 128, 128] +warpByVector1Display.UseFloatingPointFrameBuffer = 1 +warpByVector1Display.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] +warpByVector1Display.NumberOfSteps = 40 +warpByVector1Display.StepSize = 0.25 +warpByVector1Display.NormalizeVectors = 1 +warpByVector1Display.EnhancedLIC = 1 +warpByVector1Display.ColorMode = 'Blend' +warpByVector1Display.LICIntensity = 0.8 +warpByVector1Display.MapModeBias = 0.0 +warpByVector1Display.EnhanceContrast = 'Off' +warpByVector1Display.LowLICContrastEnhancementFactor = 0.0 +warpByVector1Display.HighLICContrastEnhancementFactor = 0.0 +warpByVector1Display.LowColorContrastEnhancementFactor = 0.0 +warpByVector1Display.HighColorContrastEnhancementFactor = 0.0 +warpByVector1Display.AntiAlias = 0 +warpByVector1Display.MaskOnSurface = 1 +warpByVector1Display.MaskThreshold = 0.0 +warpByVector1Display.MaskIntensity = 0.0 +warpByVector1Display.MaskColor = [0.5, 0.5, 0.5] +warpByVector1Display.GenerateNoiseTexture = 0 +warpByVector1Display.NoiseType = 'Gaussian' +warpByVector1Display.NoiseTextureSize = 128 +warpByVector1Display.NoiseGrainSize = 2 +warpByVector1Display.MinNoiseValue = 0.0 +warpByVector1Display.MaxNoiseValue = 0.8 +warpByVector1Display.NumberOfNoiseLevels = 1024 +warpByVector1Display.ImpulseNoiseProbability = 1.0 +warpByVector1Display.ImpulseNoiseBackgroundValue = 0.0 +warpByVector1Display.NoiseGeneratorSeed = 1 +warpByVector1Display.CompositeStrategy = 'AUTO' +warpByVector1Display.UseLICForLOD = 0 +warpByVector1Display.WriteLog = '' + +# init the 'PiecewiseFunction' selected for 'OSPRayScaleFunction' +warpByVector1Display.OSPRayScaleFunction.Points = [0.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] +warpByVector1Display.OSPRayScaleFunction.UseLogScale = 0 + +# init the 'Arrow' selected for 'GlyphType' +warpByVector1Display.GlyphType.TipResolution = 6 +warpByVector1Display.GlyphType.TipRadius = 0.1 +warpByVector1Display.GlyphType.TipLength = 0.35 +warpByVector1Display.GlyphType.ShaftResolution = 6 +warpByVector1Display.GlyphType.ShaftRadius = 0.03 +warpByVector1Display.GlyphType.Invert = 0 + +# init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' +warpByVector1Display.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.07093990594148636, 1.0, 0.5, 0.0] +warpByVector1Display.ScaleTransferFunction.UseLogScale = 0 + +# init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' +warpByVector1Display.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.07093990594148636, 1.0, 0.5, 0.0] +warpByVector1Display.OpacityTransferFunction.UseLogScale = 0 + +# init the 'GridAxesRepresentation' selected for 'DataAxesGrid' +warpByVector1Display.DataAxesGrid.XTitle = 'X Axis' +warpByVector1Display.DataAxesGrid.YTitle = 'Y Axis' +warpByVector1Display.DataAxesGrid.ZTitle = 'Z Axis' +warpByVector1Display.DataAxesGrid.XTitleFontFamily = 'Arial' +warpByVector1Display.DataAxesGrid.XTitleFontFile = '' +warpByVector1Display.DataAxesGrid.XTitleBold = 0 +warpByVector1Display.DataAxesGrid.XTitleItalic = 0 +warpByVector1Display.DataAxesGrid.XTitleFontSize = 12 +warpByVector1Display.DataAxesGrid.XTitleShadow = 0 +warpByVector1Display.DataAxesGrid.XTitleOpacity = 1.0 +warpByVector1Display.DataAxesGrid.YTitleFontFamily = 'Arial' +warpByVector1Display.DataAxesGrid.YTitleFontFile = '' +warpByVector1Display.DataAxesGrid.YTitleBold = 0 +warpByVector1Display.DataAxesGrid.YTitleItalic = 0 +warpByVector1Display.DataAxesGrid.YTitleFontSize = 12 +warpByVector1Display.DataAxesGrid.YTitleShadow = 0 +warpByVector1Display.DataAxesGrid.YTitleOpacity = 1.0 +warpByVector1Display.DataAxesGrid.ZTitleFontFamily = 'Arial' +warpByVector1Display.DataAxesGrid.ZTitleFontFile = '' +warpByVector1Display.DataAxesGrid.ZTitleBold = 0 +warpByVector1Display.DataAxesGrid.ZTitleItalic = 0 +warpByVector1Display.DataAxesGrid.ZTitleFontSize = 12 +warpByVector1Display.DataAxesGrid.ZTitleShadow = 0 +warpByVector1Display.DataAxesGrid.ZTitleOpacity = 1.0 +warpByVector1Display.DataAxesGrid.FacesToRender = 63 +warpByVector1Display.DataAxesGrid.CullBackface = 0 +warpByVector1Display.DataAxesGrid.CullFrontface = 1 +warpByVector1Display.DataAxesGrid.ShowGrid = 0 +warpByVector1Display.DataAxesGrid.ShowEdges = 1 +warpByVector1Display.DataAxesGrid.ShowTicks = 1 +warpByVector1Display.DataAxesGrid.LabelUniqueEdgesOnly = 1 +warpByVector1Display.DataAxesGrid.AxesToLabel = 63 +warpByVector1Display.DataAxesGrid.XLabelFontFamily = 'Arial' +warpByVector1Display.DataAxesGrid.XLabelFontFile = '' +warpByVector1Display.DataAxesGrid.XLabelBold = 0 +warpByVector1Display.DataAxesGrid.XLabelItalic = 0 +warpByVector1Display.DataAxesGrid.XLabelFontSize = 12 +warpByVector1Display.DataAxesGrid.XLabelShadow = 0 +warpByVector1Display.DataAxesGrid.XLabelOpacity = 1.0 +warpByVector1Display.DataAxesGrid.YLabelFontFamily = 'Arial' +warpByVector1Display.DataAxesGrid.YLabelFontFile = '' +warpByVector1Display.DataAxesGrid.YLabelBold = 0 +warpByVector1Display.DataAxesGrid.YLabelItalic = 0 +warpByVector1Display.DataAxesGrid.YLabelFontSize = 12 +warpByVector1Display.DataAxesGrid.YLabelShadow = 0 +warpByVector1Display.DataAxesGrid.YLabelOpacity = 1.0 +warpByVector1Display.DataAxesGrid.ZLabelFontFamily = 'Arial' +warpByVector1Display.DataAxesGrid.ZLabelFontFile = '' +warpByVector1Display.DataAxesGrid.ZLabelBold = 0 +warpByVector1Display.DataAxesGrid.ZLabelItalic = 0 +warpByVector1Display.DataAxesGrid.ZLabelFontSize = 12 +warpByVector1Display.DataAxesGrid.ZLabelShadow = 0 +warpByVector1Display.DataAxesGrid.ZLabelOpacity = 1.0 +warpByVector1Display.DataAxesGrid.XAxisNotation = 'Mixed' +warpByVector1Display.DataAxesGrid.XAxisPrecision = 2 +warpByVector1Display.DataAxesGrid.XAxisUseCustomLabels = 0 +warpByVector1Display.DataAxesGrid.XAxisLabels = [] +warpByVector1Display.DataAxesGrid.YAxisNotation = 'Mixed' +warpByVector1Display.DataAxesGrid.YAxisPrecision = 2 +warpByVector1Display.DataAxesGrid.YAxisUseCustomLabels = 0 +warpByVector1Display.DataAxesGrid.YAxisLabels = [] +warpByVector1Display.DataAxesGrid.ZAxisNotation = 'Mixed' +warpByVector1Display.DataAxesGrid.ZAxisPrecision = 2 +warpByVector1Display.DataAxesGrid.ZAxisUseCustomLabels = 0 +warpByVector1Display.DataAxesGrid.ZAxisLabels = [] +warpByVector1Display.DataAxesGrid.UseCustomBounds = 0 +warpByVector1Display.DataAxesGrid.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + +# init the 'PolarAxesRepresentation' selected for 'PolarAxes' +warpByVector1Display.PolarAxes.Visibility = 0 +warpByVector1Display.PolarAxes.Translation = [0.0, 0.0, 0.0] +warpByVector1Display.PolarAxes.Scale = [1.0, 1.0, 1.0] +warpByVector1Display.PolarAxes.Orientation = [0.0, 0.0, 0.0] +warpByVector1Display.PolarAxes.EnableCustomBounds = [0, 0, 0] +warpByVector1Display.PolarAxes.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] +warpByVector1Display.PolarAxes.EnableCustomRange = 0 +warpByVector1Display.PolarAxes.CustomRange = [0.0, 1.0] +warpByVector1Display.PolarAxes.PolarAxisVisibility = 1 +warpByVector1Display.PolarAxes.RadialAxesVisibility = 1 +warpByVector1Display.PolarAxes.DrawRadialGridlines = 1 +warpByVector1Display.PolarAxes.PolarArcsVisibility = 1 +warpByVector1Display.PolarAxes.DrawPolarArcsGridlines = 1 +warpByVector1Display.PolarAxes.NumberOfRadialAxes = 0 +warpByVector1Display.PolarAxes.AutoSubdividePolarAxis = 1 +warpByVector1Display.PolarAxes.NumberOfPolarAxis = 0 +warpByVector1Display.PolarAxes.MinimumRadius = 0.0 +warpByVector1Display.PolarAxes.MinimumAngle = 0.0 +warpByVector1Display.PolarAxes.MaximumAngle = 90.0 +warpByVector1Display.PolarAxes.RadialAxesOriginToPolarAxis = 1 +warpByVector1Display.PolarAxes.Ratio = 1.0 +warpByVector1Display.PolarAxes.PolarAxisColor = [1.0, 1.0, 1.0] +warpByVector1Display.PolarAxes.PolarArcsColor = [1.0, 1.0, 1.0] +warpByVector1Display.PolarAxes.LastRadialAxisColor = [1.0, 1.0, 1.0] +warpByVector1Display.PolarAxes.SecondaryPolarArcsColor = [1.0, 1.0, 1.0] +warpByVector1Display.PolarAxes.SecondaryRadialAxesColor = [1.0, 1.0, 1.0] +warpByVector1Display.PolarAxes.PolarAxisTitleVisibility = 1 +warpByVector1Display.PolarAxes.PolarAxisTitle = 'Radial Distance' +warpByVector1Display.PolarAxes.PolarAxisTitleLocation = 'Bottom' +warpByVector1Display.PolarAxes.PolarLabelVisibility = 1 +warpByVector1Display.PolarAxes.PolarLabelFormat = '%-#6.3g' +warpByVector1Display.PolarAxes.PolarLabelExponentLocation = 'Labels' +warpByVector1Display.PolarAxes.RadialLabelVisibility = 1 +warpByVector1Display.PolarAxes.RadialLabelFormat = '%-#3.1f' +warpByVector1Display.PolarAxes.RadialLabelLocation = 'Bottom' +warpByVector1Display.PolarAxes.RadialUnitsVisibility = 1 +warpByVector1Display.PolarAxes.ScreenSize = 10.0 +warpByVector1Display.PolarAxes.PolarAxisTitleOpacity = 1.0 +warpByVector1Display.PolarAxes.PolarAxisTitleFontFamily = 'Arial' +warpByVector1Display.PolarAxes.PolarAxisTitleFontFile = '' +warpByVector1Display.PolarAxes.PolarAxisTitleBold = 0 +warpByVector1Display.PolarAxes.PolarAxisTitleItalic = 0 +warpByVector1Display.PolarAxes.PolarAxisTitleShadow = 0 +warpByVector1Display.PolarAxes.PolarAxisTitleFontSize = 12 +warpByVector1Display.PolarAxes.PolarAxisLabelOpacity = 1.0 +warpByVector1Display.PolarAxes.PolarAxisLabelFontFamily = 'Arial' +warpByVector1Display.PolarAxes.PolarAxisLabelFontFile = '' +warpByVector1Display.PolarAxes.PolarAxisLabelBold = 0 +warpByVector1Display.PolarAxes.PolarAxisLabelItalic = 0 +warpByVector1Display.PolarAxes.PolarAxisLabelShadow = 0 +warpByVector1Display.PolarAxes.PolarAxisLabelFontSize = 12 +warpByVector1Display.PolarAxes.LastRadialAxisTextOpacity = 1.0 +warpByVector1Display.PolarAxes.LastRadialAxisTextFontFamily = 'Arial' +warpByVector1Display.PolarAxes.LastRadialAxisTextFontFile = '' +warpByVector1Display.PolarAxes.LastRadialAxisTextBold = 0 +warpByVector1Display.PolarAxes.LastRadialAxisTextItalic = 0 +warpByVector1Display.PolarAxes.LastRadialAxisTextShadow = 0 +warpByVector1Display.PolarAxes.LastRadialAxisTextFontSize = 12 +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextOpacity = 1.0 +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextFontFamily = 'Arial' +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextFontFile = '' +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextBold = 0 +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextItalic = 0 +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextShadow = 0 +warpByVector1Display.PolarAxes.SecondaryRadialAxesTextFontSize = 12 +warpByVector1Display.PolarAxes.EnableDistanceLOD = 1 +warpByVector1Display.PolarAxes.DistanceLODThreshold = 0.7 +warpByVector1Display.PolarAxes.EnableViewAngleLOD = 1 +warpByVector1Display.PolarAxes.ViewAngleLODThreshold = 0.7 +warpByVector1Display.PolarAxes.SmallestVisiblePolarAngle = 0.5 +warpByVector1Display.PolarAxes.PolarTicksVisibility = 1 +warpByVector1Display.PolarAxes.ArcTicksOriginToPolarAxis = 1 +warpByVector1Display.PolarAxes.TickLocation = 'Both' +warpByVector1Display.PolarAxes.AxisTickVisibility = 1 +warpByVector1Display.PolarAxes.AxisMinorTickVisibility = 0 +warpByVector1Display.PolarAxes.ArcTickVisibility = 1 +warpByVector1Display.PolarAxes.ArcMinorTickVisibility = 0 +warpByVector1Display.PolarAxes.DeltaAngleMajor = 10.0 +warpByVector1Display.PolarAxes.DeltaAngleMinor = 5.0 +warpByVector1Display.PolarAxes.PolarAxisMajorTickSize = 0.0 +warpByVector1Display.PolarAxes.PolarAxisTickRatioSize = 0.3 +warpByVector1Display.PolarAxes.PolarAxisMajorTickThickness = 1.0 +warpByVector1Display.PolarAxes.PolarAxisTickRatioThickness = 0.5 +warpByVector1Display.PolarAxes.LastRadialAxisMajorTickSize = 0.0 +warpByVector1Display.PolarAxes.LastRadialAxisTickRatioSize = 0.3 +warpByVector1Display.PolarAxes.LastRadialAxisMajorTickThickness = 1.0 +warpByVector1Display.PolarAxes.LastRadialAxisTickRatioThickness = 0.5 +warpByVector1Display.PolarAxes.ArcMajorTickSize = 0.0 +warpByVector1Display.PolarAxes.ArcTickRatioSize = 0.3 +warpByVector1Display.PolarAxes.ArcMajorTickThickness = 1.0 +warpByVector1Display.PolarAxes.ArcTickRatioThickness = 0.5 +warpByVector1Display.PolarAxes.Use2DMode = 0 +warpByVector1Display.PolarAxes.UseLogAxis = 0 + +# hide data in view +Hide(validation_level6_NC_DuneVTKvtu, renderView1) + +# show color bar/color legend +warpByVector1Display.SetScalarBarVisibility(renderView1, True) + +# update the view to ensure updated data information +renderView1.Update() + +# set scalar coloring +ColorBy(warpByVector1Display, ('POINTS', 'Displacement dune-VTK', 'Magnitude')) + +# Hide the scalar bar for this color map if no visible data is colored by it. +HideScalarBarIfNotNeeded(isometryErrorFunctionLUT, renderView1) + +# rescale color and/or opacity maps used to include current data range +warpByVector1Display.RescaleTransferFunctionToDataRange(True, False) + +# show color bar/color legend +warpByVector1Display.SetScalarBarVisibility(renderView1, True) + +# get 2D transfer function for 'DisplacementduneVTK' +displacementduneVTKTF2D = GetTransferFunction2D('DisplacementduneVTK') +displacementduneVTKTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +displacementduneVTKTF2D.Boxes = [] +displacementduneVTKTF2D.ScalarRangeInitialized = 0 +displacementduneVTKTF2D.Range = [0.0, 1.0, 0.0, 1.0] +displacementduneVTKTF2D.OutputDimensions = [10, 10] + +# get color transfer function/color map for 'DisplacementduneVTK' +displacementduneVTKLUT = GetColorTransferFunction('DisplacementduneVTK') +displacementduneVTKLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +displacementduneVTKLUT.InterpretValuesAsCategories = 0 +displacementduneVTKLUT.AnnotationsInitialized = 0 +displacementduneVTKLUT.ShowCategoricalColorsinDataRangeOnly = 0 +displacementduneVTKLUT.RescaleOnVisibilityChange = 0 +displacementduneVTKLUT.EnableOpacityMapping = 0 +displacementduneVTKLUT.TransferFunction2D = displacementduneVTKTF2D +displacementduneVTKLUT.Use2DTransferFunction = 0 +displacementduneVTKLUT.RGBPoints = [0.13888426365894344, 0.231373, 0.298039, 0.752941, 0.820044164029222, 0.865003, 0.865003, 0.865003, 1.5012040643995004, 0.705882, 0.0156863, 0.14902] +displacementduneVTKLUT.UseLogScale = 0 +displacementduneVTKLUT.UseOpacityControlPointsFreehandDrawing = 0 +displacementduneVTKLUT.ShowDataHistogram = 0 +displacementduneVTKLUT.AutomaticDataHistogramComputation = 0 +displacementduneVTKLUT.DataHistogramNumberOfBins = 10 +displacementduneVTKLUT.ColorSpace = 'Diverging' +displacementduneVTKLUT.UseBelowRangeColor = 0 +displacementduneVTKLUT.BelowRangeColor = [0.0, 0.0, 0.0] +displacementduneVTKLUT.UseAboveRangeColor = 0 +displacementduneVTKLUT.AboveRangeColor = [0.5, 0.5, 0.5] +displacementduneVTKLUT.NanColor = [1.0, 1.0, 0.0] +displacementduneVTKLUT.NanOpacity = 1.0 +displacementduneVTKLUT.Discretize = 1 +displacementduneVTKLUT.NumberOfTableValues = 256 +displacementduneVTKLUT.ScalarRangeInitialized = 1.0 +displacementduneVTKLUT.HSVWrap = 0 +displacementduneVTKLUT.VectorComponent = 0 +displacementduneVTKLUT.VectorMode = 'Magnitude' +displacementduneVTKLUT.AllowDuplicateScalars = 1 +displacementduneVTKLUT.Annotations = [] +displacementduneVTKLUT.ActiveAnnotatedValues = [] +displacementduneVTKLUT.IndexedColors = [] +displacementduneVTKLUT.IndexedOpacities = [] + +# get opacity transfer function/opacity map for 'DisplacementduneVTK' +displacementduneVTKPWF = GetOpacityTransferFunction('DisplacementduneVTK') +displacementduneVTKPWF.Points = [0.13888426365894344, 0.0, 0.5, 0.0, 1.5012040643995004, 1.0, 0.5, 0.0] +displacementduneVTKPWF.AllowDuplicateScalars = 1 +displacementduneVTKPWF.UseLogScale = 0 +displacementduneVTKPWF.ScalarRangeInitialized = 1 + +# convert to log space +displacementduneVTKLUT.MapControlPointsToLogSpace() + +# Properties modified on displacementduneVTKLUT +displacementduneVTKLUT.UseLogScale = 1 + +# Apply a preset using its name. Note this may not work as expected when presets have duplicate names. +displacementduneVTKLUT.ApplyPreset('Viridis (matplotlib)', True) + +# hide color bar/color legend +warpByVector1Display.SetScalarBarVisibility(renderView1, False) + +# set active source +SetActiveSource(validation_level6_NC_DuneVTKvtu) + +# set active source +SetActiveSource(validation_level6_NC_DuneVTKvtu) + +# show data in view +validation_level6_NC_DuneVTKvtuDisplay = Show(validation_level6_NC_DuneVTKvtu, renderView1, 'UnstructuredGridRepresentation') + +# show color bar/color legend +validation_level6_NC_DuneVTKvtuDisplay.SetScalarBarVisibility(renderView1, True) + +# hide color bar/color legend +validation_level6_NC_DuneVTKvtuDisplay.SetScalarBarVisibility(renderView1, False) + +# turn off scalar coloring +ColorBy(validation_level6_NC_DuneVTKvtuDisplay, None) + +# Hide the scalar bar for this color map if no visible data is colored by it. +HideScalarBarIfNotNeeded(isometryErrorFunctionLUT, renderView1) + +# Properties modified on validation_level6_NC_DuneVTKvtuDisplay +validation_level6_NC_DuneVTKvtuDisplay.Opacity = 0.2 + +# set active source +SetActiveSource(warpByVector1) + +# Properties modified on warpByVector1Display +warpByVector1Display.NonlinearSubdivisionLevel = 4 + +# Properties modified on renderView1 +renderView1.OrientationAxesInteractivity = 1 + +# Properties modified on renderView1 +renderView1.OrientationAxesVisibility = 0 + +# Properties modified on renderView1 +renderView1.OrientationAxesInteractivity = 0 + +renderView1.ResetActiveCameraToPositiveZ() + +# reset view to fit data +renderView1.ResetCamera(False) + +renderView1.ResetActiveCameraToNegativeZ() + +# reset view to fit data +renderView1.ResetCamera(False) + +# reset view to fit data +renderView1.ResetCamera(True) + +# reset view to fit data bounds +renderView1.ResetCamera(0.7242339253425598, 5.5557661056518555, -0.041813626885414124, 3.183406352996826, -1.1687347888946533, 0.6730884313583374, True) + +# reset view to fit data +renderView1.ResetCamera(True) + +# Properties modified on warpByVector1Display +warpByVector1Display.Specular = 0.3 + +# Properties modified on warpByVector1Display +warpByVector1Display.Ambient = 0.2 + +# Properties modified on warpByVector1Display +warpByVector1Display.Ambient = 0.5 + +# Properties modified on warpByVector1Display +warpByVector1Display.Ambient = 0.3 + +# Properties modified on warpByVector1Display +warpByVector1Display.Specular = 0.5 + +# Properties modified on warpByVector1Display +warpByVector1Display.Specular = 0.2 + +# export view +# ExportView('/home/klaus/Desktop/RegularGridMinimizer.pdf', view=renderView1, Plottitle='ParaView GL2PS Export', +# Compressoutputfile=0, +# Drawbackground=1, +# Cullhiddenprimitives=1, +# Linewidthscalingfactor=0.714, +# Pointsizescalingfactor=0.714, +# GL2PSdepthsortmethod='Simple sorting (fast, good)', +# Rasterize3Dgeometry=1, +# Dontrasterizecubeaxes=1, +# Rendertextaspaths=1) + + + +####### +# # get active source. +# warpByVector1 = GetActiveSource() + +# # get active view +# renderView1 = GetActiveViewOrCreate('RenderView') + +# # get display properties +# warpByVector1Display = GetDisplayProperties(warpByVector1, view=renderView1) + +# # set scalar coloring using an separate color/opacity maps +# ColorBy(warpByVector1Display, ('POINTS', 'Displacement dune-VTK', 'Magnitude'), True) + +# # get 2D transfer function for 'DisplacementduneVTK' +# displacementduneVTKTF2D = GetTransferFunction2D('DisplacementduneVTK') +# displacementduneVTKTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +# displacementduneVTKTF2D.Boxes = [] +# displacementduneVTKTF2D.ScalarRangeInitialized = 0 +# displacementduneVTKTF2D.Range = [0.0, 1.0, 0.0, 1.0] +# displacementduneVTKTF2D.OutputDimensions = [10, 10] + +# # get color transfer function/color map for 'DisplacementduneVTK' +# displacementduneVTKLUT = GetColorTransferFunction('DisplacementduneVTK') +# displacementduneVTKLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +# displacementduneVTKLUT.InterpretValuesAsCategories = 0 +# displacementduneVTKLUT.AnnotationsInitialized = 0 +# displacementduneVTKLUT.ShowCategoricalColorsinDataRangeOnly = 0 +# displacementduneVTKLUT.RescaleOnVisibilityChange = 0 +# displacementduneVTKLUT.EnableOpacityMapping = 0 +# displacementduneVTKLUT.TransferFunction2D = displacementduneVTKTF2D +# displacementduneVTKLUT.Use2DTransferFunction = 0 +# displacementduneVTKLUT.RGBPoints = [0.13888426365894344, 0.267004, 0.004874, 0.329415, 0.14018693868800136, 0.26851, 0.009605, 0.335427, 0.14150149542403362, 0.269944, 0.014625, 0.341379, 0.14282871896835034, 0.271305, 0.019942, 0.347269, 0.14416804812680054, 0.272594, 0.025563, 0.353093, 0.14552028279568993, 0.273809, 0.031497, 0.358853, 0.1468848512053343, 0.274952, 0.037752, 0.364543, 0.1482625683258423, 0.276022, 0.044167, 0.370164, 0.14965320784405547, 0.277018, 0.050344, 0.375715, 0.15105653139389116, 0.277941, 0.056324, 0.381191, 0.1524733770914437, 0.278791, 0.062145, 0.386592, 0.15390314584734208, 0.279566, 0.067836, 0.391917, 0.15534669157172393, 0.280267, 0.073417, 0.397163, 0.15680340388556102, 0.280894, 0.078907, 0.402329, 0.15827415279066817, 0.281446, 0.08432, 0.407414, 0.15975869669185494, 0.281924, 0.089666, 0.412415, 0.16125678112712044, 0.282327, 0.094955, 0.417331, 0.16276930080722193, 0.282656, 0.100196, 0.42216, 0.1642956161886542, 0.28291, 0.105393, 0.426902, 0.16583663884272695, 0.283091, 0.110553, 0.431554, 0.16739171717393184, 0.283197, 0.11568, 0.436115, 0.16896177993186304, 0.283229, 0.120777, 0.440584, 0.1705465692073631, 0.283187, 0.125848, 0.44496, 0.17214581335561926, 0.283072, 0.130895, 0.449241, 0.17376046750366528, 0.282884, 0.13592, 0.453427, 0.1753898489221541, 0.282623, 0.140926, 0.457517, 0.17703493073719828, 0.28229, 0.145912, 0.46151, 0.17869501735362364, 0.281887, 0.150881, 0.465405, 0.18037110023580868, 0.281412, 0.155834, 0.469201, 0.18206247068029957, 0.280868, 0.160771, 0.472899, 0.1837701388353198, 0.280255, 0.165693, 0.476498, 0.18549382418771615, 0.279574, 0.170599, 0.479997, 0.1872332312848427, 0.278826, 0.17549, 0.483397, 0.188989398964167, 0.278012, 0.180367, 0.486697, 0.19076158465972565, 0.277134, 0.185228, 0.489898, 0.1925508467855629, 0.276194, 0.190074, 0.493001, 0.19435642878228532, 0.275191, 0.194905, 0.496005, 0.19617940900942818, 0.274128, 0.199721, 0.498911, 0.19801948801189523, 0.273006, 0.20452, 0.501721, 0.19987635038629262, 0.271828, 0.209303, 0.504434, 0.2017511051186707, 0.270595, 0.214069, 0.507052, 0.20364295950052552, 0.269308, 0.218818, 0.509577, 0.20555304341641273, 0.267968, 0.223549, 0.512008, 0.20748054921947728, 0.26658, 0.228262, 0.514349, 0.20942662808660623, 0.265145, 0.232956, 0.516599, 0.21139096034168567, 0.263663, 0.237631, 0.518762, 0.21337320928337883, 0.262138, 0.242286, 0.520837, 0.21537455878317513, 0.260571, 0.246922, 0.522828, 0.21739416260410258, 0.258965, 0.251537, 0.524736, 0.21943322692734907, 0.257322, 0.25613, 0.526563, 0.22149088956886404, 0.255645, 0.260703, 0.528312, 0.22356837943995359, 0.253935, 0.265254, 0.529983, 0.225665355278041, 0.252194, 0.269783, 0.531579, 0.2277814576456809, 0.250425, 0.27429, 0.533103, 0.22991795035651894, 0.248629, 0.278775, 0.534556, 0.23207393003054946, 0.246811, 0.283237, 0.535941, 0.23425068429760254, 0.244972, 0.287675, 0.53726, 0.2364472927537507, 0.243113, 0.292092, 0.538516, 0.23866506729381692, 0.241237, 0.296485, 0.539709, 0.2409036436111135, 0.239346, 0.300855, 0.540844, 0.2431626379968067, 0.237441, 0.305202, 0.541921, 0.24544339960487593, 0.235526, 0.309527, 0.542944, 0.2477449640536391, 0.233603, 0.313828, 0.543914, 0.2500687059214728, 0.231674, 0.318106, 0.544834, 0.25241364265321464, 0.229739, 0.322361, 0.545706, 0.25478117473075335, 0.227802, 0.326594, 0.546532, 0.25717091324721214, 0.225863, 0.330805, 0.547314, 0.2595824485834184, 0.223925, 0.334994, 0.548053, 0.2620172209963803, 0.221989, 0.339161, 0.548752, 0.2644742009835375, 0.220057, 0.343307, 0.549413, 0.266954855943104, 0.21813, 0.347432, 0.550038, 0.2694581369718562, 0.21621, 0.351535, 0.550627, 0.27198553912068213, 0.214298, 0.355619, 0.551184, 0.27453664722136245, 0.212395, 0.359683, 0.55171, 0.27711102399476334, 0.210503, 0.363727, 0.552206, 0.27971020695274856, 0.208623, 0.367752, 0.552675, 0.2823330970745241, 0.206756, 0.371758, 0.553117, 0.28498126084589803, 0.204903, 0.375746, 0.553533, 0.28765357853536344, 0.203063, 0.379716, 0.553925, 0.29035164614867753, 0.201239, 0.38367, 0.554294, 0.29307432285333307, 0.19943, 0.387607, 0.554642, 0.2958232347313313, 0.197636, 0.391528, 0.554969, 0.2985979302277625, 0.19586, 0.395433, 0.555276, 0.30139793373892976, 0.1941, 0.399323, 0.555565, 0.3042249175292282, 0.192357, 0.403199, 0.555836, 0.3070776862561134, 0.190631, 0.407061, 0.556089, 0.3099579436972952, 0.188923, 0.41091, 0.556326, 0.31286447198436207, 0.187231, 0.414746, 0.556547, 0.3157990070021972, 0.185556, 0.41857, 0.556753, 0.31876106670417526, 0.183898, 0.422383, 0.556944, 0.3217501433709637, 0.182256, 0.426184, 0.55712, 0.3247680221883539, 0.180629, 0.429975, 0.557282, 0.3278134270970504, 0.179019, 0.433756, 0.55743, 0.3308881769241286, 0.177423, 0.437527, 0.557565, 0.33399097156334334, 0.175841, 0.44129, 0.557685, 0.3371236641170137, 0.174274, 0.445044, 0.557792, 0.3402857399878135, 0.172719, 0.448791, 0.557885, 0.3434766571721331, 0.171176, 0.45253, 0.557965, 0.3466983214022952, 0.169646, 0.456262, 0.55803, 0.34994937045177044, 0.168126, 0.459988, 0.558082, 0.3532317459658282, 0.166617, 0.463708, 0.558119, 0.3565440600471939, 0.165117, 0.467423, 0.558141, 0.35988829093085245, 0.163625, 0.471133, 0.558148, 0.36326388927075665, 0.162142, 0.474838, 0.55814, 0.36667027646393835, 0.160665, 0.47854, 0.558115, 0.3701094869292816, 0.159194, 0.482237, 0.558073, 0.3735800664544908, 0.157729, 0.485932, 0.558013, 0.377084087796456, 0.15627, 0.489624, 0.557936, 0.3806200693386926, 0.154815, 0.493313, 0.55784, 0.3841901228985645, 0.153364, 0.497, 0.557724, 0.38779366203486043, 0.151918, 0.500685, 0.557587, 0.39143006907384365, 0.150476, 0.504369, 0.55743, 0.3951015158106538, 0.149039, 0.508051, 0.55725, 0.3988064498357943, 0.147607, 0.511733, 0.557049, 0.4025470838712246, 0.14618, 0.515413, 0.556823, 0.4063218362527627, 0.144759, 0.519093, 0.556572, 0.4101329614004413, 0.143343, 0.522773, 0.556295, 0.41397983327299515, 0.141935, 0.526453, 0.555991, 0.4178617924876243, 0.140536, 0.530132, 0.555659, 0.421781157492199, 0.139147, 0.533812, 0.555298, 0.42573627104915357, 0.13777, 0.537492, 0.554906, 0.4297294952968039, 0.136408, 0.541173, 0.554483, 0.43375914176744557, 0.135066, 0.544853, 0.554029, 0.4378276171131739, 0.133743, 0.548535, 0.553541, 0.4419342530186344, 0.132444, 0.552216, 0.553018, 0.4460783455755166, 0.131172, 0.555899, 0.552459, 0.4502623697872996, 0.129933, 0.559582, 0.551864, 0.45448455650972375, 0.128729, 0.563265, 0.551229, 0.45874742738695673, 0.127568, 0.566949, 0.550556, 0.46304917993575273, 0.126453, 0.570633, 0.549841, 0.467392383319898, 0.125394, 0.574318, 0.549086, 0.471775201088897, 0.124395, 0.578002, 0.548287, 0.4762002508216477, 0.123463, 0.581687, 0.547445, 0.4806668056294682, 0.122606, 0.585371, 0.546557, 0.48517409991123867, 0.121831, 0.589055, 0.545623, 0.4897248255877781, 0.121148, 0.592739, 0.544641, 0.49431705846128, 0.120565, 0.596422, 0.543611, 0.49895354118099394, 0.120092, 0.600104, 0.54253, 0.50363231328819, 0.119738, 0.603785, 0.5414, 0.5083561691165097, 0.119512, 0.607464, 0.540218, 0.5131243326933554, 0.119423, 0.611141, 0.538982, 0.5179359867195936, 0.119483, 0.614817, 0.537692, 0.5227940048908023, 0.119699, 0.61849, 0.536347, 0.5276963330757127, 0.120081, 0.622161, 0.534946, 0.5326458991238233, 0.120638, 0.625828, 0.533488, 0.5376406101943856, 0.12138, 0.629492, 0.531973, 0.5426834493113325, 0.122312, 0.633153, 0.530398, 0.5477735881037079, 0.123444, 0.636809, 0.528763, 0.5529101540834025, 0.12478, 0.640461, 0.527068, 0.5580962149952833, 0.126326, 0.644107, 0.525311, 0.5633295780007267, 0.128087, 0.647749, 0.523491, 0.5686133686553208, 0.130067, 0.651384, 0.521608, 0.5739453527970633, 0.132268, 0.655014, 0.519661, 0.5793287148816879, 0.134692, 0.658636, 0.517649, 0.5847625706016262, 0.137339, 0.662252, 0.515571, 0.5902459885530998, 0.14021, 0.665859, 0.513427, 0.595782243633646, 0.143303, 0.669459, 0.511215, 0.6013689949309269, 0.146616, 0.67305, 0.508936, 0.6070095790569294, 0.150148, 0.676631, 0.506589, 0.6127016109855338, 0.153894, 0.680203, 0.504172, 0.618448490206166, 0.157851, 0.683765, 0.501686, 0.6242492726974678, 0.162016, 0.687316, 0.499129, 0.6301029641616495, 0.166383, 0.690856, 0.496502, 0.6360130606371179, 0.170948, 0.694384, 0.493803, 0.64197706313899, 0.175707, 0.6979, 0.491033, 0.6479985335874546, 0.180653, 0.701402, 0.488189, 0.6540749259050174, 0.185783, 0.704891, 0.485273, 0.6602098691351714, 0.19109, 0.708366, 0.482284, 0.666402355510532, 0.196571, 0.711827, 0.479221, 0.6726513235923147, 0.202219, 0.715272, 0.476084, 0.6789605054925639, 0.20803, 0.718701, 0.472873, 0.6853272334798376, 0.214, 0.722114, 0.469588, 0.6917553099966984, 0.220124, 0.725509, 0.466226, 0.6982420170391147, 0.226397, 0.728888, 0.462789, 0.7047912287055246, 0.232815, 0.732247, 0.459277, 0.7114018691779996, 0.239374, 0.735588, 0.455688, 0.7180728053429959, 0.24607, 0.73891, 0.452024, 0.7248080213273134, 0.252899, 0.742211, 0.448284, 0.7316046692581637, 0.259857, 0.745492, 0.444467, 0.7384668083420066, 0.266941, 0.748751, 0.440573, 0.745391537038756, 0.274149, 0.751988, 0.436601, 0.7523829910493842, 0.281477, 0.755203, 0.432552, 0.7594382141551639, 0.288921, 0.758394, 0.428426, 0.7665614199930958, 0.296479, 0.761561, 0.424223, 0.7737514384570766, 0.304148, 0.764704, 0.419943, 0.7810070371238121, 0.311925, 0.767822, 0.415586, 0.7883325493019095, 0.319809, 0.770914, 0.411152, 0.7957248775217641, 0.327796, 0.77398, 0.40664, 0.8031884367518671, 0.335885, 0.777018, 0.402049, 0.8107200711517398, 0.344074, 0.780029, 0.397381, 0.8183242788886144, 0.35236, 0.783011, 0.392636, 0.8259998108437521, 0.360741, 0.785964, 0.387814, 0.8337453513731921, 0.369214, 0.788888, 0.382914, 0.8415655263967217, 0.377779, 0.791781, 0.377939, 0.8494570292848724, 0.386433, 0.794644, 0.372886, 0.8574245731314847, 0.395174, 0.797475, 0.367757, 0.8654647889946623, 0.404001, 0.800275, 0.362552, 0.8735824787850683, 0.412913, 0.803041, 0.357269, 0.8817763090359193, 0.421908, 0.805774, 0.35191, 0.8900448752630242, 0.430983, 0.808473, 0.346476, 0.8983931157562258, 0.440137, 0.811138, 0.340967, 0.9068175006024546, 0.449368, 0.813768, 0.335384, 0.9153230611521249, 0.458674, 0.816363, 0.329727, 0.9239062009720274, 0.468053, 0.818921, 0.323998, 0.9325720462268475, 0.477504, 0.821444, 0.318195, 0.9413191734060677, 0.487026, 0.823929, 0.312321, 0.9501460831862382, 0.496615, 0.826376, 0.306377, 0.9590580473203706, 0.506271, 0.828786, 0.300362, 0.9680512975343356, 0.515992, 0.831158, 0.294279, 0.9771312049257292, 0.525776, 0.833491, 0.288127, 0.9862939302084405, 0.535621, 0.835785, 0.281908, 0.9955449456967685, 0.545524, 0.838039, 0.275626, 1.0048827317561648, 0.555484, 0.840254, 0.269281, 1.0143056878198, 0.565498, 0.84243, 0.262877, 1.0238194416213033, 0.575563, 0.844566, 0.256415, 1.033419970429907, 0.585678, 0.846661, 0.249897, 1.0431130080321702, 0.595839, 0.848717, 0.243329, 1.0528944558901863, 0.606045, 0.850733, 0.236712, 1.062770155841981, 0.616293, 0.852709, 0.230052, 1.072738485638099, 0.626579, 0.854645, 0.223353, 1.0827977366317674, 0.636902, 0.856542, 0.21662, 1.0929539165751945, 0.647257, 0.8584, 0.209861, 1.1032027310985248, 0.657642, 0.860219, 0.203082, 1.1135503011682315, 0.668054, 0.861999, 0.196293, 1.1239922514883631, 0.678489, 0.863742, 0.189503, 1.134534818373148, 0.688944, 0.865448, 0.182725, 1.1451762700290444, 0.699415, 0.867117, 0.175971, 1.1559147824311262, 0.709898, 0.868751, 0.169257, 1.1667567690113314, 0.720391, 0.87035, 0.162603, 1.1776976454180035, 0.730889, 0.871916, 0.156029, 1.1887439459422569, 0.741388, 0.873449, 0.149561, 1.1998909998417207, 0.751884, 0.874951, 0.143228, 1.211145464544241, 0.762373, 0.876424, 0.137064, 1.222502581288726, 0.772852, 0.877868, 0.131109, 1.2339691329602271, 0.783315, 0.879285, 0.125405, 1.245543235985196, 0.79376, 0.880678, 0.120005, 1.2572229064752396, 0.804182, 0.882046, 0.114965, 1.2690151199562907, 0.814576, 0.883393, 0.110347, 1.280914890289232, 0.82494, 0.88472, 0.106217, 1.2929293244516642, 0.83527, 0.886029, 0.102646, 1.3050533423421917, 0.845561, 0.887322, 0.099702, 1.3172941848672497, 0.85581, 0.888601, 0.097452, 1.3296498412630218, 0.866013, 0.889868, 0.095953, 1.3421181936769844, 0.876168, 0.891125, 0.09525, 1.3547066886647299, 0.886271, 0.892374, 0.095374, 1.3674100033928986, 0.89632, 0.893616, 0.096335, 1.3802357247451622, 0.906311, 0.894855, 0.098125, 1.3931784295809833, 0.916242, 0.896091, 0.100717, 1.4062458477565516, 0.926106, 0.89733, 0.104071, 1.4194358327291279, 0.935904, 0.89857, 0.108131, 1.43274612363599, 0.945636, 0.899815, 0.112838, 1.4461846698691572, 0.9553, 0.901065, 0.118128, 1.4597457891654002, 0.964894, 0.902323, 0.123941, 1.473437580720618, 0.974417, 0.90359, 0.130215, 1.4872542551910566, 0.983868, 0.904867, 0.136897, 1.5012040643995004, 0.993248, 0.906157, 0.143936] +# displacementduneVTKLUT.UseLogScale = 1 +# displacementduneVTKLUT.UseOpacityControlPointsFreehandDrawing = 0 +# displacementduneVTKLUT.ShowDataHistogram = 0 +# displacementduneVTKLUT.AutomaticDataHistogramComputation = 0 +# displacementduneVTKLUT.DataHistogramNumberOfBins = 10 +# displacementduneVTKLUT.ColorSpace = 'Diverging' +# displacementduneVTKLUT.UseBelowRangeColor = 0 +# displacementduneVTKLUT.BelowRangeColor = [0.0, 0.0, 0.0] +# displacementduneVTKLUT.UseAboveRangeColor = 0 +# displacementduneVTKLUT.AboveRangeColor = [0.5, 0.5, 0.5] +# displacementduneVTKLUT.NanColor = [1.0, 0.0, 0.0] +# displacementduneVTKLUT.NanOpacity = 1.0 +# displacementduneVTKLUT.Discretize = 1 +# displacementduneVTKLUT.NumberOfTableValues = 256 +# displacementduneVTKLUT.ScalarRangeInitialized = 1.0 +# displacementduneVTKLUT.HSVWrap = 0 +# displacementduneVTKLUT.VectorComponent = 0 +# displacementduneVTKLUT.VectorMode = 'Magnitude' +# displacementduneVTKLUT.AllowDuplicateScalars = 1 +# displacementduneVTKLUT.Annotations = [] +# displacementduneVTKLUT.ActiveAnnotatedValues = [] +# displacementduneVTKLUT.IndexedColors = [] +# displacementduneVTKLUT.IndexedOpacities = [] + +# # Hide the scalar bar for this color map if no visible data is colored by it. +# HideScalarBarIfNotNeeded(displacementduneVTKLUT, renderView1) + +# # rescale color and/or opacity maps used to include current data range +# warpByVector1Display.RescaleTransferFunctionToDataRange(True, False) + +# # show color bar/color legend +# warpByVector1Display.SetScalarBarVisibility(renderView1, True) + +# # get separate 2D transfer function for 'DisplacementduneVTK' +# separate_warpByVector1Display_DisplacementduneVTKTF2D = GetTransferFunction2D('DisplacementduneVTK', warpByVector1Display, separate=True) +# separate_warpByVector1Display_DisplacementduneVTKTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +# separate_warpByVector1Display_DisplacementduneVTKTF2D.Boxes = [] +# separate_warpByVector1Display_DisplacementduneVTKTF2D.ScalarRangeInitialized = 0 +# separate_warpByVector1Display_DisplacementduneVTKTF2D.Range = [0.0, 1.0, 0.0, 1.0] +# separate_warpByVector1Display_DisplacementduneVTKTF2D.OutputDimensions = [10, 10] + +# # get separate color transfer function/color map for 'DisplacementduneVTK' +# separate_warpByVector1Display_DisplacementduneVTKLUT = GetColorTransferFunction('DisplacementduneVTK', warpByVector1Display, separate=True) +# separate_warpByVector1Display_DisplacementduneVTKLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" +# separate_warpByVector1Display_DisplacementduneVTKLUT.InterpretValuesAsCategories = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.AnnotationsInitialized = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.ShowCategoricalColorsinDataRangeOnly = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.RescaleOnVisibilityChange = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.EnableOpacityMapping = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.TransferFunction2D = separate_warpByVector1Display_DisplacementduneVTKTF2D +# separate_warpByVector1Display_DisplacementduneVTKLUT.Use2DTransferFunction = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.RGBPoints = [0.016965557100507393, 0.231373, 0.298039, 0.752941, 0.25047902350935686, 0.865003, 0.865003, 0.865003, 0.4839924899182063, 0.705882, 0.0156863, 0.14902] +# separate_warpByVector1Display_DisplacementduneVTKLUT.UseLogScale = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.UseOpacityControlPointsFreehandDrawing = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.ShowDataHistogram = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.AutomaticDataHistogramComputation = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.DataHistogramNumberOfBins = 10 +# separate_warpByVector1Display_DisplacementduneVTKLUT.ColorSpace = 'Diverging' +# separate_warpByVector1Display_DisplacementduneVTKLUT.UseBelowRangeColor = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.BelowRangeColor = [0.0, 0.0, 0.0] +# separate_warpByVector1Display_DisplacementduneVTKLUT.UseAboveRangeColor = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.AboveRangeColor = [0.5, 0.5, 0.5] +# separate_warpByVector1Display_DisplacementduneVTKLUT.NanColor = [1.0, 1.0, 0.0] +# separate_warpByVector1Display_DisplacementduneVTKLUT.NanOpacity = 1.0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.Discretize = 1 +# separate_warpByVector1Display_DisplacementduneVTKLUT.NumberOfTableValues = 256 +# separate_warpByVector1Display_DisplacementduneVTKLUT.ScalarRangeInitialized = 1.0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.HSVWrap = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.VectorComponent = 0 +# separate_warpByVector1Display_DisplacementduneVTKLUT.VectorMode = 'Magnitude' +# separate_warpByVector1Display_DisplacementduneVTKLUT.AllowDuplicateScalars = 1 +# separate_warpByVector1Display_DisplacementduneVTKLUT.Annotations = [] +# separate_warpByVector1Display_DisplacementduneVTKLUT.ActiveAnnotatedValues = [] +# separate_warpByVector1Display_DisplacementduneVTKLUT.IndexedColors = [] +# separate_warpByVector1Display_DisplacementduneVTKLUT.IndexedOpacities = [] + +# # get separate opacity transfer function/opacity map for 'DisplacementduneVTK' +# separate_warpByVector1Display_DisplacementduneVTKPWF = GetOpacityTransferFunction('DisplacementduneVTK', warpByVector1Display, separate=True) +# separate_warpByVector1Display_DisplacementduneVTKPWF.Points = [0.016965557100507393, 0.0, 0.5, 0.0, 0.4839924899182063, 1.0, 0.5, 0.0] +# separate_warpByVector1Display_DisplacementduneVTKPWF.AllowDuplicateScalars = 1 +# separate_warpByVector1Display_DisplacementduneVTKPWF.UseLogScale = 0 +# separate_warpByVector1Display_DisplacementduneVTKPWF.ScalarRangeInitialized = 1 + +# # Apply a preset using its name. Note this may not work as expected when presets have duplicate names. +# separate_warpByVector1Display_DisplacementduneVTKLUT.ApplyPreset('Viridis (matplotlib)', True) + +# # hide color bar/color legend +# warpByVector1Display.SetScalarBarVisibility(renderView1, False) + + +##################################### + +# get layout +layout1 = GetLayout() + +#-------------------------------- +# saving layout sizes for layouts + +# layout/tab size in pixels +layout1.SetSize(2756, 1165) + +#----------------------------------- +# saving camera placements for views + +# current camera placement for renderView1 +renderView1.InteractionMode = '2D' +renderView1.CameraPosition = [-2.2403573446265757, 13.577405127683948, -5.303558746361971] +renderView1.CameraFocalPoint = [3.140000104904175, 1.570796363055706, -0.24782317876815796] +renderView1.CameraViewUp = [0.12586597003697914, -0.3365546684060209, -0.9332141837545996] +renderView1.CameraParallelScale = 2.060390665888721 + +ExportView(outputName, view=renderView1) + +#================================================================ +# addendum: following script captures some of the application +# state to faithfully reproduce the visualization during playback +#================================================================ + + + +#-------------------------------------------- +# uncomment the following to render all views +# RenderAllViews() +# alternatively, if you want to write images, you can use SaveScreenshot(...). \ No newline at end of file diff --git a/experiment/macro-problem/validation/validation.py b/experiment/macro-problem/validation/validation.py new file mode 100644 index 0000000000000000000000000000000000000000..95fd2bf48329baa68bd086d42d8015cc4e2f7c89 --- /dev/null +++ b/experiment/macro-problem/validation/validation.py @@ -0,0 +1,282 @@ +import math +import numpy as np + +class ParameterSet(dict): + def __init__(self, *args, **kwargs): + super(ParameterSet, self).__init__(*args, **kwargs) + self.__dict__ = self + +parameterSet = ParameterSet() +############################################# +# Paths +############################################# +parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/outputs_validation' +parameterSet.baseName= 'validation' + +############################################# +# Grid parameters +############################################# +nX=1 +nY=1 + +parameterSet.structuredGrid = 'simplex' +parameterSet.lower = '0 0' +# parameterSet.upper = '3.14159265359 3.14159265359' # pi +parameterSet.upper = '6.28 3.14159265359' # pi +parameterSet.elements = str(nX)+' '+ str(nY) + +parameterSet.macroGridLevel = 2 +############################################# +# GFE parameters +############################################# +parameterSet.order = 1 + +parameterSet.conforming_DiscreteJacobian = 1 + +parameterSet.measure_analyticalError = True +parameterSet.measure_isometryError = True + +# Compare energy values. +parameterSet.compare_EnergyValues = True +parameterSet.analytical_energy = 9.253 +############################################# +# Solver parameters +############################################# +# Tolerance of the multigrid solver +parameterSet.tolerance = 1e-12 +# Maximum number of multigrid iterations +parameterSet.maxProximalNewtonSteps = 200 +# Initial regularization +parameterSet.initialRegularization = 200 +# Measure convergence +parameterSet.instrumented = 0 +############################ +# Problem specifications +############################ +# Dimension of the domain (only used for numerical-test python files) +parameterSet.dim = 2 + +# # Dimension of the target space +# parameterSet.targetDim = 3 +# parameterSet.targetSpace = 'BendingIsometry' + +############################################# +# Effective prestrain +############################################ +# parameterSet.prestrainFlag = True +# parameterSet.macroscopically_varying_microstructure = False +# parameterSet.read_effectiveQuantities_from_Parset = True # Otherwise the Micro/Cell-Problem is solved once to obtain the quantities. + + +# # parameterSet.effectivePrestrain = '1.0 1.0 0.0' # b1 b2 b12 #deprecated + +# effectivePrestrain= np.array([[1.0, 0.0], +# [0.0, 1.0]]); + + +# ############################################# +# # Effective elastic moduli +# ############################################ +# # input-vector: [q_1,q_2,q_3,q_12,q_13,q_23] +# # is assembled into a matrix where the off-diagonal entries are divided by 2 (compare with definition in the paper) +# # ( q_1 , 0.5*q_12 , 0.5*q_13 ) +# # ( 0.5*q_12 , q_2 , 0.5*q_23 ) +# # ( 0.5*q_13 , 0.5*q_23 , q_3 ) + +# # parameterSet.effectiveQuadraticForm = '1.0 4.0 2.0 1.0 0.0 0.0' #deprecated + +# effectiveQuadraticForm = np.array([[1.0, 0.5, 0.0], +# [0.5, 4.0, 0.0], +# [0.0, 0.0, 2.0]]); + + + + +############################################# +# MICROSTRUCTURE +############################################ +parameterSet.printMicroOutput = True +parameterSet.VTKwriteMacroPhaseIndicator = False +parameterSet.MacroPhaseSubsamplingRefinement = 3 + +# Microstructure used: Isotropic matrix material (phase 2) with prestrained fibers (phase 1) in the top layer aligned with the e2-direction. +class GlobalMicrostructure: + """ Class that represents the global microstructure. + + The global microstructure can be defined individually + for different (finitely many) macroscopic phases. + Each macroscopic phase corresponds to a 'LocalMicrostructure_' + sub-class that defines the necessary data for the local + micro-problem. + + Currently, there are three possibilities for the LocalMicrostructure: + (1) Read the effective quantities (Qhom,Beff) from this parset. + (Constant local microstructure) + (2) Solve the micro-problem once to obtain the effective quantities. + (Constant local microstructure) + (3) Solve for micro-problem for each macroscopic quadrature point. + (Macroscopocally varying local microstructure)) + """ + def __init__(self,macroPoint=[0,0]): + self.macroPhases = 1 + + # define first local microstructure options. + self.macroPhase1_constantMicrostructure = True + self.macroPhase1_readEffectiveQuantities = True; + + + def macroPhaseIndicator(self,y): #y :macroscopic point + """ Indicatorfunction that determines the domains + i.e. macro-phases of different local microstructures. + """ + return 1; + + # Represents the local microstructure in Phase 1 + class LocalMicrostructure_1: + def __init__(self,macroPoint=[0,0]): + # gamma = 1.0 + # self.macroPoint = macroPoint + self.gamma = 1.0 #in the future this might change depending on macroPoint. + self.phases = 2 #in the future this might change depending on macroPoint. + + # self.effectivePrestrain= np.array([[1.0, 0.0], + # [0.0, 1.0]]); + + # self.effectiveQuadraticForm = np.array([[1.0, 0.5, 0.0], + # [0.5, 4.0, 0.0], + # [0.0, 0.0, 2.0]]); + + # TEST: + self.effectivePrestrain= np.array([[0.456, 0.0], + [0.0, 0.456]]); + + self.effectiveQuadraticForm = np.array([[16.62, 0.046, 0.0], + [0.046, 16.62, 0.0], + [0.0, 0.0, 14.38]]); + + + +############################################# +# VTK/Output +############################################# +# Write discrete solution as .vtk-File +parameterSet.writeVTK = 1 +parameterSet.vtkwrite_analyticalSolution = 1 +parameterSet.vtkWrite_analyticalSurfaceNormal = 0 + +# The grid can be refined several times for a higher resolution in the VTK-file. +parameterSet.subsamplingRefinement = 0 + +# Write Dof-Vector to .txt-file +parameterSet.writeDOFvector = 0 +#############################################f +# Dirichlet boundary indicator +############################################# + +# Constraint y=0 boundary +# def dirichlet_indicator(x) : +# if((x[1] <= 0.01) ): +# return True +# else: +# return False + +def dirichlet_indicator(x) : + return False + + +############################################# +# Initial iterate function +############################################# +def f(x): + return [x[0], x[1], 0] + + +def df(x): + return ((1,0), + (0,1), + (0,0)) + +#start with analytical solution: +# def f(x): +# return u(x) + +# def df(x): +# return du(x) + +fdf = (f, df) + +############################################# +# Force +############################################ +parameterSet.assemble_force_term = False + + +def force(x): + return [0, 0, 0] +############################################# +# Analytical reference Solution +############################################# + +#Rotation around z-axis: +def R(alpha): + return np.array([[math.cos(alpha), -math.sin(alpha), 0], + [math.sin(alpha), math.cos(alpha), 0], + [0, 0, 1] + ]) +#Rotation around z-axis: +def R_z(alpha): + return np.array([[math.cos(alpha), -math.sin(alpha), 0], + [math.sin(alpha), math.cos(alpha), 0], + [0, 0, 1] + ]) + +#Rotation around x-axis: +def R_x(alpha): + return np.array([[1,0,0], + [0 , math.cos(alpha), -math.sin(alpha)], + [0 , math.sin(alpha), math.cos(alpha)] + ]) + +#Rotate solution +alpha= math.pi/2.0 + +kappa = 9.0/8.0 + +def deformation(x): + mat = np.array([-(1.0/kappa)*math.sin(-kappa*x[1]), -x[0], 1.0*((1.0/kappa)*math.cos(-kappa*x[1])-(1.0/kappa))] ) + + rotation = np.dot(R_x(0),R_z(alpha)) + out = np.dot(rotation, mat) + + return out + + +def deformationGradient(x): + dmat = np.array([[0, math.cos(-kappa*x[1])], + [-1.0, 0], + [0, 1.0*(math.sin(-kappa*x[1])) ]]) + + rotation = np.dot(R_x(0),R_z(alpha)) + out = np.dot(rotation,dmat) + + # out = np.dot(S_z,out) + + return out + +def displacement(x): + return deformation(x) - np.array([x[0], x[1], 0]) + +def displacementGradient(x): + return deformationGradient(x) - np.array([[1.0, 0.0], [0.0,1.0], [0.0,0.0]]) + + +def surfaceNormal(x): + dmat = deformationGradient(x); + + normal = np.array([(dmat[1][0]*dmat[2][1])-(dmat[1][1]*dmat[2][0]), (dmat[2][0]*dmat[0][1]) - (dmat[0][0]*dmat[2][1]), (dmat[0][0]*dmat[1][1]) - (dmat[0][1]*dmat[1][0]) ]) + + return normal + + +# udu = (u, du) +analyticalSol = (displacement, displacementGradient) \ No newline at end of file diff --git a/experiment/macro-problem/variableBC/ParaviewVariableBC.py b/experiment/macro-problem/variableBC/ParaviewVariableBC.py new file mode 100644 index 0000000000000000000000000000000000000000..d699b6dfdd91be89ea409150e538fc9f3402ca71 --- /dev/null +++ b/experiment/macro-problem/variableBC/ParaviewVariableBC.py @@ -0,0 +1,1916 @@ +#### import the simple module from the paraview +from paraview.simple import * +# from paraview import * +#### disable automatic camera reset on 'Show' +paraview.simple._DisableFirstRenderCameraReset() + + +gridLevel = 3 + +AddGlyph = True +# AddGlyph = False + +#Boundary length segment parameter +deltaArray = [0.25,0.5,1.0,1.5,2.0] +deltaArray = [1.5] + + + +for i in range(0, len(deltaArray)): + # Reset/Reopen Session. + Disconnect() + Connect() + ResetSession() + + + + delta = deltaArray[i] + + """" + remove decimal points for string + """ + # deltaString = str(delta); + deltaString = (str(delta)).replace('.', '') + + print('deltaString:', deltaString) + + + basePath = '/home/klaus/Desktop/Dune_TestTest/dune-microstructure/outputs_cylindrical_2variableBC/' + experimentName = 'cylindrical_2variableBC_delta' + deltaString + '_level'+ str(gridLevel) + '_NC.vtu' + fileName = basePath + experimentName + print('fileName:', fileName) + # fileName = ['/home/klaus/Desktop/Dune_TestTest/dune-microstructure/outputs_cylindrical_2variableBC/cylindrical_2variableBC_delta01_level3_NC.vtu'] + + outputPath = '/home/klaus/Desktop/' + outputName = outputPath + 'VariableBC_delta' + deltaString + + if AddGlyph: + outputName = outputName + '_normalfield' + + + #----------------------- Create Box to visualize boundary conditions: + # create a new 'Box' + box1 = Box(registrationName='Box1') + + # get active view + renderView1 = GetActiveViewOrCreate('RenderView') + + # show data in view + box1Display = Show(box1, renderView1, 'GeometryRepresentation') + + # trace defaults for the display properties. + box1Display.Representation = 'Surface' + box1Display.ColorArrayName = [None, ''] + box1Display.SelectTCoordArray = 'TCoords' + box1Display.SelectNormalArray = 'Normals' + box1Display.SelectTangentArray = 'None' + box1Display.OSPRayScaleArray = 'Normals' + box1Display.OSPRayScaleFunction = 'PiecewiseFunction' + box1Display.SelectOrientationVectors = 'None' + box1Display.ScaleFactor = 0.1 + box1Display.SelectScaleArray = 'None' + box1Display.GlyphType = 'Arrow' + box1Display.GlyphTableIndexArray = 'None' + box1Display.GaussianRadius = 0.005 + box1Display.SetScaleArray = ['POINTS', 'Normals'] + box1Display.ScaleTransferFunction = 'PiecewiseFunction' + box1Display.OpacityArray = ['POINTS', 'Normals'] + box1Display.OpacityTransferFunction = 'PiecewiseFunction' + box1Display.DataAxesGrid = 'GridAxesRepresentation' + box1Display.PolarAxes = 'PolarAxesRepresentation' + + # init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' + box1Display.ScaleTransferFunction.Points = [-1.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + # init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' + box1Display.OpacityTransferFunction.Points = [-1.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + + # Properties modified on box1 + box1.XLength = 2.0 + + # update the view to ensure updated data information + renderView1.Update() + + # Properties modified on box1 + box1.XLength = 0.1 + box1.YLength = delta + box1.ZLength = 0.1 + + # update the view to ensure updated data information + renderView1.Update() + + # Properties modified on box1Display + box1Display.Position = [-1.0, 0.0, 0.0] + + # Properties modified on box1Display.DataAxesGrid + box1Display.DataAxesGrid.Position = [-1.0, 0.0, 0.0] + + # Properties modified on box1Display.PolarAxes + box1Display.PolarAxes.Translation = [-1.0, 0.0, 0.0] + + # update the view to ensure updated data information + renderView1.Update() + #------------------------------------------------------------------------------- + + + + # create a new 'XML Unstructured Grid Reader' + cylindrical_2variableBC_delta15_level3_NCvtu = XMLUnstructuredGridReader(registrationName=experimentName, FileName=[fileName]) + cylindrical_2variableBC_delta15_level3_NCvtu.CellArrayStatus = [] + cylindrical_2variableBC_delta15_level3_NCvtu.PointArrayStatus = ['Displacement dune-VTK', 'IsometryErrorFunction', 'SurfaceNormalDiscrete'] + cylindrical_2variableBC_delta15_level3_NCvtu.TimeArray = 'TimeValue' + + # Properties modified on cylindrical_2variableBC_delta15_level3_NCvtu + cylindrical_2variableBC_delta15_level3_NCvtu.TimeArray = 'None' + + # get active view + renderView1 = GetActiveViewOrCreate('RenderView') + + # show data in view + cylindrical_2variableBC_delta15_level3_NCvtuDisplay = Show(cylindrical_2variableBC_delta15_level3_NCvtu, renderView1, 'UnstructuredGridRepresentation') + + # get 2D transfer function for 'IsometryErrorFunction' + isometryErrorFunctionTF2D = GetTransferFunction2D('IsometryErrorFunction') + isometryErrorFunctionTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" + isometryErrorFunctionTF2D.Boxes = [] + isometryErrorFunctionTF2D.ScalarRangeInitialized = 0 + isometryErrorFunctionTF2D.Range = [0.0, 1.0, 0.0, 1.0] + isometryErrorFunctionTF2D.OutputDimensions = [10, 10] + + # get color transfer function/color map for 'IsometryErrorFunction' + isometryErrorFunctionLUT = GetColorTransferFunction('IsometryErrorFunction') + isometryErrorFunctionLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" + isometryErrorFunctionLUT.InterpretValuesAsCategories = 0 + isometryErrorFunctionLUT.AnnotationsInitialized = 0 + isometryErrorFunctionLUT.ShowCategoricalColorsinDataRangeOnly = 0 + isometryErrorFunctionLUT.RescaleOnVisibilityChange = 0 + isometryErrorFunctionLUT.EnableOpacityMapping = 0 + isometryErrorFunctionLUT.TransferFunction2D = isometryErrorFunctionTF2D + isometryErrorFunctionLUT.Use2DTransferFunction = 0 + isometryErrorFunctionLUT.RGBPoints = [0.0, 0.231373, 0.298039, 0.752941, 0.030321702361106873, 0.865003, 0.865003, 0.865003, 0.060643404722213745, 0.705882, 0.0156863, 0.14902] + isometryErrorFunctionLUT.UseLogScale = 0 + isometryErrorFunctionLUT.UseOpacityControlPointsFreehandDrawing = 0 + isometryErrorFunctionLUT.ShowDataHistogram = 0 + isometryErrorFunctionLUT.AutomaticDataHistogramComputation = 0 + isometryErrorFunctionLUT.DataHistogramNumberOfBins = 10 + isometryErrorFunctionLUT.ColorSpace = 'Diverging' + isometryErrorFunctionLUT.UseBelowRangeColor = 0 + isometryErrorFunctionLUT.BelowRangeColor = [0.0, 0.0, 0.0] + isometryErrorFunctionLUT.UseAboveRangeColor = 0 + isometryErrorFunctionLUT.AboveRangeColor = [0.5, 0.5, 0.5] + isometryErrorFunctionLUT.NanColor = [1.0, 1.0, 0.0] + isometryErrorFunctionLUT.NanOpacity = 1.0 + isometryErrorFunctionLUT.Discretize = 1 + isometryErrorFunctionLUT.NumberOfTableValues = 256 + isometryErrorFunctionLUT.ScalarRangeInitialized = 1.0 + isometryErrorFunctionLUT.HSVWrap = 0 + isometryErrorFunctionLUT.VectorComponent = 0 + isometryErrorFunctionLUT.VectorMode = 'Magnitude' + isometryErrorFunctionLUT.AllowDuplicateScalars = 1 + isometryErrorFunctionLUT.Annotations = [] + isometryErrorFunctionLUT.ActiveAnnotatedValues = [] + isometryErrorFunctionLUT.IndexedColors = [] + isometryErrorFunctionLUT.IndexedOpacities = [] + + # get opacity transfer function/opacity map for 'IsometryErrorFunction' + isometryErrorFunctionPWF = GetOpacityTransferFunction('IsometryErrorFunction') + isometryErrorFunctionPWF.Points = [0.0, 0.0, 0.5, 0.0, 0.060643404722213745, 1.0, 0.5, 0.0] + isometryErrorFunctionPWF.AllowDuplicateScalars = 1 + isometryErrorFunctionPWF.UseLogScale = 0 + isometryErrorFunctionPWF.ScalarRangeInitialized = 1 + + # trace defaults for the display properties. + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Selection = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Representation = 'Surface' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ColorArrayName = ['POINTS', 'IsometryErrorFunction'] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.LookupTable = isometryErrorFunctionLUT + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MapScalars = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MultiComponentsMapping = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.InterpolateScalarsBeforeMapping = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Opacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PointSize = 2.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.LineWidth = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.RenderLinesAsTubes = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.RenderPointsAsSpheres = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Interpolation = 'Gouraud' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Specular = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SpecularColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SpecularPower = 100.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Luminosity = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Ambient = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Diffuse = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Roughness = 0.3 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Metallic = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.EdgeTint = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Anisotropy = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.AnisotropyRotation = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BaseIOR = 1.5 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoatStrength = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoatIOR = 2.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoatRoughness = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoatColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectTCoordArray = 'None' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectNormalArray = 'None' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectTangentArray = 'None' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Texture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.RepeatTextures = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.InterpolateTextures = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SeamlessU = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SeamlessV = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseMipmapTextures = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ShowTexturesOnBackface = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BaseColorTexture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NormalTexture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NormalScale = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoatNormalTexture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoatNormalScale = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MaterialTexture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OcclusionStrength = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.AnisotropyTexture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.EmissiveTexture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.EmissiveFactor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.FlipTextures = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BackfaceRepresentation = 'Follow Frontface' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BackfaceAmbientColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BackfaceOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Position = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Scale = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Orientation = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Origin = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoordinateShiftScaleMethod = 'Always Auto Shift Scale' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Pickable = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Triangulate = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseShaderReplacements = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ShaderReplacements = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NonlinearSubdivisionLevel = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseDataPartitions = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OSPRayUseScaleArray = 'All Approximate' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OSPRayScaleArray = 'IsometryErrorFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OSPRayScaleFunction = 'PiecewiseFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OSPRayMaterial = 'None' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BlockSelectors = ['/'] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BlockColors = [] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BlockOpacities = [] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Orient = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OrientationMode = 'Direction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectOrientationVectors = 'Displacement dune-VTK' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Scaling = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleMode = 'No Data Scaling Off' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleFactor = 0.2 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectScaleArray = 'IsometryErrorFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType = 'Arrow' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseGlyphTable = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphTableIndexArray = 'IsometryErrorFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseCompositeGlyphTable = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseGlyphCullingAndLOD = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.LODValues = [] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ColorByLODIndex = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GaussianRadius = 0.01 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ShaderPreset = 'Sphere' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CustomTriangleScale = 3 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CustomShader = """ // This custom shader code define a gaussian blur + // Please take a look into vtkSMPointGaussianRepresentation.cxx + // for other custom shader examples + //VTK::Color::Impl + float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy); + float gaussian = exp(-0.5*dist2); + opacity = opacity*gaussian; + """ + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Emissive = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleByArray = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleArrayComponent = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseScaleFunction = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleTransferFunction = 'PiecewiseFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityByArray = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityArray = ['POINTS', 'IsometryErrorFunction'] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityArrayComponent = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityTransferFunction = 'PiecewiseFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid = 'GridAxesRepresentation' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelColor = [0.0, 1.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelFontSize = 18 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelJustification = 'Left' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelColor = [1.0, 1.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelFontSize = 18 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelJustification = 'Left' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes = 'PolarAxesRepresentation' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScalarOpacityFunction = isometryErrorFunctionPWF + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScalarOpacityUnitDistance = 0.22272467953508482 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseSeparateOpacityArray = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityArrayName = ['POINTS', 'IsometryErrorFunction'] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityComponent = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectMapper = 'Projected tetra' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SamplingDimensions = [128, 128, 128] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseFloatingPointFrameBuffer = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NumberOfSteps = 40 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.StepSize = 0.25 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NormalizeVectors = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.EnhancedLIC = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ColorMode = 'Blend' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.LICIntensity = 0.8 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MapModeBias = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.EnhanceContrast = 'Off' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.LowLICContrastEnhancementFactor = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.HighLICContrastEnhancementFactor = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.LowColorContrastEnhancementFactor = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.HighColorContrastEnhancementFactor = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.AntiAlias = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MaskOnSurface = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MaskThreshold = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MaskIntensity = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MaskColor = [0.5, 0.5, 0.5] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GenerateNoiseTexture = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NoiseType = 'Gaussian' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NoiseTextureSize = 128 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NoiseGrainSize = 2 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MinNoiseValue = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MaxNoiseValue = 0.8 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NumberOfNoiseLevels = 1024 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ImpulseNoiseProbability = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ImpulseNoiseBackgroundValue = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NoiseGeneratorSeed = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CompositeStrategy = 'AUTO' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseLICForLOD = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.WriteLog = '' + + # init the 'PiecewiseFunction' selected for 'OSPRayScaleFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OSPRayScaleFunction.Points = [0.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OSPRayScaleFunction.UseLogScale = 0 + + # init the 'Arrow' selected for 'GlyphType' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType.TipResolution = 6 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType.TipRadius = 0.1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType.TipLength = 0.35 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType.ShaftResolution = 6 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType.ShaftRadius = 0.03 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType.Invert = 0 + + # init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.060643404722213745, 1.0, 0.5, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleTransferFunction.UseLogScale = 0 + + # init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.060643404722213745, 1.0, 0.5, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityTransferFunction.UseLogScale = 0 + + # init the 'GridAxesRepresentation' selected for 'DataAxesGrid' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitle = 'X Axis' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitle = 'Y Axis' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitle = 'Z Axis' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.FacesToRender = 63 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.CullBackface = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.CullFrontface = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ShowGrid = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ShowEdges = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ShowTicks = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.LabelUniqueEdgesOnly = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.AxesToLabel = 63 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XAxisNotation = 'Mixed' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XAxisPrecision = 2 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XAxisUseCustomLabels = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XAxisLabels = [] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YAxisNotation = 'Mixed' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YAxisPrecision = 2 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YAxisUseCustomLabels = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YAxisLabels = [] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZAxisNotation = 'Mixed' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZAxisPrecision = 2 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZAxisUseCustomLabels = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZAxisLabels = [] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.UseCustomBounds = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + + # init the 'PolarAxesRepresentation' selected for 'PolarAxes' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.Visibility = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.Translation = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.Scale = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.Orientation = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.EnableCustomBounds = [0, 0, 0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.EnableCustomRange = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.CustomRange = [0.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.RadialAxesVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.DrawRadialGridlines = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarArcsVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.DrawPolarArcsGridlines = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.NumberOfRadialAxes = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.AutoSubdividePolarAxis = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.NumberOfPolarAxis = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.MinimumRadius = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.MinimumAngle = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.MaximumAngle = 90.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.RadialAxesOriginToPolarAxis = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.Ratio = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarArcsColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryPolarArcsColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitle = 'Radial Distance' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleLocation = 'Bottom' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarLabelVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarLabelFormat = '%-#6.3g' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarLabelExponentLocation = 'Labels' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.RadialLabelVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.RadialLabelFormat = '%-#3.1f' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.RadialLabelLocation = 'Bottom' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.RadialUnitsVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ScreenSize = 10.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.EnableDistanceLOD = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.DistanceLODThreshold = 0.7 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.EnableViewAngleLOD = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ViewAngleLODThreshold = 0.7 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SmallestVisiblePolarAngle = 0.5 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarTicksVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcTicksOriginToPolarAxis = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.TickLocation = 'Both' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.AxisTickVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.AxisMinorTickVisibility = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcTickVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcMinorTickVisibility = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.DeltaAngleMajor = 10.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.DeltaAngleMinor = 5.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisMajorTickSize = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTickRatioSize = 0.3 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisMajorTickThickness = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTickRatioThickness = 0.5 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisMajorTickSize = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTickRatioSize = 0.3 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisMajorTickThickness = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTickRatioThickness = 0.5 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcMajorTickSize = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcTickRatioSize = 0.3 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcMajorTickThickness = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcTickRatioThickness = 0.5 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.Use2DMode = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.UseLogAxis = 0 + + # show color bar/color legend + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SetScalarBarVisibility(renderView1, True) + + # find source + box1 = FindSource('Box1') + + # update the view to ensure updated data information + renderView1.Update() + + # set scalar coloring + ColorBy(cylindrical_2variableBC_delta15_level3_NCvtuDisplay, ('POINTS', 'Displacement dune-VTK', 'Magnitude')) + + # Hide the scalar bar for this color map if no visible data is colored by it. + HideScalarBarIfNotNeeded(isometryErrorFunctionLUT, renderView1) + + # rescale color and/or opacity maps used to include current data range + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.RescaleTransferFunctionToDataRange(True, False) + + # show color bar/color legend + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SetScalarBarVisibility(renderView1, True) + + # get 2D transfer function for 'DisplacementduneVTK' + displacementduneVTKTF2D = GetTransferFunction2D('DisplacementduneVTK') + displacementduneVTKTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" + displacementduneVTKTF2D.Boxes = [] + displacementduneVTKTF2D.ScalarRangeInitialized = 0 + displacementduneVTKTF2D.Range = [0.0, 1.0, 0.0, 1.0] + displacementduneVTKTF2D.OutputDimensions = [10, 10] + + # get color transfer function/color map for 'DisplacementduneVTK' + displacementduneVTKLUT = GetColorTransferFunction('DisplacementduneVTK') + displacementduneVTKLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" + displacementduneVTKLUT.InterpretValuesAsCategories = 0 + displacementduneVTKLUT.AnnotationsInitialized = 0 + displacementduneVTKLUT.ShowCategoricalColorsinDataRangeOnly = 0 + displacementduneVTKLUT.RescaleOnVisibilityChange = 0 + displacementduneVTKLUT.EnableOpacityMapping = 0 + displacementduneVTKLUT.TransferFunction2D = displacementduneVTKTF2D + displacementduneVTKLUT.Use2DTransferFunction = 0 + displacementduneVTKLUT.RGBPoints = [0.0, 0.231373, 0.298039, 0.752941, 0.6756904005417563, 0.865003, 0.865003, 0.865003, 1.3513808010835127, 0.705882, 0.0156863, 0.14902] + displacementduneVTKLUT.UseLogScale = 0 + displacementduneVTKLUT.UseOpacityControlPointsFreehandDrawing = 0 + displacementduneVTKLUT.ShowDataHistogram = 0 + displacementduneVTKLUT.AutomaticDataHistogramComputation = 0 + displacementduneVTKLUT.DataHistogramNumberOfBins = 10 + displacementduneVTKLUT.ColorSpace = 'Diverging' + displacementduneVTKLUT.UseBelowRangeColor = 0 + displacementduneVTKLUT.BelowRangeColor = [0.0, 0.0, 0.0] + displacementduneVTKLUT.UseAboveRangeColor = 0 + displacementduneVTKLUT.AboveRangeColor = [0.5, 0.5, 0.5] + displacementduneVTKLUT.NanColor = [1.0, 1.0, 0.0] + displacementduneVTKLUT.NanOpacity = 1.0 + displacementduneVTKLUT.Discretize = 1 + displacementduneVTKLUT.NumberOfTableValues = 256 + displacementduneVTKLUT.ScalarRangeInitialized = 1.0 + displacementduneVTKLUT.HSVWrap = 0 + displacementduneVTKLUT.VectorComponent = 0 + displacementduneVTKLUT.VectorMode = 'Magnitude' + displacementduneVTKLUT.AllowDuplicateScalars = 1 + displacementduneVTKLUT.Annotations = [] + displacementduneVTKLUT.ActiveAnnotatedValues = [] + displacementduneVTKLUT.IndexedColors = [] + displacementduneVTKLUT.IndexedOpacities = [] + + # get opacity transfer function/opacity map for 'DisplacementduneVTK' + displacementduneVTKPWF = GetOpacityTransferFunction('DisplacementduneVTK') + displacementduneVTKPWF.Points = [0.0, 0.0, 0.5, 0.0, 1.3513808010835127, 1.0, 0.5, 0.0] + displacementduneVTKPWF.AllowDuplicateScalars = 1 + displacementduneVTKPWF.UseLogScale = 0 + displacementduneVTKPWF.ScalarRangeInitialized = 1 + + # create a new 'Warp By Vector' + warpByVector1 = WarpByVector(registrationName='WarpByVector1', Input=cylindrical_2variableBC_delta15_level3_NCvtu) + warpByVector1.Vectors = ['POINTS', 'Displacement dune-VTK'] + warpByVector1.ScaleFactor = 1.0 + + # show data in view + warpByVector1Display = Show(warpByVector1, renderView1, 'UnstructuredGridRepresentation') + + # trace defaults for the display properties. + warpByVector1Display.Selection = None + warpByVector1Display.Representation = 'Surface' + warpByVector1Display.ColorArrayName = ['POINTS', 'IsometryErrorFunction'] + warpByVector1Display.LookupTable = isometryErrorFunctionLUT + warpByVector1Display.MapScalars = 1 + warpByVector1Display.MultiComponentsMapping = 0 + warpByVector1Display.InterpolateScalarsBeforeMapping = 1 + warpByVector1Display.Opacity = 1.0 + warpByVector1Display.PointSize = 2.0 + warpByVector1Display.LineWidth = 1.0 + warpByVector1Display.RenderLinesAsTubes = 0 + warpByVector1Display.RenderPointsAsSpheres = 0 + warpByVector1Display.Interpolation = 'Gouraud' + warpByVector1Display.Specular = 0.0 + warpByVector1Display.SpecularColor = [1.0, 1.0, 1.0] + warpByVector1Display.SpecularPower = 100.0 + warpByVector1Display.Luminosity = 0.0 + warpByVector1Display.Ambient = 0.0 + warpByVector1Display.Diffuse = 1.0 + warpByVector1Display.Roughness = 0.3 + warpByVector1Display.Metallic = 0.0 + warpByVector1Display.EdgeTint = [1.0, 1.0, 1.0] + warpByVector1Display.Anisotropy = 0.0 + warpByVector1Display.AnisotropyRotation = 0.0 + warpByVector1Display.BaseIOR = 1.5 + warpByVector1Display.CoatStrength = 0.0 + warpByVector1Display.CoatIOR = 2.0 + warpByVector1Display.CoatRoughness = 0.0 + warpByVector1Display.CoatColor = [1.0, 1.0, 1.0] + warpByVector1Display.SelectTCoordArray = 'None' + warpByVector1Display.SelectNormalArray = 'None' + warpByVector1Display.SelectTangentArray = 'None' + warpByVector1Display.Texture = None + warpByVector1Display.RepeatTextures = 1 + warpByVector1Display.InterpolateTextures = 0 + warpByVector1Display.SeamlessU = 0 + warpByVector1Display.SeamlessV = 0 + warpByVector1Display.UseMipmapTextures = 0 + warpByVector1Display.ShowTexturesOnBackface = 1 + warpByVector1Display.BaseColorTexture = None + warpByVector1Display.NormalTexture = None + warpByVector1Display.NormalScale = 1.0 + warpByVector1Display.CoatNormalTexture = None + warpByVector1Display.CoatNormalScale = 1.0 + warpByVector1Display.MaterialTexture = None + warpByVector1Display.OcclusionStrength = 1.0 + warpByVector1Display.AnisotropyTexture = None + warpByVector1Display.EmissiveTexture = None + warpByVector1Display.EmissiveFactor = [1.0, 1.0, 1.0] + warpByVector1Display.FlipTextures = 0 + warpByVector1Display.BackfaceRepresentation = 'Follow Frontface' + warpByVector1Display.BackfaceAmbientColor = [1.0, 1.0, 1.0] + warpByVector1Display.BackfaceOpacity = 1.0 + warpByVector1Display.Position = [0.0, 0.0, 0.0] + warpByVector1Display.Scale = [1.0, 1.0, 1.0] + warpByVector1Display.Orientation = [0.0, 0.0, 0.0] + warpByVector1Display.Origin = [0.0, 0.0, 0.0] + warpByVector1Display.CoordinateShiftScaleMethod = 'Always Auto Shift Scale' + warpByVector1Display.Pickable = 1 + warpByVector1Display.Triangulate = 0 + warpByVector1Display.UseShaderReplacements = 0 + warpByVector1Display.ShaderReplacements = '' + warpByVector1Display.NonlinearSubdivisionLevel = 1 + warpByVector1Display.UseDataPartitions = 0 + warpByVector1Display.OSPRayUseScaleArray = 'All Approximate' + warpByVector1Display.OSPRayScaleArray = 'IsometryErrorFunction' + warpByVector1Display.OSPRayScaleFunction = 'PiecewiseFunction' + warpByVector1Display.OSPRayMaterial = 'None' + warpByVector1Display.BlockSelectors = ['/'] + warpByVector1Display.BlockColors = [] + warpByVector1Display.BlockOpacities = [] + warpByVector1Display.Orient = 0 + warpByVector1Display.OrientationMode = 'Direction' + warpByVector1Display.SelectOrientationVectors = 'Displacement dune-VTK' + warpByVector1Display.Scaling = 0 + warpByVector1Display.ScaleMode = 'No Data Scaling Off' + warpByVector1Display.ScaleFactor = 0.19999914765357973 + warpByVector1Display.SelectScaleArray = 'IsometryErrorFunction' + warpByVector1Display.GlyphType = 'Arrow' + warpByVector1Display.UseGlyphTable = 0 + warpByVector1Display.GlyphTableIndexArray = 'IsometryErrorFunction' + warpByVector1Display.UseCompositeGlyphTable = 0 + warpByVector1Display.UseGlyphCullingAndLOD = 0 + warpByVector1Display.LODValues = [] + warpByVector1Display.ColorByLODIndex = 0 + warpByVector1Display.GaussianRadius = 0.009999957382678986 + warpByVector1Display.ShaderPreset = 'Sphere' + warpByVector1Display.CustomTriangleScale = 3 + warpByVector1Display.CustomShader = """ // This custom shader code define a gaussian blur + // Please take a look into vtkSMPointGaussianRepresentation.cxx + // for other custom shader examples + //VTK::Color::Impl + float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy); + float gaussian = exp(-0.5*dist2); + opacity = opacity*gaussian; + """ + warpByVector1Display.Emissive = 0 + warpByVector1Display.ScaleByArray = 0 + warpByVector1Display.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] + warpByVector1Display.ScaleArrayComponent = '' + warpByVector1Display.UseScaleFunction = 1 + warpByVector1Display.ScaleTransferFunction = 'PiecewiseFunction' + warpByVector1Display.OpacityByArray = 0 + warpByVector1Display.OpacityArray = ['POINTS', 'IsometryErrorFunction'] + warpByVector1Display.OpacityArrayComponent = '' + warpByVector1Display.OpacityTransferFunction = 'PiecewiseFunction' + warpByVector1Display.DataAxesGrid = 'GridAxesRepresentation' + warpByVector1Display.SelectionCellLabelBold = 0 + warpByVector1Display.SelectionCellLabelColor = [0.0, 1.0, 0.0] + warpByVector1Display.SelectionCellLabelFontFamily = 'Arial' + warpByVector1Display.SelectionCellLabelFontFile = '' + warpByVector1Display.SelectionCellLabelFontSize = 18 + warpByVector1Display.SelectionCellLabelItalic = 0 + warpByVector1Display.SelectionCellLabelJustification = 'Left' + warpByVector1Display.SelectionCellLabelOpacity = 1.0 + warpByVector1Display.SelectionCellLabelShadow = 0 + warpByVector1Display.SelectionPointLabelBold = 0 + warpByVector1Display.SelectionPointLabelColor = [1.0, 1.0, 0.0] + warpByVector1Display.SelectionPointLabelFontFamily = 'Arial' + warpByVector1Display.SelectionPointLabelFontFile = '' + warpByVector1Display.SelectionPointLabelFontSize = 18 + warpByVector1Display.SelectionPointLabelItalic = 0 + warpByVector1Display.SelectionPointLabelJustification = 'Left' + warpByVector1Display.SelectionPointLabelOpacity = 1.0 + warpByVector1Display.SelectionPointLabelShadow = 0 + warpByVector1Display.PolarAxes = 'PolarAxesRepresentation' + warpByVector1Display.ScalarOpacityFunction = isometryErrorFunctionPWF + warpByVector1Display.ScalarOpacityUnitDistance = 0.21902417179491238 + warpByVector1Display.UseSeparateOpacityArray = 0 + warpByVector1Display.OpacityArrayName = ['POINTS', 'IsometryErrorFunction'] + warpByVector1Display.OpacityComponent = '' + warpByVector1Display.SelectMapper = 'Projected tetra' + warpByVector1Display.SamplingDimensions = [128, 128, 128] + warpByVector1Display.UseFloatingPointFrameBuffer = 1 + warpByVector1Display.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] + warpByVector1Display.NumberOfSteps = 40 + warpByVector1Display.StepSize = 0.25 + warpByVector1Display.NormalizeVectors = 1 + warpByVector1Display.EnhancedLIC = 1 + warpByVector1Display.ColorMode = 'Blend' + warpByVector1Display.LICIntensity = 0.8 + warpByVector1Display.MapModeBias = 0.0 + warpByVector1Display.EnhanceContrast = 'Off' + warpByVector1Display.LowLICContrastEnhancementFactor = 0.0 + warpByVector1Display.HighLICContrastEnhancementFactor = 0.0 + warpByVector1Display.LowColorContrastEnhancementFactor = 0.0 + warpByVector1Display.HighColorContrastEnhancementFactor = 0.0 + warpByVector1Display.AntiAlias = 0 + warpByVector1Display.MaskOnSurface = 1 + warpByVector1Display.MaskThreshold = 0.0 + warpByVector1Display.MaskIntensity = 0.0 + warpByVector1Display.MaskColor = [0.5, 0.5, 0.5] + warpByVector1Display.GenerateNoiseTexture = 0 + warpByVector1Display.NoiseType = 'Gaussian' + warpByVector1Display.NoiseTextureSize = 128 + warpByVector1Display.NoiseGrainSize = 2 + warpByVector1Display.MinNoiseValue = 0.0 + warpByVector1Display.MaxNoiseValue = 0.8 + warpByVector1Display.NumberOfNoiseLevels = 1024 + warpByVector1Display.ImpulseNoiseProbability = 1.0 + warpByVector1Display.ImpulseNoiseBackgroundValue = 0.0 + warpByVector1Display.NoiseGeneratorSeed = 1 + warpByVector1Display.CompositeStrategy = 'AUTO' + warpByVector1Display.UseLICForLOD = 0 + warpByVector1Display.WriteLog = '' + + # init the 'PiecewiseFunction' selected for 'OSPRayScaleFunction' + warpByVector1Display.OSPRayScaleFunction.Points = [0.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + warpByVector1Display.OSPRayScaleFunction.UseLogScale = 0 + + # init the 'Arrow' selected for 'GlyphType' + warpByVector1Display.GlyphType.TipResolution = 6 + warpByVector1Display.GlyphType.TipRadius = 0.1 + warpByVector1Display.GlyphType.TipLength = 0.35 + warpByVector1Display.GlyphType.ShaftResolution = 6 + warpByVector1Display.GlyphType.ShaftRadius = 0.03 + warpByVector1Display.GlyphType.Invert = 0 + + # init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' + warpByVector1Display.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.060643404722213745, 1.0, 0.5, 0.0] + warpByVector1Display.ScaleTransferFunction.UseLogScale = 0 + + # init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' + warpByVector1Display.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.060643404722213745, 1.0, 0.5, 0.0] + warpByVector1Display.OpacityTransferFunction.UseLogScale = 0 + + # init the 'GridAxesRepresentation' selected for 'DataAxesGrid' + warpByVector1Display.DataAxesGrid.XTitle = 'X Axis' + warpByVector1Display.DataAxesGrid.YTitle = 'Y Axis' + warpByVector1Display.DataAxesGrid.ZTitle = 'Z Axis' + warpByVector1Display.DataAxesGrid.XTitleFontFamily = 'Arial' + warpByVector1Display.DataAxesGrid.XTitleFontFile = '' + warpByVector1Display.DataAxesGrid.XTitleBold = 0 + warpByVector1Display.DataAxesGrid.XTitleItalic = 0 + warpByVector1Display.DataAxesGrid.XTitleFontSize = 12 + warpByVector1Display.DataAxesGrid.XTitleShadow = 0 + warpByVector1Display.DataAxesGrid.XTitleOpacity = 1.0 + warpByVector1Display.DataAxesGrid.YTitleFontFamily = 'Arial' + warpByVector1Display.DataAxesGrid.YTitleFontFile = '' + warpByVector1Display.DataAxesGrid.YTitleBold = 0 + warpByVector1Display.DataAxesGrid.YTitleItalic = 0 + warpByVector1Display.DataAxesGrid.YTitleFontSize = 12 + warpByVector1Display.DataAxesGrid.YTitleShadow = 0 + warpByVector1Display.DataAxesGrid.YTitleOpacity = 1.0 + warpByVector1Display.DataAxesGrid.ZTitleFontFamily = 'Arial' + warpByVector1Display.DataAxesGrid.ZTitleFontFile = '' + warpByVector1Display.DataAxesGrid.ZTitleBold = 0 + warpByVector1Display.DataAxesGrid.ZTitleItalic = 0 + warpByVector1Display.DataAxesGrid.ZTitleFontSize = 12 + warpByVector1Display.DataAxesGrid.ZTitleShadow = 0 + warpByVector1Display.DataAxesGrid.ZTitleOpacity = 1.0 + warpByVector1Display.DataAxesGrid.FacesToRender = 63 + warpByVector1Display.DataAxesGrid.CullBackface = 0 + warpByVector1Display.DataAxesGrid.CullFrontface = 1 + warpByVector1Display.DataAxesGrid.ShowGrid = 0 + warpByVector1Display.DataAxesGrid.ShowEdges = 1 + warpByVector1Display.DataAxesGrid.ShowTicks = 1 + warpByVector1Display.DataAxesGrid.LabelUniqueEdgesOnly = 1 + warpByVector1Display.DataAxesGrid.AxesToLabel = 63 + warpByVector1Display.DataAxesGrid.XLabelFontFamily = 'Arial' + warpByVector1Display.DataAxesGrid.XLabelFontFile = '' + warpByVector1Display.DataAxesGrid.XLabelBold = 0 + warpByVector1Display.DataAxesGrid.XLabelItalic = 0 + warpByVector1Display.DataAxesGrid.XLabelFontSize = 12 + warpByVector1Display.DataAxesGrid.XLabelShadow = 0 + warpByVector1Display.DataAxesGrid.XLabelOpacity = 1.0 + warpByVector1Display.DataAxesGrid.YLabelFontFamily = 'Arial' + warpByVector1Display.DataAxesGrid.YLabelFontFile = '' + warpByVector1Display.DataAxesGrid.YLabelBold = 0 + warpByVector1Display.DataAxesGrid.YLabelItalic = 0 + warpByVector1Display.DataAxesGrid.YLabelFontSize = 12 + warpByVector1Display.DataAxesGrid.YLabelShadow = 0 + warpByVector1Display.DataAxesGrid.YLabelOpacity = 1.0 + warpByVector1Display.DataAxesGrid.ZLabelFontFamily = 'Arial' + warpByVector1Display.DataAxesGrid.ZLabelFontFile = '' + warpByVector1Display.DataAxesGrid.ZLabelBold = 0 + warpByVector1Display.DataAxesGrid.ZLabelItalic = 0 + warpByVector1Display.DataAxesGrid.ZLabelFontSize = 12 + warpByVector1Display.DataAxesGrid.ZLabelShadow = 0 + warpByVector1Display.DataAxesGrid.ZLabelOpacity = 1.0 + warpByVector1Display.DataAxesGrid.XAxisNotation = 'Mixed' + warpByVector1Display.DataAxesGrid.XAxisPrecision = 2 + warpByVector1Display.DataAxesGrid.XAxisUseCustomLabels = 0 + warpByVector1Display.DataAxesGrid.XAxisLabels = [] + warpByVector1Display.DataAxesGrid.YAxisNotation = 'Mixed' + warpByVector1Display.DataAxesGrid.YAxisPrecision = 2 + warpByVector1Display.DataAxesGrid.YAxisUseCustomLabels = 0 + warpByVector1Display.DataAxesGrid.YAxisLabels = [] + warpByVector1Display.DataAxesGrid.ZAxisNotation = 'Mixed' + warpByVector1Display.DataAxesGrid.ZAxisPrecision = 2 + warpByVector1Display.DataAxesGrid.ZAxisUseCustomLabels = 0 + warpByVector1Display.DataAxesGrid.ZAxisLabels = [] + warpByVector1Display.DataAxesGrid.UseCustomBounds = 0 + warpByVector1Display.DataAxesGrid.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + + # init the 'PolarAxesRepresentation' selected for 'PolarAxes' + warpByVector1Display.PolarAxes.Visibility = 0 + warpByVector1Display.PolarAxes.Translation = [0.0, 0.0, 0.0] + warpByVector1Display.PolarAxes.Scale = [1.0, 1.0, 1.0] + warpByVector1Display.PolarAxes.Orientation = [0.0, 0.0, 0.0] + warpByVector1Display.PolarAxes.EnableCustomBounds = [0, 0, 0] + warpByVector1Display.PolarAxes.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + warpByVector1Display.PolarAxes.EnableCustomRange = 0 + warpByVector1Display.PolarAxes.CustomRange = [0.0, 1.0] + warpByVector1Display.PolarAxes.PolarAxisVisibility = 1 + warpByVector1Display.PolarAxes.RadialAxesVisibility = 1 + warpByVector1Display.PolarAxes.DrawRadialGridlines = 1 + warpByVector1Display.PolarAxes.PolarArcsVisibility = 1 + warpByVector1Display.PolarAxes.DrawPolarArcsGridlines = 1 + warpByVector1Display.PolarAxes.NumberOfRadialAxes = 0 + warpByVector1Display.PolarAxes.AutoSubdividePolarAxis = 1 + warpByVector1Display.PolarAxes.NumberOfPolarAxis = 0 + warpByVector1Display.PolarAxes.MinimumRadius = 0.0 + warpByVector1Display.PolarAxes.MinimumAngle = 0.0 + warpByVector1Display.PolarAxes.MaximumAngle = 90.0 + warpByVector1Display.PolarAxes.RadialAxesOriginToPolarAxis = 1 + warpByVector1Display.PolarAxes.Ratio = 1.0 + warpByVector1Display.PolarAxes.PolarAxisColor = [1.0, 1.0, 1.0] + warpByVector1Display.PolarAxes.PolarArcsColor = [1.0, 1.0, 1.0] + warpByVector1Display.PolarAxes.LastRadialAxisColor = [1.0, 1.0, 1.0] + warpByVector1Display.PolarAxes.SecondaryPolarArcsColor = [1.0, 1.0, 1.0] + warpByVector1Display.PolarAxes.SecondaryRadialAxesColor = [1.0, 1.0, 1.0] + warpByVector1Display.PolarAxes.PolarAxisTitleVisibility = 1 + warpByVector1Display.PolarAxes.PolarAxisTitle = 'Radial Distance' + warpByVector1Display.PolarAxes.PolarAxisTitleLocation = 'Bottom' + warpByVector1Display.PolarAxes.PolarLabelVisibility = 1 + warpByVector1Display.PolarAxes.PolarLabelFormat = '%-#6.3g' + warpByVector1Display.PolarAxes.PolarLabelExponentLocation = 'Labels' + warpByVector1Display.PolarAxes.RadialLabelVisibility = 1 + warpByVector1Display.PolarAxes.RadialLabelFormat = '%-#3.1f' + warpByVector1Display.PolarAxes.RadialLabelLocation = 'Bottom' + warpByVector1Display.PolarAxes.RadialUnitsVisibility = 1 + warpByVector1Display.PolarAxes.ScreenSize = 10.0 + warpByVector1Display.PolarAxes.PolarAxisTitleOpacity = 1.0 + warpByVector1Display.PolarAxes.PolarAxisTitleFontFamily = 'Arial' + warpByVector1Display.PolarAxes.PolarAxisTitleFontFile = '' + warpByVector1Display.PolarAxes.PolarAxisTitleBold = 0 + warpByVector1Display.PolarAxes.PolarAxisTitleItalic = 0 + warpByVector1Display.PolarAxes.PolarAxisTitleShadow = 0 + warpByVector1Display.PolarAxes.PolarAxisTitleFontSize = 12 + warpByVector1Display.PolarAxes.PolarAxisLabelOpacity = 1.0 + warpByVector1Display.PolarAxes.PolarAxisLabelFontFamily = 'Arial' + warpByVector1Display.PolarAxes.PolarAxisLabelFontFile = '' + warpByVector1Display.PolarAxes.PolarAxisLabelBold = 0 + warpByVector1Display.PolarAxes.PolarAxisLabelItalic = 0 + warpByVector1Display.PolarAxes.PolarAxisLabelShadow = 0 + warpByVector1Display.PolarAxes.PolarAxisLabelFontSize = 12 + warpByVector1Display.PolarAxes.LastRadialAxisTextOpacity = 1.0 + warpByVector1Display.PolarAxes.LastRadialAxisTextFontFamily = 'Arial' + warpByVector1Display.PolarAxes.LastRadialAxisTextFontFile = '' + warpByVector1Display.PolarAxes.LastRadialAxisTextBold = 0 + warpByVector1Display.PolarAxes.LastRadialAxisTextItalic = 0 + warpByVector1Display.PolarAxes.LastRadialAxisTextShadow = 0 + warpByVector1Display.PolarAxes.LastRadialAxisTextFontSize = 12 + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextOpacity = 1.0 + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextFontFamily = 'Arial' + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextFontFile = '' + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextBold = 0 + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextItalic = 0 + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextShadow = 0 + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextFontSize = 12 + warpByVector1Display.PolarAxes.EnableDistanceLOD = 1 + warpByVector1Display.PolarAxes.DistanceLODThreshold = 0.7 + warpByVector1Display.PolarAxes.EnableViewAngleLOD = 1 + warpByVector1Display.PolarAxes.ViewAngleLODThreshold = 0.7 + warpByVector1Display.PolarAxes.SmallestVisiblePolarAngle = 0.5 + warpByVector1Display.PolarAxes.PolarTicksVisibility = 1 + warpByVector1Display.PolarAxes.ArcTicksOriginToPolarAxis = 1 + warpByVector1Display.PolarAxes.TickLocation = 'Both' + warpByVector1Display.PolarAxes.AxisTickVisibility = 1 + warpByVector1Display.PolarAxes.AxisMinorTickVisibility = 0 + warpByVector1Display.PolarAxes.ArcTickVisibility = 1 + warpByVector1Display.PolarAxes.ArcMinorTickVisibility = 0 + warpByVector1Display.PolarAxes.DeltaAngleMajor = 10.0 + warpByVector1Display.PolarAxes.DeltaAngleMinor = 5.0 + warpByVector1Display.PolarAxes.PolarAxisMajorTickSize = 0.0 + warpByVector1Display.PolarAxes.PolarAxisTickRatioSize = 0.3 + warpByVector1Display.PolarAxes.PolarAxisMajorTickThickness = 1.0 + warpByVector1Display.PolarAxes.PolarAxisTickRatioThickness = 0.5 + warpByVector1Display.PolarAxes.LastRadialAxisMajorTickSize = 0.0 + warpByVector1Display.PolarAxes.LastRadialAxisTickRatioSize = 0.3 + warpByVector1Display.PolarAxes.LastRadialAxisMajorTickThickness = 1.0 + warpByVector1Display.PolarAxes.LastRadialAxisTickRatioThickness = 0.5 + warpByVector1Display.PolarAxes.ArcMajorTickSize = 0.0 + warpByVector1Display.PolarAxes.ArcTickRatioSize = 0.3 + warpByVector1Display.PolarAxes.ArcMajorTickThickness = 1.0 + warpByVector1Display.PolarAxes.ArcTickRatioThickness = 0.5 + warpByVector1Display.PolarAxes.Use2DMode = 0 + warpByVector1Display.PolarAxes.UseLogAxis = 0 + + # hide data in view + Hide(cylindrical_2variableBC_delta15_level3_NCvtu, renderView1) + + # show color bar/color legend + warpByVector1Display.SetScalarBarVisibility(renderView1, True) + + # update the view to ensure updated data information + renderView1.Update() + + # set scalar coloring + ColorBy(warpByVector1Display, ('POINTS', 'Displacement dune-VTK', 'Magnitude')) + + # Hide the scalar bar for this color map if no visible data is colored by it. + HideScalarBarIfNotNeeded(isometryErrorFunctionLUT, renderView1) + + # rescale color and/or opacity maps used to include current data range + warpByVector1Display.RescaleTransferFunctionToDataRange(True, False) + + # show color bar/color legend + warpByVector1Display.SetScalarBarVisibility(renderView1, True) + + # Apply a preset using its name. Note this may not work as expected when presets have duplicate names. + displacementduneVTKLUT.ApplyPreset('Greens', True) + + # Rescale transfer function + displacementduneVTKLUT.RescaleTransferFunction(0.00013513808010835127, 1.3513808010835127) + + # Rescale transfer function + displacementduneVTKPWF.RescaleTransferFunction(0.00013513808010835127, 1.3513808010835127) + + # convert to log space + displacementduneVTKLUT.MapControlPointsToLogSpace() + + # Properties modified on displacementduneVTKLUT + displacementduneVTKLUT.UseLogScale = 1 + + # hide color bar/color legend + warpByVector1Display.SetScalarBarVisibility(renderView1, False) + + # reset view to fit data bounds + renderView1.ResetCamera(-1.0, 0.48625946044921875, -0.9997166991233826, 1.0002747774124146, -0.03165162727236748, 1.2042447328567505, True) + + # Properties modified on renderView1 + renderView1.OrientationAxesVisibility = 0 + + # Properties modified on warpByVector1Display + warpByVector1Display.Specular = 0.0 + + # Properties modified on warpByVector1Display + warpByVector1Display.Interpolation = 'Flat' + + # set active source + SetActiveSource(cylindrical_2variableBC_delta15_level3_NCvtu) + + # Properties modified on cylindrical_2variableBC_delta15_level3_NCvtuDisplay + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Specular = 0.0 + + # set active source + SetActiveSource(warpByVector1) + + # Properties modified on warpByVector1Display + warpByVector1Display.Ambient = 0.2 + + # Properties modified on warpByVector1Display + warpByVector1Display.NonlinearSubdivisionLevel = 4 + + if AddGlyph: + # create a new 'Glyph' + glyph1 = Glyph(registrationName='Glyph1', Input=warpByVector1, + GlyphType='Arrow') + glyph1.OrientationArray = ['POINTS', 'Displacement dune-VTK'] + glyph1.ScaleArray = ['POINTS', 'IsometryErrorFunction'] + glyph1.VectorScaleMode = 'Scale by Magnitude' + glyph1.ScaleFactor = 0.19999914765357973 + glyph1.GlyphTransform = 'Transform2' + glyph1.GlyphMode = 'Uniform Spatial Distribution (Bounds Based)' + glyph1.MaximumNumberOfSamplePoints = 5000 + glyph1.Seed = 10339 + glyph1.Stride = 1 + + # init the 'Arrow' selected for 'GlyphType' + glyph1.GlyphType.TipResolution = 30 + glyph1.GlyphType.TipRadius = 0.075 + glyph1.GlyphType.TipLength = 0.35 + glyph1.GlyphType.ShaftResolution = 30 + glyph1.GlyphType.ShaftRadius = 0.015 + glyph1.GlyphType.Invert = 0 + + # init the 'Transform2' selected for 'GlyphTransform' + glyph1.GlyphTransform.Translate = [0.0, 0.0, 0.0] + glyph1.GlyphTransform.Rotate = [0.0, 0.0, 0.0] + glyph1.GlyphTransform.Scale = [1.0, 1.0, 1.0] + + # Properties modified on glyph1 + glyph1.OrientationArray = ['POINTS', 'SurfaceNormalDiscrete'] + glyph1.ScaleArray = ['POINTS', 'No scale array'] + # glyph1.ScaleFactor = 0.1 + glyph1.ScaleFactor = 0.15 + glyph1.GlyphMode = 'Every Nth Point' + glyph1.Stride = 35 + + # show data in view + glyph1Display = Show(glyph1, renderView1, 'GeometryRepresentation') + + # trace defaults for the display properties. + glyph1Display.Selection = None + glyph1Display.Representation = 'Surface' + glyph1Display.ColorArrayName = ['POINTS', 'IsometryErrorFunction'] + glyph1Display.LookupTable = isometryErrorFunctionLUT + glyph1Display.MapScalars = 1 + glyph1Display.MultiComponentsMapping = 0 + glyph1Display.InterpolateScalarsBeforeMapping = 1 + glyph1Display.Opacity = 1.0 + glyph1Display.PointSize = 2.0 + glyph1Display.LineWidth = 1.0 + glyph1Display.RenderLinesAsTubes = 0 + glyph1Display.RenderPointsAsSpheres = 0 + glyph1Display.Interpolation = 'Gouraud' + glyph1Display.Specular = 0.0 + glyph1Display.SpecularColor = [1.0, 1.0, 1.0] + glyph1Display.SpecularPower = 100.0 + glyph1Display.Luminosity = 0.0 + glyph1Display.Ambient = 0.0 + glyph1Display.Diffuse = 1.0 + glyph1Display.Roughness = 0.3 + glyph1Display.Metallic = 0.0 + glyph1Display.EdgeTint = [1.0, 1.0, 1.0] + glyph1Display.Anisotropy = 0.0 + glyph1Display.AnisotropyRotation = 0.0 + glyph1Display.BaseIOR = 1.5 + glyph1Display.CoatStrength = 0.0 + glyph1Display.CoatIOR = 2.0 + glyph1Display.CoatRoughness = 0.0 + glyph1Display.CoatColor = [1.0, 1.0, 1.0] + glyph1Display.SelectTCoordArray = 'None' + glyph1Display.SelectNormalArray = 'None' + glyph1Display.SelectTangentArray = 'None' + glyph1Display.Texture = None + glyph1Display.RepeatTextures = 1 + glyph1Display.InterpolateTextures = 0 + glyph1Display.SeamlessU = 0 + glyph1Display.SeamlessV = 0 + glyph1Display.UseMipmapTextures = 0 + glyph1Display.ShowTexturesOnBackface = 1 + glyph1Display.BaseColorTexture = None + glyph1Display.NormalTexture = None + glyph1Display.NormalScale = 1.0 + glyph1Display.CoatNormalTexture = None + glyph1Display.CoatNormalScale = 1.0 + glyph1Display.MaterialTexture = None + glyph1Display.OcclusionStrength = 1.0 + glyph1Display.AnisotropyTexture = None + glyph1Display.EmissiveTexture = None + glyph1Display.EmissiveFactor = [1.0, 1.0, 1.0] + glyph1Display.FlipTextures = 0 + glyph1Display.BackfaceRepresentation = 'Follow Frontface' + glyph1Display.BackfaceAmbientColor = [1.0, 1.0, 1.0] + glyph1Display.BackfaceOpacity = 1.0 + glyph1Display.Position = [0.0, 0.0, 0.0] + glyph1Display.Scale = [1.0, 1.0, 1.0] + glyph1Display.Orientation = [0.0, 0.0, 0.0] + glyph1Display.Origin = [0.0, 0.0, 0.0] + glyph1Display.CoordinateShiftScaleMethod = 'Always Auto Shift Scale' + glyph1Display.Pickable = 1 + glyph1Display.Triangulate = 0 + glyph1Display.UseShaderReplacements = 0 + glyph1Display.ShaderReplacements = '' + glyph1Display.NonlinearSubdivisionLevel = 1 + glyph1Display.UseDataPartitions = 0 + glyph1Display.OSPRayUseScaleArray = 'All Approximate' + glyph1Display.OSPRayScaleArray = 'IsometryErrorFunction' + glyph1Display.OSPRayScaleFunction = 'PiecewiseFunction' + glyph1Display.OSPRayMaterial = 'None' + glyph1Display.BlockSelectors = ['/'] + glyph1Display.BlockColors = [] + glyph1Display.BlockOpacities = [] + glyph1Display.Orient = 0 + glyph1Display.OrientationMode = 'Direction' + glyph1Display.SelectOrientationVectors = 'Displacement dune-VTK' + glyph1Display.Scaling = 0 + glyph1Display.ScaleMode = 'No Data Scaling Off' + glyph1Display.ScaleFactor = 0.205192768573761 + glyph1Display.SelectScaleArray = 'IsometryErrorFunction' + glyph1Display.GlyphType = 'Arrow' + glyph1Display.UseGlyphTable = 0 + glyph1Display.GlyphTableIndexArray = 'IsometryErrorFunction' + glyph1Display.UseCompositeGlyphTable = 0 + glyph1Display.UseGlyphCullingAndLOD = 0 + glyph1Display.LODValues = [] + glyph1Display.ColorByLODIndex = 0 + glyph1Display.GaussianRadius = 0.01025963842868805 + glyph1Display.ShaderPreset = 'Sphere' + glyph1Display.CustomTriangleScale = 3 + glyph1Display.CustomShader = """ // This custom shader code define a gaussian blur + // Please take a look into vtkSMPointGaussianRepresentation.cxx + // for other custom shader examples + //VTK::Color::Impl + float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy); + float gaussian = exp(-0.5*dist2); + opacity = opacity*gaussian; + """ + glyph1Display.Emissive = 0 + glyph1Display.ScaleByArray = 0 + glyph1Display.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] + glyph1Display.ScaleArrayComponent = '' + glyph1Display.UseScaleFunction = 1 + glyph1Display.ScaleTransferFunction = 'PiecewiseFunction' + glyph1Display.OpacityByArray = 0 + glyph1Display.OpacityArray = ['POINTS', 'IsometryErrorFunction'] + glyph1Display.OpacityArrayComponent = '' + glyph1Display.OpacityTransferFunction = 'PiecewiseFunction' + glyph1Display.DataAxesGrid = 'GridAxesRepresentation' + glyph1Display.SelectionCellLabelBold = 0 + glyph1Display.SelectionCellLabelColor = [0.0, 1.0, 0.0] + glyph1Display.SelectionCellLabelFontFamily = 'Arial' + glyph1Display.SelectionCellLabelFontFile = '' + glyph1Display.SelectionCellLabelFontSize = 18 + glyph1Display.SelectionCellLabelItalic = 0 + glyph1Display.SelectionCellLabelJustification = 'Left' + glyph1Display.SelectionCellLabelOpacity = 1.0 + glyph1Display.SelectionCellLabelShadow = 0 + glyph1Display.SelectionPointLabelBold = 0 + glyph1Display.SelectionPointLabelColor = [1.0, 1.0, 0.0] + glyph1Display.SelectionPointLabelFontFamily = 'Arial' + glyph1Display.SelectionPointLabelFontFile = '' + glyph1Display.SelectionPointLabelFontSize = 18 + glyph1Display.SelectionPointLabelItalic = 0 + glyph1Display.SelectionPointLabelJustification = 'Left' + glyph1Display.SelectionPointLabelOpacity = 1.0 + glyph1Display.SelectionPointLabelShadow = 0 + glyph1Display.PolarAxes = 'PolarAxesRepresentation' + glyph1Display.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] + glyph1Display.NumberOfSteps = 40 + glyph1Display.StepSize = 0.25 + glyph1Display.NormalizeVectors = 1 + glyph1Display.EnhancedLIC = 1 + glyph1Display.ColorMode = 'Blend' + glyph1Display.LICIntensity = 0.8 + glyph1Display.MapModeBias = 0.0 + glyph1Display.EnhanceContrast = 'Off' + glyph1Display.LowLICContrastEnhancementFactor = 0.0 + glyph1Display.HighLICContrastEnhancementFactor = 0.0 + glyph1Display.LowColorContrastEnhancementFactor = 0.0 + glyph1Display.HighColorContrastEnhancementFactor = 0.0 + glyph1Display.AntiAlias = 0 + glyph1Display.MaskOnSurface = 1 + glyph1Display.MaskThreshold = 0.0 + glyph1Display.MaskIntensity = 0.0 + glyph1Display.MaskColor = [0.5, 0.5, 0.5] + glyph1Display.GenerateNoiseTexture = 0 + glyph1Display.NoiseType = 'Gaussian' + glyph1Display.NoiseTextureSize = 128 + glyph1Display.NoiseGrainSize = 2 + glyph1Display.MinNoiseValue = 0.0 + glyph1Display.MaxNoiseValue = 0.8 + glyph1Display.NumberOfNoiseLevels = 1024 + glyph1Display.ImpulseNoiseProbability = 1.0 + glyph1Display.ImpulseNoiseBackgroundValue = 0.0 + glyph1Display.NoiseGeneratorSeed = 1 + glyph1Display.CompositeStrategy = 'AUTO' + glyph1Display.UseLICForLOD = 0 + glyph1Display.WriteLog = '' + + # init the 'PiecewiseFunction' selected for 'OSPRayScaleFunction' + glyph1Display.OSPRayScaleFunction.Points = [0.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + glyph1Display.OSPRayScaleFunction.UseLogScale = 0 + + # init the 'Arrow' selected for 'GlyphType' + glyph1Display.GlyphType.TipResolution = 30 + glyph1Display.GlyphType.TipRadius = 0.075 + glyph1Display.GlyphType.TipLength = 0.35 + glyph1Display.GlyphType.ShaftResolution = 30 + glyph1Display.GlyphType.ShaftRadius = 0.015 + glyph1Display.GlyphType.Invert = 0 + + # init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' + glyph1Display.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.0557803250849247, 1.0, 0.5, 0.0] + glyph1Display.ScaleTransferFunction.UseLogScale = 0 + + # init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' + glyph1Display.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.0557803250849247, 1.0, 0.5, 0.0] + glyph1Display.OpacityTransferFunction.UseLogScale = 0 + + # init the 'GridAxesRepresentation' selected for 'DataAxesGrid' + glyph1Display.DataAxesGrid.XTitle = 'X Axis' + glyph1Display.DataAxesGrid.YTitle = 'Y Axis' + glyph1Display.DataAxesGrid.ZTitle = 'Z Axis' + glyph1Display.DataAxesGrid.XTitleFontFamily = 'Arial' + glyph1Display.DataAxesGrid.XTitleFontFile = '' + glyph1Display.DataAxesGrid.XTitleBold = 0 + glyph1Display.DataAxesGrid.XTitleItalic = 0 + glyph1Display.DataAxesGrid.XTitleFontSize = 12 + glyph1Display.DataAxesGrid.XTitleShadow = 0 + glyph1Display.DataAxesGrid.XTitleOpacity = 1.0 + glyph1Display.DataAxesGrid.YTitleFontFamily = 'Arial' + glyph1Display.DataAxesGrid.YTitleFontFile = '' + glyph1Display.DataAxesGrid.YTitleBold = 0 + glyph1Display.DataAxesGrid.YTitleItalic = 0 + glyph1Display.DataAxesGrid.YTitleFontSize = 12 + glyph1Display.DataAxesGrid.YTitleShadow = 0 + glyph1Display.DataAxesGrid.YTitleOpacity = 1.0 + glyph1Display.DataAxesGrid.ZTitleFontFamily = 'Arial' + glyph1Display.DataAxesGrid.ZTitleFontFile = '' + glyph1Display.DataAxesGrid.ZTitleBold = 0 + glyph1Display.DataAxesGrid.ZTitleItalic = 0 + glyph1Display.DataAxesGrid.ZTitleFontSize = 12 + glyph1Display.DataAxesGrid.ZTitleShadow = 0 + glyph1Display.DataAxesGrid.ZTitleOpacity = 1.0 + glyph1Display.DataAxesGrid.FacesToRender = 63 + glyph1Display.DataAxesGrid.CullBackface = 0 + glyph1Display.DataAxesGrid.CullFrontface = 1 + glyph1Display.DataAxesGrid.ShowGrid = 0 + glyph1Display.DataAxesGrid.ShowEdges = 1 + glyph1Display.DataAxesGrid.ShowTicks = 1 + glyph1Display.DataAxesGrid.LabelUniqueEdgesOnly = 1 + glyph1Display.DataAxesGrid.AxesToLabel = 63 + glyph1Display.DataAxesGrid.XLabelFontFamily = 'Arial' + glyph1Display.DataAxesGrid.XLabelFontFile = '' + glyph1Display.DataAxesGrid.XLabelBold = 0 + glyph1Display.DataAxesGrid.XLabelItalic = 0 + glyph1Display.DataAxesGrid.XLabelFontSize = 12 + glyph1Display.DataAxesGrid.XLabelShadow = 0 + glyph1Display.DataAxesGrid.XLabelOpacity = 1.0 + glyph1Display.DataAxesGrid.YLabelFontFamily = 'Arial' + glyph1Display.DataAxesGrid.YLabelFontFile = '' + glyph1Display.DataAxesGrid.YLabelBold = 0 + glyph1Display.DataAxesGrid.YLabelItalic = 0 + glyph1Display.DataAxesGrid.YLabelFontSize = 12 + glyph1Display.DataAxesGrid.YLabelShadow = 0 + glyph1Display.DataAxesGrid.YLabelOpacity = 1.0 + glyph1Display.DataAxesGrid.ZLabelFontFamily = 'Arial' + glyph1Display.DataAxesGrid.ZLabelFontFile = '' + glyph1Display.DataAxesGrid.ZLabelBold = 0 + glyph1Display.DataAxesGrid.ZLabelItalic = 0 + glyph1Display.DataAxesGrid.ZLabelFontSize = 12 + glyph1Display.DataAxesGrid.ZLabelShadow = 0 + glyph1Display.DataAxesGrid.ZLabelOpacity = 1.0 + glyph1Display.DataAxesGrid.XAxisNotation = 'Mixed' + glyph1Display.DataAxesGrid.XAxisPrecision = 2 + glyph1Display.DataAxesGrid.XAxisUseCustomLabels = 0 + glyph1Display.DataAxesGrid.XAxisLabels = [] + glyph1Display.DataAxesGrid.YAxisNotation = 'Mixed' + glyph1Display.DataAxesGrid.YAxisPrecision = 2 + glyph1Display.DataAxesGrid.YAxisUseCustomLabels = 0 + glyph1Display.DataAxesGrid.YAxisLabels = [] + glyph1Display.DataAxesGrid.ZAxisNotation = 'Mixed' + glyph1Display.DataAxesGrid.ZAxisPrecision = 2 + glyph1Display.DataAxesGrid.ZAxisUseCustomLabels = 0 + glyph1Display.DataAxesGrid.ZAxisLabels = [] + glyph1Display.DataAxesGrid.UseCustomBounds = 0 + glyph1Display.DataAxesGrid.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + + # init the 'PolarAxesRepresentation' selected for 'PolarAxes' + glyph1Display.PolarAxes.Visibility = 0 + glyph1Display.PolarAxes.Translation = [0.0, 0.0, 0.0] + glyph1Display.PolarAxes.Scale = [1.0, 1.0, 1.0] + glyph1Display.PolarAxes.Orientation = [0.0, 0.0, 0.0] + glyph1Display.PolarAxes.EnableCustomBounds = [0, 0, 0] + glyph1Display.PolarAxes.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + glyph1Display.PolarAxes.EnableCustomRange = 0 + glyph1Display.PolarAxes.CustomRange = [0.0, 1.0] + glyph1Display.PolarAxes.PolarAxisVisibility = 1 + glyph1Display.PolarAxes.RadialAxesVisibility = 1 + glyph1Display.PolarAxes.DrawRadialGridlines = 1 + glyph1Display.PolarAxes.PolarArcsVisibility = 1 + glyph1Display.PolarAxes.DrawPolarArcsGridlines = 1 + glyph1Display.PolarAxes.NumberOfRadialAxes = 0 + glyph1Display.PolarAxes.AutoSubdividePolarAxis = 1 + glyph1Display.PolarAxes.NumberOfPolarAxis = 0 + glyph1Display.PolarAxes.MinimumRadius = 0.0 + glyph1Display.PolarAxes.MinimumAngle = 0.0 + glyph1Display.PolarAxes.MaximumAngle = 90.0 + glyph1Display.PolarAxes.RadialAxesOriginToPolarAxis = 1 + glyph1Display.PolarAxes.Ratio = 1.0 + glyph1Display.PolarAxes.PolarAxisColor = [1.0, 1.0, 1.0] + glyph1Display.PolarAxes.PolarArcsColor = [1.0, 1.0, 1.0] + glyph1Display.PolarAxes.LastRadialAxisColor = [1.0, 1.0, 1.0] + glyph1Display.PolarAxes.SecondaryPolarArcsColor = [1.0, 1.0, 1.0] + glyph1Display.PolarAxes.SecondaryRadialAxesColor = [1.0, 1.0, 1.0] + glyph1Display.PolarAxes.PolarAxisTitleVisibility = 1 + glyph1Display.PolarAxes.PolarAxisTitle = 'Radial Distance' + glyph1Display.PolarAxes.PolarAxisTitleLocation = 'Bottom' + glyph1Display.PolarAxes.PolarLabelVisibility = 1 + glyph1Display.PolarAxes.PolarLabelFormat = '%-#6.3g' + glyph1Display.PolarAxes.PolarLabelExponentLocation = 'Labels' + glyph1Display.PolarAxes.RadialLabelVisibility = 1 + glyph1Display.PolarAxes.RadialLabelFormat = '%-#3.1f' + glyph1Display.PolarAxes.RadialLabelLocation = 'Bottom' + glyph1Display.PolarAxes.RadialUnitsVisibility = 1 + glyph1Display.PolarAxes.ScreenSize = 10.0 + glyph1Display.PolarAxes.PolarAxisTitleOpacity = 1.0 + glyph1Display.PolarAxes.PolarAxisTitleFontFamily = 'Arial' + glyph1Display.PolarAxes.PolarAxisTitleFontFile = '' + glyph1Display.PolarAxes.PolarAxisTitleBold = 0 + glyph1Display.PolarAxes.PolarAxisTitleItalic = 0 + glyph1Display.PolarAxes.PolarAxisTitleShadow = 0 + glyph1Display.PolarAxes.PolarAxisTitleFontSize = 12 + glyph1Display.PolarAxes.PolarAxisLabelOpacity = 1.0 + glyph1Display.PolarAxes.PolarAxisLabelFontFamily = 'Arial' + glyph1Display.PolarAxes.PolarAxisLabelFontFile = '' + glyph1Display.PolarAxes.PolarAxisLabelBold = 0 + glyph1Display.PolarAxes.PolarAxisLabelItalic = 0 + glyph1Display.PolarAxes.PolarAxisLabelShadow = 0 + glyph1Display.PolarAxes.PolarAxisLabelFontSize = 12 + glyph1Display.PolarAxes.LastRadialAxisTextOpacity = 1.0 + glyph1Display.PolarAxes.LastRadialAxisTextFontFamily = 'Arial' + glyph1Display.PolarAxes.LastRadialAxisTextFontFile = '' + glyph1Display.PolarAxes.LastRadialAxisTextBold = 0 + glyph1Display.PolarAxes.LastRadialAxisTextItalic = 0 + glyph1Display.PolarAxes.LastRadialAxisTextShadow = 0 + glyph1Display.PolarAxes.LastRadialAxisTextFontSize = 12 + glyph1Display.PolarAxes.SecondaryRadialAxesTextOpacity = 1.0 + glyph1Display.PolarAxes.SecondaryRadialAxesTextFontFamily = 'Arial' + glyph1Display.PolarAxes.SecondaryRadialAxesTextFontFile = '' + glyph1Display.PolarAxes.SecondaryRadialAxesTextBold = 0 + glyph1Display.PolarAxes.SecondaryRadialAxesTextItalic = 0 + glyph1Display.PolarAxes.SecondaryRadialAxesTextShadow = 0 + glyph1Display.PolarAxes.SecondaryRadialAxesTextFontSize = 12 + glyph1Display.PolarAxes.EnableDistanceLOD = 1 + glyph1Display.PolarAxes.DistanceLODThreshold = 0.7 + glyph1Display.PolarAxes.EnableViewAngleLOD = 1 + glyph1Display.PolarAxes.ViewAngleLODThreshold = 0.7 + glyph1Display.PolarAxes.SmallestVisiblePolarAngle = 0.5 + glyph1Display.PolarAxes.PolarTicksVisibility = 1 + glyph1Display.PolarAxes.ArcTicksOriginToPolarAxis = 1 + glyph1Display.PolarAxes.TickLocation = 'Both' + glyph1Display.PolarAxes.AxisTickVisibility = 1 + glyph1Display.PolarAxes.AxisMinorTickVisibility = 0 + glyph1Display.PolarAxes.ArcTickVisibility = 1 + glyph1Display.PolarAxes.ArcMinorTickVisibility = 0 + glyph1Display.PolarAxes.DeltaAngleMajor = 10.0 + glyph1Display.PolarAxes.DeltaAngleMinor = 5.0 + glyph1Display.PolarAxes.PolarAxisMajorTickSize = 0.0 + glyph1Display.PolarAxes.PolarAxisTickRatioSize = 0.3 + glyph1Display.PolarAxes.PolarAxisMajorTickThickness = 1.0 + glyph1Display.PolarAxes.PolarAxisTickRatioThickness = 0.5 + glyph1Display.PolarAxes.LastRadialAxisMajorTickSize = 0.0 + glyph1Display.PolarAxes.LastRadialAxisTickRatioSize = 0.3 + glyph1Display.PolarAxes.LastRadialAxisMajorTickThickness = 1.0 + glyph1Display.PolarAxes.LastRadialAxisTickRatioThickness = 0.5 + glyph1Display.PolarAxes.ArcMajorTickSize = 0.0 + glyph1Display.PolarAxes.ArcTickRatioSize = 0.3 + glyph1Display.PolarAxes.ArcMajorTickThickness = 1.0 + glyph1Display.PolarAxes.ArcTickRatioThickness = 0.5 + glyph1Display.PolarAxes.Use2DMode = 0 + glyph1Display.PolarAxes.UseLogAxis = 0 + + # show color bar/color legend + glyph1Display.SetScalarBarVisibility(renderView1, True) + + # update the view to ensure updated data information + renderView1.Update() + + # Rescale transfer function + displacementduneVTKLUT.RescaleTransferFunction(0.0, 1.3513808010835129) + + # Rescale transfer function + displacementduneVTKPWF.RescaleTransferFunction(0.0, 1.3513808010835127) + + # Properties modified on glyph1 + glyph1.Stride = 25 + + # update the view to ensure updated data information + renderView1.Update() + + # Rescale transfer function + displacementduneVTKLUT.RescaleTransferFunction(0.0, 1.3513808010835129) + + # Properties modified on glyph1 + glyph1.Stride = 30 + + # update the view to ensure updated data information + renderView1.Update() + + # Rescale transfer function + displacementduneVTKLUT.RescaleTransferFunction(0.0, 1.3513808010835129) + + # Properties modified on glyph1 + glyph1.Stride = 40 + + # update the view to ensure updated data information + renderView1.Update() + + # Rescale transfer function + displacementduneVTKLUT.RescaleTransferFunction(0.0, 1.3513808010835129) + + # turn off scalar coloring + ColorBy(glyph1Display, None) + + # Hide the scalar bar for this color map if no visible data is colored by it. + HideScalarBarIfNotNeeded(isometryErrorFunctionLUT, renderView1) + + # change solid color (Black) + # glyph1Display.AmbientColor = [0.0, 0.0, 0.0] + # glyph1Display.DiffuseColor = [0.0, 0.0, 0.0] + + # change solid color (DarkBlue) + glyph1Display.AmbientColor = [0.0, 0.3333333333333333, 0.4980392156862745] + glyph1Display.DiffuseColor = [0.0, 0.3333333333333333, 0.4980392156862745] + + # Properties modified on glyph1Display + glyph1Display.Opacity = 0.25 + + # Properties modified on glyph1Display + glyph1Display.Specular = 1.0 + + # Properties modified on glyph1Display + glyph1Display.Specular = 0.0 + + # Properties modified on glyph1Display + glyph1Display.Ambient = 0.2 + + #================================================================ + # addendum: following script captures some of the application + # state to faithfully reproduce the visualization during playback + #================================================================ + + # get layout + layout1 = GetLayout() + + print('layout1:',layout1) + + #-------------------------------- + # saving layout sizes for layouts + + # layout/tab size in pixels + layout1.SetSize(1526, 873) + + #----------------------------------- + # saving camera placements for views + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.5317894883522003, -7.950546149218976, 1.8355840818083122] + renderView1.CameraFocalPoint = [-0.3373855559365908, -2.646797497088115, 0.9959448222039734] + renderView1.CameraViewUp = [-0.0628645081836353, 0.15830147075535642, 0.9853875876869572] + renderView1.CameraViewAngle = 25.620465826651394 + renderView1.CameraParallelScale = 1.3907168028548302 + + + + #Camera View: + # # get active view + # renderView1 = GetActiveViewOrCreate('RenderView') + + # # reset view to fit data + # renderView1.ResetCamera(True) + + # # reset view to fit data bounds + # renderView1.ResetCamera(-1.0, 1.0257619619369507, -0.9359287619590759, 0.9359057545661926, -0.32227325439453125, 0.3284286856651306, True) + + # # reset view to fit data bounds + # renderView1.ResetCamera(-1.0, 1.0257619619369507, -0.9359287619590759, 0.9359057545661926, -0.32227325439453125, 0.3284286856651306, False) + + # # reset view to fit data bounds + # renderView1.ResetCamera(-1.0, 1.0257619619369507, -0.9359287619590759, 0.9359057545661926, -0.32227325439453125, 0.3284286856651306, False) + + # # reset view to fit data + # renderView1.ResetCamera(True) + + # # reset view to fit data + # renderView1.ResetCamera(True) + + # # reset view to fit data + # renderView1.ResetCamera(True) + + # # reset view to fit data + # renderView1.ResetCamera(True) + + # #================================================================ + # # addendum: following script captures some of the application + # # state to faithfully reproduce the visualization during playback + # #================================================================ + + # # get layout + # layout1 = GetLayout() + + # #-------------------------------- + # # saving layout sizes for layouts + + # # layout/tab size in pixels + # layout1.SetSize(1526, 873) + + # #----------------------------------- + # # saving camera placements for views + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [-0.018803465136511217, -6.344229746084431, 0.8643549211317467] + # renderView1.CameraFocalPoint = [-0.012119019404053688, -0.0020669102668762207, 0.4409867525100708] + # renderView1.CameraViewUp = [-0.03973953847604448, 0.06659538567372057, 0.9969883769075141] + # renderView1.CameraViewAngle = 20.04581901489118 + # renderView1.CameraParallelScale = 1.645126712646716 + + + # # get active view + # renderView1 = GetActiveViewOrCreate('RenderView') + # # Adjust camera + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.6190132298381256, -5.978102214366906, 2.4112112938696906] + # renderView1.CameraFocalPoint = [-0.012119019404053688, -2.568960189819349e-05, 0.45254665613174444] + # renderView1.CameraViewUp = [-0.05404025977722483, 0.305743653322491, 0.9505790176393684] + # renderView1.CameraViewAngle = 24.32226040473463 + # renderView1.CameraParallelScale = 1.6363442723895476 + # # Adjust camera + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.3561670752092, -6.043235495365254, 2.2735558848687107] + # renderView1.CameraFocalPoint = [-0.012119019404053686, -2.568960189819236e-05, 0.4525466561317445] + # renderView1.CameraViewUp = [-0.05311946210744569, 0.28514078064511844, 0.9570125693837611] + # renderView1.CameraViewAngle = 24.32226040473463 + # renderView1.CameraParallelScale = 1.6363442723895476 + # # Adjust camera + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.013021130832849942, -5.989702202981394, 2.4762159109807733] + # renderView1.CameraFocalPoint = [-0.01211901940405369, -2.5689601898192394e-05, 0.4525466561317443] + # renderView1.CameraViewUp = [-0.052765304975756634, 0.3194397242049962, 0.9461363988298154] + # renderView1.CameraViewAngle = 24.32226040473463 + # renderView1.CameraParallelScale = 1.6363442723895476 + # # Adjust camera + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.018300562382599708, -7.247534270791088, 2.9011864544990695] + # renderView1.CameraFocalPoint = [-0.01211901940405369, -2.5689601898192394e-05, 0.4525466561317443] + # renderView1.CameraViewUp = [-0.052765304975756634, 0.3194397242049962, 0.9461363988298154] + # renderView1.CameraViewAngle = 24.32226040473463 + # renderView1.CameraParallelScale = 1.6363442723895476 + + # # reset view to fit data bounds + # renderView1.ResetCamera(-1.0, 1.0257619619369507, -0.9359287619590759, 0.9359057545661926, -0.32227325439453125, 0.3284286856651306, True) + # # Adjust camera + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.03465030801593522, -5.186584602883577, 1.7554108333598906] + # renderView1.CameraFocalPoint = [0.012880980968475342, -1.150369644165039e-05, 0.0030777156352996826] + # renderView1.CameraViewUp = [-0.052765304975756634, 0.3194397242049962, 0.9461363988298154] + # renderView1.CameraViewAngle = 17.52577319587629 + # renderView1.CameraParallelScale = 1.416941159547869 + + # # reset view to fit data + # renderView1.ResetCamera(True) + # # Adjust camera + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.013021130832849927, -5.98970220298139, 2.4762159109807724] + # renderView1.CameraFocalPoint = [-0.012119019404053688, -2.568960189819336e-05, 0.4525466561317444] + # renderView1.CameraViewUp = [-0.052765304975756634, 0.3194397242049962, 0.9461363988298154] + # renderView1.CameraViewAngle = 24.4749904543719 + # renderView1.CameraParallelScale = 1.6363442723895476 + + # #================================================================ + # # addendum: following script captures some of the application + # # state to faithfully reproduce the visualization during playback + # #================================================================ + + # # get layout + # layout1 = GetLayout() + + # #-------------------------------- + # # saving layout sizes for layouts + + # # layout/tab size in pixels + # layout1.SetSize(2634, 873) + + # #----------------------------------- + # # saving camera placements for views + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.013021130832849927, -5.98970220298139, 2.4762159109807724] + # renderView1.CameraFocalPoint = [-0.012119019404053688, -2.568960189819336e-05, 0.4525466561317444] + # renderView1.CameraViewUp = [-0.052765304975756634, 0.3194397242049962, 0.9461363988298154] + # renderView1.CameraViewAngle = 24.4749904543719 + # renderView1.CameraParallelScale = 1.6363442723895476 + + + # CAMERA ANGLE : + # get active view + renderView1 = GetActiveViewOrCreate('RenderView') + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.3406855662763682, -6.09404732570838, 2.3533248674216507] + renderView1.CameraFocalPoint = [-0.012119019404053686, 0.0024850368499755933, 0.4612774252891543] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 22.909507445589917 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.3406855662763682, -6.09404732570838, 2.3533248674216507] + renderView1.CameraFocalPoint = [-0.012119019404053686, 0.0024850368499755933, 0.4612774252891543] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 22.909507445589917 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.3406855662763682, -6.09404732570838, 2.3533248674216507] + renderView1.CameraFocalPoint = [-0.012119019404053686, 0.0024850368499755933, 0.4612774252891543] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 22.909507445589917 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.3406855662763682, -6.09404732570838, 2.3533248674216507] + renderView1.CameraFocalPoint = [-0.012119019404053686, 0.0024850368499755933, 0.4612774252891543] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 22.909507445589917 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.3406855662763682, -6.09404732570838, 2.3533248674216507] + renderView1.CameraFocalPoint = [-0.012119019404053686, 0.0024850368499755933, 0.4612774252891543] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 22.909507445589917 + renderView1.CameraParallelScale = 1.6543276528524797 + + # reset view to fit data + renderView1.ResetCamera(True) + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.340685566276368, -6.094047325708376, 2.353324867421649] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975586, 0.46127742528915405] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + + # reset view to fit data + renderView1.ResetCamera(True) + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.340685566276368, -6.094047325708376, 2.353324867421649] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975586, 0.46127742528915405] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + + # reset view to fit data + renderView1.ResetCamera(True) + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.340685566276368, -6.094047325708376, 2.353324867421649] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975586, 0.46127742528915405] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.2801298596202444, -6.068765481441859, 2.4420837460567193] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975583, 0.4612774252891541] + renderView1.CameraViewUp = [-0.003588791982126036, 0.3103104941288703, 0.9506284856901804] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.2801298596202444, -6.068765481441859, 2.4420837460567193] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975583, 0.4612774252891541] + renderView1.CameraViewUp = [-0.003588791982126036, 0.3103104941288703, 0.9506284856901804] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.2801298596202444, -6.068765481441859, 2.4420837460567193] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975583, 0.4612774252891541] + renderView1.CameraViewUp = [-0.003588791982126036, 0.3103104941288703, 0.9506284856901804] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.2801298596202444, -6.068765481441859, 2.4420837460567193] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975583, 0.4612774252891541] + renderView1.CameraViewUp = [-0.003588791982126036, 0.3103104941288703, 0.9506284856901804] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.2801298596202444, -6.068765481441859, 2.4420837460567193] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975583, 0.4612774252891541] + renderView1.CameraViewUp = [-0.003588791982126036, 0.3103104941288703, 0.9506284856901804] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + + #================================================================ + # addendum: following script captures some of the application + # state to faithfully reproduce the visualization during playback + #================================================================ + + # get layout + layout1 = GetLayout() + + #-------------------------------- + # saving layout sizes for layouts + + # layout/tab size in pixels + layout1.SetSize(2634, 873) + + #----------------------------------- + # saving camera placements for views + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.2801298596202444, -6.068765481441859, 2.4420837460567193] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975583, 0.4612774252891541] + renderView1.CameraViewUp = [-0.003588791982126036, 0.3103104941288703, 0.9506284856901804] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + + #----------------------------------------- + + + # NEW CAMERA ANGLE + # get active view + renderView1 = GetActiveViewOrCreate('RenderView') + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [0.029912744310289893, -5.070841782883837, 2.2549998815448675] + renderView1.CameraFocalPoint = [-0.01429512538015842, -0.00023770332336425738, 0.013518139719963074] + renderView1.CameraViewUp = [-0.00012445946588129702, 0.4043111685224597, 0.9146214864728713] + renderView1.CameraViewAngle = 15.234822451317298 + renderView1.CameraParallelScale = 1.434922768089897 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [0.13564184339304414, -5.002529762527205, 2.399270332667408] + renderView1.CameraFocalPoint = [-0.01429512538015842, -0.00023770332336425751, 0.013518139719963072] + renderView1.CameraViewUp = [-0.00025096931135483794, 0.4304728027354104, 0.9026035137974622] + renderView1.CameraViewAngle = 15.234822451317298 + renderView1.CameraParallelScale = 1.434922768089897 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [0.1351322919568179, -4.837566763896823, 2.718169591018591] + renderView1.CameraFocalPoint = [-0.014295125380158416, -0.00023770332336425754, 0.013518139719963074] + renderView1.CameraViewUp = [-0.0025668859947288896, 0.4879570721064113, 0.8728638535749024] + renderView1.CameraViewAngle = 15.234822451317298 + renderView1.CameraParallelScale = 1.434922768089897 + + #================================================================ + # addendum: following script captures some of the application + # state to faithfully reproduce the visualization during playback + #================================================================ + + # get layout + layout1 = GetLayout() + + #-------------------------------- + # saving layout sizes for layouts + + # layout/tab size in pixels + layout1.SetSize(2634, 873) + + #----------------------------------- + # saving camera placements for views + + # current camera placement for renderView1 + renderView1.CameraPosition = [0.1351322919568179, -4.837566763896823, 2.718169591018591] + renderView1.CameraFocalPoint = [-0.014295125380158416, -0.00023770332336425754, 0.013518139719963074] + renderView1.CameraViewUp = [-0.0025668859947288896, 0.4879570721064113, 0.8728638535749024] + renderView1.CameraViewAngle = 15.234822451317298 + renderView1.CameraParallelScale = 1.434922768089897 + ### + + + + + + + #TEST:Set Size in Pixels: + # layout/tab size in pixels + layout1.SetSize(750, 620) + + + + + + # reset view to fit data + renderView1.ResetCamera(True) + + + # Write to pdf + # ExportView(outputName + '.pdf', view=renderView1) + + # export view + ExportView(outputName + '.pdf', view=renderView1, Plottitle='ParaView GL2PS Export', + Compressoutputfile=0, + Drawbackground=1, + Cullhiddenprimitives=1, + Linewidthscalingfactor=0.714, + Pointsizescalingfactor=0.714, + GL2PSdepthsortmethod='Simple sorting (fast, good)', + Rasterize3Dgeometry=1, + Dontrasterizecubeaxes=1, + Rendertextaspaths=1) + +#================================================================ +# addendum: following script captures some of the application +# state to faithfully reproduce the visualization during playback +#================================================================ + + # get layout + layout1 = GetLayout() + + #-------------------------------- + # saving layout sizes for layouts + + # layout/tab size in pixels + layout1.SetSize(750, 620) + + + + # # get active view + # renderView1 = GetActiveViewOrCreate('RenderView') + + # # get layout + # layout1 = GetLayout() + + # # layout/tab size in pixels + # layout1.SetSize(2922, 908) + + # # current camera placement for renderView1 + # renderView1.InteractionMode = '2D' + # renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] + # renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] + # renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] + # renderView1.CameraParallelScale = 1.3953474628479614 + + # save screenshot + SaveScreenshot(outputName + '.png', renderView1, ImageResolution=[1500, 1240], + FontScaling='Scale fonts proportionally', + OverrideColorPalette='WhiteBackground', + StereoMode='No change', + TransparentBackground=0, + # PNG options + CompressionLevel='5', + MetaData=['Application', 'ParaView']) + + # # save screenshot + # SaveScreenshot(outputName + '.png', renderView1, ImageResolution=[5844, 1816], + # FontScaling='Scale fonts proportionally', + # OverrideColorPalette='WhiteBackground', + # StereoMode='No change', + # TransparentBackground=0, + # # PNG options + # CompressionLevel='5', + # MetaData=['Application', 'ParaView']) diff --git a/experiment/macro-problem/variableBC/ParaviewVariableBC_birdsview.py b/experiment/macro-problem/variableBC/ParaviewVariableBC_birdsview.py new file mode 100644 index 0000000000000000000000000000000000000000..5b946e7eb24bfec24eeccd6f3967dcda7dc03b01 --- /dev/null +++ b/experiment/macro-problem/variableBC/ParaviewVariableBC_birdsview.py @@ -0,0 +1,2384 @@ +#### import the simple module from the paraview +from paraview.simple import * +# from paraview import * +#### disable automatic camera reset on 'Show' +paraview.simple._DisableFirstRenderCameraReset() + + +gridLevel = 3 + +AddGlyph = True +AddGlyph = False + +#Boundary length segment parameter +deltaArray = [0.25,0.5,1.0,1.5,2.0] +deltaArray = [0.5] + + + +for i in range(0, len(deltaArray)): + # Reset/Reopen Session. + Disconnect() + Connect() + ResetSession() + + + + delta = deltaArray[i] + + """" + remove decimal points for string + """ + # deltaString = str(delta); + deltaString = (str(delta)).replace('.', '') + + print('deltaString:', deltaString) + + + basePath = '/home/klaus/Desktop/Dune_TestTest/dune-microstructure/outputs_cylindrical_2variableBC/' + experimentName = 'cylindrical_2variableBC_delta' + deltaString + '_level'+ str(gridLevel) + '_NC.vtu' + fileName = basePath + experimentName + print('fileName:', fileName) + # fileName = ['/home/klaus/Desktop/Dune_TestTest/dune-microstructure/outputs_cylindrical_2variableBC/cylindrical_2variableBC_delta01_level3_NC.vtu'] + + outputPath = '/home/klaus/Desktop/' + outputName = outputPath + 'VariableBC_delta' + deltaString + '_birdsview' + + if AddGlyph: + outputName = outputName + '_normalfield' + + + #----------------------- Create Box to visualize boundary conditions: + # create a new 'Box' + box1 = Box(registrationName='Box1') + + # get active view + renderView1 = GetActiveViewOrCreate('RenderView') + + # show data in view + box1Display = Show(box1, renderView1, 'GeometryRepresentation') + + # trace defaults for the display properties. + box1Display.Representation = 'Surface' + box1Display.ColorArrayName = [None, ''] + box1Display.SelectTCoordArray = 'TCoords' + box1Display.SelectNormalArray = 'Normals' + box1Display.SelectTangentArray = 'None' + box1Display.OSPRayScaleArray = 'Normals' + box1Display.OSPRayScaleFunction = 'PiecewiseFunction' + box1Display.SelectOrientationVectors = 'None' + box1Display.ScaleFactor = 0.1 + box1Display.SelectScaleArray = 'None' + box1Display.GlyphType = 'Arrow' + box1Display.GlyphTableIndexArray = 'None' + box1Display.GaussianRadius = 0.005 + box1Display.SetScaleArray = ['POINTS', 'Normals'] + box1Display.ScaleTransferFunction = 'PiecewiseFunction' + box1Display.OpacityArray = ['POINTS', 'Normals'] + box1Display.OpacityTransferFunction = 'PiecewiseFunction' + box1Display.DataAxesGrid = 'GridAxesRepresentation' + box1Display.PolarAxes = 'PolarAxesRepresentation' + + # init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' + box1Display.ScaleTransferFunction.Points = [-1.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + # init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' + box1Display.OpacityTransferFunction.Points = [-1.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + + # Properties modified on box1 + box1.XLength = 2.0 + + # update the view to ensure updated data information + renderView1.Update() + + # Properties modified on box1 + box1.XLength = 0.1 + box1.YLength = delta + box1.ZLength = 0.1 + + # update the view to ensure updated data information + renderView1.Update() + + # Properties modified on box1Display + box1Display.Position = [-1.0, 0.0, 0.0] + + # Properties modified on box1Display.DataAxesGrid + box1Display.DataAxesGrid.Position = [-1.0, 0.0, 0.0] + + # Properties modified on box1Display.PolarAxes + box1Display.PolarAxes.Translation = [-1.0, 0.0, 0.0] + + # update the view to ensure updated data information + renderView1.Update() + #------------------------------------------------------------------------------- + + + + # create a new 'XML Unstructured Grid Reader' + cylindrical_2variableBC_delta15_level3_NCvtu = XMLUnstructuredGridReader(registrationName=experimentName, FileName=[fileName]) + cylindrical_2variableBC_delta15_level3_NCvtu.CellArrayStatus = [] + cylindrical_2variableBC_delta15_level3_NCvtu.PointArrayStatus = ['Displacement dune-VTK', 'IsometryErrorFunction', 'SurfaceNormalDiscrete'] + cylindrical_2variableBC_delta15_level3_NCvtu.TimeArray = 'TimeValue' + + # Properties modified on cylindrical_2variableBC_delta15_level3_NCvtu + cylindrical_2variableBC_delta15_level3_NCvtu.TimeArray = 'None' + + # get active view + renderView1 = GetActiveViewOrCreate('RenderView') + + # show data in view + cylindrical_2variableBC_delta15_level3_NCvtuDisplay = Show(cylindrical_2variableBC_delta15_level3_NCvtu, renderView1, 'UnstructuredGridRepresentation') + + # get 2D transfer function for 'IsometryErrorFunction' + isometryErrorFunctionTF2D = GetTransferFunction2D('IsometryErrorFunction') + isometryErrorFunctionTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" + isometryErrorFunctionTF2D.Boxes = [] + isometryErrorFunctionTF2D.ScalarRangeInitialized = 0 + isometryErrorFunctionTF2D.Range = [0.0, 1.0, 0.0, 1.0] + isometryErrorFunctionTF2D.OutputDimensions = [10, 10] + + # get color transfer function/color map for 'IsometryErrorFunction' + isometryErrorFunctionLUT = GetColorTransferFunction('IsometryErrorFunction') + isometryErrorFunctionLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" + isometryErrorFunctionLUT.InterpretValuesAsCategories = 0 + isometryErrorFunctionLUT.AnnotationsInitialized = 0 + isometryErrorFunctionLUT.ShowCategoricalColorsinDataRangeOnly = 0 + isometryErrorFunctionLUT.RescaleOnVisibilityChange = 0 + isometryErrorFunctionLUT.EnableOpacityMapping = 0 + isometryErrorFunctionLUT.TransferFunction2D = isometryErrorFunctionTF2D + isometryErrorFunctionLUT.Use2DTransferFunction = 0 + isometryErrorFunctionLUT.RGBPoints = [0.0, 0.231373, 0.298039, 0.752941, 0.030321702361106873, 0.865003, 0.865003, 0.865003, 0.060643404722213745, 0.705882, 0.0156863, 0.14902] + isometryErrorFunctionLUT.UseLogScale = 0 + isometryErrorFunctionLUT.UseOpacityControlPointsFreehandDrawing = 0 + isometryErrorFunctionLUT.ShowDataHistogram = 0 + isometryErrorFunctionLUT.AutomaticDataHistogramComputation = 0 + isometryErrorFunctionLUT.DataHistogramNumberOfBins = 10 + isometryErrorFunctionLUT.ColorSpace = 'Diverging' + isometryErrorFunctionLUT.UseBelowRangeColor = 0 + isometryErrorFunctionLUT.BelowRangeColor = [0.0, 0.0, 0.0] + isometryErrorFunctionLUT.UseAboveRangeColor = 0 + isometryErrorFunctionLUT.AboveRangeColor = [0.5, 0.5, 0.5] + isometryErrorFunctionLUT.NanColor = [1.0, 1.0, 0.0] + isometryErrorFunctionLUT.NanOpacity = 1.0 + isometryErrorFunctionLUT.Discretize = 1 + isometryErrorFunctionLUT.NumberOfTableValues = 256 + isometryErrorFunctionLUT.ScalarRangeInitialized = 1.0 + isometryErrorFunctionLUT.HSVWrap = 0 + isometryErrorFunctionLUT.VectorComponent = 0 + isometryErrorFunctionLUT.VectorMode = 'Magnitude' + isometryErrorFunctionLUT.AllowDuplicateScalars = 1 + isometryErrorFunctionLUT.Annotations = [] + isometryErrorFunctionLUT.ActiveAnnotatedValues = [] + isometryErrorFunctionLUT.IndexedColors = [] + isometryErrorFunctionLUT.IndexedOpacities = [] + + # get opacity transfer function/opacity map for 'IsometryErrorFunction' + isometryErrorFunctionPWF = GetOpacityTransferFunction('IsometryErrorFunction') + isometryErrorFunctionPWF.Points = [0.0, 0.0, 0.5, 0.0, 0.060643404722213745, 1.0, 0.5, 0.0] + isometryErrorFunctionPWF.AllowDuplicateScalars = 1 + isometryErrorFunctionPWF.UseLogScale = 0 + isometryErrorFunctionPWF.ScalarRangeInitialized = 1 + + # trace defaults for the display properties. + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Selection = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Representation = 'Surface' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ColorArrayName = ['POINTS', 'IsometryErrorFunction'] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.LookupTable = isometryErrorFunctionLUT + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MapScalars = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MultiComponentsMapping = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.InterpolateScalarsBeforeMapping = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Opacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PointSize = 2.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.LineWidth = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.RenderLinesAsTubes = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.RenderPointsAsSpheres = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Interpolation = 'Gouraud' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Specular = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SpecularColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SpecularPower = 100.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Luminosity = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Ambient = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Diffuse = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Roughness = 0.3 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Metallic = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.EdgeTint = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Anisotropy = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.AnisotropyRotation = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BaseIOR = 1.5 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoatStrength = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoatIOR = 2.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoatRoughness = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoatColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectTCoordArray = 'None' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectNormalArray = 'None' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectTangentArray = 'None' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Texture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.RepeatTextures = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.InterpolateTextures = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SeamlessU = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SeamlessV = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseMipmapTextures = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ShowTexturesOnBackface = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BaseColorTexture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NormalTexture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NormalScale = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoatNormalTexture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoatNormalScale = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MaterialTexture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OcclusionStrength = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.AnisotropyTexture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.EmissiveTexture = None + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.EmissiveFactor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.FlipTextures = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BackfaceRepresentation = 'Follow Frontface' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BackfaceAmbientColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BackfaceOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Position = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Scale = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Orientation = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Origin = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CoordinateShiftScaleMethod = 'Always Auto Shift Scale' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Pickable = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Triangulate = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseShaderReplacements = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ShaderReplacements = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NonlinearSubdivisionLevel = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseDataPartitions = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OSPRayUseScaleArray = 'All Approximate' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OSPRayScaleArray = 'IsometryErrorFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OSPRayScaleFunction = 'PiecewiseFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OSPRayMaterial = 'None' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BlockSelectors = ['/'] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BlockColors = [] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.BlockOpacities = [] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Orient = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OrientationMode = 'Direction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectOrientationVectors = 'Displacement dune-VTK' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Scaling = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleMode = 'No Data Scaling Off' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleFactor = 0.2 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectScaleArray = 'IsometryErrorFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType = 'Arrow' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseGlyphTable = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphTableIndexArray = 'IsometryErrorFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseCompositeGlyphTable = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseGlyphCullingAndLOD = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.LODValues = [] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ColorByLODIndex = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GaussianRadius = 0.01 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ShaderPreset = 'Sphere' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CustomTriangleScale = 3 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CustomShader = """ // This custom shader code define a gaussian blur + // Please take a look into vtkSMPointGaussianRepresentation.cxx + // for other custom shader examples + //VTK::Color::Impl + float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy); + float gaussian = exp(-0.5*dist2); + opacity = opacity*gaussian; + """ + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Emissive = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleByArray = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleArrayComponent = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseScaleFunction = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleTransferFunction = 'PiecewiseFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityByArray = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityArray = ['POINTS', 'IsometryErrorFunction'] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityArrayComponent = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityTransferFunction = 'PiecewiseFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid = 'GridAxesRepresentation' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelColor = [0.0, 1.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelFontSize = 18 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelJustification = 'Left' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionCellLabelShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelColor = [1.0, 1.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelFontSize = 18 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelJustification = 'Left' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectionPointLabelShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes = 'PolarAxesRepresentation' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScalarOpacityFunction = isometryErrorFunctionPWF + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScalarOpacityUnitDistance = 0.22272467953508482 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseSeparateOpacityArray = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityArrayName = ['POINTS', 'IsometryErrorFunction'] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityComponent = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectMapper = 'Projected tetra' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SamplingDimensions = [128, 128, 128] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseFloatingPointFrameBuffer = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NumberOfSteps = 40 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.StepSize = 0.25 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NormalizeVectors = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.EnhancedLIC = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ColorMode = 'Blend' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.LICIntensity = 0.8 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MapModeBias = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.EnhanceContrast = 'Off' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.LowLICContrastEnhancementFactor = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.HighLICContrastEnhancementFactor = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.LowColorContrastEnhancementFactor = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.HighColorContrastEnhancementFactor = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.AntiAlias = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MaskOnSurface = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MaskThreshold = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MaskIntensity = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MaskColor = [0.5, 0.5, 0.5] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GenerateNoiseTexture = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NoiseType = 'Gaussian' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NoiseTextureSize = 128 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NoiseGrainSize = 2 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MinNoiseValue = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.MaxNoiseValue = 0.8 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NumberOfNoiseLevels = 1024 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ImpulseNoiseProbability = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ImpulseNoiseBackgroundValue = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.NoiseGeneratorSeed = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.CompositeStrategy = 'AUTO' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.UseLICForLOD = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.WriteLog = '' + + # init the 'PiecewiseFunction' selected for 'OSPRayScaleFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OSPRayScaleFunction.Points = [0.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OSPRayScaleFunction.UseLogScale = 0 + + # init the 'Arrow' selected for 'GlyphType' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType.TipResolution = 6 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType.TipRadius = 0.1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType.TipLength = 0.35 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType.ShaftResolution = 6 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType.ShaftRadius = 0.03 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.GlyphType.Invert = 0 + + # init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.060643404722213745, 1.0, 0.5, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.ScaleTransferFunction.UseLogScale = 0 + + # init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.060643404722213745, 1.0, 0.5, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.OpacityTransferFunction.UseLogScale = 0 + + # init the 'GridAxesRepresentation' selected for 'DataAxesGrid' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitle = 'X Axis' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitle = 'Y Axis' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitle = 'Z Axis' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XTitleOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YTitleOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZTitleOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.FacesToRender = 63 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.CullBackface = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.CullFrontface = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ShowGrid = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ShowEdges = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ShowTicks = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.LabelUniqueEdgesOnly = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.AxesToLabel = 63 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XLabelOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YLabelOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZLabelOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XAxisNotation = 'Mixed' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XAxisPrecision = 2 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XAxisUseCustomLabels = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.XAxisLabels = [] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YAxisNotation = 'Mixed' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YAxisPrecision = 2 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YAxisUseCustomLabels = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.YAxisLabels = [] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZAxisNotation = 'Mixed' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZAxisPrecision = 2 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZAxisUseCustomLabels = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.ZAxisLabels = [] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.UseCustomBounds = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.DataAxesGrid.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + + # init the 'PolarAxesRepresentation' selected for 'PolarAxes' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.Visibility = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.Translation = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.Scale = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.Orientation = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.EnableCustomBounds = [0, 0, 0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.EnableCustomRange = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.CustomRange = [0.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.RadialAxesVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.DrawRadialGridlines = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarArcsVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.DrawPolarArcsGridlines = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.NumberOfRadialAxes = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.AutoSubdividePolarAxis = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.NumberOfPolarAxis = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.MinimumRadius = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.MinimumAngle = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.MaximumAngle = 90.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.RadialAxesOriginToPolarAxis = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.Ratio = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarArcsColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryPolarArcsColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitle = 'Radial Distance' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleLocation = 'Bottom' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarLabelVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarLabelFormat = '%-#6.3g' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarLabelExponentLocation = 'Labels' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.RadialLabelVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.RadialLabelFormat = '%-#3.1f' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.RadialLabelLocation = 'Bottom' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.RadialUnitsVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ScreenSize = 10.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextOpacity = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontFamily = 'Arial' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontFile = '' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextBold = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextItalic = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextShadow = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontSize = 12 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.EnableDistanceLOD = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.DistanceLODThreshold = 0.7 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.EnableViewAngleLOD = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ViewAngleLODThreshold = 0.7 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.SmallestVisiblePolarAngle = 0.5 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarTicksVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcTicksOriginToPolarAxis = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.TickLocation = 'Both' + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.AxisTickVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.AxisMinorTickVisibility = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcTickVisibility = 1 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcMinorTickVisibility = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.DeltaAngleMajor = 10.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.DeltaAngleMinor = 5.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisMajorTickSize = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTickRatioSize = 0.3 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisMajorTickThickness = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.PolarAxisTickRatioThickness = 0.5 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisMajorTickSize = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTickRatioSize = 0.3 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisMajorTickThickness = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTickRatioThickness = 0.5 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcMajorTickSize = 0.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcTickRatioSize = 0.3 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcMajorTickThickness = 1.0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.ArcTickRatioThickness = 0.5 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.Use2DMode = 0 + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.PolarAxes.UseLogAxis = 0 + + # show color bar/color legend + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SetScalarBarVisibility(renderView1, True) + + # find source + box1 = FindSource('Box1') + + # update the view to ensure updated data information + renderView1.Update() + + # set scalar coloring + ColorBy(cylindrical_2variableBC_delta15_level3_NCvtuDisplay, ('POINTS', 'Displacement dune-VTK', 'Magnitude')) + + # Hide the scalar bar for this color map if no visible data is colored by it. + HideScalarBarIfNotNeeded(isometryErrorFunctionLUT, renderView1) + + # rescale color and/or opacity maps used to include current data range + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.RescaleTransferFunctionToDataRange(True, False) + + # show color bar/color legend + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.SetScalarBarVisibility(renderView1, True) + + # get 2D transfer function for 'DisplacementduneVTK' + displacementduneVTKTF2D = GetTransferFunction2D('DisplacementduneVTK') + displacementduneVTKTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" + displacementduneVTKTF2D.Boxes = [] + displacementduneVTKTF2D.ScalarRangeInitialized = 0 + displacementduneVTKTF2D.Range = [0.0, 1.0, 0.0, 1.0] + displacementduneVTKTF2D.OutputDimensions = [10, 10] + + # get color transfer function/color map for 'DisplacementduneVTK' + displacementduneVTKLUT = GetColorTransferFunction('DisplacementduneVTK') + displacementduneVTKLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" + displacementduneVTKLUT.InterpretValuesAsCategories = 0 + displacementduneVTKLUT.AnnotationsInitialized = 0 + displacementduneVTKLUT.ShowCategoricalColorsinDataRangeOnly = 0 + displacementduneVTKLUT.RescaleOnVisibilityChange = 0 + displacementduneVTKLUT.EnableOpacityMapping = 0 + displacementduneVTKLUT.TransferFunction2D = displacementduneVTKTF2D + displacementduneVTKLUT.Use2DTransferFunction = 0 + displacementduneVTKLUT.RGBPoints = [0.0, 0.231373, 0.298039, 0.752941, 0.6756904005417563, 0.865003, 0.865003, 0.865003, 1.3513808010835127, 0.705882, 0.0156863, 0.14902] + displacementduneVTKLUT.UseLogScale = 0 + displacementduneVTKLUT.UseOpacityControlPointsFreehandDrawing = 0 + displacementduneVTKLUT.ShowDataHistogram = 0 + displacementduneVTKLUT.AutomaticDataHistogramComputation = 0 + displacementduneVTKLUT.DataHistogramNumberOfBins = 10 + displacementduneVTKLUT.ColorSpace = 'Diverging' + displacementduneVTKLUT.UseBelowRangeColor = 0 + displacementduneVTKLUT.BelowRangeColor = [0.0, 0.0, 0.0] + displacementduneVTKLUT.UseAboveRangeColor = 0 + displacementduneVTKLUT.AboveRangeColor = [0.5, 0.5, 0.5] + displacementduneVTKLUT.NanColor = [1.0, 1.0, 0.0] + displacementduneVTKLUT.NanOpacity = 1.0 + displacementduneVTKLUT.Discretize = 1 + displacementduneVTKLUT.NumberOfTableValues = 256 + displacementduneVTKLUT.ScalarRangeInitialized = 1.0 + displacementduneVTKLUT.HSVWrap = 0 + displacementduneVTKLUT.VectorComponent = 0 + displacementduneVTKLUT.VectorMode = 'Magnitude' + displacementduneVTKLUT.AllowDuplicateScalars = 1 + displacementduneVTKLUT.Annotations = [] + displacementduneVTKLUT.ActiveAnnotatedValues = [] + displacementduneVTKLUT.IndexedColors = [] + displacementduneVTKLUT.IndexedOpacities = [] + + # get opacity transfer function/opacity map for 'DisplacementduneVTK' + displacementduneVTKPWF = GetOpacityTransferFunction('DisplacementduneVTK') + displacementduneVTKPWF.Points = [0.0, 0.0, 0.5, 0.0, 1.3513808010835127, 1.0, 0.5, 0.0] + displacementduneVTKPWF.AllowDuplicateScalars = 1 + displacementduneVTKPWF.UseLogScale = 0 + displacementduneVTKPWF.ScalarRangeInitialized = 1 + + # create a new 'Warp By Vector' + warpByVector1 = WarpByVector(registrationName='WarpByVector1', Input=cylindrical_2variableBC_delta15_level3_NCvtu) + warpByVector1.Vectors = ['POINTS', 'Displacement dune-VTK'] + warpByVector1.ScaleFactor = 1.0 + + # show data in view + warpByVector1Display = Show(warpByVector1, renderView1, 'UnstructuredGridRepresentation') + + # trace defaults for the display properties. + warpByVector1Display.Selection = None + warpByVector1Display.Representation = 'Surface' + warpByVector1Display.ColorArrayName = ['POINTS', 'IsometryErrorFunction'] + warpByVector1Display.LookupTable = isometryErrorFunctionLUT + warpByVector1Display.MapScalars = 1 + warpByVector1Display.MultiComponentsMapping = 0 + warpByVector1Display.InterpolateScalarsBeforeMapping = 1 + warpByVector1Display.Opacity = 1.0 + warpByVector1Display.PointSize = 2.0 + warpByVector1Display.LineWidth = 1.0 + warpByVector1Display.RenderLinesAsTubes = 0 + warpByVector1Display.RenderPointsAsSpheres = 0 + warpByVector1Display.Interpolation = 'Gouraud' + warpByVector1Display.Specular = 0.0 + warpByVector1Display.SpecularColor = [1.0, 1.0, 1.0] + warpByVector1Display.SpecularPower = 100.0 + warpByVector1Display.Luminosity = 0.0 + warpByVector1Display.Ambient = 0.0 + warpByVector1Display.Diffuse = 1.0 + warpByVector1Display.Roughness = 0.3 + warpByVector1Display.Metallic = 0.0 + warpByVector1Display.EdgeTint = [1.0, 1.0, 1.0] + warpByVector1Display.Anisotropy = 0.0 + warpByVector1Display.AnisotropyRotation = 0.0 + warpByVector1Display.BaseIOR = 1.5 + warpByVector1Display.CoatStrength = 0.0 + warpByVector1Display.CoatIOR = 2.0 + warpByVector1Display.CoatRoughness = 0.0 + warpByVector1Display.CoatColor = [1.0, 1.0, 1.0] + warpByVector1Display.SelectTCoordArray = 'None' + warpByVector1Display.SelectNormalArray = 'None' + warpByVector1Display.SelectTangentArray = 'None' + warpByVector1Display.Texture = None + warpByVector1Display.RepeatTextures = 1 + warpByVector1Display.InterpolateTextures = 0 + warpByVector1Display.SeamlessU = 0 + warpByVector1Display.SeamlessV = 0 + warpByVector1Display.UseMipmapTextures = 0 + warpByVector1Display.ShowTexturesOnBackface = 1 + warpByVector1Display.BaseColorTexture = None + warpByVector1Display.NormalTexture = None + warpByVector1Display.NormalScale = 1.0 + warpByVector1Display.CoatNormalTexture = None + warpByVector1Display.CoatNormalScale = 1.0 + warpByVector1Display.MaterialTexture = None + warpByVector1Display.OcclusionStrength = 1.0 + warpByVector1Display.AnisotropyTexture = None + warpByVector1Display.EmissiveTexture = None + warpByVector1Display.EmissiveFactor = [1.0, 1.0, 1.0] + warpByVector1Display.FlipTextures = 0 + warpByVector1Display.BackfaceRepresentation = 'Follow Frontface' + warpByVector1Display.BackfaceAmbientColor = [1.0, 1.0, 1.0] + warpByVector1Display.BackfaceOpacity = 1.0 + warpByVector1Display.Position = [0.0, 0.0, 0.0] + warpByVector1Display.Scale = [1.0, 1.0, 1.0] + warpByVector1Display.Orientation = [0.0, 0.0, 0.0] + warpByVector1Display.Origin = [0.0, 0.0, 0.0] + warpByVector1Display.CoordinateShiftScaleMethod = 'Always Auto Shift Scale' + warpByVector1Display.Pickable = 1 + warpByVector1Display.Triangulate = 0 + warpByVector1Display.UseShaderReplacements = 0 + warpByVector1Display.ShaderReplacements = '' + warpByVector1Display.NonlinearSubdivisionLevel = 1 + warpByVector1Display.UseDataPartitions = 0 + warpByVector1Display.OSPRayUseScaleArray = 'All Approximate' + warpByVector1Display.OSPRayScaleArray = 'IsometryErrorFunction' + warpByVector1Display.OSPRayScaleFunction = 'PiecewiseFunction' + warpByVector1Display.OSPRayMaterial = 'None' + warpByVector1Display.BlockSelectors = ['/'] + warpByVector1Display.BlockColors = [] + warpByVector1Display.BlockOpacities = [] + warpByVector1Display.Orient = 0 + warpByVector1Display.OrientationMode = 'Direction' + warpByVector1Display.SelectOrientationVectors = 'Displacement dune-VTK' + warpByVector1Display.Scaling = 0 + warpByVector1Display.ScaleMode = 'No Data Scaling Off' + warpByVector1Display.ScaleFactor = 0.19999914765357973 + warpByVector1Display.SelectScaleArray = 'IsometryErrorFunction' + warpByVector1Display.GlyphType = 'Arrow' + warpByVector1Display.UseGlyphTable = 0 + warpByVector1Display.GlyphTableIndexArray = 'IsometryErrorFunction' + warpByVector1Display.UseCompositeGlyphTable = 0 + warpByVector1Display.UseGlyphCullingAndLOD = 0 + warpByVector1Display.LODValues = [] + warpByVector1Display.ColorByLODIndex = 0 + warpByVector1Display.GaussianRadius = 0.009999957382678986 + warpByVector1Display.ShaderPreset = 'Sphere' + warpByVector1Display.CustomTriangleScale = 3 + warpByVector1Display.CustomShader = """ // This custom shader code define a gaussian blur + // Please take a look into vtkSMPointGaussianRepresentation.cxx + // for other custom shader examples + //VTK::Color::Impl + float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy); + float gaussian = exp(-0.5*dist2); + opacity = opacity*gaussian; + """ + warpByVector1Display.Emissive = 0 + warpByVector1Display.ScaleByArray = 0 + warpByVector1Display.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] + warpByVector1Display.ScaleArrayComponent = '' + warpByVector1Display.UseScaleFunction = 1 + warpByVector1Display.ScaleTransferFunction = 'PiecewiseFunction' + warpByVector1Display.OpacityByArray = 0 + warpByVector1Display.OpacityArray = ['POINTS', 'IsometryErrorFunction'] + warpByVector1Display.OpacityArrayComponent = '' + warpByVector1Display.OpacityTransferFunction = 'PiecewiseFunction' + warpByVector1Display.DataAxesGrid = 'GridAxesRepresentation' + warpByVector1Display.SelectionCellLabelBold = 0 + warpByVector1Display.SelectionCellLabelColor = [0.0, 1.0, 0.0] + warpByVector1Display.SelectionCellLabelFontFamily = 'Arial' + warpByVector1Display.SelectionCellLabelFontFile = '' + warpByVector1Display.SelectionCellLabelFontSize = 18 + warpByVector1Display.SelectionCellLabelItalic = 0 + warpByVector1Display.SelectionCellLabelJustification = 'Left' + warpByVector1Display.SelectionCellLabelOpacity = 1.0 + warpByVector1Display.SelectionCellLabelShadow = 0 + warpByVector1Display.SelectionPointLabelBold = 0 + warpByVector1Display.SelectionPointLabelColor = [1.0, 1.0, 0.0] + warpByVector1Display.SelectionPointLabelFontFamily = 'Arial' + warpByVector1Display.SelectionPointLabelFontFile = '' + warpByVector1Display.SelectionPointLabelFontSize = 18 + warpByVector1Display.SelectionPointLabelItalic = 0 + warpByVector1Display.SelectionPointLabelJustification = 'Left' + warpByVector1Display.SelectionPointLabelOpacity = 1.0 + warpByVector1Display.SelectionPointLabelShadow = 0 + warpByVector1Display.PolarAxes = 'PolarAxesRepresentation' + warpByVector1Display.ScalarOpacityFunction = isometryErrorFunctionPWF + warpByVector1Display.ScalarOpacityUnitDistance = 0.21902417179491238 + warpByVector1Display.UseSeparateOpacityArray = 0 + warpByVector1Display.OpacityArrayName = ['POINTS', 'IsometryErrorFunction'] + warpByVector1Display.OpacityComponent = '' + warpByVector1Display.SelectMapper = 'Projected tetra' + warpByVector1Display.SamplingDimensions = [128, 128, 128] + warpByVector1Display.UseFloatingPointFrameBuffer = 1 + warpByVector1Display.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] + warpByVector1Display.NumberOfSteps = 40 + warpByVector1Display.StepSize = 0.25 + warpByVector1Display.NormalizeVectors = 1 + warpByVector1Display.EnhancedLIC = 1 + warpByVector1Display.ColorMode = 'Blend' + warpByVector1Display.LICIntensity = 0.8 + warpByVector1Display.MapModeBias = 0.0 + warpByVector1Display.EnhanceContrast = 'Off' + warpByVector1Display.LowLICContrastEnhancementFactor = 0.0 + warpByVector1Display.HighLICContrastEnhancementFactor = 0.0 + warpByVector1Display.LowColorContrastEnhancementFactor = 0.0 + warpByVector1Display.HighColorContrastEnhancementFactor = 0.0 + warpByVector1Display.AntiAlias = 0 + warpByVector1Display.MaskOnSurface = 1 + warpByVector1Display.MaskThreshold = 0.0 + warpByVector1Display.MaskIntensity = 0.0 + warpByVector1Display.MaskColor = [0.5, 0.5, 0.5] + warpByVector1Display.GenerateNoiseTexture = 0 + warpByVector1Display.NoiseType = 'Gaussian' + warpByVector1Display.NoiseTextureSize = 128 + warpByVector1Display.NoiseGrainSize = 2 + warpByVector1Display.MinNoiseValue = 0.0 + warpByVector1Display.MaxNoiseValue = 0.8 + warpByVector1Display.NumberOfNoiseLevels = 1024 + warpByVector1Display.ImpulseNoiseProbability = 1.0 + warpByVector1Display.ImpulseNoiseBackgroundValue = 0.0 + warpByVector1Display.NoiseGeneratorSeed = 1 + warpByVector1Display.CompositeStrategy = 'AUTO' + warpByVector1Display.UseLICForLOD = 0 + warpByVector1Display.WriteLog = '' + + # init the 'PiecewiseFunction' selected for 'OSPRayScaleFunction' + warpByVector1Display.OSPRayScaleFunction.Points = [0.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + warpByVector1Display.OSPRayScaleFunction.UseLogScale = 0 + + # init the 'Arrow' selected for 'GlyphType' + warpByVector1Display.GlyphType.TipResolution = 6 + warpByVector1Display.GlyphType.TipRadius = 0.1 + warpByVector1Display.GlyphType.TipLength = 0.35 + warpByVector1Display.GlyphType.ShaftResolution = 6 + warpByVector1Display.GlyphType.ShaftRadius = 0.03 + warpByVector1Display.GlyphType.Invert = 0 + + # init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' + warpByVector1Display.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.060643404722213745, 1.0, 0.5, 0.0] + warpByVector1Display.ScaleTransferFunction.UseLogScale = 0 + + # init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' + warpByVector1Display.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.060643404722213745, 1.0, 0.5, 0.0] + warpByVector1Display.OpacityTransferFunction.UseLogScale = 0 + + # init the 'GridAxesRepresentation' selected for 'DataAxesGrid' + warpByVector1Display.DataAxesGrid.XTitle = 'X Axis' + warpByVector1Display.DataAxesGrid.YTitle = 'Y Axis' + warpByVector1Display.DataAxesGrid.ZTitle = 'Z Axis' + warpByVector1Display.DataAxesGrid.XTitleFontFamily = 'Arial' + warpByVector1Display.DataAxesGrid.XTitleFontFile = '' + warpByVector1Display.DataAxesGrid.XTitleBold = 0 + warpByVector1Display.DataAxesGrid.XTitleItalic = 0 + warpByVector1Display.DataAxesGrid.XTitleFontSize = 12 + warpByVector1Display.DataAxesGrid.XTitleShadow = 0 + warpByVector1Display.DataAxesGrid.XTitleOpacity = 1.0 + warpByVector1Display.DataAxesGrid.YTitleFontFamily = 'Arial' + warpByVector1Display.DataAxesGrid.YTitleFontFile = '' + warpByVector1Display.DataAxesGrid.YTitleBold = 0 + warpByVector1Display.DataAxesGrid.YTitleItalic = 0 + warpByVector1Display.DataAxesGrid.YTitleFontSize = 12 + warpByVector1Display.DataAxesGrid.YTitleShadow = 0 + warpByVector1Display.DataAxesGrid.YTitleOpacity = 1.0 + warpByVector1Display.DataAxesGrid.ZTitleFontFamily = 'Arial' + warpByVector1Display.DataAxesGrid.ZTitleFontFile = '' + warpByVector1Display.DataAxesGrid.ZTitleBold = 0 + warpByVector1Display.DataAxesGrid.ZTitleItalic = 0 + warpByVector1Display.DataAxesGrid.ZTitleFontSize = 12 + warpByVector1Display.DataAxesGrid.ZTitleShadow = 0 + warpByVector1Display.DataAxesGrid.ZTitleOpacity = 1.0 + warpByVector1Display.DataAxesGrid.FacesToRender = 63 + warpByVector1Display.DataAxesGrid.CullBackface = 0 + warpByVector1Display.DataAxesGrid.CullFrontface = 1 + warpByVector1Display.DataAxesGrid.ShowGrid = 0 + warpByVector1Display.DataAxesGrid.ShowEdges = 1 + warpByVector1Display.DataAxesGrid.ShowTicks = 1 + warpByVector1Display.DataAxesGrid.LabelUniqueEdgesOnly = 1 + warpByVector1Display.DataAxesGrid.AxesToLabel = 63 + warpByVector1Display.DataAxesGrid.XLabelFontFamily = 'Arial' + warpByVector1Display.DataAxesGrid.XLabelFontFile = '' + warpByVector1Display.DataAxesGrid.XLabelBold = 0 + warpByVector1Display.DataAxesGrid.XLabelItalic = 0 + warpByVector1Display.DataAxesGrid.XLabelFontSize = 12 + warpByVector1Display.DataAxesGrid.XLabelShadow = 0 + warpByVector1Display.DataAxesGrid.XLabelOpacity = 1.0 + warpByVector1Display.DataAxesGrid.YLabelFontFamily = 'Arial' + warpByVector1Display.DataAxesGrid.YLabelFontFile = '' + warpByVector1Display.DataAxesGrid.YLabelBold = 0 + warpByVector1Display.DataAxesGrid.YLabelItalic = 0 + warpByVector1Display.DataAxesGrid.YLabelFontSize = 12 + warpByVector1Display.DataAxesGrid.YLabelShadow = 0 + warpByVector1Display.DataAxesGrid.YLabelOpacity = 1.0 + warpByVector1Display.DataAxesGrid.ZLabelFontFamily = 'Arial' + warpByVector1Display.DataAxesGrid.ZLabelFontFile = '' + warpByVector1Display.DataAxesGrid.ZLabelBold = 0 + warpByVector1Display.DataAxesGrid.ZLabelItalic = 0 + warpByVector1Display.DataAxesGrid.ZLabelFontSize = 12 + warpByVector1Display.DataAxesGrid.ZLabelShadow = 0 + warpByVector1Display.DataAxesGrid.ZLabelOpacity = 1.0 + warpByVector1Display.DataAxesGrid.XAxisNotation = 'Mixed' + warpByVector1Display.DataAxesGrid.XAxisPrecision = 2 + warpByVector1Display.DataAxesGrid.XAxisUseCustomLabels = 0 + warpByVector1Display.DataAxesGrid.XAxisLabels = [] + warpByVector1Display.DataAxesGrid.YAxisNotation = 'Mixed' + warpByVector1Display.DataAxesGrid.YAxisPrecision = 2 + warpByVector1Display.DataAxesGrid.YAxisUseCustomLabels = 0 + warpByVector1Display.DataAxesGrid.YAxisLabels = [] + warpByVector1Display.DataAxesGrid.ZAxisNotation = 'Mixed' + warpByVector1Display.DataAxesGrid.ZAxisPrecision = 2 + warpByVector1Display.DataAxesGrid.ZAxisUseCustomLabels = 0 + warpByVector1Display.DataAxesGrid.ZAxisLabels = [] + warpByVector1Display.DataAxesGrid.UseCustomBounds = 0 + warpByVector1Display.DataAxesGrid.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + + # init the 'PolarAxesRepresentation' selected for 'PolarAxes' + warpByVector1Display.PolarAxes.Visibility = 0 + warpByVector1Display.PolarAxes.Translation = [0.0, 0.0, 0.0] + warpByVector1Display.PolarAxes.Scale = [1.0, 1.0, 1.0] + warpByVector1Display.PolarAxes.Orientation = [0.0, 0.0, 0.0] + warpByVector1Display.PolarAxes.EnableCustomBounds = [0, 0, 0] + warpByVector1Display.PolarAxes.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + warpByVector1Display.PolarAxes.EnableCustomRange = 0 + warpByVector1Display.PolarAxes.CustomRange = [0.0, 1.0] + warpByVector1Display.PolarAxes.PolarAxisVisibility = 1 + warpByVector1Display.PolarAxes.RadialAxesVisibility = 1 + warpByVector1Display.PolarAxes.DrawRadialGridlines = 1 + warpByVector1Display.PolarAxes.PolarArcsVisibility = 1 + warpByVector1Display.PolarAxes.DrawPolarArcsGridlines = 1 + warpByVector1Display.PolarAxes.NumberOfRadialAxes = 0 + warpByVector1Display.PolarAxes.AutoSubdividePolarAxis = 1 + warpByVector1Display.PolarAxes.NumberOfPolarAxis = 0 + warpByVector1Display.PolarAxes.MinimumRadius = 0.0 + warpByVector1Display.PolarAxes.MinimumAngle = 0.0 + warpByVector1Display.PolarAxes.MaximumAngle = 90.0 + warpByVector1Display.PolarAxes.RadialAxesOriginToPolarAxis = 1 + warpByVector1Display.PolarAxes.Ratio = 1.0 + warpByVector1Display.PolarAxes.PolarAxisColor = [1.0, 1.0, 1.0] + warpByVector1Display.PolarAxes.PolarArcsColor = [1.0, 1.0, 1.0] + warpByVector1Display.PolarAxes.LastRadialAxisColor = [1.0, 1.0, 1.0] + warpByVector1Display.PolarAxes.SecondaryPolarArcsColor = [1.0, 1.0, 1.0] + warpByVector1Display.PolarAxes.SecondaryRadialAxesColor = [1.0, 1.0, 1.0] + warpByVector1Display.PolarAxes.PolarAxisTitleVisibility = 1 + warpByVector1Display.PolarAxes.PolarAxisTitle = 'Radial Distance' + warpByVector1Display.PolarAxes.PolarAxisTitleLocation = 'Bottom' + warpByVector1Display.PolarAxes.PolarLabelVisibility = 1 + warpByVector1Display.PolarAxes.PolarLabelFormat = '%-#6.3g' + warpByVector1Display.PolarAxes.PolarLabelExponentLocation = 'Labels' + warpByVector1Display.PolarAxes.RadialLabelVisibility = 1 + warpByVector1Display.PolarAxes.RadialLabelFormat = '%-#3.1f' + warpByVector1Display.PolarAxes.RadialLabelLocation = 'Bottom' + warpByVector1Display.PolarAxes.RadialUnitsVisibility = 1 + warpByVector1Display.PolarAxes.ScreenSize = 10.0 + warpByVector1Display.PolarAxes.PolarAxisTitleOpacity = 1.0 + warpByVector1Display.PolarAxes.PolarAxisTitleFontFamily = 'Arial' + warpByVector1Display.PolarAxes.PolarAxisTitleFontFile = '' + warpByVector1Display.PolarAxes.PolarAxisTitleBold = 0 + warpByVector1Display.PolarAxes.PolarAxisTitleItalic = 0 + warpByVector1Display.PolarAxes.PolarAxisTitleShadow = 0 + warpByVector1Display.PolarAxes.PolarAxisTitleFontSize = 12 + warpByVector1Display.PolarAxes.PolarAxisLabelOpacity = 1.0 + warpByVector1Display.PolarAxes.PolarAxisLabelFontFamily = 'Arial' + warpByVector1Display.PolarAxes.PolarAxisLabelFontFile = '' + warpByVector1Display.PolarAxes.PolarAxisLabelBold = 0 + warpByVector1Display.PolarAxes.PolarAxisLabelItalic = 0 + warpByVector1Display.PolarAxes.PolarAxisLabelShadow = 0 + warpByVector1Display.PolarAxes.PolarAxisLabelFontSize = 12 + warpByVector1Display.PolarAxes.LastRadialAxisTextOpacity = 1.0 + warpByVector1Display.PolarAxes.LastRadialAxisTextFontFamily = 'Arial' + warpByVector1Display.PolarAxes.LastRadialAxisTextFontFile = '' + warpByVector1Display.PolarAxes.LastRadialAxisTextBold = 0 + warpByVector1Display.PolarAxes.LastRadialAxisTextItalic = 0 + warpByVector1Display.PolarAxes.LastRadialAxisTextShadow = 0 + warpByVector1Display.PolarAxes.LastRadialAxisTextFontSize = 12 + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextOpacity = 1.0 + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextFontFamily = 'Arial' + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextFontFile = '' + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextBold = 0 + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextItalic = 0 + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextShadow = 0 + warpByVector1Display.PolarAxes.SecondaryRadialAxesTextFontSize = 12 + warpByVector1Display.PolarAxes.EnableDistanceLOD = 1 + warpByVector1Display.PolarAxes.DistanceLODThreshold = 0.7 + warpByVector1Display.PolarAxes.EnableViewAngleLOD = 1 + warpByVector1Display.PolarAxes.ViewAngleLODThreshold = 0.7 + warpByVector1Display.PolarAxes.SmallestVisiblePolarAngle = 0.5 + warpByVector1Display.PolarAxes.PolarTicksVisibility = 1 + warpByVector1Display.PolarAxes.ArcTicksOriginToPolarAxis = 1 + warpByVector1Display.PolarAxes.TickLocation = 'Both' + warpByVector1Display.PolarAxes.AxisTickVisibility = 1 + warpByVector1Display.PolarAxes.AxisMinorTickVisibility = 0 + warpByVector1Display.PolarAxes.ArcTickVisibility = 1 + warpByVector1Display.PolarAxes.ArcMinorTickVisibility = 0 + warpByVector1Display.PolarAxes.DeltaAngleMajor = 10.0 + warpByVector1Display.PolarAxes.DeltaAngleMinor = 5.0 + warpByVector1Display.PolarAxes.PolarAxisMajorTickSize = 0.0 + warpByVector1Display.PolarAxes.PolarAxisTickRatioSize = 0.3 + warpByVector1Display.PolarAxes.PolarAxisMajorTickThickness = 1.0 + warpByVector1Display.PolarAxes.PolarAxisTickRatioThickness = 0.5 + warpByVector1Display.PolarAxes.LastRadialAxisMajorTickSize = 0.0 + warpByVector1Display.PolarAxes.LastRadialAxisTickRatioSize = 0.3 + warpByVector1Display.PolarAxes.LastRadialAxisMajorTickThickness = 1.0 + warpByVector1Display.PolarAxes.LastRadialAxisTickRatioThickness = 0.5 + warpByVector1Display.PolarAxes.ArcMajorTickSize = 0.0 + warpByVector1Display.PolarAxes.ArcTickRatioSize = 0.3 + warpByVector1Display.PolarAxes.ArcMajorTickThickness = 1.0 + warpByVector1Display.PolarAxes.ArcTickRatioThickness = 0.5 + warpByVector1Display.PolarAxes.Use2DMode = 0 + warpByVector1Display.PolarAxes.UseLogAxis = 0 + + # hide data in view + Hide(cylindrical_2variableBC_delta15_level3_NCvtu, renderView1) + + # show color bar/color legend + warpByVector1Display.SetScalarBarVisibility(renderView1, True) + + # update the view to ensure updated data information + renderView1.Update() + + # set scalar coloring + ColorBy(warpByVector1Display, ('POINTS', 'Displacement dune-VTK', 'Magnitude')) + + # Hide the scalar bar for this color map if no visible data is colored by it. + HideScalarBarIfNotNeeded(isometryErrorFunctionLUT, renderView1) + + # rescale color and/or opacity maps used to include current data range + warpByVector1Display.RescaleTransferFunctionToDataRange(True, False) + + # show color bar/color legend + warpByVector1Display.SetScalarBarVisibility(renderView1, True) + + # Apply a preset using its name. Note this may not work as expected when presets have duplicate names. + displacementduneVTKLUT.ApplyPreset('Greens', True) + + # Rescale transfer function + displacementduneVTKLUT.RescaleTransferFunction(0.00013513808010835127, 1.3513808010835127) + + # Rescale transfer function + displacementduneVTKPWF.RescaleTransferFunction(0.00013513808010835127, 1.3513808010835127) + + # convert to log space + displacementduneVTKLUT.MapControlPointsToLogSpace() + + # Properties modified on displacementduneVTKLUT + displacementduneVTKLUT.UseLogScale = 1 + + # hide color bar/color legend + warpByVector1Display.SetScalarBarVisibility(renderView1, False) + + # reset view to fit data bounds + renderView1.ResetCamera(-1.0, 0.48625946044921875, -0.9997166991233826, 1.0002747774124146, -0.03165162727236748, 1.2042447328567505, True) + + # Properties modified on renderView1 + renderView1.OrientationAxesVisibility = 0 + + # Properties modified on warpByVector1Display + warpByVector1Display.Specular = 0.0 + + # Properties modified on warpByVector1Display + warpByVector1Display.Interpolation = 'Flat' + + # set active source + SetActiveSource(cylindrical_2variableBC_delta15_level3_NCvtu) + + # Properties modified on cylindrical_2variableBC_delta15_level3_NCvtuDisplay + cylindrical_2variableBC_delta15_level3_NCvtuDisplay.Specular = 0.0 + + # set active source + SetActiveSource(warpByVector1) + + # Properties modified on warpByVector1Display + warpByVector1Display.Ambient = 0.2 + + # Properties modified on warpByVector1Display + warpByVector1Display.NonlinearSubdivisionLevel = 4 + + if AddGlyph: + # create a new 'Glyph' + glyph1 = Glyph(registrationName='Glyph1', Input=warpByVector1, + GlyphType='Arrow') + glyph1.OrientationArray = ['POINTS', 'Displacement dune-VTK'] + glyph1.ScaleArray = ['POINTS', 'IsometryErrorFunction'] + glyph1.VectorScaleMode = 'Scale by Magnitude' + glyph1.ScaleFactor = 0.19999914765357973 + glyph1.GlyphTransform = 'Transform2' + glyph1.GlyphMode = 'Uniform Spatial Distribution (Bounds Based)' + glyph1.MaximumNumberOfSamplePoints = 5000 + glyph1.Seed = 10339 + glyph1.Stride = 1 + + # init the 'Arrow' selected for 'GlyphType' + glyph1.GlyphType.TipResolution = 30 + glyph1.GlyphType.TipRadius = 0.075 + glyph1.GlyphType.TipLength = 0.35 + glyph1.GlyphType.ShaftResolution = 30 + glyph1.GlyphType.ShaftRadius = 0.015 + glyph1.GlyphType.Invert = 0 + + # init the 'Transform2' selected for 'GlyphTransform' + glyph1.GlyphTransform.Translate = [0.0, 0.0, 0.0] + glyph1.GlyphTransform.Rotate = [0.0, 0.0, 0.0] + glyph1.GlyphTransform.Scale = [1.0, 1.0, 1.0] + + # Properties modified on glyph1 + glyph1.OrientationArray = ['POINTS', 'SurfaceNormalDiscrete'] + glyph1.ScaleArray = ['POINTS', 'No scale array'] + # glyph1.ScaleFactor = 0.1 + glyph1.ScaleFactor = 0.15 + glyph1.GlyphMode = 'Every Nth Point' + glyph1.Stride = 35 + + # show data in view + glyph1Display = Show(glyph1, renderView1, 'GeometryRepresentation') + + # trace defaults for the display properties. + glyph1Display.Selection = None + glyph1Display.Representation = 'Surface' + glyph1Display.ColorArrayName = ['POINTS', 'IsometryErrorFunction'] + glyph1Display.LookupTable = isometryErrorFunctionLUT + glyph1Display.MapScalars = 1 + glyph1Display.MultiComponentsMapping = 0 + glyph1Display.InterpolateScalarsBeforeMapping = 1 + glyph1Display.Opacity = 1.0 + glyph1Display.PointSize = 2.0 + glyph1Display.LineWidth = 1.0 + glyph1Display.RenderLinesAsTubes = 0 + glyph1Display.RenderPointsAsSpheres = 0 + glyph1Display.Interpolation = 'Gouraud' + glyph1Display.Specular = 0.0 + glyph1Display.SpecularColor = [1.0, 1.0, 1.0] + glyph1Display.SpecularPower = 100.0 + glyph1Display.Luminosity = 0.0 + glyph1Display.Ambient = 0.0 + glyph1Display.Diffuse = 1.0 + glyph1Display.Roughness = 0.3 + glyph1Display.Metallic = 0.0 + glyph1Display.EdgeTint = [1.0, 1.0, 1.0] + glyph1Display.Anisotropy = 0.0 + glyph1Display.AnisotropyRotation = 0.0 + glyph1Display.BaseIOR = 1.5 + glyph1Display.CoatStrength = 0.0 + glyph1Display.CoatIOR = 2.0 + glyph1Display.CoatRoughness = 0.0 + glyph1Display.CoatColor = [1.0, 1.0, 1.0] + glyph1Display.SelectTCoordArray = 'None' + glyph1Display.SelectNormalArray = 'None' + glyph1Display.SelectTangentArray = 'None' + glyph1Display.Texture = None + glyph1Display.RepeatTextures = 1 + glyph1Display.InterpolateTextures = 0 + glyph1Display.SeamlessU = 0 + glyph1Display.SeamlessV = 0 + glyph1Display.UseMipmapTextures = 0 + glyph1Display.ShowTexturesOnBackface = 1 + glyph1Display.BaseColorTexture = None + glyph1Display.NormalTexture = None + glyph1Display.NormalScale = 1.0 + glyph1Display.CoatNormalTexture = None + glyph1Display.CoatNormalScale = 1.0 + glyph1Display.MaterialTexture = None + glyph1Display.OcclusionStrength = 1.0 + glyph1Display.AnisotropyTexture = None + glyph1Display.EmissiveTexture = None + glyph1Display.EmissiveFactor = [1.0, 1.0, 1.0] + glyph1Display.FlipTextures = 0 + glyph1Display.BackfaceRepresentation = 'Follow Frontface' + glyph1Display.BackfaceAmbientColor = [1.0, 1.0, 1.0] + glyph1Display.BackfaceOpacity = 1.0 + glyph1Display.Position = [0.0, 0.0, 0.0] + glyph1Display.Scale = [1.0, 1.0, 1.0] + glyph1Display.Orientation = [0.0, 0.0, 0.0] + glyph1Display.Origin = [0.0, 0.0, 0.0] + glyph1Display.CoordinateShiftScaleMethod = 'Always Auto Shift Scale' + glyph1Display.Pickable = 1 + glyph1Display.Triangulate = 0 + glyph1Display.UseShaderReplacements = 0 + glyph1Display.ShaderReplacements = '' + glyph1Display.NonlinearSubdivisionLevel = 1 + glyph1Display.UseDataPartitions = 0 + glyph1Display.OSPRayUseScaleArray = 'All Approximate' + glyph1Display.OSPRayScaleArray = 'IsometryErrorFunction' + glyph1Display.OSPRayScaleFunction = 'PiecewiseFunction' + glyph1Display.OSPRayMaterial = 'None' + glyph1Display.BlockSelectors = ['/'] + glyph1Display.BlockColors = [] + glyph1Display.BlockOpacities = [] + glyph1Display.Orient = 0 + glyph1Display.OrientationMode = 'Direction' + glyph1Display.SelectOrientationVectors = 'Displacement dune-VTK' + glyph1Display.Scaling = 0 + glyph1Display.ScaleMode = 'No Data Scaling Off' + glyph1Display.ScaleFactor = 0.205192768573761 + glyph1Display.SelectScaleArray = 'IsometryErrorFunction' + glyph1Display.GlyphType = 'Arrow' + glyph1Display.UseGlyphTable = 0 + glyph1Display.GlyphTableIndexArray = 'IsometryErrorFunction' + glyph1Display.UseCompositeGlyphTable = 0 + glyph1Display.UseGlyphCullingAndLOD = 0 + glyph1Display.LODValues = [] + glyph1Display.ColorByLODIndex = 0 + glyph1Display.GaussianRadius = 0.01025963842868805 + glyph1Display.ShaderPreset = 'Sphere' + glyph1Display.CustomTriangleScale = 3 + glyph1Display.CustomShader = """ // This custom shader code define a gaussian blur + // Please take a look into vtkSMPointGaussianRepresentation.cxx + // for other custom shader examples + //VTK::Color::Impl + float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy); + float gaussian = exp(-0.5*dist2); + opacity = opacity*gaussian; + """ + glyph1Display.Emissive = 0 + glyph1Display.ScaleByArray = 0 + glyph1Display.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] + glyph1Display.ScaleArrayComponent = '' + glyph1Display.UseScaleFunction = 1 + glyph1Display.ScaleTransferFunction = 'PiecewiseFunction' + glyph1Display.OpacityByArray = 0 + glyph1Display.OpacityArray = ['POINTS', 'IsometryErrorFunction'] + glyph1Display.OpacityArrayComponent = '' + glyph1Display.OpacityTransferFunction = 'PiecewiseFunction' + glyph1Display.DataAxesGrid = 'GridAxesRepresentation' + glyph1Display.SelectionCellLabelBold = 0 + glyph1Display.SelectionCellLabelColor = [0.0, 1.0, 0.0] + glyph1Display.SelectionCellLabelFontFamily = 'Arial' + glyph1Display.SelectionCellLabelFontFile = '' + glyph1Display.SelectionCellLabelFontSize = 18 + glyph1Display.SelectionCellLabelItalic = 0 + glyph1Display.SelectionCellLabelJustification = 'Left' + glyph1Display.SelectionCellLabelOpacity = 1.0 + glyph1Display.SelectionCellLabelShadow = 0 + glyph1Display.SelectionPointLabelBold = 0 + glyph1Display.SelectionPointLabelColor = [1.0, 1.0, 0.0] + glyph1Display.SelectionPointLabelFontFamily = 'Arial' + glyph1Display.SelectionPointLabelFontFile = '' + glyph1Display.SelectionPointLabelFontSize = 18 + glyph1Display.SelectionPointLabelItalic = 0 + glyph1Display.SelectionPointLabelJustification = 'Left' + glyph1Display.SelectionPointLabelOpacity = 1.0 + glyph1Display.SelectionPointLabelShadow = 0 + glyph1Display.PolarAxes = 'PolarAxesRepresentation' + glyph1Display.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] + glyph1Display.NumberOfSteps = 40 + glyph1Display.StepSize = 0.25 + glyph1Display.NormalizeVectors = 1 + glyph1Display.EnhancedLIC = 1 + glyph1Display.ColorMode = 'Blend' + glyph1Display.LICIntensity = 0.8 + glyph1Display.MapModeBias = 0.0 + glyph1Display.EnhanceContrast = 'Off' + glyph1Display.LowLICContrastEnhancementFactor = 0.0 + glyph1Display.HighLICContrastEnhancementFactor = 0.0 + glyph1Display.LowColorContrastEnhancementFactor = 0.0 + glyph1Display.HighColorContrastEnhancementFactor = 0.0 + glyph1Display.AntiAlias = 0 + glyph1Display.MaskOnSurface = 1 + glyph1Display.MaskThreshold = 0.0 + glyph1Display.MaskIntensity = 0.0 + glyph1Display.MaskColor = [0.5, 0.5, 0.5] + glyph1Display.GenerateNoiseTexture = 0 + glyph1Display.NoiseType = 'Gaussian' + glyph1Display.NoiseTextureSize = 128 + glyph1Display.NoiseGrainSize = 2 + glyph1Display.MinNoiseValue = 0.0 + glyph1Display.MaxNoiseValue = 0.8 + glyph1Display.NumberOfNoiseLevels = 1024 + glyph1Display.ImpulseNoiseProbability = 1.0 + glyph1Display.ImpulseNoiseBackgroundValue = 0.0 + glyph1Display.NoiseGeneratorSeed = 1 + glyph1Display.CompositeStrategy = 'AUTO' + glyph1Display.UseLICForLOD = 0 + glyph1Display.WriteLog = '' + + # init the 'PiecewiseFunction' selected for 'OSPRayScaleFunction' + glyph1Display.OSPRayScaleFunction.Points = [0.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + glyph1Display.OSPRayScaleFunction.UseLogScale = 0 + + # init the 'Arrow' selected for 'GlyphType' + glyph1Display.GlyphType.TipResolution = 30 + glyph1Display.GlyphType.TipRadius = 0.075 + glyph1Display.GlyphType.TipLength = 0.35 + glyph1Display.GlyphType.ShaftResolution = 30 + glyph1Display.GlyphType.ShaftRadius = 0.015 + glyph1Display.GlyphType.Invert = 0 + + # init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' + glyph1Display.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.0557803250849247, 1.0, 0.5, 0.0] + glyph1Display.ScaleTransferFunction.UseLogScale = 0 + + # init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' + glyph1Display.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.0557803250849247, 1.0, 0.5, 0.0] + glyph1Display.OpacityTransferFunction.UseLogScale = 0 + + # init the 'GridAxesRepresentation' selected for 'DataAxesGrid' + glyph1Display.DataAxesGrid.XTitle = 'X Axis' + glyph1Display.DataAxesGrid.YTitle = 'Y Axis' + glyph1Display.DataAxesGrid.ZTitle = 'Z Axis' + glyph1Display.DataAxesGrid.XTitleFontFamily = 'Arial' + glyph1Display.DataAxesGrid.XTitleFontFile = '' + glyph1Display.DataAxesGrid.XTitleBold = 0 + glyph1Display.DataAxesGrid.XTitleItalic = 0 + glyph1Display.DataAxesGrid.XTitleFontSize = 12 + glyph1Display.DataAxesGrid.XTitleShadow = 0 + glyph1Display.DataAxesGrid.XTitleOpacity = 1.0 + glyph1Display.DataAxesGrid.YTitleFontFamily = 'Arial' + glyph1Display.DataAxesGrid.YTitleFontFile = '' + glyph1Display.DataAxesGrid.YTitleBold = 0 + glyph1Display.DataAxesGrid.YTitleItalic = 0 + glyph1Display.DataAxesGrid.YTitleFontSize = 12 + glyph1Display.DataAxesGrid.YTitleShadow = 0 + glyph1Display.DataAxesGrid.YTitleOpacity = 1.0 + glyph1Display.DataAxesGrid.ZTitleFontFamily = 'Arial' + glyph1Display.DataAxesGrid.ZTitleFontFile = '' + glyph1Display.DataAxesGrid.ZTitleBold = 0 + glyph1Display.DataAxesGrid.ZTitleItalic = 0 + glyph1Display.DataAxesGrid.ZTitleFontSize = 12 + glyph1Display.DataAxesGrid.ZTitleShadow = 0 + glyph1Display.DataAxesGrid.ZTitleOpacity = 1.0 + glyph1Display.DataAxesGrid.FacesToRender = 63 + glyph1Display.DataAxesGrid.CullBackface = 0 + glyph1Display.DataAxesGrid.CullFrontface = 1 + glyph1Display.DataAxesGrid.ShowGrid = 0 + glyph1Display.DataAxesGrid.ShowEdges = 1 + glyph1Display.DataAxesGrid.ShowTicks = 1 + glyph1Display.DataAxesGrid.LabelUniqueEdgesOnly = 1 + glyph1Display.DataAxesGrid.AxesToLabel = 63 + glyph1Display.DataAxesGrid.XLabelFontFamily = 'Arial' + glyph1Display.DataAxesGrid.XLabelFontFile = '' + glyph1Display.DataAxesGrid.XLabelBold = 0 + glyph1Display.DataAxesGrid.XLabelItalic = 0 + glyph1Display.DataAxesGrid.XLabelFontSize = 12 + glyph1Display.DataAxesGrid.XLabelShadow = 0 + glyph1Display.DataAxesGrid.XLabelOpacity = 1.0 + glyph1Display.DataAxesGrid.YLabelFontFamily = 'Arial' + glyph1Display.DataAxesGrid.YLabelFontFile = '' + glyph1Display.DataAxesGrid.YLabelBold = 0 + glyph1Display.DataAxesGrid.YLabelItalic = 0 + glyph1Display.DataAxesGrid.YLabelFontSize = 12 + glyph1Display.DataAxesGrid.YLabelShadow = 0 + glyph1Display.DataAxesGrid.YLabelOpacity = 1.0 + glyph1Display.DataAxesGrid.ZLabelFontFamily = 'Arial' + glyph1Display.DataAxesGrid.ZLabelFontFile = '' + glyph1Display.DataAxesGrid.ZLabelBold = 0 + glyph1Display.DataAxesGrid.ZLabelItalic = 0 + glyph1Display.DataAxesGrid.ZLabelFontSize = 12 + glyph1Display.DataAxesGrid.ZLabelShadow = 0 + glyph1Display.DataAxesGrid.ZLabelOpacity = 1.0 + glyph1Display.DataAxesGrid.XAxisNotation = 'Mixed' + glyph1Display.DataAxesGrid.XAxisPrecision = 2 + glyph1Display.DataAxesGrid.XAxisUseCustomLabels = 0 + glyph1Display.DataAxesGrid.XAxisLabels = [] + glyph1Display.DataAxesGrid.YAxisNotation = 'Mixed' + glyph1Display.DataAxesGrid.YAxisPrecision = 2 + glyph1Display.DataAxesGrid.YAxisUseCustomLabels = 0 + glyph1Display.DataAxesGrid.YAxisLabels = [] + glyph1Display.DataAxesGrid.ZAxisNotation = 'Mixed' + glyph1Display.DataAxesGrid.ZAxisPrecision = 2 + glyph1Display.DataAxesGrid.ZAxisUseCustomLabels = 0 + glyph1Display.DataAxesGrid.ZAxisLabels = [] + glyph1Display.DataAxesGrid.UseCustomBounds = 0 + glyph1Display.DataAxesGrid.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + + # init the 'PolarAxesRepresentation' selected for 'PolarAxes' + glyph1Display.PolarAxes.Visibility = 0 + glyph1Display.PolarAxes.Translation = [0.0, 0.0, 0.0] + glyph1Display.PolarAxes.Scale = [1.0, 1.0, 1.0] + glyph1Display.PolarAxes.Orientation = [0.0, 0.0, 0.0] + glyph1Display.PolarAxes.EnableCustomBounds = [0, 0, 0] + glyph1Display.PolarAxes.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + glyph1Display.PolarAxes.EnableCustomRange = 0 + glyph1Display.PolarAxes.CustomRange = [0.0, 1.0] + glyph1Display.PolarAxes.PolarAxisVisibility = 1 + glyph1Display.PolarAxes.RadialAxesVisibility = 1 + glyph1Display.PolarAxes.DrawRadialGridlines = 1 + glyph1Display.PolarAxes.PolarArcsVisibility = 1 + glyph1Display.PolarAxes.DrawPolarArcsGridlines = 1 + glyph1Display.PolarAxes.NumberOfRadialAxes = 0 + glyph1Display.PolarAxes.AutoSubdividePolarAxis = 1 + glyph1Display.PolarAxes.NumberOfPolarAxis = 0 + glyph1Display.PolarAxes.MinimumRadius = 0.0 + glyph1Display.PolarAxes.MinimumAngle = 0.0 + glyph1Display.PolarAxes.MaximumAngle = 90.0 + glyph1Display.PolarAxes.RadialAxesOriginToPolarAxis = 1 + glyph1Display.PolarAxes.Ratio = 1.0 + glyph1Display.PolarAxes.PolarAxisColor = [1.0, 1.0, 1.0] + glyph1Display.PolarAxes.PolarArcsColor = [1.0, 1.0, 1.0] + glyph1Display.PolarAxes.LastRadialAxisColor = [1.0, 1.0, 1.0] + glyph1Display.PolarAxes.SecondaryPolarArcsColor = [1.0, 1.0, 1.0] + glyph1Display.PolarAxes.SecondaryRadialAxesColor = [1.0, 1.0, 1.0] + glyph1Display.PolarAxes.PolarAxisTitleVisibility = 1 + glyph1Display.PolarAxes.PolarAxisTitle = 'Radial Distance' + glyph1Display.PolarAxes.PolarAxisTitleLocation = 'Bottom' + glyph1Display.PolarAxes.PolarLabelVisibility = 1 + glyph1Display.PolarAxes.PolarLabelFormat = '%-#6.3g' + glyph1Display.PolarAxes.PolarLabelExponentLocation = 'Labels' + glyph1Display.PolarAxes.RadialLabelVisibility = 1 + glyph1Display.PolarAxes.RadialLabelFormat = '%-#3.1f' + glyph1Display.PolarAxes.RadialLabelLocation = 'Bottom' + glyph1Display.PolarAxes.RadialUnitsVisibility = 1 + glyph1Display.PolarAxes.ScreenSize = 10.0 + glyph1Display.PolarAxes.PolarAxisTitleOpacity = 1.0 + glyph1Display.PolarAxes.PolarAxisTitleFontFamily = 'Arial' + glyph1Display.PolarAxes.PolarAxisTitleFontFile = '' + glyph1Display.PolarAxes.PolarAxisTitleBold = 0 + glyph1Display.PolarAxes.PolarAxisTitleItalic = 0 + glyph1Display.PolarAxes.PolarAxisTitleShadow = 0 + glyph1Display.PolarAxes.PolarAxisTitleFontSize = 12 + glyph1Display.PolarAxes.PolarAxisLabelOpacity = 1.0 + glyph1Display.PolarAxes.PolarAxisLabelFontFamily = 'Arial' + glyph1Display.PolarAxes.PolarAxisLabelFontFile = '' + glyph1Display.PolarAxes.PolarAxisLabelBold = 0 + glyph1Display.PolarAxes.PolarAxisLabelItalic = 0 + glyph1Display.PolarAxes.PolarAxisLabelShadow = 0 + glyph1Display.PolarAxes.PolarAxisLabelFontSize = 12 + glyph1Display.PolarAxes.LastRadialAxisTextOpacity = 1.0 + glyph1Display.PolarAxes.LastRadialAxisTextFontFamily = 'Arial' + glyph1Display.PolarAxes.LastRadialAxisTextFontFile = '' + glyph1Display.PolarAxes.LastRadialAxisTextBold = 0 + glyph1Display.PolarAxes.LastRadialAxisTextItalic = 0 + glyph1Display.PolarAxes.LastRadialAxisTextShadow = 0 + glyph1Display.PolarAxes.LastRadialAxisTextFontSize = 12 + glyph1Display.PolarAxes.SecondaryRadialAxesTextOpacity = 1.0 + glyph1Display.PolarAxes.SecondaryRadialAxesTextFontFamily = 'Arial' + glyph1Display.PolarAxes.SecondaryRadialAxesTextFontFile = '' + glyph1Display.PolarAxes.SecondaryRadialAxesTextBold = 0 + glyph1Display.PolarAxes.SecondaryRadialAxesTextItalic = 0 + glyph1Display.PolarAxes.SecondaryRadialAxesTextShadow = 0 + glyph1Display.PolarAxes.SecondaryRadialAxesTextFontSize = 12 + glyph1Display.PolarAxes.EnableDistanceLOD = 1 + glyph1Display.PolarAxes.DistanceLODThreshold = 0.7 + glyph1Display.PolarAxes.EnableViewAngleLOD = 1 + glyph1Display.PolarAxes.ViewAngleLODThreshold = 0.7 + glyph1Display.PolarAxes.SmallestVisiblePolarAngle = 0.5 + glyph1Display.PolarAxes.PolarTicksVisibility = 1 + glyph1Display.PolarAxes.ArcTicksOriginToPolarAxis = 1 + glyph1Display.PolarAxes.TickLocation = 'Both' + glyph1Display.PolarAxes.AxisTickVisibility = 1 + glyph1Display.PolarAxes.AxisMinorTickVisibility = 0 + glyph1Display.PolarAxes.ArcTickVisibility = 1 + glyph1Display.PolarAxes.ArcMinorTickVisibility = 0 + glyph1Display.PolarAxes.DeltaAngleMajor = 10.0 + glyph1Display.PolarAxes.DeltaAngleMinor = 5.0 + glyph1Display.PolarAxes.PolarAxisMajorTickSize = 0.0 + glyph1Display.PolarAxes.PolarAxisTickRatioSize = 0.3 + glyph1Display.PolarAxes.PolarAxisMajorTickThickness = 1.0 + glyph1Display.PolarAxes.PolarAxisTickRatioThickness = 0.5 + glyph1Display.PolarAxes.LastRadialAxisMajorTickSize = 0.0 + glyph1Display.PolarAxes.LastRadialAxisTickRatioSize = 0.3 + glyph1Display.PolarAxes.LastRadialAxisMajorTickThickness = 1.0 + glyph1Display.PolarAxes.LastRadialAxisTickRatioThickness = 0.5 + glyph1Display.PolarAxes.ArcMajorTickSize = 0.0 + glyph1Display.PolarAxes.ArcTickRatioSize = 0.3 + glyph1Display.PolarAxes.ArcMajorTickThickness = 1.0 + glyph1Display.PolarAxes.ArcTickRatioThickness = 0.5 + glyph1Display.PolarAxes.Use2DMode = 0 + glyph1Display.PolarAxes.UseLogAxis = 0 + + # show color bar/color legend + glyph1Display.SetScalarBarVisibility(renderView1, True) + + # update the view to ensure updated data information + renderView1.Update() + + # Rescale transfer function + displacementduneVTKLUT.RescaleTransferFunction(0.0, 1.3513808010835129) + + # Rescale transfer function + displacementduneVTKPWF.RescaleTransferFunction(0.0, 1.3513808010835127) + + # Properties modified on glyph1 + glyph1.Stride = 25 + + # update the view to ensure updated data information + renderView1.Update() + + # Rescale transfer function + displacementduneVTKLUT.RescaleTransferFunction(0.0, 1.3513808010835129) + + # Properties modified on glyph1 + glyph1.Stride = 30 + + # update the view to ensure updated data information + renderView1.Update() + + # Rescale transfer function + displacementduneVTKLUT.RescaleTransferFunction(0.0, 1.3513808010835129) + + # Properties modified on glyph1 + glyph1.Stride = 40 + + # update the view to ensure updated data information + renderView1.Update() + + # Rescale transfer function + displacementduneVTKLUT.RescaleTransferFunction(0.0, 1.3513808010835129) + + # turn off scalar coloring + ColorBy(glyph1Display, None) + + # Hide the scalar bar for this color map if no visible data is colored by it. + HideScalarBarIfNotNeeded(isometryErrorFunctionLUT, renderView1) + + # change solid color (Black) + # glyph1Display.AmbientColor = [0.0, 0.0, 0.0] + # glyph1Display.DiffuseColor = [0.0, 0.0, 0.0] + + # change solid color (DarkBlue) + glyph1Display.AmbientColor = [0.0, 0.3333333333333333, 0.4980392156862745] + glyph1Display.DiffuseColor = [0.0, 0.3333333333333333, 0.4980392156862745] + + # Properties modified on glyph1Display + glyph1Display.Opacity = 0.25 + + # Properties modified on glyph1Display + glyph1Display.Specular = 1.0 + + # Properties modified on glyph1Display + glyph1Display.Specular = 0.0 + + # Properties modified on glyph1Display + glyph1Display.Ambient = 0.2 + + #================================================================ + # addendum: following script captures some of the application + # state to faithfully reproduce the visualization during playback + #================================================================ + + # get layout + layout1 = GetLayout() + + print('layout1:',layout1) + + #-------------------------------- + # saving layout sizes for layouts + + # layout/tab size in pixels + layout1.SetSize(1526, 873) + + #----------------------------------- + # saving camera placements for views + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.5317894883522003, -7.950546149218976, 1.8355840818083122] + renderView1.CameraFocalPoint = [-0.3373855559365908, -2.646797497088115, 0.9959448222039734] + renderView1.CameraViewUp = [-0.0628645081836353, 0.15830147075535642, 0.9853875876869572] + renderView1.CameraViewAngle = 25.620465826651394 + renderView1.CameraParallelScale = 1.3907168028548302 + + + + #Camera View: + # # get active view + # renderView1 = GetActiveViewOrCreate('RenderView') + + # # reset view to fit data + # renderView1.ResetCamera(True) + + # # reset view to fit data bounds + # renderView1.ResetCamera(-1.0, 1.0257619619369507, -0.9359287619590759, 0.9359057545661926, -0.32227325439453125, 0.3284286856651306, True) + + # # reset view to fit data bounds + # renderView1.ResetCamera(-1.0, 1.0257619619369507, -0.9359287619590759, 0.9359057545661926, -0.32227325439453125, 0.3284286856651306, False) + + # # reset view to fit data bounds + # renderView1.ResetCamera(-1.0, 1.0257619619369507, -0.9359287619590759, 0.9359057545661926, -0.32227325439453125, 0.3284286856651306, False) + + # # reset view to fit data + # renderView1.ResetCamera(True) + + # # reset view to fit data + # renderView1.ResetCamera(True) + + # # reset view to fit data + # renderView1.ResetCamera(True) + + # # reset view to fit data + # renderView1.ResetCamera(True) + + # #================================================================ + # # addendum: following script captures some of the application + # # state to faithfully reproduce the visualization during playback + # #================================================================ + + # # get layout + # layout1 = GetLayout() + + # #-------------------------------- + # # saving layout sizes for layouts + + # # layout/tab size in pixels + # layout1.SetSize(1526, 873) + + # #----------------------------------- + # # saving camera placements for views + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [-0.018803465136511217, -6.344229746084431, 0.8643549211317467] + # renderView1.CameraFocalPoint = [-0.012119019404053688, -0.0020669102668762207, 0.4409867525100708] + # renderView1.CameraViewUp = [-0.03973953847604448, 0.06659538567372057, 0.9969883769075141] + # renderView1.CameraViewAngle = 20.04581901489118 + # renderView1.CameraParallelScale = 1.645126712646716 + + + # # get active view + # renderView1 = GetActiveViewOrCreate('RenderView') + # # Adjust camera + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.6190132298381256, -5.978102214366906, 2.4112112938696906] + # renderView1.CameraFocalPoint = [-0.012119019404053688, -2.568960189819349e-05, 0.45254665613174444] + # renderView1.CameraViewUp = [-0.05404025977722483, 0.305743653322491, 0.9505790176393684] + # renderView1.CameraViewAngle = 24.32226040473463 + # renderView1.CameraParallelScale = 1.6363442723895476 + # # Adjust camera + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.3561670752092, -6.043235495365254, 2.2735558848687107] + # renderView1.CameraFocalPoint = [-0.012119019404053686, -2.568960189819236e-05, 0.4525466561317445] + # renderView1.CameraViewUp = [-0.05311946210744569, 0.28514078064511844, 0.9570125693837611] + # renderView1.CameraViewAngle = 24.32226040473463 + # renderView1.CameraParallelScale = 1.6363442723895476 + # # Adjust camera + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.013021130832849942, -5.989702202981394, 2.4762159109807733] + # renderView1.CameraFocalPoint = [-0.01211901940405369, -2.5689601898192394e-05, 0.4525466561317443] + # renderView1.CameraViewUp = [-0.052765304975756634, 0.3194397242049962, 0.9461363988298154] + # renderView1.CameraViewAngle = 24.32226040473463 + # renderView1.CameraParallelScale = 1.6363442723895476 + # # Adjust camera + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.018300562382599708, -7.247534270791088, 2.9011864544990695] + # renderView1.CameraFocalPoint = [-0.01211901940405369, -2.5689601898192394e-05, 0.4525466561317443] + # renderView1.CameraViewUp = [-0.052765304975756634, 0.3194397242049962, 0.9461363988298154] + # renderView1.CameraViewAngle = 24.32226040473463 + # renderView1.CameraParallelScale = 1.6363442723895476 + + # # reset view to fit data bounds + # renderView1.ResetCamera(-1.0, 1.0257619619369507, -0.9359287619590759, 0.9359057545661926, -0.32227325439453125, 0.3284286856651306, True) + # # Adjust camera + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.03465030801593522, -5.186584602883577, 1.7554108333598906] + # renderView1.CameraFocalPoint = [0.012880980968475342, -1.150369644165039e-05, 0.0030777156352996826] + # renderView1.CameraViewUp = [-0.052765304975756634, 0.3194397242049962, 0.9461363988298154] + # renderView1.CameraViewAngle = 17.52577319587629 + # renderView1.CameraParallelScale = 1.416941159547869 + + # # reset view to fit data + # renderView1.ResetCamera(True) + # # Adjust camera + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.013021130832849927, -5.98970220298139, 2.4762159109807724] + # renderView1.CameraFocalPoint = [-0.012119019404053688, -2.568960189819336e-05, 0.4525466561317444] + # renderView1.CameraViewUp = [-0.052765304975756634, 0.3194397242049962, 0.9461363988298154] + # renderView1.CameraViewAngle = 24.4749904543719 + # renderView1.CameraParallelScale = 1.6363442723895476 + + # #================================================================ + # # addendum: following script captures some of the application + # # state to faithfully reproduce the visualization during playback + # #================================================================ + + # # get layout + # layout1 = GetLayout() + + # #-------------------------------- + # # saving layout sizes for layouts + + # # layout/tab size in pixels + # layout1.SetSize(2634, 873) + + # #----------------------------------- + # # saving camera placements for views + + # # current camera placement for renderView1 + # renderView1.CameraPosition = [0.013021130832849927, -5.98970220298139, 2.4762159109807724] + # renderView1.CameraFocalPoint = [-0.012119019404053688, -2.568960189819336e-05, 0.4525466561317444] + # renderView1.CameraViewUp = [-0.052765304975756634, 0.3194397242049962, 0.9461363988298154] + # renderView1.CameraViewAngle = 24.4749904543719 + # renderView1.CameraParallelScale = 1.6363442723895476 + + + # CAMERA ANGLE : + # get active view + renderView1 = GetActiveViewOrCreate('RenderView') + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.3406855662763682, -6.09404732570838, 2.3533248674216507] + renderView1.CameraFocalPoint = [-0.012119019404053686, 0.0024850368499755933, 0.4612774252891543] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 22.909507445589917 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.3406855662763682, -6.09404732570838, 2.3533248674216507] + renderView1.CameraFocalPoint = [-0.012119019404053686, 0.0024850368499755933, 0.4612774252891543] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 22.909507445589917 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.3406855662763682, -6.09404732570838, 2.3533248674216507] + renderView1.CameraFocalPoint = [-0.012119019404053686, 0.0024850368499755933, 0.4612774252891543] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 22.909507445589917 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.3406855662763682, -6.09404732570838, 2.3533248674216507] + renderView1.CameraFocalPoint = [-0.012119019404053686, 0.0024850368499755933, 0.4612774252891543] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 22.909507445589917 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.3406855662763682, -6.09404732570838, 2.3533248674216507] + renderView1.CameraFocalPoint = [-0.012119019404053686, 0.0024850368499755933, 0.4612774252891543] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 22.909507445589917 + renderView1.CameraParallelScale = 1.6543276528524797 + + # reset view to fit data + renderView1.ResetCamera(True) + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.340685566276368, -6.094047325708376, 2.353324867421649] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975586, 0.46127742528915405] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + + # reset view to fit data + renderView1.ResetCamera(True) + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.340685566276368, -6.094047325708376, 2.353324867421649] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975586, 0.46127742528915405] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + + # reset view to fit data + renderView1.ResetCamera(True) + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.340685566276368, -6.094047325708376, 2.353324867421649] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975586, 0.46127742528915405] + renderView1.CameraViewUp = [-0.004294862018419483, 0.296610486207875, 0.9549888866535415] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.2801298596202444, -6.068765481441859, 2.4420837460567193] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975583, 0.4612774252891541] + renderView1.CameraViewUp = [-0.003588791982126036, 0.3103104941288703, 0.9506284856901804] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.2801298596202444, -6.068765481441859, 2.4420837460567193] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975583, 0.4612774252891541] + renderView1.CameraViewUp = [-0.003588791982126036, 0.3103104941288703, 0.9506284856901804] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.2801298596202444, -6.068765481441859, 2.4420837460567193] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975583, 0.4612774252891541] + renderView1.CameraViewUp = [-0.003588791982126036, 0.3103104941288703, 0.9506284856901804] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.2801298596202444, -6.068765481441859, 2.4420837460567193] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975583, 0.4612774252891541] + renderView1.CameraViewUp = [-0.003588791982126036, 0.3103104941288703, 0.9506284856901804] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.2801298596202444, -6.068765481441859, 2.4420837460567193] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975583, 0.4612774252891541] + renderView1.CameraViewUp = [-0.003588791982126036, 0.3103104941288703, 0.9506284856901804] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + + #================================================================ + # addendum: following script captures some of the application + # state to faithfully reproduce the visualization during playback + #================================================================ + + # get layout + layout1 = GetLayout() + + #-------------------------------- + # saving layout sizes for layouts + + # layout/tab size in pixels + layout1.SetSize(2634, 873) + + #----------------------------------- + # saving camera placements for views + + # current camera placement for renderView1 + renderView1.CameraPosition = [-0.2801298596202444, -6.068765481441859, 2.4420837460567193] + renderView1.CameraFocalPoint = [-0.012119019404053688, 0.002485036849975583, 0.4612774252891541] + renderView1.CameraViewUp = [-0.003588791982126036, 0.3103104941288703, 0.9506284856901804] + renderView1.CameraViewAngle = 23.253150057273768 + renderView1.CameraParallelScale = 1.6543276528524797 + + #----------------------------------------- + + + # NEW CAMERA ANGLE + # get active view + renderView1 = GetActiveViewOrCreate('RenderView') + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [0.029912744310289893, -5.070841782883837, 2.2549998815448675] + renderView1.CameraFocalPoint = [-0.01429512538015842, -0.00023770332336425738, 0.013518139719963074] + renderView1.CameraViewUp = [-0.00012445946588129702, 0.4043111685224597, 0.9146214864728713] + renderView1.CameraViewAngle = 15.234822451317298 + renderView1.CameraParallelScale = 1.434922768089897 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [0.13564184339304414, -5.002529762527205, 2.399270332667408] + renderView1.CameraFocalPoint = [-0.01429512538015842, -0.00023770332336425751, 0.013518139719963072] + renderView1.CameraViewUp = [-0.00025096931135483794, 0.4304728027354104, 0.9026035137974622] + renderView1.CameraViewAngle = 15.234822451317298 + renderView1.CameraParallelScale = 1.434922768089897 + # Adjust camera + + # current camera placement for renderView1 + renderView1.CameraPosition = [0.1351322919568179, -4.837566763896823, 2.718169591018591] + renderView1.CameraFocalPoint = [-0.014295125380158416, -0.00023770332336425754, 0.013518139719963074] + renderView1.CameraViewUp = [-0.0025668859947288896, 0.4879570721064113, 0.8728638535749024] + renderView1.CameraViewAngle = 15.234822451317298 + renderView1.CameraParallelScale = 1.434922768089897 + + #================================================================ + # addendum: following script captures some of the application + # state to faithfully reproduce the visualization during playback + #================================================================ + + # get layout + layout1 = GetLayout() + + #-------------------------------- + # saving layout sizes for layouts + + # layout/tab size in pixels + layout1.SetSize(2634, 873) + + #----------------------------------- + # saving camera placements for views + + # current camera placement for renderView1 + renderView1.CameraPosition = [0.1351322919568179, -4.837566763896823, 2.718169591018591] + renderView1.CameraFocalPoint = [-0.014295125380158416, -0.00023770332336425754, 0.013518139719963074] + renderView1.CameraViewUp = [-0.0025668859947288896, 0.4879570721064113, 0.8728638535749024] + renderView1.CameraViewAngle = 15.234822451317298 + renderView1.CameraParallelScale = 1.434922768089897 + ### + + + + # BIRDSVIEW: + # get active source. + warpByVector1 = GetActiveSource() + + # get active view + renderView1 = GetActiveViewOrCreate('RenderView') + + # hide data in view + Hide(warpByVector1, renderView1) + + # find source + cylindrical_2variableBC_delta05_level3_NCvtu = FindSource('cylindrical_2variableBC_delta05_level3_NC.vtu') + + # set active source + SetActiveSource(cylindrical_2variableBC_delta05_level3_NCvtu) + + # show data in view + cylindrical_2variableBC_delta05_level3_NCvtuDisplay = Show(cylindrical_2variableBC_delta05_level3_NCvtu, renderView1, 'UnstructuredGridRepresentation') + + # get 2D transfer function for 'DisplacementduneVTK' + displacementduneVTKTF2D = GetTransferFunction2D('DisplacementduneVTK') + displacementduneVTKTF2D.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" + displacementduneVTKTF2D.Boxes = [] + displacementduneVTKTF2D.ScalarRangeInitialized = 0 + displacementduneVTKTF2D.Range = [0.0, 1.0, 0.0, 1.0] + displacementduneVTKTF2D.OutputDimensions = [10, 10] + + # get color transfer function/color map for 'DisplacementduneVTK' + displacementduneVTKLUT = GetColorTransferFunction('DisplacementduneVTK') + displacementduneVTKLUT.AutomaticRescaleRangeMode = "Grow and update on 'Apply'" + displacementduneVTKLUT.InterpretValuesAsCategories = 0 + displacementduneVTKLUT.AnnotationsInitialized = 0 + displacementduneVTKLUT.ShowCategoricalColorsinDataRangeOnly = 0 + displacementduneVTKLUT.RescaleOnVisibilityChange = 0 + displacementduneVTKLUT.EnableOpacityMapping = 0 + displacementduneVTKLUT.TransferFunction2D = displacementduneVTKTF2D + displacementduneVTKLUT.Use2DTransferFunction = 0 + displacementduneVTKLUT.RGBPoints = [0.00013513808010835127, 0.0, 0.266667, 0.105882, 0.0002408561525676924, 0.0, 0.347374, 0.139346, 0.00042927712294860734, 0.000538, 0.427912, 0.172933, 0.0007651027177836129, 0.069435, 0.486967, 0.222145, 0.001363640039703789, 0.138178, 0.546082, 0.271326, 0.0024304111260643295, 0.197232, 0.609073, 0.31857, 0.0043317136998854795, 0.257255, 0.671742, 0.365859, 0.007720398979641159, 0.357647, 0.720953, 0.415071, 0.013760077649046323, 0.45767, 0.769919, 0.465021, 0.024524589381361806, 0.546251, 0.811257, 0.537855, 0.04371009442313549, 0.634295, 0.852211, 0.610688, 0.07790435651213874, 0.709097, 0.883706, 0.683522, 0.13884867657385053, 0.78316, 0.914833, 0.755894, 0.2474706759997296, 0.842215, 0.938454, 0.818885, 0.44106616615265487, 0.899977, 0.961538, 0.880692, 0.7861107670179635, 0.935409, 0.975317, 0.92203, 1.3513808010835129, 0.968627, 0.988235, 0.960784] + displacementduneVTKLUT.UseLogScale = 1 + displacementduneVTKLUT.UseOpacityControlPointsFreehandDrawing = 0 + displacementduneVTKLUT.ShowDataHistogram = 0 + displacementduneVTKLUT.AutomaticDataHistogramComputation = 0 + displacementduneVTKLUT.DataHistogramNumberOfBins = 10 + displacementduneVTKLUT.ColorSpace = 'Lab' + displacementduneVTKLUT.UseBelowRangeColor = 0 + displacementduneVTKLUT.BelowRangeColor = [0.0, 0.0, 0.0] + displacementduneVTKLUT.UseAboveRangeColor = 0 + displacementduneVTKLUT.AboveRangeColor = [0.5, 0.5, 0.5] + displacementduneVTKLUT.NanColor = [1.0, 1.0, 0.0] + displacementduneVTKLUT.NanOpacity = 1.0 + displacementduneVTKLUT.Discretize = 1 + displacementduneVTKLUT.NumberOfTableValues = 256 + displacementduneVTKLUT.ScalarRangeInitialized = 1.0 + displacementduneVTKLUT.HSVWrap = 0 + displacementduneVTKLUT.VectorComponent = 0 + displacementduneVTKLUT.VectorMode = 'Magnitude' + displacementduneVTKLUT.AllowDuplicateScalars = 1 + displacementduneVTKLUT.Annotations = [] + displacementduneVTKLUT.ActiveAnnotatedValues = [] + displacementduneVTKLUT.IndexedColors = [] + displacementduneVTKLUT.IndexedOpacities = [] + + # get opacity transfer function/opacity map for 'DisplacementduneVTK' + displacementduneVTKPWF = GetOpacityTransferFunction('DisplacementduneVTK') + displacementduneVTKPWF.Points = [0.00013513808010835127, 0.0, 0.5, 0.0, 1.3513808010835127, 1.0, 0.5, 0.0] + displacementduneVTKPWF.AllowDuplicateScalars = 1 + displacementduneVTKPWF.UseLogScale = 0 + displacementduneVTKPWF.ScalarRangeInitialized = 1 + + # trace defaults for the display properties. + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Selection = None + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Representation = 'Surface' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ColorArrayName = ['POINTS', 'Displacement dune-VTK'] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.LookupTable = displacementduneVTKLUT + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.MapScalars = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.MultiComponentsMapping = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.InterpolateScalarsBeforeMapping = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Opacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PointSize = 2.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.LineWidth = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.RenderLinesAsTubes = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.RenderPointsAsSpheres = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Interpolation = 'Gouraud' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Specular = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SpecularColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SpecularPower = 100.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Luminosity = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Ambient = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Diffuse = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Roughness = 0.3 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Metallic = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.EdgeTint = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Anisotropy = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.AnisotropyRotation = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.BaseIOR = 1.5 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.CoatStrength = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.CoatIOR = 2.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.CoatRoughness = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.CoatColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectTCoordArray = 'None' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectNormalArray = 'None' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectTangentArray = 'None' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Texture = None + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.RepeatTextures = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.InterpolateTextures = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SeamlessU = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SeamlessV = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.UseMipmapTextures = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ShowTexturesOnBackface = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.BaseColorTexture = None + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.NormalTexture = None + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.NormalScale = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.CoatNormalTexture = None + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.CoatNormalScale = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.MaterialTexture = None + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OcclusionStrength = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.AnisotropyTexture = None + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.EmissiveTexture = None + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.EmissiveFactor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.FlipTextures = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.BackfaceRepresentation = 'Follow Frontface' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.BackfaceAmbientColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.BackfaceOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Position = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Scale = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Orientation = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Origin = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.CoordinateShiftScaleMethod = 'Always Auto Shift Scale' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Pickable = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Triangulate = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.UseShaderReplacements = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ShaderReplacements = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.NonlinearSubdivisionLevel = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.UseDataPartitions = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OSPRayUseScaleArray = 'All Approximate' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OSPRayScaleArray = 'IsometryErrorFunction' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OSPRayScaleFunction = 'PiecewiseFunction' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OSPRayMaterial = 'None' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.BlockSelectors = ['/'] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.BlockColors = [] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.BlockOpacities = [] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Orient = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OrientationMode = 'Direction' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectOrientationVectors = 'Displacement dune-VTK' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Scaling = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ScaleMode = 'No Data Scaling Off' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ScaleFactor = 0.2 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectScaleArray = 'IsometryErrorFunction' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.GlyphType = 'Arrow' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.UseGlyphTable = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.GlyphTableIndexArray = 'IsometryErrorFunction' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.UseCompositeGlyphTable = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.UseGlyphCullingAndLOD = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.LODValues = [] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ColorByLODIndex = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.GaussianRadius = 0.01 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ShaderPreset = 'Sphere' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.CustomTriangleScale = 3 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.CustomShader = """ // This custom shader code define a gaussian blur + // Please take a look into vtkSMPointGaussianRepresentation.cxx + // for other custom shader examples + //VTK::Color::Impl + float dist2 = dot(offsetVCVSOutput.xy,offsetVCVSOutput.xy); + float gaussian = exp(-0.5*dist2); + opacity = opacity*gaussian; + """ + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Emissive = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ScaleByArray = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SetScaleArray = ['POINTS', 'IsometryErrorFunction'] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ScaleArrayComponent = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.UseScaleFunction = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ScaleTransferFunction = 'PiecewiseFunction' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OpacityByArray = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OpacityArray = ['POINTS', 'IsometryErrorFunction'] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OpacityArrayComponent = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OpacityTransferFunction = 'PiecewiseFunction' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid = 'GridAxesRepresentation' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionCellLabelBold = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionCellLabelColor = [0.0, 1.0, 0.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionCellLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionCellLabelFontFile = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionCellLabelFontSize = 18 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionCellLabelItalic = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionCellLabelJustification = 'Left' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionCellLabelOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionCellLabelShadow = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionPointLabelBold = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionPointLabelColor = [1.0, 1.0, 0.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionPointLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionPointLabelFontFile = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionPointLabelFontSize = 18 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionPointLabelItalic = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionPointLabelJustification = 'Left' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionPointLabelOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectionPointLabelShadow = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes = 'PolarAxesRepresentation' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ScalarOpacityFunction = displacementduneVTKPWF + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ScalarOpacityUnitDistance = 0.22272467953508482 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.UseSeparateOpacityArray = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OpacityArrayName = ['POINTS', 'IsometryErrorFunction'] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OpacityComponent = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectMapper = 'Projected tetra' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SamplingDimensions = [128, 128, 128] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.UseFloatingPointFrameBuffer = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SelectInputVectors = ['POINTS', 'Displacement dune-VTK'] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.NumberOfSteps = 40 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.StepSize = 0.25 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.NormalizeVectors = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.EnhancedLIC = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ColorMode = 'Blend' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.LICIntensity = 0.8 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.MapModeBias = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.EnhanceContrast = 'Off' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.LowLICContrastEnhancementFactor = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.HighLICContrastEnhancementFactor = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.LowColorContrastEnhancementFactor = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.HighColorContrastEnhancementFactor = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.AntiAlias = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.MaskOnSurface = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.MaskThreshold = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.MaskIntensity = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.MaskColor = [0.5, 0.5, 0.5] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.GenerateNoiseTexture = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.NoiseType = 'Gaussian' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.NoiseTextureSize = 128 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.NoiseGrainSize = 2 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.MinNoiseValue = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.MaxNoiseValue = 0.8 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.NumberOfNoiseLevels = 1024 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ImpulseNoiseProbability = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ImpulseNoiseBackgroundValue = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.NoiseGeneratorSeed = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.CompositeStrategy = 'AUTO' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.UseLICForLOD = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.WriteLog = '' + + # init the 'PiecewiseFunction' selected for 'OSPRayScaleFunction' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OSPRayScaleFunction.Points = [0.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OSPRayScaleFunction.UseLogScale = 0 + + # init the 'Arrow' selected for 'GlyphType' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.GlyphType.TipResolution = 6 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.GlyphType.TipRadius = 0.1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.GlyphType.TipLength = 0.35 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.GlyphType.ShaftResolution = 6 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.GlyphType.ShaftRadius = 0.03 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.GlyphType.Invert = 0 + + # init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ScaleTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.060643404722213745, 1.0, 0.5, 0.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.ScaleTransferFunction.UseLogScale = 0 + + # init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OpacityTransferFunction.Points = [0.0, 0.0, 0.5, 0.0, 0.060643404722213745, 1.0, 0.5, 0.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.OpacityTransferFunction.UseLogScale = 0 + + # init the 'GridAxesRepresentation' selected for 'DataAxesGrid' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XTitle = 'X Axis' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YTitle = 'Y Axis' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZTitle = 'Z Axis' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XTitleFontFamily = 'Arial' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XTitleFontFile = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XTitleBold = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XTitleItalic = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XTitleFontSize = 12 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XTitleShadow = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XTitleOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YTitleFontFamily = 'Arial' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YTitleFontFile = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YTitleBold = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YTitleItalic = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YTitleFontSize = 12 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YTitleShadow = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YTitleOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZTitleFontFamily = 'Arial' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZTitleFontFile = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZTitleBold = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZTitleItalic = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZTitleFontSize = 12 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZTitleShadow = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZTitleOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.FacesToRender = 63 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.CullBackface = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.CullFrontface = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ShowGrid = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ShowEdges = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ShowTicks = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.LabelUniqueEdgesOnly = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.AxesToLabel = 63 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XLabelFontFile = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XLabelBold = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XLabelItalic = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XLabelFontSize = 12 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XLabelShadow = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XLabelOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YLabelFontFile = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YLabelBold = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YLabelItalic = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YLabelFontSize = 12 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YLabelShadow = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YLabelOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZLabelFontFile = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZLabelBold = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZLabelItalic = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZLabelFontSize = 12 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZLabelShadow = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZLabelOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XAxisNotation = 'Mixed' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XAxisPrecision = 2 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XAxisUseCustomLabels = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.XAxisLabels = [] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YAxisNotation = 'Mixed' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YAxisPrecision = 2 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YAxisUseCustomLabels = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.YAxisLabels = [] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZAxisNotation = 'Mixed' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZAxisPrecision = 2 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZAxisUseCustomLabels = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.ZAxisLabels = [] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.UseCustomBounds = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.DataAxesGrid.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + + # init the 'PolarAxesRepresentation' selected for 'PolarAxes' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.Visibility = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.Translation = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.Scale = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.Orientation = [0.0, 0.0, 0.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.EnableCustomBounds = [0, 0, 0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.CustomBounds = [0.0, 1.0, 0.0, 1.0, 0.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.EnableCustomRange = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.CustomRange = [0.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisVisibility = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.RadialAxesVisibility = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.DrawRadialGridlines = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarArcsVisibility = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.DrawPolarArcsGridlines = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.NumberOfRadialAxes = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.AutoSubdividePolarAxis = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.NumberOfPolarAxis = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.MinimumRadius = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.MinimumAngle = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.MaximumAngle = 90.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.RadialAxesOriginToPolarAxis = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.Ratio = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarArcsColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.LastRadialAxisColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.SecondaryPolarArcsColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesColor = [1.0, 1.0, 1.0] + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleVisibility = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisTitle = 'Radial Distance' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleLocation = 'Bottom' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarLabelVisibility = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarLabelFormat = '%-#6.3g' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarLabelExponentLocation = 'Labels' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.RadialLabelVisibility = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.RadialLabelFormat = '%-#3.1f' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.RadialLabelLocation = 'Bottom' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.RadialUnitsVisibility = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.ScreenSize = 10.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleFontFamily = 'Arial' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleFontFile = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleBold = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleItalic = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleShadow = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisTitleFontSize = 12 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelFontFamily = 'Arial' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelFontFile = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelBold = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelItalic = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelShadow = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisLabelFontSize = 12 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextFontFamily = 'Arial' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextFontFile = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextBold = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextItalic = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextShadow = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTextFontSize = 12 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextOpacity = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontFamily = 'Arial' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontFile = '' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextBold = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextItalic = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextShadow = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.SecondaryRadialAxesTextFontSize = 12 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.EnableDistanceLOD = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.DistanceLODThreshold = 0.7 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.EnableViewAngleLOD = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.ViewAngleLODThreshold = 0.7 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.SmallestVisiblePolarAngle = 0.5 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarTicksVisibility = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.ArcTicksOriginToPolarAxis = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.TickLocation = 'Both' + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.AxisTickVisibility = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.AxisMinorTickVisibility = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.ArcTickVisibility = 1 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.ArcMinorTickVisibility = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.DeltaAngleMajor = 10.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.DeltaAngleMinor = 5.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisMajorTickSize = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisTickRatioSize = 0.3 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisMajorTickThickness = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.PolarAxisTickRatioThickness = 0.5 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.LastRadialAxisMajorTickSize = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTickRatioSize = 0.3 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.LastRadialAxisMajorTickThickness = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.LastRadialAxisTickRatioThickness = 0.5 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.ArcMajorTickSize = 0.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.ArcTickRatioSize = 0.3 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.ArcMajorTickThickness = 1.0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.ArcTickRatioThickness = 0.5 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.Use2DMode = 0 + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.PolarAxes.UseLogAxis = 0 + + # hide color bar/color legend + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.SetScalarBarVisibility(renderView1, False) + + # Properties modified on cylindrical_2variableBC_delta05_level3_NCvtuDisplay + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.NonlinearSubdivisionLevel = 4 + + # Properties modified on cylindrical_2variableBC_delta05_level3_NCvtuDisplay + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.Ambient = 0.2 + + renderView1.ResetActiveCameraToPositiveZ() + + # reset view to fit data + renderView1.ResetCamera(False) + + renderView1.ResetActiveCameraToNegativeZ() + + # reset view to fit data + renderView1.ResetCamera(False) + + # reset view to fit data bounds + renderView1.ResetCamera(-1.0, 1.0, -1.0, 1.0, 0.0, 0.0, False) + + # reset view to fit data + renderView1.ResetCamera(True) + + # Apply a preset using its name. Note this may not work as expected when presets have duplicate names. + displacementduneVTKLUT.ApplyPreset('Cool to Warm', True) + + # set scalar coloring + ColorBy(cylindrical_2variableBC_delta05_level3_NCvtuDisplay, ('POINTS', 'Displacement dune-VTK', 'Z')) + + # rescale color and/or opacity maps used to exactly fit the current data range + cylindrical_2variableBC_delta05_level3_NCvtuDisplay.RescaleTransferFunctionToDataRange(False, False) + + # Update a scalar bar component title. + UpdateScalarBarsComponentTitle(displacementduneVTKLUT, cylindrical_2variableBC_delta05_level3_NCvtuDisplay) + + # reset view to fit data + renderView1.ResetCamera(True) + + # reset view to fit data + renderView1.ResetCamera(True) + + # reset view to fit data + renderView1.ResetCamera(True) + + + + + + + #TEST:Set Size in Pixels: + # layout/tab size in pixels + layout1.SetSize(750, 620) + + + + + + # reset view to fit data + renderView1.ResetCamera(True) + + + # Write to pdf + # ExportView(outputName + '.pdf', view=renderView1) + + # export view + ExportView(outputName + '.pdf', view=renderView1, Plottitle='ParaView GL2PS Export', + Compressoutputfile=0, + Drawbackground=1, + Cullhiddenprimitives=1, + Linewidthscalingfactor=0.714, + Pointsizescalingfactor=0.714, + GL2PSdepthsortmethod='Simple sorting (fast, good)', + Rasterize3Dgeometry=1, + Dontrasterizecubeaxes=1, + Rendertextaspaths=1) + +#================================================================ +# addendum: following script captures some of the application +# state to faithfully reproduce the visualization during playback +#================================================================ + + # get layout + layout1 = GetLayout() + + #-------------------------------- + # saving layout sizes for layouts + + # layout/tab size in pixels + layout1.SetSize(750, 620) + + + + # # get active view + # renderView1 = GetActiveViewOrCreate('RenderView') + + # # get layout + # layout1 = GetLayout() + + # # layout/tab size in pixels + # layout1.SetSize(2922, 908) + + # # current camera placement for renderView1 + # renderView1.InteractionMode = '2D' + # renderView1.CameraPosition = [-1.1764082767995223, -6.3731178885162665, 3.0455402693025344] + # renderView1.CameraFocalPoint = [1.75, 0.49948221910744905, 0.03305599093437195] + # renderView1.CameraViewUp = [0.12613103997492955, 0.35271102737899473, 0.9271924783560838] + # renderView1.CameraParallelScale = 1.3953474628479614 + + # save screenshot + SaveScreenshot(outputName + '.png', renderView1, ImageResolution=[1500, 1240], + FontScaling='Scale fonts proportionally', + OverrideColorPalette='WhiteBackground', + StereoMode='No change', + TransparentBackground=0, + # PNG options + CompressionLevel='5', + MetaData=['Application', 'ParaView']) + + # # save screenshot + # SaveScreenshot(outputName + '.png', renderView1, ImageResolution=[5844, 1816], + # FontScaling='Scale fonts proportionally', + # OverrideColorPalette='WhiteBackground', + # StereoMode='No change', + # TransparentBackground=0, + # # PNG options + # CompressionLevel='5', + # MetaData=['Application', 'ParaView']) diff --git a/experiment/macro-problem/variableBC/create_boundaryBox.py b/experiment/macro-problem/variableBC/create_boundaryBox.py index 7b7724fdc9598f0cb641abc135fdb54a1f0008bb..1724a08fc23af4a10c822f1f23e8b5624385c640 100644 --- a/experiment/macro-problem/variableBC/create_boundaryBox.py +++ b/experiment/macro-problem/variableBC/create_boundaryBox.py @@ -1,28 +1,13 @@ -# trace generated using paraview version 5.10.0-RC1 -#import paraview -#paraview.compatibility.major = 5 -#paraview.compatibility.minor = 10 - #### import the simple module from the paraview from paraview.simple import * #### disable automatic camera reset on 'Show' paraview.simple._DisableFirstRenderCameraReset() +delta = 2.0 + # create a new 'Box' box1 = Box(registrationName='Box1') -# find source -warpByVector3 = FindSource('WarpByVector3') - -# find source -warpByVector2 = FindSource('WarpByVector2') - -# find source -cylindrical_2variableBC_delta01_level3_NCvtu = FindSource('cylindrical_2variableBC_delta0.1_level3_NC.vtu') - -# find source -cylindrical_2variableBC_delta10_level3_NCvtu = FindSource('cylindrical_2variableBC_delta1.0_level3_NC.vtu') - # get active view renderView1 = GetActiveViewOrCreate('RenderView') @@ -52,19 +37,9 @@ box1Display.PolarAxes = 'PolarAxesRepresentation' # init the 'PiecewiseFunction' selected for 'ScaleTransferFunction' box1Display.ScaleTransferFunction.Points = [-1.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] - # init the 'PiecewiseFunction' selected for 'OpacityTransferFunction' box1Display.OpacityTransferFunction.Points = [-1.0, 0.0, 0.5, 0.0, 1.0, 1.0, 0.5, 0.0] -# find source -warpByVector1 = FindSource('WarpByVector1') - -# find source -cylindrical_2variableBC_delta05_level3_NCvtu = FindSource('cylindrical_2variableBC_delta0.5_level3_NC.vtu') - -# update the view to ensure updated data information -renderView1.Update() - # Properties modified on box1 box1.XLength = 2.0 @@ -73,7 +48,7 @@ renderView1.Update() # Properties modified on box1 box1.XLength = 0.1 -box1.YLength = 2.0 +box1.YLength = delta box1.ZLength = 0.1 # update the view to ensure updated data information @@ -88,37 +63,7 @@ box1Display.DataAxesGrid.Position = [-1.0, 0.0, 0.0] # Properties modified on box1Display.PolarAxes box1Display.PolarAxes.Translation = [-1.0, 0.0, 0.0] -# Properties modified on box1 -box1.YLength = 1.0 - # update the view to ensure updated data information renderView1.Update() -#================================================================ -# addendum: following script captures some of the application -# state to faithfully reproduce the visualization during playback -#================================================================ - -# get layout -layout1 = GetLayout() - -#-------------------------------- -# saving layout sizes for layouts - -# layout/tab size in pixels -layout1.SetSize(2292, 1171) - -#----------------------------------- -# saving camera placements for views - -# current camera placement for renderView1 -renderView1.InteractionMode = '2D' -renderView1.CameraPosition = [3152.297535110951, -8555.241086160378, 4107.416501946229] -renderView1.CameraFocalPoint = [-0.14072623447374652, -0.17247711115688338, -0.25121865343020566] -renderView1.CameraViewUp = [-0.11249939664840285, 0.3960965825556926, 0.9112910528702928] -renderView1.CameraParallelScale = 2.5053655927712435 - -#-------------------------------------------- -# uncomment the following to render all views -# RenderAllViews() -# alternatively, if you want to write images, you can use SaveScreenshot(...). \ No newline at end of file +#------------------------------------------------------------------------------- \ No newline at end of file diff --git a/experiment/macro-problem/variableBC/cylindrical_2variableBC.py b/experiment/macro-problem/variableBC/cylindrical_2variableBC.py index 84df30f4ee1fea543c03859a34d7f865dcbeeb3a..fdec935ec4108a3df0e8dc7e46d7ecbdabb2db7c 100644 --- a/experiment/macro-problem/variableBC/cylindrical_2variableBC.py +++ b/experiment/macro-problem/variableBC/cylindrical_2variableBC.py @@ -9,7 +9,6 @@ class ParameterSet(dict): parameterSet = ParameterSet() - ############################################# # Paths ############################################# @@ -17,8 +16,13 @@ parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/ # parameterSet.outputPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/outputs_buckling_experiment' # This is currently still used in prestrainedMaterial parameterSet.baseName= 'cylindrical_2variableBC' + +""" + ----- MACRO-PROBLEM PARAMETERS: ----- +""" + ############################################# -# Grid parameters +# Macro-Grid parameters ############################################# nX=8 nY=8 @@ -29,7 +33,6 @@ parameterSet.upper = '1 1' parameterSet.elements = str(nX)+' '+ str(nY) parameterSet.macroGridLevel = 1 - ############################################# # Options ############################################# @@ -48,13 +51,16 @@ parameterSet.conforming_DiscreteJacobian = 0 # Tolerance of the multigrid solver parameterSet.tolerance = 1e-12 # Maximum number of multigrid iterations -parameterSet.maxProximalNewtonSteps = 100 +parameterSet.maxProximalNewtonSteps = 1000 # Initial regularization parameterSet.initialRegularization = 2000 # parameterSet.initialRegularization = 1 # Measure convergence parameterSet.instrumented = 0 +# parameterSet.regularizationNorm = 'Euclidean' +parameterSet.regularizationNorm = 'H1semi' + # --- (optional) Riemannian Trust-region solver: @@ -94,7 +100,7 @@ parameterSet.vtkwrite_analyticalSolution = 0 parameterSet.vtkWrite_analyticalSurfaceNormal = 0 # The grid can be refined several times for a higher resolution in the VTK-file. -parameterSet.subsamplingRefinement = 2 +# parameterSet.subsamplingRefinement = 2 # Write Dof-Vector to .txt-file parameterSet.writeDOFvector = 0 @@ -102,16 +108,19 @@ parameterSet.writeDOFvector = 0 ############################################# # Dirichlet boundary indicator ############################################# +parameterSet.delta = 1.3 +print('parameterSet.delta:', parameterSet.delta) + def dirichlet_indicator(x) : - delta = 0.75 - if( (x[0] < -0.99) and (abs(x[1]) <(delta/2.0) )): + # length of the clamped boundary-segment + delta = parameterSet.delta + print('delta:', delta) + # if( (x[0] < -0.99) and (abs(x[1]) <(delta/2.0) )): + if( (x[0] < -0.99) and (abs(x[1]) <=(delta/2.0) )): return True else: return False - - - ############################################# # Microstructure ############################################ @@ -128,66 +137,8 @@ def df(x): return ((1,0), (0,1), (0,0)) -# #Rotation: -# def R(beta): -# return [[math.cos(beta),0], -# [0,1], -# [-math.sin(beta),0]] - - -# def f(x): -# a = 0.5 -# if(x[0] <= 0.01): -# return [x[0], x[1], 0] -# elif(x[0] >= 3.99): -# return [x[0] - a, x[1], 0] -# else: -# return [x[0], x[1], 0] - - -# # beta = math.pi/4.0 -# beta= 0.05 -# # beta= math.pi/12.0 -# # beta= 0.10 -# # beta = 0 - -# def df(x): -# a = 0.5 -# if(x[0] <= 0.01): -# # return R(-1.0*beta) -# return R(beta) -# elif(x[0] >= 3.99): -# # return R(beta) -# return R(-1.0*beta) -# else: -# return ((1,0), -# (0,1), -# (0,0)) - - - - -# def f(x): -# # a = 0.4 -# a = 1.4 -# if(x[0] <= -1.99): -# return [x[0] + a, x[1], 0] -# elif(x[0] >= 1.99): -# return [x[0] - a, x[1], 0] -# else: -# return [x[0], x[1], 0] - - -# def df(x): -# return ((1,0), -# (0,1), -# (0,0)) - - fdf = (f, df) - - ############################################# # Force ############################################ @@ -196,25 +147,6 @@ parameterSet.assemble_force_term = False def force(x): return [0, 0, 0] - - -############################################# -# Analytical reference Solution -############################################# -# def f(x): -# return [x[0], x[1], 0] -# -# -# def df(x): -# return ((1,0), -# (0,1), -# (0,0)) -# -# -# fdf = (f, df) - - - ##################### MICROSCALE PROBLEM #################### # parameterSet.prestrainFlag = True #deprecated @@ -225,8 +157,6 @@ def force(x): # parameterSet.read_effectiveQuantities_from_Parset = True - -parameterSet.printMicroOutput = False parameterSet.VTKwriteMacroPhaseIndicator = True parameterSet.MacroPhaseSubsamplingRefinement = 3 @@ -269,22 +199,36 @@ class GlobalMicrostructure: # Represents the local microstructure in Phase 1 class LocalMicrostructure_1: + + rho = 0.95 + # rho = 0.75 + # rho = 0.33 + def __init__(self,macroPoint=[0,0]): # self.macroPoint = macroPoint self.gamma = 1.0 #in the future this might change depending on macroPoint. - self.phases = 3 #in the future this might change depending on macroPoint. #--- Define different material phases: + # #- PHASE 1 + # self.phase1_type="isotropic" + # self.materialParameters_phase1 = [200, 1.0] + # #- PHASE 2 + # self.phase2_type="isotropic" + # self.materialParameters_phase2 = [200, 1.0] + + # self.phase3_type="isotropic" + # self.materialParameters_phase3 = [100, 1.0] #(Matrix-material) + # # self.materialParameters_phase3 = [100, 0.1] #(Matrix-material) + #- PHASE 1 self.phase1_type="isotropic" - self.materialParameters_phase1 = [200, 1.0] + self.materialParameters_phase1 = [28.7,22.5] # glass #- PHASE 2 self.phase2_type="isotropic" - self.materialParameters_phase2 = [200, 1.0] - + self.materialParameters_phase2 = [28.7,22.5] # glass + #- PHASE 3 self.phase3_type="isotropic" - self.materialParameters_phase3 = [100, 1.0] #(Matrix-material) - # self.materialParameters_phase3 = [100, 0.1] #(Matrix-material) + self.materialParameters_phase3 = [1.2,2.58] #(Matrix-material: polystyrene # Three-phase composite def indicatorFunction(self,x): @@ -298,27 +242,15 @@ class GlobalMicrostructure: return 2 #Phase2 else : return 3 #Phase3 - - # Two-phase composite: - def indicatorFunction(self,x): - if (abs(x[0]) < (1.0/2.0) and x[2] >= 0 ): - return 1 #Phase1 - else : - return 2 #Phase2 - # elif (abs(x[1]) < (1.0/2.0) and x[2] < 0 ): - # return 2 #Phase2 - # else : - # return 3 #Phase3 + # prestrained fibre in top layer , e2-aligned def prestrain_phase1(self,x): return [[1.0, 0, 0], [0,1.0,0], [0,0,1.0]] - # prestrained fibre in bottom layer , e1-aligned def prestrain_phase2(self,x): - rho = 0.5 - return [[rho*1.0, 0, 0], [0,rho*1.0,0], [0,0,rho*1.0]] + return [[self.rho*1.0, 0, 0], [0,self.rho*1.0,0], [0,0,self.rho*1.0]] def prestrain_phase3(self,x): return [[0, 0, 0], [0,0,0], [0,0,0]] @@ -370,50 +302,49 @@ class GlobalMicrostructure: # return [[0, 0, 0], [0,0,0], [0,0,0]] - - +""" + ----- MICRO-PROBLEM PARAMETERS: ----- +""" +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. ############################################# -# Grid parameters +# Micro-Grid parameters ############################################# -parameterSet.microGridLevel = 3 +parameterSet.microGridLevel = 2 #5 + ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) ############################################# # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: -parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition +parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) parameterSet.MaterialSubsamplingRefinement= 2 - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - -parameterSet.print_corrector_matrices = 0 - # --- Write Correctos to VTK-File: parameterSet.writeCorrectorsVTK = 1 - -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 - # --- write effective quantities (Qhom.Beff) to .txt-files -parameterSet.write_EffectiveQuantitiesToTxt = True \ No newline at end of file +parameterSet.write_EffectiveQuantitiesToTxt = True + +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. \ No newline at end of file diff --git a/experiment/macro-problem/variableBC/cylindrical_2variableBC_delta025.py b/experiment/macro-problem/variableBC/cylindrical_2variableBC_delta025.py new file mode 100644 index 0000000000000000000000000000000000000000..1643bcb4fb8cc1abe597a1271cf434b7ddfb7c45 --- /dev/null +++ b/experiment/macro-problem/variableBC/cylindrical_2variableBC_delta025.py @@ -0,0 +1,11 @@ +from cylindrical_2variableBC import* + + +def dirichlet_indicator(x) : + # length of the clamped boundary-segment + delta = 0.25 + # if( (x[0] < -0.99) and (abs(x[1]) <(delta/2.0) )): + if( (x[0] < -0.99) and (abs(x[1]) <=(delta/2.0) )): + return True + else: + return False diff --git a/experiment/macro-problem/variableBC/cylindrical_2variableBC_delta20.py b/experiment/macro-problem/variableBC/cylindrical_2variableBC_delta20.py new file mode 100644 index 0000000000000000000000000000000000000000..b809c99c88d1665484932bf98ee0ae41328f7a6b --- /dev/null +++ b/experiment/macro-problem/variableBC/cylindrical_2variableBC_delta20.py @@ -0,0 +1,11 @@ +from cylindrical_2variableBC import* + + +def dirichlet_indicator(x) : + # length of the clamped boundary-segment + delta = 2.0 + # if( (x[0] < -0.99) and (abs(x[1]) <(delta/2.0) )): + if( (x[0] < -0.99) and (abs(x[1]) <=(delta/2.0) )): + return True + else: + return False diff --git a/experiment/micro-problem/ElasticModuliComputer.py b/experiment/micro-problem/ElasticModuliComputer.py new file mode 100644 index 0000000000000000000000000000000000000000..2cf7cfefe64522e99b2dc5ec7f6da3a221f0f995 --- /dev/null +++ b/experiment/micro-problem/ElasticModuliComputer.py @@ -0,0 +1,124 @@ +import numpy as np + +# todo: write as functions .. + + + +def computeLameParameters(E,nu): + # Lamé first parameter (lambda) + lame_1 = (nu*E)/((1+nu)*(1-2*nu)) + # Lamé second parameter (mu) + lame_2 = E/(2*(1+nu)) + return [lame_1,lame_2] + + +def computeElasticModuliFromLame(lame_1,lame_2): + E = (lame_2*(3*lame_1 + 2*lame_2))/(lame_1 + lame_2) + nu = lame_1/(2*(lame_1+lame_2)) + return [E,nu] + +def computeModuliRatio(moduli_1,moduli_2): + ratio_1 = moduli_1[0]/moduli_2[0] + ratio_2 = moduli_1[1]/moduli_2[1] + return [ratio_1,ratio_2] + + +""" + Parameters taken from [Zhang et al. - The near-isotropic elastic properties of interpenetrating composites reinforced by regular fibre-networks] + Composites often used in practice: + 1. SiC / Aluminium (matrix) + 2. Glass / Polystyrene (matrix) + 3. Glass / Epoxy (matrix) +""" + +#1. MaterialName 2. Youngs Modulus, 3. Poisson ratio +material = [ ['SiC', 410, 0.19], + ['Steel', 200, 0.28], + ['Aluminium', 74, 0.33], + ['Glass', 70, 0.22], + ['Polystyrene', 3.25, 0.34], + ['Epoxy', 3.0, 0.35], + ['Rubber', 0.1, 0.4999], + ['Glass_2(Wang)', 72, 0.26], + ['Epoxy_2(Wang)', 3.79, 0.37] + ] + +# # Young's modulus +# # E = 3.14 #Polyethylene +# E_Steel = 200 # Steel +# E_SiC = 410 # Silicium Carbide +# E_Alu = 74 # Aluminium (Computational results) +# E_Glass = 70 # Glass +# E_Polystyrene = 3.25 # Polystyrene +# E_epoxy = 3.0 # Epoxy +# # Poisson ratio +# nu_SiC = 0.19 # Silicium Carbide +# nu_Alu = 0.33 #Aluminium +# nu_Glass = 0.22 #Glass +# nu_Polystyrene = 0.34 #Polystyrene +# nu_Epoxy = 0.35 # Epoxy + +for i in range(0, len(material)): + print('material ' + str(i) + ':', material[i][0] ) + print('Lame parameters', computeLameParameters(material[i][1],material[i][2])) + + +print('elastic moduli ratio Sic/Alu:', computeModuliRatio(computeLameParameters(material[0][1],material[0][2]),computeLameParameters(material[2][1],material[2][2]))) +print('elastic moduli ratio Glass/Polystyrene:', computeModuliRatio(computeLameParameters(material[3][1],material[3][2]),computeLameParameters(material[4][1],material[4][2]))) +print('elastic moduli ratio Glass/Epoxy:', computeModuliRatio(computeLameParameters(material[3][1],material[3][2]),computeLameParameters(material[5][1],material[5][2]))) + + +print('elastic moduli paper:', computeElasticModuliFromLame(1,100)) +print('elastic moduli paper:', computeElasticModuliFromLame(1,150)) +print('elastic moduli ratio paper',computeModuliRatio(computeElasticModuliFromLame(1,150),computeElasticModuliFromLame(1,100))) +# print('Lame parameters of SiC:', computeLameParameters(E_SiC,nu_SiC)) + + + +# Shear modulus / Lamé second parameter +# mu = 0.117 #Polyethylene +# mu = 79.3 # Steel + +# print('Youngs modulus:', E) +# print('Shear modulus:', mu) + + +# # Poisson ratio +# nu_ = (E/(2*mu)) - 1 + +# # Lamé first parameter +# lambda_ = (nu_*E)/((1+nu_)*(1-2*nu_)) + + + +# print('Lame parameter (nu):', nu_) +# print('Lame parameter (lambda):', lambda_) + + +# #TEST: +# mu = 150 +# lambda_ =1 + +# #Rumpf ~ E = 6, nu = 0.2 +# mu = 5.0/2.0 +# lambda_ = 5.0/3.0 + +#----- Lamé parameters to Young/Shear modulus +# E_b = (mu*(3*lambda_ + 2*mu))/(lambda_ + mu) +# nu_b = lambda_/(2*(lambda_+mu)) + +# print('E_ backwards', E_b) +# print('nu_ backwards', nu_b) + + + + +# # TEST (paper values) +# E_1 = 200.99 +# nu_1 = 0.00495 + + +# E_2 = 300.99 +# nu_2 = 0.00331 + + diff --git a/experiment/micro-problem/MVM_infinitynorm_microproblem.py b/experiment/micro-problem/MVM_infinitynorm_microproblem.py new file mode 100644 index 0000000000000000000000000000000000000000..c968c3c0dc9da970269ff1beedda22a0e9e2dc64 --- /dev/null +++ b/experiment/micro-problem/MVM_infinitynorm_microproblem.py @@ -0,0 +1,165 @@ +import math +import numpy as np + +class ParameterSet(dict): + def __init__(self, *args, **kwargs): + super(ParameterSet, self).__init__(*args, **kwargs) + self.__dict__ = self + +parameterSet = ParameterSet() + +"""" + Experiment: Microstructure with infinity distances (squares) from vertices + and RVE center but constant in one space direction. + +""" + +############################################# +# Paths +############################################# +parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/outputs_buckling_microproblem' +parameterSet.baseName= 'buckling_microproblem' + +##################### MICROSCALE PROBLEM #################### +class Microstructure: + def __init__(self): + # self.macroPoint = macroPoint + self.gamma = 1.0 #in the future this might change depending on macroPoint. + self.phases = 2 #in the future this might change depending on macroPoint. + #--- Define different material phases: + #- PHASE 1 + self.phase1_type="isotropic" + # self.materialParameters_phase1 = [200, 1.0] + self.materialParameters_phase1 = [28.7,22.5] # glass (Fibre) + + #- PHASE 2 + self.phase2_type="isotropic" + # self.materialParameters_phase2 = [100, 1.0] + self.materialParameters_phase2 = [1.2,2.58] #Matrix-material: polystyrene + + + self.theta = 0.2 # Distance from the nodes + + + def one_norm(self,v): + # r = 0 + # for i in range(0, len(v)): + # r += np.abs(v[i]) + # return r + return np.linalg.norm(v,1) + + def two_norm(self,v): + # r = 0 + # for i in range(0, len(v)): + # r += v[i]**2 + # return np.sqrt(r) + return np.linalg.norm(v, 'fro') # frobenius-norm (default) + + + def infinity_norm(self,v): + # return np.abs(v).max() + return np.linalg.norm(v,np.inf) # Use already exisiting norm from numpy.. + + + """ + extract subarray from A with index i removed. + """ + def subArray(self,v,i): + r = [] + for j in range(0,len(v)): + if not (j == i): + r.append(v[j]) + + return np.array(r) + + + + #--- Indicator function for material phases + def indicatorFunction(self,y): + + # cast to numpy array + x = np.array(y) + # print('y:', y) + + """ + We assume constancy in one space-direction: + """ + # constant in ... + # x = self.subArray(x,0) #y1-direction + # x = self.subArray(x,1) #y2-direction + x = self.subArray(x,2) #x3-direction + # print('y:', y) + + # Dfine nodes (2D as we assume constanty in one direction) + node1 = [-0.5,-0.5] + node2 = [0.5,-0.5] + node3 = [-0.5,0.5] + node4 = [0.5,0.5] + center = [0,0] + + indicator = (self.infinity_norm(x-node1) < self.theta) | (self.infinity_norm(x-node2) < self.theta) \ + | (self.infinity_norm(x-node3) < self.theta) | (self.infinity_norm(x-node4) < self.theta) \ + | (self.infinity_norm(x-center) < self.theta) + + + indicator = indicator & (y[2]>= 0) + + if(indicator): + return 1 #Phase1 + else : + return 2 #Phase2 + + #--- Define prestrain function for each phase + def prestrain_phase1(self,x): + rho = 1.0 + return [[rho*1.0, 0, 0], [0,rho*1.0,0], [0,0,rho*1.0]] + + def prestrain_phase2(self,x): + return [[0, 0, 0], [0,0,0], [0,0,0]] + + +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + +############################################# +# Grid parameters +############################################# +parameterSet.microGridLevel = 3 + +############################################# +# Assembly options +############################################# +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices + +############################################# +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) +############################################# +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output + +############################################# +# Write/Output options #(default=false) +############################################# +# --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: +parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition +#parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) +parameterSet.MaterialSubsamplingRefinement= 2 +# --- Write Correctos to VTK-File: +parameterSet.writeCorrectorsVTK = 1 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = True + +############################################# +# Debug options +############################################# +parameterSet.print_debug = 1 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. + + + diff --git a/experiment/micro-problem/buckling_microproblem.py b/experiment/micro-problem/buckling_microproblem.py index 446536ea5dddb241ea3f6c06767349c84f4c62c7..28d058a864c8b5e98e0973f824b0eb9799b502c8 100644 --- a/experiment/micro-problem/buckling_microproblem.py +++ b/experiment/micro-problem/buckling_microproblem.py @@ -24,7 +24,6 @@ parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/ parameterSet.baseName= 'buckling_microproblem' ##################### MICROSCALE PROBLEM #################### - class Microstructure: def __init__(self): # self.macroPoint = macroPoint @@ -33,16 +32,20 @@ class Microstructure: #--- Define different material phases: #- PHASE 1 self.phase1_type="isotropic" - self.materialParameters_phase1 = [200, 1.0] + # self.materialParameters_phase1 = [200, 1.0] + self.materialParameters_phase1 = [28.7,22.5] # glass (Fibre) + #- PHASE 2 self.phase2_type="isotropic" - self.materialParameters_phase2 = [100, 1.0] - + # self.materialParameters_phase2 = [100, 1.0] + self.materialParameters_phase2 = [1.2,2.58] #Matrix-material: polystyrene #--- Indicator function for material phases def indicatorFunction(self,x): - fibreRadius = 0.2 - if (abs(x[0]) < fibreRadius and x[2] >= 0 ): + # fibreRadius = 0.1 + fibreRadius = 0.25 + # if (abs(x[0]) < fibreRadius and x[2] >= 0 ): + if (abs(x[1]) < fibreRadius and x[2] >= 0 ): return 1 #Phase1 else : return 2 #Phase2 @@ -56,7 +59,7 @@ class Microstructure: return [[0, 0, 0], [0,0,0], [0,0,0]] - +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. ############################################# # Grid parameters @@ -66,17 +69,18 @@ parameterSet.microGridLevel = 4 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) @@ -85,23 +89,18 @@ parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for sol parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) parameterSet.MaterialSubsamplingRefinement= 2 - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - -parameterSet.print_corrector_matrices = 0 - # --- Write Correctos to VTK-File: parameterSet.writeCorrectorsVTK = 1 - -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 - # --- write effective quantities (Qhom.Beff) to .txt-files parameterSet.write_EffectiveQuantitiesToTxt = True +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. + diff --git a/experiment/micro-problem/compWood/perforated-bilayer/perforated_wood_upper.py b/experiment/micro-problem/compWood/perforated-bilayer/perforated_wood_upper.py index 2c1f8381bda86844af5e9c9db11396d2a42cdf3e..46d4a4312c32d5c14115a93bcf618e813a0d43ca 100644 --- a/experiment/micro-problem/compWood/perforated-bilayer/perforated_wood_upper.py +++ b/experiment/micro-problem/compWood/perforated-bilayer/perforated_wood_upper.py @@ -69,9 +69,9 @@ parameterSet.Phases=3 # Parameters of the model # -- (thickness upper layer) / (thickness) # param_r = 0.22 -param_r = 0.12 +param_r = 0.49 # -- thickness [meter] -param_h = 0.0047 +param_h = 0.008 # -- moisture content in the flat state [%] param_omega_flat = 17.17547062 # -- moisture content in the target state [%] @@ -80,7 +80,7 @@ param_omega_target = 8.959564147 param_theta = 0.0 # Design Parameter ratio between perforaton (cylindrical) volume and volume of upper layer -param_beta = 0.0 +param_beta = 0.3 # Depth of perforation # perfDepth = 0.12 # perfDepth = param_r diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/0/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/0/BMatrix.txt deleted file mode 100644 index 6137c432727280d2dfa86fd721657aeb9a3c66f1..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.02691656716370883 -1 2 -0.576108730383210088 -1 3 2.03963883345130819e-29 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/0/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/0/QMatrix.txt deleted file mode 100644 index 1534b2f63411bcda7d39fe9bba6dbfc3f37a9f36..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 344.448324198946295 -1 2 46.0309380450088881 -1 3 -1.8599861030914169e-29 -2 1 46.0309380450078862 -2 2 889.279295541113925 -2 3 4.12349304813084745e-29 -3 1 2.07158959089932232e-28 -3 2 6.15195762196629843e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/0/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/0/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/0/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/0/perforated_wood_lower_log.txt deleted file mode 100644 index 0312883171aca42ba74cb4759d4f05da8ad6ebdd..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/0/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.192467 9.00929e-30 0 -9.00929e-30 0.00914117 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00914117 2.49611e-30 0 -2.49611e-30 0.053197 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.37629e-31 8.75336e-20 0 -8.75336e-20 1.55529e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -344.448 46.0309 -1.85999e-29 -46.0309 889.279 4.12349e-29 -2.07159e-28 6.15196e-29 224.213 - ------------------------- ---- Prestrain Output --- -Bhat_: 1360.55 -326.959 5.3719e-27 -Beff_: 4.02692 -0.576109 2.03964e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=344.448 -q2=889.279 -q3=224.213 -q12=46.0309 -q13=-1.85999e-29 -q23=4.12349e-29 -q_onetwo=46.030938 -b1=4.026917 -b2=-0.576109 -b3=0.000000 -mu_gamma=224.212842 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.44448e+02 & 8.89279e+02 & 2.24213e+02 & 4.60309e+01 & -1.85999e-29 & 4.12349e-29 & 4.02692e+00 & -5.76109e-01 & 2.03964e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/1/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/1/BMatrix.txt deleted file mode 100644 index 53933e8ac6cdbf8198a47dcc29523939faf99f5e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.03220960821014707 -1 2 -0.57899301528280267 -1 3 3.87469583876794542e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/1/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/1/QMatrix.txt deleted file mode 100644 index 4c3e74f2425ee4251cdce53fb5dba3c4ac2cfe63..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 341.83041637042902 -1 2 45.7592918336055732 -1 3 6.30246511107586914e-17 -2 1 45.7592918336055803 -2 2 881.640271660192298 -2 3 1.19046245571855641e-17 -3 1 8.86270689744671734e-17 -3 2 3.46848345197611242e-17 -3 3 222.764482947247643 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/1/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/1/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/1/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/1/perforated_wood_lower_log.txt deleted file mode 100644 index 6d23b7202d214bd4f6f0502d4c3ede135618a722..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/1/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.194024 9.29013e-20 0 -9.29013e-20 0.00918894 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0090968 -1.74666e-20 0 --1.74666e-20 0.0518476 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -3.02467e-20 -0.000995565 0 --0.000995565 5.05146e-21 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -341.83 45.7593 6.30247e-17 -45.7593 881.64 1.19046e-17 -8.86271e-17 3.46848e-17 222.764 - ------------------------- ---- Prestrain Output --- -Bhat_: 1351.84 -325.953 1.20043e-15 -Beff_: 4.03221 -0.578993 3.8747e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=341.83 -q2=881.64 -q3=222.764 -q12=45.7593 -q13=6.30247e-17 -q23=1.19046e-17 -q_onetwo=45.759292 -b1=4.032210 -b2=-0.578993 -b3=0.000000 -mu_gamma=222.764483 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.41830e+02 & 8.81640e+02 & 2.22764e+02 & 4.57593e+01 & 6.30247e-17 & 1.19046e-17 & 4.03221e+00 & -5.78993e-01 & 3.87470e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/2/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/2/BMatrix.txt deleted file mode 100644 index 1cfb292da7b3f35c863bdfeffadedc319af856f8..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.04192623650617211 -1 2 -0.586174091360423644 -1 3 -7.24811870491674609e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/2/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/2/QMatrix.txt deleted file mode 100644 index d502f6e9b88e1d25f215a711443292585d4a0593..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 337.282454261228338 -1 2 45.5269144900198199 -1 3 -7.07619794465715046e-17 -2 1 45.5269144900194789 -2 2 863.761709093920445 -2 3 -3.39968955358248628e-16 -3 1 -2.0273521834294865e-17 -3 2 -1.25148694440349248e-16 -3 3 219.834572890977029 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/2/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/2/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/2/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/2/perforated_wood_lower_log.txt deleted file mode 100644 index 7ade1110cd8e27f595a9e02aa33f120baf87fb78..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/2/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.196742 -3.83847e-21 0 --3.83847e-21 0.00938185 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0087842 -2.20051e-20 0 --2.20051e-20 0.0484485 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -2.89255e-21 -0.00311244 0 --0.00311244 -2.37572e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -337.282 45.5269 -7.0762e-17 -45.5269 863.762 -3.39969e-16 --2.02735e-17 -1.25149e-16 219.835 - ------------------------- ---- Prestrain Output --- -Bhat_: 1336.58 -322.298 -1.60197e-15 -Beff_: 4.04193 -0.586174 -7.24812e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=337.282 -q2=863.762 -q3=219.835 -q12=45.5269 -q13=-7.0762e-17 -q23=-3.39969e-16 -q_onetwo=45.526914 -b1=4.041926 -b2=-0.586174 -b3=-0.000000 -mu_gamma=219.834573 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.37282e+02 & 8.63762e+02 & 2.19835e+02 & 4.55269e+01 & -7.07620e-17 & -3.39969e-16 & 4.04193e+00 & -5.86174e-01 & -7.24812e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/3/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/3/BMatrix.txt deleted file mode 100644 index 8a84a45dde4a66b20cc77b8c574ae7e1a5d38ba3..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.0510966048893593 -1 2 -0.592799193287436799 -1 3 -1.27894493167162919e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/3/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/3/QMatrix.txt deleted file mode 100644 index 181902373d83fcc8f9d8fa3225c602e43c351d46..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 333.129401873112613 -1 2 45.4664696489353162 -1 3 4.00456848671099097e-16 -2 1 45.4664696489350959 -2 2 848.052528549609065 -2 3 7.57850542303789565e-16 -3 1 4.67562186884373787e-19 -3 2 8.90829421066794379e-16 -3 3 217.016329559314272 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/3/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/3/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/3/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/3/perforated_wood_lower_log.txt deleted file mode 100644 index ac56a197ffcbf14b0fd5bc75fc720983c8e7ec76..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/3/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.19923 2.70664e-19 0 -2.70664e-19 0.00960818 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00842772 4.46676e-19 0 -4.46676e-19 0.0452917 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.15583e-20 -0.00523522 0 --0.00523522 9.95678e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -333.129 45.4665 4.00457e-16 -45.4665 848.053 7.57851e-16 -4.67562e-19 8.90829e-16 217.016 - ------------------------- ---- Prestrain Output --- -Bhat_: 1322.59 -318.536 -3.30171e-15 -Beff_: 4.0511 -0.592799 -1.27894e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=333.129 -q2=848.053 -q3=217.016 -q12=45.4665 -q13=4.00457e-16 -q23=7.57851e-16 -q_onetwo=45.466470 -b1=4.051097 -b2=-0.592799 -b3=-0.000000 -mu_gamma=217.016330 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.33129e+02 & 8.48053e+02 & 2.17016e+02 & 4.54665e+01 & 4.00457e-16 & 7.57851e-16 & 4.05110e+00 & -5.92799e-01 & -1.27894e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/4/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/4/BMatrix.txt deleted file mode 100644 index 84873de4c1702c281b222bc2f65c7917afe4d92e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.06213250662411784 -1 2 -0.600853091095135405 -1 3 -1.76581875274302341e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/4/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/4/QMatrix.txt deleted file mode 100644 index 8342c937ddcadcdc2de1e497584dc00ce2ad9c10..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 328.21767735791525 -1 2 45.7178016487789165 -1 3 1.31289429198058749e-15 -2 1 45.7178016487785897 -2 2 830.689816984109711 -2 3 1.85496996723492208e-15 -3 1 8.90803374803666309e-16 -3 2 -4.52927786896424427e-16 -3 3 214.513694726799343 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/4/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/4/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/4/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/4/perforated_wood_lower_log.txt deleted file mode 100644 index b378f820fe0563846e02cea024ff529d0181c56d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/4/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.202204 4.76658e-19 0 -4.76658e-19 0.00999719 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00787285 1.44137e-18 0 -1.44137e-18 0.0416783 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -5.30861e-19 -0.00714429 0 --0.00714429 -4.96051e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -328.218 45.7178 1.31289e-15 -45.7178 830.69 1.85497e-15 -8.90803e-16 -4.52928e-16 214.514 - ------------------------- ---- Prestrain Output --- -Bhat_: 1305.79 -313.411 3.51191e-15 -Beff_: 4.06213 -0.600853 -1.76582e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=328.218 -q2=830.69 -q3=214.514 -q12=45.7178 -q13=1.31289e-15 -q23=1.85497e-15 -q_onetwo=45.717802 -b1=4.062133 -b2=-0.600853 -b3=-0.000000 -mu_gamma=214.513695 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.28218e+02 & 8.30690e+02 & 2.14514e+02 & 4.57178e+01 & 1.31289e-15 & 1.85497e-15 & 4.06213e+00 & -6.00853e-01 & -1.76582e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/5/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/5/BMatrix.txt deleted file mode 100644 index aa29196f4d717bcd6f7c8e2de6fb63da6ecbee1f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.07287843223964341 -1 2 -0.607469647844943061 -1 3 3.47293172159315383e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/5/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/5/QMatrix.txt deleted file mode 100644 index 360769c9a67e969939fa90d943ec10d2a4918adb..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 323.402432382580912 -1 2 45.354332404498507 -1 3 4.66176440982665752e-16 -2 1 45.3543324044984004 -2 2 814.514553930954435 -2 3 3.51400935530866293e-16 -3 1 1.13632858005953408e-15 -3 2 9.79726587672317267e-16 -3 3 210.828881808632161 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/5/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/5/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/5/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/5/perforated_wood_lower_log.txt deleted file mode 100644 index b018fb58c0b3068216c46a8b3b05917ae09bc8a4..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/5/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.20509 3.8885e-19 0 -3.8885e-19 0.0101425 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00762404 2.66808e-19 0 -2.66808e-19 0.0382047 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -3.88905e-19 -0.0100947 0 --0.0100947 2.45295e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -323.402 45.3543 4.66176e-16 -45.3543 814.515 3.51401e-16 -1.13633e-15 9.79727e-16 210.829 - ------------------------- ---- Prestrain Output --- -Bhat_: 1289.63 -310.07 1.13549e-14 -Beff_: 4.07288 -0.60747 3.47293e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=323.402 -q2=814.515 -q3=210.829 -q12=45.3543 -q13=4.66176e-16 -q23=3.51401e-16 -q_onetwo=45.354332 -b1=4.072878 -b2=-0.607470 -b3=0.000000 -mu_gamma=210.828882 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.23402e+02 & 8.14515e+02 & 2.10829e+02 & 4.53543e+01 & 4.66176e-16 & 3.51401e-16 & 4.07288e+00 & -6.07470e-01 & 3.47293e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/6/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/6/BMatrix.txt deleted file mode 100644 index 0f22405dded4516711b87d53c96c285763bc9a9e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.08102798827461033 -1 2 -0.613288405472155684 -1 3 1.63374360884752171e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/6/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/6/QMatrix.txt deleted file mode 100644 index 77c61c4b5097243ef103403d5cf88a762f228102..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 319.901329194990751 -1 2 45.6480214365010895 -1 3 1.90502707331880947e-15 -2 1 45.648021436501061 -2 2 802.995915583982992 -2 3 3.3191519668916529e-15 -3 1 1.67252669369287107e-15 -3 2 1.69958219657759431e-15 -3 3 208.621458107481772 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/6/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/6/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/6/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/6/perforated_wood_lower_log.txt deleted file mode 100644 index 29778657d24abfc007be5a3bf35ed36d6155f74d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_0/6/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.207228 1.95485e-18 0 -1.95485e-18 0.0104677 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00718107 2.31491e-18 0 -2.31491e-18 0.035673 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -6.92822e-19 -0.0118549 0 --0.0118549 9.82379e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -319.901 45.648 1.90503e-15 -45.648 802.996 3.31915e-15 -1.67253e-15 1.69958e-15 208.621 - ------------------------- ---- Prestrain Output --- -Bhat_: 1277.53 -306.177 9.19163e-15 -Beff_: 4.08103 -0.613288 1.63374e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=319.901 -q2=802.996 -q3=208.621 -q12=45.648 -q13=1.90503e-15 -q23=3.31915e-15 -q_onetwo=45.648021 -b1=4.081028 -b2=-0.613288 -b3=0.000000 -mu_gamma=208.621458 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.19901e+02 & 8.02996e+02 & 2.08621e+02 & 4.56480e+01 & 1.90503e-15 & 3.31915e-15 & 4.08103e+00 & -6.13288e-01 & 1.63374e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/0/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/0/BMatrix.txt deleted file mode 100644 index 910cfcd016877f3d866c6eaf21b888ed5a6882e2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.15596094148045392 -1 2 -0.776402193757820269 -1 3 1.7703424517171586e-29 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/0/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/0/QMatrix.txt deleted file mode 100644 index 2c5d3a2b37ab326494910bb78231fb135d60cb0f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 357.254344081100442 -1 2 42.7769003929809344 -1 3 -3.54062960976149439e-29 -2 1 42.7769003929807212 -2 2 790.334706977815472 -2 3 -2.1239155426702437e-30 -3 1 2.04724547529040308e-28 -3 2 5.65787579245127431e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/0/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/0/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/0/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/0/perforated_wood_lower_log.txt deleted file mode 100644 index 2eb85621c635924c36e85dafcc2c2078d3c97e56..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/0/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.214567 9.80362e-30 0 -9.80362e-30 0.0106599 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0104814 2.4435e-30 0 -2.4435e-30 0.0717071 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.07707e-31 8.75336e-20 0 -8.75336e-20 1.54743e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -357.254 42.7769 -3.54063e-29 -42.7769 790.335 -2.12392e-30 -2.04725e-28 5.65788e-29 224.213 - ------------------------- ---- Prestrain Output --- -Bhat_: 1451.52 -435.838 4.77623e-27 -Beff_: 4.15596 -0.776402 1.77034e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=357.254 -q2=790.335 -q3=224.213 -q12=42.7769 -q13=-3.54063e-29 -q23=-2.12392e-30 -q_onetwo=42.776900 -b1=4.155961 -b2=-0.776402 -b3=0.000000 -mu_gamma=224.212842 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.57254e+02 & 7.90335e+02 & 2.24213e+02 & 4.27769e+01 & -3.54063e-29 & -2.12392e-30 & 4.15596e+00 & -7.76402e-01 & 1.77034e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/1/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/1/BMatrix.txt deleted file mode 100644 index 1f077dfe3da31925f5b56ce3aebaae18fd0483e8..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.16747086366115305 -1 2 -0.787908264368778033 -1 3 -4.37460529529542092e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/1/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/1/QMatrix.txt deleted file mode 100644 index 78269e50188f1221e288e20324fee638d01e60e7..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 350.319317619259664 -1 2 42.2688647672164777 -1 3 1.54207430245328903e-16 -2 1 42.2688647672159163 -2 2 770.507424566568261 -2 3 3.44517945801477848e-16 -3 1 1.12816106486563449e-16 -3 2 4.47586370661259207e-16 -3 3 220.28914689225067 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/1/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/1/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/1/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/1/perforated_wood_lower_log.txt deleted file mode 100644 index 5bb7c8e9661a03a80296d89d3b4565c3a3e952e3..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/1/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.217968 2.0765e-19 0 -2.0765e-19 0.0108203 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0102482 1.05418e-19 0 -1.05418e-19 0.067367 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -4.40253e-20 -0.00297989 0 --0.00297989 7.28066e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -350.319 42.2689 1.54207e-16 -42.2689 770.507 3.44518e-16 -1.12816e-16 4.47586e-16 220.289 - ------------------------- ---- Prestrain Output --- -Bhat_: 1426.64 -430.935 -8.46177e-16 -Beff_: 4.16747 -0.787908 -4.37461e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=350.319 -q2=770.507 -q3=220.289 -q12=42.2689 -q13=1.54207e-16 -q23=3.44518e-16 -q_onetwo=42.268865 -b1=4.167471 -b2=-0.787908 -b3=-0.000000 -mu_gamma=220.289147 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.50319e+02 & 7.70507e+02 & 2.20289e+02 & 4.22689e+01 & 1.54207e-16 & 3.44518e-16 & 4.16747e+00 & -7.87908e-01 & -4.37461e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/2/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/2/BMatrix.txt deleted file mode 100644 index ce6bf5648110b148f26fe564babe720e1d170967..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.17727072832930535 -1 2 -0.797892159648131316 -1 3 4.1301237300981938e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/2/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/2/QMatrix.txt deleted file mode 100644 index 7498ece7be4874f0a31e7d97c2b6bbdcf1fa5197..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 344.883201764133844 -1 2 42.3473865811605918 -1 3 2.06460045728499436e-16 -2 1 42.3473865811604497 -2 2 754.881771804827849 -2 3 2.80793539597168698e-16 -3 1 2.00514245015688672e-16 -3 2 7.23904744030507818e-16 -3 3 217.121115659475748 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/2/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/2/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/2/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/2/perforated_wood_lower_log.txt deleted file mode 100644 index 0f706e09e6a69ed7db9688339b3bd2e10874fe6b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/2/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.22065 2.00996e-19 0 -2.00996e-19 0.0111369 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00986091 4.6626e-20 0 -4.6626e-20 0.0637154 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -6.32571e-20 -0.00548097 0 --0.00548097 1.16374e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -344.883 42.3474 2.0646e-16 -42.3474 754.882 2.80794e-16 -2.00514e-16 7.23905e-16 217.121 - ------------------------- ---- Prestrain Output --- -Bhat_: 1406.88 -425.418 1.15674e-15 -Beff_: 4.17727 -0.797892 4.13012e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=344.883 -q2=754.882 -q3=217.121 -q12=42.3474 -q13=2.0646e-16 -q23=2.80794e-16 -q_onetwo=42.347387 -b1=4.177271 -b2=-0.797892 -b3=0.000000 -mu_gamma=217.121116 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.44883e+02 & 7.54882e+02 & 2.17121e+02 & 4.23474e+01 & 2.06460e-16 & 2.80794e-16 & 4.17727e+00 & -7.97892e-01 & 4.13012e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/3/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/3/BMatrix.txt deleted file mode 100644 index c307e672fcaf5cf11b5a4fa8a94480ee3b4f434e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.19322740638802749 -1 2 -0.815291083271237005 -1 3 -4.62434020017104174e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/3/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/3/QMatrix.txt deleted file mode 100644 index f3ff2b544a9234d957f57f1e506670bbe881c0ba..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 336.557374084184175 -1 2 43.0074654887870551 -1 3 1.30792983187673004e-15 -2 1 43.0074654887870551 -2 2 729.67799510550708 -2 3 9.50445505718683359e-16 -3 1 5.09702777459434674e-16 -3 2 8.45123060011809303e-16 -3 3 212.123863225977914 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/3/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/3/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/3/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/3/perforated_wood_lower_log.txt deleted file mode 100644 index 975958d8017dc35894af12e6a568ecf4c511125a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/3/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.22479 1.16266e-18 0 -1.16266e-18 0.011866 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00899841 3.81537e-19 0 -3.81537e-19 0.0575174 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.46908e-19 -0.00954319 0 --0.00954319 7.33649e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -336.557 43.0075 1.30793e-15 -43.0075 729.678 9.50446e-16 -5.09703e-16 8.45123e-16 212.124 - ------------------------- ---- Prestrain Output --- -Bhat_: 1376.2 -414.56 4.67345e-16 -Beff_: 4.19323 -0.815291 -4.62434e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=336.557 -q2=729.678 -q3=212.124 -q12=43.0075 -q13=1.30793e-15 -q23=9.50446e-16 -q_onetwo=43.007465 -b1=4.193227 -b2=-0.815291 -b3=-0.000000 -mu_gamma=212.123863 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.36557e+02 & 7.29678e+02 & 2.12124e+02 & 4.30075e+01 & 1.30793e-15 & 9.50446e-16 & 4.19323e+00 & -8.15291e-01 & -4.62434e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/4/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/4/BMatrix.txt deleted file mode 100644 index 82cb18514bcf124a51e9a52f0850ee13c852c337..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.20409317115905257 -1 2 -0.824066795212823444 -1 3 1.30882766567444831e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/4/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/4/QMatrix.txt deleted file mode 100644 index 293777988da5f8cb8b7df8236a5626eeaae97948..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 330.485351953942939 -1 2 42.6372030389351551 -1 3 1.89715305504113349e-15 -2 1 42.6372030389351266 -2 2 715.848291505663724 -2 3 1.53457806087008847e-16 -3 1 1.31443451551605103e-15 -3 2 5.4174453831151736e-16 -3 3 208.781630065269923 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/4/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/4/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/4/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/4/perforated_wood_lower_log.txt deleted file mode 100644 index b351765efecc63341baaa668ffdb1599fd06871d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/4/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.227788 1.98021e-18 0 -1.98021e-18 0.0120262 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00881008 -4.43055e-20 0 --4.43055e-20 0.0540886 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -5.63743e-19 -0.0123176 0 --0.0123176 6.74047e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -330.485 42.6372 1.89715e-15 -42.6372 715.848 1.53458e-16 -1.31443e-15 5.41745e-16 208.782 - ------------------------- ---- Prestrain Output --- -Bhat_: 1354.26 -410.656 7.81216e-15 -Beff_: 4.20409 -0.824067 1.30883e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=330.485 -q2=715.848 -q3=208.782 -q12=42.6372 -q13=1.89715e-15 -q23=1.53458e-16 -q_onetwo=42.637203 -b1=4.204093 -b2=-0.824067 -b3=0.000000 -mu_gamma=208.781630 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.30485e+02 & 7.15848e+02 & 2.08782e+02 & 4.26372e+01 & 1.89715e-15 & 1.53458e-16 & 4.20409e+00 & -8.24067e-01 & 1.30883e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/5/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/5/BMatrix.txt deleted file mode 100644 index c703e944fc66951d224cae1ed5c1f78242b68042..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.21657987985527871 -1 2 -0.833795656851315847 -1 3 -3.57357798101385084e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/5/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/5/QMatrix.txt deleted file mode 100644 index 7d1c29f0da1efcbd29c96ca40777c83afbe0909f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 323.591225430740565 -1 2 41.9617675119484517 -1 3 1.31211925683384981e-15 -2 1 41.9617675119482101 -2 2 700.20700851681886 -2 3 3.26024675464074709e-15 -3 1 5.88216312748354904e-16 -3 2 2.73355584468651077e-15 -3 3 204.353098695254914 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/5/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/5/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/5/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/5/perforated_wood_lower_log.txt deleted file mode 100644 index b7376cfa2696e10b6212ad94a6715502c911d267..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/5/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.231186 1.44451e-18 0 -1.44451e-18 0.0120991 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00869934 2.07143e-18 0 -2.07143e-18 0.0500877 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.20169e-19 -0.0160681 0 --0.0160681 1.21238e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -323.591 41.9618 1.31212e-15 -41.9618 700.207 3.26025e-15 -5.88216e-16 2.73356e-15 204.353 - ------------------------- ---- Prestrain Output --- -Bhat_: 1329.46 -406.894 -7.10168e-15 -Beff_: 4.21658 -0.833796 -3.57358e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=323.591 -q2=700.207 -q3=204.353 -q12=41.9618 -q13=1.31212e-15 -q23=3.26025e-15 -q_onetwo=41.961768 -b1=4.216580 -b2=-0.833796 -b3=-0.000000 -mu_gamma=204.353099 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.23591e+02 & 7.00207e+02 & 2.04353e+02 & 4.19618e+01 & 1.31212e-15 & 3.26025e-15 & 4.21658e+00 & -8.33796e-01 & -3.57358e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/6/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/6/BMatrix.txt deleted file mode 100644 index 5cd411ab74f9a2783a0ef185766da24f18b22107..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.23112307756473705 -1 2 -0.845475233201549936 -1 3 -3.48722926218938752e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/6/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/6/QMatrix.txt deleted file mode 100644 index a26c6a02e67067ac86451fc637eee37a78c9f946..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 315.851642515818298 -1 2 41.4100179913812454 -1 3 2.92177408298382318e-15 -2 1 41.4100179913806414 -2 2 682.59687770089954 -2 3 2.55132761163394395e-15 -3 1 9.38393073912201919e-16 -3 2 3.54651964449458545e-15 -3 3 199.508657961051227 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/6/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/6/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/6/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/6/perforated_wood_lower_log.txt deleted file mode 100644 index c1e929931c862ca032d7ae6ad30369f90ab30650..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_1/6/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.235023 3.00607e-18 0 -3.00607e-18 0.0122714 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00848705 2.48771e-18 0 -2.48771e-18 0.0454293 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -5.03289e-19 -0.0202436 0 --0.0202436 7.54728e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -315.852 41.41 2.92177e-15 -41.41 682.597 2.55133e-15 -9.38393e-16 3.54652e-15 199.509 - ------------------------- ---- Prestrain Output --- -Bhat_: 1301.4 -401.908 -5.98536e-15 -Beff_: 4.23112 -0.845475 -3.48723e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=315.852 -q2=682.597 -q3=199.509 -q12=41.41 -q13=2.92177e-15 -q23=2.55133e-15 -q_onetwo=41.410018 -b1=4.231123 -b2=-0.845475 -b3=-0.000000 -mu_gamma=199.508658 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.15852e+02 & 6.82597e+02 & 1.99509e+02 & 4.14100e+01 & 2.92177e-15 & 2.55133e-15 & 4.23112e+00 & -8.45475e-01 & -3.48723e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/0/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/0/BMatrix.txt deleted file mode 100644 index be8657c5a7c7ec0fdcf0db4b7caa753e557a9c73..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.03873445069710524 -1 2 -1.05995320800370529 -1 3 1.36076669459033724e-29 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/0/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/0/QMatrix.txt deleted file mode 100644 index 655f1ff64c6cb9651d8618f4c60a9a720c897fe2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 362.077597710087787 -1 2 38.6653780788820356 -1 3 7.65965450042136346e-29 -2 1 38.6653780788812682 -2 2 673.576799924798138 -2 3 2.35949529346769039e-29 -3 1 1.91929433331978192e-28 -3 2 5.49556981433154364e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/0/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/0/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/0/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/0/perforated_wood_lower_log.txt deleted file mode 100644 index 23e4ac9988a480ac380211e83f971bdf72e55340..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/0/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.228051 8.83488e-30 0 -8.83488e-30 0.0120825 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0119521 2.30937e-30 0 -2.30937e-30 0.0967075 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -7.67493e-32 8.75336e-20 0 -8.75336e-20 1.40158e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -362.078 38.6654 7.65965e-29 -38.6654 673.577 2.3595e-29 -1.91929e-28 5.49557e-29 224.213 - ------------------------- ---- Prestrain Output --- -Bhat_: 1421.35 -557.801 3.76792e-27 -Beff_: 4.03873 -1.05995 1.36077e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=362.078 -q2=673.577 -q3=224.213 -q12=38.6654 -q13=7.65965e-29 -q23=2.3595e-29 -q_onetwo=38.665378 -b1=4.038734 -b2=-1.059953 -b3=0.000000 -mu_gamma=224.212842 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.62078e+02 & 6.73577e+02 & 2.24213e+02 & 3.86654e+01 & 7.65965e-29 & 2.35950e-29 & 4.03873e+00 & -1.05995e+00 & 1.36077e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/1/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/1/BMatrix.txt deleted file mode 100644 index cfc89d36215f35995f2970f5813244a911a80feb..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.04999007563965829 -1 2 -1.08093307893877499 -1 3 -7.6171819283678007e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/1/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/1/QMatrix.txt deleted file mode 100644 index 0fa1530f2c2e9db4d492d2279f067adc61f789ac..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 352.070772869657958 -1 2 38.3755898253089001 -1 3 4.91537030939933131e-16 -2 1 38.3755898253085377 -2 2 651.985363682309867 -2 3 5.01316026315984029e-16 -3 1 3.56474133489327518e-16 -3 2 -1.48215042720419151e-16 -3 3 219.115897677100861 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/1/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/1/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/1/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/1/perforated_wood_lower_log.txt deleted file mode 100644 index 127f05d56723ca378a9716eeea165d9cf2449b55..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/1/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.23203 5.00488e-19 0 -5.00488e-19 0.0124378 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.011597 2.63189e-19 0 -2.63189e-19 0.0911294 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.27388e-19 -0.00402529 0 --0.00402529 -1.66064e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -352.071 38.3756 4.91537e-16 -38.3756 651.985 5.01316e-16 -3.56474e-16 -1.48215e-16 219.116 - ------------------------- ---- Prestrain Output --- -Bhat_: 1384.4 -549.332 -6.51184e-17 -Beff_: 4.04999 -1.08093 -7.61718e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=352.071 -q2=651.985 -q3=219.116 -q12=38.3756 -q13=4.91537e-16 -q23=5.01316e-16 -q_onetwo=38.375590 -b1=4.049990 -b2=-1.080933 -b3=-0.000000 -mu_gamma=219.115898 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.52071e+02 & 6.51985e+02 & 2.19116e+02 & 3.83756e+01 & 4.91537e-16 & 5.01316e-16 & 4.04999e+00 & -1.08093e+00 & -7.61718e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/2/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/2/BMatrix.txt deleted file mode 100644 index 6fb1e0b1cc53d661cbf3a14b257927d272ee872a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.06569482979447194 -1 2 -1.11069937965733834 -1 3 -8.81203681641755608e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/2/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/2/QMatrix.txt deleted file mode 100644 index dbfd83b76ab8a0bafac017305d42ab7f89cdeb07..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 340.447245262669469 -1 2 38.9900921055484488 -1 3 9.98984305244617413e-16 -2 1 38.9900921055476744 -2 2 623.427813598986177 -2 3 1.46048681842433394e-15 -3 1 7.89492093323184395e-16 -3 2 1.09986105882315787e-15 -3 3 212.168284823904514 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/2/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/2/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/2/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/2/perforated_wood_lower_log.txt deleted file mode 100644 index 79fdc6d74e8feb4767e342ce5ee6b191748ab4ac..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/2/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.236673 1.10305e-18 0 -1.10305e-18 0.0133219 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0107483 8.82359e-19 0 -8.82359e-19 0.0829747 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.90047e-19 -0.00974864 0 --0.00974864 2.92401e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -340.447 38.9901 9.98984e-16 -38.9901 623.428 1.46049e-15 -7.89492e-16 1.09986e-15 212.168 - ------------------------- ---- Prestrain Output --- -Bhat_: 1340.85 -533.919 1.18584e-16 -Beff_: 4.06569 -1.1107 -8.81204e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=340.447 -q2=623.428 -q3=212.168 -q12=38.9901 -q13=9.98984e-16 -q23=1.46049e-15 -q_onetwo=38.990092 -b1=4.065695 -b2=-1.110699 -b3=-0.000000 -mu_gamma=212.168285 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.40447e+02 & 6.23428e+02 & 2.12168e+02 & 3.89901e+01 & 9.98984e-16 & 1.46049e-15 & 4.06569e+00 & -1.11070e+00 & -8.81204e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/3/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/3/BMatrix.txt deleted file mode 100644 index 05556a474c9c2ca562a447b76a86fadece581f95..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.07522521316911224 -1 2 -1.12490731268905186 -1 3 -5.60557530105352452e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/3/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/3/QMatrix.txt deleted file mode 100644 index 00529def5dc54a40e97fb61edae29aba70975998..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 331.879414845983206 -1 2 38.0845052426550126 -1 3 2.85464841597981439e-15 -2 1 38.0845052426548492 -2 2 608.896465572778993 -2 3 1.46121653730839351e-17 -3 1 2.45055229025083719e-15 -3 2 1.70718114090564945e-15 -3 3 207.252566029754433 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/3/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/3/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/3/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/3/perforated_wood_lower_log.txt deleted file mode 100644 index e686481643636c62aef1014f046c31e6f3fde1c2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/3/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.240067 2.29917e-18 0 -2.29917e-18 0.0132941 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0107149 3.0661e-20 0 -3.0661e-20 0.0788311 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -6.45753e-19 -0.0138948 0 --0.0138948 7.62571e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -331.879 38.0845 2.85465e-15 -38.0845 608.896 1.46122e-17 -2.45055e-15 1.70718e-15 207.253 - ------------------------- ---- Prestrain Output --- -Bhat_: 1309.64 -529.749 6.90436e-15 -Beff_: 4.07523 -1.12491 -5.60558e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=331.879 -q2=608.896 -q3=207.253 -q12=38.0845 -q13=2.85465e-15 -q23=1.46122e-17 -q_onetwo=38.084505 -b1=4.075225 -b2=-1.124907 -b3=-0.000000 -mu_gamma=207.252566 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.31879e+02 & 6.08896e+02 & 2.07253e+02 & 3.80845e+01 & 2.85465e-15 & 1.46122e-17 & 4.07523e+00 & -1.12491e+00 & -5.60558e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/4/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/4/BMatrix.txt deleted file mode 100644 index 74b8a5d704c867f74a0c6ffa8c27e008cefe27fc..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.08391953036553446 -1 2 -1.13712862436162232 -1 3 -3.22492018316077058e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/4/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/4/QMatrix.txt deleted file mode 100644 index 804f67f00929efcc31e93a2d5c9f86929a9dc453..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 324.258487924717656 -1 2 36.9759022876518699 -1 3 8.71286888665979975e-16 -2 1 36.9759022876519978 -2 2 596.282689315279072 -2 3 1.06255624551842079e-16 -3 1 1.09839336248380298e-15 -3 2 2.4915950599518075e-15 -3 3 201.223021216891823 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/4/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/4/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/4/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/4/perforated_wood_lower_log.txt deleted file mode 100644 index 74de42e764c7a4da4bfb9e3fe4058fce5827469b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/4/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.243068 7.49364e-19 0 -7.49364e-19 0.0131093 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0107975 1.22099e-20 0 -1.22099e-20 0.0751146 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -3.75858e-19 -0.019107 0 --0.019107 5.97949e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -324.258 36.9759 8.71287e-16 -36.9759 596.283 1.06256e-16 -1.09839e-15 2.4916e-15 201.223 - ------------------------- ---- Prestrain Output --- -Bhat_: 1282.2 -527.044 1.00356e-15 -Beff_: 4.08392 -1.13713 -3.22492e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=324.258 -q2=596.283 -q3=201.223 -q12=36.9759 -q13=8.71287e-16 -q23=1.06256e-16 -q_onetwo=36.975902 -b1=4.083920 -b2=-1.137129 -b3=-0.000000 -mu_gamma=201.223021 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.24258e+02 & 5.96283e+02 & 2.01223e+02 & 3.69759e+01 & 8.71287e-16 & 1.06256e-16 & 4.08392e+00 & -1.13713e+00 & -3.22492e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/5/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/5/BMatrix.txt deleted file mode 100644 index 453b31666ce628f1609bf2da1c2650dc0455ccd3..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.0995890348852857 -1 2 -1.16321704880237808 -1 3 2.3980641859732622e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/5/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/5/QMatrix.txt deleted file mode 100644 index 314647c63944302d55350e16a22ff88d26f6fb0e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 312.854491459566361 -1 2 36.8999891191427025 -1 3 4.81830287474283026e-15 -2 1 36.8999891191426741 -2 2 573.051681988519476 -2 3 6.92613250552389509e-15 -3 1 4.46786713325536024e-15 -3 2 5.5546311568898353e-15 -3 3 194.421949041239856 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/5/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/5/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/5/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/5/perforated_wood_lower_log.txt deleted file mode 100644 index 7af06d4743daa329a98e661b63416925bed882e0..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/5/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.247636 4.9213e-18 0 -4.9213e-18 0.0136516 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0102666 5.91604e-18 0 -5.91604e-18 0.067768 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.34007e-18 -0.0250186 0 --0.0250186 1.54394e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -312.854 36.9 4.8183e-15 -36.9 573.052 6.92613e-15 -4.46787e-15 5.55463e-15 194.422 - ------------------------- ---- Prestrain Output --- -Bhat_: 1239.65 -515.309 1.65175e-14 -Beff_: 4.09959 -1.16322 2.39806e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=312.854 -q2=573.052 -q3=194.422 -q12=36.9 -q13=4.8183e-15 -q23=6.92613e-15 -q_onetwo=36.899989 -b1=4.099589 -b2=-1.163217 -b3=0.000000 -mu_gamma=194.421949 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.12854e+02 & 5.73052e+02 & 1.94422e+02 & 3.69000e+01 & 4.81830e-15 & 6.92613e-15 & 4.09959e+00 & -1.16322e+00 & 2.39806e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/6/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/6/BMatrix.txt deleted file mode 100644 index 59ae65e6430d2a22d81b75cd0f1d8f169d2677bd..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.10987377483157346 -1 2 -1.17735571055468613 -1 3 1.4162292737214143e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/6/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/6/QMatrix.txt deleted file mode 100644 index efbf744dd2348b835990b72146c17051224d0154..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 304.292427642370228 -1 2 35.8259334588520275 -1 3 6.14487759585452195e-15 -2 1 35.8259334588520062 -2 2 559.888769051529607 -2 3 2.29185685593448138e-15 -3 1 5.43392303267546672e-15 -3 2 -3.1505559879713152e-16 -3 3 188.472903784859085 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/6/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/6/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/6/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/6/perforated_wood_lower_log.txt deleted file mode 100644 index 8ccb9c1c677f3773f51e7fea047412a72976c044..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_2/6/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.251043 5.27593e-18 0 -5.27593e-18 0.0135199 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0103203 1.73829e-18 0 -1.73829e-18 0.0636326 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -2.05042e-18 -0.0303056 0 --0.0303056 -5.04844e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -304.292 35.8259 6.14488e-15 -35.8259 559.889 2.29186e-15 -5.43392e-15 -3.15056e-16 188.473 - ------------------------- ---- Prestrain Output --- -Bhat_: 1208.42 -511.948 2.53729e-14 -Beff_: 4.10987 -1.17736 1.41623e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=304.292 -q2=559.889 -q3=188.473 -q12=35.8259 -q13=6.14488e-15 -q23=2.29186e-15 -q_onetwo=35.825933 -b1=4.109874 -b2=-1.177356 -b3=0.000000 -mu_gamma=188.472904 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.04292e+02 & 5.59889e+02 & 1.88473e+02 & 3.58259e+01 & 6.14488e-15 & 2.29186e-15 & 4.10987e+00 & -1.17736e+00 & 1.41623e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/0/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/0/BMatrix.txt deleted file mode 100644 index 29f046f95765f89baf0b3926693da51f9fa1cd71..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.38385954774598163 -1 2 -1.4580752040276912 -1 3 6.56599696043288159e-30 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/0/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/0/QMatrix.txt deleted file mode 100644 index e37cbac73f60b005f3262687867e554af818225a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 362.884400627699449 -1 2 33.598217280456808 -1 3 2.66764408456964812e-29 -2 1 33.5982172804586838 -2 2 535.044060612796784 -2 3 -9.76610185849601493e-30 -3 1 1.41209476925862098e-28 -3 2 5.2699761983748409e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/0/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/0/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/0/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/0/perforated_wood_lower_log.txt deleted file mode 100644 index a196c459b6f8346156aaddc6c15a94da6e9864e4..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/0/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.226315 4.74252e-30 0 -4.74252e-30 0.0133775 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0133074 2.25105e-30 0 -2.25105e-30 0.133677 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -3.78604e-32 8.75336e-20 0 -8.75336e-20 8.16086e-33 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -362.884 33.5982 2.66764e-29 -33.5982 535.044 -9.7661e-30 -1.41209e-28 5.26998e-29 224.213 - ------------------------- ---- Prestrain Output --- -Bhat_: 1178.96 -666.443 1.87317e-27 -Beff_: 3.38386 -1.45808 6.566e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=362.884 -q2=535.044 -q3=224.213 -q12=33.5982 -q13=2.66764e-29 -q23=-9.7661e-30 -q_onetwo=33.598217 -b1=3.383860 -b2=-1.458075 -b3=0.000000 -mu_gamma=224.212842 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.62884e+02 & 5.35044e+02 & 2.24213e+02 & 3.35982e+01 & 2.66764e-29 & -9.76610e-30 & 3.38386e+00 & -1.45808e+00 & 6.56600e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/1/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/1/BMatrix.txt deleted file mode 100644 index 702bf5d7f9b49384ac40aba5831c0ca1e50d0438..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.38622447818192507 -1 2 -1.50729967730868508 -1 3 8.64824522312232702e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/1/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/1/QMatrix.txt deleted file mode 100644 index 1e244e88b94b95db23b56f03b18f5ab22e77252f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 344.998044908976908 -1 2 33.6599693231505128 -1 3 7.8376530356679807e-16 -2 1 33.6599693231504205 -2 2 504.509099129817287 -2 3 2.28891489875043038e-16 -3 1 1.27892340035624334e-15 -3 2 -5.5903528656161541e-16 -3 3 214.696384378512647 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/1/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/1/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/1/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/1/perforated_wood_lower_log.txt deleted file mode 100644 index d250ff21f56c27147b6456d6272a5a6b3a74f52e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/1/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.231826 6.04268e-19 0 -6.04268e-19 0.014246 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0125956 9.4124e-20 0 -9.4124e-20 0.122725 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -4.01162e-19 -0.00765556 0 --0.00765556 -5.05207e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -344.998 33.66 7.83765e-16 -33.66 504.509 2.28891e-16 -1.27892e-15 -5.59035e-16 214.696 - ------------------------- ---- Prestrain Output --- -Bhat_: 1117.51 -646.466 7.0301e-15 -Beff_: 3.38622 -1.5073 8.64825e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=344.998 -q2=504.509 -q3=214.696 -q12=33.66 -q13=7.83765e-16 -q23=2.28891e-16 -q_onetwo=33.659969 -b1=3.386224 -b2=-1.507300 -b3=0.000000 -mu_gamma=214.696384 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.44998e+02 & 5.04509e+02 & 2.14696e+02 & 3.36600e+01 & 7.83765e-16 & 2.28891e-16 & 3.38622e+00 & -1.50730e+00 & 8.64825e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/2/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/2/BMatrix.txt deleted file mode 100644 index 4cf7f767ae212797dcc277633bac32733accbbb7..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.38751867781356752 -1 2 -1.54825517746634622 -1 3 2.63368964115580119e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/2/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/2/QMatrix.txt deleted file mode 100644 index 3e29b6f10e2b7a84d37f87e8f65aa1427d3829de..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 329.166779877348517 -1 2 33.2427905220994759 -1 3 -7.6088884948559074e-16 -2 1 33.2427905220995967 -2 2 480.185910971666715 -2 3 3.65489422784310257e-16 -3 1 6.93205834802288617e-16 -3 2 3.50498781914569419e-15 -3 3 204.431808589058903 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/2/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/2/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/2/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/2/perforated_wood_lower_log.txt deleted file mode 100644 index 46237fad5e39f22f383021b8551fe6c8e86677f6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/2/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.236688 -2.76952e-19 0 --2.76952e-19 0.0147455 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0121199 1.42316e-19 0 -1.42316e-19 0.113357 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --5.67924e-20 -0.0161343 0 --0.0161343 1.94741e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -329.167 33.2428 -7.60889e-16 -33.2428 480.186 3.65489e-16 -6.93206e-16 3.50499e-15 204.432 - ------------------------- ---- Prestrain Output --- -Bhat_: 1063.59 -630.84 -2.53996e-15 -Beff_: 3.38752 -1.54826 2.63369e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=329.167 -q2=480.186 -q3=204.432 -q12=33.2428 -q13=-7.60889e-16 -q23=3.65489e-16 -q_onetwo=33.242791 -b1=3.387519 -b2=-1.548255 -b3=0.000000 -mu_gamma=204.431809 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.29167e+02 & 4.80186e+02 & 2.04432e+02 & 3.32428e+01 & -7.60889e-16 & 3.65489e-16 & 3.38752e+00 & -1.54826e+00 & 2.63369e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/3/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/3/BMatrix.txt deleted file mode 100644 index fae9f46859f20e7038e99d7d952798a98d57a20d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.38677315818319613 -1 2 -1.58548811490238983 -1 3 2.66345360256195294e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/3/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/3/QMatrix.txt deleted file mode 100644 index ad1aa6d963e2ab8a6e1b12bad2efddd7ef872d4d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 313.716635430162569 -1 2 32.0398639550847264 -1 3 4.85905659445055003e-15 -2 1 32.0398639550851598 -2 2 459.039654096284096 -2 3 5.41997049421005708e-15 -3 1 3.32577407047328702e-15 -3 2 4.10582915797287444e-15 -3 3 192.997144512449893 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/3/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/3/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/3/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/3/perforated_wood_lower_log.txt deleted file mode 100644 index 420bd6058efc82bddb052a3686fc26fb7ddd7da1..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/3/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.241417 4.21599e-18 0 -4.21599e-18 0.0147446 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0119257 4.39247e-18 0 -4.39247e-18 0.104877 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -9.21444e-19 -0.0257544 0 --0.0257544 1.64891e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -313.717 32.0399 4.85906e-15 -32.0399 459.04 5.41997e-15 -3.32577e-15 4.10583e-15 192.997 - ------------------------- ---- Prestrain Output --- -Bhat_: 1011.69 -619.29 9.89429e-15 -Beff_: 3.38677 -1.58549 2.66345e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=313.717 -q2=459.04 -q3=192.997 -q12=32.0399 -q13=4.85906e-15 -q23=5.41997e-15 -q_onetwo=32.039864 -b1=3.386773 -b2=-1.585488 -b3=0.000000 -mu_gamma=192.997145 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.13717e+02 & 4.59040e+02 & 1.92997e+02 & 3.20399e+01 & 4.85906e-15 & 5.41997e-15 & 3.38677e+00 & -1.58549e+00 & 2.66345e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/4/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/4/BMatrix.txt deleted file mode 100644 index 462213a66879654daa9d18e0de1b77e3ebd91838..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.38329165935905918 -1 2 -1.62307733423587353 -1 3 -4.75481677545238855e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/4/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/4/QMatrix.txt deleted file mode 100644 index afea9392560251a252f8abbc29c9bc99a50d491e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 296.999292925999669 -1 2 29.9252990199986542 -1 3 3.96837307480892021e-15 -2 1 29.9252990199986577 -2 2 438.524434249791966 -2 3 1.97615793561391022e-15 -3 1 3.68911181781333454e-15 -3 2 6.03818829043368567e-15 -3 3 179.344860199959697 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/4/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/4/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/4/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/4/perforated_wood_lower_log.txt deleted file mode 100644 index 6802dc4900633123e43132ae6be5fd3d0288fe7c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/4/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.246518 2.90359e-18 0 -2.90359e-18 0.0142323 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0119901 1.44253e-18 0 -1.44253e-18 0.0963391 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -8.95888e-19 -0.0373961 0 --0.0373961 2.63468e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -296.999 29.9253 3.96837e-15 -29.9253 438.524 1.97616e-15 -3.68911e-15 6.03819e-15 179.345 - ------------------------- ---- Prestrain Output --- -Bhat_: 956.264 -610.513 1.82814e-15 -Beff_: 3.38329 -1.62308 -4.75482e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=296.999 -q2=438.524 -q3=179.345 -q12=29.9253 -q13=3.96837e-15 -q23=1.97616e-15 -q_onetwo=29.925299 -b1=3.383292 -b2=-1.623077 -b3=-0.000000 -mu_gamma=179.344860 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 2.96999e+02 & 4.38524e+02 & 1.79345e+02 & 2.99253e+01 & 3.96837e-15 & 1.97616e-15 & 3.38329e+00 & -1.62308e+00 & -4.75482e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/5/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/5/BMatrix.txt deleted file mode 100644 index a94193556c8c9bd64f1f7ecddda8edbdf108d0f0..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.38122519218866069 -1 2 -1.6616122530121884 -1 3 1.26485126661345282e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/5/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/5/QMatrix.txt deleted file mode 100644 index 7ba3810a534d1e9aa8f805b9a2f4230f7fba627d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 283.375878161345554 -1 2 28.7826308829220778 -1 3 8.55205714052472907e-15 -2 1 28.7826308829218718 -2 2 418.964184128026147 -2 3 5.2669287930583869e-15 -3 1 9.6672920590987893e-15 -3 2 1.07166930359134036e-14 -3 3 168.2955375686536 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/5/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/5/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/5/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/5/perforated_wood_lower_log.txt deleted file mode 100644 index 049d514fc97e59a346cb64862b6650a1005b36e3..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/5/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.250708 7.1493e-18 0 -7.1493e-18 0.0141849 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0117984 4.04093e-18 0 -4.04093e-18 0.0877191 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -2.55168e-18 -0.0468698 0 --0.0468698 5.25253e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -283.376 28.7826 8.55206e-15 -28.7826 418.964 5.26693e-15 -9.66729e-15 1.07167e-14 168.296 - ------------------------- ---- Prestrain Output --- -Bhat_: 910.332 -598.835 3.61672e-14 -Beff_: 3.38123 -1.66161 1.26485e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=283.376 -q2=418.964 -q3=168.296 -q12=28.7826 -q13=8.55206e-15 -q23=5.26693e-15 -q_onetwo=28.782631 -b1=3.381225 -b2=-1.661612 -b3=0.000000 -mu_gamma=168.295538 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 2.83376e+02 & 4.18964e+02 & 1.68296e+02 & 2.87826e+01 & 8.55206e-15 & 5.26693e-15 & 3.38123e+00 & -1.66161e+00 & 1.26485e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/6/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/6/BMatrix.txt deleted file mode 100644 index 1177db1a0425decde8da32e63cee783fda9b322b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.37520090948035811 -1 2 -1.68941079783955828 -1 3 5.86037437913984807e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/6/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/6/QMatrix.txt deleted file mode 100644 index 24a3ba01b79789377971e9ec164e9cef359d1338..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 269.780072688275425 -1 2 26.4907150971832621 -1 3 1.19321997147834279e-14 -2 1 26.490715097183049 -2 2 405.237829781547759 -2 3 2.43658281112648246e-15 -3 1 9.93233967972297419e-15 -3 2 2.34726509266264781e-15 -3 3 154.36202894496958 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/6/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/6/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/6/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/6/perforated_wood_lower_log.txt deleted file mode 100644 index 89342e523f4df5fcfb9a23927051579bdf31b74c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_3/6/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.254852 1.03996e-17 0 -1.03996e-17 0.0133238 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0120823 1.82025e-18 0 -1.82025e-18 0.081642 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -2.77565e-18 -0.0590472 0 --0.0590472 1.38459e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -269.78 26.4907 1.19322e-14 -26.4907 405.238 2.43658e-15 -9.93234e-15 2.34727e-15 154.362 - ------------------------- ---- Prestrain Output --- -Bhat_: 865.808 -595.202 3.86043e-14 -Beff_: 3.3752 -1.68941 5.86037e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=269.78 -q2=405.238 -q3=154.362 -q12=26.4907 -q13=1.19322e-14 -q23=2.43658e-15 -q_onetwo=26.490715 -b1=3.375201 -b2=-1.689411 -b3=0.000000 -mu_gamma=154.362029 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 2.69780e+02 & 4.05238e+02 & 1.54362e+02 & 2.64907e+01 & 1.19322e-14 & 2.43658e-15 & 3.37520e+00 & -1.68941e+00 & 5.86037e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/0/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/0/BMatrix.txt deleted file mode 100644 index cf985a30eec284ccfb47a20e95b7be9188929eda..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.66483564170735132 -1 2 -1.79630256913598552 -1 3 4.21524999060086665e-30 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/0/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/0/QMatrix.txt deleted file mode 100644 index 4a9637791f9660e319dd9c2c48cf0c28e5488883..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 373.387124642992148 -1 2 30.7757080923943889 -1 3 -2.37028050115625891e-29 -2 1 30.775708092396453 -2 2 448.128969415925155 -2 3 1.50199183761628701e-29 -3 1 1.20071502034347367e-28 -3 2 5.43021142564616303e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/0/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/0/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/0/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/0/perforated_wood_lower_log.txt deleted file mode 100644 index f4172fa32c2016934adf939bcc038327f5941ce6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/0/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.210626 4.03909e-30 0 -4.03909e-30 0.0139554 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0139207 2.21589e-30 0 -2.21589e-30 0.165225 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -2.46285e-32 8.75336e-20 0 -8.75336e-20 5.29448e-33 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -373.387 30.7757 -2.37028e-29 -30.7757 448.129 1.50199e-29 -1.20072e-28 5.43021e-29 224.213 - ------------------------- ---- Prestrain Output --- -Bhat_: 939.733 -722.963 1.16754e-27 -Beff_: 2.66484 -1.7963 4.21525e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=373.387 -q2=448.129 -q3=224.213 -q12=30.7757 -q13=-2.37028e-29 -q23=1.50199e-29 -q_onetwo=30.775708 -b1=2.664836 -b2=-1.796303 -b3=0.000000 -mu_gamma=224.212842 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.73387e+02 & 4.48129e+02 & 2.24213e+02 & 3.07757e+01 & -2.37028e-29 & 1.50199e-29 & 2.66484e+00 & -1.79630e+00 & 4.21525e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/1/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/1/BMatrix.txt deleted file mode 100644 index 5f409bdfc57b7470f35ca8375f2f1b2573f2c7a2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.64084196068768717 -1 2 -1.86292581212924491 -1 3 2.80587556336952648e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/1/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/1/QMatrix.txt deleted file mode 100644 index 08889376bea01410515148a8e1e4beff1e8b3059..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 350.941627827251864 -1 2 30.8198020787422848 -1 3 1.21673932356651613e-15 -2 1 30.8198020787423559 -2 2 416.367504742039273 -2 3 3.32948428654049767e-16 -3 1 1.42819040505759312e-15 -3 2 1.51145628487153261e-15 -3 3 210.405969407880406 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/1/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/1/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/1/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/1/perforated_wood_lower_log.txt deleted file mode 100644 index 9018c192bb997389291d15551dba1e486f99a86b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/1/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.216356 8.21075e-19 0 -8.21075e-19 0.01497 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0130783 2.41671e-19 0 -2.41671e-19 0.15004 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -2.86302e-19 -0.0107364 0 --0.0107364 7.63935e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -350.942 30.8198 1.21674e-15 -30.8198 416.368 3.32948e-16 -1.42819e-15 1.51146e-15 210.406 - ------------------------- ---- Prestrain Output --- -Bhat_: 869.366 -694.272 6.85962e-15 -Beff_: 2.64084 -1.86293 2.80588e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=350.942 -q2=416.368 -q3=210.406 -q12=30.8198 -q13=1.21674e-15 -q23=3.32948e-16 -q_onetwo=30.819802 -b1=2.640842 -b2=-1.862926 -b3=0.000000 -mu_gamma=210.405969 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.50942e+02 & 4.16368e+02 & 2.10406e+02 & 3.08198e+01 & 1.21674e-15 & 3.32948e-16 & 2.64084e+00 & -1.86293e+00 & 2.80588e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/2/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/2/BMatrix.txt deleted file mode 100644 index 275f0014fe6feebaa58ba2695be1c791b404b130..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.61335363713313429 -1 2 -1.9186806441407207 -1 3 2.81160794142212136e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/2/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/2/QMatrix.txt deleted file mode 100644 index 6165b3d1621163ebb93391c5e4d16d789732d972..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 330.617420397262265 -1 2 29.5717994893105676 -1 3 3.10627734065359665e-15 -2 1 29.571799489311168 -2 2 391.802621169245697 -2 3 5.74697145455518117e-15 -3 1 2.74744919672473102e-15 -3 2 5.98663722998907851e-15 -3 3 193.98359385074221 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/2/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/2/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/2/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/2/perforated_wood_lower_log.txt deleted file mode 100644 index 99ba84e395a464b80b3c9d9d3edf16583a4a1164..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/2/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.221497 2.47417e-18 0 -2.47417e-18 0.0150259 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0126967 4.55047e-18 0 -4.55047e-18 0.137577 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -5.53843e-19 -0.0236685 0 --0.0236685 2.95013e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -330.617 29.5718 3.10628e-15 -29.5718 391.803 5.74697e-15 -2.74745e-15 5.98664e-15 193.984 - ------------------------- ---- Prestrain Output --- -Bhat_: 807.281 -674.463 1.14767e-15 -Beff_: 2.61335 -1.91868 2.81161e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=330.617 -q2=391.803 -q3=193.984 -q12=29.5718 -q13=3.10628e-15 -q23=5.74697e-15 -q_onetwo=29.571799 -b1=2.613354 -b2=-1.918681 -b3=0.000000 -mu_gamma=193.983594 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.30617e+02 & 3.91803e+02 & 1.93984e+02 & 2.95718e+01 & 3.10628e-15 & 5.74697e-15 & 2.61335e+00 & -1.91868e+00 & 2.81161e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/3/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/3/BMatrix.txt deleted file mode 100644 index c5cdc8658be335b4c6ccd23549d9c9f100ed6f71..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.57983447425291912 -1 2 -1.96959270886908477 -1 3 6.7069316956404983e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/3/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/3/QMatrix.txt deleted file mode 100644 index 579e4e2e683971e7afbca984f8d70d2f191215af..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 311.03932809744191 -1 2 27.4499183923376222 -1 3 8.71578627988838037e-15 -2 1 27.4499183923380947 -2 2 371.121451353094471 -2 3 -2.38052638243542967e-15 -3 1 7.44154527766455881e-15 -3 2 4.64443729209938674e-15 -3 3 177.032179766534455 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/3/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/3/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/3/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/3/perforated_wood_lower_log.txt deleted file mode 100644 index 3e6940c9fb9869645232a9b77f9afaf2283edbb8..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/3/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.226439 6.2743e-18 0 -6.2743e-18 0.0144478 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0126154 -1.74495e-18 0 --1.74495e-18 0.126644 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.67747e-18 -0.0371856 0 --0.0371856 1.69041e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -311.039 27.4499 8.71579e-15 -27.4499 371.121 -2.38053e-15 -7.44155e-15 4.64444e-15 177.032 - ------------------------- ---- Prestrain Output --- -Bhat_: 748.365 -660.142 2.19237e-14 -Beff_: 2.57983 -1.96959 6.70693e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=311.039 -q2=371.121 -q3=177.032 -q12=27.4499 -q13=8.71579e-15 -q23=-2.38053e-15 -q_onetwo=27.449918 -b1=2.579834 -b2=-1.969593 -b3=0.000000 -mu_gamma=177.032180 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.11039e+02 & 3.71121e+02 & 1.77032e+02 & 2.74499e+01 & 8.71579e-15 & -2.38053e-15 & 2.57983e+00 & -1.96959e+00 & 6.70693e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/4/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/4/BMatrix.txt deleted file mode 100644 index 9fef61d6aa3181e531351ef52b94b1f02282ba84..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.54359903624110961 -1 2 -2.02706836820654068 -1 3 1.56564847223068667e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/4/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/4/QMatrix.txt deleted file mode 100644 index adeaadcc88752576e4f1963716171bd09a5f84b5..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 292.462287506646305 -1 2 25.3977418053974979 -1 3 9.8710763277469124e-15 -2 1 25.3977418053975263 -2 2 349.523219123234981 -2 3 6.57707493958116702e-15 -3 1 1.07156565852233195e-14 -3 2 3.56775804273492137e-15 -3 3 159.642188914734078 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/4/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/4/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/4/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/4/perforated_wood_lower_log.txt deleted file mode 100644 index 4e7cfe7cae4b9c9b3203ca0c125f97349526d649..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/4/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.231137 7.93719e-18 0 -7.93719e-18 0.013851 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0124778 4.69729e-18 0 -4.69729e-18 0.114697 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -2.41765e-18 -0.051106 0 --0.051106 2.80905e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -292.462 25.3977 9.87108e-15 -25.3977 349.523 6.57707e-15 -1.07157e-14 3.56776e-15 159.642 - ------------------------- ---- Prestrain Output --- -Bhat_: 692.424 -643.906 4.50186e-14 -Beff_: 2.5436 -2.02707 1.56565e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=292.462 -q2=349.523 -q3=159.642 -q12=25.3977 -q13=9.87108e-15 -q23=6.57707e-15 -q_onetwo=25.397742 -b1=2.543599 -b2=-2.027068 -b3=0.000000 -mu_gamma=159.642189 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 2.92462e+02 & 3.49523e+02 & 1.59642e+02 & 2.53977e+01 & 9.87108e-15 & 6.57707e-15 & 2.54360e+00 & -2.02707e+00 & 1.56565e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/5/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/5/BMatrix.txt deleted file mode 100644 index 41444cd147ea878738bc62a7d0b2fdc26ba81e19..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.50985555274914951 -1 2 -2.07270084155500633 -1 3 -1.82786735055732479e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/5/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/5/QMatrix.txt deleted file mode 100644 index e3e456fb788b7457c3c97249a1ef6cc3958784e4..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 277.912968581139125 -1 2 23.2625137861003921 -1 3 4.62919980465299231e-15 -2 1 23.2625137861004276 -2 2 333.788388979598949 -2 3 6.62905645158165698e-15 -3 1 4.80927551522834914e-15 -3 2 3.73496499350088043e-15 -3 3 144.67579710917019 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/5/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/5/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/5/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/5/perforated_wood_lower_log.txt deleted file mode 100644 index acf86395401ba0eb90b17aff14e2efbf4653d74b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/5/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.234799 3.63985e-18 0 -3.63985e-18 0.0129734 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.012521 5.57489e-18 0 -5.57489e-18 0.105707 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.08842e-18 -0.0631254 0 --0.0631254 2.22954e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -277.913 23.2625 4.6292e-15 -23.2625 333.788 6.62906e-15 -4.80928e-15 3.73496e-15 144.676 - ------------------------- ---- Prestrain Output --- -Bhat_: 649.305 -633.458 1.68464e-15 -Beff_: 2.50986 -2.0727 -1.82787e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=277.913 -q2=333.788 -q3=144.676 -q12=23.2625 -q13=4.6292e-15 -q23=6.62906e-15 -q_onetwo=23.262514 -b1=2.509856 -b2=-2.072701 -b3=-0.000000 -mu_gamma=144.675797 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 2.77913e+02 & 3.33788e+02 & 1.44676e+02 & 2.32625e+01 & 4.62920e-15 & 6.62906e-15 & 2.50986e+00 & -2.07270e+00 & -1.82787e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/6/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/6/BMatrix.txt deleted file mode 100644 index 49eda31319e6b4cad4b8aeb5d5c89a9c7d95d270..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.46804739698933817 -1 2 -2.13505755233524619 -1 3 -1.13034066728119737e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/6/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/6/QMatrix.txt deleted file mode 100644 index eb97b4b3941d02303a46defcc7623ecf7e6bb750..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 261.64171605394705 -1 2 21.1839222220784009 -1 3 1.20140802722121329e-14 -2 1 21.1839222220786496 -2 2 313.790650921373697 -2 3 -9.32894226015877647e-15 -3 1 8.9196925874553571e-15 -3 2 -1.05039799249617544e-14 -3 3 127.92370442847799 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/6/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/6/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/6/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/6/perforated_wood_lower_log.txt deleted file mode 100644 index e7b2de5a9cc6e8e0d1413a1182b1d41407d8c0b6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_4/6/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.238922 9.55391e-18 0 -9.55391e-18 0.0121993 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0124125 -6.93357e-18 0 --6.93357e-18 0.0938459 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -2.54823e-18 -0.076615 0 --0.076615 -5.59273e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -261.642 21.1839 1.20141e-14 -21.1839 313.791 -9.32894e-15 -8.91969e-15 -1.0504e-14 127.924 - ------------------------- ---- Prestrain Output --- -Bhat_: 600.515 -617.678 2.99811e-14 -Beff_: 2.46805 -2.13506 -1.13034e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=261.642 -q2=313.791 -q3=127.924 -q12=21.1839 -q13=1.20141e-14 -q23=-9.32894e-15 -q_onetwo=21.183922 -b1=2.468047 -b2=-2.135058 -b3=-0.000000 -mu_gamma=127.923704 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 2.61642e+02 & 3.13791e+02 & 1.27924e+02 & 2.11839e+01 & 1.20141e-14 & -9.32894e-15 & 2.46805e+00 & -2.13506e+00 & -1.13034e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/0/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/0/BMatrix.txt deleted file mode 100644 index fe91116a66419140efcfa10e10a57b8649f812fe..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.16105074507935901 -1 2 -1.98344337231396772 -1 3 2.57091952786952586e-30 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/0/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/0/QMatrix.txt deleted file mode 100644 index 4b39868fc16ffde1fb3c56a29652891f988e3867..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 392.349438313312987 -1 2 30.0048996530020879 -1 3 7.23841510298498723e-30 -2 1 30.0048996530034842 -2 2 408.259132159441322 -2 3 1.7046791123760302e-29 -3 1 9.62934661366485363e-29 -3 2 5.3155620009550965e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/0/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/0/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/0/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/0/perforated_wood_lower_log.txt deleted file mode 100644 index 7b23e855a378beb2a618a6c315b373a59da5242f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/0/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.194908 4.70518e-30 0 -4.70518e-30 0.0140927 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0140835 1.635e-30 0 -1.635e-30 0.184932 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.58978e-32 8.75336e-20 0 -8.75336e-20 2.01554e-33 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -392.349 30.0049 7.23842e-30 -30.0049 408.259 1.70468e-29 -9.62935e-29 5.31556e-29 224.213 - ------------------------- ---- Prestrain Output --- -Bhat_: 788.374 -744.917 6.79097e-28 -Beff_: 2.16105 -1.98344 2.57092e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=392.349 -q2=408.259 -q3=224.213 -q12=30.0049 -q13=7.23842e-30 -q23=1.70468e-29 -q_onetwo=30.004900 -b1=2.161051 -b2=-1.983443 -b3=0.000000 -mu_gamma=224.212842 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.92349e+02 & 4.08259e+02 & 2.24213e+02 & 3.00049e+01 & 7.23842e-30 & 1.70468e-29 & 2.16105e+00 & -1.98344e+00 & 2.57092e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/1/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/1/BMatrix.txt deleted file mode 100644 index b058a2ec04cd31f1ad0efbfba4203373beebfc34..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.1061545917084481 -1 2 -2.05749963086853249 -1 3 4.12058797616348285e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/1/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/1/QMatrix.txt deleted file mode 100644 index ae302b27657c743e4ae725341b0ffb82ee92d460..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 366.098378118214782 -1 2 29.7018808193731338 -1 3 1.29384992083187702e-15 -2 1 29.7018808193747752 -2 2 375.701560639536922 -2 3 6.14731554196517704e-16 -3 1 1.38543668174272833e-15 -3 2 2.39509492561173001e-15 -3 3 205.870165856768466 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/1/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/1/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/1/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/1/perforated_wood_lower_log.txt deleted file mode 100644 index d75c57c86d5988e126f6b2483ae341269e309a43..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/1/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.201008 8.80611e-19 0 -8.80611e-19 0.0150933 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.013212 4.23397e-19 0 -4.23397e-19 0.166592 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -2.34117e-19 -0.0139935 0 --0.0139935 8.14355e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -366.098 29.7019 1.29385e-15 -29.7019 375.702 6.14732e-16 -1.38544e-15 2.39509e-15 205.87 - ------------------------- ---- Prestrain Output --- -Bhat_: 709.948 -710.449 6.4731e-15 -Beff_: 2.10615 -2.0575 4.12059e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=366.098 -q2=375.702 -q3=205.87 -q12=29.7019 -q13=1.29385e-15 -q23=6.14732e-16 -q_onetwo=29.701881 -b1=2.106155 -b2=-2.057500 -b3=0.000000 -mu_gamma=205.870166 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.66098e+02 & 3.75702e+02 & 2.05870e+02 & 2.97019e+01 & 1.29385e-15 & 6.14732e-16 & 2.10615e+00 & -2.05750e+00 & 4.12059e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/2/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/2/BMatrix.txt deleted file mode 100644 index 98fec13bd8239f6d45efe4097c6965b28a77bd56..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.04691426025401491 -1 2 -2.12015269213630875 -1 3 -7.55855336156709028e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/2/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/2/QMatrix.txt deleted file mode 100644 index edb0a1945429c8dc868f9b8993bdf8c4fbe153ed..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 342.753261612282586 -1 2 28.1135342761408502 -1 3 6.41393972913221859e-15 -2 1 28.1135342761428859 -2 2 350.632046979650966 -2 3 2.92675479553235608e-15 -3 1 3.00056985229774651e-15 -3 2 1.60552024657618832e-15 -3 3 185.675683578806257 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/2/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/2/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/2/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/2/perforated_wood_lower_log.txt deleted file mode 100644 index 593b579b054897ec93e38503cabe282af526c425..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/2/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.206393 3.81715e-18 0 -3.81715e-18 0.0149939 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0127955 2.04777e-18 0 -2.04777e-18 0.15147 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -5.73124e-19 -0.0295733 0 --0.0295733 -5.19757e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -342.753 28.1135 6.41394e-15 -28.1135 350.632 2.92675e-15 -3.00057e-15 1.60552e-15 185.676 - ------------------------- ---- Prestrain Output --- -Bhat_: 641.982 -685.847 1.33452e-15 -Beff_: 2.04691 -2.12015 -7.55855e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=342.753 -q2=350.632 -q3=185.676 -q12=28.1135 -q13=6.41394e-15 -q23=2.92675e-15 -q_onetwo=28.113534 -b1=2.046914 -b2=-2.120153 -b3=-0.000000 -mu_gamma=185.675684 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.42753e+02 & 3.50632e+02 & 1.85676e+02 & 2.81135e+01 & 6.41394e-15 & 2.92675e-15 & 2.04691e+00 & -2.12015e+00 & -7.55855e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/3/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/3/BMatrix.txt deleted file mode 100644 index c457041bcfa22edb9a203265b1a0e69f014bc99f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.98562237208890258 -1 2 -2.17940998837972355 -1 3 7.38115124322571334e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/3/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/3/QMatrix.txt deleted file mode 100644 index c32d99d4eac191062e6a9a5bb66e26f2e4daa3a2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 322.352575642990985 -1 2 25.8272422694688366 -1 3 2.73533006107365331e-15 -2 1 25.8272422694702222 -2 2 329.242014984973252 -2 3 7.46489400555341962e-15 -3 1 3.58096498044851042e-15 -3 2 7.34050875249634251e-15 -3 3 165.903215269326296 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/3/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/3/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/3/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/3/perforated_wood_lower_log.txt deleted file mode 100644 index 2d6cfb63c3145159def3fb305cec3535116b28c0..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/3/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.21108 1.65143e-18 0 -1.65143e-18 0.0141639 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0126209 5.35595e-18 0 -5.35595e-18 0.137885 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -6.78027e-19 -0.0449324 0 --0.0449324 2.88833e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -322.353 25.8272 2.73533e-15 -25.8272 329.242 7.46489e-15 -3.58096e-15 7.34051e-15 165.903 - ------------------------- ---- Prestrain Output --- -Bhat_: 583.782 -666.27 3.35803e-15 -Beff_: 1.98562 -2.17941 7.38115e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=322.353 -q2=329.242 -q3=165.903 -q12=25.8272 -q13=2.73533e-15 -q23=7.46489e-15 -q_onetwo=25.827242 -b1=1.985622 -b2=-2.179410 -b3=0.000000 -mu_gamma=165.903215 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.22353e+02 & 3.29242e+02 & 1.65903e+02 & 2.58272e+01 & 2.73533e-15 & 7.46489e-15 & 1.98562e+00 & -2.17941e+00 & 7.38115e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/4/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/4/BMatrix.txt deleted file mode 100644 index 250785c2c51b58e6a98a97ffc58c2a584d7e3425..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.91570194411631678 -1 2 -2.24295725570139792 -1 3 1.34912644755279199e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/4/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/4/QMatrix.txt deleted file mode 100644 index 92013f4aeb09a89976ab502347ca3a2ab9436c10..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 302.234080455674871 -1 2 23.2535298002713233 -1 3 8.81338395716986262e-15 -2 1 23.2535298002727835 -2 2 308.309813768154072 -2 3 4.5191842802576272e-15 -3 1 6.55517878055261873e-15 -3 2 5.66079233726805853e-15 -3 3 143.920826132131651 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/4/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/4/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/4/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/4/perforated_wood_lower_log.txt deleted file mode 100644 index 8b2d0d619bd3c28c34ee8acf84d175ebcd20f51c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/4/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.215697 6.32367e-18 0 -6.32367e-18 0.0130381 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0125048 3.38341e-18 0 -3.38341e-18 0.123946 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.34089e-18 -0.0620494 0 --0.0620494 1.15303e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -302.234 23.2535 8.81338e-15 -23.2535 308.31 4.51918e-15 -6.55518e-15 5.66079e-15 143.921 - ------------------------- ---- Prestrain Output --- -Bhat_: 526.834 -646.979 1.92776e-14 -Beff_: 1.9157 -2.24296 1.34913e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=302.234 -q2=308.31 -q3=143.921 -q12=23.2535 -q13=8.81338e-15 -q23=4.51918e-15 -q_onetwo=23.253530 -b1=1.915702 -b2=-2.242957 -b3=0.000000 -mu_gamma=143.920826 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.02234e+02 & 3.08310e+02 & 1.43921e+02 & 2.32535e+01 & 8.81338e-15 & 4.51918e-15 & 1.91570e+00 & -2.24296e+00 & 1.34913e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/5/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/5/BMatrix.txt deleted file mode 100644 index 7aea8150e38e4abc41c64dcd4f04f00091669cf4..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.85603858117051512 -1 2 -2.29768785669702602 -1 3 2.83658073463701581e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/5/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/5/QMatrix.txt deleted file mode 100644 index a1f2f24b1ca97b4c8adfb448ec7e8c4a6a0cbd74..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 287.227199663029864 -1 2 21.1402971366876073 -1 3 1.11864520027464814e-14 -2 1 21.1402971366892807 -2 2 291.812840215799497 -2 3 6.28886335012974118e-15 -3 1 1.02101052088826068e-14 -3 2 1.00539629171577326e-14 -3 3 127.350584733715976 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/5/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/5/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/5/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/5/perforated_wood_lower_log.txt deleted file mode 100644 index 3e7837ebced262e22635f14cae63f44c5d6b2eea..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/5/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.219149 8.84267e-18 0 -8.84267e-18 0.0119812 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0124179 4.92072e-18 0 -4.92072e-18 0.11251 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.70323e-18 -0.0750794 0 --0.0750794 6.87087e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -287.227 21.1403 1.11865e-14 -21.1403 291.813 6.28886e-15 -1.02101e-14 1.0054e-14 127.351 - ------------------------- ---- Prestrain Output --- -Bhat_: 484.531 -631.258 3.19735e-14 -Beff_: 1.85604 -2.29769 2.83658e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=287.227 -q2=291.813 -q3=127.351 -q12=21.1403 -q13=1.11865e-14 -q23=6.28886e-15 -q_onetwo=21.140297 -b1=1.856039 -b2=-2.297688 -b3=0.000000 -mu_gamma=127.350585 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 2.87227e+02 & 2.91813e+02 & 1.27351e+02 & 2.11403e+01 & 1.11865e-14 & 6.28886e-15 & 1.85604e+00 & -2.29769e+00 & 2.83658e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/6/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/6/BMatrix.txt deleted file mode 100644 index 886ebf51c5dd330f61d3c49b555f97e4f7f8a867..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.77198211972579278 -1 2 -2.39434522901654789 -1 3 1.4424981126321284e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/6/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/6/QMatrix.txt deleted file mode 100644 index 297de60d4c82f3c922a69297c274587abbe83061..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 268.290759685767568 -1 2 18.5710614166336114 -1 3 6.66333316180462934e-15 -2 1 18.5710614166351675 -2 2 265.249471970727427 -2 3 6.20437371946525604e-15 -3 1 6.98960597821758015e-15 -3 2 7.63185473442952369e-15 -3 3 108.737718776175683 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/6/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/6/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/6/perforated_wood_lower_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/6/perforated_wood_lower_log.txt deleted file mode 100644 index 1673673e0af9a4ab78bd5060300c641913bcf365..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_lower_5/6/perforated_wood_lower_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.22351 4.98536e-18 0 -4.98536e-18 0.0107635 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0120637 4.47891e-18 0 -4.47891e-18 0.093279 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.49156e-18 -0.0895979 0 --0.0895979 1.62664e-18 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -268.291 18.5711 6.66333e-15 -18.5711 265.249 6.20437e-15 -6.98961e-15 7.63185e-15 108.738 - ------------------------- ---- Prestrain Output --- -Bhat_: 430.941 -602.191 9.79756e-15 -Beff_: 1.77198 -2.39435 1.4425e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=268.291 -q2=265.249 -q3=108.738 -q12=18.5711 -q13=6.66333e-15 -q23=6.20437e-15 -q_onetwo=18.571061 -b1=1.771982 -b2=-2.394345 -b3=0.000000 -mu_gamma=108.737719 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 2.68291e+02 & 2.65249e+02 & 1.08738e+02 & 1.85711e+01 & 6.66333e-15 & 6.20437e-15 & 1.77198e+00 & -2.39435e+00 & 1.44250e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/0/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/0/BMatrix.txt deleted file mode 100644 index 6137c432727280d2dfa86fd721657aeb9a3c66f1..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.02691656716370883 -1 2 -0.576108730383210088 -1 3 2.03963883345130819e-29 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/0/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/0/QMatrix.txt deleted file mode 100644 index 1534b2f63411bcda7d39fe9bba6dbfc3f37a9f36..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 344.448324198946295 -1 2 46.0309380450088881 -1 3 -1.8599861030914169e-29 -2 1 46.0309380450078862 -2 2 889.279295541113925 -2 3 4.12349304813084745e-29 -3 1 2.07158959089932232e-28 -3 2 6.15195762196629843e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/0/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/0/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/0/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/0/perforated_wood_upper_log.txt deleted file mode 100644 index 99f7b04aed50a6f5f8b809662c422788b272d41a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/0/perforated_wood_upper_log.txt +++ /dev/null @@ -1 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/1/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/1/BMatrix.txt deleted file mode 100644 index 162fada30f719de54b5eeef8bdc99c855c68846d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.01673193948725782 -1 2 -0.571408585630656329 -1 3 2.51259428533307006e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/1/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/1/QMatrix.txt deleted file mode 100644 index 81a5a9f0d6ece78aac370812c8d3d1de316a823f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 342.715642066076271 -1 2 45.9631740539720255 -1 3 -9.74079419012972847e-17 -2 1 45.9631740539719189 -2 2 888.598101699151925 -2 3 -1.20719135642682884e-17 -3 1 5.65142499990437322e-17 -3 2 1.88651178012477772e-17 -3 3 223.44819507587161 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/1/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/1/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/1/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/1/perforated_wood_upper_log.txt deleted file mode 100644 index d3fb0f043d1a7fb318cc5c9901d6bec3fc899007..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/1/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.190569 4.46494e-20 0 -4.46494e-20 0.00907093 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0090996 4.2367e-21 0 -4.2367e-21 0.0532993 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.02978e-20 0.000454423 0 -0.000454423 2.17517e-21 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -342.716 45.9632 -9.74079e-17 -45.9632 888.598 -1.20719e-17 -5.65142e-17 1.88651e-17 223.448 - ------------------------- ---- Prestrain Output --- -Bhat_: 1350.33 -323.131 7.77658e-16 -Beff_: 4.01673 -0.571409 2.51259e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=342.716 -q2=888.598 -q3=223.448 -q12=45.9632 -q13=-9.74079e-17 -q23=-1.20719e-17 -q_onetwo=45.963174 -b1=4.016732 -b2=-0.571409 -b3=0.000000 -mu_gamma=223.448195 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.42716e+02 & 8.88598e+02 & 2.23448e+02 & 4.59632e+01 & -9.74079e-17 & -1.20719e-17 & 4.01673e+00 & -5.71409e-01 & 2.51259e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/2/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/2/BMatrix.txt deleted file mode 100644 index 7b2067cd914aa770d23c951458a16167124e57be..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.99261936981966148 -1 2 -0.563429760320957818 -1 3 -1.73558493291249697e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/2/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/2/QMatrix.txt deleted file mode 100644 index dd1672f3194271d20ab8f057eb3f254f1a343238..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 338.762457579968952 -1 2 45.8870250767289463 -1 3 9.94653849301779802e-17 -2 1 45.8870250767283565 -2 2 887.509454114953996 -2 3 -9.22249472970482209e-18 -3 1 -4.02255946651067231e-17 -3 2 1.38371302263462503e-17 -3 3 222.060151454125048 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/2/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/2/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/2/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/2/perforated_wood_upper_log.txt deleted file mode 100644 index 234539afcf5e6d24e6e414b2130aced7eac58916..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/2/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.186263 2.29123e-20 0 -2.29123e-20 0.00889962 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0090719 -9.77089e-21 0 --9.77089e-21 0.0534633 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.22798e-19 0.00127509 0 -0.00127509 -1.1496e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -338.762 45.887 9.94654e-17 -45.887 887.509 -9.22249e-18 --4.02256e-17 1.38371e-17 222.06 - ------------------------- ---- Prestrain Output --- -Bhat_: 1326.7 -316.84 -4.02244e-15 -Beff_: 3.99262 -0.56343 -1.73558e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=338.762 -q2=887.509 -q3=222.06 -q12=45.887 -q13=9.94654e-17 -q23=-9.22249e-18 -q_onetwo=45.887025 -b1=3.992619 -b2=-0.563430 -b3=-0.000000 -mu_gamma=222.060151 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.38762e+02 & 8.87509e+02 & 2.22060e+02 & 4.58870e+01 & 9.94654e-17 & -9.22249e-18 & 3.99262e+00 & -5.63430e-01 & -1.73558e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/3/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/3/BMatrix.txt deleted file mode 100644 index faab1ef9f610361cffdc0059f14e4e3f31715186..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.97078368225017275 -1 2 -0.556369464925766444 -1 3 -9.32048369001289406e-18 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/3/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/3/QMatrix.txt deleted file mode 100644 index 5df80343bf9dfc9e3bcf58d76fd3d7c031902594..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 335.306350973629947 -1 2 45.8394886569432529 -1 3 -1.28505062493844413e-16 -2 1 45.8394886569433737 -2 2 886.559257726907504 -2 3 5.96311194867027439e-19 -3 1 -1.06392420372823648e-16 -3 2 1.24032728532341707e-16 -3 3 220.830700202961594 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/3/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/3/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/3/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/3/perforated_wood_upper_log.txt deleted file mode 100644 index f308d41511558d9dac56697c23d7bc4f69b113f1..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/3/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.1825 1.13671e-19 0 -1.13671e-19 0.00874706 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00906937 6.22089e-21 0 -6.22089e-21 0.0536072 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -5.80917e-20 0.00200073 0 -0.00200073 -2.09481e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -335.306 45.8395 -1.28505e-16 -45.8395 886.559 5.96311e-19 --1.06392e-16 1.24033e-16 220.831 - ------------------------- ---- Prestrain Output --- -Bhat_: 1305.93 -311.236 -2.54972e-15 -Beff_: 3.97078 -0.556369 -9.32048e-18 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=335.306 -q2=886.559 -q3=220.831 -q12=45.8395 -q13=-1.28505e-16 -q23=5.96311e-19 -q_onetwo=45.839489 -b1=3.970784 -b2=-0.556369 -b3=-0.000000 -mu_gamma=220.830700 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.35306e+02 & 8.86559e+02 & 2.20831e+02 & 4.58395e+01 & -1.28505e-16 & 5.96311e-19 & 3.97078e+00 & -5.56369e-01 & -9.32048e-18 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/4/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/4/BMatrix.txt deleted file mode 100644 index 64d788e9b2bf57804e0ea30efa23689e8dc02971..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.94438143205773395 -1 2 -0.547901184739255753 -1 3 -4.47874406120455803e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/4/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/4/QMatrix.txt deleted file mode 100644 index 3f164ebaa534826c30ef3493687036a0e21369c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 331.414065437273905 -1 2 45.8424572655846063 -1 3 -3.23397179261691869e-16 -2 1 45.8424572655844003 -2 2 885.454376361429695 -2 3 2.10213248717783241e-16 -3 1 -7.78118346665690463e-17 -3 2 2.77135627814451002e-16 -3 3 219.689155392519297 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/4/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/4/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/4/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/4/perforated_wood_upper_log.txt deleted file mode 100644 index be0ea3f61f9e43fd75efab3cb7862f6c1da7a155..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/4/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.178244 1.54067e-19 0 -1.54067e-19 0.00856605 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00913131 -1.01188e-19 0 --1.01188e-19 0.0537782 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --2.96965e-19 0.00267882 0 -0.00267882 -5.31212e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -331.414 45.8425 -3.23397e-16 -45.8425 885.454 2.10213e-16 --7.78118e-17 2.77136e-16 219.689 - ------------------------- ---- Prestrain Output --- -Bhat_: 1282.11 -304.321 -1.02981e-14 -Beff_: 3.94438 -0.547901 -4.47874e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=331.414 -q2=885.454 -q3=219.689 -q12=45.8425 -q13=-3.23397e-16 -q23=2.10213e-16 -q_onetwo=45.842457 -b1=3.944381 -b2=-0.547901 -b3=-0.000000 -mu_gamma=219.689155 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.31414e+02 & 8.85454e+02 & 2.19689e+02 & 4.58425e+01 & -3.23397e-16 & 2.10213e-16 & 3.94438e+00 & -5.47901e-01 & -4.47874e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/5/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/5/BMatrix.txt deleted file mode 100644 index 75e9fc8a6197f26f6ef957049d969e5d98c64210..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.92097133914863383 -1 2 -0.540085381245060669 -1 3 -6.32868304100547971e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/5/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/5/QMatrix.txt deleted file mode 100644 index 0a342cdaac1897ca0f9d11f21d43d6b6f412273d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 327.71805083935061 -1 2 45.7253975106491382 -1 3 -8.34517188425670797e-16 -2 1 45.7253975106488824 -2 2 884.378237235491497 -2 3 -7.08255069176155772e-17 -3 1 3.63470307996292818e-16 -3 2 1.69406589450860068e-17 -3 3 218.200168053860807 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/5/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/5/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/5/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/5/perforated_wood_upper_log.txt deleted file mode 100644 index e75eb77e7f1bd78503aebecb4346e24f1ff695f5..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/5/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.174218 4.80035e-19 0 -4.80035e-19 0.00841287 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00905803 4.17841e-20 0 -4.17841e-20 0.0539386 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --5.12678e-19 0.00356092 0 -0.00356092 -3.5313e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -327.718 45.7254 -8.34517e-16 -45.7254 884.378 -7.08255e-17 -3.6347e-16 1.69407e-17 218.2 - ------------------------- ---- Prestrain Output --- -Bhat_: 1260.28 -298.352 -1.23932e-14 -Beff_: 3.92097 -0.540085 -6.32868e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=327.718 -q2=884.378 -q3=218.2 -q12=45.7254 -q13=-8.34517e-16 -q23=-7.08255e-17 -q_onetwo=45.725398 -b1=3.920971 -b2=-0.540085 -b3=-0.000000 -mu_gamma=218.200168 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.27718e+02 & 8.84378e+02 & 2.18200e+02 & 4.57254e+01 & -8.34517e-16 & -7.08255e-17 & 3.92097e+00 & -5.40085e-01 & -6.32868e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/6/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/6/BMatrix.txt deleted file mode 100644 index 9e069aa4aeba316d9ab0094172e2f6688dad72ef..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.90142234921865816 -1 2 -0.534276810382432465 -1 3 -2.15544494999674406e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/6/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/6/QMatrix.txt deleted file mode 100644 index 2203179fa31f11ef6ae0e6b3a42b2d6cb41ff827..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 325.032716633168945 -1 2 45.743787702752492 -1 3 1.33255223262046529e-16 -2 1 45.7437877027524493 -2 2 883.641778144533646 -2 3 4.0467846088021453e-17 -3 1 6.04557907641495307e-16 -3 2 8.70072243419617308e-17 -3 3 217.317881532470125 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/6/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/6/parameter.txt deleted file mode 100644 index 4dd2428f3e774b36551278b72a914a000870210d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/6/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/6/perforated_wood_upper_log.txt deleted file mode 100644 index d9aee5ce3d0a94747a691d0790c15f191dae67b6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_0/6/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.171263 -1.31601e-19 0 --1.31601e-19 0.00828488 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00911954 2.29238e-20 0 -2.29238e-20 0.0540531 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --5.52529e-19 0.00408412 0 -0.00408412 -1.89684e-22 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -325.033 45.7438 1.33255e-16 -45.7438 883.642 4.04678e-17 -6.04558e-16 8.70072e-17 217.318 - ------------------------- ---- Prestrain Output --- -Bhat_: 1243.65 -293.643 -2.37202e-15 -Beff_: 3.90142 -0.534277 -2.15544e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=325.033 -q2=883.642 -q3=217.318 -q12=45.7438 -q13=1.33255e-16 -q23=4.04678e-17 -q_onetwo=45.743788 -b1=3.901422 -b2=-0.534277 -b3=-0.000000 -mu_gamma=217.317882 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.25033e+02 & 8.83642e+02 & 2.17318e+02 & 4.57438e+01 & 1.33255e-16 & 4.04678e-17 & 3.90142e+00 & -5.34277e-01 & -2.15544e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/0/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/0/BMatrix.txt deleted file mode 100644 index 910cfcd016877f3d866c6eaf21b888ed5a6882e2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.15596094148045392 -1 2 -0.776402193757820269 -1 3 1.7703424517171586e-29 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/0/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/0/QMatrix.txt deleted file mode 100644 index 2c5d3a2b37ab326494910bb78231fb135d60cb0f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 357.254344081100442 -1 2 42.7769003929809344 -1 3 -3.54062960976149439e-29 -2 1 42.7769003929807212 -2 2 790.334706977815472 -2 3 -2.1239155426702437e-30 -3 1 2.04724547529040308e-28 -3 2 5.65787579245127431e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/0/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/0/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/0/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/0/perforated_wood_upper_log.txt deleted file mode 100644 index 2eb85621c635924c36e85dafcc2c2078d3c97e56..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/0/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.214567 9.80362e-30 0 -9.80362e-30 0.0106599 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0104814 2.4435e-30 0 -2.4435e-30 0.0717071 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.07707e-31 8.75336e-20 0 -8.75336e-20 1.54743e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -357.254 42.7769 -3.54063e-29 -42.7769 790.335 -2.12392e-30 -2.04725e-28 5.65788e-29 224.213 - ------------------------- ---- Prestrain Output --- -Bhat_: 1451.52 -435.838 4.77623e-27 -Beff_: 4.15596 -0.776402 1.77034e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=357.254 -q2=790.335 -q3=224.213 -q12=42.7769 -q13=-3.54063e-29 -q23=-2.12392e-30 -q_onetwo=42.776900 -b1=4.155961 -b2=-0.776402 -b3=0.000000 -mu_gamma=224.212842 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.57254e+02 & 7.90335e+02 & 2.24213e+02 & 4.27769e+01 & -3.54063e-29 & -2.12392e-30 & 4.15596e+00 & -7.76402e-01 & 1.77034e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/1/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/1/BMatrix.txt deleted file mode 100644 index 793152d09f66fa8fcb70aa938f03a38379473038..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.13442510329290425 -1 2 -0.761066391549365284 -1 3 -6.10068019675320299e-19 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/1/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/1/QMatrix.txt deleted file mode 100644 index e1a50a255d8c2e481e11330819b4cf576d25c539..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 352.205529898235284 -1 2 42.6272984833696711 -1 3 6.73526718338729458e-17 -2 1 42.6272984833698629 -2 2 788.115619530062986 -2 3 -1.20414203781671336e-17 -3 1 -2.44538411872316508e-17 -3 2 -5.69477191098011204e-17 -3 3 221.657917731570791 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/1/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/1/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/1/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/1/perforated_wood_upper_log.txt deleted file mode 100644 index 6e53f5a64f5fa170850185b6557381c2d2ce46b3..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/1/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.208951 -1.80991e-20 0 --1.80991e-20 0.0104445 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0104296 -1.10549e-20 0 --1.10549e-20 0.0720598 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -4.83005e-20 0.00158443 0 -0.00158443 6.68314e-21 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -352.206 42.6273 6.73527e-17 -42.6273 788.116 -1.20414e-17 --2.44538e-17 -5.69477e-17 221.658 - ------------------------- ---- Prestrain Output --- -Bhat_: 1423.73 -423.569 -1.92988e-16 -Beff_: 4.13443 -0.761066 -6.10068e-19 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=352.206 -q2=788.116 -q3=221.658 -q12=42.6273 -q13=6.73527e-17 -q23=-1.20414e-17 -q_onetwo=42.627298 -b1=4.134425 -b2=-0.761066 -b3=-0.000000 -mu_gamma=221.657918 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.52206e+02 & 7.88116e+02 & 2.21658e+02 & 4.26273e+01 & 6.73527e-17 & -1.20414e-17 & 4.13443e+00 & -7.61066e-01 & -6.10068e-19 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/2/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/2/BMatrix.txt deleted file mode 100644 index c6d38d27a08e9a16906b8f8014e8c771e2129254..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.11505098866691288 -1 2 -0.749296713287428751 -1 3 -7.32826357717602112e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/2/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/2/QMatrix.txt deleted file mode 100644 index cbc3e4b7222e8b3aa9f631006c68426abb2a3210..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 348.190067089190165 -1 2 42.6319483590075663 -1 3 2.4658145534109388e-16 -2 1 42.6319483590077368 -2 2 786.478246888986405 -2 3 7.86724201409794155e-17 -3 1 -1.74847929104021693e-16 -3 2 8.88639205623431572e-17 -3 3 219.764323824433177 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/2/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/2/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/2/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/2/perforated_wood_upper_log.txt deleted file mode 100644 index 2edc78c6ded4a240773739d1908ef5ed0702f7ce..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/2/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.204475 -9.62772e-20 0 --9.62772e-20 0.0102534 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0105248 -2.53109e-20 0 --2.53109e-20 0.0723245 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --2.92089e-19 0.00275487 0 -0.00275487 -5.86464e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -348.19 42.6319 2.46581e-16 -42.6319 786.478 7.86724e-17 --1.74848e-16 8.88639e-17 219.764 - ------------------------- ---- Prestrain Output --- -Bhat_: 1400.88 -413.873 -1.6891e-14 -Beff_: 4.11505 -0.749297 -7.32826e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=348.19 -q2=786.478 -q3=219.764 -q12=42.6319 -q13=2.46581e-16 -q23=7.86724e-17 -q_onetwo=42.631948 -b1=4.115051 -b2=-0.749297 -b3=-0.000000 -mu_gamma=219.764324 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.48190e+02 & 7.86478e+02 & 2.19764e+02 & 4.26319e+01 & 2.46581e-16 & 7.86724e-17 & 4.11505e+00 & -7.49297e-01 & -7.32826e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/3/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/3/BMatrix.txt deleted file mode 100644 index 62722e6009a92ab9e961e645abb937c09ba98a57..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.08050615456700694 -1 2 -0.73144242244332025 -1 3 -4.20314988069956106e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/3/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/3/QMatrix.txt deleted file mode 100644 index 97f9779d38dc680fcf4f05d1024e1a6f5c65c0a2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 341.627629555911824 -1 2 42.7674134516251456 -1 3 -9.80525339741578073e-17 -2 1 42.7674134516250319 -2 2 784.093316263540828 -2 3 -1.06089182577706609e-16 -3 1 -1.32611478222133261e-16 -3 2 8.55977615177305751e-17 -3 3 217.009545182652829 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/3/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/3/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/3/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/3/perforated_wood_upper_log.txt deleted file mode 100644 index 781ea8f13e5ea08e315b5b6983f36992823eb60a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/3/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.19714 -2.98785e-20 0 --2.98785e-20 0.00992025 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0108136 7.00252e-20 0 -7.00252e-20 0.0727161 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --2.43409e-19 0.00445286 0 -0.00445286 -3.57987e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -341.628 42.7674 -9.80525e-17 -42.7674 784.093 -1.06089e-16 --1.32611e-16 8.55978e-17 217.01 - ------------------------- ---- Prestrain Output --- -Bhat_: 1362.73 -399.006 -9.72497e-15 -Beff_: 4.08051 -0.731442 -4.20315e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=341.628 -q2=784.093 -q3=217.01 -q12=42.7674 -q13=-9.80525e-17 -q23=-1.06089e-16 -q_onetwo=42.767413 -b1=4.080506 -b2=-0.731442 -b3=-0.000000 -mu_gamma=217.009545 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.41628e+02 & 7.84093e+02 & 2.17010e+02 & 4.27674e+01 & -9.80525e-17 & -1.06089e-16 & 4.08051e+00 & -7.31442e-01 & -4.20315e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/4/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/4/BMatrix.txt deleted file mode 100644 index 4c1a389a618639e6bbed6ce91290fdc0f3de88cb..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.06266367704278597 -1 2 -0.718825370832016808 -1 3 3.24433259090061982e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/4/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/4/QMatrix.txt deleted file mode 100644 index 415bdde5de530ff4d3ea4df185d916b31764799c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 337.838538529932919 -1 2 42.6219015262391636 -1 3 -8.75344176483328074e-16 -2 1 42.6219015262392702 -2 2 782.293495386122913 -2 3 1.35958952429682256e-16 -3 1 2.72541321108543677e-17 -3 2 -1.18909873267347699e-16 -3 3 215.014871910282892 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/4/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/4/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/4/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/4/perforated_wood_upper_log.txt deleted file mode 100644 index f33b0434496dde3c6f49ca117daa07a0f90e30dc..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/4/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.192887 4.66918e-19 0 -4.66918e-19 0.00976243 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0107474 -1.09949e-19 0 --1.09949e-19 0.0730012 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -3.45406e-19 0.00570009 0 -0.00570009 3.37319e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -337.839 42.6219 -8.75344e-16 -42.6219 782.293 1.35959e-16 -2.72541e-17 -1.1891e-16 215.015 - ------------------------- ---- Prestrain Output --- -Bhat_: 1341.89 -389.174 7.172e-15 -Beff_: 4.06266 -0.718825 3.24433e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=337.839 -q2=782.293 -q3=215.015 -q12=42.6219 -q13=-8.75344e-16 -q23=1.35959e-16 -q_onetwo=42.621902 -b1=4.062664 -b2=-0.718825 -b3=0.000000 -mu_gamma=215.014872 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.37839e+02 & 7.82293e+02 & 2.15015e+02 & 4.26219e+01 & -8.75344e-16 & 1.35959e-16 & 4.06266e+00 & -7.18825e-01 & 3.24433e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/5/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/5/BMatrix.txt deleted file mode 100644 index 289c9a7ca93a6648863a970a1a45611457d525bf..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.04288253631956351 -1 2 -0.705185243526694983 -1 3 -6.84585736367396456e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/5/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/5/QMatrix.txt deleted file mode 100644 index 04c88fc6a10b0e867cdb61d920c05bafd751e35c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 333.524228024803961 -1 2 42.4011555210887678 -1 3 2.12286785372661768e-16 -2 1 42.401155521088441 -2 2 780.338343855242897 -2 3 2.21719344273285657e-16 -3 1 3.67300590983776765e-16 -3 2 2.35813972515597214e-18 -3 3 212.665377706522094 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/5/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/5/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/5/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/5/perforated_wood_upper_log.txt deleted file mode 100644 index 6e202f7007f5fb7d7aa6383934a9a437d3bc4d1f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/5/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.188057 -2.46985e-19 0 --2.46985e-19 0.00959183 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0106116 -1.39295e-19 0 --1.39295e-19 0.0733071 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.28709e-18 0.0071551 0 -0.0071551 -8.4942e-21 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -333.524 42.4012 2.12287e-16 -42.4012 780.338 2.21719e-16 -3.67301e-16 2.35814e-18 212.665 - ------------------------- ---- Prestrain Output --- -Bhat_: 1318.5 -378.86 -1.30755e-14 -Beff_: 4.04288 -0.705185 -6.84586e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=333.524 -q2=780.338 -q3=212.665 -q12=42.4012 -q13=2.12287e-16 -q23=2.21719e-16 -q_onetwo=42.401156 -b1=4.042883 -b2=-0.705185 -b3=-0.000000 -mu_gamma=212.665378 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.33524e+02 & 7.80338e+02 & 2.12665e+02 & 4.24012e+01 & 2.12287e-16 & 2.21719e-16 & 4.04288e+00 & -7.05185e-01 & -6.84586e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/6/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/6/BMatrix.txt deleted file mode 100644 index 149ddc0dd2c3e2cc7d2abb1db74670bdca7d5ab8..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.01742880383738843 -1 2 -0.689493055535777 -1 3 -1.90486319366914336e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/6/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/6/QMatrix.txt deleted file mode 100644 index 4e7f7be929ebdd44cae606791c2683c63d65424a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 328.49229649245774 -1 2 42.2259949799839731 -1 3 2.9292432195127116e-16 -2 1 42.2259949799840513 -2 2 778.156393812941815 -2 3 -5.34836931687099337e-16 -3 1 -4.87565716966731344e-16 -3 2 3.49329939974829529e-16 -3 3 210.160266174309385 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/6/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/6/parameter.txt deleted file mode 100644 index df29ca67fc1a4e1876e08fc54fabc111c35df15c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/6/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/6/perforated_wood_upper_log.txt deleted file mode 100644 index 8b9f956e24fd7220e687d3a9ddf09d1664393117..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_1/6/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.182388 -1.38955e-19 0 --1.38955e-19 0.00937824 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0105452 -5.7906e-20 0 --5.7906e-20 0.0736528 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.46323e-18 0.00870782 0 -0.00870782 -1.94894e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -328.492 42.226 2.92924e-16 -42.226 778.156 -5.34837e-16 --4.87566e-16 3.4933e-16 210.16 - ------------------------- ---- Prestrain Output --- -Bhat_: 1290.58 -366.894 -4.22323e-14 -Beff_: 4.01743 -0.689493 -1.90486e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=328.492 -q2=778.156 -q3=210.16 -q12=42.226 -q13=2.92924e-16 -q23=-5.34837e-16 -q_onetwo=42.225995 -b1=4.017429 -b2=-0.689493 -b3=-0.000000 -mu_gamma=210.160266 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.28492e+02 & 7.78156e+02 & 2.10160e+02 & 4.22260e+01 & 2.92924e-16 & -5.34837e-16 & 4.01743e+00 & -6.89493e-01 & -1.90486e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/0/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/0/BMatrix.txt deleted file mode 100644 index be8657c5a7c7ec0fdcf0db4b7caa753e557a9c73..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.03873445069710524 -1 2 -1.05995320800370529 -1 3 1.36076669459033724e-29 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/0/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/0/QMatrix.txt deleted file mode 100644 index 655f1ff64c6cb9651d8618f4c60a9a720c897fe2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 362.077597710087787 -1 2 38.6653780788820356 -1 3 7.65965450042136346e-29 -2 1 38.6653780788812682 -2 2 673.576799924798138 -2 3 2.35949529346769039e-29 -3 1 1.91929433331978192e-28 -3 2 5.49556981433154364e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/0/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/0/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/0/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/0/perforated_wood_upper_log.txt deleted file mode 100644 index 23e4ac9988a480ac380211e83f971bdf72e55340..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/0/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.228051 8.83488e-30 0 -8.83488e-30 0.0120825 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0119521 2.30937e-30 0 -2.30937e-30 0.0967075 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -7.67493e-32 8.75336e-20 0 -8.75336e-20 1.40158e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -362.078 38.6654 7.65965e-29 -38.6654 673.577 2.3595e-29 -1.91929e-28 5.49557e-29 224.213 - ------------------------- ---- Prestrain Output --- -Bhat_: 1421.35 -557.801 3.76792e-27 -Beff_: 4.03873 -1.05995 1.36077e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=362.078 -q2=673.577 -q3=224.213 -q12=38.6654 -q13=7.65965e-29 -q23=2.3595e-29 -q_onetwo=38.665378 -b1=4.038734 -b2=-1.059953 -b3=0.000000 -mu_gamma=224.212842 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.62078e+02 & 6.73577e+02 & 2.24213e+02 & 3.86654e+01 & 7.65965e-29 & 2.35950e-29 & 4.03873e+00 & -1.05995e+00 & 1.36077e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/1/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/1/BMatrix.txt deleted file mode 100644 index 86ec8a93ba84c84b794702900d4e60d913d41501..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.02377345176769374 -1 2 -1.03211443248861734 -1 3 -7.26474377269934067e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/1/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/1/QMatrix.txt deleted file mode 100644 index 08f28f4f305c344f3a72ee87156ee97945f0923a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 355.810139303233541 -1 2 38.5862517984604807 -1 3 3.6017534983147359e-16 -2 1 38.5862517984603386 -2 2 669.422764467591037 -2 3 1.63565450246594413e-16 -3 1 -2.22295326677418581e-16 -3 2 2.4947491988891457e-16 -3 3 220.118133157945493 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/1/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/1/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/1/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/1/perforated_wood_upper_log.txt deleted file mode 100644 index 861b2c1c280760fff626801400aef70ca3788f89..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/1/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.221215 -1.59445e-19 0 --1.59445e-19 0.0118022 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.012096 -1.08659e-19 0 --1.08659e-19 0.0974249 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --3.89456e-19 0.00270105 0 -0.00270105 -9.359e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -355.81 38.5863 3.60175e-16 -38.5863 669.423 1.63565e-16 --2.22295e-16 2.49475e-16 220.118 - ------------------------- ---- Prestrain Output --- -Bhat_: 1391.87 -535.659 -1.7143e-14 -Beff_: 4.02377 -1.03211 -7.26474e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=355.81 -q2=669.423 -q3=220.118 -q12=38.5863 -q13=3.60175e-16 -q23=1.63565e-16 -q_onetwo=38.586252 -b1=4.023773 -b2=-1.032114 -b3=-0.000000 -mu_gamma=220.118133 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.55810e+02 & 6.69423e+02 & 2.20118e+02 & 3.85863e+01 & 3.60175e-16 & 1.63565e-16 & 4.02377e+00 & -1.03211e+00 & -7.26474e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/2/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/2/BMatrix.txt deleted file mode 100644 index 89062208ec04b57f2e9a4d640f4337115a3cbc63..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.99757443016028047 -1 2 -1.00013271605385889 -1 3 -1.14935565289428614e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/2/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/2/QMatrix.txt deleted file mode 100644 index 73bc0cba954fd29f78a9e01e95843e17ed82a184..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 347.182628314476574 -1 2 38.8187385592631458 -1 3 -7.29356353958154902e-16 -2 1 38.8187385592630108 -2 2 664.845609741155727 -2 3 1.42518375573219558e-16 -3 1 -5.93356743947004439e-16 -3 2 3.05446857043478737e-16 -3 3 215.022217543475278 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/2/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/2/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/2/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/2/perforated_wood_upper_log.txt deleted file mode 100644 index 481fa7aad41739107d79f18668a224254ad334e6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/2/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.211687 3.26127e-19 0 -3.26127e-19 0.0113549 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0126416 -4.19497e-20 0 --4.19497e-20 0.098226 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --6.37825e-19 0.00603871 0 -0.00603871 -9.75697e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -347.183 38.8187 -7.29356e-16 -38.8187 664.846 1.42518e-16 --5.93357e-16 3.05447e-16 215.022 - ------------------------- ---- Prestrain Output --- -Bhat_: 1349.06 -509.753 -2.73912e-14 -Beff_: 3.99757 -1.00013 -1.14936e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=347.183 -q2=664.846 -q3=215.022 -q12=38.8187 -q13=-7.29356e-16 -q23=1.42518e-16 -q_onetwo=38.818739 -b1=3.997574 -b2=-1.000133 -b3=-0.000000 -mu_gamma=215.022218 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.47183e+02 & 6.64846e+02 & 2.15022e+02 & 3.88187e+01 & -7.29356e-16 & 1.42518e-16 & 3.99757e+00 & -1.00013e+00 & -1.14936e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/3/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/3/BMatrix.txt deleted file mode 100644 index 1108602b7fce80b0a07903c04dbdbf619b24ba1d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.98757882012712583 -1 2 -0.97733387105430658 -1 3 -2.11608364322198754e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/3/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/3/QMatrix.txt deleted file mode 100644 index 3f19bac74e24fe1cfa8c6372c0eddc1fc9620aa5..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 342.606918624207992 -1 2 38.4769635042124349 -1 3 -8.10007443063920363e-16 -2 1 38.4769635042122005 -2 2 661.441768602280263 -2 3 5.10171332263054111e-16 -3 1 -8.61127575496611897e-16 -3 2 7.03565894780155965e-16 -3 3 211.378527346908072 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/3/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/3/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/3/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/3/perforated_wood_upper_log.txt deleted file mode 100644 index b5a87e41d26b30156cff8eeee4406f1ae4d92d7f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/3/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.206599 4.60914e-19 0 -4.60914e-19 0.0111937 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0124401 -3.63618e-19 0 --3.63618e-19 0.0987998 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.17488e-18 0.00845973 0 -0.00845973 -2.34817e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -342.607 38.477 -8.10007e-16 -38.477 661.442 5.10171e-16 --8.61128e-16 7.03566e-16 211.379 - ------------------------- ---- Prestrain Output --- -Bhat_: 1328.57 -493.02 -4.88509e-14 -Beff_: 3.98758 -0.977334 -2.11608e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=342.607 -q2=661.442 -q3=211.379 -q12=38.477 -q13=-8.10007e-16 -q23=5.10171e-16 -q_onetwo=38.476964 -b1=3.987579 -b2=-0.977334 -b3=-0.000000 -mu_gamma=211.378527 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.42607e+02 & 6.61442e+02 & 2.11379e+02 & 3.84770e+01 & -8.10007e-16 & 5.10171e-16 & 3.98758e+00 & -9.77334e-01 & -2.11608e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/4/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/4/BMatrix.txt deleted file mode 100644 index 824cd5b5d4ec033901c23ebee14ec03253938d87..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.97974557013765562 -1 2 -0.95737789458995004 -1 3 -8.48359863034261441e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/4/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/4/QMatrix.txt deleted file mode 100644 index bb2ca72ed3cf9db4de3f655281f296915057d563..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 338.531947870258421 -1 2 38.0781946817730557 -1 3 6.15989464297639344e-16 -2 1 38.0781946817725228 -2 2 658.446948090768501 -2 3 8.23072079242370691e-16 -3 1 1.07273673451147022e-15 -3 2 2.47523355978440662e-16 -3 3 207.261751962500597 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/4/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/4/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/4/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/4/perforated_wood_upper_log.txt deleted file mode 100644 index 9c5d777f60d2548d99697c7fdc3a8eb863033228..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/4/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.202073 -3.39597e-19 0 --3.39597e-19 0.0110662 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0121503 -3.70583e-19 0 --3.70583e-19 0.099298 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --2.63287e-18 0.0111751 0 -0.0111751 -2.37248e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -338.532 38.0782 6.15989e-16 -38.0782 658.447 8.23072e-16 -1.07274e-15 2.47523e-16 207.262 - ------------------------- ---- Prestrain Output --- -Bhat_: 1310.82 -478.841 -1.3551e-14 -Beff_: 3.97975 -0.957378 -8.4836e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=338.532 -q2=658.447 -q3=207.262 -q12=38.0782 -q13=6.15989e-16 -q23=8.23072e-16 -q_onetwo=38.078195 -b1=3.979746 -b2=-0.957378 -b3=-0.000000 -mu_gamma=207.261752 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.38532e+02 & 6.58447e+02 & 2.07262e+02 & 3.80782e+01 & 6.15989e-16 & 8.23072e-16 & 3.97975e+00 & -9.57378e-01 & -8.48360e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/5/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/5/BMatrix.txt deleted file mode 100644 index 182d4eeecb0a5352b6f3104b5ce5af1943f6b62c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.95446460518779697 -1 2 -0.926667684659633895 -1 3 -1.40441385234805723e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/5/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/5/QMatrix.txt deleted file mode 100644 index fce7e3d36c15739523f8ce0c6e6ee9e9f428fe9b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 330.831533962576202 -1 2 38.05150103565704 -1 3 1.14616432664305101e-15 -2 1 38.0515010356566137 -2 2 654.161970082551989 -2 3 1.13797860024078545e-15 -3 1 1.05940104778989852e-15 -3 2 7.50213693251344793e-16 -3 3 202.772513340456413 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/5/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/5/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/5/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/5/perforated_wood_upper_log.txt deleted file mode 100644 index c219b292a98b4f93906d08685bccef69670cd04b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/5/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.193383 -6.04574e-19 0 --6.04574e-19 0.0106989 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0123916 -6.98207e-19 0 --6.98207e-19 0.100038 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.26523e-18 0.0141215 0 -0.0141215 -1.33292e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -330.832 38.0515 1.14616e-15 -38.0515 654.162 1.13798e-15 -1.0594e-15 7.50214e-16 202.773 - ------------------------- ---- Prestrain Output --- -Bhat_: 1273 -455.717 -2.49835e-14 -Beff_: 3.95446 -0.926668 -1.40441e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=330.832 -q2=654.162 -q3=202.773 -q12=38.0515 -q13=1.14616e-15 -q23=1.13798e-15 -q_onetwo=38.051501 -b1=3.954465 -b2=-0.926668 -b3=-0.000000 -mu_gamma=202.772513 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.30832e+02 & 6.54162e+02 & 2.02773e+02 & 3.80515e+01 & 1.14616e-15 & 1.13798e-15 & 3.95446e+00 & -9.26668e-01 & -1.40441e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/6/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/6/BMatrix.txt deleted file mode 100644 index c3b8d1b6b7c9d4444b51fdeaeee7538c7c11850c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.9433016908575671 -1 2 -0.903758032287096058 -1 3 -1.63589735484389128e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/6/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/6/QMatrix.txt deleted file mode 100644 index 56950f142d6b5039d8a49195591480adc31d04a0..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 326.311455994734445 -1 2 37.6594087896928968 -1 3 -8.40541286746543381e-16 -2 1 37.6594087896925203 -2 2 650.843627093951568 -2 3 6.357761539454998e-16 -3 1 1.08311797031301893e-16 -3 2 1.71596677839280787e-15 -3 3 198.773755124234498 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/6/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/6/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/6/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/6/perforated_wood_upper_log.txt deleted file mode 100644 index 1bb42bb823ca853d129b3fbd1df832b51972610f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_2/6/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.188276 6.45669e-19 0 -6.45669e-19 0.010546 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0121211 -2.52801e-19 0 --2.52801e-19 0.100595 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --6.5818e-19 0.0167807 0 -0.0167807 -3.08629e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -326.311 37.6594 -8.40541e-16 -37.6594 650.844 6.35776e-16 -1.08312e-16 1.71597e-15 198.774 - ------------------------- ---- Prestrain Output --- -Bhat_: 1252.71 -439.703 -3.36411e-14 -Beff_: 3.9433 -0.903758 -1.6359e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=326.311 -q2=650.844 -q3=198.774 -q12=37.6594 -q13=-8.40541e-16 -q23=6.35776e-16 -q_onetwo=37.659409 -b1=3.943302 -b2=-0.903758 -b3=-0.000000 -mu_gamma=198.773755 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.26311e+02 & 6.50844e+02 & 1.98774e+02 & 3.76594e+01 & -8.40541e-16 & 6.35776e-16 & 3.94330e+00 & -9.03758e-01 & -1.63590e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/0/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/0/BMatrix.txt deleted file mode 100644 index 29f046f95765f89baf0b3926693da51f9fa1cd71..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.38385954774598163 -1 2 -1.4580752040276912 -1 3 6.56599696043288159e-30 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/0/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/0/QMatrix.txt deleted file mode 100644 index e37cbac73f60b005f3262687867e554af818225a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 362.884400627699449 -1 2 33.598217280456808 -1 3 2.66764408456964812e-29 -2 1 33.5982172804586838 -2 2 535.044060612796784 -2 3 -9.76610185849601493e-30 -3 1 1.41209476925862098e-28 -3 2 5.2699761983748409e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/0/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/0/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/0/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/0/perforated_wood_upper_log.txt deleted file mode 100644 index a196c459b6f8346156aaddc6c15a94da6e9864e4..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/0/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.226315 4.74252e-30 0 -4.74252e-30 0.0133775 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0133074 2.25105e-30 0 -2.25105e-30 0.133677 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -3.78604e-32 8.75336e-20 0 -8.75336e-20 8.16086e-33 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -362.884 33.5982 2.66764e-29 -33.5982 535.044 -9.7661e-30 -1.41209e-28 5.26998e-29 224.213 - ------------------------- ---- Prestrain Output --- -Bhat_: 1178.96 -666.443 1.87317e-27 -Beff_: 3.38386 -1.45808 6.566e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=362.884 -q2=535.044 -q3=224.213 -q12=33.5982 -q13=2.66764e-29 -q23=-9.7661e-30 -q_onetwo=33.598217 -b1=3.383860 -b2=-1.458075 -b3=0.000000 -mu_gamma=224.212842 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.62884e+02 & 5.35044e+02 & 2.24213e+02 & 3.35982e+01 & 2.66764e-29 & -9.76610e-30 & 3.38386e+00 & -1.45808e+00 & 6.56600e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/1/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/1/BMatrix.txt deleted file mode 100644 index b7b96f770fafb314b2705b28efadc67eb10d5522..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.39464385395850465 -1 2 -1.39780905619579343 -1 3 -6.1157192498742141e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/1/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/1/QMatrix.txt deleted file mode 100644 index f179d0cbf4d877174b2bb097a4953763eb1c5a7b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 350.335508396627233 -1 2 33.6525131410389875 -1 3 -1.37137344665902439e-15 -2 1 33.6525131410388951 -2 2 524.418402685342585 -2 3 5.51967326012370307e-16 -3 1 4.75829228449575758e-17 -3 2 1.72713406076940856e-16 -3 3 215.364975192733624 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/1/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/1/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/1/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/1/perforated_wood_upper_log.txt deleted file mode 100644 index 5833696735f9fa9af62f804412d01ee73d7b2543..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/1/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.215069 1.14465e-18 0 -1.14465e-18 0.0128671 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0140776 -3.28962e-19 0 --3.28962e-19 0.135739 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --4.25768e-19 0.00637426 0 -0.00637426 -9.93355e-20 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -350.336 33.6525 -1.37137e-15 -33.6525 524.418 5.51967e-16 -4.75829e-17 1.72713e-16 215.365 - ------------------------- ---- Prestrain Output --- -Bhat_: 1142.22 -618.798 -1.3251e-14 -Beff_: 3.39464 -1.39781 -6.11572e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=350.336 -q2=524.418 -q3=215.365 -q12=33.6525 -q13=-1.37137e-15 -q23=5.51967e-16 -q_onetwo=33.652513 -b1=3.394644 -b2=-1.397809 -b3=-0.000000 -mu_gamma=215.364975 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.50336e+02 & 5.24418e+02 & 2.15365e+02 & 3.36525e+01 & -1.37137e-15 & 5.51967e-16 & 3.39464e+00 & -1.39781e+00 & -6.11572e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/2/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/2/BMatrix.txt deleted file mode 100644 index 155abd3c1066188ac9bc92e9c6f99ea00083da04..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.40075937921618188 -1 2 -1.34332250644236861 -1 3 9.00920865929376997e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/2/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/2/QMatrix.txt deleted file mode 100644 index 00491eb236cbffe212550b04d3b4c9a9cf8d25c8..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 339.958119372016711 -1 2 33.4485153108648063 -1 3 -1.6669879452507752e-15 -2 1 33.4485153108644582 -2 2 515.171934755594293 -2 3 -7.1145346558498801e-16 -3 1 1.53875393330005217e-15 -3 2 -7.21970226658097403e-16 -3 3 206.182025376447143 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/2/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/2/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/2/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/2/perforated_wood_upper_log.txt deleted file mode 100644 index 1ea2fd4bb3c9eb374dc6a71b23f28064df4960e6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/2/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.205245 1.11051e-18 0 -1.11051e-18 0.0124684 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0144728 3.31827e-19 0 -3.31827e-19 0.137519 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.80632e-18 0.0130176 0 -0.0130176 3.05636e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -339.958 33.4485 -1.66699e-15 -33.4485 515.172 -7.11453e-16 -1.53875e-15 -7.2197e-16 206.182 - ------------------------- ---- Prestrain Output --- -Bhat_: 1111.18 -578.292 2.47781e-14 -Beff_: 3.40076 -1.34332 9.00921e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=339.958 -q2=515.172 -q3=206.182 -q12=33.4485 -q13=-1.66699e-15 -q23=-7.11453e-16 -q_onetwo=33.448515 -b1=3.400759 -b2=-1.343323 -b3=0.000000 -mu_gamma=206.182025 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.39958e+02 & 5.15172e+02 & 2.06182e+02 & 3.34485e+01 & -1.66699e-15 & -7.11453e-16 & 3.40076e+00 & -1.34332e+00 & 9.00921e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/3/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/3/BMatrix.txt deleted file mode 100644 index b24548e7b116cb013c6f4b62e130b29d349264d5..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.40695240408272948 -1 2 -1.28900297488421911 -1 3 -1.70540029873929896e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/3/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/3/QMatrix.txt deleted file mode 100644 index 7f93b994e293a3872bb0dfe21caded233b364e76..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 330.611925325416792 -1 2 32.8514773147708894 -1 3 1.039207782327356e-16 -2 1 32.8514773147708041 -2 2 506.221137494260461 -2 3 7.37907998593634318e-16 -3 1 -1.15229006891759411e-15 -3 2 8.42858768890231147e-16 -3 3 196.299556573179387 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/3/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/3/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/3/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/3/perforated_wood_upper_log.txt deleted file mode 100644 index 8c22240170b107219aa364728032e42e9982ba9d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/3/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.196113 -5.92073e-20 0 --5.92073e-20 0.0121742 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0143594 -4.01451e-19 0 --4.01451e-19 0.139224 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --2.69295e-18 0.0201865 0 -0.0201865 -2.50247e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -330.612 32.8515 1.03921e-16 -32.8515 506.221 7.37908e-16 --1.15229e-15 8.42859e-16 196.3 - ------------------------- ---- Prestrain Output --- -Bhat_: 1084.03 -540.597 -3.84892e-14 -Beff_: 3.40695 -1.289 -1.7054e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=330.612 -q2=506.221 -q3=196.3 -q12=32.8515 -q13=1.03921e-16 -q23=7.37908e-16 -q_onetwo=32.851477 -b1=3.406952 -b2=-1.289003 -b3=-0.000000 -mu_gamma=196.299557 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.30612e+02 & 5.06221e+02 & 1.96300e+02 & 3.28515e+01 & 1.03921e-16 & 7.37908e-16 & 3.40695e+00 & -1.28900e+00 & -1.70540e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/4/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/4/BMatrix.txt deleted file mode 100644 index 181de2b009567cd9c82c786e890c3404aac14d24..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.41450724731424904 -1 2 -1.22877476553790377 -1 3 -2.43365513870715063e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/4/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/4/QMatrix.txt deleted file mode 100644 index 00d3763e25dfab6963bfbf2fe0ab24cac82f0706..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 321.243547030319235 -1 2 31.7759780748884992 -1 3 1.20935976077179985e-15 -2 1 31.7759780748880658 -2 2 496.601023868031064 -2 3 3.64042563455457824e-15 -3 1 1.52850822277006415e-15 -3 2 1.16736047911514262e-15 -3 3 184.812501038148838 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/4/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/4/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/4/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/4/perforated_wood_upper_log.txt deleted file mode 100644 index b42aad93a14175aa297693ba5c3e4125af5f4307..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/4/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.186662 -4.92101e-19 0 --4.92101e-19 0.0119553 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0137036 -2.42243e-18 0 --2.42243e-18 0.141038 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --5.86314e-18 0.0285596 0 -0.0285596 -3.67591e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -321.244 31.776 1.20936e-15 -31.776 496.601 3.64043e-15 -1.52851e-15 1.16736e-15 184.813 - ------------------------- ---- Prestrain Output --- -Bhat_: 1057.84 -501.711 -4.11923e-14 -Beff_: 3.41451 -1.22877 -2.43366e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=321.244 -q2=496.601 -q3=184.813 -q12=31.776 -q13=1.20936e-15 -q23=3.64043e-15 -q_onetwo=31.775978 -b1=3.414507 -b2=-1.228775 -b3=-0.000000 -mu_gamma=184.812501 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.21244e+02 & 4.96601e+02 & 1.84813e+02 & 3.17760e+01 & 1.20936e-15 & 3.64043e-15 & 3.41451e+00 & -1.22877e+00 & -2.43366e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/5/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/5/BMatrix.txt deleted file mode 100644 index 88ba2b4838bc5dd8d4e2078bb7c55dd769e7a74a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.41540551912849732 -1 2 -1.17764773520423716 -1 3 -5.16818756679569065e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/5/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/5/QMatrix.txt deleted file mode 100644 index ab413c8561f7c0246b02e22ef2d8bb27d601d430..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 312.04495452059524 -1 2 31.2127302159720621 -1 3 1.10365004895446317e-16 -2 1 31.2127302159718774 -2 2 488.84302442329323 -2 3 2.29840018545202085e-15 -3 1 1.92727778181023268e-15 -3 2 3.80338122107914955e-16 -3 3 175.775898189916944 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/5/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/5/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/5/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/5/perforated_wood_upper_log.txt deleted file mode 100644 index fc7e61ced79b9e817c722e0565b74050336b392a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/5/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.177012 3.54168e-20 0 -3.54168e-20 0.0116374 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0135569 -1.0986e-18 0 --1.0986e-18 0.142519 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --3.23897e-18 0.0351179 0 -0.0351179 6.79919e-21 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -312.045 31.2127 1.10365e-16 -31.2127 488.843 2.2984e-15 -1.92728e-15 3.80338e-16 175.776 - ------------------------- ---- Prestrain Output --- -Bhat_: 1029 -469.081 -2.9499e-15 -Beff_: 3.41541 -1.17765 -5.16819e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=312.045 -q2=488.843 -q3=175.776 -q12=31.2127 -q13=1.10365e-16 -q23=2.2984e-15 -q_onetwo=31.212730 -b1=3.415406 -b2=-1.177648 -b3=-0.000000 -mu_gamma=175.775898 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.12045e+02 & 4.88843e+02 & 1.75776e+02 & 3.12127e+01 & 1.10365e-16 & 2.29840e-15 & 3.41541e+00 & -1.17765e+00 & -5.16819e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/6/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/6/BMatrix.txt deleted file mode 100644 index a5d953a1821b7bb9d0b2cd0df70cc4956aa8a371..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.4214232290988793 -1 2 -1.12609856275354803 -1 3 -1.54012851387092775e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/6/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/6/QMatrix.txt deleted file mode 100644 index c34822af4294e9febff4c94041236a619b0dabcf..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 305.383628906016497 -1 2 30.0252173849794275 -1 3 1.23000025963049264e-15 -2 1 30.0252173849790012 -2 2 481.058350591651958 -2 3 1.34224228953705449e-15 -3 1 3.16652086496116425e-15 -3 2 1.25745767964868804e-15 -3 3 164.622781415592755 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/6/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/6/parameter.txt deleted file mode 100644 index a7297f96dd45c411563af48a17333b00179873f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/6/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/6/perforated_wood_upper_log.txt deleted file mode 100644 index dacd86f92f1cfacd5b517defb256c18dc4750a1e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_3/6/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.169928 -8.9274e-19 0 --8.9274e-19 0.0115478 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.012549 -7.29558e-19 0 --7.29558e-19 0.143973 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --5.99142e-18 0.0433121 0 -0.0433121 -2.02816e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -305.384 30.0252 1.23e-15 -30.0252 481.058 1.34224e-15 -3.16652e-15 1.25746e-15 164.623 - ------------------------- ---- Prestrain Output --- -Bhat_: 1011.04 -438.99 -1.5936e-14 -Beff_: 3.42142 -1.1261 -1.54013e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=305.384 -q2=481.058 -q3=164.623 -q12=30.0252 -q13=1.23e-15 -q23=1.34224e-15 -q_onetwo=30.025217 -b1=3.421423 -b2=-1.126099 -b3=-0.000000 -mu_gamma=164.622781 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.05384e+02 & 4.81058e+02 & 1.64623e+02 & 3.00252e+01 & 1.23000e-15 & 1.34224e-15 & 3.42142e+00 & -1.12610e+00 & -1.54013e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/0/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/0/BMatrix.txt deleted file mode 100644 index cf985a30eec284ccfb47a20e95b7be9188929eda..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.66483564170735132 -1 2 -1.79630256913598552 -1 3 4.21524999060086665e-30 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/0/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/0/QMatrix.txt deleted file mode 100644 index 4a9637791f9660e319dd9c2c48cf0c28e5488883..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 373.387124642992148 -1 2 30.7757080923943889 -1 3 -2.37028050115625891e-29 -2 1 30.775708092396453 -2 2 448.128969415925155 -2 3 1.50199183761628701e-29 -3 1 1.20071502034347367e-28 -3 2 5.43021142564616303e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/0/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/0/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/0/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/0/perforated_wood_upper_log.txt deleted file mode 100644 index f4172fa32c2016934adf939bcc038327f5941ce6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/0/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.210626 4.03909e-30 0 -4.03909e-30 0.0139554 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0139207 2.21589e-30 0 -2.21589e-30 0.165225 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -2.46285e-32 8.75336e-20 0 -8.75336e-20 5.29448e-33 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -373.387 30.7757 -2.37028e-29 -30.7757 448.129 1.50199e-29 -1.20072e-28 5.43021e-29 224.213 - ------------------------- ---- Prestrain Output --- -Bhat_: 939.733 -722.963 1.16754e-27 -Beff_: 2.66484 -1.7963 4.21525e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=373.387 -q2=448.129 -q3=224.213 -q12=30.7757 -q13=-2.37028e-29 -q23=1.50199e-29 -q_onetwo=30.775708 -b1=2.664836 -b2=-1.796303 -b3=0.000000 -mu_gamma=224.212842 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.73387e+02 & 4.48129e+02 & 2.24213e+02 & 3.07757e+01 & -2.37028e-29 & 1.50199e-29 & 2.66484e+00 & -1.79630e+00 & 4.21525e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/1/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/1/BMatrix.txt deleted file mode 100644 index 8ef5e785179f54efa5c13e858a8e3b1a088ef731..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.72842834946343116 -1 2 -1.71510501811600702 -1 3 -1.13887732938608317e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/1/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/1/QMatrix.txt deleted file mode 100644 index 426502388e89fa692c990a53e817cff6760cf7f7..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 352.015046544344955 -1 2 30.6506546140377303 -1 3 -1.35385680530980546e-15 -2 1 30.6506546140377729 -2 2 429.414420749313535 -2 3 3.45535232371130263e-16 -3 1 -5.49039980146659445e-16 -3 2 3.08238677637628911e-16 -3 3 210.404710571575862 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/1/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/1/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/1/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/1/perforated_wood_upper_log.txt deleted file mode 100644 index 550b504e7db977dd65dcbe5bf9f0c1cb6d8b0ae9..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/1/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.19763 1.01892e-18 0 -1.01892e-18 0.0133576 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0152367 -2.38909e-19 0 --2.38909e-19 0.169308 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.22392e-18 0.0107283 0 -0.0107283 -1.59637e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -352.015 30.6507 -1.35386e-15 -30.6507 429.414 3.45535e-16 --5.4904e-16 3.08239e-16 210.405 - ------------------------- ---- Prestrain Output --- -Bhat_: 907.879 -652.863 -2.59892e-14 -Beff_: 2.72843 -1.71511 -1.13888e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=352.015 -q2=429.414 -q3=210.405 -q12=30.6507 -q13=-1.35386e-15 -q23=3.45535e-16 -q_onetwo=30.650655 -b1=2.728428 -b2=-1.715105 -b3=-0.000000 -mu_gamma=210.404711 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.52015e+02 & 4.29414e+02 & 2.10405e+02 & 3.06507e+01 & -1.35386e-15 & 3.45535e-16 & 2.72843e+00 & -1.71511e+00 & -1.13888e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/2/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/2/BMatrix.txt deleted file mode 100644 index a3c2ce7a70d6f6bdff1ea34e5faafd0080836a0b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.77583637707342934 -1 2 -1.6356527828754206 -1 3 -3.18768078138547899e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/2/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/2/QMatrix.txt deleted file mode 100644 index 62f938bc5a03f3206409baffc0b8aac369ae40a8..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 335.603958058077353 -1 2 29.6976473848427744 -1 3 9.49042819158030238e-16 -2 1 29.6976473848427034 -2 2 412.587832091221969 -2 3 1.61470229548266175e-15 -3 1 -7.34113290989935052e-16 -3 2 1.73472347597680709e-15 -3 3 193.975426554225066 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/2/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/2/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/2/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/2/perforated_wood_upper_log.txt deleted file mode 100644 index 5e11517ccff59a6dbd2950e3500c8c314f611251..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/2/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.186318 -8.78858e-19 0 --8.78858e-19 0.0130091 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0154031 -1.1756e-18 0 --1.1756e-18 0.172928 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --2.87499e-18 0.0236536 0 -0.0236536 -5.1461e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -335.604 29.6976 9.49043e-16 -29.6976 412.588 1.6147e-15 --7.34113e-16 1.73472e-15 193.975 - ------------------------- ---- Prestrain Output --- -Bhat_: 883.007 -592.415 -6.67084e-14 -Beff_: 2.77584 -1.63565 -3.18768e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=335.604 -q2=412.588 -q3=193.975 -q12=29.6976 -q13=9.49043e-16 -q23=1.6147e-15 -q_onetwo=29.697647 -b1=2.775836 -b2=-1.635653 -b3=-0.000000 -mu_gamma=193.975427 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.35604e+02 & 4.12588e+02 & 1.93975e+02 & 2.96976e+01 & 9.49043e-16 & 1.61470e-15 & 2.77584e+00 & -1.63565e+00 & -3.18768e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/3/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/3/BMatrix.txt deleted file mode 100644 index 05dec83692646343db309a7a93bca0e737f55855..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.81639032538744649 -1 2 -1.55208705952154413 -1 3 -9.56667849998420272e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/3/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/3/QMatrix.txt deleted file mode 100644 index b9c6df1c532cacbdd5ba3601399c45332d5b6f24..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 321.75440547307403 -1 2 28.1515506663391015 -1 3 -5.09070867057981324e-15 -2 1 28.1515506663388173 -2 2 396.439738111100155 -2 3 1.1247513337364623e-15 -3 1 -1.93465035658313411e-15 -3 2 2.38567846033710396e-15 -3 3 177.009809364907568 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/3/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/3/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/3/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/3/perforated_wood_upper_log.txt deleted file mode 100644 index 0b6060ff0acc5b5b88a74b7f125326e24dab3363..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/3/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.175919 4.17416e-18 0 -4.17416e-18 0.0128299 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0147476 -6.19557e-19 0 --6.19557e-19 0.176386 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --3.05866e-18 0.037176 0 -0.037176 -3.90345e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -321.754 28.1516 -5.09071e-15 -28.1516 396.44 1.12475e-15 --1.93465e-15 2.38568e-15 177.01 - ------------------------- ---- Prestrain Output --- -Bhat_: 862.492 -536.023 -2.60855e-14 -Beff_: 2.81639 -1.55209 -9.56668e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=321.754 -q2=396.44 -q3=177.01 -q12=28.1516 -q13=-5.09071e-15 -q23=1.12475e-15 -q_onetwo=28.151551 -b1=2.816390 -b2=-1.552087 -b3=-0.000000 -mu_gamma=177.009809 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.21754e+02 & 3.96440e+02 & 1.77010e+02 & 2.81516e+01 & -5.09071e-15 & 1.12475e-15 & 2.81639e+00 & -1.55209e+00 & -9.56668e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/4/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/4/BMatrix.txt deleted file mode 100644 index a8d9aadba3386b9921e5be4add85b81c07d8ed70..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.85479834918858755 -1 2 -1.46601145892171303 -1 3 -1.93770698195683035e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/4/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/4/QMatrix.txt deleted file mode 100644 index 49d37ffb7b124f9c3fcd3363e754fd33215b4ad4..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 307.250229504379888 -1 2 26.6630047664167122 -1 3 -4.76540736125269371e-15 -2 1 26.6630047664166234 -2 2 381.155206059032992 -2 3 1.44914462374412523e-15 -3 1 -3.94454434393676223e-15 -3 2 8.803721640582296e-16 -3 3 159.59134007818102 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/4/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/4/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/4/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/4/perforated_wood_upper_log.txt deleted file mode 100644 index 289188b51ec586a1b27906f0a18be43e342a8c6c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/4/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.163896 3.93416e-18 0 -3.93416e-18 0.0125785 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0140495 -9.16052e-19 0 --9.16052e-19 0.179666 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.56641e-18 0.0511248 0 -0.0511248 -3.82233e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -307.25 26.663 -4.76541e-15 -26.663 381.155 1.44914e-15 --3.94454e-15 8.80372e-16 159.591 - ------------------------- ---- Prestrain Output --- -Bhat_: 838.049 -482.66 -4.34756e-14 -Beff_: 2.8548 -1.46601 -1.93771e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=307.25 -q2=381.155 -q3=159.591 -q12=26.663 -q13=-4.76541e-15 -q23=1.44914e-15 -q_onetwo=26.663005 -b1=2.854798 -b2=-1.466011 -b3=-0.000000 -mu_gamma=159.591340 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.07250e+02 & 3.81155e+02 & 1.59591e+02 & 2.66630e+01 & -4.76541e-15 & 1.44914e-15 & 2.85480e+00 & -1.46601e+00 & -1.93771e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/5/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/5/BMatrix.txt deleted file mode 100644 index 2bc890245caa171038bda3207e1ad671f6eb3175..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.88319240044684388 -1 2 -1.39426637648585916 -1 3 1.74906808466104268e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/5/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/5/QMatrix.txt deleted file mode 100644 index d0c22f1eb864f8266883b8ef89df2166a15a4bc7..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 296.573207401094123 -1 2 25.1122945899925085 -1 3 -6.58408874296134705e-16 -2 1 25.1122945899920857 -2 2 369.236802748597881 -2 3 -2.05239471251505989e-15 -3 1 4.17200995972422106e-15 -3 2 -1.15510899456605642e-15 -3 3 144.619279683215865 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/5/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/5/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/5/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/5/perforated_wood_upper_log.txt deleted file mode 100644 index a4ea92856943385260496120f62397cd20ce77d1..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/5/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.154396 7.21716e-19 0 -7.21716e-19 0.0124597 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0129253 1.33594e-18 0 -1.33594e-18 0.182201 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --9.74693e-18 0.0631464 0 -0.0631464 7.96082e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -296.573 25.1123 -6.58409e-16 -25.1123 369.237 -2.05239e-15 -4.17201e-15 -1.15511e-15 144.619 - ------------------------- ---- Prestrain Output --- -Bhat_: 820.064 -442.411 3.89341e-14 -Beff_: 2.88319 -1.39427 1.74907e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=296.573 -q2=369.237 -q3=144.619 -q12=25.1123 -q13=-6.58409e-16 -q23=-2.05239e-15 -q_onetwo=25.112295 -b1=2.883192 -b2=-1.394266 -b3=0.000000 -mu_gamma=144.619280 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 2.96573e+02 & 3.69237e+02 & 1.44619e+02 & 2.51123e+01 & -6.58409e-16 & -2.05239e-15 & 2.88319e+00 & -1.39427e+00 & 1.74907e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/6/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/6/BMatrix.txt deleted file mode 100644 index e9e567790e16123aede7f6ac0a6bac93645dca9f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.91359694498981536 -1 2 -1.30765195122041744 -1 3 5.14673481338230188e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/6/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/6/QMatrix.txt deleted file mode 100644 index 2b66e09e47671b92442629ea03408a58c3e7a9cc..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 282.830748165004252 -1 2 23.5800196165115423 -1 3 -2.72850318727702046e-15 -2 1 23.5800196165115956 -2 2 355.940441861028489 -2 3 -6.73506389547995354e-16 -3 1 1.76649059963063237e-15 -3 2 -2.01444763647806724e-16 -3 3 127.850912313532632 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/6/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/6/parameter.txt deleted file mode 100644 index 0b7599f37fe80b4c5af8039d95a431bedeb42057..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/6/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/6/perforated_wood_upper_log.txt deleted file mode 100644 index b940fa689a82235d0cd74619f4a74a77a5a78cbd..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_4/6/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.141195 2.29074e-18 0 -2.29074e-18 0.0121828 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.011898 4.46199e-19 0 -4.46199e-19 0.185053 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --4.0585e-18 0.076655 0 -0.076655 4.45182e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -282.831 23.58 -2.7285e-15 -23.58 355.94 -6.73506e-16 -1.76649e-15 -2.01445e-16 127.851 - ------------------------- ---- Prestrain Output --- -Bhat_: 793.22 -396.744 1.19904e-14 -Beff_: 2.9136 -1.30765 5.14673e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=282.831 -q2=355.94 -q3=127.851 -q12=23.58 -q13=-2.7285e-15 -q23=-6.73506e-16 -q_onetwo=23.580020 -b1=2.913597 -b2=-1.307652 -b3=0.000000 -mu_gamma=127.850912 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 2.82831e+02 & 3.55940e+02 & 1.27851e+02 & 2.35800e+01 & -2.72850e-15 & -6.73506e-16 & 2.91360e+00 & -1.30765e+00 & 5.14673e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/0/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/0/BMatrix.txt deleted file mode 100644 index fe91116a66419140efcfa10e10a57b8649f812fe..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.16105074507935901 -1 2 -1.98344337231396772 -1 3 2.57091952786952586e-30 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/0/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/0/QMatrix.txt deleted file mode 100644 index 4b39868fc16ffde1fb3c56a29652891f988e3867..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 392.349438313312987 -1 2 30.0048996530020879 -1 3 7.23841510298498723e-30 -2 1 30.0048996530034842 -2 2 408.259132159441322 -2 3 1.7046791123760302e-29 -3 1 9.62934661366485363e-29 -3 2 5.3155620009550965e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/0/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/0/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/0/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/0/perforated_wood_upper_log.txt deleted file mode 100644 index 7b23e855a378beb2a618a6c315b373a59da5242f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/0/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.194908 4.70518e-30 0 -4.70518e-30 0.0140927 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0140835 1.635e-30 0 -1.635e-30 0.184932 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.58978e-32 8.75336e-20 0 -8.75336e-20 2.01554e-33 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -392.349 30.0049 7.23842e-30 -30.0049 408.259 1.70468e-29 -9.62935e-29 5.31556e-29 224.213 - ------------------------- ---- Prestrain Output --- -Bhat_: 788.374 -744.917 6.79097e-28 -Beff_: 2.16105 -1.98344 2.57092e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=392.349 -q2=408.259 -q3=224.213 -q12=30.0049 -q13=7.23842e-30 -q23=1.70468e-29 -q_onetwo=30.004900 -b1=2.161051 -b2=-1.983443 -b3=0.000000 -mu_gamma=224.212842 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.92349e+02 & 4.08259e+02 & 2.24213e+02 & 3.00049e+01 & 7.23842e-30 & 1.70468e-29 & 2.16105e+00 & -1.98344e+00 & 2.57092e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/1/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/1/BMatrix.txt deleted file mode 100644 index 092530f0d8c71a4f91e5f22374713c0b00c60af0..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.23160521945286439 -1 2 -1.91334790361761331 -1 3 -7.57149462266542763e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/1/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/1/QMatrix.txt deleted file mode 100644 index bb0929eca7011e40491feefdf4a82f846e2c5668..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 362.687769809739336 -1 2 29.6990270195989297 -1 3 -2.60322362624632042e-15 -2 1 29.6990270196001767 -2 2 383.000901065517837 -2 3 1.29215214916822418e-15 -3 1 -2.2488521461694333e-15 -3 2 5.51804695686497482e-16 -3 3 205.866189919680295 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/1/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/1/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/1/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/1/perforated_wood_upper_log.txt deleted file mode 100644 index 79bf6df91b2b34ab01ea5990f56154613e059089..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/1/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.176945 2.14973e-18 0 -2.14973e-18 0.013266 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0151414 -7.43633e-19 0 --7.43633e-19 0.190607 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.73746e-20 0.0139975 0 -0.0139975 -3.326e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -362.688 29.699 -2.60322e-15 -29.699 383.001 1.29215e-15 --2.24885e-15 5.51805e-16 205.866 - ------------------------- ---- Prestrain Output --- -Bhat_: 752.551 -666.537 -2.16615e-14 -Beff_: 2.23161 -1.91335 -7.57149e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=362.688 -q2=383.001 -q3=205.866 -q12=29.699 -q13=-2.60322e-15 -q23=1.29215e-15 -q_onetwo=29.699027 -b1=2.231605 -b2=-1.913348 -b3=-0.000000 -mu_gamma=205.866190 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.62688e+02 & 3.83001e+02 & 2.05866e+02 & 2.96990e+01 & -2.60322e-15 & 1.29215e-15 & 2.23161e+00 & -1.91335e+00 & -7.57149e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/2/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/2/BMatrix.txt deleted file mode 100644 index bf7272113e186f8ae4f6a6fdd49e94b624861519..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.29011587124539995 -1 2 -1.8401643988405223 -1 3 -1.18820375265033187e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/2/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/2/QMatrix.txt deleted file mode 100644 index 0246e2c0bab9d2aa41aed8f41f995caf0b358682..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 339.803415812414471 -1 2 28.2115964246570137 -1 3 -5.16478678401488533e-15 -2 1 28.2115964246582394 -2 2 360.569431146881982 -2 3 2.10432799657711556e-15 -3 1 -6.18862600054725931e-16 -3 2 1.20248862950367297e-15 -3 3 185.664934323018571 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/2/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/2/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/2/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/2/perforated_wood_upper_log.txt deleted file mode 100644 index 1d35c9643034926672b026cf5b7f899c34789182..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/2/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.161941 4.4991e-18 0 -4.4991e-18 0.0128443 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0150536 -1.26978e-18 0 --1.26978e-18 0.195606 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --5.51053e-19 0.0295837 0 -0.0295837 -2.95435e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -339.803 28.2116 -5.16479e-15 -28.2116 360.569 2.10433e-15 --6.18863e-16 1.20249e-15 185.665 - ------------------------- ---- Prestrain Output --- -Bhat_: 726.275 -598.899 -2.56908e-14 -Beff_: 2.29012 -1.84016 -1.1882e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=339.803 -q2=360.569 -q3=185.665 -q12=28.2116 -q13=-5.16479e-15 -q23=2.10433e-15 -q_onetwo=28.211596 -b1=2.290116 -b2=-1.840164 -b3=-0.000000 -mu_gamma=185.664934 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.39803e+02 & 3.60569e+02 & 1.85665e+02 & 2.82116e+01 & -5.16479e-15 & 2.10433e-15 & 2.29012e+00 & -1.84016e+00 & -1.18820e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/3/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/3/BMatrix.txt deleted file mode 100644 index 555cb38ed87d967fc14a60624ae0a857a40ad62b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.3448199646108252 -1 2 -1.7665448201501821 -1 3 3.0247750366783579e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/3/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/3/QMatrix.txt deleted file mode 100644 index 0851292487e9a731c67341cd1b732c20d30554c1..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 320.217438744446383 -1 2 26.0781487507539786 -1 3 9.4629165614534827e-16 -2 1 26.0781487507546998 -2 2 340.992179310037841 -2 3 2.63677968348474678e-15 -3 1 2.86966631013463314e-15 -3 2 6.82071586710630839e-16 -3 3 165.887254477211002 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/3/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/3/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/3/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/3/perforated_wood_upper_log.txt deleted file mode 100644 index d79bb2155bedd0c29977883a51dd78eb22820ece..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/3/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.148307 -3.91889e-19 0 --3.91889e-19 0.0126372 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0141936 -1.88981e-18 0 --1.88981e-18 0.199947 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --7.53193e-19 0.0449477 0 -0.0449477 1.98722e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -320.217 26.0781 9.46292e-16 -26.0781 340.992 2.63678e-15 -2.86967e-15 6.82072e-16 165.887 - ------------------------- ---- Prestrain Output --- -Bhat_: 704.784 -541.229 5.57011e-14 -Beff_: 2.34482 -1.76654 3.02478e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=320.217 -q2=340.992 -q3=165.887 -q12=26.0781 -q13=9.46292e-16 -q23=2.63678e-15 -q_onetwo=26.078149 -b1=2.344820 -b2=-1.766545 -b3=0.000000 -mu_gamma=165.887254 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.20217e+02 & 3.40992e+02 & 1.65887e+02 & 2.60781e+01 & 9.46292e-16 & 2.63678e-15 & 2.34482e+00 & -1.76654e+00 & 3.02478e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/4/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/4/BMatrix.txt deleted file mode 100644 index 50c1a2898b87323595656810c87a64677d47ef23..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.40244279357842849 -1 2 -1.68421839310098331 -1 3 -4.12497472918141648e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/4/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/4/QMatrix.txt deleted file mode 100644 index cd4b947072bdbe27b769541a753981f390fb74b4..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 300.975714043243556 -1 2 23.6706831991565068 -1 3 -7.60619323601774422e-15 -2 1 23.6706831991571427 -2 2 321.705081650932982 -2 3 -4.24139889876329335e-16 -3 1 -1.87935604578637339e-15 -3 2 6.73289549113498254e-16 -3 3 143.901203683265294 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/4/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/4/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/4/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/4/perforated_wood_upper_log.txt deleted file mode 100644 index dd26e7f03028c75b7ad4e109521b16655778a8f4..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/4/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.134157 5.97128e-18 0 -5.97128e-18 0.0124762 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0130103 3.23521e-19 0 -3.23521e-19 0.204218 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --6.29971e-19 0.0620681 0 -0.0620681 -4.26503e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -300.976 23.6707 -7.60619e-15 -23.6707 321.705 -4.2414e-16 --1.87936e-15 6.7329e-16 143.901 - ------------------------- ---- Prestrain Output --- -Bhat_: 683.21 -484.954 -6.50079e-14 -Beff_: 2.40244 -1.68422 -4.12497e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=300.976 -q2=321.705 -q3=143.901 -q12=23.6707 -q13=-7.60619e-15 -q23=-4.2414e-16 -q_onetwo=23.670683 -b1=2.402443 -b2=-1.684218 -b3=-0.000000 -mu_gamma=143.901204 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.00976e+02 & 3.21705e+02 & 1.43901e+02 & 2.36707e+01 & -7.60619e-15 & -4.24140e-16 & 2.40244e+00 & -1.68422e+00 & -4.12497e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/5/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/5/BMatrix.txt deleted file mode 100644 index 49315929ffb0f1285aef019206f76b44532ea1ac..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.45121389338952334 -1 2 -1.61528346762097952 -1 3 -9.88204600694902147e-17 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/5/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/5/QMatrix.txt deleted file mode 100644 index 5bd5b338917e27ff4d84e2a1a4eb4f454b1c107f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 285.741904809618518 -1 2 21.6885814533246162 -1 3 8.69866245006845062e-15 -2 1 21.6885814533249679 -2 2 307.331680445533266 -2 3 3.56550726443582988e-15 -3 1 4.69687223142445376e-15 -3 2 3.95083271653717816e-16 -3 3 127.328917972637129 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/5/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/5/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/5/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/5/perforated_wood_upper_log.txt deleted file mode 100644 index 9b884e122046d98e9eaae0f90e43509c954507fd..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/5/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.12242 -5.90961e-18 0 --5.90961e-18 0.0123474 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0118873 -2.33307e-18 0 --2.33307e-18 0.207407 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --4.80897e-18 0.0751002 0 -0.0751002 1.34901e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -285.742 21.6886 8.69866e-15 -21.6886 307.332 3.56551e-15 -4.69687e-15 3.95083e-16 127.329 - ------------------------- ---- Prestrain Output --- -Bhat_: 665.381 -443.264 -1.70784e-15 -Beff_: 2.45121 -1.61528 -9.88205e-17 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=285.742 -q2=307.332 -q3=127.329 -q12=21.6886 -q13=8.69866e-15 -q23=3.56551e-15 -q_onetwo=21.688581 -b1=2.451214 -b2=-1.615283 -b3=-0.000000 -mu_gamma=127.328918 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 2.85742e+02 & 3.07332e+02 & 1.27329e+02 & 2.16886e+01 & 8.69866e-15 & 3.56551e-15 & 2.45121e+00 & -1.61528e+00 & -9.88205e-17 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/6/BMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/6/BMatrix.txt deleted file mode 100644 index 178608f68e5fd5c4a67d8cbbc40dbc4b1bf33cd5..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.53436002218693135 -1 2 -1.51902586283187846 -1 3 -3.49427326769003352e-16 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/6/QMatrix.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/6/QMatrix.txt deleted file mode 100644 index ec528163072730a8f8a05208d3996a971b25db58..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 261.043359656164114 -1 2 19.263569495098789 -1 3 1.29380013647040215e-14 -2 1 19.2635694950995493 -2 2 289.207872157255906 -2 3 1.15565109565229918e-14 -3 1 1.44054012425273714e-14 -3 2 3.89380368226444062e-15 -3 3 108.717343442563958 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/6/parameter.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/6/parameter.txt deleted file mode 100644 index 912bdbaa5ad1102b3520cf79a0d2781a8b2bef3c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/6/perforated_wood_upper_log.txt b/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/6/perforated_wood_upper_log.txt deleted file mode 100644 index dba0c00eda2479a6fc95bdffde53b21778d13908..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/perforated-bilayer/results_upper_5/6/perforated_wood_upper_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.102381 -9.27855e-18 0 --9.27855e-18 0.0119339 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0105774 -8.68316e-18 0 --8.68316e-18 0.211433 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.34791e-17 0.0896179 0 -0.0896179 -3.6337e-19 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -261.043 19.2636 1.2938e-14 -19.2636 289.208 1.15565e-14 -1.44054e-14 3.8938e-15 108.717 - ------------------------- ---- Prestrain Output --- -Bhat_: 632.316 -390.493 -7.39513e-15 -Beff_: 2.53436 -1.51903 -3.49427e-16 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=261.043 -q2=289.208 -q3=108.717 -q12=19.2636 -q13=1.2938e-14 -q23=1.15565e-14 -q_onetwo=19.263569 -b1=2.534360 -b2=-1.519026 -b3=-0.000000 -mu_gamma=108.717343 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 2.61043e+02 & 2.89208e+02 & 1.08717e+02 & 1.92636e+01 & 1.29380e-14 & 1.15565e-14 & 2.53436e+00 & -1.51903e+00 & -3.49427e-16 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/runWoodSimulations.py b/experiment/micro-problem/compWood/runWoodSimulations.py index 99fd093b823a9c5b1c3e54fdd436bff796482d9d..2cfe2d2cf70e88cc2d781b62ebd5bab428b12580 100644 --- a/experiment/micro-problem/compWood/runWoodSimulations.py +++ b/experiment/micro-problem/compWood/runWoodSimulations.py @@ -13,15 +13,22 @@ import codecs import sys import threading # ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -def SetParameterMaterialFunction(inputFunction, parameterName, parameterValue): - with open(inputFunction+'.py', 'r') as file: +def SetParameterMaterialFunction(parameterFile, parameterName, parameterValue): + """" + Overwrite parameter 'parameterName' in the 'parameterFile' + with new value: 'parameterValue. + """ + with open(parameterFile +'.py', 'r') as file: filedata = file.read() - filedata = re.sub('(?m)^'+str(parameterName)+'\s?=.*',str(parameterName)+' = '+str(parameterValue),filedata) - f = open(inputFunction+'.py','w') + filedata = re.sub('(?m)'+str(parameterName)+'\s?=.*',str(parameterName)+' = '+str(parameterValue),filedata) + f = open(parameterFile +'.py','w') f.write(filedata) f.close() + + + # Read effective quantites def ReadEffectiveQuantities(QFilePath = os.path.dirname(os.getcwd()) + '/outputs/QMatrix.txt', BFilePath = os.path.dirname(os.getcwd())+ '/outputs/BMatrix.txt'): # Read Output Matrices (effective quantities) @@ -186,13 +193,13 @@ materialFunctionParameter_2=[ ### DATASET Experiment 3 materialFunctionParameter_3=[ [ # Dataset Ratio r = 0.12 -[0.12, 0.0047, 17.32986047, 9.005046347, np.pi/12.0, 4.312080261], -[0.12, 0.0047, 17.32986047, 9.005046347, np.pi/6.0, 4.312080261], -[0.12, 0.0047, 17.32986047, 9.005046347, np.pi/4.0, 4.312080261], -[0.12, 0.0047, 17.32986047, 9.005046347, np.pi/3.0, 4.312080261], -[0.12, 0.0047, 17.32986047, 9.005046347, 5.0*np.pi/12.0, 4.312080261], -[0.12, 0.0047, 17.32986047, 9.005046347, np.pi/2.0, 4.312080261], -[0.12, 0.0047, 17.32986047, 9.005046347, 7.0*np.pi/12.0, 4.312080261] +# [0.12, 0.0047, 17.32986047, 9.005046347, np.pi/12.0, 4.312080261], +# [0.12, 0.0047, 17.32986047, 9.005046347, np.pi/6.0, 4.312080261], +[0.12, 0.0047, 17.32986047, 9.005046347, np.pi/4.0, 4.312080261] +# [0.12, 0.0047, 17.32986047, 9.005046347, np.pi/3.0, 4.312080261], +# [0.12, 0.0047, 17.32986047, 9.005046347, 5.0*np.pi/12.0, 4.312080261], +# [0.12, 0.0047, 17.32986047, 9.005046347, np.pi/2.0, 4.312080261], +# [0.12, 0.0047, 17.32986047, 9.005046347, 7.0*np.pi/12.0, 4.312080261] ] ] # ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ @@ -204,15 +211,21 @@ materialFunctionParameter_3=[ # 1. material, 2. material-parameters, 3. ExperimentPathExtension 4. Perforation 5. perforatedLayer 6. Dataset-numbers -scenarios = [["wood_european_beech" , materialFunctionParameter_1 , "/wood-bilayer" , False , '' , [5]], - # ["wood_european_beech" , materialFunctionParameter_1 , "/wood-bilayer" , False , '' , [0, 1, 2, 3, 4, 5]], - ["perforated_wood_upper" , materialFunctionParameter_2 , "/perforated-bilayer" , True , 'upper' , [0, 1, 2, 3, 4, 5]], - ["perforated_wood_lower" , materialFunctionParameter_2 , "/perforated-bilayer" , True , 'lower' , [0, 1, 2, 3, 4, 5]], +# scenarios = [["wood_european_beech" , materialFunctionParameter_1 , "/wood-bilayer" , False , '' , [5]], +# # ["wood_european_beech" , materialFunctionParameter_1 , "/wood-bilayer" , False , '' , [0, 1, 2, 3, 4, 5]], +# ["perforated_wood_upper" , materialFunctionParameter_2 , "/perforated-bilayer" , True , 'upper' , [0, 1, 2, 3, 4, 5]], +# ["perforated_wood_lower" , materialFunctionParameter_2 , "/perforated-bilayer" , True , 'lower' , [0, 1, 2, 3, 4, 5]], +# ["wood_european_beech" , materialFunctionParameter_3 , "/wood-bilayer-rotatedLayer" , False , '' , [0]] +# ] + +scenarios = [ + ["wood_european_beech" , materialFunctionParameter_3 , "/wood-bilayer-rotatedLayer" , False , '' , [0]], ["wood_european_beech" , materialFunctionParameter_3 , "/wood-bilayer-rotatedLayer" , False , '' , [0]] ] + print('sys.argv[0]', sys.argv[0]) print('sys.argv[1]', sys.argv[1]) print('sys.argv[2]', sys.argv[2]) @@ -242,7 +255,7 @@ for slurm_array_task_id in scenarioNumbers: if CONTAINER: #--- Taurus version # print('CONTAINER SETUP USED') - pythonPath = "/dune/dune-microstructure/experiment/compWood" + pathExtension + pythonPath = "/dune/dune-microstructure/experiment/micro-problem/compWood" + pathExtension # instrumentedPath = "/dune/dune-gfe/instrumented" # resultPath = "/dune/dune-gfe/outputs" resultBasePath = "results_" + scenarios[slurm_array_task_id][0] @@ -255,12 +268,12 @@ for slurm_array_task_id in scenarioNumbers: else : #--- Local version # print('LOCAL SETUP USED') - pythonPath = "/home/klaus/Desktop/Dune_release/dune-microstructure/experiment/compWood" + pathExtension + pythonPath = "/home/klaus/Desktop/Dune_TestTest/dune-microstructure/experiment/micro-problem/compWood" + pathExtension # instrumentedPath = '/home/klaus/Desktop/harmonicmapBenchmark/dune-gfe/instrumented' # resultPath = '/home/klaus/Desktop/harmonicmapBenchmark/dune-gfe/outputs' + "_" + scenarios[slurm_array_task_id][0] - resultBasePath = '/home/klaus/Desktop/Dune_release/dune-microstructure/experiment/compWood' + pathExtension + resultBasePath = '/home/klaus/Desktop/Dune_TestTest/dune-microstructure/experiment/micro-problem/compWood' + pathExtension - executablePath = '/home/klaus/Desktop/Dune_release/dune-microstructure/build-cmake/src' + executablePath = '/home/klaus/Desktop/Dune_TestTest/dune-microstructure/build-cmake/src' try: os.mkdir(resultBasePath) @@ -269,7 +282,8 @@ for slurm_array_task_id in scenarioNumbers: print(error) - executable = executablePath + '/Cell-Problem' + # executable = executablePath + '/Cell-Problem' + executable = executablePath + '/micro-problem' gamma = 1.0 @@ -318,6 +332,7 @@ for slurm_array_task_id in scenarioNumbers: SetParameterMaterialFunction(pythonPath + "/" + pythonModule, "param_omega_flat",materialFunctionParameter[dataset_number][i][2]) SetParameterMaterialFunction(pythonPath + "/" + pythonModule, "param_omega_target",materialFunctionParameter[dataset_number][i][3]) SetParameterMaterialFunction(pythonPath + "/" + pythonModule, "param_theta",materialFunctionParameter[dataset_number][i][4]) + if perforation: SetParameterMaterialFunction(pythonPath + "/" + pythonModule, "param_beta",materialFunctionParameter[dataset_number][i][5]) diff --git a/experiment/micro-problem/compWood/wood-bilayer-rotatedLayer/wood_european_beech.py b/experiment/micro-problem/compWood/wood-bilayer-rotatedLayer/wood_european_beech.py index 2c039df3abb94109b8d79f03b9bedef185377270..c980b745e1ff2e18827512bfccfc755c9d683471 100644 --- a/experiment/micro-problem/compWood/wood-bilayer-rotatedLayer/wood_european_beech.py +++ b/experiment/micro-problem/compWood/wood-bilayer-rotatedLayer/wood_european_beech.py @@ -25,169 +25,169 @@ parameterSet.baseName= 'wood_european_beech' #(needed for Output-Filename) #--------------------------------------------------------------- # Wooden bilayer, https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6191116/#pone.0205607.ref015 -#--- define indicator function -# x[0] : y1-component -1/2 to 1/2 -# x[1] : y2-component -1/2 to 1/2 -# x[2] : x3-component range -1/2 to 1/2 -#--- define indicator function -def indicatorFunction(x): - factor=1 - if (x[2]>=(0.5-param_r)): - return 1 #Phase1 - else : - return 2 #Phase2 - -# --- Number of material phases -parameterSet.Phases=2 - -# Parameters of the model -# -- (thickness upper layer) / (thickness) -param_r = 0.12 -# -- thickness [meter] -param_h = 0.0047 -# -- moisture content in the flat state [%] -param_omega_flat = 17.32986047 -# -- moisture content in the target state [%] -param_omega_target = 9.005046347 -# -- Drehwinkel -param_theta = 1.832595714594046 - -# -# -# -# -- increment of the moisture content -delta_omega=param_omega_target-param_omega_flat -# moisture content for material law -omega=param_omega_target - -# --- Material properties from https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6191116/#pone.0205607.ref015 -# --- for European beech, moisture content omega = 15% -# --- L=direction orthogonal to layering and fibres = orthogonal to wood stem cross-section -# --- T=tangential zu layering -# --- R=orthogonal zu layering -# --- in MPa -# --- Properties are defined by affine function in dependence of moisture content omega via property = b_0+b_1 \omega -# --- coefficients of affine function are contained in the following array -# --- data taken from http://dx.doi.org/10.1016/j.cma.2014.10.031 - -properties_coefficients=np.array([ - # [b_0, b_1] - [2565.6,-59.7], # E_R [MPa] - [885.4, -23.4], # E_T [MPa] - [17136.7,-282.4], # E_L [MPa] - [667.8, -15.19], # G_RT [MPa] - [1482, -15.26], # G_RL [MPa] - [1100, -17.72], # G_TL [MPa] - [0.2933, -0.001012], # nu_TR [1] - [0.383, -0.008722], # nu_LR [1] - [0.3368, -0.009071] # nu_LT [1] - ]) -# Compute actual material properties -E_R = properties_coefficients[0,0]+properties_coefficients[0,1]*omega -E_T = properties_coefficients[1,0]+properties_coefficients[1,1]*omega -E_L = properties_coefficients[2,0]+properties_coefficients[2,1]*omega -G_RT = properties_coefficients[3,0]+properties_coefficients[3,1]*omega -G_LR = properties_coefficients[4,0]+properties_coefficients[4,1]*omega -G_LT = properties_coefficients[5,0]+properties_coefficients[5,1]*omega -nu_TR = properties_coefficients[6,0]+properties_coefficients[6,1]*omega -nu_LR = properties_coefficients[7,0]+properties_coefficients[7,1]*omega -nu_LT = properties_coefficients[8,0]+properties_coefficients[8,1]*omega -# Compute the remaining Poisson ratios -nu_TL=nu_LT*E_T/E_L -nu_RT=nu_TR*E_R/E_T -nu_RL=nu_LR*E_R/E_L -# -# --- differential swelling strain -# --- relation to swelling strain eps: eps=alpha* delta_omega with delta_omega = change of water content in % -alpha_L=0.00011 # PLOS paper -alpha_R=0.00191 # PLOS paper -alpha_T=0.00462 # PLOS paper -# Umrechnen -#alpha_L=(1-1/(1+delta_omega*alpha_L))/delta_omega -#alpha_R=(1-1/(1+delta_omega*alpha_R))/delta_omega -#alpha_T=(1-1/(1+delta_omega*alpha_T))/delta_omega -# --- define geometry - - - -# # --- PHASE 1 -# # y_1-direction: L -# # y_2-direction: T -# # x_3-direction: R -# # phase1_type="orthotropic" -# # materialParameters_phase1 = [E_L,E_T,E_R,G_TL,G_RT,G_RL,nu_LT,nu_LR,nu_TR] -# parameterSet.phase1_type="general_anisotropic" -# [E_1,E_2,E_3]=[E_L,E_T,E_R] -# [nu_12,nu_13,nu_23]=[nu_LT,nu_LR,nu_TR] -# [nu_21,nu_31,nu_32]=[nu_TL,nu_RL,nu_RT] -# [G_12,G_31,G_23]=[G_LT,G_LR,G_RT] -# compliance_S=np.array([[1/E_1, -nu_21/E_2, -nu_31/E_3, 0.0, 0.0, 0.0], -# [-nu_12/E_1, 1/E_2, -nu_32/E_3, 0.0, 0.0, 0.0], -# [-nu_13/E_1, -nu_23/E_2, 1/E_3, 0.0, 0.0, 0.0], -# [0.0, 0.0, 0.0, 1/G_23, 0.0, 0.0], -# [0.0, 0.0, 0.0, 0.0, 1/G_31, 0.0], -# [0.0, 0.0, 0.0, 0.0, 0.0, 1/G_12]]); -# materialParameters_phase1 = compliance_S - -# def prestrain_phase1(x): -# # hB=delta_omega * alpha with delta_omega increment of moisture content and alpha swelling factor. -# return [[1/param_h*delta_omega*alpha_L, 0, 0], [0,1/param_h*delta_omega*alpha_T,0], [0,0,1/param_h*delta_omega*alpha_R]] - - -#Nun mit R und T vertauscht: - -# y_1-direction: L -# y_2-direction: R -# x_3-direction: T -# phase1_type="orthotropic" -# materialParameters_phase1 = [E_L,E_T,E_R,G_TL,G_RT,G_RL,nu_LT,nu_LR,nu_TR] -parameterSet.phase1_type="general_anisotropic" -[E_1,E_2,E_3]=[E_L,E_R,E_T] -[nu_12,nu_13,nu_23]=[nu_LR,nu_LT,nu_RT] -[nu_21,nu_31,nu_32]=[nu_RL,nu_TL,nu_TR] -[G_12,G_31,G_23]=[G_LR,G_LT,G_RT] -compliance_S=np.array([[1/E_1, -nu_21/E_2, -nu_31/E_3, 0.0, 0.0, 0.0], - [-nu_12/E_1, 1/E_2, -nu_32/E_3, 0.0, 0.0, 0.0], - [-nu_13/E_1, -nu_23/E_2, 1/E_3, 0.0, 0.0, 0.0], - [0.0, 0.0, 0.0, 1/G_23, 0.0, 0.0], - [0.0, 0.0, 0.0, 0.0, 1/G_31, 0.0], - [0.0, 0.0, 0.0, 0.0, 0.0, 1/G_12]]); -materialParameters_phase1 = compliance_S - -def prestrain_phase1(x): - # hB=delta_omega * alpha with delta_omega increment of moisture content and alpha swelling factor. - return [[1/param_h*delta_omega*alpha_L, 0, 0], [0,1/param_h*delta_omega*alpha_R,0], [0,0,1/param_h*delta_omega*alpha_T]] - - - -# --- PHASE 2 -# y_1-direction: R -# y_2-direction: L -# x_3-direction: T -parameterSet.phase2_type="general_anisotropic" -[E_1,E_2,E_3]=[E_R,E_L,E_T] -[nu_12,nu_13,nu_23]=[nu_RL,nu_RT,nu_LT] -[nu_21,nu_31,nu_32]=[nu_LR,nu_TR,nu_TL] -[G_12,G_31,G_23]=[G_LR,G_RT,G_LT] -compliance_S=np.array([[1/E_1, -nu_21/E_2, -nu_31/E_3, 0.0, 0.0, 0.0], - [-nu_12/E_1, 1/E_2, -nu_32/E_3, 0.0, 0.0, 0.0], - [-nu_13/E_1, -nu_23/E_2, 1/E_3, 0.0, 0.0, 0.0], - [0.0, 0.0, 0.0, 1/G_23, 0.0, 0.0], - [0.0, 0.0, 0.0, 0.0, 1/G_31, 0.0], - [0.0, 0.0, 0.0, 0.0, 0.0, 1/G_12]]); -materialParameters_phase2 = compliance_S -def prestrain_phase2(x): - return [[1/param_h*delta_omega*alpha_R, 0, 0], [0,1/param_h*delta_omega*alpha_L,0], [0,0,1/param_h*delta_omega*alpha_T]] - -#Rotation um 2. Achse (= L) -# parameterSet.phase2_axis = 1 -parameterSet.phase2_axis = 2 -# phase2_angle = param_theta -# -- Drehwinkel -parameterSet.phase2_angle = param_theta -# parameterSet.phase2_angle = 4*np.pi/12 +class Microstructure: + def __init__(self): + # self.macroPoint = macroPoint + self.gamma = 1.0 #in the future this might change depending on macroPoint. + self.phases = 2 #in the future this might change depending on macroPoint. + + + # Parameters of the model + # -- (thickness upper layer) / (thickness) + self.param_r = 0.12 + # -- thickness [meter] + self.param_h = 0.0047 + # -- moisture content in the flat state [%] + self.param_omega_flat = 17.32986047 + # -- moisture content in the target state [%] + self.param_omega_target = 9.005046347 + # -- Drehwinkel + param_theta = 0.7853981633974483 + # -- increment of the moisture content + self.delta_omega=self.param_omega_target-self.param_omega_flat + # moisture content for material law + self.omega=self.param_omega_target + + # --- Material properties from https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6191116/#pone.0205607.ref015 + # --- for European beech, moisture content omega = 15% + # --- L=direction orthogonal to layering and fibres = orthogonal to wood stem cross-section + # --- T=tangential zu layering + # --- R=orthogonal zu layering + # --- in MPa + # --- Properties are defined by affine function in dependence of moisture content omega via property = b_0+b_1 \omega + # --- coefficients of affine function are contained in the following array + # --- data taken from http://dx.doi.org/10.1016/j.cma.2014.10.031 + self.properties_coefficients=np.array([ + # [b_0, b_1] + [2565.6,-59.7], # E_R [MPa] + [885.4, -23.4], # E_T [MPa] + [17136.7,-282.4], # E_L [MPa] + [667.8, -15.19], # G_RT [MPa] + [1482, -15.26], # G_RL [MPa] + [1100, -17.72], # G_TL [MPa] + [0.2933, -0.001012], # nu_TR [1] + [0.383, -0.008722], # nu_LR [1] + [0.3368, -0.009071] # nu_LT [1] + ]) + + # Compute actual material properties + self.E_R = self.properties_coefficients[0,0]+self.properties_coefficients[0,1]*self.omega + self.E_T = self.properties_coefficients[1,0]+self.properties_coefficients[1,1]*self.omega + self.E_L = self.properties_coefficients[2,0]+self.properties_coefficients[2,1]*self.omega + self.G_RT = self.properties_coefficients[3,0]+self.properties_coefficients[3,1]*self.omega + self.G_LR = self.properties_coefficients[4,0]+self.properties_coefficients[4,1]*self.omega + self.G_LT = self.properties_coefficients[5,0]+self.properties_coefficients[5,1]*self.omega + self.nu_TR = self.properties_coefficients[6,0]+self.properties_coefficients[6,1]*self.omega + self.nu_LR = self.properties_coefficients[7,0]+self.properties_coefficients[7,1]*self.omega + self.nu_LT = self.properties_coefficients[8,0]+self.properties_coefficients[8,1]*self.omega + # Compute the remaining Poisson ratios + self.nu_TL=self.nu_LT*self.E_T/self.E_L + self.nu_RT=self.nu_TR*self.E_R/self.E_T + self.nu_RL=self.nu_LR*self.E_R/self.E_L + # + # --- differential swelling strain + # --- relation to swelling strain eps: eps=alpha* delta_omega with delta_omega = change of water content in % + self.alpha_L=0.00011 # PLOS paper + self.alpha_R=0.00191 # PLOS paper + self.alpha_T=0.00462 # PLOS paper + # Umrechnen + #alpha_L=(1-1/(1+delta_omega*alpha_L))/delta_omega + #alpha_R=(1-1/(1+delta_omega*alpha_R))/delta_omega + #alpha_T=(1-1/(1+delta_omega*alpha_T))/delta_omega + + + + # # --- PHASE 1 + # # y_1-direction: L + # # y_2-direction: T + # # x_3-direction: R + # # phase1_type="orthotropic" + # # materialParameters_phase1 = [E_L,E_T,E_R,G_TL,G_RT,G_RL,nu_LT,nu_LR,nu_TR] + # parameterSet.phase1_type="general_anisotropic" + # [E_1,E_2,E_3]=[E_L,E_T,E_R] + # [nu_12,nu_13,nu_23]=[nu_LT,nu_LR,nu_TR] + # [nu_21,nu_31,nu_32]=[nu_TL,nu_RL,nu_RT] + # [G_12,G_31,G_23]=[G_LT,G_LR,G_RT] + # compliance_S=np.array([[1/E_1, -nu_21/E_2, -nu_31/E_3, 0.0, 0.0, 0.0], + # [-nu_12/E_1, 1/E_2, -nu_32/E_3, 0.0, 0.0, 0.0], + # [-nu_13/E_1, -nu_23/E_2, 1/E_3, 0.0, 0.0, 0.0], + # [0.0, 0.0, 0.0, 1/G_23, 0.0, 0.0], + # [0.0, 0.0, 0.0, 0.0, 1/G_31, 0.0], + # [0.0, 0.0, 0.0, 0.0, 0.0, 1/G_12]]); + # materialParameters_phase1 = compliance_S + + # def prestrain_phase1(x): + # # hB=delta_omega * alpha with delta_omega increment of moisture content and alpha swelling factor. + # return [[1/param_h*delta_omega*alpha_L, 0, 0], [0,1/param_h*delta_omega*alpha_T,0], [0,0,1/param_h*delta_omega*alpha_R]] + + + #Nun mit R und T vertauscht: + + # y_1-direction: L + # y_2-direction: R + # x_3-direction: T + # phase1_type="orthotropic" + # materialParameters_phase1 = [E_L,E_T,E_R,G_TL,G_RT,G_RL,nu_LT,nu_LR,nu_TR] + self.phase1_type="general_anisotropic" + [E_1,E_2,E_3]=[self.E_L,self.E_R,self.E_T] + [nu_12,nu_13,nu_23]=[self.nu_LR,self.nu_LT,self.nu_RT] + [nu_21,nu_31,nu_32]=[self.nu_RL,self.nu_TL,self.nu_TR] + [G_12,G_31,G_23]=[self.G_LR,self.G_LT,self.G_RT] + compliance_S=np.array([[1/E_1, -nu_21/E_2, -nu_31/E_3, 0.0, 0.0, 0.0], + [-nu_12/E_1, 1/E_2, -nu_32/E_3, 0.0, 0.0, 0.0], + [-nu_13/E_1, -nu_23/E_2, 1/E_3, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 1/G_23, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 1/G_31, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 1/G_12]]); + self.materialParameters_phase1 = compliance_S + + # --- PHASE 2 + # y_1-direction: R + # y_2-direction: L + # x_3-direction: T + self.phase2_type="general_anisotropic" + [E_1,E_2,E_3]=[self.E_R,self.E_L,self.E_T] + [nu_12,nu_13,nu_23]=[self.nu_RL,self.nu_RT,self.nu_LT] + [nu_21,nu_31,nu_32]=[self.nu_LR,self.nu_TR,self.nu_TL] + [G_12,G_31,G_23]=[self.G_LR,self.G_RT,self.G_LT] + compliance_S=np.array([[1/E_1, -nu_21/E_2, -nu_31/E_3, 0.0, 0.0, 0.0], + [-nu_12/E_1, 1/E_2, -nu_32/E_3, 0.0, 0.0, 0.0], + [-nu_13/E_1, -nu_23/E_2, 1/E_3, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 1/G_23, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 1/G_31, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 1/G_12]]); + self.materialParameters_phase2 = compliance_S + + #Rotation um 3. Achse (= T) note that axis starts from 0 + # parameterSet.phase2_axis = 1 + self.phase2_axis = 2 + # phase2_angle = param_theta + # -- Drehwinkel + self.phase2_angle = param_theta + # parameterSet.phase2_angle = 4*np.pi/12 + + + def prestrain_phase1(self,x): + # hB=delta_omega * alpha with delta_omega increment of moisture content and alpha swelling factor. + return [[1/self.param_h*self.delta_omega*self.alpha_L, 0, 0], [0,1/self.param_h*self.delta_omega*self.alpha_R,0], [0,0,1/self.param_h*self.delta_omega*self.alpha_T]] + + def prestrain_phase2(self,x): + return [[1/self.param_h*self.delta_omega*self.alpha_R, 0, 0], [0,1/self.param_h*self.delta_omega*self.alpha_L,0], [0,0,1/self.param_h*self.delta_omega*self.alpha_T]] + + #--- define indicator function + # x[0] : y1-component -1/2 to 1/2 + # x[1] : y2-component -1/2 to 1/2 + # x[2] : x3-component range -1/2 to 1/2 + #--- define indicator function + def indicatorFunction(self,x): + factor=1 + if (x[2]>=(0.5-self.param_r)): + return 1 #Phase1 + else : + return 2 #Phase2 + # # --- PHASE 3 = Phase 1 gedreht # # y_1-direction: L @@ -204,36 +204,33 @@ parameterSet.phase2_angle = param_theta -# --- Choose scale ratio gamma: -parameterSet.gamma=1.0 +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + + ############################################# # Grid parameters ############################################# -## numLevels : Number of Levels on which solution is computed. starting with a 2x2x2 cube mesh. -## {start,finish} computes on all grid from 2^(start) to 2^finish refinement -#---------------------------------------------------- -# parameterSet.numLevels= '3 3' # computes all levels from first to second entry -parameterSet.numLevels= '4 4' # computes all levels from first to second entry - +parameterSet.microGridLevel = 4 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER (default), #4: UMFPACK - SOLVER +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) @@ -241,35 +238,16 @@ parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for sol # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - +parameterSet.MaterialSubsamplingRefinement= 2 # --- Write Correctos to VTK-File: -parameterSet.write_VTK = 0 - -# The grid can be refined several times for a higher resolution in the VTK-file. -parameterSet.subsamplingRefinement = 0 +parameterSet.writeCorrectorsVTK = 0 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = True - - -# The assembly uses a cache for element matrices this can be turned on/off -# parameterSet.cacheElementMatrices = 1 - -# --- (Optional output) L2Error, integral mean: -#parameterSet.write_L2Error = 1 -#parameterSet.write_IntegralMean = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 - -# --- Write corrector-coefficients to log-File: -#parameterSet.write_corrector_phi1 = 1 -#parameterSet.write_corrector_phi2 = 1 -#parameterSet.write_corrector_phi3 = 1 - -# --- Print Condition number of matrix (can be expensive): -#parameterSet.print_conditionNumber= 1 #(default=false) - -# --- write effective quantities to Matlab-folder for symbolic minimization: -parameterSet.write_toMATLAB = 1 # writes effective quantities to .txt-files QMatrix.txt and BMatrix.txt +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. \ No newline at end of file diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/0/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/0/BMatrix.txt deleted file mode 100644 index 1d064c0444d7f52f7eb82a1300f5de9103d808f2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.30957793337868611 -1 2 -0.16799616054069974 -1 3 -3.49364675888413947e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/0/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/0/QMatrix.txt deleted file mode 100644 index c5af3f6a33ca9875c9df9c79c0185ad2e74ac759..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 291.65125028076119 -1 2 31.5914277949655009 -1 3 -5.63265175255268547e-29 -2 1 31.5914277949653055 -2 2 783.465935671704187 -2 3 2.90083568223605464e-30 -3 1 -2.02055995549057814e-28 -3 2 -7.37074541371326025e-29 -3 3 209.608425967589852 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/0/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/0/parameter.txt deleted file mode 100644 index bd45649a7a6806013717afa08fcd0b14ae88daad..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.32986047 -omega_target = 14.70179844 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/0/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/0/wood_european_beech_log.txt deleted file mode 100644 index 99f7b04aed50a6f5f8b809662c422788b272d41a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/0/wood_european_beech_log.txt +++ /dev/null @@ -1 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/1/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/1/BMatrix.txt deleted file mode 100644 index cad9d10bd080653dabf6065da16c86bc4d431be6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.84025869320214608 -1 2 -0.241409881003110893 -1 3 8.74700097788480588e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/1/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/1/QMatrix.txt deleted file mode 100644 index 3ae1d7f010ee58a0ffa14d0b96dab839e176ee0c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 301.544403021167 -1 2 34.0854771606682121 -1 3 2.59461282107848414e-30 -2 1 34.0854771606677929 -2 2 803.183286976336035 -2 3 -1.74628882882451643e-30 -3 1 1.95447414833141715e-28 -3 2 4.5428166061398123e-29 -3 3 212.348100666669637 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/1/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/1/parameter.txt deleted file mode 100644 index 3f5914283d52269acd40f7348784827fd093e61e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.32986047 -omega_target = 13.6246 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/1/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/1/wood_european_beech_log.txt deleted file mode 100644 index 4cf884733e0df42685175a7881cba84c1355323b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/1/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.198639 5.89621e-31 0 -5.89621e-31 0.00776103 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00776103 -2.90924e-31 0 --2.90924e-31 0.0535593 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.39735e-31 1.27546e-17 0 -1.27546e-17 1.38333e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -301.544 34.0855 2.59461e-30 -34.0855 803.183 -1.74629e-30 -1.95447e-28 4.54282e-29 212.348 - ------------------------- ---- Prestrain Output --- -Bhat_: 546.691 -131.17 2.20612e-27 -Beff_: 1.84026 -0.24141 8.747e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=301.544 -q2=803.183 -q3=212.348 -q12=34.0855 -q13=2.59461e-30 -q23=-1.74629e-30 -q_onetwo=34.085477 -b1=1.840259 -b2=-0.241410 -b3=0.000000 -mu_gamma=212.348101 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.01544e+02 & 8.03183e+02 & 2.12348e+02 & 3.40855e+01 & 2.59461e-30 & -1.74629e-30 & 1.84026e+00 & -2.41410e-01 & 8.74700e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/2/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/2/BMatrix.txt deleted file mode 100644 index 9dcf95339cd4cafbf49af7ed31be99b5012d77e2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.42497835969141029 -1 2 -0.325737200491554135 -1 3 1.4268463918470752e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/2/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/2/QMatrix.txt deleted file mode 100644 index 521bd8cd90125114b2c3a4a3a2f70f6e6a424acb..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 312.519242246794022 -1 2 36.9667738045496321 -1 3 9.85074647955183394e-30 -2 1 36.9667738045513019 -2 2 825.119122698170941 -2 3 1.86832537975061363e-29 -3 1 2.29567371412312849e-28 -3 2 5.57429379889294185e-29 -3 3 215.386506346531121 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/2/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/2/parameter.txt deleted file mode 100644 index b2961f62035e900f0367c01d0b8bc85c54fa966e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.32986047 -omega_target = 12.42994508 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/2/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/2/wood_european_beech_log.txt deleted file mode 100644 index ec9bc460e3b9f03997cdb2df866f09537a4db5f1..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/2/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.196895 3.87756e-30 0 -3.87756e-30 0.00811353 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00811353 7.30271e-31 0 -7.30271e-31 0.0534549 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.68676e-31 5.46724e-18 0 -5.46724e-18 1.70292e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -312.519 36.9668 9.85075e-30 -36.9668 825.119 1.86833e-29 -2.29567e-28 5.57429e-29 215.387 - ------------------------- ---- Prestrain Output --- -Bhat_: 745.811 -179.128 3.61177e-27 -Beff_: 2.42498 -0.325737 1.42685e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=312.519 -q2=825.119 -q3=215.387 -q12=36.9668 -q13=9.85075e-30 -q23=1.86833e-29 -q_onetwo=36.966774 -b1=2.424978 -b2=-0.325737 -b3=0.000000 -mu_gamma=215.386506 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.12519e+02 & 8.25119e+02 & 2.15387e+02 & 3.69668e+01 & 9.85075e-30 & 1.86833e-29 & 2.42498e+00 & -3.25737e-01 & 1.42685e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/3/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/3/BMatrix.txt deleted file mode 100644 index cd96ffc0d92e915ec8499455c65b7511614bfa4d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.78145732352313413 -1 2 -0.378880335298565851 -1 3 4.10783387181023803e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/3/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/3/QMatrix.txt deleted file mode 100644 index 87467ee032ec1860fc5960c7d00239e733f6a093..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 319.248761807926712 -1 2 38.7929603649761248 -1 3 -1.94726924817104643e-29 -2 1 38.7929603649761248 -2 2 838.600683836862345 -2 3 -1.91100398731823478e-30 -3 1 4.51418520301082312e-28 -3 2 6.33065043420398845e-29 -3 3 217.248762862696651 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/3/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/3/parameter.txt deleted file mode 100644 index c994c4c8a64b05115e74b088be6f4090c312fa2c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.32986047 -omega_target = 11.69773413 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/3/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/3/wood_european_beech_log.txt deleted file mode 100644 index 84ccce1188b2f1719bd1940c7435f12ce40246ad..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/3/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.195885 0 0 -0 0.00832989 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00832989 0 0 -0 0.053395 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -3.94138e-31 -1.95736e-18 0 --1.95736e-18 4.47411e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -319.249 38.793 -1.94727e-29 -38.793 838.601 -1.911e-30 -4.51419e-28 6.33065e-29 217.249 - ------------------------- ---- Prestrain Output --- -Bhat_: 873.279 -209.828 1.01558e-26 -Beff_: 2.78146 -0.37888 4.10783e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=319.249 -q2=838.601 -q3=217.249 -q12=38.793 -q13=-1.94727e-29 -q23=-1.911e-30 -q_onetwo=38.792960 -b1=2.781457 -b2=-0.378880 -b3=0.000000 -mu_gamma=217.248763 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.19249e+02 & 8.38601e+02 & 2.17249e+02 & 3.87930e+01 & -1.94727e-29 & -1.91100e-30 & 2.78146e+00 & -3.78880e-01 & 4.10783e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/4/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/4/BMatrix.txt deleted file mode 100644 index 4507389cbfbe6c35f7899a726a6b450d9a0920a0..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.05128342151052845 -1 2 -0.419963670790280019 -1 3 -6.7274670078047127e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/4/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/4/QMatrix.txt deleted file mode 100644 index 5e78d05f7696a4476977c6fca6b886508514fcc7..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 324.362101137586365 -1 2 40.2107071602111006 -1 3 1.44978228423637953e-29 -2 1 40.2107071602082726 -2 2 848.859633290990359 -2 3 -4.10049744459486385e-30 -3 1 -6.51075415763388712e-28 -3 2 -9.66795967527863043e-29 -3 3 218.663197663963047 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/4/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/4/parameter.txt deleted file mode 100644 index 8b5b4696dc1893163238150d0242c8f44c80dcf2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.32986047 -omega_target = 11.14159987 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/4/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/4/wood_european_beech_log.txt deleted file mode 100644 index abbd2b7ae6a3221ec01b761cf14ff43701dc3e26..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/4/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.195147 0 0 -0 0.00849438 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00849438 0 0 -0 0.0533516 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --5.8642e-31 -5.62466e-18 0 --5.62466e-18 -6.55118e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -324.362 40.2107 1.44978e-29 -40.2107 848.86 -4.1005e-30 --6.51075e-28 -9.66796e-29 218.663 - ------------------------- ---- Prestrain Output --- -Bhat_: 972.834 -233.796 -1.66565e-26 -Beff_: 3.05128 -0.419964 -6.72747e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=324.362 -q2=848.86 -q3=218.663 -q12=40.2107 -q13=1.44978e-29 -q23=-4.1005e-30 -q_onetwo=40.210707 -b1=3.051283 -b2=-0.419964 -b3=-0.000000 -mu_gamma=218.663198 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.24362e+02 & 8.48860e+02 & 2.18663e+02 & 4.02107e+01 & 1.44978e-29 & -4.10050e-30 & 3.05128e+00 & -4.19964e-01 & -6.72747e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/5/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/5/BMatrix.txt deleted file mode 100644 index a9f764bfc92f2b939450c022f98313e98d0677f9..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.84294705196740471 -1 2 -0.544690224125797706 -1 3 2.61477368966447197e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/5/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/5/QMatrix.txt deleted file mode 100644 index 09a7dc9867dfcfc37c8cdb2d15732ac768cf706c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 339.46321808419026 -1 2 44.5491962625941937 -1 3 2.20634534429001739e-30 -2 1 44.5491962625928366 -2 2 879.230358021768325 -2 3 -8.91455193358519859e-30 -3 1 2.9028399508855626e-28 -3 2 8.47924719082015293e-29 -3 3 222.836628592952195 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/5/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/5/parameter.txt deleted file mode 100644 index a14b4fa7d671b0f483d3d229ad7d92fa8f488141..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.32986047 -omega_target = 9.500670278 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/5/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/5/wood_european_beech_log.txt deleted file mode 100644 index f2ffc0033fe36e7972dacd86e69544a8039d36e5..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/5/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.193101 -1.48756e-30 0 --1.48756e-30 0.00898057 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00898057 -2.04379e-31 0 --2.04379e-31 0.053233 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.86632e-31 -4.31564e-18 0 --4.31564e-18 2.11692e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -339.463 44.5492 2.20635e-30 -44.5492 879.23 -8.91455e-30 -2.90284e-28 8.47925e-29 222.837 - ------------------------- ---- Prestrain Output --- -Bhat_: 1280.27 -307.708 6.89603e-27 -Beff_: 3.84295 -0.54469 2.61477e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=339.463 -q2=879.23 -q3=222.837 -q12=44.5492 -q13=2.20635e-30 -q23=-8.91455e-30 -q_onetwo=44.549196 -b1=3.842947 -b2=-0.544690 -b3=0.000000 -mu_gamma=222.836629 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.39463e+02 & 8.79230e+02 & 2.22837e+02 & 4.45492e+01 & 2.20635e-30 & -8.91455e-30 & 3.84295e+00 & -5.44690e-01 & 2.61477e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/6/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/6/BMatrix.txt deleted file mode 100644 index 7c61f6e1f77e064db13e9f5a8a8cf9c5a679891b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.08079095797733249 -1 2 -0.583363076166479533 -1 3 2.85775978363957378e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/6/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/6/QMatrix.txt deleted file mode 100644 index 582af45ebbf97a6dd09cd0bb32f3b7bb1c2c5a32..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 344.029188416625061 -1 2 45.9054122338217852 -1 3 9.47865681429621997e-30 -2 1 45.90541223382656 -2 2 888.433975916668828 -2 3 -3.61535569160371914e-30 -3 1 6.40920762052510879e-29 -3 2 -5.71160128097841747e-29 -3 3 224.097165457464655 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/6/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/6/parameter.txt deleted file mode 100644 index e6e12711388c45f982819a5a91d18faea6c2bd00..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.12 -h = 0.0047 -omega_flat = 17.32986047 -omega_target = 9.005046347 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_0/6/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_0/6/wood_european_beech_log.txt deleted file mode 100644 index 8d0d6af46a3c45077965ffd613e028d77551768f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_0/6/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.192519 7.20329e-32 0 -7.20329e-32 0.00912767 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00912767 -2.33924e-31 0 --2.33924e-31 0.0532 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.59148e-31 -1.86835e-18 0 --1.86835e-18 2.18407e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -344.029 45.9054 9.47866e-30 -45.9054 888.434 -3.61536e-30 -6.40921e-29 -5.7116e-29 224.097 - ------------------------- ---- Prestrain Output --- -Bhat_: 1377.13 -330.949 6.69902e-27 -Beff_: 4.08079 -0.583363 2.85776e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=344.029 -q2=888.434 -q3=224.097 -q12=45.9054 -q13=9.47866e-30 -q23=-3.61536e-30 -q_onetwo=45.905412 -b1=4.080791 -b2=-0.583363 -b3=0.000000 -mu_gamma=224.097165 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.44029e+02 & 8.88434e+02 & 2.24097e+02 & 4.59054e+01 & 9.47866e-30 & -3.61536e-30 & 4.08079e+00 & -5.83363e-01 & 2.85776e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/0/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/0/BMatrix.txt deleted file mode 100644 index 1dce0991991bc1b209d09f2ade87f24beb506210..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.29752030545534569 -1 2 -0.22064583149339706 -1 3 5.77592973758246185e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/0/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/0/QMatrix.txt deleted file mode 100644 index 2b21a4a46691222c38848728db0289f1e7705641..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 301.469198503229222 -1 2 29.1190124599649494 -1 3 3.94430452610505903e-31 -2 1 29.1190124599661502 -2 2 693.959113110051476 -2 3 -3.40966637354316235e-30 -3 1 9.93104511931752164e-29 -3 2 -1.89403173673628836e-29 -3 3 209.474297561760352 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/0/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/0/parameter.txt deleted file mode 100644 index 8c7e42ed8815ae515c983da42c5a95ba9aae5ffa..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.28772791 -omega_target = 14.75453569 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/0/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/0/wood_european_beech_log.txt deleted file mode 100644 index e4ba84954859345b00663e98cc9e60e521bcdf72..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/0/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.222151 1.45463e-32 0 -1.45463e-32 0.0086233 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00836305 -9.45314e-33 0 --9.45314e-33 0.0723745 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.04806e-31 1.34292e-18 0 -1.34292e-18 1.59846e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -301.469 29.119 3.9443e-31 -29.119 693.959 -3.40967e-30 -9.93105e-29 -1.89403e-29 209.474 - ------------------------- ---- Prestrain Output --- -Bhat_: 384.737 -115.337 1.34295e-27 -Beff_: 1.29752 -0.220646 5.77593e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=301.469 -q2=693.959 -q3=209.474 -q12=29.119 -q13=3.9443e-31 -q23=-3.40967e-30 -q_onetwo=29.119012 -b1=1.297520 -b2=-0.220646 -b3=0.000000 -mu_gamma=209.474298 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.01469e+02 & 6.93959e+02 & 2.09474e+02 & 2.91190e+01 & 3.94430e-31 & -3.40967e-30 & 1.29752e+00 & -2.20646e-01 & 5.77593e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/1/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/1/BMatrix.txt deleted file mode 100644 index 51e95b75a2f354c67a4c369b1adadee77bd5d0b8..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.82704644820739048 -1 2 -0.316520389633071719 -1 3 -2.32578838926937533e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/1/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/1/QMatrix.txt deleted file mode 100644 index b864a516c5b04575d8728aec77709151173cc245..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 311.495612033295629 -1 2 31.3746169055476329 -1 3 2.19894977330357041e-29 -2 1 31.3746169055493915 -2 2 711.180546897385966 -2 3 -4.8023063163295726e-30 -3 1 -1.17190056554606093e-27 -3 2 -4.54434240643236942e-28 -3 3 212.125110381436087 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/1/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/1/parameter.txt deleted file mode 100644 index 74be9cd75e7de037ac66ef17537213f8ff37a123..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.28772791 -omega_target = 13.71227639 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/1/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/1/wood_european_beech_log.txt deleted file mode 100644 index 3180a0700f614c0367c79c835eb6174be3162aac..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/1/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.220595 0 0 -0 0.00898797 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00874334 0 0 -0 0.0722346 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --4.37856e-31 1.41866e-18 0 -1.41866e-18 -3.84461e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -311.496 31.3746 2.19895e-29 -31.3746 711.181 -4.80231e-30 --1.1719e-27 -4.54434e-28 212.125 - ------------------------- ---- Prestrain Output --- -Bhat_: 559.186 -167.78 -6.93086e-27 -Beff_: 1.82705 -0.31652 -2.32579e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=311.496 -q2=711.181 -q3=212.125 -q12=31.3746 -q13=2.19895e-29 -q23=-4.80231e-30 -q_onetwo=31.374617 -b1=1.827046 -b2=-0.316520 -b3=-0.000000 -mu_gamma=212.125110 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.11496e+02 & 7.11181e+02 & 2.12125e+02 & 3.13746e+01 & 2.19895e-29 & -4.80231e-30 & 1.82705e+00 & -3.16520e-01 & -2.32579e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/2/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/2/BMatrix.txt deleted file mode 100644 index b0489cf2465cfc77f8b3755756cee2f73226333b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.41486954141673316 -1 2 -0.426713983496025018 -1 3 9.97876487122218751e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/2/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/2/QMatrix.txt deleted file mode 100644 index 458046f1ed124ba015a14e4c7a085c7ade8042f5..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 322.679479524483497 -1 2 33.9938655476088911 -1 3 1.25840262566261991e-29 -2 1 33.9938655476077045 -2 2 730.444621428729647 -2 3 -2.13547112233656711e-30 -3 1 2.16107010167487616e-28 -3 2 5.65973073341019462e-29 -3 3 215.081802194802265 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/2/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/2/parameter.txt deleted file mode 100644 index c2cb9086be0c779e97a6cb3461eab04da1fa2f83..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.28772791 -omega_target = 12.54975012 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/2/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/2/wood_european_beech_log.txt deleted file mode 100644 index a5b0e74e3227e777a48c0e2deb4d33d59f8ceaa6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/2/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.218967 1.70747e-30 0 -1.70747e-30 0.00939555 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00916787 -3.68532e-31 0 --3.68532e-31 0.0720895 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.13233e-31 -1.18625e-18 0 --1.18625e-18 1.41587e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -322.679 33.9939 1.2584e-29 -33.9939 730.445 -2.13547e-30 -2.16107e-28 5.65973e-29 215.082 - ------------------------- ---- Prestrain Output --- -Bhat_: 764.723 -229.6 2.64397e-27 -Beff_: 2.41487 -0.426714 9.97876e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=322.679 -q2=730.445 -q3=215.082 -q12=33.9939 -q13=1.2584e-29 -q23=-2.13547e-30 -q_onetwo=33.993866 -b1=2.414870 -b2=-0.426714 -b3=0.000000 -mu_gamma=215.081802 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.22679e+02 & 7.30445e+02 & 2.15082e+02 & 3.39939e+01 & 1.25840e-29 & -2.13547e-30 & 2.41487e+00 & -4.26714e-01 & 9.97876e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/3/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/3/BMatrix.txt deleted file mode 100644 index d397753607f8bbf758aebc5d4af52c4deee8d16f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.77508060298853554 -1 2 -0.496140746694544832 -1 3 -3.51719672988597282e-46 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/3/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/3/QMatrix.txt deleted file mode 100644 index 3d2247077c0c39a89e739b9d1443b250f137a377..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 329.561454885542219 -1 2 35.6596265578670426 -1 3 -1.96121298096841001e-29 -2 1 35.6596265578661544 -2 2 742.326125001064497 -2 3 -4.73162468737056104e-30 -3 1 -6.81258281384692346e-45 -3 2 -1.7954103463951185e-45 -3 3 216.900770109434205 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/3/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/3/parameter.txt deleted file mode 100644 index 69db3b5cb3f1ed9c971972d61284aa10d683f23f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.28772791 -omega_target = 11.83455959 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/3/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/3/wood_european_beech_log.txt deleted file mode 100644 index dec30376a0cfa5b7cf09a0de40ffdebfce47b6e0..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/3/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.218018 2.33857e-31 0 -2.33857e-31 0.00964673 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00942924 4.16336e-32 0 -4.16336e-32 0.0720056 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --3.43304e-48 6.06246e-18 0 -6.06246e-18 -4.52175e-49 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -329.561 35.6596 -1.96121e-29 -35.6596 742.326 -4.73162e-30 --6.81258e-45 -1.79541e-45 216.901 - ------------------------- ---- Prestrain Output --- -Bhat_: 896.867 -269.34 -9.4303e-44 -Beff_: 2.77508 -0.496141 -3.5172e-46 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=329.561 -q2=742.326 -q3=216.901 -q12=35.6596 -q13=-1.96121e-29 -q23=-4.73162e-30 -q_onetwo=35.659627 -b1=2.775081 -b2=-0.496141 -b3=-0.000000 -mu_gamma=216.900770 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.29561e+02 & 7.42326e+02 & 2.16901e+02 & 3.56596e+01 & -1.96121e-29 & -4.73162e-30 & 2.77508e+00 & -4.96141e-01 & -3.51720e-46 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/4/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/4/BMatrix.txt deleted file mode 100644 index 2c89878b6f6ae5a9abbe21d6f212a7dbb4e93cf6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.04819746864895968 -1 2 -0.549722239723354544 -1 3 -1.5661476142943759e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/4/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/4/QMatrix.txt deleted file mode 100644 index 082860093fd48be595b0bcecafdc4205173e1deb..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 334.794275071445611 -1 2 36.9537023835250196 -1 3 4.07249442320347345e-29 -2 1 36.9537023835256875 -2 2 751.373908322565285 -2 3 7.30312634911639835e-31 -3 1 -1.65894852274599059e-28 -3 2 -6.88883408567756262e-30 -3 3 218.283489849225845 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/4/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/4/parameter.txt deleted file mode 100644 index 7bf61ea17f062559dcabef0a25f53d6f43ba8142..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.28772791 -omega_target = 11.29089521 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/4/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/4/wood_european_beech_log.txt deleted file mode 100644 index d53ae938bee11b6c018d0479e9adf5244d292469..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/4/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.217322 0 0 -0 0.0098379 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00962801 0 0 -0 0.0719445 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.20419e-31 5.21486e-18 0 -5.21486e-18 -1.93821e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -334.794 36.9537 4.07249e-29 -36.9537 751.374 7.30313e-31 --1.65895e-28 -6.88883e-30 218.283 - ------------------------- ---- Prestrain Output --- -Bhat_: 1000.2 -300.405 -3.92053e-27 -Beff_: 3.0482 -0.549722 -1.56615e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=334.794 -q2=751.374 -q3=218.283 -q12=36.9537 -q13=4.07249e-29 -q23=7.30313e-31 -q_onetwo=36.953702 -b1=3.048197 -b2=-0.549722 -b3=-0.000000 -mu_gamma=218.283490 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.34794e+02 & 7.51374e+02 & 2.18283e+02 & 3.69537e+01 & 4.07249e-29 & 7.30313e-31 & 3.04820e+00 & -5.49722e-01 & -1.56615e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/5/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/5/BMatrix.txt deleted file mode 100644 index fff538b84525108bf3913a54017cf453fa89f2e0..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.88360589206635165 -1 2 -0.718524153096883778 -1 3 -3.64042134077714142e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/5/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/5/QMatrix.txt deleted file mode 100644 index c369f7357b6fb73b0c7b63733427cc17d5aec854..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 350.881684034111856 -1 2 41.08045251248992 -1 3 6.36943551207746641e-30 -2 1 41.0804525124909432 -2 2 779.259994526643936 -2 3 -2.07846359598270493e-30 -3 1 -3.98049900527083252e-28 -3 2 -8.21904929898942036e-29 -3 3 222.531584654428428 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/5/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/5/parameter.txt deleted file mode 100644 index f54d4a21ac1dc4db1133101807e54df44f71b2eb..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.28772791 -omega_target = 9.620608917 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/5/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/5/wood_european_beech_log.txt deleted file mode 100644 index 7037f895e2e1e81caba0ecb39d63ebdf2d6797c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/5/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.215312 0 0 -0 0.0104264 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0102393 0 0 -0 0.0717706 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --2.30192e-31 -7.20259e-18 0 --7.20259e-18 -3.46946e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -350.882 41.0805 6.36944e-30 -41.0805 779.26 -2.07846e-30 --3.9805e-28 -8.21905e-29 222.532 - ------------------------- ---- Prestrain Output --- -Bhat_: 1333.17 -400.377 -9.5879e-27 -Beff_: 3.88361 -0.718524 -3.64042e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=350.882 -q2=779.26 -q3=222.532 -q12=41.0805 -q13=6.36944e-30 -q23=-2.07846e-30 -q_onetwo=41.080453 -b1=3.883606 -b2=-0.718524 -b3=-0.000000 -mu_gamma=222.531585 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.50882e+02 & 7.79260e+02 & 2.22532e+02 & 4.10805e+01 & 6.36944e-30 & -2.07846e-30 & 3.88361e+00 & -7.18524e-01 & -3.64042e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/6/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/6/BMatrix.txt deleted file mode 100644 index fa861cb33cf03fd8208fde7ece1f14b3f08f9556..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.14205856116698445 -1 2 -0.772209514335703617 -1 3 -2.24064806627448823e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/6/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/6/QMatrix.txt deleted file mode 100644 index 46f45c98366cab20fdcf398eefe627f737a9c088..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 355.884063208915393 -1 2 42.4091720984219052 -1 3 1.16018019849887088e-29 -2 1 42.4091720984202141 -2 2 787.952048308325288 -2 3 -1.61134854727102475e-29 -3 1 -2.92480416439338895e-28 -3 2 -8.72219224656324881e-29 -3 3 223.851414869513405 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/6/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/6/parameter.txt deleted file mode 100644 index ffb14c1a55fe9061a7a309f7af461af58cccba44..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.17 -h = 0.0049 -omega_flat = 17.28772791 -omega_target = 9.101671742 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_1/6/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_1/6/wood_european_beech_log.txt deleted file mode 100644 index 2179fd47db4b7f8eb67b1c4b5a34eaa0b0de128f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_1/6/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.214725 0 0 -0 0.0106097 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0104293 0 0 -0 0.0717205 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.39357e-31 -2.338e-19 0 --2.338e-19 -2.01766e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -355.884 42.4092 1.16018e-29 -42.4092 787.952 -1.61135e-29 --2.9248e-28 -8.72219e-29 223.851 - ------------------------- ---- Prestrain Output --- -Bhat_: 1441.34 -432.803 -6.15984e-27 -Beff_: 4.14206 -0.77221 -2.24065e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=355.884 -q2=787.952 -q3=223.851 -q12=42.4092 -q13=1.16018e-29 -q23=-1.61135e-29 -q_onetwo=42.409172 -b1=4.142059 -b2=-0.772210 -b3=-0.000000 -mu_gamma=223.851415 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.55884e+02 & 7.87952e+02 & 2.23851e+02 & 4.24092e+01 & 1.16018e-29 & -1.61135e-29 & 4.14206e+00 & -7.72210e-01 & -2.24065e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/0/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/0/BMatrix.txt deleted file mode 100644 index 61d6ab546848473f72ea90896e5693793d75f655..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.21307686572728635 -1 2 -0.295167273983245715 -1 3 9.93151852571420649e-31 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/0/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/0/QMatrix.txt deleted file mode 100644 index 611f3f1716f7bfc37c3867bd045fa094862fb469..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 305.333970272295403 -1 2 26.280029011200611 -1 3 -3.74061817518666496e-29 -2 1 26.2800290111988346 -2 2 589.543718551700977 -2 3 -1.69867021094954202e-31 -3 1 2.8924560814186473e-29 -3 2 1.07299643213611696e-31 -3 3 209.544838005396343 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/0/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/0/parameter.txt deleted file mode 100644 index ee7ee08fcca4bcbcac93d88a2edf8ee1497033da..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 14.72680026 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/0/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/0/wood_european_beech_log.txt deleted file mode 100644 index 239685d24d33e5c150b4de5b2a9681ff78666547..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/0/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.234702 2.7313e-30 0 -2.7313e-30 0.00973024 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00954138 4.80797e-31 0 -4.80797e-31 0.0977184 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.76617e-32 -7.86751e-18 0 --7.86751e-18 3.39807e-33 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -305.334 26.28 -3.74062e-29 -26.28 589.544 -1.69867e-31 -2.89246e-29 1.073e-31 209.545 - ------------------------- ---- Prestrain Output --- -Bhat_: 362.637 -142.134 2.43166e-28 -Beff_: 1.21308 -0.295167 9.93152e-31 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=305.334 -q2=589.544 -q3=209.545 -q12=26.28 -q13=-3.74062e-29 -q23=-1.69867e-31 -q_onetwo=26.280029 -b1=1.213077 -b2=-0.295167 -b3=0.000000 -mu_gamma=209.544838 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.05334e+02 & 5.89544e+02 & 2.09545e+02 & 2.62800e+01 & -3.74062e-29 & -1.69867e-31 & 1.21308e+00 & -2.95167e-01 & 9.93152e-31 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/1/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/1/BMatrix.txt deleted file mode 100644 index b27ac9109230e0ff4122bd65cea10b60c94b1073..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.74721683094474689 -1 2 -0.431854985698120308 -1 3 -5.84630560666126324e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/1/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/1/QMatrix.txt deleted file mode 100644 index fbda5fc359f97b1c0eb6dc0efed2f1cddad73e7b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 315.986734638774749 -1 2 28.4165214680945937 -1 3 1.32658054569392806e-30 -2 1 28.4165214680950413 -2 2 605.235748478189748 -2 3 4.68809867062740951e-30 -3 1 -1.51932315987481074e-28 -3 2 -2.05530334109993845e-29 -3 3 212.300314307290364 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/1/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/1/parameter.txt deleted file mode 100644 index 23cacfffe7ac1743e8de3970520ef790b1d315ab..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 13.64338887 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/1/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/1/wood_european_beech_log.txt deleted file mode 100644 index 1145352d652c0926571c2539622be70255a17a95..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/1/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.233284 9.69058e-30 0 -9.69058e-30 0.0101698 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.00999254 1.11162e-30 0 -1.11162e-30 0.0974998 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --7.56699e-32 -3.01988e-18 0 --3.01988e-18 -1.36803e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -315.987 28.4165 1.32658e-30 -28.4165 605.236 4.6881e-30 --1.51932e-28 -2.0553e-29 212.3 - ------------------------- ---- Prestrain Output --- -Bhat_: 539.826 -211.724 -1.49776e-27 -Beff_: 1.74722 -0.431855 -5.84631e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=315.987 -q2=605.236 -q3=212.3 -q12=28.4165 -q13=1.32658e-30 -q23=4.6881e-30 -q_onetwo=28.416521 -b1=1.747217 -b2=-0.431855 -b3=-0.000000 -mu_gamma=212.300314 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.15987e+02 & 6.05236e+02 & 2.12300e+02 & 2.84165e+01 & 1.32658e-30 & 4.68810e-30 & 1.74722e+00 & -4.31855e-01 & -5.84631e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/2/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/2/BMatrix.txt deleted file mode 100644 index 82712b2d6b47b5d07f5973ce3e1db1a3c438ba28..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.35190162820338777 -1 2 -0.591227643058709118 -1 3 4.38024227344357821e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/2/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/2/QMatrix.txt deleted file mode 100644 index 58aa21077b08d0cdce72f97be11d3721334c4689..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 328.085006014902774 -1 2 30.9488820417910553 -1 3 -4.35568316222617261e-30 -2 1 30.9488820417903092 -2 2 623.10614499795588 -2 3 4.60451331104100348e-30 -3 1 7.43002619664811867e-28 -3 2 6.39535455360702413e-29 -3 3 215.429464009525645 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/2/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/2/parameter.txt deleted file mode 100644 index 1b0b796f34fbcecdcb056432bd2b48af88d3876a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 12.41305478 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/2/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/2/wood_european_beech_log.txt deleted file mode 100644 index b46ce23e7e3e114a72daa39735e0a4cdbedcd35b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/2/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.231775 0 0 -0 0.0106703 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0105059 0 0 -0 0.0972686 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -3.99152e-31 -2.4294e-19 0 --2.4294e-19 7.87597e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -328.085 30.9489 -4.35568e-30 -30.9489 623.106 4.60451e-30 -7.43003e-28 6.39535e-29 215.429 - ------------------------- ---- Prestrain Output --- -Bhat_: 753.326 -295.609 1.1146e-26 -Beff_: 2.3519 -0.591228 4.38024e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=328.085 -q2=623.106 -q3=215.429 -q12=30.9489 -q13=-4.35568e-30 -q23=4.60451e-30 -q_onetwo=30.948882 -b1=2.351902 -b2=-0.591228 -b3=0.000000 -mu_gamma=215.429464 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.28085e+02 & 6.23106e+02 & 2.15429e+02 & 3.09489e+01 & -4.35568e-30 & 4.60451e-30 & 2.35190e+00 & -5.91228e-01 & 4.38024e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/3/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/3/BMatrix.txt deleted file mode 100644 index 253485faeba3ed1031a9d2f869bde4cf0af17e5e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.71866845877622554 -1 2 -0.690194332731962734 -1 3 -2.08049887556767705e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/3/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/3/QMatrix.txt deleted file mode 100644 index d9e7197922b55ba9f09d23b48fc07d4b372362d2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 335.44443009692975 -1 2 32.5443746778594871 -1 3 -2.06074504049434236e-29 -2 1 32.5443746778596577 -2 2 634.001301001279444 -2 3 -2.59461282107848414e-30 -3 1 -1.62487302355124666e-29 -3 2 4.82491991388277131e-30 -3 3 217.332450788238617 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/3/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/3/parameter.txt deleted file mode 100644 index 3ab41d62a901caa341c63e0f671904b3fff6ca30..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 11.66482931 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/3/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/3/wood_european_beech_log.txt deleted file mode 100644 index 093e4a03d6f0b72a45954bbaa082edc44006ace0..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/3/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.230907 0 0 -0 0.0109753 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0108185 0 0 -0 0.0971364 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.47517e-32 -3.31117e-19 0 --3.31117e-19 -3.24018e-33 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -335.444 32.5444 -2.06075e-29 -32.5444 634.001 -2.59461e-30 --1.62487e-29 4.82492e-30 217.332 - ------------------------- ---- Prestrain Output --- -Bhat_: 889.5 -349.107 -4.99665e-28 -Beff_: 2.71867 -0.690194 -2.0805e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=335.444 -q2=634.001 -q3=217.332 -q12=32.5444 -q13=-2.06075e-29 -q23=-2.59461e-30 -q_onetwo=32.544375 -b1=2.718668 -b2=-0.690194 -b3=-0.000000 -mu_gamma=217.332451 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.35444e+02 & 6.34001e+02 & 2.17332e+02 & 3.25444e+01 & -2.06075e-29 & -2.59461e-30 & 2.71867e+00 & -6.90194e-01 & -2.08050e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/4/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/4/BMatrix.txt deleted file mode 100644 index 482e2c2a77fcabaa54eca178a97c739a8e4c1705..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.9961249524663085 -1 2 -0.766178724462287963 -1 3 2.02452020099075162e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/4/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/4/QMatrix.txt deleted file mode 100644 index 809c0b2bff057ee7879388decdf5030252bde973..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 341.023009642631223 -1 2 33.781494341820931 -1 3 6.83445129714976451e-30 -2 1 33.7814943418196947 -2 2 642.272014006948893 -2 3 1.33235833552708976e-29 -3 1 4.31449620244680706e-28 -3 2 1.31969118789025237e-28 -3 3 218.77455792090413 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/4/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/4/parameter.txt deleted file mode 100644 index 391a2bf4441d18b9c73c1769757935cd7b532d0d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 11.09781471 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/4/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/4/wood_european_beech_log.txt deleted file mode 100644 index a86495ab512d0d7d3ba6d8ae5f5b0ca84b91442a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/4/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.230273 0 0 -0 0.0112068 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0110557 0 0 -0 0.0970403 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.65521e-31 9.24008e-18 0 -9.24008e-18 2.63001e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -341.023 33.7815 6.83445e-30 -33.7815 642.272 1.33236e-29 -4.3145e-28 1.31969e-28 218.775 - ------------------------- ---- Prestrain Output --- -Bhat_: 995.865 -390.882 5.6207e-27 -Beff_: 2.99612 -0.766179 2.02452e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=341.023 -q2=642.272 -q3=218.775 -q12=33.7815 -q13=6.83445e-30 -q23=1.33236e-29 -q_onetwo=33.781494 -b1=2.996125 -b2=-0.766179 -b3=0.000000 -mu_gamma=218.774558 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.41023e+02 & 6.42272e+02 & 2.18775e+02 & 3.37815e+01 & 6.83445e-30 & 1.33236e-29 & 2.99612e+00 & -7.66179e-01 & 2.02452e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/5/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/5/BMatrix.txt deleted file mode 100644 index b25bfb12028de7d2d3e09eebffe079b5e27ef270..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.80702510779013625 -1 2 -0.99356874581675747 -1 3 4.17782921610859132e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/5/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/5/QMatrix.txt deleted file mode 100644 index cc9c32f26654e2219ccf440aac91b840a59236c9..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 357.385455166212182 -1 2 37.5476183903305625 -1 3 1.19338323074010682e-28 -2 1 37.547618390329994 -2 2 666.588358047611791 -2 3 -1.73951918506999529e-29 -3 1 5.50300887202620269e-28 -3 2 1.09745228114263782e-28 -3 3 223.001625544819092 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/5/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/5/parameter.txt deleted file mode 100644 index 861b07bc1e875136fb5095ba4ff5be4e8a86befe..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 9.435795985 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/5/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/5/wood_european_beech_log.txt deleted file mode 100644 index 24fff293a64462021f90580e0d34ce77760bf31f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/5/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.228524 0 0 -0 0.0118871 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0117522 0 0 -0 0.0967777 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -2.36843e-31 -3.93107e-18 0 --3.93107e-18 4.84859e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -357.385 37.5476 1.19338e-28 -37.5476 666.588 -1.73952e-29 -5.50301e-28 1.09745e-28 223.002 - ------------------------- ---- Prestrain Output --- -Bhat_: 1323.27 -519.357 1.13026e-26 -Beff_: 3.80703 -0.993569 4.17783e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=357.385 -q2=666.588 -q3=223.002 -q12=37.5476 -q13=1.19338e-28 -q23=-1.73952e-29 -q_onetwo=37.547618 -b1=3.807025 -b2=-0.993569 -b3=0.000000 -mu_gamma=223.001626 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.57385e+02 & 6.66588e+02 & 2.23002e+02 & 3.75476e+01 & 1.19338e-28 & -1.73952e-29 & 3.80703e+00 & -9.93569e-01 & 4.17783e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/6/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/6/BMatrix.txt deleted file mode 100644 index be8657c5a7c7ec0fdcf0db4b7caa753e557a9c73..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 4.03873445069710524 -1 2 -1.05995320800370529 -1 3 1.36076669459033724e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/6/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/6/QMatrix.txt deleted file mode 100644 index 655f1ff64c6cb9651d8618f4c60a9a720c897fe2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 362.077597710087787 -1 2 38.6653780788820356 -1 3 7.65965450042136346e-29 -2 1 38.6653780788812682 -2 2 673.576799924798138 -2 3 2.35949529346769039e-29 -3 1 1.91929433331978192e-28 -3 2 5.49556981433154364e-29 -3 3 224.212841852790206 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/6/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/6/parameter.txt deleted file mode 100644 index 4dc714627ad1059b77194447695b20aaa3a0c7c6..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.22 -h = 0.0053 -omega_flat = 17.17547062 -omega_target = 8.959564147 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_2/6/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_2/6/wood_european_beech_log.txt deleted file mode 100644 index 23e4ac9988a480ac380211e83f971bdf72e55340..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_2/6/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.228051 8.83488e-30 0 -8.83488e-30 0.0120825 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0119521 2.30937e-30 0 -2.30937e-30 0.0967075 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -7.67493e-32 8.75336e-20 0 -8.75336e-20 1.40158e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -362.078 38.6654 7.65965e-29 -38.6654 673.577 2.3595e-29 -1.91929e-28 5.49557e-29 224.213 - ------------------------- ---- Prestrain Output --- -Bhat_: 1421.35 -557.801 3.76792e-27 -Beff_: 4.03873 -1.05995 1.36077e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=362.078 -q2=673.577 -q3=224.213 -q12=38.6654 -q13=7.65965e-29 -q23=2.3595e-29 -q_onetwo=38.665378 -b1=4.038734 -b2=-1.059953 -b3=0.000000 -mu_gamma=224.212842 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.62078e+02 & 6.73577e+02 & 2.24213e+02 & 3.86654e+01 & 7.65965e-29 & 2.35950e-29 & 4.03873e+00 & -1.05995e+00 & 1.36077e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/0/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/0/BMatrix.txt deleted file mode 100644 index 5975624257523d290a4cdf64017543d968dfda4f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 0.888018894288113203 -1 2 -0.363071170868670634 -1 3 -6.8393725826953037e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/0/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/0/QMatrix.txt deleted file mode 100644 index 5f2dce579015187f26e09b702421e55ee6b4700c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 303.750850362798019 -1 2 22.2901008761475694 -1 3 -5.33097408606386884e-29 -2 1 22.2901008761482515 -2 2 461.524556065935087 -2 3 9.07883375784142981e-31 -3 1 -2.66640803580283758e-28 -3 2 3.57211764959721557e-29 -3 3 208.891179720402704 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/0/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/0/parameter.txt deleted file mode 100644 index 2bbd2fe2c4362735dafe912c705b19c7bba9c3a7..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.14061081 -omega_target = 14.98380876 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/0/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/0/wood_european_beech_log.txt deleted file mode 100644 index 9926aef480c9c69e9d498cfd7f3ee6580b16640d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/0/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.231779 0 0 -0 0.0105971 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0104946 0 0 -0 0.135415 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.17439e-31 5.38669e-18 0 -5.38669e-18 -4.27837e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -303.751 22.2901 -5.33097e-29 -22.2901 461.525 9.07883e-31 --2.66641e-28 3.57212e-29 208.891 - ------------------------- ---- Prestrain Output --- -Bhat_: 261.644 -147.772 -1.67844e-27 -Beff_: 0.888019 -0.363071 -6.83937e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=303.751 -q2=461.525 -q3=208.891 -q12=22.2901 -q13=-5.33097e-29 -q23=9.07883e-31 -q_onetwo=22.290101 -b1=0.888019 -b2=-0.363071 -b3=-0.000000 -mu_gamma=208.891180 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.03751e+02 & 4.61525e+02 & 2.08891e+02 & 2.22901e+01 & -5.33097e-29 & 9.07883e-31 & 8.88019e-01 & -3.63071e-01 & -6.83937e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/1/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/1/BMatrix.txt deleted file mode 100644 index 6e3917e83769661595e63f238cdd7d90aa75424e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.30508274038096705 -1 2 -0.538889045251408572 -1 3 -1.51367430075867004e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/1/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/1/QMatrix.txt deleted file mode 100644 index 716636d4afa159e954eebc7faeb369d6766ccab2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 313.675435374170945 -1 2 24.020025141600911 -1 3 2.54407641933776307e-29 -2 1 24.0200251416029893 -2 2 473.811929529085603 -2 3 5.95921243392298518e-30 -3 1 -7.28007590171598279e-29 -3 2 -2.4535429994642681e-29 -3 3 211.465693328505836 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/1/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/1/parameter.txt deleted file mode 100644 index a5ae665d6a39cc9cd835ff01d7dc5d75cd84acbd..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.14061081 -omega_target = 13.97154915 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/1/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/1/wood_european_beech_log.txt deleted file mode 100644 index b06fdf82e687f03805c8d572f48d297e0cf24a6e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/1/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.23073 4.76847e-30 0 -4.76847e-30 0.0110612 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0109644 5.28137e-31 0 -5.28137e-31 0.135078 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --2.46557e-32 -3.09367e-18 0 --3.09367e-18 -3.53433e-33 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -313.675 24.02 2.54408e-29 -24.02 473.812 5.95921e-30 --7.28008e-29 -2.45354e-29 211.466 - ------------------------- ---- Prestrain Output --- -Bhat_: 396.428 -223.984 -4.01879e-28 -Beff_: 1.30508 -0.538889 -1.51367e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=313.675 -q2=473.812 -q3=211.466 -q12=24.02 -q13=2.54408e-29 -q23=5.95921e-30 -q_onetwo=24.020025 -b1=1.305083 -b2=-0.538889 -b3=-0.000000 -mu_gamma=211.465693 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.13675e+02 & 4.73812e+02 & 2.11466e+02 & 2.40200e+01 & 2.54408e-29 & 5.95921e-30 & 1.30508e+00 & -5.38889e-01 & -1.51367e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/2/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/2/BMatrix.txt deleted file mode 100644 index 76a2d8bb2756a6dae3c275afa2088a259e2c6911..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.79892448477151423 -1 2 -0.751085958674864496 -1 3 1.01442609214623335e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/2/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/2/QMatrix.txt deleted file mode 100644 index ae38f6adc223678f0cab5728d05978a9b984c23e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 325.429115093306848 -1 2 26.1565314786407512 -1 3 -2.34655304424140816e-30 -2 1 26.1565314786419343 -2 2 488.391939970416161 -2 3 1.20332102925314496e-30 -3 1 2.68140351019715306e-28 -3 2 3.13149909473036588e-29 -3 3 214.513767998696522 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/2/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/2/parameter.txt deleted file mode 100644 index 9c040f67472caf2803ca81b355822d38d96134de..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.14061081 -omega_target = 12.77309253 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/2/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/2/wood_european_beech_log.txt deleted file mode 100644 index 9ad5c49ccd7b4a5e1abdfb198d69f1c45b025856..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/2/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.229562 0 0 -0 0.0116123 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0115222 0 0 -0 0.134705 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -9.59546e-32 -1.13449e-17 0 --1.13449e-17 2.77514e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -325.429 26.1565 -2.34655e-30 -26.1565 488.392 1.20332e-30 -2.6814e-28 3.1315e-29 214.514 - ------------------------- ---- Prestrain Output --- -Bhat_: 565.777 -319.771 2.63493e-27 -Beff_: 1.79892 -0.751086 1.01443e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=325.429 -q2=488.392 -q3=214.514 -q12=26.1565 -q13=-2.34655e-30 -q23=1.20332e-30 -q_onetwo=26.156531 -b1=1.798924 -b2=-0.751086 -b3=0.000000 -mu_gamma=214.513768 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.25429e+02 & 4.88392e+02 & 2.14514e+02 & 2.61565e+01 & -2.34655e-30 & 1.20332e-30 & 1.79892e+00 & -7.51086e-01 & 1.01443e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/3/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/3/BMatrix.txt deleted file mode 100644 index 57869a01ede1f26f105466559d5f9d6a7dd155a8..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.11351306952047935 -1 2 -0.888405173079592658 -1 3 1.27346347145998165e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/3/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/3/QMatrix.txt deleted file mode 100644 index cfecff5418397025001ab7c0646b8e1c396379b1..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 332.92013010337962 -1 2 27.5678040586021424 -1 3 -2.57735648877677451e-29 -2 1 27.5678040586032189 -2 2 497.699616739978637 -2 3 -4.68078013683873802e-30 -3 1 2.0332860867890775e-28 -3 2 -5.94813750941514078e-29 -3 3 216.455585805768351 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/3/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/3/parameter.txt deleted file mode 100644 index 63062a787f7fc26cf1e771e4083314a1625cc4c7..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.14061081 -omega_target = 12.00959929 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/3/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/3/wood_european_beech_log.txt deleted file mode 100644 index 9ce87f94c4598cff0873aaae538c507c0b139a77..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/3/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.228857 0 0 -0 0.0119644 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0118784 0 0 -0 0.13448 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -8.21459e-32 -4.23129e-19 0 --4.23129e-19 3.87368e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -332.92 27.5678 -2.57736e-29 -27.5678 497.7 -4.68078e-30 -2.03329e-28 -5.94814e-29 216.456 - ------------------------- ---- Prestrain Output --- -Bhat_: 679.14 -383.894 3.23906e-27 -Beff_: 2.11351 -0.888405 1.27346e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=332.92 -q2=497.7 -q3=216.456 -q12=27.5678 -q13=-2.57736e-29 -q23=-4.68078e-30 -q_onetwo=27.567804 -b1=2.113513 -b2=-0.888405 -b3=0.000000 -mu_gamma=216.455586 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.32920e+02 & 4.97700e+02 & 2.16456e+02 & 2.75678e+01 & -2.57736e-29 & -4.68078e-30 & 2.11351e+00 & -8.88405e-01 & 1.27346e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/4/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/4/BMatrix.txt deleted file mode 100644 index 13370ca94877308c0c0510c005f7ca0528ef863e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.3564106106421594 -1 2 -0.995521307111207787 -1 3 -2.12264293066437136e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/4/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/4/QMatrix.txt deleted file mode 100644 index 1523c4900e69d37adfea019d45aa3dcec6d83112..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 338.707013847318535 -1 2 28.6844379761628403 -1 3 -1.57833810802422753e-29 -2 1 28.6844379761595007 -2 2 504.897845624664797 -2 3 -5.67764147605357129e-31 -3 1 -2.95919385724138452e-28 -3 2 2.78381721795209232e-29 -3 3 217.955089308235671 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/4/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/4/parameter.txt deleted file mode 100644 index e8cb7a45c217a7bb28edc05d138cc423e8d1adcf..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.14061081 -omega_target = 11.42001731 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/4/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/4/wood_european_beech_log.txt deleted file mode 100644 index 91c1a8c8b4d661efdf67628071f35a2b820cb63b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/4/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.228333 0 0 -0 0.0122367 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0121538 0 0 -0 0.134314 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.37125e-31 -6.12318e-18 0 --6.12318e-18 -4.75814e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -338.707 28.6844 -1.57834e-29 -28.6844 504.898 -5.67764e-31 --2.95919e-28 2.78382e-29 217.955 - ------------------------- ---- Prestrain Output --- -Bhat_: 769.577 -435.044 -5.35143e-27 -Beff_: 2.35641 -0.995521 -2.12264e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=338.707 -q2=504.898 -q3=217.955 -q12=28.6844 -q13=-1.57834e-29 -q23=-5.67764e-31 -q_onetwo=28.684438 -b1=2.356411 -b2=-0.995521 -b3=-0.000000 -mu_gamma=217.955089 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.38707e+02 & 5.04898e+02 & 2.17955e+02 & 2.86844e+01 & -1.57834e-29 & -5.67764e-31 & 2.35641e+00 & -9.95521e-01 & -2.12264e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/5/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/5/BMatrix.txt deleted file mode 100644 index baed026d232ba9bfe5c71063ab41e14520e51d8a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.12178458865361863 -1 2 -1.33892605865016301 -1 3 -2.0384347807883082e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/5/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/5/QMatrix.txt deleted file mode 100644 index 9566ac548eaf3de462fcba748c13eb5c68adf54e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 356.965337739626762 -1 2 32.358214893228201 -1 3 3.64786538906497568e-29 -2 1 32.3582148932296008 -2 2 527.65317561488132 -2 3 1.20713437054303169e-29 -3 1 -3.64801232397803751e-28 -3 2 -7.50719002137871569e-29 -3 3 222.682052674732489 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/5/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/5/parameter.txt deleted file mode 100644 index 8b245b8da67121dc4d1cfec47ff8b843887ec54b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.14061081 -omega_target = 9.561447179 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/5/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/5/wood_european_beech_log.txt deleted file mode 100644 index adb0eb4917eb0b4f1f600a8960ab7d716dc19bc3..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/5/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.226784 0 0 -0 0.0130978 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0130246 0 0 -0 0.133824 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.13515e-31 -1.02825e-18 0 --1.02825e-18 -3.19398e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -356.965 32.3582 3.64787e-29 -32.3582 527.653 1.20713e-29 --3.64801e-28 -7.50719e-29 222.682 - ------------------------- ---- Prestrain Output --- -Bhat_: 1071.04 -605.473 -5.57754e-27 -Beff_: 3.12178 -1.33893 -2.03843e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=356.965 -q2=527.653 -q3=222.682 -q12=32.3582 -q13=3.64787e-29 -q23=1.20713e-29 -q_onetwo=32.358215 -b1=3.121785 -b2=-1.338926 -b3=-0.000000 -mu_gamma=222.682053 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.56965e+02 & 5.27653e+02 & 2.22682e+02 & 3.23582e+01 & 3.64787e-29 & 1.20713e-29 & 3.12178e+00 & -1.33893e+00 & -2.03843e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/6/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/6/BMatrix.txt deleted file mode 100644 index 858649a03b6a27bf2ec88ce309d84b3e4974810a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 3.36738648827831799 -1 2 -1.45092034536636327 -1 3 -1.07391758819950018e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/6/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/6/QMatrix.txt deleted file mode 100644 index 9ab41623803ce00c1faf628ace7895134e488307..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 362.833829920313804 -1 2 33.5875215742998847 -1 3 4.7676780959294901e-29 -2 1 33.5875215743010713 -2 2 534.980886738369691 -2 3 3.85494137668549128e-30 -3 1 -1.13869304902897546e-28 -3 2 7.24868712730886917e-30 -3 3 224.199767028830422 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/6/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/6/parameter.txt deleted file mode 100644 index ca8d7ec33acd010f4ca19579d432cd3ad586d9d1..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.34 -h = 0.0063 -omega_flat = 17.14061081 -omega_target = 8.964704969 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_3/6/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_3/6/wood_european_beech_log.txt deleted file mode 100644 index 888c505aac624ccdf71d7f8678163256711c7773..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_3/6/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.226319 0 0 -0 0.0133752 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.013305 0 0 -0 0.133678 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --4.73317e-32 6.06935e-18 0 -6.06935e-18 -1.78063e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -362.834 33.5875 4.76768e-29 -33.5875 534.981 3.85494e-30 --1.13869e-28 7.24869e-30 224.2 - ------------------------- ---- Prestrain Output --- -Bhat_: 1173.07 -663.112 -2.80168e-27 -Beff_: 3.36739 -1.45092 -1.07392e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=362.834 -q2=534.981 -q3=224.2 -q12=33.5875 -q13=4.76768e-29 -q23=3.85494e-30 -q_onetwo=33.587522 -b1=3.367386 -b2=-1.450920 -b3=-0.000000 -mu_gamma=224.199767 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.62834e+02 & 5.34981e+02 & 2.24200e+02 & 3.35875e+01 & 4.76768e-29 & 3.85494e-30 & 3.36739e+00 & -1.45092e+00 & -1.07392e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/0/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/0/BMatrix.txt deleted file mode 100644 index 8f40abe6c5826721cd6107196ca8ca42a2383138..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 0.629334607532929691 -1 2 -0.413228766006793202 -1 3 -6.54889290933756321e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/0/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/0/QMatrix.txt deleted file mode 100644 index 3f1abb9def5f57ff965d3cfb05c0caba17cf7590..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 312.84066156510022 -1 2 20.1442519996664871 -1 3 -3.86603473316516176e-29 -2 1 20.1442519996660145 -2 2 381.577433311366065 -2 3 -1.56847734670896488e-30 -3 1 -2.61950844478257189e-28 -3 2 8.13012202048741462e-29 -3 3 208.562187778097865 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/0/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/0/parameter.txt deleted file mode 100644 index eeb849b30c553b5d422fd328cdc52ff1a2cb9d3b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.07559686 -omega_target = 15.11316339 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/0/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/0/wood_european_beech_log.txt deleted file mode 100644 index b4ba1730bca6193f9a72e691a6f366d9c46d1780..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/0/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.214951 -4.39831e-34 0 --4.39831e-34 0.0109616 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0109105 7.68912e-33 0 -7.68912e-33 0.167779 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --1.10851e-31 1.20451e-17 0 -1.20451e-17 -6.1768e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -312.841 20.1443 -3.86603e-29 -20.1443 381.577 -1.56848e-30 --2.61951e-28 8.13012e-29 208.562 - ------------------------- ---- Prestrain Output --- -Bhat_: 188.557 -145.001 -1.5643e-27 -Beff_: 0.629335 -0.413229 -6.54889e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=312.841 -q2=381.577 -q3=208.562 -q12=20.1443 -q13=-3.86603e-29 -q23=-1.56848e-30 -q_onetwo=20.144252 -b1=0.629335 -b2=-0.413229 -b3=-0.000000 -mu_gamma=208.562188 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.12841e+02 & 3.81577e+02 & 2.08562e+02 & 2.01443e+01 & -3.86603e-29 & -1.56848e-30 & 6.29335e-01 & -4.13229e-01 & -6.54889e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/1/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/1/BMatrix.txt deleted file mode 100644 index 7889302eda9e328c724af1d4167ddc20a65be6d5..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 0.930568829859895752 -1 2 -0.613780762609916541 -1 3 5.36799267402824536e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/1/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/1/QMatrix.txt deleted file mode 100644 index 2bf6643eb7bcd2c3a5660b22e930273c2340e83a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 322.002694849312206 -1 2 21.6038821691577247 -1 3 4.61144665884079753e-30 -2 1 21.6038821691562859 -2 2 391.625995128890054 -2 3 -2.83959111000454054e-30 -3 1 9.6934339262027579e-29 -3 2 -6.95957489636903426e-29 -3 3 210.935607547800174 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/1/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/1/parameter.txt deleted file mode 100644 index 5540a8f8bba7b5972e6fd7bdd031236ddb6908dd..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.07559686 -omega_target = 14.17997082 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/1/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/1/wood_european_beech_log.txt deleted file mode 100644 index 5cda8f5153c115b893b025dfe849698075d77869..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/1/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.214198 0 0 -0 0.0114122 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0113637 0 0 -0 0.167333 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -5.74701e-32 1.02348e-18 0 -1.02348e-18 3.533e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -322.003 21.6039 4.61145e-30 -21.6039 391.626 -2.83959e-30 -9.69343e-29 -6.95957e-29 210.936 - ------------------------- ---- Prestrain Output --- -Bhat_: 286.386 -220.269 1.26522e-27 -Beff_: 0.930569 -0.613781 5.36799e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=322.003 -q2=391.626 -q3=210.936 -q12=21.6039 -q13=4.61145e-30 -q23=-2.83959e-30 -q_onetwo=21.603882 -b1=0.930569 -b2=-0.613781 -b3=0.000000 -mu_gamma=210.935608 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.22003e+02 & 3.91626e+02 & 2.10936e+02 & 2.16039e+01 & 4.61145e-30 & -2.83959e-30 & 9.30569e-01 & -6.13781e-01 & 5.36799e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/2/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/2/BMatrix.txt deleted file mode 100644 index e47f7b8029cff8f18dfce3bfa25de6e903d89653..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.29434817154833848 -1 2 -0.858121606718679097 -1 3 4.59552118470703921e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/2/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/2/QMatrix.txt deleted file mode 100644 index 618bb356e49323a9bb394b4f5efd803f33d99610..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 333.031417165489643 -1 2 23.4315932635608029 -1 3 2.3222092897443535e-29 -2 1 23.4315932635636557 -2 2 403.732812298977763 -2 3 2.47308664158764956e-30 -3 1 1.17707081570013008e-28 -3 2 -6.92749354405336637e-30 -3 3 213.790683300929572 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/2/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/2/parameter.txt deleted file mode 100644 index 0502ee63b23145e6f367455c753d942f65608b11..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.07559686 -omega_target = 13.05739844 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/2/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/2/wood_european_beech_log.txt deleted file mode 100644 index c0b182f029e108ad326feefd5efd293f43da53c5..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/2/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.213342 0 0 -0 0.011956 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0119106 0 0 -0 0.166826 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -4.07853e-32 -1.25461e-18 0 --1.25461e-18 1.95459e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -333.031 23.4316 2.32221e-29 -23.4316 403.733 2.47309e-30 -1.17707e-28 -6.92749e-30 213.791 - ------------------------- ---- Prestrain Output --- -Bhat_: 410.951 -316.123 1.14078e-27 -Beff_: 1.29435 -0.858122 4.59552e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=333.031 -q2=403.733 -q3=213.791 -q12=23.4316 -q13=2.32221e-29 -q23=2.47309e-30 -q_onetwo=23.431593 -b1=1.294348 -b2=-0.858122 -b3=0.000000 -mu_gamma=213.790683 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.33031e+02 & 4.03733e+02 & 2.13791e+02 & 2.34316e+01 & 2.32221e-29 & 2.47309e-30 & 1.29435e+00 & -8.58122e-01 & 4.59552e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/3/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/3/BMatrix.txt deleted file mode 100644 index 5193934400406562aa8ba93113178f7d1f1894e8..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.53304778949421516 -1 2 -1.01964423760620693 -1 3 1.18963511285505427e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/3/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/3/QMatrix.txt deleted file mode 100644 index dbd6df0bba945718c4724535657a08aa43c570ee..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 340.250810371440707 -1 2 24.6697846682606716 -1 3 -5.01974380705089153e-29 -2 1 24.669784668261002 -2 2 411.664198549653975 -2 3 -1.77512962974171529e-30 -3 1 2.63133591347105406e-28 -3 2 -9.56099395610442216e-30 -3 3 215.658269117771624 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/3/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/3/parameter.txt deleted file mode 100644 index cc114cdcbee67e72ce25863ab4c8d4b3cb004d4f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.07559686 -omega_target = 12.32309209 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/3/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/3/wood_european_beech_log.txt deleted file mode 100644 index 4dae878763552007b78fd2e935e4def4a0ae21e2..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/3/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.21281 -2.66081e-30 0 --2.66081e-30 0.0123126 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0122692 2.37775e-31 0 -2.37775e-31 0.166512 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -8.8982e-32 1.06173e-17 0 -1.06173e-17 4.29173e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -340.251 24.6698 -5.01974e-29 -24.6698 411.664 -1.77513e-30 -2.63134e-28 -9.56099e-30 215.658 - ------------------------- ---- Prestrain Output --- -Bhat_: 496.466 -381.931 2.97869e-27 -Beff_: 1.53305 -1.01964 1.18964e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=340.251 -q2=411.664 -q3=215.658 -q12=24.6698 -q13=-5.01974e-29 -q23=-1.77513e-30 -q_onetwo=24.669785 -b1=1.533048 -b2=-1.019644 -b3=0.000000 -mu_gamma=215.658269 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.40251e+02 & 4.11664e+02 & 2.15658e+02 & 2.46698e+01 & -5.01974e-29 & -1.77513e-30 & 1.53305e+00 & -1.01964e+00 & 1.18964e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/4/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/4/BMatrix.txt deleted file mode 100644 index c9db3e03c9ad3b60bd8cacb8adb52355da0d504e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.72098482922552654 -1 2 -1.14744657779775872 -1 3 3.91825309510527099e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/4/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/4/QMatrix.txt deleted file mode 100644 index ccea1bdd7273e9e9e9062263a6d35740211cd985..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 345.926976950185121 -1 2 25.6664796283641685 -1 3 2.08401027422254017e-29 -2 1 25.6664796283634722 -2 2 417.903558759234386 -2 3 -1.57155883461998446e-30 -3 1 4.44003335674174342e-28 -3 2 -2.59958830228052177e-28 -3 3 217.125790025531217 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/4/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/4/parameter.txt deleted file mode 100644 index 432ce2be318a17bdc10e3fd17f599981c7fc0712..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.07559686 -omega_target = 11.74608518 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/4/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/4/wood_european_beech_log.txt deleted file mode 100644 index bf6089333681bccd265676d7b911340fb01b02f7..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/4/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.212406 0 0 -0 0.0125934 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0125515 0 0 -0 0.166273 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -2.2583e-31 -9.09933e-18 0 --9.09933e-18 1.43314e-31 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -345.927 25.6665 2.08401e-29 -25.6665 417.904 -1.57156e-30 -4.44003e-28 -2.59959e-28 217.126 - ------------------------- ---- Prestrain Output --- -Bhat_: 565.884 -435.35 9.56995e-27 -Beff_: 1.72098 -1.14745 3.91825e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=345.927 -q2=417.904 -q3=217.126 -q12=25.6665 -q13=2.08401e-29 -q23=-1.57156e-30 -q_onetwo=25.666480 -b1=1.720985 -b2=-1.147447 -b3=0.000000 -mu_gamma=217.125790 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.45927e+02 & 4.17904e+02 & 2.17126e+02 & 2.56665e+01 & 2.08401e-29 & -1.57156e-30 & 1.72098e+00 & -1.14745e+00 & 3.91825e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/5/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/5/BMatrix.txt deleted file mode 100644 index 674e2ddf1da6e148efe2eded2b80af0be11f209a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.35288504646399543 -1 2 -1.58094620095160066 -1 3 -1.45140493978968462e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/5/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/5/QMatrix.txt deleted file mode 100644 index afbc9f1b09e7736bd78753ec6c9caa6c1931b8d7..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 364.973667574458489 -1 2 29.1597737399917705 -1 3 2.48152221474406565e-29 -2 1 29.159773739991568 -2 2 438.861265726750389 -2 3 1.17705134481170306e-29 -3 1 -2.08570636398829079e-28 -3 2 8.41465803799723714e-30 -3 3 222.043866028139036 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/5/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/5/parameter.txt deleted file mode 100644 index 4c4941fedec79ce486526cddfbd8a6d467e1ca0e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.07559686 -omega_target = 9.812372466 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/5/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/5/wood_european_beech_log.txt deleted file mode 100644 index 054f8db86088c55ecaaaa67bb1c552734953c45c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/5/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.211143 -3.41888e-31 0 --3.41888e-31 0.0135375 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0135007 3.94723e-32 0 -3.94723e-32 0.165529 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --6.88618e-32 3.77125e-18 0 -3.77125e-18 -3.55924e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -364.974 29.1598 2.48152e-29 -29.1598 438.861 1.17705e-29 --2.08571e-28 8.41466e-30 222.044 - ------------------------- ---- Prestrain Output --- -Bhat_: 812.641 -625.206 -3.7268e-27 -Beff_: 2.35289 -1.58095 -1.4514e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=364.974 -q2=438.861 -q3=222.044 -q12=29.1598 -q13=2.48152e-29 -q23=1.17705e-29 -q_onetwo=29.159774 -b1=2.352885 -b2=-1.580946 -b3=-0.000000 -mu_gamma=222.043866 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.64974e+02 & 4.38861e+02 & 2.22044e+02 & 2.91598e+01 & 2.48152e-29 & 1.17705e-29 & 2.35289e+00 & -1.58095e+00 & -1.45140e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/6/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/6/BMatrix.txt deleted file mode 100644 index 15dbbfeae71d005fa53223fcff8f72785d66b053..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.58466945364569956 -1 2 -1.74132517676458631 -1 3 3.26160858382710013e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/6/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/6/QMatrix.txt deleted file mode 100644 index 2d7c8ad2867e9b71a805f3dd67fe6a01586c3fa4..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 371.949765502413925 -1 2 30.4964857903768802 -1 3 2.94466984777030813e-29 -2 1 30.4964857903752353 -2 2 446.545241351734717 -2 3 -7.35320052767046649e-30 -3 1 3.20809705973873481e-29 -3 2 -1.02525233530851167e-29 -3 3 223.84245697482865 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/6/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/6/parameter.txt deleted file mode 100644 index e55a742522e93d4e884e8ccb19be9f57ed83ec5e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.43 -h = 0.0073 -omega_flat = 17.07559686 -omega_target = 9.10519385 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_4/6/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_4/6/wood_european_beech_log.txt deleted file mode 100644 index d3fc190c554b76e56a608e5630e998fe11e23e4a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_4/6/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.210713 -2.01199e-30 0 --2.01199e-30 0.013884 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0138489 1.0203e-30 0 -1.0203e-30 0.165276 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.29985e-32 -1.01999e-17 0 --1.01999e-17 7.85856e-33 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -371.95 30.4965 2.94467e-29 -30.4965 446.545 -7.3532e-30 -3.2081e-29 -1.02525e-29 223.842 - ------------------------- ---- Prestrain Output --- -Bhat_: 908.263 -698.757 8.30858e-28 -Beff_: 2.58467 -1.74133 3.26161e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=371.95 -q2=446.545 -q3=223.842 -q12=30.4965 -q13=2.94467e-29 -q23=-7.3532e-30 -q_onetwo=30.496486 -b1=2.584669 -b2=-1.741325 -b3=0.000000 -mu_gamma=223.842457 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.71950e+02 & 4.46545e+02 & 2.23842e+02 & 3.04965e+01 & 2.94467e-29 & -7.35320e-30 & 2.58467e+00 & -1.74133e+00 & 3.26161e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/0/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/0/BMatrix.txt deleted file mode 100644 index 61bf4c02de7349b920df34927596b2ea8dc6d283..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/0/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 0.439924156703411118 -1 2 -0.401353478359851856 -1 3 -1.33917713774311741e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/0/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/0/QMatrix.txt deleted file mode 100644 index 0573239c940e97e54ff7aea5abd7349a52dac632..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/0/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 328.656957590727984 -1 2 19.3307033947678626 -1 3 2.16486081328791633e-29 -2 1 19.3307033947683422 -2 2 343.27522247238096 -2 3 -9.07344115399714555e-30 -3 1 -1.1380929756198016e-28 -3 2 -1.41723767576839792e-29 -3 3 208.07137340394371 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/0/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/0/parameter.txt deleted file mode 100644 index d0b8e76dd1b2ed8f051b6acb14c347d78a5c3428..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/0/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.01520754 -omega_target = 15.30614414 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/0/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/0/wood_european_beech_log.txt deleted file mode 100644 index 4005139d3bf9a5ce1f2672a9e8f9e299d7a095b0..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/0/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.198603 0 0 -0 0.0109617 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0109478 0 0 -0 0.188228 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --3.06281e-32 -1.4463e-18 0 --1.4463e-18 -1.32067e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -328.657 19.3307 2.16486e-29 -19.3307 343.275 -9.07344e-30 --1.13809e-28 -1.41724e-29 208.071 - ------------------------- ---- Prestrain Output --- -Bhat_: 136.826 -129.271 -3.23024e-28 -Beff_: 0.439924 -0.401353 -1.33918e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=328.657 -q2=343.275 -q3=208.071 -q12=19.3307 -q13=2.16486e-29 -q23=-9.07344e-30 -q_onetwo=19.330703 -b1=0.439924 -b2=-0.401353 -b3=-0.000000 -mu_gamma=208.071373 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.28657e+02 & 3.43275e+02 & 2.08071e+02 & 1.93307e+01 & 2.16486e-29 & -9.07344e-30 & 4.39924e-01 & -4.01353e-01 & -1.33918e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/1/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/1/BMatrix.txt deleted file mode 100644 index 9e9590303632ffce0ce014ddc566c70a36438144..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/1/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 0.650970125236008834 -1 2 -0.594416405999156905 -1 3 3.48694300476661071e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/1/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/1/QMatrix.txt deleted file mode 100644 index aba9b1599f2fc6c95227fbd96ad9f91d0e0389fe..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/1/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 336.775668188409043 -1 2 20.5576645525588759 -1 3 1.12674605466430846e-29 -2 1 20.5576645525585455 -2 2 351.554256318237776 -2 3 7.74917172423648218e-30 -3 1 1.21263679753312909e-28 -3 2 -3.18041240931078951e-29 -3 3 210.135302315968403 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/1/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/1/parameter.txt deleted file mode 100644 index b0d2c55fd2d771fe89952ee2a9d7950154e2f9b4..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/1/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.01520754 -omega_target = 14.49463867 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/1/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/1/wood_european_beech_log.txt deleted file mode 100644 index f932bde557e428ab3df47b4d231c622f1a195b77..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/1/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.198056 0 0 -0 0.0113588 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0113456 0 0 -0 0.187739 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -4.43007e-32 7.09823e-18 0 -7.09823e-18 3.07893e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -336.776 20.5577 1.12675e-29 -20.5577 351.554 7.74917e-30 -1.21264e-28 -3.18041e-29 210.135 - ------------------------- ---- Prestrain Output --- -Bhat_: 207.011 -195.587 8.30574e-28 -Beff_: 0.65097 -0.594416 3.48694e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=336.776 -q2=351.554 -q3=210.135 -q12=20.5577 -q13=1.12675e-29 -q23=7.74917e-30 -q_onetwo=20.557665 -b1=0.650970 -b2=-0.594416 -b3=0.000000 -mu_gamma=210.135302 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.36776e+02 & 3.51554e+02 & 2.10135e+02 & 2.05577e+01 & 1.12675e-29 & 7.74917e-30 & 6.50970e-01 & -5.94416e-01 & 3.48694e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/2/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/2/BMatrix.txt deleted file mode 100644 index 2d2ef9f9781cfd1c5eb667068cea04fc95ac037b..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/2/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 0.920172747390642365 -1 2 -0.841121624353958652 -1 3 1.18942225067663841e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/2/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/2/QMatrix.txt deleted file mode 100644 index b81882e3e562c134c9c183d9430a76e42187d887..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/2/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 347.072689494949373 -1 2 22.1701727096316503 -1 3 2.62373288183761915e-29 -2 1 22.1701727096318493 -2 2 362.056508873997416 -2 3 3.94584527006056882e-30 -3 1 3.76458164879766929e-28 -3 2 -1.91446370346706928e-29 -3 3 212.750716895134673 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/2/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/2/parameter.txt deleted file mode 100644 index 050ee47ec1030d87c9702622b517e8a1f97d9837..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/2/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.01520754 -omega_target = 13.46629742 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/2/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/2/wood_european_beech_log.txt deleted file mode 100644 index 3949bbded0b8b0f0c282355bd0f530ef7271d90f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/2/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.197396 2.8545e-30 0 -2.8545e-30 0.0118635 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.011851 -3.30222e-31 0 --3.30222e-31 0.187151 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -1.14677e-31 4.82773e-18 0 -4.82773e-18 6.89019e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -347.073 22.1702 2.62373e-29 -22.1702 362.057 3.94585e-30 -3.76458e-28 -1.91446e-29 212.751 - ------------------------- ---- Prestrain Output --- -Bhat_: 300.719 -284.133 2.89301e-27 -Beff_: 0.920173 -0.841122 1.18942e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=347.073 -q2=362.057 -q3=212.751 -q12=22.1702 -q13=2.62373e-29 -q23=3.94585e-30 -q_onetwo=22.170173 -b1=0.920173 -b2=-0.841122 -b3=0.000000 -mu_gamma=212.750717 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.47073e+02 & 3.62057e+02 & 2.12751e+02 & 2.21702e+01 & 2.62373e-29 & 3.94585e-30 & 9.20173e-01 & -8.41122e-01 & 1.18942e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/3/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/3/BMatrix.txt deleted file mode 100644 index 8c520a8b7bb89acd1df77393bbf23e922adff722..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/3/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.09981717181125194 -1 2 -1.0060095222047456 -1 3 1.1129634830271552e-28 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/3/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/3/QMatrix.txt deleted file mode 100644 index 5b9b5d35efc1ba760cd232593bad2d4619486769..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/3/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 353.912010679764023 -1 2 23.2759790076002773 -1 3 1.64459009811114844e-29 -2 1 23.2759790075993571 -2 2 369.033280851314771 -2 3 -8.32540996359714315e-30 -3 1 2.33091146878111801e-27 -3 2 -6.01444150150604479e-28 -3 3 214.486325915278201 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/3/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/3/parameter.txt deleted file mode 100644 index 92eb0b4bac35f2decac8339fa42884e36b31dd84..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/3/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.01520754 -omega_target = 12.78388234 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/3/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/3/wood_european_beech_log.txt deleted file mode 100644 index cb723bea063bdf42de3ca636cc48e103eda4dc53..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/3/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.196979 -7.05512e-31 0 --7.05512e-31 0.0121993 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0121873 5.01799e-31 0 -5.01799e-31 0.186778 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -8.3234e-31 -8.23528e-18 0 --8.23528e-18 5.91048e-31 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -353.912 23.276 1.64459e-29 -23.276 369.033 -8.32541e-30 -2.33091e-27 -6.01444e-28 214.486 - ------------------------- ---- Prestrain Output --- -Bhat_: 365.823 -345.652 2.70402e-26 -Beff_: 1.09982 -1.00601 1.11296e-28 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=353.912 -q2=369.033 -q3=214.486 -q12=23.276 -q13=1.64459e-29 -q23=-8.32541e-30 -q_onetwo=23.275979 -b1=1.099817 -b2=-1.006010 -b3=0.000000 -mu_gamma=214.486326 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.53912e+02 & 3.69033e+02 & 2.14486e+02 & 2.32760e+01 & 1.64459e-29 & -8.32541e-30 & 1.09982e+00 & -1.00601e+00 & 1.11296e-28 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/4/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/4/BMatrix.txt deleted file mode 100644 index c4f90cafe0b44639789f26859db0bee5b1c4d125..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/4/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.24601613780542619 -1 2 -1.14034184949737205 -1 3 -5.56274868992305688e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/4/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/4/QMatrix.txt deleted file mode 100644 index b89cf8ca6c6c10345c7bd3c2ae2be3a1fccc8cb7..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/4/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 359.461266865855634 -1 2 24.1935687071423047 -1 3 -1.79774004728882143e-29 -2 1 24.1935687071398782 -2 2 374.694710914329562 -2 3 -7.77266806955800646e-30 -3 1 -1.0385872795169322e-27 -3 2 2.48082284039166116e-28 -3 3 215.893565448499913 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/4/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/4/parameter.txt deleted file mode 100644 index de3cf45338146cc687c275e484e04203ac26b97c..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/4/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.01520754 -omega_target = 12.23057715 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/4/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/4/wood_european_beech_log.txt deleted file mode 100644 index f1747012bca1b1a8f4361d297e94ed7f11bb258e..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/4/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.196652 0 0 -0 0.012472 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0124604 0 0 -0 0.186487 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --3.67324e-31 1.09088e-18 0 -1.09088e-18 -2.60864e-31 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -359.461 24.1936 -1.79774e-29 -24.1936 374.695 -7.77267e-30 --1.03859e-27 2.48082e-28 215.894 - ------------------------- ---- Prestrain Output --- -Bhat_: 420.306 -397.134 -1.35866e-26 -Beff_: 1.24602 -1.14034 -5.56275e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=359.461 -q2=374.695 -q3=215.894 -q12=24.1936 -q13=-1.79774e-29 -q23=-7.77267e-30 -q_onetwo=24.193569 -b1=1.246016 -b2=-1.140342 -b3=-0.000000 -mu_gamma=215.893565 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.59461e+02 & 3.74695e+02 & 2.15894e+02 & 2.41936e+01 & -1.79774e-29 & -7.77267e-30 & 1.24602e+00 & -1.14034e+00 & -5.56275e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/5/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/5/BMatrix.txt deleted file mode 100644 index 15cb2b552a732fd65bdfbe2dca2f3a5487a2fd5a..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/5/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 1.78134022927832869 -1 2 -1.63322079509065432 -1 3 -9.22326172522742552e-30 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/5/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/5/QMatrix.txt deleted file mode 100644 index 99bb345dd7509905e9e8d47874dea6d6c105833d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/5/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 379.673394129127701 -1 2 27.6895846892567299 -1 3 -1.86283647940911001e-29 -2 1 27.6895846892586732 -2 2 395.32017570776992 -2 3 6.30472426594605529e-30 -3 1 -1.12615676524030904e-28 -3 2 4.01302962758947862e-29 -3 3 221.010876128094736 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/5/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/5/parameter.txt deleted file mode 100644 index 8bb31a3266867396524dcaa72685b079b930087d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/5/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.01520754 -omega_target = 10.21852839 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/5/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/5/wood_european_beech_log.txt deleted file mode 100644 index ffb48f4e262c769fba10166a4ce9b6ce9dbb39fc..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/5/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.195543 0 0 -0 0.0134673 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0134571 0 0 -0 0.185497 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: --4.0418e-32 9.62019e-18 0 -9.62019e-18 -3.27252e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -379.673 27.6896 -1.86284e-29 -27.6896 395.32 6.30472e-30 --1.12616e-28 4.01303e-29 221.011 - ------------------------- ---- Prestrain Output --- -Bhat_: 631.104 -596.321 -2.30459e-27 -Beff_: 1.78134 -1.63322 -9.22326e-30 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=379.673 -q2=395.32 -q3=221.011 -q12=27.6896 -q13=-1.86284e-29 -q23=6.30472e-30 -q_onetwo=27.689585 -b1=1.781340 -b2=-1.633221 -b3=-0.000000 -mu_gamma=221.010876 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.79673e+02 & 3.95320e+02 & 2.21011e+02 & 2.76896e+01 & -1.86284e-29 & 6.30472e-30 & 1.78134e+00 & -1.63322e+00 & -9.22326e-30 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/6/BMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/6/BMatrix.txt deleted file mode 100644 index 60f803635315c5f708ac1c621cdf059635e2c93d..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/6/BMatrix.txt +++ /dev/null @@ -1,3 +0,0 @@ -1 1 2.01623688784649513 -1 2 -1.84995173859702033 -1 3 1.83523047826535922e-29 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/6/QMatrix.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/6/QMatrix.txt deleted file mode 100644 index 8dcdbd2ade45a6ed89181f3c5b88afeceb681ddc..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/6/QMatrix.txt +++ /dev/null @@ -1,9 +0,0 @@ -1 1 388.499002728981282 -1 2 29.2916250098108364 -1 3 -9.65584236917984567e-30 -2 1 29.2916250098084028 -2 2 404.328541633218379 -2 3 3.02563594263234753e-31 -3 1 3.47951730227354385e-28 -3 2 5.37822581451953635e-29 -3 3 223.240865161292078 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/6/parameter.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/6/parameter.txt deleted file mode 100644 index d346b36383690b8262327fc2dfd64991e2c0af4f..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/6/parameter.txt +++ /dev/null @@ -1,4 +0,0 @@ -r = 0.49 -h = 0.008 -omega_flat = 17.01520754 -omega_target = 9.341730605 diff --git a/experiment/micro-problem/compWood/wood-bilayer/results_5/6/wood_european_beech_log.txt b/experiment/micro-problem/compWood/wood-bilayer/results_5/6/wood_european_beech_log.txt deleted file mode 100644 index 3cc58b5d9fd9cddb87c0190dffa7e5baec8b7854..0000000000000000000000000000000000000000 --- a/experiment/micro-problem/compWood/wood-bilayer/results_5/6/wood_european_beech_log.txt +++ /dev/null @@ -1,51 +0,0 @@ -Number of Grid-Elements in each direction: [16,16,16] -solveLinearSystems: We use UMFPACK solver. -Solver-type used: UMFPACK-Solver ----------- OUTPUT ---------- - -------------------- -Corrector-Matrix M_1: --0.195096 0 0 -0 0.0139027 0 -0 0 0 - - -------------------- -Corrector-Matrix M_2: --0.0138931 0 0 -0 0.185099 0 -0 0 0 - - -------------------- -Corrector-Matrix M_3: -8.60627e-32 -1.35096e-17 0 --1.35096e-17 4.55113e-32 0 -0 0 0 - - -------------------- ---- Effective moduli --- -Qeff_: -388.499 29.2916 -9.65584e-30 -29.2916 404.329 3.02564e-31 -3.47952e-28 5.37823e-29 223.241 - ------------------------- ---- Prestrain Output --- -Bhat_: 729.118 -688.929 4.69904e-27 -Beff_: 2.01624 -1.84995 1.83523e-29 (Effective Prestrain) ------------------------- -size of FiniteElementBasis: 13056 -q1=388.499 -q2=404.329 -q3=223.241 -q12=29.2916 -q13=-9.65584e-30 -q23=3.02564e-31 -q_onetwo=29.291625 -b1=2.016237 -b2=-1.849952 -b3=0.000000 -mu_gamma=223.240865 ------------------------------------------------------------------------------------------------------------------------------------------------------- - Levels | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | ------------------------------------------------------------------------------------------------------------------------------------------------------- - 4 & 3.88499e+02 & 4.04329e+02 & 2.23241e+02 & 2.92916e+01 & -9.65584e-30 & 3.02564e-31 & 2.01624e+00 & -1.84995e+00 & 1.83523e-29 & ------------------------------------------------------------------------------------------------------------------------------------------------------- diff --git a/experiment/micro-problem/compWood/wood-bilayer/wood_european_beech.py b/experiment/micro-problem/compWood/wood-bilayer/wood_european_beech.py index 3f3e00ca1b1a7e51d8138cb6b21b19189b192b33..ec8525d5d972cb9d0c965c692b392ef4e2dec2fd 100644 --- a/experiment/micro-problem/compWood/wood-bilayer/wood_european_beech.py +++ b/experiment/micro-problem/compWood/wood-bilayer/wood_european_beech.py @@ -17,7 +17,7 @@ parameterSet = ParameterSet() # Paths ############################################# # Path for results and logfile -parameterSet.outputPath='/home/klaus/Desktop/Dune_release/dune-microstructure/experiment/wood-bilayer/results' +parameterSet.outputPath='/home/klaus/Desktop/Dune_TestTest/dune-microstructure/experiment/wood-bilayer/results' parameterSet.baseName= 'wood_european_beech' #(needed for Output-Filename) # Path for material description @@ -25,182 +25,153 @@ parameterSet.baseName= 'wood_european_beech' #(needed for Output-Filename) #--------------------------------------------------------------- # Wooden bilayer, https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6191116/#pone.0205607.ref015 -#--- define indicator function -# x[0] : y1-component -1/2 to 1/2 -# x[1] : y2-component -1/2 to 1/2 -# x[2] : x3-component range -1/2 to 1/2 -#--- define indicator function -def indicatorFunction(x): - factor=1 - if (x[2]>=(0.5-param_r)): - return 1 #Phase1 - else : - return 2 #Phase2 - -# --- Number of material phases -parameterSet.Phases=2 - -# Parameters of the model -# -- (thickness upper layer) / (thickness) -param_r = 0.12 -# -- thickness [meter] -param_h = 0.0047 -# -- moisture content in the flat state [%] -param_omega_flat = 17.32986047 -# -- moisture content in the target state [%] -param_omega_target = 14.70179844 -# -- Drehwinkel -param_theta = 0 - -# -# -# -# -- increment of the moisture content -delta_omega=param_omega_target-param_omega_flat -# moisture content for material law -omega=param_omega_target - -# --- Material properties from https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6191116/#pone.0205607.ref015 -# --- for European beech, moisture content omega = 15% -# --- L=direction orthogonal to layering and fibres = orthogonal to wood stem cross-section -# --- T=tangential zu layering -# --- R=orthogonal zu layering -# --- in MPa -# --- Properties are defined by affine function in dependence of moisture content omega via property = b_0+b_1 \omega -# --- coefficients of affine function are contained in the following array -# --- data taken from http://dx.doi.org/10.1016/j.cma.2014.10.031 - -properties_coefficients=np.array([ - # [b_0, b_1] - [2565.6,-59.7], # E_R [MPa] - [885.4, -23.4], # E_T [MPa] - [17136.7,-282.4], # E_L [MPa] - [667.8, -15.19], # G_RT [MPa] - [1482, -15.26], # G_RL [MPa] - [1100, -17.72], # G_TL [MPa] - [0.2933, -0.001012], # nu_TR [1] - [0.383, -0.008722], # nu_LR [1] - [0.3368, -0.009071] # nu_LT [1] - ]) -# Compute actual material properties -E_R = properties_coefficients[0,0]+properties_coefficients[0,1]*omega -E_T = properties_coefficients[1,0]+properties_coefficients[1,1]*omega -E_L = properties_coefficients[2,0]+properties_coefficients[2,1]*omega -G_RT = properties_coefficients[3,0]+properties_coefficients[3,1]*omega -G_LR = properties_coefficients[4,0]+properties_coefficients[4,1]*omega -G_LT = properties_coefficients[5,0]+properties_coefficients[5,1]*omega -nu_TR = properties_coefficients[6,0]+properties_coefficients[6,1]*omega -nu_LR = properties_coefficients[7,0]+properties_coefficients[7,1]*omega -nu_LT = properties_coefficients[8,0]+properties_coefficients[8,1]*omega -# Compute the remaining Poisson ratios -nu_TL=nu_LT*E_T/E_L -nu_RT=nu_TR*E_R/E_T -nu_RL=nu_LR*E_R/E_L -# -# --- differential swelling strain -# --- relation to swelling strain eps: eps=alpha* delta_omega with delta_omega = change of water content in % -alpha_L=0.00011 # PLOS paper -alpha_R=0.00191 # PLOS paper -alpha_T=0.00462 # PLOS paper -# Umrechnen -#alpha_L=(1-1/(1+delta_omega*alpha_L))/delta_omega -#alpha_R=(1-1/(1+delta_omega*alpha_R))/delta_omega -#alpha_T=(1-1/(1+delta_omega*alpha_T))/delta_omega -# --- define geometry - - - -# --- PHASE 1 -# y_1-direction: L -# y_2-direction: T -# x_3-direction: R -# phase1_type="orthotropic" -# materialParameters_phase1 = [E_L,E_T,E_R,G_TL,G_RT,G_RL,nu_LT,nu_LR,nu_TR] -# parameterSet.phase1_type="general_anisotropic" -# [E_1,E_2,E_3]=[E_L,E_T,E_R] -# [nu_12,nu_13,nu_23]=[nu_LT,nu_LR,nu_TR] -# [nu_21,nu_31,nu_32]=[nu_TL,nu_RL,nu_RT] -# [G_12,G_31,G_23]=[G_LT,G_LR,G_RT] -# compliance_S=np.array([[1/E_1, -nu_21/E_2, -nu_31/E_3, 0.0, 0.0, 0.0], -# [-nu_12/E_1, 1/E_2, -nu_32/E_3, 0.0, 0.0, 0.0], -# [-nu_13/E_1, -nu_23/E_2, 1/E_3, 0.0, 0.0, 0.0], -# [0.0, 0.0, 0.0, 1/G_23, 0.0, 0.0], -# [0.0, 0.0, 0.0, 0.0, 1/G_31, 0.0], -# [0.0, 0.0, 0.0, 0.0, 0.0, 1/G_12]]); -# materialParameters_phase1 = compliance_S - -# def prestrain_phase1(x): -# # hB=delta_omega * alpha with delta_omega increment of moisture content and alpha swelling factor. -# return [[1/param_h*delta_omega*alpha_L, 0, 0], [0,1/param_h*delta_omega*alpha_T,0], [0,0,1/param_h*delta_omega*alpha_R]] - -#Nun mit R und T vertauscht: - -# y_1-direction: L -# y_2-direction: R -# x_3-direction: T -# phase1_type="orthotropic" -# materialParameters_phase1 = [E_L,E_T,E_R,G_TL,G_RT,G_RL,nu_LT,nu_LR,nu_TR] -parameterSet.phase1_type="general_anisotropic" -[E_1,E_2,E_3]=[E_L,E_R,E_T] -[nu_12,nu_13,nu_23]=[nu_LR,nu_LT,nu_RT] -[nu_21,nu_31,nu_32]=[nu_RL,nu_TL,nu_TR] -[G_12,G_31,G_23]=[G_LR,G_LT,G_RT] -compliance_S=np.array([[1/E_1, -nu_21/E_2, -nu_31/E_3, 0.0, 0.0, 0.0], - [-nu_12/E_1, 1/E_2, -nu_32/E_3, 0.0, 0.0, 0.0], - [-nu_13/E_1, -nu_23/E_2, 1/E_3, 0.0, 0.0, 0.0], - [0.0, 0.0, 0.0, 1/G_23, 0.0, 0.0], - [0.0, 0.0, 0.0, 0.0, 1/G_31, 0.0], - [0.0, 0.0, 0.0, 0.0, 0.0, 1/G_12]]); -materialParameters_phase1 = compliance_S - -def prestrain_phase1(x): - # hB=delta_omega * alpha with delta_omega increment of moisture content and alpha swelling factor. - return [[1/param_h*delta_omega*alpha_L, 0, 0], [0,1/param_h*delta_omega*alpha_R,0], [0,0,1/param_h*delta_omega*alpha_T]] - -# --- PHASE 2 -# y_1-direction: R -# y_2-direction: L -# x_3-direction: T -parameterSet.phase2_type="general_anisotropic" -[E_1,E_2,E_3]=[E_R,E_L,E_T] -[nu_12,nu_13,nu_23]=[nu_RL,nu_RT,nu_LT] -[nu_21,nu_31,nu_32]=[nu_LR,nu_TR,nu_TL] -[G_12,G_31,G_23]=[G_LR,G_RT,G_LT] -compliance_S=np.array([[1/E_1, -nu_21/E_2, -nu_31/E_3, 0.0, 0.0, 0.0], - [-nu_12/E_1, 1/E_2, -nu_32/E_3, 0.0, 0.0, 0.0], - [-nu_13/E_1, -nu_23/E_2, 1/E_3, 0.0, 0.0, 0.0], - [0.0, 0.0, 0.0, 1/G_23, 0.0, 0.0], - [0.0, 0.0, 0.0, 0.0, 1/G_31, 0.0], - [0.0, 0.0, 0.0, 0.0, 0.0, 1/G_12]]); -materialParameters_phase2 = compliance_S -def prestrain_phase2(x): - return [[1/param_h*delta_omega*alpha_R, 0, 0], [0,1/param_h*delta_omega*alpha_L,0], [0,0,1/param_h*delta_omega*alpha_T]] - -#Rotation um 2. Achse (= L) -parameterSet.phase2_axis = 2 -# phase2_angle = param_theta -# -- Drehwinkel -parameterSet.phase2_angle = param_theta - - - -# # --- PHASE 3 = Phase 1 gedreht -# # y_1-direction: L -# # y_2-direction: R -# # x_3-direction: T -# parameterSet.phase3_type="general_anisotropic" -# # Drehung um theta um Achse 2 = x_3-Achse -# N=elast.rotation_matrix_compliance(2,param_theta) -# materialParameters_phase3 = np.dot(np.dot(N,materialParameters_phase1),N.T) -# materialParameters_phase3 = 0.5*(materialParameters_phase3.T+materialParameters_phase3) -# # rotation of strain -# def prestrain_phase3(x): -# return elast.voigt_to_strain(np.dot(elast.rotation_matrix_compliance(2,param_theta),np.dot(elast.strain_to_voigt(np.array(prestrain_phase1(x))),N.T))).tolist() - - - -# --- Choose scale ratio gamma: -parameterSet.gamma=1.0 + +class Microstructure: + def __init__(self): + # self.macroPoint = macroPoint + self.gamma = 1.0 #in the future this might change depending on macroPoint. + self.phases = 2 #in the future this might change depending on macroPoint. + #--- Define different material phases: + + # ########### Options for material phases: ################################# + # # 1. "isotropic" 2. "orthotropic" 3. "transversely_isotropic" 4. "general_anisotropic" + # ######################################################################### + # ## Notation - Parameter input : + # # isotropic (Lame parameters) : [mu , lambda] + # # orthotropic : [E1,E2,E3,G12,G23,G31,nu12,nu13,nu23] # see https://en.wikipedia.org/wiki/Poisson%27s_ratio with x=1,y=2,z=3 + # # transversely_isotropic : [E1,E2,G12,nu12,nu23] + # # general_anisotropic : full compliance matrix C + # ###################################################################### + # Parameters of the model + # -- (thickness upper layer) / (thickness) + self.param_r = 0.49 + # -- thickness [meter] + self.param_h = 0.008 + # -- moisture content in the flat state [%] + self.param_omega_flat = 17.01520754 + # -- moisture content in the target state [%] + self.param_omega_target = 9.341730605 + # -- Drehwinkel + self.param_theta = np.pi/4.0 + # -- increment of the moisture content + self.delta_omega=self.param_omega_target-self.param_omega_flat + # moisture content for material law + self.omega=self.param_omega_target + + # --- Material properties from https://www.ncbi.nlm.nih.gov/pmc/articles/PMC6191116/#pone.0205607.ref015 + # --- for European beech, moisture content omega = 15% + # --- L=direction orthogonal to layering and fibres = orthogonal to wood stem cross-section + # --- T=tangential zu layering + # --- R=orthogonal zu layering + # --- in MPa + # --- Properties are defined by affine function in dependence of moisture content omega via property = b_0+b_1 \omega + # --- coefficients of affine function are contained in the following array + # --- data taken from http://dx.doi.org/10.1016/j.cma.2014.10.031 + self.properties_coefficients=np.array([ + # [b_0, b_1] + [2565.6,-59.7], # E_R [MPa] + [885.4, -23.4], # E_T [MPa] + [17136.7,-282.4], # E_L [MPa] + [667.8, -15.19], # G_RT [MPa] + [1482, -15.26], # G_RL [MPa] + [1100, -17.72], # G_TL [MPa] + [0.2933, -0.001012], # nu_TR [1] + [0.383, -0.008722], # nu_LR [1] + [0.3368, -0.009071] # nu_LT [1] + ]) + # Compute actual material properties + self.E_R = self.properties_coefficients[0,0]+self.properties_coefficients[0,1]*self.omega + self.E_T = self.properties_coefficients[1,0]+self.properties_coefficients[1,1]*self.omega + self.E_L = self.properties_coefficients[2,0]+self.properties_coefficients[2,1]*self.omega + self.G_RT = self.properties_coefficients[3,0]+self.properties_coefficients[3,1]*self.omega + self.G_LR = self.properties_coefficients[4,0]+self.properties_coefficients[4,1]*self.omega + self.G_LT = self.properties_coefficients[5,0]+self.properties_coefficients[5,1]*self.omega + self.nu_TR = self.properties_coefficients[6,0]+self.properties_coefficients[6,1]*self.omega + self.nu_LR = self.properties_coefficients[7,0]+self.properties_coefficients[7,1]*self.omega + self.nu_LT = self.properties_coefficients[8,0]+self.properties_coefficients[8,1]*self.omega + self# Compute the remaining Poisson ratios + self.nu_TL=self.nu_LT*self.E_T/self.E_L + self.nu_RT=self.nu_TR*self.E_R/self.E_T + self.nu_RL=self.nu_LR*self.E_R/self.E_L + # + # --- differential swelling strain + # --- relation to swelling strain eps: eps=alpha* delta_omega with delta_omega = change of water content in % + self.alpha_L=0.00011 # PLOS paper + self.alpha_R=0.00191 # PLOS paper + self.alpha_T=0.00462 # PLOS paper + + # y_1-direction: L + # y_2-direction: R + # x_3-direction: T + # phase1_type="orthotropic" + # materialParameters_phase1 = [E_L,E_T,E_R,G_TL,G_RT,G_RL,nu_LT,nu_LR,nu_TR] + self.phase1_type="general_anisotropic" + [E_1,E_2,E_3]=[self.E_L,self.E_R,self.E_T] + [nu_12,nu_13,nu_23]=[self.nu_LR,self.nu_LT,self.nu_RT] + [nu_21,nu_31,nu_32]=[self.nu_RL,self.nu_TL,self.nu_TR] + [G_12,G_31,G_23]=[self.G_LR,self.G_LT,self.G_RT] + compliance_S=np.array([[1/E_1, -nu_21/E_2, -nu_31/E_3, 0.0, 0.0, 0.0], + [-nu_12/E_1, 1/E_2, -nu_32/E_3, 0.0, 0.0, 0.0], + [-nu_13/E_1, -nu_23/E_2, 1/E_3, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 1/G_23, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 1/G_31, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 1/G_12]]); + self.materialParameters_phase1 = compliance_S + + # --- PHASE 2 + # y_1-direction: R + # y_2-direction: L + # x_3-direction: T + self.phase2_type="general_anisotropic" + [E_1,E_2,E_3]=[self.E_R,self.E_L,self.E_T] + [nu_12,nu_13,nu_23]=[self.nu_RL,self.nu_RT,self.nu_LT] + [nu_21,nu_31,nu_32]=[self.nu_LR,self.nu_TR,self.nu_TL] + [G_12,G_31,G_23]=[self.G_LR,self.G_RT,self.G_LT] + self.materialParameters_phase2 =np.array([[1/E_1, -nu_21/E_2, -nu_31/E_3, 0.0, 0.0, 0.0], + [-nu_12/E_1, 1/E_2, -nu_32/E_3, 0.0, 0.0, 0.0], + [-nu_13/E_1, -nu_23/E_2, 1/E_3, 0.0, 0.0, 0.0], + [0.0, 0.0, 0.0, 1/G_23, 0.0, 0.0], + [0.0, 0.0, 0.0, 0.0, 1/G_31, 0.0], + [0.0, 0.0, 0.0, 0.0, 0.0, 1/G_12]]); + #Rotation um 2. Achse (= L) + self.phase2_axis = 2 + # phase2_angle = param_theta + # -- Drehwinkel + self.phase2_angle = self.param_theta + + def prestrain_phase1(self,x): + # hB=delta_omega * alpha with delta_omega increment of moisture content and alpha swelling factor. + return [[1/self.param_h*self.delta_omega*self.alpha_L, 0, 0], [0,1/self.param_h*self.delta_omega*self.alpha_R,0], [0,0,1/self.param_h*self.delta_omega*self.alpha_T]] + + + + def prestrain_phase2(self,x): + return [[1/self.param_h*self.delta_omega*self.alpha_R, 0, 0], [0,1/self.param_h*self.delta_omega*self.alpha_L,0], [0,0,1/self.param_h*self.delta_omega*self.alpha_T]] + + + + #--- define indicator function + # x[0] : y1-component -1/2 to 1/2 + # x[1] : y2-component -1/2 to 1/2 + # x[2] : x3-component range -1/2 to 1/2 + #--- define indicator function + def indicatorFunction(self,x): + factor=1 + if (x[2]>=(0.5-self.param_r)): + return 1 #Phase1 + else : + return 2 #Phase2 + + + + + +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + + + + + @@ -208,61 +179,40 @@ parameterSet.gamma=1.0 ############################################# # Grid parameters ############################################# -## numLevels : Number of Levels on which solution is computed. starting with a 2x2x2 cube mesh. -## {start,finish} computes on all grid from 2^(start) to 2^finish refinement -#---------------------------------------------------- -# parameterSet.numLevels= '3 3' # computes all levels from first to second entry -parameterSet.numLevels= '4 4' +parameterSet.microGridLevel = 4 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER (default), #4: UMFPACK - SOLVER +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) ############################################# # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: -parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition +parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - +parameterSet.MaterialSubsamplingRefinement= 2 # --- Write Correctos to VTK-File: -parameterSet.write_VTK = 0 +parameterSet.writeCorrectorsVTK = 1 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = True - -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# The grid can be refined several times for a higher resolution in the VTK-file. -parameterSet.subsamplingRefinement = 0 - -# --- (Optional output) L2Error, integral mean: -#parameterSet.write_L2Error = 1 -#parameterSet.write_IntegralMean = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 - -# --- Write corrector-coefficients to log-File: -#parameterSet.write_corrector_phi1 = 1 -#parameterSet.write_corrector_phi2 = 1 -#parameterSet.write_corrector_phi3 = 1 - -# --- Print Condition number of matrix (can be expensive): -#parameterSet.print_conditionNumber= 1 #(default=false) - -# --- write effective quantities to Matlab-folder for symbolic minimization: -parameterSet.write_toMATLAB = 1 # writes effective quantities to .txt-files QMatrix.txt and BMatrix.txt +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. \ No newline at end of file diff --git a/experiment/micro-problem/fibreRotation_microproblem.py b/experiment/micro-problem/fibreRotation_microproblem.py new file mode 100644 index 0000000000000000000000000000000000000000..1e4505dbb90b2858d599948487daadee488f7cc0 --- /dev/null +++ b/experiment/micro-problem/fibreRotation_microproblem.py @@ -0,0 +1,107 @@ +import math +import numpy as np + +class ParameterSet(dict): + def __init__(self, *args, **kwargs): + super(ParameterSet, self).__init__(*args, **kwargs) + self.__dict__ = self + +parameterSet = ParameterSet() + +"""" + Experiment: Microstructure + featuring prestrained isotopic fibres located + in the top layer aligned diagonally with an angle alpha + + theta: fibreRadius + +""" + +############################################# +# Paths +############################################# +parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/outputs_buckling_microproblem' +parameterSet.baseName= 'fibreRotation_microproblem' + +##################### MICROSCALE PROBLEM #################### +class Microstructure: + def __init__(self): + # self.macroPoint = macroPoint + self.gamma = 2 + self.phases = 2 #in the future this might change depending on macroPoint. + #--- Define different material phases: + #- PHASE 1 + self.phase1_type="isotropic" + # self.materialParameters_phase1 = [200, 1.0] + self.materialParameters_phase1 = [28.7,22.5] # glass (Fibre) + + #- PHASE 2 + self.phase2_type="isotropic" + # self.materialParameters_phase2 = [100, 1.0] + self.materialParameters_phase2 = [1.2,2.58] #Matrix-material: polystyrene + + + self.theta = 0.2 + self.alpha = 1.0471975511965976 + + #--- Indicator function for material phases + def indicatorFunction(self,x): + if (abs(-np.cos(self.alpha)*x[0] + np.sin(self.alpha)*x[1] ) < self.theta and x[2] >= 0 ): + return 1 #Phase1 + else : + return 2 #Phase2 + + #--- Define prestrain function for each phase + def prestrain_phase1(self,x): + rho = 1.0 + return [[rho*1.0, 0, 0], [0,rho*1.0,0], [0,0,rho*1.0]] + + def prestrain_phase2(self,x): + return [[0, 0, 0], [0,0,0], [0,0,0]] + + +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + +############################################# +# Grid parameters +############################################# +parameterSet.microGridLevel = 4 + +############################################# +# Assembly options +############################################# +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices + +############################################# +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) +############################################# +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output + +############################################# +# Write/Output options #(default=false) +############################################# +# --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: +parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition +#parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) +parameterSet.MaterialSubsamplingRefinement= 2 +# --- Write Correctos to VTK-File: +parameterSet.writeCorrectorsVTK = 1 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = True + +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. + + + diff --git a/experiment/micro-problem/material_orthotropic.py b/experiment/micro-problem/material_orthotropic.py index be1611ca1492f21bc192282ad1f747be3ffed52c..ecb33bf4748abe64b69e193fd2d6a36abfbc1386 100644 --- a/experiment/micro-problem/material_orthotropic.py +++ b/experiment/micro-problem/material_orthotropic.py @@ -73,30 +73,28 @@ def prestrain_phase2(x): def prestrain_phase3(x): return [[0, 0, 0], [0,0,0], [0,0,0]] - +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. ############################################# # Grid parameters ############################################# -## numLevels : Number of Levels on which solution is computed. starting with a 2x2x2 cube mesh. -## {start,finish} computes on all grid from 2^(start) to 2^finish refinement -#---------------------------------------------------- -parameterSet.numLevels= '3 3' # computes all levels from first to second entry +parameterSet.microGridLevel = 3 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER (default), #4: UMFPACK - SOLVER +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 3 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) @@ -104,30 +102,16 @@ parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for sol # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - +parameterSet.MaterialSubsamplingRefinement= 2 # --- Write Correctos to VTK-File: -parameterSet.write_VTK = 1 - -# The grid can be refined several times for a higher resolution in the VTK-file. -parameterSet.subsamplingRefinement = 2 - -# --- (Optional output) L2Error, integral mean: -#parameterSet.write_L2Error = 1 -#parameterSet.write_IntegralMean = 1 +parameterSet.writeCorrectorsVTK = 1 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = True -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 1 - -# --- Write corrector-coefficients to log-File: -#parameterSet.write_corrector_phi1 = 1 -#parameterSet.write_corrector_phi2 = 1 -#parameterSet.write_corrector_phi3 = 1 - -# --- Print Condition number of matrix (can be expensive): -#parameterSet.print_conditionNumber= 1 #(default=false) - -# --- write effective quantities to Matlab-folder for symbolic minimization: -#parameterSet.write_toMATLAB = 0 # writes effective quantities to .txt-files QMatrix.txt and BMatrix.txt +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/experiment/micro-problem/parametrized_laminate.py b/experiment/micro-problem/parametrized_laminate.py index 7c89d3693da98d48f4862d4de5ac581907ae2dc4..318c1d8d698afd594d65e8a11bed26f75fd59cb2 100644 --- a/experiment/micro-problem/parametrized_laminate.py +++ b/experiment/micro-problem/parametrized_laminate.py @@ -17,7 +17,7 @@ parameterSet = ParameterSet() theta: width of center material theta_rho: ratio between the prestrain of the fibres. - theta_mu: ratio between lema + theta_mu: ratio between lame parameters """ @@ -38,12 +38,10 @@ parameterSet.baseName= 'parametrized_laminate' #(needed for Output-Filename) # theta_mu = 10.0 # mu_2 = theta_mu * mu_1; # rho_1 = 1.0; -# theta_rho = 10.0 +# theta_rho = 0.1 # rho_2 = rho_1*theta_rho; - - class Microstructure: def __init__(self): # self.macroPoint = macroPoint @@ -94,7 +92,7 @@ class Microstructure: #--- Define prestrain function for each phase (also works with non-constant values) def prestrain_phase1(self,x): - theta_rho = 10.0 + theta_rho = 0.1 return [[theta_rho*1.0, 0, 0], [0,theta_rho*1.0,0], [0,0,theta_rho*1.0]] def prestrain_phase2(self,x): @@ -107,25 +105,28 @@ class Microstructure: return [[0, 0, 0], [0,0,0], [0,0,0]] +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + ############################################# # Grid parameters ############################################# -parameterSet.microGridLevel = 3 +parameterSet.microGridLevel = 2 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) @@ -134,23 +135,15 @@ parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for sol parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) parameterSet.MaterialSubsamplingRefinement= 2 - - -parameterSet.write_EffectiveQuantitiesToTxt= True - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - -parameterSet.print_corrector_matrices = 0 - # --- Write Correctos to VTK-File: parameterSet.writeCorrectorsVTK = 1 - -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 - # --- write effective quantities (Qhom.Beff) to .txt-files -parameterSet.write_EffectiveQuantitiesToTxt = True \ No newline at end of file +parameterSet.write_EffectiveQuantitiesToTxt = True + +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. \ No newline at end of file diff --git a/experiment/micro-problem/prestrainedFibre.py b/experiment/micro-problem/prestrainedFibre.py index 8b4d90d0ffc0072e02de0fd3b4b073e8535d64d0..477bf3c54e8346e8a112f4dca4fda0d2b6da07ba 100644 --- a/experiment/micro-problem/prestrainedFibre.py +++ b/experiment/micro-problem/prestrainedFibre.py @@ -22,6 +22,8 @@ parameterSet = ParameterSet() parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/outputs_prestrainedFibre' parameterSet.baseName= 'prestrainedFibre' + + ##################### MICROSCALE PROBLEM #################### class Microstructure: def __init__(self): @@ -30,15 +32,23 @@ class Microstructure: #--- Define different material phases: #- PHASE 1 self.phase1_type="isotropic" - mu_phase1 = 100 - self.materialParameters_phase1 = [mu_phase1, 1.0] + mu_phase1 = 1.5 + # mu_phase1 = 1.5 + # lambda_phase1 = 100 + + # self.materialParameters_phase1 = [mu_phase1, 1.0] # self.materialParameters_phase1 = [63.89, 0.2] #carbon fibre + # self.materialParameters_phase1 = [mu_phase1, 54] #aluminium + # self.materialParameters_phase1 = [1.2, lambda_phase1] #aluminium + self.materialParameters_phase1 = [mu_phase1,2.58] #Matrix-material: polystyrene # #- PHASE 2 self.phase2_type="isotropic" - self.materialParameters_phase2 = [100.0, 1.0] + # self.materialParameters_phase2 = [100.0, 1.0] # self.materialParameters_phase2 = [1.48, 0.26] #epoxy resin + # self.materialParameters_phase2 = [27.8, 54] #aluminium + self.materialParameters_phase2 = [1.2,2.58] #Matrix-material: polystyrene def indicatorFunction(self,x): verticalMidpointPosition = 0.25 @@ -61,26 +71,28 @@ class Microstructure: return [[0, 0, 0], [0,0,0], [0,0,0]] +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. ############################################# # Grid parameters ############################################# -parameterSet.microGridLevel = 4 +parameterSet.microGridLevel = 3 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) @@ -89,23 +101,17 @@ parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for sol parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) parameterSet.MaterialSubsamplingRefinement= 2 - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - -parameterSet.print_corrector_matrices = 0 - # --- Write Correctos to VTK-File: parameterSet.writeCorrectorsVTK = 1 - -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 - # --- write effective quantities (Qhom.Beff) to .txt-files parameterSet.write_EffectiveQuantitiesToTxt = True +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/experiment/micro-problem/prestrainedFibre_anisotropicB.py b/experiment/micro-problem/prestrainedFibre_anisotropicB.py index 1c06a934d7e74c69ea66ed1dbfd8b0eb1fdf6cdd..8e196b70d7230126cd20456bbf7c8fb5d20abb2b 100644 --- a/experiment/micro-problem/prestrainedFibre_anisotropicB.py +++ b/experiment/micro-problem/prestrainedFibre_anisotropicB.py @@ -30,15 +30,17 @@ class Microstructure: #--- Define different material phases: #- PHASE 1 self.phase1_type="isotropic" - mu_phase1 = 100 + # mu_phase1 = 100 - self.materialParameters_phase1 = [mu_phase1, 1.0] + # self.materialParameters_phase1 = [mu_phase1, 1.0] # self.materialParameters_phase1 = [63.89, 0.2] #carbon fibre + self.materialParameters_phase1 = [1.2,2.58] #(Matrix-material: polystyrene # #- PHASE 2 self.phase2_type="isotropic" - self.materialParameters_phase2 = [100.0, 1.0] + # self.materialParameters_phase2 = [100.0, 1.0] # self.materialParameters_phase2 = [1.48, 0.26] #epoxy resin + self.materialParameters_phase2 = [1.2,2.58] #(Matrix-material: polystyrene def indicatorFunction(self,x): verticalMidpointPosition = 0.25 @@ -55,12 +57,12 @@ class Microstructure: #--- Define prestrain function for each phase (also works with non-constant values) def prestrain_phase1(self,x): rho = 1.0 - return [[rho*1.0, -2.0, 0], [-2.0,rho*1.0,0], [0,0,rho*1.0]] + return [[rho*1.0, 2.0, 0], [2.0,rho*1.0,0], [0,0,rho*1.0]] def prestrain_phase2(self,x): return [[0, 0, 0], [0,0,0], [0,0,0]] - +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. ############################################# # Grid parameters @@ -70,17 +72,18 @@ parameterSet.microGridLevel = 4 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) @@ -89,23 +92,17 @@ parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for sol parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) parameterSet.MaterialSubsamplingRefinement= 2 - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - -parameterSet.print_corrector_matrices = 0 - # --- Write Correctos to VTK-File: parameterSet.writeCorrectorsVTK = 1 - -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 - # --- write effective quantities (Qhom.Beff) to .txt-files parameterSet.write_EffectiveQuantitiesToTxt = True +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/experiment/micro-problem/prestrainedFibre_anisotropicQ.py b/experiment/micro-problem/prestrainedFibre_anisotropicQ.py index 19cf8026ea80a9652b95f8bc5ede46c13115cd1b..f540a9c49edc00ca08e74595498c3f45bf645fc3 100644 --- a/experiment/micro-problem/prestrainedFibre_anisotropicQ.py +++ b/experiment/micro-problem/prestrainedFibre_anisotropicQ.py @@ -29,9 +29,11 @@ class Microstructure: self.phases = 2 #in the future this might change depending on macroPoint. #--- Define different material phases: #- PHASE 1 - # self.phase1_type="isotropic" + self.phase1_type="isotropic" # mu_phase1 = 100 + # self.materialParameters_phase1 = [1.2, 2.58] #epoxy resin + # self.materialParameters_phase1 = [mu_phase1, 1.0] self.phase1_type="general_anisotropic" @@ -63,12 +65,39 @@ class Microstructure: # [0.0, 0.0, 0.0, 0.0, 0.0, 5]]); - self.materialParameters_phase1 =np.array([ [ 9.13e-01, -5.45e-03, -2.62e-01, 0.00e+00, 0.00e+00, 0.00e+00], - [-5.45e-03, -1.29e-04, -1.30e-02, -0.00e+00, -0.00e+00, -0.00e+00], - [-2.62e-01, -1.30e-02, -7.31e-01, -0.00e+00, -0.00e+00, -0.00e+00], - [ 0.00e+00, 0.00e+00, 0.00e+00, 1.00e+00, 0.00e+00, 0.00e+00], - [ 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00, 1.00e-04, 0.00e+00], - [ 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00, 2.00e-01]]) + # self.materialParameters_phase1 =np.array([ [ 9.13e-01, -5.45e-03, -2.62e-01, 0.00e+00, 0.00e+00, 0.00e+00], + # [-5.45e-03, -1.29e-04, -1.30e-02, -0.00e+00, -0.00e+00, -0.00e+00], + # [-2.62e-01, -1.30e-02, -7.31e-01, -0.00e+00, -0.00e+00, -0.00e+00], + # [ 0.00e+00, 0.00e+00, 0.00e+00, 1.00e+00, 0.00e+00, 0.00e+00], + # [ 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00, 1.00e-04, 0.00e+00], + # [ 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00, 2.00e-01]]) + + # self.materialParameters_phase1 =np.array([[ 4.98e-04, -2.08e-05, -4.26e-04, 0.00e+00, 0.00e+00, 0.00e+00], + # [-2.08e-05, 6.90e-05, -1.74e-05, 0.00e+00, 0.00e+00, 0.00e+00], + # [-4.26e-04, -1.74e-05, 1.50e-03, 0.00e+00, 0.00e+00, 0.00e+00], + # [ 0.00e+00, 0.00e+00, 0.00e+00, 1.07e-03, 0.00e+00, 0.00e+00], + # [ 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00, 1.90e-03, 0.00e+00], + # [ 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00, 0.00e+00, 7.47e-04]]) + + + + # WOOD_European_BEECH (rotated np.pi/4.0) - # Dataset Ratio r = 0.49 with parameters [0.49, 0.008, 17.01520754, 15.30614414, np.pi/4.0, 0.357615902], + # self.materialParameters_phase1 =np.array([[ 3.18e-04, -5.53e-05, -2.22e-04, 0.00e+00, 0.00e+00, 2.15e-04], + # [-5.53e-05, 3.18e-04, -2.22e-04, 0.00e+00, 0.00e+00, 2.15e-04], + # [-2.22e-04, -2.22e-04, 1.50e-03, 0.00e+00, 0.00e+00, -4.08e-04], + # [ 0.00e+00, 0.00e+00, 0.00e+00, 1.49e-03, 4.16e-04, 0.00e+00], + # [ 0.00e+00, 0.00e+00, 0.00e+00, 4.16e-04, 1.49e-03, 0.00e+00], + # [ 2.15e-04, 2.15e-04, -4.08e-04, 0.00e+00, 0.00e+00, 6.09e-04]]) + # WOOD_European_BEECH (rotated np.pi/4.0) Dataset (RotatedLayer) [0.12, 0.0047, 17.32986047, 9.005046347, np.pi/4.0, 4.312080261] + self.materialParameters_phase1 =np.array([ + [ 3.16e-04, -5.60e-05, -2.19e-04, 0.00e+00, 0.00e+00, 2.12e-04], + [-5.60e-05, 3.16e-04, -2.19e-04, 0.00e+00, 0.00e+00, 2.12e-04], + [-2.19e-04, -2.19e-04, 1.48e-03, 0.00e+00, 0.00e+00, -4.04e-04], + [ 0.00e+00, 0.00e+00, 0.00e+00, 1.47e-03, 4.10e-04, 0.00e+00], + [ 0.00e+00, 0.00e+00, 0.00e+00, 4.10e-04, 1.47e-03, 0.00e+00], + [ 2.12e-04, 2.12e-04, -4.04e-04, 0.00e+00, 0.00e+00, 6.03e-04]]) + + # self.materialParameters_phase1 =np.array([[ 2.80e-01, -2.26e-02, -9.18e-03, 0.00e+00, 0.00e+00, 0.00e+00], # [-2.26e-02, 2.83e-03, 1.37e-03, -0.00e+00, -0.00e+00, -0.00e+00], @@ -124,8 +153,9 @@ class Microstructure: # #- PHASE 2 self.phase2_type="isotropic" - self.materialParameters_phase2 = [100.0, 1.0] + # self.materialParameters_phase2 = [100.0, 1.0] # self.materialParameters_phase2 = [1.48, 0.26] #epoxy resin + self.materialParameters_phase2 = [1.2,2.58] #(Matrix-material: polystyrene def indicatorFunction(self,x): verticalMidpointPosition = 0.25 @@ -141,13 +171,13 @@ class Microstructure: #--- Define prestrain function for each phase (also works with non-constant values) def prestrain_phase1(self,x): - rho = 1.0 + rho = 5.0 return [[rho*1.0, 0.0, 0], [0.0,rho*1.0,0], [0,0,rho*1.0]] def prestrain_phase2(self,x): return [[0, 0, 0], [0,0,0], [0,0,0]] - +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. ############################################# # Grid parameters @@ -157,17 +187,18 @@ parameterSet.microGridLevel = 4 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) @@ -176,23 +207,17 @@ parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for sol parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) parameterSet.MaterialSubsamplingRefinement= 2 - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - -parameterSet.print_corrector_matrices = 0 - # --- Write Correctos to VTK-File: parameterSet.writeCorrectorsVTK = 1 - -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 - # --- write effective quantities (Qhom.Beff) to .txt-files parameterSet.write_EffectiveQuantitiesToTxt = True +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/experiment/micro-problem/three-phase-composite.py b/experiment/micro-problem/three-phase-composite.py index ddf57e8b949e309ca0edd54b80a6fe96f287e58b..ad3329487fc2de407371ae554ac6afcb4759480e 100644 --- a/experiment/micro-problem/three-phase-composite.py +++ b/experiment/micro-problem/three-phase-composite.py @@ -28,22 +28,31 @@ parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/ parameterSet.baseName= 'thee-phase-composite' ##################### MICROSCALE PROBLEM #################### - class Microstructure: def __init__(self): self.gamma = 1.0 #in the future this might change depending on macroPoint. self.phases = 3 #in the future this might change depending on macroPoint. #--- Define different material phases: + # #- PHASE 1 + # self.phase1_type="isotropic" + # self.materialParameters_phase1 = [200, 1.0] + # #- PHASE 2 + # self.phase2_type="isotropic" + # self.materialParameters_phase2 = [200, 1.0] + # #- PHASE 3 + # self.phase3_type="isotropic" + # self.materialParameters_phase3 = [100, 1.0] #(Matrix-material) + #- PHASE 1 self.phase1_type="isotropic" - self.materialParameters_phase1 = [200, 1.0] + self.materialParameters_phase1 = [28.7,22.5] # glass #- PHASE 2 self.phase2_type="isotropic" - self.materialParameters_phase2 = [200, 1.0] + self.materialParameters_phase2 = [28.7,22.5] # glass #- PHASE 3 self.phase3_type="isotropic" - self.materialParameters_phase3 = [100, 1.0] #(Matrix-material) + self.materialParameters_phase3 = [1.2,2.58] #(Matrix-material: polystyrene # self.materialParameters_phase3 = [100, 0.1] #(Matrix-material) #--- Three-phase composite phase indicator @@ -87,17 +96,21 @@ class Microstructure: # prestrained fibre in top layer , e2-aligned def prestrain_phase1(self,x): return [[1.0, 0, 0], [0,1.0,0], [0,0,1.0]] + # return [[0.5, 0, 0], [0,0.5,0], [0,0,0.5]] # prestrained fibre in bottom layer , e1-aligned def prestrain_phase2(self,x): #prestrain ratio - rho = 1.0 + rho = 0.95 return [[rho*1.0, 0, 0], [0,rho*1.0,0], [0,0,rho*1.0]] # no prestrain in matrix-material def prestrain_phase3(self,x): return [[0, 0, 0], [0,0,0], [0,0,0]] + +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + ############################################# # Grid parameters ############################################# @@ -106,17 +119,18 @@ parameterSet.microGridLevel = 3 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER, #4: UMFPACK - SOLVER (default) +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 4 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) @@ -125,20 +139,15 @@ parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for sol parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) parameterSet.MaterialSubsamplingRefinement= 2 - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - -parameterSet.print_corrector_matrices = 0 - # --- Write Correctos to VTK-File: parameterSet.writeCorrectorsVTK = 1 - -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 0 - # --- write effective quantities (Qhom.Beff) to .txt-files parameterSet.write_EffectiveQuantitiesToTxt = True + +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. \ No newline at end of file diff --git a/experiment/micro-problem/validation_microproblem.py b/experiment/micro-problem/validation_microproblem.py new file mode 100644 index 0000000000000000000000000000000000000000..ffd02657c827bab479ee74e2746d7ad6ef7cd128 --- /dev/null +++ b/experiment/micro-problem/validation_microproblem.py @@ -0,0 +1,142 @@ +import math + +class ParameterSet(dict): + def __init__(self, *args, **kwargs): + super(ParameterSet, self).__init__(*args, **kwargs) + self.__dict__ = self + +parameterSet = ParameterSet() + + +"""" + This is just a dummy parameterFile - we actually only use it to create to appropriate folders automatically + and adjust the 'QMatrix' and 'BMatrix' .txt files to plot the energy landscape. + +""" + +############################################# +# Paths +############################################# +parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/outputs_validation_microproblem' +parameterSet.baseName= 'validation_microproblem' #(needed for Output-Filename) + +############################################# +# Material Setup +############################################# + + +#Parameters used for analytical solutions: +# theta = 0.5 +# mu_1 = 1.0; +# theta_mu = 10.0 +# mu_2 = theta_mu * mu_1; +# rho_1 = 1.0; +# theta_rho = 0.1 +# rho_2 = rho_1*theta_rho; + + +class Microstructure: + def __init__(self): + # self.macroPoint = macroPoint + self.gamma = 1.0 #in the future this might change depending on macroPoint. + self.phases = 4 #in the future this might change depending on macroPoint. + #--- Define different material phases: + + # ########### Options for material phases: ################################# + # # 1. "isotropic" 2. "orthotropic" 3. "transversely_isotropic" 4. "general_anisotropic" + # ######################################################################### + # ## Notation - Parameter input : + # # isotropic (Lame parameters) : [mu , lambda] + # # orthotropic : [E1,E2,E3,G12,G23,G31,nu12,nu13,nu23] # see https://en.wikipedia.org/wiki/Poisson%27s_ratio with x=1,y=2,z=3 + # # transversely_isotropic : [E1,E2,G12,nu12,nu23] + # # general_anisotropic : full compliance matrix C + # ###################################################################### + + # theta_mu = 10.0 + theta_mu = 2.0 + #- PHASE 1 + self.phase1_type="isotropic" + self.materialParameters_phase1 = [theta_mu*1.0, 0] + #- PHASE 2 + self.phase2_type="isotropic" + self.materialParameters_phase2 = [1.0, 0] + #- PHASE 3 + self.phase3_type="isotropic" + self.materialParameters_phase3 = [theta_mu*1.0, 0] + #- PHASE 4 + self.phase4_type="isotropic" + self.materialParameters_phase4 = [1.0, 0] + + + + #--- Indicator function for material phases + def indicatorFunction(self,x): + theta = 0.5 + if (abs(x[0]) < (theta/2) and x[2] < 0 ): + return 1 #Phase1 + elif (abs(x[0]) > (theta/2) and x[2] > 0 ): + return 2 #Phase2 + elif (abs(x[0]) < (theta/2) and x[2] > 0 ): + return 3 #Phase3 + else : + return 4 #Phase4 + + + + #--- Define prestrain function for each phase (also works with non-constant values) + def prestrain_phase1(self,x): + theta_rho = 0.1 + return [[theta_rho*1.0, 0, 0], [0,theta_rho*1.0,0], [0,0,theta_rho*1.0]] + + def prestrain_phase2(self,x): + return [[1, 0, 0], [0,1,0], [0,0,1]] + + def prestrain_phase3(self,x): + return [[0, 0, 0], [0,0,0], [0,0,0]] + + def prestrain_phase4(self,x): + return [[0, 0, 0], [0,0,0], [0,0,0]] + + +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + +############################################# +# Grid parameters +############################################# +parameterSet.microGridLevel = 2 + +############################################# +# Assembly options +############################################# +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices + +############################################# +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) +############################################# +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output + +############################################# +# Write/Output options #(default=false) +############################################# +# --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: +parameterSet.write_materialFunctions = 1 # VTK indicator function for material/prestrain definition +#parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) +parameterSet.MaterialSubsamplingRefinement= 2 +# --- Write Correctos to VTK-File: +parameterSet.writeCorrectorsVTK = 1 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = True + +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. \ No newline at end of file diff --git a/macroSim_Container/Containerfile b/macroSim_Container/Containerfile index 75097aa8a7bb9479ebffeb34bb0daf41f8022d77..d2a09602ff75fea104dd664daae5f804ed2bf860 100644 --- a/macroSim_Container/Containerfile +++ b/macroSim_Container/Containerfile @@ -26,8 +26,8 @@ RUN apt-get update && apt-get install -y ssh rsh-client && apt-get install -y li libmetis-dev \ # libopenblas-base \ #causes problem with Suitesparse! # libopenblas-dev \ - # intel-mkl \ - # intel-mkl-cluster \ + intel-mkl \ + intel-mkl-cluster \ liblapack-dev \ libparmetis-dev \ libsuitesparse-dev \ @@ -66,33 +66,36 @@ RUN \ && git clone https://gitlab.dune-project.org/core/dune-grid.git \ && git clone https://gitlab.dune-project.org/core/dune-istl.git \ && git clone https://gitlab.dune-project.org/core/dune-localfunctions.git \ - # && git clone https://gitlab.dune-project.org/staging/dune-functions.git --branch bugfix/reducedcubichermite-local \ - && git clone https://gitlab.dune-project.org/klaus.boehnlein/dune-functions.git --branch bugfix/reducedcubichermite-local \ + # && git clone https://gitlab.dune-project.org/klaus.boehnlein/dune-functions.git --branch bugfix/reducedcubichermite-local \ + && git clone https://gitlab.dune-project.org/staging/dune-functions \ && git clone https://gitlab.dune-project.org/staging/dune-uggrid.git \ && git clone https://gitlab.dune-project.org/staging/dune-typetree.git \ && git clone https://gitlab.dune-project.org/fufem/dune-matrix-vector.git \ - && git clone https://gitlab.dune-project.org/fufem/dune-fufem.git --branch releases/2.9 \ + && git clone https://gitlab.dune-project.org/fufem/dune-fufem.git \ + # && git clone https://gitlab.dune-project.org/fufem/dune-fufem.git --branch releases/2.9 \ # && git clone https://gitlab.dune-project.org/extensions/dune-vtk.git --branch releases/2.9 \ && git clone https://gitlab.dune-project.org/extensions/dune-vtk.git \ && git clone https://git.imp.fu-berlin.de/agnumpde/dune-solvers.git \ - && git clone https://gitlab.mn.tu-dresden.de/iwr/dune-gmsh4.git --branch releases/2.9 \ - && git clone https://gitlab.mn.tu-dresden.de/ag-sander/dune/dune-elasticity.git --branch releases/2.9 \ - && git clone https://gitlab.mn.tu-dresden.de/osander/dune-gfe.git --branch feature/bendingIsometries \ - && git clone https://gitlab.mn.tu-dresden.de/s7603593/dune-microstructure.git + # && git clone https://gitlab.mn.tu-dresden.de/iwr/dune-gmsh4.git --branch releases/2.9 \ + && git clone https://gitlab.mn.tu-dresden.de/iwr/dune-gmsh4.git \ + # && git clone https://gitlab.mn.tu-dresden.de/ag-sander/dune/dune-elasticity.git --branch releases/2.9 \ + # && git clone https://gitlab.mn.tu-dresden.de/osander/dune-gfe.git --branch feature/bendingIsometries \ + && git clone https://gitlab.mn.tu-dresden.de/osander/dune-gfe.git --branch feature/ARRN-mod \ + && git clone https://gitlab.mn.tu-dresden.de/s7603593/dune-microstructure.git --branch feature/newHermiteBasis # For the sake of reproducibility: # Set HEAD to particular commits wherever we are not using release branches. -RUN cd dune-common && git checkout faaf4e7fffbd25b872380d3307f4f7fa886773ea -RUN cd dune-geometry && git checkout 1a4f504d95f1a5ccb46b380c316da421b770c091 -RUN cd dune-grid && git checkout 17b91684cff69b2e10c52f922434b61888a9ecf7 -RUN cd dune-istl && git checkout 28997ea7ddd6b1be1ecaefa04c7813dfa7df213f -RUN cd dune-localfunctions && git checkout 8f1cb33575204e5a245e9e6088e7a6471d3903a9 -RUN cd dune-uggrid && git checkout 68094a7154287db0b10ffe07667d175cdd3eacff -RUN cd dune-typetree && git checkout d3345d13804d9b6a26973272d799ca345abfd49c -RUN cd dune-matrix-vector && git checkout c073d2a0d8feb3de23a48668219895ffcfb7e53c -RUN cd dune-solvers && git checkout 532830e4051f14bae06127e0ca6373519d65601a -RUN cd dune-vtk && git checkout 98be9d9ad314e0b51647912c2755e03a2ca32ca6 -RUN cd dune-microstructure && git checkout 0c4ebef7f7bea724ab7a602fb8d3619246bfa06b +# RUN cd dune-common && git checkout faaf4e7fffbd25b872380d3307f4f7fa886773ea +# RUN cd dune-geometry && git checkout 1a4f504d95f1a5ccb46b380c316da421b770c091 +# RUN cd dune-grid && git checkout 17b91684cff69b2e10c52f922434b61888a9ecf7 +# RUN cd dune-istl && git checkout 28997ea7ddd6b1be1ecaefa04c7813dfa7df213f +# RUN cd dune-localfunctions && git checkout 8f1cb33575204e5a245e9e6088e7a6471d3903a9 +# RUN cd dune-uggrid && git checkout 68094a7154287db0b10ffe07667d175cdd3eacff +# RUN cd dune-typetree && git checkout d3345d13804d9b6a26973272d799ca345abfd49c +# RUN cd dune-matrix-vector && git checkout c073d2a0d8feb3de23a48668219895ffcfb7e53c +# RUN cd dune-solvers && git checkout 532830e4051f14bae06127e0ca6373519d65601a +# RUN cd dune-vtk && git checkout 98be9d9ad314e0b51647912c2755e03a2ca32ca6 +# RUN cd dune-microstructure && git checkout 0c4ebef7f7bea724ab7a602fb8d3619246bfa06b # RUN cd dune-microstructure && git checkout fb8326aadfeabd6e8c4cb2022c8f228479b420ef diff --git a/macroSim_Container/build_SingularityContainer.sh b/macroSim_Container/build_SingularityContainer.sh index d520ab9b8fda9b3152bd8cc951bf5e2d9e268f5d..3be0b975845a0ef54785b735649220daba49a158 100755 --- a/macroSim_Container/build_SingularityContainer.sh +++ b/macroSim_Container/build_SingularityContainer.sh @@ -37,14 +37,14 @@ singularity build macrosim_container.sif docker-archive://macrosim_image.tar # ./macrosim_container.sif python3 /dune/dune-microstructure/microstructure_testsuite/macro-problem-testsuite.py 1 #EXPERIMENT_id -# (Optional) Move Container to Barnard. -echo "Move to Barnard(HPC) ? " +# # (Optional) Move Container to Barnard. +# echo "Move to Barnard(HPC) ? " -read HPC_flag +# read HPC_flag -if [ "$HPC_flag" == "true" ] || [ $HPC_flag -eq 1 ] || [ "$HPC_flag" == "yes" ] -then - echo "Moving to Barnard..." - rsync macrosim_container.sif s7603593@dataport1.hpc.tu-dresden.de:/data/horse/ws/s7603593-microstructure - rsync macrosim.batch s7603593@dataport1.hpc.tu-dresden.de:/data/horse/ws/s7603593-microstructure -fi \ No newline at end of file +# if [ "$HPC_flag" == "true" ] || [ $HPC_flag -eq 1 ] || [ "$HPC_flag" == "yes" ] +# then +# echo "Moving to Barnard..." +# rsync macrosim_container.sif s7603593@dataport1.hpc.tu-dresden.de:/data/horse/ws/s7603593-microstructure +# rsync macrosim.batch s7603593@dataport1.hpc.tu-dresden.de:/data/horse/ws/s7603593-microstructure +# fi \ No newline at end of file diff --git a/macroSim_Container/getBarnardResults.sh b/macroSim_Container/getBarnardResults.sh new file mode 100755 index 0000000000000000000000000000000000000000..cf58afbe0a4ad8381cca8dbfcc082a64212f4318 --- /dev/null +++ b/macroSim_Container/getBarnardResults.sh @@ -0,0 +1,3 @@ +echo "get results from Barnard ... " +echo "directory to store results: " $(pwd) +rsync -r s7603593@dataport1.hpc.tu-dresden.de:/home/s7603593/* $(pwd) \ No newline at end of file diff --git a/macroSim_Container/get_from_barnard.sh b/macroSim_Container/get_from_barnard.sh deleted file mode 100644 index eecc342a5039e52d10dbc309b8d5c0476d8fa0a3..0000000000000000000000000000000000000000 --- a/macroSim_Container/get_from_barnard.sh +++ /dev/null @@ -1,44 +0,0 @@ -# build with "chmod +x build_SingularityContainer.sh" -# run via "./build_SingularityContainer.sh" - -# Define your local path for simulation results and figures -echo "Define output path on your host machine: " -# LOCALPATH='/home/klaus/Desktop/test' -read LOCALPATH - -IMAGE_NAME = macrosim_image -CONTAINER_NAME = macrosim_container -echo "IMAGE_NAME: $IMAGE_NAME" - -# docker build --no-cache=true -t macrosim_image -f Containerfile . -docker build --no-cache=true -t IMAGE_NAME -f Containerfile . - -# docker rm macrosim_container - -image_id=$(docker images --quiet | head -1) - -echo "image ID used: $image_id" - -# Save docker image in .tar-file -# docker save $image_id -o macrosim_image.tar -docker save $image_id -o IMAGE_NAME.tar - -# Convert docker .tar-file to singularity container -# singularity build macrosim_container.sif docker-archive://macrosim_image.tar -singularity build CONTAINER_NAME.sif docker-archive://IMAGE_NAME.tar - -#Run Singularity Container via: -# ./macrosim_container.sif python3 /dune/dune-microstructure/microstructure_testsuite/macro-problem-testsuite.py 1 #EXPERIMENT_id - - -# (Optional) Move Container to Barnard. -echo "Move to Barnard(HPC) ? " - -read HPC_flag - -if [ "$HPC_flag" == "true" ] || [ $HPC_flag -eq 1 ] || [ "$HPC_flag" == "yes" ] -then - echo "Moving to Barnard..." - rsync CONTAINER_NAME.sif s7603593@dataport1.hpc.tu-dresden.de:/data/horse/ws/s7603593-microstructure - rsync macrosim.batch s7603593@dataport1.hpc.tu-dresden.de:/data/horse/ws/s7603593-microstructure -fi \ No newline at end of file diff --git a/macroSim_Container/macrosim.batch b/macroSim_Container/macrosim.batch index 8ffe52a9c3cb5c47a6226e354943d3839c3cbdca..5f06f48296512f808ea0bedf43f014b633684cca 100644 --- a/macroSim_Container/macrosim.batch +++ b/macroSim_Container/macrosim.batch @@ -5,12 +5,11 @@ #SBATCH --job-name=macro-problem #SBATCH --nodes=1 #SBATCH --ntasks=1 -#SBATCH --time=1:00:00 -#SBATCH --exclusive # ensure that nobody spoils my measurement +#SBATCH --time=72:00:00 #SBATCH --comment=no_monitoring -#SBATCH --chdir=/data/horse/ws/s7603593-microstructure/experiments +#SBATCH --chdir=/data/horse/ws/s7603593-microstructure #SBATCH --output=macro-problem-log_%a.txt #SBATCH --error=simulation-%a.err -#SBATCH --array=0-1 +#SBATCH --array=0-5 ./macrosim_container.sif python3 /dune/dune-microstructure/testsuite/macro-problem-testsuite.py 1 $SLURM_ARRAY_TASK_ID diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 22120f5558336c143b90180c9b18f1832701e30d..1528e2f5e6dec56e83a57ed0c55d6b637d345893 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,21 +1,18 @@ -#add_executable("dune-microstructure" dune-microstructure.cc) -#target_link_dune_default_libraries("dune-microstructure") -#set(CMAKE_BUILD_TYPE Debug)# - - set(programs Cell-Problem - micro-problem - macro-problem) - + micro-problem) foreach(_program ${programs}) add_executable(${_program} ${_program}.cc) - target_link_dune_default_libraries(${_program}) - add_dune_pythonlibs_flags(${_program}) - target_link_libraries(${_program}) -# target_link_libraries(${_program} tinyxml2) -# target_compile_options(${_program} PRIVATE "-fpermissive") endforeach() + +if(dune-functions_VERSION VERSION_GREATER_EQUAL 2.11.0) + add_executable("macro-problem" macro-problem.cc) + set(programs macro-problem ${programs}) +endif() -# set(CMAKE_BUILD_TYPE Debug) +foreach(_program ${programs}) + target_link_dune_default_libraries(${_program}) + add_dune_pythonlibs_flags(${_program}) + target_link_libraries(${_program} PUBLIC tinyxml2) +endforeach() \ No newline at end of file diff --git a/src/Cell-Problem.cc b/src/Cell-Problem.cc index 68946e5526256a437a2ce22f5a1b3d168e144d4b..9e7670004e88063f3251e53eafa9ec5605eea0d9 100644 --- a/src/Cell-Problem.cc +++ b/src/Cell-Problem.cc @@ -12,7 +12,7 @@ #include <dune/common/float_cmp.hh> #include <dune/common/math.hh> #include <dune/common/fvector.hh> -#include <dune/common/fmatrix.hh> +#include <dune/common/fmatrix.hh> #include <dune/geometry/quadraturerules.hh> @@ -29,7 +29,7 @@ #include <dune/istl/spqr.hh> #include <dune/istl/preconditioners.hh> #include <dune/istl/io.hh> -#include <dune/istl/eigenvalue/test/matrixinfo.hh> // TEST: compute condition Number +#include <dune/istl/eigenvalue/test/matrixinfo.hh> // TEST: compute condition Number #include <dune/functions/functionspacebases/interpolate.hh> #include <dune/functions/backends/istlvectorbackend.hh> @@ -45,11 +45,11 @@ #include <dune/fufem/dunepython.hh> #include <dune/microstructure/matrix_operations.hh> -#include <dune/microstructure/CorrectorComputer.hh> -#include <dune/microstructure/EffectiveQuantitiesComputer.hh> -#include <dune/microstructure/prestrainedMaterial.hh> +#include <dune/microstructure/CorrectorComputer.hh> +#include <dune/microstructure/EffectiveQuantitiesComputer.hh> +#include <dune/microstructure/prestrainedMaterial.hh> -#include <dune/solvers/solvers/umfpacksolver.hh> //TEST +#include <dune/solvers/solvers/umfpacksolver.hh> //TEST #include <any> #include <variant> @@ -60,7 +60,7 @@ using namespace Dune; using namespace MatrixOperations; -using GridView = Dune::YaspGrid<3, Dune::EquidistantOffsetCoordinates<double, 3>>::LeafGridView; +using GridView = Dune::YaspGrid<3, Dune::EquidistantOffsetCoordinates<double, 3> >::LeafGridView; ////////////////////////////////////////////////////////////////////// // Helper functions for Table-Output @@ -68,28 +68,28 @@ using GridView = Dune::YaspGrid<3, Dune::EquidistantOffsetCoordinates<double, 3> /*! Center-aligns string within a field of width w. Pads with blank spaces to enforce alignment. */ std::string center(const std::string s, const int w) { - std::stringstream ss, spaces; - int padding = w - s.size(); // count excess room to pad - for(int i=0; i<padding/2; ++i) - spaces << " "; - ss << spaces.str() << s << spaces.str(); // format with padding - if(padding>0 && padding%2!=0) // if odd #, add 1 space - ss << " "; - return ss.str(); + std::stringstream ss, spaces; + int padding = w - s.size(); // count excess room to pad + for(int i=0; i<padding/2; ++i) + spaces << " "; + ss << spaces.str() << s << spaces.str(); // format with padding + if(padding>0 && padding%2!=0) // if odd #, add 1 space + ss << " "; + return ss.str(); } /* Convert double to string with specified number of places after the decimal and left padding. */ template<class type> std::string prd(const type x, const int decDigits, const int width) { - std::stringstream ss; -// ss << std::fixed << std::right; - ss << std::scientific << std::right; // Use scientific Output! - ss.fill(' '); // fill space around displayed # - ss.width(width); // set width around displayed # - ss.precision(decDigits); // set # places after decimal - ss << x; - return ss.str(); + std::stringstream ss; + // ss << std::fixed << std::right; + ss << std::scientific << std::right; // Use scientific Output! + ss.fill(' '); // fill space around displayed # + ss.width(width); // set width around displayed # + ss.precision(decDigits); // set # places after decimal + ss << x; + return ss.str(); } /** @@ -97,12 +97,12 @@ std::string prd(const type x, const int decDigits, const int width) { * Check whether two points are equal on R/Z x R/Z x R */ auto equivalent = [](const FieldVector<double,3>& x, const FieldVector<double,3>& y) - { + { return ( (FloatCmp::eq(x[0],y[0]) or FloatCmp::eq(x[0]+1,y[0]) or FloatCmp::eq(x[0]-1,y[0])) - and (FloatCmp::eq(x[1],y[1]) or FloatCmp::eq(x[1]+1,y[1]) or FloatCmp::eq(x[1]-1,y[1])) - and (FloatCmp::eq(x[2],y[2])) - ); - }; + and (FloatCmp::eq(x[1],y[1]) or FloatCmp::eq(x[1]+1,y[1]) or FloatCmp::eq(x[1]-1,y[1])) + and (FloatCmp::eq(x[2],y[2])) + ); + }; @@ -110,30 +110,30 @@ auto equivalent = [](const FieldVector<double,3>& x, const FieldVector<double,3> //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int main(int argc, char *argv[]) { - feenableexcept(FE_INVALID); - MPIHelper::instance(argc, argv); - - Dune::Timer globalTimer; - - if (argc < 3) - DUNE_THROW(Exception, "Usage: ./Cell-Problem <python path> <python module without extension>"); - - // Start Python interpreter - Python::start(); - auto pyMain = Python::main(); - pyMain.runStream() - << std::endl << "import math" - << std::endl << "import sys" - << std::endl << "sys.path.append('" << argv[1] << "')" << std::endl; - auto pyModule = pyMain.import(argv[2]); - - ParameterTree parameterSet; - pyModule.get("parameterSet").toC(parameterSet); - // read possible further parameters from the command line - ParameterTreeParser::readOptions(argc, argv, parameterSet); - // Print all parameters, to make them appear in the log file - std::cout << "Input parameters:" << std::endl; - parameterSet.report(); + feenableexcept(FE_INVALID); + MPIHelper::instance(argc, argv); + + Dune::Timer globalTimer; + + if (argc < 3) + DUNE_THROW(Exception, "Usage: ./Cell-Problem <python path> <python module without extension>"); + + // Start Python interpreter + Python::start(); + auto pyMain = Python::main(); + pyMain.runStream() + << std::endl << "import math" + << std::endl << "import sys" + << std::endl << "sys.path.append('" << argv[1] << "')" << std::endl; + auto pyModule = pyMain.import(argv[2]); + + ParameterTree parameterSet; + pyModule.get("parameterSet").toC(parameterSet); + // read possible further parameters from the command line + ParameterTreeParser::readOptions(argc, argv, parameterSet); + // Print all parameters, to make them appear in the log file + std::cout << "Input parameters:" << std::endl; + parameterSet.report(); //--- Output setter std::string baseName = parameterSet.get("baseName", "CellProblem-result"); @@ -144,32 +144,32 @@ int main(int argc, char *argv[]) constexpr int dim = 3; - // Debug/Print Options + // Debug/Print Options bool print_debug = parameterSet.get<bool>("print_debug", false); // VTK-write options // bool write_prestrainFunctions = parameterSet.get<bool>("write_prestrainFunctions", false); //Not implemented yet. /** - * @brief Generate the grid. - * Corrector Problem Domain (-1/2,1/2)^3. - */ + * @brief Generate the grid. + * Corrector Problem Domain (-1/2,1/2)^3. + */ FieldVector<double,dim> lower({-1.0/2.0, -1.0/2.0, -1.0/2.0}); FieldVector<double,dim> upper({1.0/2.0, 1.0/2.0, 1.0/2.0}); - std::array<int,2> numLevels = parameterSet.get<std::array<int,2>>("numLevels", {3,3}); + std::array<int,2> numLevels = parameterSet.get<std::array<int,2> >("numLevels", {3,3}); int levelCounter = 0; - - + + /////////////////////////////////// // Create Data Storage /////////////////////////////////// //--- Storage:: #1 level #2 L2SymError #3 L2SymErrorOrder #4 L2Norm(sym) #5 L2Norm(sym-analytic) #6 L2Norm(phi_1) - //std::vector<std::variant<std::string, size_t , double>> Storage_Error; - //--- Storage:: | level | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | - std::vector<std::variant<std::string, size_t , double>> Storage_Quantities; + //std::vector<std::variant<std::string, size_t , double>> Storage_Error; + //--- Storage:: | level | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | + std::vector<std::variant<std::string, size_t , double> > Storage_Quantities; //--- GridLevel-Loop: - for(size_t level = numLevels[0] ; level <= numLevels[1]; level++) + for(size_t level = numLevels[0] ; level <= numLevels[1]; level++) { std::cout << " ----------------------------------" << std::endl; std::cout << "GridLevel: " << level << std::endl; @@ -186,7 +186,7 @@ int main(int argc, char *argv[]) using GridView = CellGridType::LeafGridView; const GridView gridView_CE = grid_CE.leafGridView(); if(print_debug) - std::cout << "Host grid has " << gridView_CE.size(dim) << " vertices." << std::endl; + std::cout << "Host grid has " << gridView_CE.size(dim) << " vertices." << std::endl; //--- Choose a finite element space for Cell Problem using namespace Functions::BasisFactory; @@ -194,25 +194,25 @@ int main(int argc, char *argv[]) //--- Get PeriodicIndices for periodicBasis (Don't do the following in real life: It has quadratic run-time in the number of vertices.) for (const auto& v1 : vertices(gridView_CE)) - for (const auto& v2 : vertices(gridView_CE)) - if (equivalent(v1.geometry().corner(0), v2.geometry().corner(0))) - { - periodicIndices.unifyIndexPair({gridView_CE.indexSet().index(v1)}, {gridView_CE.indexSet().index(v2)}); - } + for (const auto& v2 : vertices(gridView_CE)) + if (equivalent(v1.geometry().corner(0), v2.geometry().corner(0))) + { + periodicIndices.unifyIndexPair({gridView_CE.indexSet().index(v1)}, {gridView_CE.indexSet().index(v2)}); + } Dune::Timer basisSetupTimer; //--- Setup first order periodic Lagrange-Basis auto Basis_CE = makeBasis( - gridView_CE, - power<dim>( + gridView_CE, + power<dim>( Functions::BasisFactory::Experimental::periodic(lagrange<1>(), periodicIndices), flatLexicographic() //blockedInterleaved() // Not Implemented - )); + )); std::cout << "Basis setup took " << basisSetupTimer.elapsed() << " seconds " << std::endl; if(print_debug) - std::cout << "power<periodic> basis has " << Basis_CE.dimension() << " degrees of freedom" << std::endl; + std::cout << "power<periodic> basis has " << Basis_CE.dimension() << " degrees of freedom" << std::endl; @@ -239,28 +239,28 @@ int main(int argc, char *argv[]) std::shared_ptr<MaterialType> material = std::make_shared<MaterialType>(gridView_CE,microstructure,parameterSet,pyModule); std::cout << "Material setup took " << materialSetupTimer.elapsed() << " seconds " << std::endl; - // --- Get scale ratio - // double gamma = parameterSet.get<double>("gamma",1.0); + // --- Get scale ratio + // double gamma = parameterSet.get<double>("gamma",1.0); std::cout << "scale ratio (gamma) set to : " << material->gamma_ << std::endl; //--- Compute Correctors // auto correctorComputer = CorrectorComputer(Basis_CE, material, log, parameterSet); // auto correctorComputer = CorrectorComputer(Basis_CE, materialPointer, log, parameterSet); - std::shared_ptr<CorrectorComputer<decltype(Basis_CE),MaterialType> > correctorComputer = std::make_shared<CorrectorComputer<decltype(Basis_CE),MaterialType>>(Basis_CE, material, parameterSet); + std::shared_ptr<CorrectorComputer<decltype(Basis_CE),MaterialType> > correctorComputer = std::make_shared<CorrectorComputer<decltype(Basis_CE),MaterialType> >(Basis_CE, material, parameterSet); correctorComputer->assemble(); correctorComputer->solve(); //--- Check Correctors (options): if(parameterSet.get<bool>("write_L2Error", false)) - correctorComputer->computeNorms(); + correctorComputer->computeNorms(); if(parameterSet.get<bool>("write_VTK", false)) - correctorComputer->writeCorrectorsVTK(level); + correctorComputer->writeCorrectorsVTK(level); //--- Additional Test: check orthogonality (75) from paper: if(parameterSet.get<bool>("write_checkOrthogonality", false)) - correctorComputer->check_Orthogonality(); + correctorComputer->check_Orthogonality(); //--- Check symmetry of stiffness matrix if(print_debug) - correctorComputer->checkSymmetry(); + correctorComputer->checkSymmetry(); //--- Compute effective quantities // auto effectiveQuantitiesComputer = EffectiveQuantitiesComputer(correctorComputer,material); @@ -269,7 +269,7 @@ int main(int argc, char *argv[]) //--- Write material indicator function to VTK if (parameterSet.get<bool>("write_materialFunctions", false)) - material->writeVTKMaterialFunctions(level); + material->writeVTKMaterialFunctions(level); //--- Get effective quantities auto Qeff = effectiveQuantitiesComputer.getQeff(); @@ -281,7 +281,7 @@ int main(int argc, char *argv[]) //--- Write effective quantities to matlab folder (for symbolic minimization) Dune::Timer txtOutputTimer; if(parameterSet.get<bool>("EffectiveQuantitiesToTxt", true)) - effectiveQuantitiesComputer.writeEffectiveQuantitiesToTxt(outputPath); + effectiveQuantitiesComputer.writeEffectiveQuantitiesToTxt(outputPath); std::cout << "Time to write effective quantities to .txt-files:" << txtOutputTimer.elapsed() << std::endl; @@ -318,56 +318,60 @@ int main(int argc, char *argv[]) log << "mu_gamma=" << Qeff[2][2] << std::endl; // added for Python-Script - levelCounter++; + levelCounter++; } // GridLevel-Loop End - ////////////////////////////////////////// - //--- Print Storage - ////////////////////////////////////////// - // Dune::Timer writeTableTimer; - int tableWidth = 12; - std::cout << center("Levels ",tableWidth) << " | " - << center("q1",tableWidth) << " | " - << center("q2",tableWidth) << " | " - << center("q3",tableWidth) << " | " - << center("q12",tableWidth) << " | " - << center("q13",tableWidth) << " | " - << center("q23",tableWidth) << " | " - << center("b1",tableWidth) << " | " - << center("b2",tableWidth) << " | " - << center("b3",tableWidth) << " | " << "\n"; - std::cout << std::string(tableWidth*10 + 3*10, '-') << "\n"; - log << std::string(tableWidth*10 + 3*10, '-') << "\n"; - log << center("Levels ",tableWidth) << " | " - << center("q1",tableWidth) << " | " - << center("q2",tableWidth) << " | " - << center("q3",tableWidth) << " | " - << center("q12",tableWidth) << " | " - << center("q13",tableWidth) << " | " - << center("q23",tableWidth) << " | " - << center("b1",tableWidth) << " | " - << center("b2",tableWidth) << " | " - << center("b3",tableWidth) << " | " << "\n"; - log << std::string(tableWidth*10 + 3*10, '-') << "\n"; - - int StorageCount2 = 0; - for(auto& v: Storage_Quantities) + ////////////////////////////////////////// + //--- Print Storage + ////////////////////////////////////////// + // Dune::Timer writeTableTimer; + int tableWidth = 12; + std::cout << center("Levels ",tableWidth) << " | " + << center("q1",tableWidth) << " | " + << center("q2",tableWidth) << " | " + << center("q3",tableWidth) << " | " + << center("q12",tableWidth) << " | " + << center("q13",tableWidth) << " | " + << center("q23",tableWidth) << " | " + << center("b1",tableWidth) << " | " + << center("b2",tableWidth) << " | " + << center("b3",tableWidth) << " | " << "\n"; + std::cout << std::string(tableWidth*10 + 3*10, '-') << "\n"; + log << std::string(tableWidth*10 + 3*10, '-') << "\n"; + log << center("Levels ",tableWidth) << " | " + << center("q1",tableWidth) << " | " + << center("q2",tableWidth) << " | " + << center("q3",tableWidth) << " | " + << center("q12",tableWidth) << " | " + << center("q13",tableWidth) << " | " + << center("q23",tableWidth) << " | " + << center("b1",tableWidth) << " | " + << center("b2",tableWidth) << " | " + << center("b3",tableWidth) << " | " << "\n"; + log << std::string(tableWidth*10 + 3*10, '-') << "\n"; + + int StorageCount2 = 0; + for(auto& v: Storage_Quantities) + { + std::visit([tableWidth](auto&& arg){ + std::cout << center(prd(arg,5,1),tableWidth) << " | "; + }, v); + std::visit([tableWidth, &log](auto&& arg){ + log << center(prd(arg,5,1),tableWidth) << " & "; + }, v); + StorageCount2++; + if(StorageCount2 % 10 == 0 ) { - std::visit([tableWidth](auto&& arg){std::cout << center(prd(arg,5,1),tableWidth) << " | ";}, v); - std::visit([tableWidth, &log](auto&& arg){log << center(prd(arg,5,1),tableWidth) << " & ";}, v); - StorageCount2++; - if(StorageCount2 % 10 == 0 ) - { - std::cout << std::endl; - log << std::endl; - } + std::cout << std::endl; + log << std::endl; } - std::cout << std::string(tableWidth*10 + 3*10, '-') << "\n"; - log << std::string(tableWidth*10 + 3*10, '-') << "\n"; + } + std::cout << std::string(tableWidth*10 + 3*10, '-') << "\n"; + log << std::string(tableWidth*10 + 3*10, '-') << "\n"; - // std::cout << "Time to write table:" << writeTableTimer.elapsed() << std::endl; + // std::cout << "Time to write table:" << writeTableTimer.elapsed() << std::endl; - log.close(); + log.close(); - std::cout << "Total time elapsed: " << globalTimer.elapsed() << std::endl; + std::cout << "Total time elapsed: " << globalTimer.elapsed() << std::endl; } diff --git a/src/Compute_MuGamma.cc b/src/Compute_MuGamma.cc index 8d15b40160437f6893b3beb537a8a351cd426a67..13cf84d7eeb8ce637f458a42279ab564d3a011a2 100644 --- a/src/Compute_MuGamma.cc +++ b/src/Compute_MuGamma.cc @@ -58,9 +58,9 @@ using namespace Dune; // ------------------------------------------------------------------------ // // Solving the 2D "Poisson-Type" Equation ( (38) in the draft) -// in order to compute mu_Gamma in a faster manner +// in order to compute mu_Gamma in a faster manner // -// ------------------------------------------------------------------------ +// ------------------------------------------------------------------------ @@ -69,115 +69,115 @@ void assembleElementStiffnessMatrix(const LocalView& localView, Matrix& elementMatrix, const LocalFunction& mu, const double gamma - ) + ) { - using Element = typename LocalView::Element; - constexpr int dim = Element::dimension; - const Element element = localView.element(); - auto geometry = element.geometry(); + using Element = typename LocalView::Element; + constexpr int dim = Element::dimension; + const Element element = localView.element(); + auto geometry = element.geometry(); - const auto& localFiniteElement = localView.tree().finiteElement(); - const auto nSf = localFiniteElement.localBasis().size(); - - -// std::cout << "nSf:" << nSf << std::endl; - - elementMatrix.setSize(localView.size(),localView.size()); - elementMatrix = 0; - -// int orderQR = 2 * (dim*localFiniteElement.localBasis().order()-1) + 5; // doesnt change anything - int orderQR = 2 * (dim*localFiniteElement.localBasis().order()-1); -// int orderQR = 2 * (localFiniteElement.localBasis().order()-1); - const auto& quadRule = QuadratureRules<double, dim>::rule(element.type(),orderQR); - -// std::cout << "QuadRule-Order:" << orderQR << std::endl; - -// double muValue = 0.0; -// std::cout << " ------------------------- one ELEMENT ------------------------" << std::endl; - - for (const auto& quadPoint : quadRule) + const auto& localFiniteElement = localView.tree().finiteElement(); + const auto nSf = localFiniteElement.localBasis().size(); + + + // std::cout << "nSf:" << nSf << std::endl; + + elementMatrix.setSize(localView.size(),localView.size()); + elementMatrix = 0; + + // int orderQR = 2 * (dim*localFiniteElement.localBasis().order()-1) + 5; // doesnt change anything + int orderQR = 2 * (dim*localFiniteElement.localBasis().order()-1); + // int orderQR = 2 * (localFiniteElement.localBasis().order()-1); + const auto& quadRule = QuadratureRules<double, dim>::rule(element.type(),orderQR); + + // std::cout << "QuadRule-Order:" << orderQR << std::endl; + + // double muValue = 0.0; + // std::cout << " ------------------------- one ELEMENT ------------------------" << std::endl; + + for (const auto& quadPoint : quadRule) + { + + + const auto& quadPos = quadPoint.position(); + + // std::cout << " quadPOS: " << quadPos << std::endl; + // TEST + // double muValue = mu(quadPos); + // std::cout << "muValue:" << muValue << std::endl; + + const auto jacobian = geometry.jacobianInverseTransposed(quadPos); + const double integrationElement = geometry.integrationElement(quadPos); + + + + std::vector<FieldMatrix<double,1,dim> > referenceGradients; + localFiniteElement.localBasis().evaluateJacobian(quadPos,referenceGradients); + + // Compute the shape function gradients on the grid element + std::vector<FieldVector<double,dim> > gradients(referenceGradients.size()); + + for (size_t i=0; i<gradients.size(); i++) + jacobian.mv(referenceGradients[i][0], gradients[i]); //TODO ? passt.. + + + // // print all gradients //TEST + // FieldVector<double,dim> tmp = {0.0 , 0.0}; + // for (size_t i=0; i < nSf; i++) + // { + // printvector(std::cout, gradients[i], "gradients[i]", "--" ); + // + // + // tmp[0] += gradients[i][0]; + // tmp[1] += gradients[i][1]; + // + // // tmp[0] += coeffVector[globalIdx]*gradients[i][0]; // 3D-Version + // // tmp[1] += coeffVector[globalIdx]*gradients[i][2]; + // // printvector(std::cout, tmp, "tmp", "--" ); + // + // } + // printvector(std::cout, tmp, "sum of basisfunction Gradients", "--" ); + + for (size_t p=0; p<elementMatrix.N(); p++) { - - - const auto& quadPos = quadPoint.position(); - -// std::cout << " quadPOS: " << quadPos << std::endl; - // TEST -// double muValue = mu(quadPos); -// std::cout << "muValue:" << muValue << std::endl; - - const auto jacobian = geometry.jacobianInverseTransposed(quadPos); - const double integrationElement = geometry.integrationElement(quadPos); - - - - std::vector<FieldMatrix<double,1,dim> > referenceGradients; - localFiniteElement.localBasis().evaluateJacobian(quadPos,referenceGradients); - - // Compute the shape function gradients on the grid element - std::vector<FieldVector<double,dim> > gradients(referenceGradients.size()); - - for (size_t i=0; i<gradients.size(); i++) - jacobian.mv(referenceGradients[i][0], gradients[i]); //TODO ? passt.. - - -// // print all gradients //TEST -// FieldVector<double,dim> tmp = {0.0 , 0.0}; -// for (size_t i=0; i < nSf; i++) -// { -// printvector(std::cout, gradients[i], "gradients[i]", "--" ); -// -// -// tmp[0] += gradients[i][0]; -// tmp[1] += gradients[i][1]; -// -// // tmp[0] += coeffVector[globalIdx]*gradients[i][0]; // 3D-Version -// // tmp[1] += coeffVector[globalIdx]*gradients[i][2]; -// // printvector(std::cout, tmp, "tmp", "--" ); -// -// } -// printvector(std::cout, tmp, "sum of basisfunction Gradients", "--" ); - - for (size_t p=0; p<elementMatrix.N(); p++) - { - for (size_t q=0; q<elementMatrix.M(); q++) - { -// auto localRow = localView.tree().localIndex(p); // VERTAUSCHT?!?! -// auto localCol = localView.tree().localIndex(q); - auto localRow = localView.tree().localIndex(q); - auto localCol = localView.tree().localIndex(p); - -// auto value = mu(quadPos)*(2.0* gradients[p][0] * gradients[q][0])+ mu(quadPos)*((1.0/(std::pow(gamma,2)))*(gradients[p][1] * gradients[q][1])); -// auto value = (mu(quadPos)*gradients[p][0] * gradients[q][0])+ ((1.0/gamma)*(gradients[p][1] * gradients[q][1])); - - - -// std::cout << "gradients[p][0]" << gradients[p][0] << std::endl; -// std::cout << "gradients[q][0]" << gradients[q][0] << std::endl; -// std::cout << "(1.0/std::pow(gamma,2))*gradients[p][1]" << (1.0/std::pow(gamma,2))*gradients[p][1]<< std::endl; - - - -// auto value3 = mu(quadPos)*(1.0/gamma)*gradients[p][2]; // 3D-Version -// auto value4 = value3*gradients[q][2]; // 3D-Version - - auto value1 = 2.0*mu(quadPos)* gradients[p][0] *gradients[q][0]; //#1 -// auto value1 = 2.0*mu(quadPos)*sqrt(2.0)* gradients[p][0] *gradients[q][0]; // TEST TODO warum passt es damit besser bei gamma = 1.0 ??? -// auto value2 = mu(quadPos)*(1.0/std::pow(gamma,2))*gradients[p][1] * gradients[q][1] ; - - - - - - auto value2 = 2.0*mu(quadPos)*(1.0/std::pow(gamma,2))*gradients[p][1] * gradients[q][1] ; //#1 TEST FAKTOR 2 hat hier gefehlt?!?! - - auto value = value1 + value2; - - elementMatrix[localRow][localCol] += value * quadPoint.weight() * integrationElement; - } - } + for (size_t q=0; q<elementMatrix.M(); q++) + { + // auto localRow = localView.tree().localIndex(p); // VERTAUSCHT?!?! + // auto localCol = localView.tree().localIndex(q); + auto localRow = localView.tree().localIndex(q); + auto localCol = localView.tree().localIndex(p); + + // auto value = mu(quadPos)*(2.0* gradients[p][0] * gradients[q][0])+ mu(quadPos)*((1.0/(std::pow(gamma,2)))*(gradients[p][1] * gradients[q][1])); + // auto value = (mu(quadPos)*gradients[p][0] * gradients[q][0])+ ((1.0/gamma)*(gradients[p][1] * gradients[q][1])); + + + + // std::cout << "gradients[p][0]" << gradients[p][0] << std::endl; + // std::cout << "gradients[q][0]" << gradients[q][0] << std::endl; + // std::cout << "(1.0/std::pow(gamma,2))*gradients[p][1]" << (1.0/std::pow(gamma,2))*gradients[p][1]<< std::endl; + + + + // auto value3 = mu(quadPos)*(1.0/gamma)*gradients[p][2]; // 3D-Version + // auto value4 = value3*gradients[q][2]; // 3D-Version + + auto value1 = 2.0*mu(quadPos)* gradients[p][0] *gradients[q][0]; //#1 + // auto value1 = 2.0*mu(quadPos)*sqrt(2.0)* gradients[p][0] *gradients[q][0]; // TEST TODO warum passt es damit besser bei gamma = 1.0 ??? + // auto value2 = mu(quadPos)*(1.0/std::pow(gamma,2))*gradients[p][1] * gradients[q][1] ; + + + + + + auto value2 = 2.0*mu(quadPos)*(1.0/std::pow(gamma,2))*gradients[p][1] * gradients[q][1] ; //#1 TEST FAKTOR 2 hat hier gefehlt?!?! + + auto value = value1 + value2; + + elementMatrix[localRow][localCol] += value * quadPoint.weight() * integrationElement; + } } + } } @@ -190,114 +190,114 @@ void assembleElementVolumeTerm(const LocalView& localView, LocalFunction& mu, const Force& forceTerm) { - using Element = typename LocalView::Element; - auto element = localView.element(); - auto geometry = element.geometry(); - + using Element = typename LocalView::Element; + auto element = localView.element(); + auto geometry = element.geometry(); - constexpr int dim = Element::dimension; - // Set of shape functions for a single element - const auto& localFiniteElement = localView.tree().finiteElement(); - const auto nSf = localFiniteElement.localBasis().size(); - // Set all entries to zero - elementRhs.resize(localFiniteElement.size()); - elementRhs = 0; - - // A quadrature rule -// int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1)+5; - int orderQR = 2 * (dim*localFiniteElement.localBasis().order()-1); -// int orderQR = 2 * (localFiniteElement.localBasis().order()-1); - -// std::cout << "elementRhs.size():" << elementRhs.size() << std::endl; - - - - const auto& quadRule = QuadratureRules<double,dim>::rule(element.type(), orderQR); - - for (const auto& quadPoint : quadRule) + + constexpr int dim = Element::dimension; + // Set of shape functions for a single element + const auto& localFiniteElement = localView.tree().finiteElement(); + const auto nSf = localFiniteElement.localBasis().size(); + // Set all entries to zero + elementRhs.resize(localFiniteElement.size()); + elementRhs = 0; + + // A quadrature rule + // int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1)+5; + int orderQR = 2 * (dim*localFiniteElement.localBasis().order()-1); + // int orderQR = 2 * (localFiniteElement.localBasis().order()-1); + + // std::cout << "elementRhs.size():" << elementRhs.size() << std::endl; + + + + const auto& quadRule = QuadratureRules<double,dim>::rule(element.type(), orderQR); + + for (const auto& quadPoint : quadRule) + { + const FieldVector<double,dim>& quadPos = quadPoint.position(); + + const double integrationElement = element.geometry().integrationElement(quadPos); + // double functionValue = forceTerm(element.geometry().global(quadPos)); + + // Evaluate all shape function values at this point + // std::vector<FieldVector<double,1> > shapeFunctionValues; + // localFiniteElement.localBasis().evaluateFunction(quadPos, shapeFunctionValues); + + const auto jacobian = geometry.jacobianInverseTransposed(quadPos); + + std::vector<FieldMatrix<double,1,dim> > referenceGradients; + localFiniteElement.localBasis().evaluateJacobian(quadPos,referenceGradients); + + // Compute the shape function gradients on the grid element + std::vector<FieldVector<double,dim> > gradients(referenceGradients.size()); + for (size_t i=0; i<gradients.size(); i++) + jacobian.mv(referenceGradients[i][0], gradients[i]); + + + + // Actually compute the vector entries + for (size_t p=0; p<nSf; p++) { - const FieldVector<double,dim>& quadPos = quadPoint.position(); - - const double integrationElement = element.geometry().integrationElement(quadPos); -// double functionValue = forceTerm(element.geometry().global(quadPos)); - - // Evaluate all shape function values at this point -// std::vector<FieldVector<double,1> > shapeFunctionValues; -// localFiniteElement.localBasis().evaluateFunction(quadPos, shapeFunctionValues); - - const auto jacobian = geometry.jacobianInverseTransposed(quadPos); - - std::vector<FieldMatrix<double,1,dim> > referenceGradients; - localFiniteElement.localBasis().evaluateJacobian(quadPos,referenceGradients); - - // Compute the shape function gradients on the grid element - std::vector<FieldVector<double,dim> > gradients(referenceGradients.size()); - for (size_t i=0; i<gradients.size(); i++) - jacobian.mv(referenceGradients[i][0], gradients[i]); - - - - // Actually compute the vector entries - for (size_t p=0; p<nSf; p++) - { - auto localIndex = localView.tree().localIndex(p); -// elementRhs[localIndex] += shapeFunctionValues[p] * forceTerm(quadPos) * quadPoint.weight() * integrationElement; -// auto value = shapeFunctionValues[p]* (sqrt(2.0)*mu(quadPos) *forceTerm(quadPos)); -// auto value = -1.0*gradients[p][0] * (sqrt(2.0)*mu(quadPos) *forceTerm(quadPos)); //NEGATIVE!!! TODO -// auto value = -2.0*mu(quadPos)*(sqrt(2.0)*forceTerm(quadPos))*gradients[p][0] ; -// auto value = -1.0*mu(quadPos)*forceTerm(quadPos)*gradients[p][0] ; - - - - -// auto value = -2.0*sqrt(2.0)*mu(quadPos)*forceTerm(quadPos)*gradients[p][0]; //#1 - - - auto value = 2.0*sqrt(2.0)*mu(quadPos)*forceTerm(quadPos)*gradients[p][0]; // TEST - - - - - -// auto value = 2.0*mu(quadPos)*sqrt(2.0)*forceTerm(quadPos)*gradients[p][0]; -// auto value = -2.0*mu(quadPos)*sqrt(2.0)*quadPos[1]*gradients[p][0]; //TEST -// std::cout << "value:" << value << std::endl; - -// std::cout << "forceTerm(quadPos):" << forceTerm(quadPos) << std::endl; -// std::cout << "quadPos:" << quadPos << std::endl; -// std::cout << "integrationElement:" << integrationElement << std::endl; - -// auto value = -1.0*sqrt(2.0)*forceTerm(quadPos)*gradients[p][0] ; //TEST - -// auto value = -1.0*mu(quadPos)*sqrt(2.0)*forceTerm(quadPos)*forceTerm(quadPos)*gradients[p][0]; //TEST - - elementRhs[localIndex] += value * quadPoint.weight() * integrationElement; - } + auto localIndex = localView.tree().localIndex(p); + // elementRhs[localIndex] += shapeFunctionValues[p] * forceTerm(quadPos) * quadPoint.weight() * integrationElement; + // auto value = shapeFunctionValues[p]* (sqrt(2.0)*mu(quadPos) *forceTerm(quadPos)); + // auto value = -1.0*gradients[p][0] * (sqrt(2.0)*mu(quadPos) *forceTerm(quadPos)); //NEGATIVE!!! TODO + // auto value = -2.0*mu(quadPos)*(sqrt(2.0)*forceTerm(quadPos))*gradients[p][0] ; + // auto value = -1.0*mu(quadPos)*forceTerm(quadPos)*gradients[p][0] ; + + + + + // auto value = -2.0*sqrt(2.0)*mu(quadPos)*forceTerm(quadPos)*gradients[p][0]; //#1 + + + auto value = 2.0*sqrt(2.0)*mu(quadPos)*forceTerm(quadPos)*gradients[p][0]; // TEST + + + + + + // auto value = 2.0*mu(quadPos)*sqrt(2.0)*forceTerm(quadPos)*gradients[p][0]; + // auto value = -2.0*mu(quadPos)*sqrt(2.0)*quadPos[1]*gradients[p][0]; //TEST + // std::cout << "value:" << value << std::endl; + + // std::cout << "forceTerm(quadPos):" << forceTerm(quadPos) << std::endl; + // std::cout << "quadPos:" << quadPos << std::endl; + // std::cout << "integrationElement:" << integrationElement << std::endl; + + // auto value = -1.0*sqrt(2.0)*forceTerm(quadPos)*gradients[p][0] ; //TEST + + // auto value = -1.0*mu(quadPos)*sqrt(2.0)*forceTerm(quadPos)*forceTerm(quadPos)*gradients[p][0]; //TEST + + elementRhs[localIndex] += value * quadPoint.weight() * integrationElement; } + } } // Get the occupation pattern of the stiffness matrix template<class Basis> void getOccupationPattern(const Basis& basis, MatrixIndexSet& nb) { - nb.resize(basis.size(), basis.size()); - auto gridView = basis.gridView(); - // A loop over all elements of the grid - auto localView = basis.localView(); - for (const auto& element : elements(gridView)) + nb.resize(basis.size(), basis.size()); + auto gridView = basis.gridView(); + // A loop over all elements of the grid + auto localView = basis.localView(); + for (const auto& element : elements(gridView)) + { + localView.bind(element); + for (size_t i=0; i<localView.size(); i++) { - localView.bind(element); - for (size_t i=0; i<localView.size(); i++) - { - // The global index of the i-th vertex of the element - auto row = localView.index(i); - for (size_t j=0; j<localView.size(); j++ ) - { - // The global index of the j-th vertex of the element - auto col = localView.index(j); - nb.add(row,col); - } - } + // The global index of the i-th vertex of the element + auto row = localView.index(i); + for (size_t j=0; j<localView.size(); j++ ) + { + // The global index of the j-th vertex of the element + auto col = localView.index(j); + nb.add(row,col); + } } + } } /** \brief Assemble the Laplace stiffness matrix on the given grid view */ template<class Basis, class Matrix, class Vector, class LocalFunction, class Force> @@ -308,61 +308,61 @@ void assemblePoissonProblem(const Basis& basis, const Force& forceTerm, const double gamma) { - auto gridView = basis.gridView(); + auto gridView = basis.gridView(); + + + MatrixIndexSet occupationPattern; + getOccupationPattern(basis, occupationPattern); + occupationPattern.exportIdx(matrix); + matrix = 0; + + + auto loadGVF = Dune::Functions::makeGridViewFunction(forceTerm, basis.gridView()); + auto loadFunctional = localFunction(loadGVF); + b.resize(basis.dimension()); + b = 0; + + auto localView = basis.localView(); + + for (const auto& element : elements(gridView)) + { + + localView.bind(element); + muLocal.bind(element); + loadFunctional.bind(element); - MatrixIndexSet occupationPattern; - getOccupationPattern(basis, occupationPattern); - occupationPattern.exportIdx(matrix); - matrix = 0; - - - auto loadGVF = Dune::Functions::makeGridViewFunction(forceTerm, basis.gridView()); - auto loadFunctional = localFunction(loadGVF); - b.resize(basis.dimension()); - b = 0; + // Dune::Matrix<double> elementMatrix; + Dune::Matrix<FieldMatrix<double,1,1> > elementMatrix; + // Dune::Matrix<FieldMatrix<double,1,1> > elementMatrix; + assembleElementStiffnessMatrix(localView, elementMatrix, muLocal, gamma); - auto localView = basis.localView(); - - for (const auto& element : elements(gridView)) + // std::cout << "elementMatrix.N() "<< elementMatrix.N() << std::endl; + // std::cout << "elementMatrix.M() " << elementMatrix.M() << std::endl; + + + for(size_t p=0; p<elementMatrix.N(); p++) { + auto row = localView.index(p); + for (size_t q=0; q<elementMatrix.M(); q++ ) + { + auto col = localView.index(q); + matrix[row][col] += elementMatrix[p][q]; + } + } - localView.bind(element); - muLocal.bind(element); - loadFunctional.bind(element); - - -// Dune::Matrix<double> elementMatrix; - Dune::Matrix<FieldMatrix<double,1,1> > elementMatrix; -// Dune::Matrix<FieldMatrix<double,1,1> > elementMatrix; - assembleElementStiffnessMatrix(localView, elementMatrix, muLocal, gamma); - -// std::cout << "elementMatrix.N() "<< elementMatrix.N() << std::endl; -// std::cout << "elementMatrix.M() " << elementMatrix.M() << std::endl; - - - for(size_t p=0; p<elementMatrix.N(); p++) - { - auto row = localView.index(p); - for (size_t q=0; q<elementMatrix.M(); q++ ) - { - auto col = localView.index(q); - matrix[row][col] += elementMatrix[p][q]; - } - } - -// BlockVector<double> elementRhs; - BlockVector<FieldVector<double,1> > elementRhs; - assembleElementVolumeTerm(localView, elementRhs, muLocal, loadFunctional); - for (size_t p=0; p<elementRhs.size(); p++) - { - // The global index of the p-th vertex of the element - auto row = localView.index(p); - b[row] += elementRhs[p]; - } + // BlockVector<double> elementRhs; + BlockVector<FieldVector<double,1> > elementRhs; + assembleElementVolumeTerm(localView, elementRhs, muLocal, loadFunctional); + for (size_t p=0; p<elementRhs.size(); p++) + { + // The global index of the p-th vertex of the element + auto row = localView.index(p); + b[row] += elementRhs[p]; } + } } @@ -372,145 +372,145 @@ void assemblePoissonProblem(const Basis& basis, template<class Basis, class Vector, class LocalFunc1, class LocalFunc2> double computeMuGamma(const Basis& basis, Vector& coeffVector, - const double gamma, + const double gamma, LocalFunc1& mu, LocalFunc2& Func - ) + ) { -// constexpr int dim = Basis::LocalView::Element::dimension; - + // constexpr int dim = Basis::LocalView::Element::dimension; + double output = 0.0; double Term1 = 0.0; double Term2 = 0.0; double Term11 = 0.0; constexpr int dim = 2; -// constexpr int dim = 3; + // constexpr int dim = 3; auto localView = basis.localView(); - -// auto solutionFunction = Functions::makeDiscreteGlobalBasisFunction<double>(basis, coeffVector); -// auto localSol = localFunction(solutionFunction); - -// auto loadGVF = Dune::Functions::makeGridViewFunction(x3Fun, basis.gridView()); -// auto x3Functional = localFunction(loadGVF); - - - - + + // auto solutionFunction = Functions::makeDiscreteGlobalBasisFunction<double>(basis, coeffVector); + // auto localSol = localFunction(solutionFunction); + + // auto loadGVF = Dune::Functions::makeGridViewFunction(x3Fun, basis.gridView()); + // auto x3Functional = localFunction(loadGVF); + + + + double area = 0.0; - + for(const auto& element : elements(basis.gridView())) { - -// std::cout << " ------------------------- one ELEMENT ------------------------" << std::endl; - double elementEnergy1 = 0.0; - double elementEnergy2 = 0.0; - - localView.bind(element); - mu.bind(element); + + // std::cout << " ------------------------- one ELEMENT ------------------------" << std::endl; + double elementEnergy1 = 0.0; + double elementEnergy2 = 0.0; + + localView.bind(element); + mu.bind(element); // x3Functional.bind(element); - Func.bind(element); - - auto geometry = element.geometry(); - const auto& localFiniteElement = localView.tree().finiteElement(); - const auto nSf = localFiniteElement.localBasis().size(); + Func.bind(element); -// int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1)+5; - int orderQR = 2 * (dim*localFiniteElement.localBasis().order()-1); + auto geometry = element.geometry(); + const auto& localFiniteElement = localView.tree().finiteElement(); + const auto nSf = localFiniteElement.localBasis().size(); + + // int orderQR = 2*(dim*localFiniteElement.localBasis().order()-1)+5; + int orderQR = 2 * (dim*localFiniteElement.localBasis().order()-1); // int orderQR = 2 * (localFiniteElement.localBasis().order()-1); - const auto& quad = QuadratureRules<double, dim>::rule(element.type(), orderQR); // TODO WARUM HIER KEINE COLOR ?? ERROR - + const auto& quad = QuadratureRules<double, dim>::rule(element.type(), orderQR); // TODO WARUM HIER KEINE COLOR ?? ERROR + // std::cout << " ------------------------- one ELEMENT ------------------------" << std::endl; - for(const auto& quadPoint : quad) - { - const auto& quadPos = quadPoint.position(); - // const FieldVector<double,dim>& quadPos = quadPoint.position(); - // std::cout << " quadPOS: " << quadPos << std::endl; + for(const auto& quadPoint : quad) + { + const auto& quadPos = quadPoint.position(); + // const FieldVector<double,dim>& quadPos = quadPoint.position(); + // std::cout << " quadPOS: " << quadPos << std::endl; - - const auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(quadPos); - const double integrationElement = geometry.integrationElement(quadPos); - - area += quadPoint.weight() * integrationElement; - - std::vector< FieldMatrix<double, 1, dim>> referenceGradients; - localFiniteElement.localBasis().evaluateJacobian(quadPos,referenceGradients); - - // Compute the shape function gradients on the grid element - std::vector<FieldVector<double,dim>> gradients(referenceGradients.size()); - - for (size_t i=0; i<gradients.size(); i++) - jacobianInverseTransposed.mv(referenceGradients[i][0], gradients[i]); - - FieldVector<double,dim> tmp(0.0); - // std::cout << "integrationElement :" << integrationElement << std::endl; - // std::cout << "quadPoint.weight() :" << quadPoint.weight() << std::endl; - - for (size_t i=0; i < nSf; i++) - { - size_t localIdx = localView.tree().localIndex(i); // hier i:leafIdx - size_t globalIdx = localView.index(localIdx); - // printvector(std::cout, gradients[i], "gradients[i]", "--" ); + + const auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(quadPos); + const double integrationElement = geometry.integrationElement(quadPos); + + area += quadPoint.weight() * integrationElement; + + std::vector< FieldMatrix<double, 1, dim> > referenceGradients; + localFiniteElement.localBasis().evaluateJacobian(quadPos,referenceGradients); + + // Compute the shape function gradients on the grid element + std::vector<FieldVector<double,dim> > gradients(referenceGradients.size()); + + for (size_t i=0; i<gradients.size(); i++) + jacobianInverseTransposed.mv(referenceGradients[i][0], gradients[i]); + + FieldVector<double,dim> tmp(0.0); + // std::cout << "integrationElement :" << integrationElement << std::endl; + // std::cout << "quadPoint.weight() :" << quadPoint.weight() << std::endl; + + for (size_t i=0; i < nSf; i++) + { + size_t localIdx = localView.tree().localIndex(i); // hier i:leafIdx + size_t globalIdx = localView.index(localIdx); + // printvector(std::cout, gradients[i], "gradients[i]", "--" ); // std::cout << "coeffVector[globalIdx]:" << coeffVector[globalIdx] << std::endl; - tmp[0] += coeffVector[globalIdx]*gradients[i][0]; - tmp[1] += coeffVector[globalIdx]*gradients[i][1]; + tmp[0] += coeffVector[globalIdx]*gradients[i][0]; + tmp[1] += coeffVector[globalIdx]*gradients[i][1]; // tmp[0] += coeffVector[globalIdx]*gradients[i][0]; // 3D-Version // tmp[1] += coeffVector[globalIdx]*gradients[i][2]; - // printvector(std::cout, tmp, "tmp", "--" ); - } - // printvector(std::cout, tmp, "gradient_w", "--" ); - - // auto value1 = std::pow( ((quadPos[1]/sqrt(2.0))+ (tmp[0]/2.0)) ,2); //TEST - - - - auto q1 = (Func(quadPos)/sqrt(2.0)); //#1 - auto q2 = (tmp[0]/2.0); //#1 - - -// auto q2 = (tmp[0]/sqrt(2.0)); // TEST !!!!!!!!!! - - - - + // printvector(std::cout, tmp, "tmp", "--" ); + } + // printvector(std::cout, tmp, "gradient_w", "--" ); - // CHECK : BEITRÄGE CHECKEN!!!! - -// std::cout << "Beitrag1: " << q2 << std::endl; -// std::cout << "Beitrag2: " << (tmp[1]/(2.0*gamma)) << std::endl; -// -// -// - - auto q3 = q1 - q2; // TEST - -// auto q3 = q1 + q2; // #1 - auto value1 = std::pow(q3,2); + // auto value1 = std::pow( ((quadPos[1]/sqrt(2.0))+ (tmp[0]/2.0)) ,2); //TEST - - -// auto value2 = std::pow( (tmp[1]/(2.0*gamma) ) , 2); - auto value2 = std::pow( (tmp[1]/(sqrt(2.0)*gamma) ) , 2); - - -// auto value = 2.0*mu(quadPos)*(2.0*value1 + value2); - - - elementEnergy1 += 2.0*mu(quadPos)* 2.0*value1 * quadPoint.weight() * integrationElement; - elementEnergy2 += 2.0*mu(quadPos)* value2 * quadPoint.weight() * integrationElement; - // std::cout << "output:" << output << std::endl; - } -// std::cout << "elementEnergy:" << elementEnergy << std::endl; + auto q1 = (Func(quadPos)/sqrt(2.0)); //#1 + auto q2 = (tmp[0]/2.0); //#1 + + + // auto q2 = (tmp[0]/sqrt(2.0)); // TEST !!!!!!!!!! + + + + + + // CHECK : BEITRÄGE CHECKEN!!!! + + // std::cout << "Beitrag1: " << q2 << std::endl; + // std::cout << "Beitrag2: " << (tmp[1]/(2.0*gamma)) << std::endl; + // + // + // + + auto q3 = q1 - q2; // TEST + + // auto q3 = q1 + q2; // #1 + auto value1 = std::pow(q3,2); + + + + // auto value2 = std::pow( (tmp[1]/(2.0*gamma) ) , 2); + auto value2 = std::pow( (tmp[1]/(sqrt(2.0)*gamma) ) , 2); + - Term1 += elementEnergy1; - Term2 += elementEnergy2; - -// std::cout << "output: " << output << std::endl; - } + + // auto value = 2.0*mu(quadPos)*(2.0*value1 + value2); + + + + elementEnergy1 += 2.0*mu(quadPos)* 2.0*value1 * quadPoint.weight() * integrationElement; + elementEnergy2 += 2.0*mu(quadPos)* value2 * quadPoint.weight() * integrationElement; + // std::cout << "output:" << output << std::endl; + } + // std::cout << "elementEnergy:" << elementEnergy << std::endl; + + Term1 += elementEnergy1; + Term2 += elementEnergy2; + + // std::cout << "output: " << output << std::endl; + } std::cout << "Term1: " << Term1 << std::endl; std::cout << "Term2: " << Term2 << std::endl; output = Term1 + Term2; @@ -522,45 +522,45 @@ double computeMuGamma(const Basis& basis, // // ----------------------------------------------------------- /* -template<class Basis, class Vector, class LocalFunc1, class LocalFunc2> -double computeMuGamma(const Basis& basis, + template<class Basis, class Vector, class LocalFunc1, class LocalFunc2> + double computeMuGamma(const Basis& basis, Vector& coeffVector, - const double gamma, + const double gamma, LocalFunc1& mu, LocalFunc2& Func ) -{ + { -// constexpr int dim = Basis::LocalView::Element::dimension; - - double output = 0.0; - constexpr int dim = 2; -// constexpr int dim = 3; - auto localView = basis.localView(); - -// auto solutionFunction = Functions::makeDiscreteGlobalBasisFunction<double>(basis, coeffVector); -// auto localSol = localFunction(solutionFunction); - -// auto loadGVF = Dune::Functions::makeGridViewFunction(x3Fun, basis.gridView()); -// auto x3Functional = localFunction(loadGVF); - - - - - double area = 0.0; - - for(const auto& element : elements(basis.gridView())) - { - -// std::cout << " ------------------------- one ELEMENT ------------------------" << std::endl; + // constexpr int dim = Basis::LocalView::Element::dimension; + + double output = 0.0; + constexpr int dim = 2; + // constexpr int dim = 3; + auto localView = basis.localView(); + + // auto solutionFunction = Functions::makeDiscreteGlobalBasisFunction<double>(basis, coeffVector); + // auto localSol = localFunction(solutionFunction); + + // auto loadGVF = Dune::Functions::makeGridViewFunction(x3Fun, basis.gridView()); + // auto x3Functional = localFunction(loadGVF); + + + + + double area = 0.0; + + for(const auto& element : elements(basis.gridView())) + { + + // std::cout << " ------------------------- one ELEMENT ------------------------" << std::endl; double elementEnergy = 0.0; - + localView.bind(element); mu.bind(element); // x3Functional.bind(element); Func.bind(element); - + auto geometry = element.geometry(); const auto& localFiniteElement = localView.tree().finiteElement(); const auto nSf = localFiniteElement.localBasis().size(); @@ -569,92 +569,92 @@ double computeMuGamma(const Basis& basis, int orderQR = 2 * (dim*localFiniteElement.localBasis().order()-1); // int orderQR = 2 * (localFiniteElement.localBasis().order()-1); const auto& quad = QuadratureRules<double, dim>::rule(element.type(), orderQR); // TODO WARUM HIER KEINE COLOR ?? ERROR - + // std::cout << " ------------------------- one ELEMENT ------------------------" << std::endl; for(const auto& quadPoint : quad) { - + const auto& quadPos = quadPoint.position(); // const FieldVector<double,dim>& quadPos = quadPoint.position(); // std::cout << " quadPOS: " << quadPos << std::endl; - + const auto jacobianInverseTransposed = geometry.jacobianInverseTransposed(quadPos); const double integrationElement = geometry.integrationElement(quadPos); - + area += quadPoint.weight() * integrationElement; - + std::vector< FieldMatrix<double, 1, dim>> referenceGradients; localFiniteElement.localBasis().evaluateJacobian(quadPos,referenceGradients); - + // Compute the shape function gradients on the grid element std::vector<FieldVector<double,dim>> gradients(referenceGradients.size()); - + for (size_t i=0; i<gradients.size(); i++) jacobianInverseTransposed.mv(referenceGradients[i][0], gradients[i]); - -// FieldVector<double,dim> tmp = {0.0 , 0.0}; + + // FieldVector<double,dim> tmp = {0.0 , 0.0}; FieldVector<double,dim> tmp(0.0); - // FieldVector<double,dim> tmp = {0.0 ,0.0, 0.0}; //3D-Version - + // FieldVector<double,dim> tmp = {0.0 ,0.0, 0.0}; //3D-Version + // std::cout << "integrationElement :" << integrationElement << std::endl; // std::cout << "quadPoint.weight() :" << quadPoint.weight() << std::endl; - + for (size_t i=0; i < nSf; i++) { size_t localIdx = localView.tree().localIndex(i); // hier i:leafIdx size_t globalIdx = localView.index(localIdx); - - // printvector(std::cout, gradients[i], "gradients[i]", "--" ); + + // printvector(std::cout, gradients[i], "gradients[i]", "--" ); // std::cout << "coeffVector[globalIdx]:" << coeffVector[globalIdx] << std::endl; - + tmp[0] += coeffVector[globalIdx]*gradients[i][0]; tmp[1] += coeffVector[globalIdx]*gradients[i][1]; - + // tmp[0] += coeffVector[globalIdx]*gradients[i][0]; // 3D-Version // tmp[1] += coeffVector[globalIdx]*gradients[i][2]; - // printvector(std::cout, tmp, "tmp", "--" ); + // printvector(std::cout, tmp, "tmp", "--" ); } // printvector(std::cout, tmp, "gradient_w", "--" ); - - + + // auto value1 = std::pow( ((quadPos[1]/sqrt(2.0))+ (tmp[0]/2.0)) ,2); //TEST - - - + + + auto q1 = (Func(quadPos)/sqrt(2.0)); auto q2 = (tmp[0]/2.0); - - -// auto q2 = (tmp[0]/sqrt(2.0)); // TEST !!!!!!!!!! - - - - + + + // auto q2 = (tmp[0]/sqrt(2.0)); // TEST !!!!!!!!!! + + + + // CHECK : BEITRÄGE CHECKEN!!!! - + std::cout << "Beitrag1: " << q2 << std::endl; std::cout << "Beitrag2: " << (tmp[1]/(2.0*gamma)) << std::endl; - - - - + + + + auto q3 = q1 + q2; auto value1 = std::pow(q3,2); -// auto value1 = std::pow( ((Func(quadPos)/sqrt(2.0)) + (tmp[0]/2.0)) , 2); - - + // auto value1 = std::pow( ((Func(quadPos)/sqrt(2.0)) + (tmp[0]/2.0)) , 2); + + auto value2 = std::pow( (tmp[1]/(2.0*gamma) ) , 2); -// auto value2 = std::pow( (tmp[1]/(sqrt(2.0)*gamma) ) , 2); //TEST - - + // auto value2 = std::pow( (tmp[1]/(sqrt(2.0)*gamma) ) , 2); //TEST + + // auto value2 = (1.0/(std::pow(gamma,2)))* std::pow(tmp[1],2)/4.0 ; //TEST - + auto value = 2.0*mu(quadPos)*(2.0*value1 + value2); - + // std::cout << "quadPos[1]:" << quadPos[1]<< std::endl; // std::cout << "Func(quadPos):" << Func(quadPos) << std::endl; // std::cout << "sqrt(2.0):" << sqrt(2.0) << std::endl; @@ -663,38 +663,38 @@ double computeMuGamma(const Basis& basis, // std::cout << "value1:" << value1 << std::endl; // std::cout << "value2:" << value2 << std::endl; // std::cout << "value:" << value << std::endl; - - + + // auto value = 2.0*mu(quadPos)*(2.0*std::pow( ((x3Functional(quadPos)/sqrt(2.0))+ (tmp[0]/2.0)) ,2) + std::pow( (tmp[1]/(2.0*gamma) ) ,2) ); - - - + + + // auto value = 2.0*mu(quadPos)*(2.0* (((x3Functional(quadPos)*x3Functional(quadPos))/2.0) + std::pow( (tmp[0]/2.0) ,2)) + std::pow( (tmp[1]/(2.0*gamma) ) ,2) ); //TEST - + // auto value = 2.0*mu(quadPos)*(2.0*std::pow( ((x3Functional(quadPos)/sqrt(2.0))+ (tmp[0]/2.0)) ,2) ) + std::pow( (tmp[1]/(2.0*gamma) ) ,2) ; //TEST // auto value = 2.0*mu(quadPos)*(2.0*std::pow( ((x3Functional(quadPos)/sqrt(2.0))+ (tmp[0]/2.0)) ,2)) + (1.0/gamma)*std::pow( (tmp[1]/2.0) ,2) ; //TEST // auto value = 2.0*mu(quadPos)*(2.0*std::pow( ((x3Functional(quadPos)/sqrt(2.0))+ (tmp[0]/2.0)) ,2) + (1.0/gamma)*std::pow( (tmp[1]/2.0) ,2) ) ; //TEST - + elementEnergy += value * quadPoint.weight() * integrationElement; // std::cout << "output:" << output << std::endl; } -// std::cout << "elementEnergy:" << elementEnergy << std::endl; + // std::cout << "elementEnergy:" << elementEnergy << std::endl; output += elementEnergy; -// std::cout << "output: " << output << std::endl; - } - std::cout << "Domain-Area: " << area << std::endl; - return (1.0/area) * output; -} -// ------------------------------------------------------------------------- -*/ + // std::cout << "output: " << output << std::endl; + } + std::cout << "Domain-Area: " << area << std::endl; + return (1.0/area) * output; + } + // ------------------------------------------------------------------------- + */ - // Check whether two points are equal on R/Z x R/Z - auto equivalent = [](const FieldVector<double,2>& x, const FieldVector<double,2>& y) - { - return ( (FloatCmp::eq(x[0],y[0]) or FloatCmp::eq(x[0]+1,y[0]) or FloatCmp::eq(x[0]-1,y[0])) - and (FloatCmp::eq(x[1],y[1])) ); - }; +// Check whether two points are equal on R/Z x R/Z +auto equivalent = [](const FieldVector<double,2>& x, const FieldVector<double,2>& y) + { + return ( (FloatCmp::eq(x[0],y[0]) or FloatCmp::eq(x[0]+1,y[0]) or FloatCmp::eq(x[0]-1,y[0])) + and (FloatCmp::eq(x[1],y[1])) ); + }; @@ -703,8 +703,8 @@ int main(int argc, char *argv[]) MPIHelper::instance(argc, argv); - - + + ParameterTree parameterSet; if (argc < 2) ParameterTreeParser::readINITree("../../inputs/computeMuGamma.parset", parameterSet); @@ -713,260 +713,262 @@ int main(int argc, char *argv[]) ParameterTreeParser::readINITree(argv[1], parameterSet); ParameterTreeParser::readOptions(argc, argv, parameterSet); } - ///////////////////////////////// - // SET OUTPUT - ///////////////////////////////// - std::string outputPath = parameterSet.get("outputPath", "/home/klaus/Desktop/DUNE/dune-microstructure/outputs"); - std::fstream log; - log.open(outputPath + "/outputMuGamma.txt" ,std::ios::out); - std::cout << "outputPath:" << outputPath << std::endl; - - - ////////////////////////////////// - // Generate the grid - ////////////////////////////////// - constexpr int dim = 2; - - // QUAD-GRID - FieldVector<double,dim> lower({-1.0/2.0, -1.0/2.0}); - FieldVector<double,dim> upper({1.0/2.0, 1.0/2.0}); -// std::array<int, dim> nElements = {16,16}; - - std::array<int,2> nElements = parameterSet.get<std::array<int,2>>("nElements", {32,32}); - std::cout << "Number of Elements in each direction: " << nElements << std::endl; - log << "Number of Elements in each direction: " << nElements << std::endl; - - - using CellGridType = YaspGrid<dim, EquidistantOffsetCoordinates<double, dim> >; - CellGridType grid_CE(lower,upper,nElements); - using GridView = CellGridType::LeafGridView; - const GridView gridView = grid_CE.leafGridView(); - using Domain = GridView::Codim<0>::Geometry::GlobalCoordinate; - - // ----------- INPUT PARAMETERS ----------------------------- - std::string imp = parameterSet.get<std::string>("material_prestrain_imp", "parametrized_Laminate"); - log << "material_prestrain used: "<< imp << std::endl; - double gamma = parameterSet.get<double>("gamma", 1.0); - double theta = parameterSet.get<double>("theta", 1.0/4.0); - double mu1 = parameterSet.get<double>("mu1", 1.0); - double beta = parameterSet.get<double>("beta", 2.0); - double mu2 = beta*mu1; - std::cout << "Gamma:" << gamma << std::endl; - std::cout << "Theta:" << theta << std::endl; - std::cout << "mu1:" << mu1 << std::endl; - std::cout << "mu2:" << mu2 << std::endl; - std::cout << "beta:" << beta << std::endl; - log << "----- Input Parameters -----: " << std::endl; - log << "gamma: " << gamma << std::endl; - log << "theta: " << theta << std::endl; - log << "beta: " << beta << std::endl; - log << "material parameters: " << std::endl; - log << "mu1: " << mu1 << "\nmu2: " << mu2 << std::endl; - -// auto muTerm = [mu1, mu2, theta] (const Domain& z) { -// -// // if (abs(z[0]) > (theta/2.0)) -// if (abs(z[0]) >= (theta/2.0)) -// return mu1; -// else -// return mu2; -// }; - - auto materialImp = IsotropicMaterialImp<dim>(); - auto muTerm = materialImp.getMu(parameterSet); - auto muGridF = Dune::Functions::makeGridViewFunction(muTerm, gridView); - auto muLocal = localFunction(muGridF); - - - ///////////////////////////////////////////////////////// - // Stiffness matrix and right hand side vector - ///////////////////////////////////////////////////////// - using Vector = BlockVector<FieldVector<double,1> >; - using Matrix = BCRSMatrix<FieldMatrix<double,1,1> >; - Matrix stiffnessMatrix; - Vector b; - - ///////////////////////////////////////////////////////// - // Assemble the system - ///////////////////////////////////////////////////////// - using namespace Functions::BasisFactory; - Functions::BasisFactory::Experimental::PeriodicIndexSet periodicIndices; - - // Don't do the following in real life: It has quadratic run-time in the number of vertices. - for (const auto& v1 : vertices(gridView)) - for (const auto& v2 : vertices(gridView)) - if (equivalent(v1.geometry().corner(0), v2.geometry().corner(0))) - periodicIndices.unifyIndexPair({gridView.indexSet().index(v1)}, {gridView.indexSet().index(v2)}); - - auto basis = makeBasis(gridView, Functions::BasisFactory::Experimental::periodic(lagrange<1>(), periodicIndices)); // flatLexicographic()? - - - auto forceTerm = [](const FieldVector<double,dim>& x){return x[1];}; //2D-Version - auto ForceGridF = Dune::Functions::makeGridViewFunction(forceTerm, gridView); - auto ForceLocal = localFunction(ForceGridF); - - assemblePoissonProblem(basis, stiffnessMatrix, b, muLocal, forceTerm, gamma); -// printmatrix(std::cout, stiffnessMatrix, "StiffnessMatrix", "--"); -// printvector(std::cout, b, "b", "--"); - - - - - - - /////////////////////////// - // Compute solution - /////////////////////////// - - Vector x(basis.size()); - x = b; - - std::cout << "------------ CG - Solver ------------" << std::endl; - MatrixAdapter<Matrix, Vector, Vector> op(stiffnessMatrix); - - - - // Sequential incomplete LU decomposition as the preconditioner - SeqILU<Matrix, Vector, Vector> ilu0(stiffnessMatrix,1.0); - int iter = parameterSet.get<double>("iterations_CG", 999); - // Preconditioned conjugate-gradient solver - CGSolver<Vector> solver(op, - ilu0, //NULL, - 1e-8, // desired residual reduction factorlack - iter, // maximum number of iterations - 2); // verbosity of the solver - InverseOperatorResult statistics; - // Solve! - solver.apply(x, b, statistics); - -// std::cout << "------------ GMRES - Solver ------------" << std::endl; -// // Turn the matrix into a linear operator -// MatrixAdapter<Matrix, Vector, Vector> op(stiffnessMatrix); -// -// // Fancy (but only) way to not have a preconditioner at all -// Richardson<Vector,Vector> preconditioner(1.0); -// -// // Construct the iterative solver -// RestartedGMResSolver<Vector> solver( -// op, // Operator to invert -// preconditioner, // Preconditioner -// 1e-10, // Desired residual reduction factor -// 500, // Number of iterations between restarts, -// // here: no restarting -// 500, // Maximum number of iterations -// 2); // Verbosity of the solver -// -// // Object storing some statistics about the solving process -// InverseOperatorResult statistics; -// -// // solve for different Correctors (alpha = 1,2,3) -// solver.apply(x, b, statistics); -// - -// ----------------------------------------------------------------------------------------------------- - - - using SolutionRange = double; - auto solutionFunction = Functions::makeDiscreteGlobalBasisFunction<SolutionRange>(basis, x); - - - // -------- PRINT OUTPUT -------- -// printvector(std::cout, x, "coeffVector", "--" ); - std::cout << "Gamma:" << gamma << std::endl; - double mu_gamma = computeMuGamma(basis, x, gamma, muLocal, ForceLocal); - std::cout << "mu_gamma:" << mu_gamma << std::endl; - log << "----- OUTPUT: -----: " << std::endl; - log << "mu_gamma=" << mu_gamma << std::endl; - log << "q3=" << mu_gamma << std::endl; - -// std::cout.precision(10); -// std::cout << "mu_gamma:" << std::fixed << mu_gamma << std::endl; - - - -// Vector zeroVec(basis.size()); -// zeroVec = 0; -// std::cout << "TEST computeMuGamma:" << computeMuGamma(basis, zeroVec, gamma, muLocal, ForceLocal)<< std::endl; - std::cout << " --- print analytic solutions(if possible) --- " << std::endl; - if (imp == "analytical_Example") + ///////////////////////////////// + // SET OUTPUT + ///////////////////////////////// + std::string outputPath = parameterSet.get("outputPath", "/home/klaus/Desktop/DUNE/dune-microstructure/outputs"); + std::fstream log; + log.open(outputPath + "/outputMuGamma.txt" ,std::ios::out); + std::cout << "outputPath:" << outputPath << std::endl; + + + ////////////////////////////////// + // Generate the grid + ////////////////////////////////// + constexpr int dim = 2; + + // QUAD-GRID + FieldVector<double,dim> lower({-1.0/2.0, -1.0/2.0}); + FieldVector<double,dim> upper({1.0/2.0, 1.0/2.0}); + // std::array<int, dim> nElements = {16,16}; + + std::array<int,2> nElements = parameterSet.get<std::array<int,2> >("nElements", {32,32}); + std::cout << "Number of Elements in each direction: " << nElements << std::endl; + log << "Number of Elements in each direction: " << nElements << std::endl; + + + using CellGridType = YaspGrid<dim, EquidistantOffsetCoordinates<double, dim> >; + CellGridType grid_CE(lower,upper,nElements); + using GridView = CellGridType::LeafGridView; + const GridView gridView = grid_CE.leafGridView(); + using Domain = GridView::Codim<0>::Geometry::GlobalCoordinate; + + // ----------- INPUT PARAMETERS ----------------------------- + std::string imp = parameterSet.get<std::string>("material_prestrain_imp", "parametrized_Laminate"); + log << "material_prestrain used: "<< imp << std::endl; + double gamma = parameterSet.get<double>("gamma", 1.0); + double theta = parameterSet.get<double>("theta", 1.0/4.0); + double mu1 = parameterSet.get<double>("mu1", 1.0); + double beta = parameterSet.get<double>("beta", 2.0); + double mu2 = beta*mu1; + std::cout << "Gamma:" << gamma << std::endl; + std::cout << "Theta:" << theta << std::endl; + std::cout << "mu1:" << mu1 << std::endl; + std::cout << "mu2:" << mu2 << std::endl; + std::cout << "beta:" << beta << std::endl; + log << "----- Input Parameters -----: " << std::endl; + log << "gamma: " << gamma << std::endl; + log << "theta: " << theta << std::endl; + log << "beta: " << beta << std::endl; + log << "material parameters: " << std::endl; + log << "mu1: " << mu1 << "\nmu2: " << mu2 << std::endl; + + // auto muTerm = [mu1, mu2, theta] (const Domain& z) { + // + // // if (abs(z[0]) > (theta/2.0)) + // if (abs(z[0]) >= (theta/2.0)) + // return mu1; + // else + // return mu2; + // }; + + auto materialImp = IsotropicMaterialImp<dim>(); + auto muTerm = materialImp.getMu(parameterSet); + auto muGridF = Dune::Functions::makeGridViewFunction(muTerm, gridView); + auto muLocal = localFunction(muGridF); + + + ///////////////////////////////////////////////////////// + // Stiffness matrix and right hand side vector + ///////////////////////////////////////////////////////// + using Vector = BlockVector<FieldVector<double,1> >; + using Matrix = BCRSMatrix<FieldMatrix<double,1,1> >; + Matrix stiffnessMatrix; + Vector b; + + ///////////////////////////////////////////////////////// + // Assemble the system + ///////////////////////////////////////////////////////// + using namespace Functions::BasisFactory; + Functions::BasisFactory::Experimental::PeriodicIndexSet periodicIndices; + + // Don't do the following in real life: It has quadratic run-time in the number of vertices. + for (const auto& v1 : vertices(gridView)) + for (const auto& v2 : vertices(gridView)) + if (equivalent(v1.geometry().corner(0), v2.geometry().corner(0))) + periodicIndices.unifyIndexPair({gridView.indexSet().index(v1)}, {gridView.indexSet().index(v2)}); + + auto basis = makeBasis(gridView, Functions::BasisFactory::Experimental::periodic(lagrange<1>(), periodicIndices)); // flatLexicographic()? + + + auto forceTerm = [](const FieldVector<double,dim>& x){ + return x[1]; + }; //2D-Version + auto ForceGridF = Dune::Functions::makeGridViewFunction(forceTerm, gridView); + auto ForceLocal = localFunction(ForceGridF); + + assemblePoissonProblem(basis, stiffnessMatrix, b, muLocal, forceTerm, gamma); + // printmatrix(std::cout, stiffnessMatrix, "StiffnessMatrix", "--"); + // printvector(std::cout, b, "b", "--"); + + + + + + + /////////////////////////// + // Compute solution + /////////////////////////// + + Vector x(basis.size()); + x = b; + + std::cout << "------------ CG - Solver ------------" << std::endl; + MatrixAdapter<Matrix, Vector, Vector> op(stiffnessMatrix); + + + + // Sequential incomplete LU decomposition as the preconditioner + SeqILU<Matrix, Vector, Vector> ilu0(stiffnessMatrix,1.0); + int iter = parameterSet.get<double>("iterations_CG", 999); + // Preconditioned conjugate-gradient solver + CGSolver<Vector> solver(op, + ilu0, //NULL, + 1e-8, // desired residual reduction factorlack + iter, // maximum number of iterations + 2); // verbosity of the solver + InverseOperatorResult statistics; + // Solve! + solver.apply(x, b, statistics); + + // std::cout << "------------ GMRES - Solver ------------" << std::endl; + // // Turn the matrix into a linear operator + // MatrixAdapter<Matrix, Vector, Vector> op(stiffnessMatrix); + // + // // Fancy (but only) way to not have a preconditioner at all + // Richardson<Vector,Vector> preconditioner(1.0); + // + // // Construct the iterative solver + // RestartedGMResSolver<Vector> solver( + // op, // Operator to invert + // preconditioner, // Preconditioner + // 1e-10, // Desired residual reduction factor + // 500, // Number of iterations between restarts, + // // here: no restarting + // 500, // Maximum number of iterations + // 2); // Verbosity of the solver + // + // // Object storing some statistics about the solving process + // InverseOperatorResult statistics; + // + // // solve for different Correctors (alpha = 1,2,3) + // solver.apply(x, b, statistics); + // + + // ----------------------------------------------------------------------------------------------------- + + + using SolutionRange = double; + auto solutionFunction = Functions::makeDiscreteGlobalBasisFunction<SolutionRange>(basis, x); + + + // -------- PRINT OUTPUT -------- + // printvector(std::cout, x, "coeffVector", "--" ); + std::cout << "Gamma:" << gamma << std::endl; + double mu_gamma = computeMuGamma(basis, x, gamma, muLocal, ForceLocal); + std::cout << "mu_gamma:" << mu_gamma << std::endl; + log << "----- OUTPUT: -----: " << std::endl; + log << "mu_gamma=" << mu_gamma << std::endl; + log << "q3=" << mu_gamma << std::endl; + + // std::cout.precision(10); + // std::cout << "mu_gamma:" << std::fixed << mu_gamma << std::endl; + + + + // Vector zeroVec(basis.size()); + // zeroVec = 0; + // std::cout << "TEST computeMuGamma:" << computeMuGamma(basis, zeroVec, gamma, muLocal, ForceLocal)<< std::endl; + std::cout << " --- print analytic solutions(if possible) --- " << std::endl; + if (imp == "analytical_Example") + { + std::cout<< "analytical_Example" << std::endl; + double q1 = ((mu1*mu2)/6.0)/(theta*mu1+ (1.0- theta)*mu2); + double q2 = ((1.0-theta)*mu1+theta*mu2)/6.0; + double hm = mu1*(beta/(theta+(1-theta)*beta)) *(1.0/6.0); + double am = mu1*((1-theta)+theta*beta) *(1.0/6.0); + std::cout << "q1 : " << q1 << std::endl; + std::cout << "q2 : " << q2 << std::endl; + std::cout << "q3 should be between q1 and q2" << std::endl; + std::cout << "hm : " << hm << std::endl; + std::cout << "am : " << am << std::endl; + if(mu_gamma > q2) { - std::cout<< "analytical_Example" << std::endl; - double q1 = ((mu1*mu2)/6.0)/(theta*mu1+ (1.0- theta)*mu2); - double q2 = ((1.0-theta)*mu1+theta*mu2)/6.0; - double hm = mu1*(beta/(theta+(1-theta)*beta)) *(1.0/6.0); - double am = mu1*((1-theta)+theta*beta) *(1.0/6.0); - std::cout << "q1 : " << q1 << std::endl; - std::cout << "q2 : " << q2 << std::endl; - std::cout << "q3 should be between q1 and q2" << std::endl; - std::cout << "hm : " << hm << std::endl; - std::cout << "am : " << am << std::endl; - if(mu_gamma > q2) - { - std::cout << "mu_gamma > q2!!.. (39) not satisfied" << std::endl; - } + std::cout << "mu_gamma > q2!!.. (39) not satisfied" << std::endl; } - if (imp == "parametrized_Laminate") + } + if (imp == "parametrized_Laminate") + { + std::cout<< "parametrized_Laminate" << std::endl; + double hm = mu1*(beta/(theta+(1-theta)*beta)); + double am = mu1*((1-theta)+theta*beta); + double q1 = (1.0/6.0)*hm; + double q2 = (1.0/6.0)*am; + std::cout << "q1 : " << q1 << std::endl; + std::cout << "q2 : " << q2 << std::endl; + std::cout << "q3 should be between q1 and q2" << std::endl; + std::cout << "hm : " << hm << std::endl; + std::cout << "am : " << am << std::endl; + if(mu_gamma > q2) { - std::cout<< "parametrized_Laminate" << std::endl; - double hm = mu1*(beta/(theta+(1-theta)*beta)); - double am = mu1*((1-theta)+theta*beta); - double q1 = (1.0/6.0)*hm; - double q2 = (1.0/6.0)*am; - std::cout << "q1 : " << q1 << std::endl; - std::cout << "q2 : " << q2 << std::endl; - std::cout << "q3 should be between q1 and q2" << std::endl; - std::cout << "hm : " << hm << std::endl; - std::cout << "am : " << am << std::endl; - if(mu_gamma > q2) - { - std::cout << "mu_gamma > q2!!.. (39) not satisfied" << std::endl; - } + std::cout << "mu_gamma > q2!!.. (39) not satisfied" << std::endl; } - - - - std::cout << "beta : " << beta << std::endl; - std::cout << "theta : " << theta << std::endl; - std::cout << "Gamma : " << gamma << std::endl; - std::cout << "mu_gamma:" << mu_gamma << std::endl; - - - // Output result - - std::string VTKOutputName = outputPath + "/Compute_MuGamma-Result"; - - VTKWriter<GridView> vtkWriter(gridView); -// vtkWriter.addVertexData(x, "solution"); //--- Anpassen für P2 - vtkWriter.addVertexData( - solutionFunction, - VTK::FieldInfo("solution", VTK::FieldInfo::Type::scalar, 1)); -// VTK::FieldInfo("solution", VTK::FieldInfo::Type::vector, dim)); - - vtkWriter.write( VTKOutputName ); - std::cout << "wrote data to file: " + VTKOutputName << std::endl; - - - - using VTKGridType = YaspGrid<dim, EquidistantOffsetCoordinates<double, dim> >; - VTKGridType grid_VTK({-1.0/2.0, -1.0/2.0},{1.0/2.0, 1.0/2.0},{64,64}); - using GridViewVTK = VTKGridType::LeafGridView; - const GridViewVTK gridView_VTK = grid_VTK.leafGridView(); - - auto scalarP0FeBasis = makeBasis(gridView_VTK,lagrange<0>()); - - std::vector<double> mu_CoeffP0; - Functions::interpolate(scalarP0FeBasis, mu_CoeffP0, muTerm); - auto mu_DGBF_P0 = Functions::makeDiscreteGlobalBasisFunction<double>(scalarP0FeBasis, mu_CoeffP0); - - VTKWriter<GridView> MaterialVtkWriter(gridView_VTK); - - MaterialVtkWriter.addCellData( - mu_DGBF_P0, - VTK::FieldInfo("mu_P0", VTK::FieldInfo::Type::scalar, 1)); - - MaterialVtkWriter.write(outputPath + "/MaterialFunctions" ); - std::cout << "wrote data to file:" + outputPath + "/MaterialFunctions" << std::endl; - - log.close(); - + } + + + + std::cout << "beta : " << beta << std::endl; + std::cout << "theta : " << theta << std::endl; + std::cout << "Gamma : " << gamma << std::endl; + std::cout << "mu_gamma:" << mu_gamma << std::endl; + + + // Output result + + std::string VTKOutputName = outputPath + "/Compute_MuGamma-Result"; + + VTKWriter<GridView> vtkWriter(gridView); + // vtkWriter.addVertexData(x, "solution"); //--- Anpassen für P2 + vtkWriter.addVertexData( + solutionFunction, + VTK::FieldInfo("solution", VTK::FieldInfo::Type::scalar, 1)); + // VTK::FieldInfo("solution", VTK::FieldInfo::Type::vector, dim)); + + vtkWriter.write( VTKOutputName ); + std::cout << "wrote data to file: " + VTKOutputName << std::endl; + + + + using VTKGridType = YaspGrid<dim, EquidistantOffsetCoordinates<double, dim> >; + VTKGridType grid_VTK({-1.0/2.0, -1.0/2.0},{1.0/2.0, 1.0/2.0},{64,64}); + using GridViewVTK = VTKGridType::LeafGridView; + const GridViewVTK gridView_VTK = grid_VTK.leafGridView(); + + auto scalarP0FeBasis = makeBasis(gridView_VTK,lagrange<0>()); + + std::vector<double> mu_CoeffP0; + Functions::interpolate(scalarP0FeBasis, mu_CoeffP0, muTerm); + auto mu_DGBF_P0 = Functions::makeDiscreteGlobalBasisFunction<double>(scalarP0FeBasis, mu_CoeffP0); + + VTKWriter<GridView> MaterialVtkWriter(gridView_VTK); + + MaterialVtkWriter.addCellData( + mu_DGBF_P0, + VTK::FieldInfo("mu_P0", VTK::FieldInfo::Type::scalar, 1)); + + MaterialVtkWriter.write(outputPath + "/MaterialFunctions" ); + std::cout << "wrote data to file:" + outputPath + "/MaterialFunctions" << std::endl; + + log.close(); + } diff --git a/src/macro-problem.cc b/src/macro-problem.cc index 6e10eac924f89d57400e74dfb2e9bc248626b687..7c5388ecbb81c7cc2c810e20ae4120ae0a070f06 100644 --- a/src/macro-problem.cc +++ b/src/macro-problem.cc @@ -1,10 +1,8 @@ #include <config.h> #include <signal.h> #include <memory> - #include <fenv.h> #include <array> - #include <math.h> // Includes for the ADOL-C automatic differentiation library @@ -13,7 +11,6 @@ #include <dune/fufem/utilities/adolcnamespaceinjections.hh> #include <dune/common/typetraits.hh> - #include <dune/common/bitsetvector.hh> #include <dune/common/parametertree.hh> #include <dune/common/parametertreeparser.hh> @@ -21,20 +18,22 @@ #include <dune/grid/uggrid.hh> #include <dune/grid/utility/structuredgridfactory.hh> +// #include <dune/alugrid/grid.hh> + #include <dune/grid/io/file/gmshreader.hh> #include <dune/grid/io/file/vtk.hh> #include <dune/functions/gridfunctions/discreteglobalbasisfunction.hh> #include <dune/functions/gridfunctions/composedgridfunction.hh> +#include <dune/functions/functionspacebases/cubichermitebasis.hh> #include <dune/functions/functionspacebases/lagrangebasis.hh> #include <dune/functions/functionspacebases/powerbasis.hh> #include <dune/functions/functionspacebases/interpolate.hh> -#include <dune/functions/functionspacebases/reducedcubichermitetrianglebasis.hh> +// #include <dune/functions/functionspacebases/reducedcubichermitetrianglebasis.hh> #include <dune/fufem/boundarypatch.hh> #include <dune/fufem/functiontools/boundarydofs.hh> #include <dune/fufem/dunepython.hh> - #include <dune/fufem/discretizationerror.hh> #include <dune/solvers/solvers/iterativesolver.hh> @@ -43,35 +42,42 @@ #include <dune/gfe/spaces/productmanifold.hh> #include <dune/gfe/spaces/realtuple.hh> #include <dune/gfe/spaces/rotation.hh> -#include <dune/gfe/localdiscretekirchhoffbendingisometry.hh> +// #include <dune/gfe/localdiscretekirchhoffbendingisometry.hh> +// #include <dune/gfe/assemblers/localgeodesicfeadolcstiffness.hh> +// #include <dune/gfe/assemblers/harmonicenergy.hh> +// #include <dune/gfe/assemblers/geodesicfeassembler.hh> +// #include <dune/gfe/bendingisometryhelper.hh> +// #include <dune/gfe/riemannianpnsolver.hh> +// #include <dune/gfe/embeddedglobalgfefunction.hh> +// #include <dune/gfe/discretekirchhoffbendingenergy.hh> +// #include <dune/gfe/energies/discretekirchhoffbendingenergyconforming.hh> +// #include <dune/gfe/energies/discretekirchhoffbendingenergyzienkiewicz.hh> +// #include <dune/gfe/energies/discretekirchhoffbendingenergyzienkiewiczprojected.hh> +#include <dune/gfe/functions/discretekirchhoffbendingisometry.hh> +#include <dune/gfe/functions/embeddedglobalgfefunction.hh> +#include <dune/gfe/functions/localprojectedfefunction.hh> #include <dune/gfe/assemblers/localgeodesicfeadolcstiffness.hh> -#include <dune/gfe/assemblers/harmonicenergy.hh> #include <dune/gfe/assemblers/geodesicfeassembler.hh> +#include <dune/gfe/assemblers/discretekirchhoffbendingenergy.hh> +#include <dune/gfe/assemblers/forceenergy.hh> +#include <dune/gfe/assemblers/sumenergy.hh> #include <dune/gfe/bendingisometryhelper.hh> #include <dune/gfe/riemannianpnsolver.hh> -#include <dune/gfe/embeddedglobalgfefunction.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergy.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergyconforming.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergyzienkiewicz.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergyzienkiewiczprojected.hh> +#include <dune/gfe/riemanniantrsolver.hh> +#include <dune/microstructure/bendingisometryaddons.hh> #include <dune/microstructure/energies/discretekirchhoffbendingenergyprestrained.hh> #include <dune/microstructure/microproblem.hh> -#include <dune/gfe/spaces/stiefelmanifold.hh> +// #include <dune/gfe/spaces/stiefelmanifold.hh> // #include <dune/gfe/spaces/stiefelmatrix.hh> #include <dune/gmsh4/gmsh4reader.hh> #include <dune/gmsh4/gridcreators/lagrangegridcreator.hh> -//TEST -#include <dune/gfe/riemanniantrsolver.hh> - - -//TEST dune-vtk // #include <dune/vtk/function.hh> -#include <dune/vtk/vtkwriter.hh> // #include <dune/vtk/vtkwriterbase.hh> +#include <dune/vtk/vtkwriter.hh> #include <dune/vtk/writers/unstructuredgridwriter.hh> #include <dune/vtk/datacollectors/continuousdatacollector.hh> #include <dune/vtk/datacollectors/discontinuousdatacollector.hh> @@ -84,110 +90,16 @@ const int dim = 2; using namespace Dune; - // template <class T> - // constexpr std::string_view type_name() - // { - // using namespace std; - // #ifdef __clang__ - // string_view p = __PRETTY_FUNCTION__; - // return string_view(p.data() + 34, p.size() - 34 - 1); - // #elif defined(__GNUC__) - // string_view p = __PRETTY_FUNCTION__; - // # if __cplusplus < 201402 - // return string_view(p.data() + 36, p.size() - 36 - 1); - // # else - // return string_view(p.data() + 49, p.find(';', 49) - 49); - // # endif - // #elif defined(_MSC_VER) - // string_view p = __FUNCSIG__; - // return string_view(p.data() + 84, p.size() - 84 - 7); - // #endif - // } - -// struct Difference2 -// { - -// double operator()(Dune::FieldMatrix<double, 3, 2> x, Dune::FieldMatrix<double, 2, 2> I) const -// { -// return ((x.transposed()*x)-I).frobenius_norm(); -// } -// }; - - -// // Wrapper for global-coordinate functions F -// template <class GridView, class F> -// class GlobalKirchhoffFunction -// { -// using Element = typename GridView::template Codim<0>::Entity; -// using Geometry = typename Element::Geometry; - -// public: -// GlobalKirchhoffFunction (GridView const& gridView, F const& f) -// : gridView_(gridView) -// , f_(f) -// {} - -// void bind(Element const& element) { -// geometry_.emplace(element.geometry()); -// f_.bind(element); // we need to bind kirchhoff function to the element -// } -// void unbind() { geometry_.reset(); } - -// auto operator() (typename Geometry::LocalCoordinate const& local) const -// { -// assert(!!geometry_); -// return f_(geometry_->global(local)); -// } - -// private: -// GridView gridView_; -// F f_; -// std::optional<Geometry> geometry_; -// }; - -// // Wrapper for global-coordinate functions F -// template <class GridView, class F> -// class GlobalFunction -// { -// using Element = typename GridView::template Codim<0>::Entity; -// using Geometry = typename Element::Geometry; - -// public: -// GlobalFunction (GridView const& gridView, F const& f) -// : gridView_(gridView) -// , f_(f) -// {} - -// void bind(Element const& element) { geometry_.emplace(element.geometry()); } -// void unbind() { geometry_.reset(); } - -// auto operator() (typename Geometry::LocalCoordinate const& local) const -// { -// assert(!!geometry_); -// return f_(geometry_->global(local)); -// } - -// private: -// GridView gridView_; -// F f_; -// std::optional<Geometry> geometry_; -// }; - - - int main(int argc, char *argv[]) { /** - * @brief We use this to catch a 'Floating point exception' caused by the 'innerSolver' + * @brief We use this to catch a 'Floating point exception' caused by the 'innerSolver' * in RiemannianProximalNewton */ // std::shared_ptr<void(int)> handler( // signal(SIGFPE, [](int signum) {throw std::logic_error("FPE"); }), // [](__sighandler_t f) { signal(SIGFPE, f); }); - - - // feenableexcept(FE_INVALID); MPIHelper::instance(argc, argv); @@ -200,9 +112,9 @@ int main(int argc, char *argv[]) Python::start(); auto pyMain = Python::main(); pyMain.runStream() - << std::endl << "import math" - << std::endl << "import sys" - << std::endl << "sys.path.append('" << argv[1] << "')" << std::endl; + << std::endl << "import math" + << std::endl << "import sys" + << std::endl << "sys.path.append('" << argv[1] << "')" << std::endl; auto pyModule = pyMain.import(argv[2]); @@ -232,11 +144,19 @@ int main(int argc, char *argv[]) std::cout << "Executable: bending-isometries, with parameters:" << std::endl; parameterSet.report(); + bool PRINT_DEBUG = parameterSet.get<bool>("print_debug", 0); + ///////////////////////////////////////// // Create the grid ///////////////////////////////////////// + // Structured UG-grid + std::cout << "Using UGGrid module" << std::endl; using GridType = UGGrid<dim>; + // ALUGrid with structuredGridFactory + // std::cout << "Using ALUGRID module" << std::endl; + // typedef Dune::ALUGrid<dim, dim, Dune::simplex, Dune::conforming> GridType; + std::shared_ptr<GridType> grid; FieldVector<double,dim> lower(0), upper(1); std::array<unsigned int,dim> elementsArray; @@ -276,138 +196,87 @@ int main(int argc, char *argv[]) /////////////////////////////////////////////////////// // General coefficient vector of a Discrete Kirchhoff deformation function - using VectorSpaceCoefficients = BlockVector<FieldVector<double,3>>; + using VectorSpaceCoefficients = BlockVector<FieldVector<double,3> >; - /** - * @brief Coefficient vector of a Discrete Kirchhoff deformation function that is constrained to be an isometry. - * we need both 'double' and 'adouble' versions. - */ - using Coefficient = GFE::ProductManifold<RealTuple<double,3>, Rotation<double,3> >; + // Coefficient vector of a Discrete Kirchhoff deformation function that is constrained to be an isometry. + // we need both 'double' and 'adouble' versions. + using Coefficient = GFE::ProductManifold<GFE::RealTuple<double,3>, GFE::Rotation<double,3> >; using IsometryCoefficients = std::vector<Coefficient>; using ACoefficient = typename Coefficient::template rebind<adouble>::other; using AIsometryCoefficients = std::vector<ACoefficient>; using namespace Functions::BasisFactory; auto deformationBasis = makeBasis(gridView, - power<3>(reducedCubicHermiteTriangle(), - blockedInterleaved())); + power<3>(reducedCubicHermite(), + blockedInterleaved())); using DeformationBasis = decltype(deformationBasis); - /** - * @brief The next basis is used to assign (nonlinear) degrees of freedom to the grid vertices. - * The actual basis function values are never used. - */ + // The next basis is used to assign (nonlinear) degrees of freedom to the grid vertices. + // The actual basis function values are never used. using CoefficientBasis = Functions::LagrangeBasis<GridView, 1>; CoefficientBasis coefficientBasis(gridView); // A basis for the tangent space (used to set DirichletNodes) auto tangentBasis = makeBasis(gridView, power<Coefficient::TangentVector::dimension>( - lagrange<1>(), - blockedInterleaved())); - - - //TEST - // auto tangentBasis = makeBasis(gridView, - // power<Coefficient::TangentVector::dimension>( //dim = 6 - // lagrange<1>(), - // flatInterleaved())); + lagrange<1>(), + blockedInterleaved())); std::cout << "Coefficient::TangentVector::dimension: " << Coefficient::TangentVector::dimension<< std::endl; - // Print some information on the grid and degrees of freedom. + // Print some information on the grid and degrees of freedom. std::cout << "Number of Elements in the grid: " << gridView.size(0)<< std::endl; std::cout << "Number of Nodes in the grid: " << gridView.size(dim)<< std::endl; std::cout << "deformationBasis.size(): " << deformationBasis.size() << std::endl; std::cout << "deformationBasis.dimension(): " << deformationBasis.dimension() << std::endl; std::cout << "Degrees of Freedom: " << deformationBasis.dimension() << std::endl; - bool PRINT_DEBUG = parameterSet.get<bool>("print_debug", 0); /////////////////////////////////////////// - // Read Dirichlet values + // Read Dirichlet values /////////////////////////////////////////// - BitSetVector<1> dirichletVertices(gridView.size(dim), false); + // BitSetVector<1> dirichletVertices(gridView.size(dim), false); const typename GridView::IndexSet &indexSet = gridView.indexSet(); - - BitSetVector<Coefficient::TangentVector::dimension> dirichletNodes(tangentBasis.size(), false); //tangentBasis.size()=coefficientBasis.size() - /** - * @brief Make Python function that computes which vertices are on the Dirichlet boundary, - * based on the vertex positions. - */ + // Make Python function that computes which vertices are on the Dirichlet boundary, + // based on the vertex positions. auto dirichletIndicatorFunction = Python::make_function<bool>(pyModule.get("dirichlet_indicator")); - /** - * @brief If we want to clamp DOFs inside the domain, we connot use 'BoundaryPatch' - * and 'constructBoundaryDofs'. This is a workaround for now. - * - * - */ + // If we want to clamp DOFs inside the domain, we cannot use 'BoundaryPatch' + // and 'constructBoundaryDofs'. This is a workaround for now. for (auto &&vertex : vertices(gridView)) { - dirichletVertices[indexSet.index(vertex)] = dirichletIndicatorFunction(vertex.geometry().corner(0)); + // dirichletVertices[indexSet.index(vertex)] = dirichletIndicatorFunction(vertex.geometry().corner(0)); - if(dirichletIndicatorFunction(vertex.geometry().corner(0))) - { - dirichletNodes[indexSet.index(vertex)] = true; - if(PRINT_DEBUG) - std::cout << "Dirichlet Vertex with coordinates:" << vertex.geometry().corner(0) << std::endl; - } - - } - - // std::cout << "tangentBasis.size():" << tangentBasis.size() << std::endl; - // std::cout << "coefficientBasis.size():" << coefficientBasis.size() << std::endl; + if(dirichletIndicatorFunction(vertex.geometry().corner(0))) + { + dirichletNodes[indexSet.index(vertex)] = true; + if(PRINT_DEBUG) + std::cout << "Dirichlet Vertex with coordinates:" << vertex.geometry().corner(0) << std::endl; + } - //deprecated: + } + // deprecated: // BoundaryPatch<GridView> dirichletBoundary(gridView, dirichletVertices); // constructBoundaryDofs(dirichletBoundary, tangentBasis, dirichletNodes); - - - - - // -------------------------------------- - - - - - // markBoundaryPatchDofs(dirichletBoundary, tangentBasis, dirichletNodes); - - //TEST with blocksize? - // constructBoundaryDofs<GridView,decltype(tangentBasis),Coefficient::TangentVector::dimension>(dirichletBoundary, tangentBasis, dirichletNodes); - // constructBoundaryDofs<GridView,decltype(tangentBasis),Coefficient::TangentVector::dimension>(dirichletBoundary, tangentBasis, dirichletNodes); - - - - //TEST: print dirichletNodes - // std::cout << "print dirichletVertices:" << std::endl; - // std::cout << dirichletVertices << std::endl; - - // std::cout << "print dirichletNodes:" << std::endl; - // std::cout << dirichletNodes << std::endl; - - /////////////////////////////////////////// // Get initial Iterate /////////////////////////////////////////// auto pythonInitialIterate = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("f"), pyModule.get("df")); - VectorSpaceCoefficients x(deformationBasis.size()); - interpolate(deformationBasis, x, pythonInitialIterate); - + interpolate(deformationBasis, x, pythonInitialIterate); - /** + /** * @brief TEST: Add boundary-value function - * + * */ // auto boundaryValueFunction = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,3>)>(pyModule.get("boundaryValues"), pyModule.get("boundaryValuesDerivative")); // auto boundaryValueFunction = Python::make_function<FieldVector<double,3>>(pyModule.get("boundaryValues")); @@ -416,57 +285,67 @@ int main(int argc, char *argv[]) // { // if(dirichletIndicatorFunction(vertex.geometry().corner(0))) // { - // isometryCoefficients[indexSet.index(vertex)][_0] = (RealTuple<double, 3>)boundaryValueFunction(vertex.geometry().corner(0)); + // isometryCoefficients[indexSet.index(vertex)][_0] = (GFE::RealTuple<double, 3>)boundaryValueFunction(vertex.geometry().corner(0)); // // isometryCoefficients[indexSet.index(vertex)][_1].set(derivative(boundaryValueFunction)(vertex.geometry().corner(0))); - // isometryCoefficients_adouble[indexSet.index(vertex)][_0] = (RealTuple<adouble, 3>)boundaryValueFunction(vertex.geometry().corner(0)); + // isometryCoefficients_adouble[indexSet.index(vertex)][_0] = (GFE::RealTuple<adouble, 3>)boundaryValueFunction(vertex.geometry().corner(0)); // // isometryCoefficients_adouble[indexSet.index(vertex)][_1].set(derivative(boundaryValueFunction)(vertex.geometry().corner(0))); // } // } - - /** - * @brief We need to setup LocalDiscreteKirchhoffBendingIsometry with a coefficient - * vector of ctype 'adouble' while the solver gets a coefficient vector - * of ctype 'double'. - */ + + // We need to setup DiscreteKirchhoffBendingIsometry with a coefficient + // vector of ctype 'adouble' while the solver gets a coefficient vector + // of ctype 'double'. IsometryCoefficients isometryCoefficients(coefficientBasis.size()); AIsometryCoefficients isometryCoefficients_adouble(coefficientBasis.size()); + using namespace Dune::GFE::Impl; - /** - * @brief Copy the current iterate into a data type that encapsulates the isometry constraint - * i. e. convert coefficient data structure from 'VectorSpaceCoefficients' to 'IsometryCoefficients' - */ + // Copy the current iterate into a data type that encapsulates the isometry constraint + // i.e. convert coefficient data structure from 'VectorSpaceCoefficients' to 'IsometryCoefficients' vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x,isometryCoefficients); vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x,isometryCoefficients_adouble); - - /** - * @brief TEST: conversion of coefficient vectors (back & forth) - */ - coefficientConversionTest<VectorSpaceCoefficients, DeformationBasis, CoefficientBasis, IsometryCoefficients>(x, deformationBasis, coefficientBasis); + // Debug: conversion of coefficient vectors (back & forth) + // coefficientConversionTest<VectorSpaceCoefficients, DeformationBasis, CoefficientBasis, IsometryCoefficients>(x, deformationBasis, coefficientBasis); - - - using LocalDKFunction = GFE::LocalDiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, AIsometryCoefficients>; + // Create a DiscreteKirchhoffBendingIsometry. + // This serves as the deformation function. + using LocalDKFunction = Dune::GFE::DiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, AIsometryCoefficients>; LocalDKFunction localDKFunction(deformationBasis, coefficientBasis, isometryCoefficients_adouble); - /** - * @brief TEST: check isometry condition on the nodes of the grid for initial deformation. - */ - // auto initialDeformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, x); - // nodewiseIsometryTest(initialDeformationFunction); + // Debug: check isometry condition on the nodes of the grid for initial deformation. nodewiseIsometryTest(localDKFunction, gridView); + // auto initialDeformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, x); + // nodewiseIsometryTest(initialDeformationFunction); - /** - * @brief Read force term. - */ - auto pythonForce = Python::make_function<FieldVector<double,3>>(pyModule.get("force")); + // Read the force term. + auto pythonForce = Python::make_function<FieldVector<double,3> >(pyModule.get("force")); auto forceGVF = Dune::Functions::makeGridViewFunction(pythonForce, gridView); auto localForce = localFunction(forceGVF); + + //*** NEW UPDATED VERSION **/ + + // Setup nonconforming energy and assembler - only option for this minimal example. + // auto forceEnergy = std::make_shared<GFE::ForceEnergy<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient> >(localDKFunction, localForce); + // auto localEnergy_nonconforming = std::make_shared<GFE::DiscreteKirchhoffBendingEnergy<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient> >(localDKFunction); + + // auto sumEnergy = std::make_shared<GFE::SumEnergy<CoefficientBasis, GFE::RealTuple<adouble,3>, GFE::Rotation<adouble,3> > >(); + // sumEnergy->addLocalEnergy(localEnergy_nonconforming); + // sumEnergy->addLocalEnergy(forceEnergy); + + // auto localGFEADOLCStiffness_nonconforming= std::make_shared<Dune::GFE::LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> >(sumEnergy); + // std::shared_ptr<Dune::GFE::GeodesicFEAssembler<CoefficientBasis, Coefficient> > assembler_prestrain; + // assembler_prestrain = std::make_shared<Dune::GFE::GeodesicFEAssembler<CoefficientBasis, Coefficient> >(coefficientBasis, localGFEADOLCStiffness_nonconforming); + + // -------------------------------------------- + + + + // /** // * @brief Read effective prestrain Tensor // */ @@ -477,7 +356,7 @@ int main(int argc, char *argv[]) // /** // * @brief Get effective quadratic form Qhom - // * + // * // * input-vector: [q_1,q_2,q_3,q_12,q_13,q_23] // * is assembled into a matrix where the off-diagonal entries are divided by 2 (compare with definition in the paper) // * ( q_1 , 0.5*q_12 , 0.5*q_13 ) @@ -485,7 +364,7 @@ int main(int argc, char *argv[]) // * ( 0.5*q_13 , 0.5*q_23 , q_3 ) // */ // Dune::FieldVector<adouble,6> Qhomvec = parameterSet.get<Dune::FieldVector<adouble,6>>("effectiveQuadraticForm", {1.0, 1.0, 1.0, 0.0, 0.0, 0.0}); - // Dune::FieldMatrix<adouble,3,3> Qhom = {{(adouble)Qhomvec[0], (adouble)0.5*Qhomvec[3], (adouble)0.5*Qhomvec[4]}, + // Dune::FieldMatrix<adouble,3,3> Qhom = {{(adouble)Qhomvec[0], (adouble)0.5*Qhomvec[3], (adouble)0.5*Qhomvec[4]}, // {(adouble)0.5*Qhomvec[3], (adouble)Qhomvec[1], (adouble)0.5*Qhomvec[5]}, // {(adouble)0.5*Qhomvec[4], (adouble)0.5*Qhomvec[5], (adouble)Qhomvec[2]}}; // printmatrix(std::cout, Qhom, "effective quadratic form (Qhom): ", "--"); @@ -507,101 +386,89 @@ int main(int argc, char *argv[]) * @brief Setup energy featuring prestrain */ // auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce, Qhom, effectivePrestrain, parameterSet); - auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce, parameterSet, pyModule); + + + // LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_conforming(localEnergy_conforming.get()); // LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_nonconforming(localEnergy_nonconforming.get()); - LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_prestrain(localEnergy_prestrain.get()); + // LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_prestrain(localEnergy_prestrain.get()); // GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_conforming(coefficientBasis, localGFEADOLCStiffness_conforming); // GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_nonconforming(coefficientBasis, localGFEADOLCStiffness_nonconforming); - GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_prestrain(coefficientBasis, localGFEADOLCStiffness_prestrain); + // GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_prestrain(coefficientBasis, localGFEADOLCStiffness_prestrain); + + + + + + + // // Setup prestrained bending energy. + // auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient> >(localDKFunction, localForce, parameterSet, pyModule); + // auto localGFEADOLCStiffness_prestrain = std::make_shared<Dune::GFE::LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> >(localEnergy_prestrain); + // std::shared_ptr<Dune::GFE::GeodesicFEAssembler<CoefficientBasis, Coefficient> > assembler_prestrain; + // assembler_prestrain = std::make_shared<Dune::GFE::GeodesicFEAssembler<CoefficientBasis, Coefficient> >(coefficientBasis, localGFEADOLCStiffness_prestrain); + + + // Setup nonconforming energy and assembler - only option for this minimal example. + // The energy consists of two parts: 1. A bending energy contribution and 2. Contribution from a force term. + auto sumEnergy = std::make_shared<GFE::SumEnergy<CoefficientBasis, GFE::RealTuple<adouble,3>, GFE::Rotation<adouble,3> > >(); + + // Setup prestrained bending energy. + auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, ACoefficient> >(localDKFunction, parameterSet, pyModule); + + // Setup force energy. + auto forceEnergy = std::make_shared<GFE::ForceEnergy<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient> >(localDKFunction, localForce); + sumEnergy->addLocalEnergy(localEnergy_prestrain); + sumEnergy->addLocalEnergy(forceEnergy); + + // Setup the assembler. + auto localGFEADOLCStiffness_prestrain = std::make_shared<Dune::GFE::LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> >(sumEnergy); + std::shared_ptr<Dune::GFE::GeodesicFEAssembler<CoefficientBasis, Coefficient> > assembler_prestrain; + assembler_prestrain = std::make_shared<Dune::GFE::GeodesicFEAssembler<CoefficientBasis, Coefficient> >(coefficientBasis, localGFEADOLCStiffness_prestrain); /** - * @brief Create a solver: - * - Riemannian Newton with Hessian modification - * - Riemannian Trust-region + * @brief Create a solver: + * - Adaptively Regularized Riemannian Newton (ARRN) [default] + * - Riemannian Trust-region (RTR) */ - RiemannianProximalNewtonSolver<CoefficientBasis, Coefficient> RNHMsolver; - RiemannianTrustRegionSolver<CoefficientBasis, Coefficient> RTRsolver; + Dune::GFE::RiemannianProximalNewtonSolver<CoefficientBasis, Coefficient> ARRNsolver; + Dune::GFE::RiemannianTrustRegionSolver<CoefficientBasis, Coefficient> RTRsolver; - std::string Solver_name = parameterSet.get<std::string>("Solver", "RNHM"); + std::string Solver_name = parameterSet.get<std::string>("Solver", "ARRN"); double numerical_energy; //final discrete energy - if(Solver_name == "RNHM") + if(Solver_name == "ARRN") { - - RNHMsolver.setup(*grid, - &assembler_prestrain, - isometryCoefficients, - dirichletNodes, - parameterSet); - - RNHMsolver.solve(); - isometryCoefficients = RNHMsolver.getSol(); - numerical_energy = RNHMsolver.getStatistics().finalEnergy; + std::cout << "Using Adaptively Regularized Riemannian Newton (ARRN) method for energy minimization." << std::endl; + ARRNsolver.setup(*grid, + &(*assembler_prestrain), + isometryCoefficients, + dirichletNodes, + parameterSet); + + ARRNsolver.solve(); + isometryCoefficients = ARRNsolver.getSol(); + numerical_energy = ARRNsolver.getStatistics().finalEnergy; } else if (Solver_name =="RiemannianTR") { std::cout << "Using Riemannian Trust-region method for energy minimization." << std::endl; RTRsolver.setup(*grid, - &assembler_prestrain, - isometryCoefficients, - dirichletNodes, - parameterSet); + &(*assembler_prestrain), + isometryCoefficients, + dirichletNodes, + parameterSet); RTRsolver.solve(); isometryCoefficients = RTRsolver.getSol(); numerical_energy = RTRsolver.getStatistics().finalEnergy; - } else - DUNE_THROW(Dune::Exception, "Unknown Solver type for bending isometries."); - - - - // TEST - // RiemannianTrustRegionSolver<CoefficientBasis, Coefficient> solver; - // solver.setup(*grid, - // &assembler_prestrain, - // isometryCoefficients, - // dirichletNodes, - // parameterSet); - // RNHMsolver.setup(*grid, - // &assembler_prestrain, - // isometryCoefficients, - // dirichletNodes, - // parameterSet); - - - -//deprecated: - // if (parameterSet.get<bool>("prestrainFlag", 0)) - // solver.setup(*grid, - // &assembler_prestrain, - // isometryCoefficients, - // dirichletNodes, - // parameterSet); - // else if (parameterSet.get<bool>("conforming_DiscreteJacobian", 1)) - // solver.setup(*grid, - // &assembler_conforming, - // isometryCoefficients, - // dirichletNodes, - // parameterSet); - // else - // solver.setup(*grid, - // &assembler_nonconforming, - // isometryCoefficients, - // dirichletNodes, - // parameterSet); - - /////////////////////////////////////////////////////// - // Solve! - /////////////////////////////////////////////////////// - // solver.setInitialIterate(isometryCoefficients); - + } else + DUNE_THROW(Dune::Exception, "Unknown Solver type for bending isometries."); // Convert coefficient data structure from 'IsometryCoefficients' to 'VectorSpaceCoefficients' @@ -612,19 +479,19 @@ int main(int argc, char *argv[]) // Output result //////////////////////////////// std::string baseNameDefault = "bending-isometries-"; - std::string baseName = parameterSet.get("baseName", baseNameDefault); + std::string baseName = parameterSet.get("baseName", baseNameDefault); std::string resultFileName = parameterSet.get("resultPath", "") - + "/" + baseName - + "_level" + std::to_string(parameterSet.get<int>("macroGridLevel")); + + "/" + baseName + + "_level" + std::to_string(parameterSet.get<int>("macroGridLevel")); if (parameterSet.get<bool>("conforming_DiscreteJacobian", 1)) resultFileName = resultFileName + "_C"; - else + else resultFileName = resultFileName + "_NC"; // Create a deformation function but this time with double-types. - using LocalDKFunctionD = GFE::LocalDiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, IsometryCoefficients>; + using LocalDKFunctionD = Dune::GFE::DiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, IsometryCoefficients>; LocalDKFunctionD localDKFunctionDouble(deformationBasis, coefficientBasis, isometryCoefficients); @@ -632,8 +499,7 @@ int main(int argc, char *argv[]) if (parameterSet.get<bool>("writeVTK", 1)) { - std::cout << "write VTK..." << std::endl; - std::cout << "to Filename: " << resultFileName << std::endl; + std::cout << "write VTK to Filename: " << resultFileName << std::endl; /** * @brief Compute the displacement from the deformation. @@ -643,27 +509,23 @@ int main(int argc, char *argv[]) IdentityGridEmbedding<double> identityGridEmbedding; interpolate(deformationBasis, identity, identityGridEmbedding); - // auto identity_tmp = identity; - // Compute the displacement auto displacement = x_out; displacement -= identity; // std::cout << "displacement.size():" << displacement.size() << std::endl; - auto deformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, x_out); - auto displacementFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, displacement); + auto deformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(deformationBasis, x_out); + auto displacementFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(deformationBasis, displacement); - /** - * @brief We need to subsample, because VTK cannot natively display real third-order functions - */ - int subsamplingRefinement = parameterSet.get<int>("subsamplingRefinement", 2); - SubsamplingVTKWriter<GridView> vtkWriter(gridView, Dune::refinementLevels(subsamplingRefinement)); - // SubsamplingVTKWriter<GridView> vtkWriter(gridView, Dune::refinementLevels(2)); + + // We need to subsample, because dune-grid-VTK cannot natively display real third-order functions + // int subsamplingRefinement = parameterSet.get<int>("subsamplingRefinement", 2); + // SubsamplingVTKWriter<GridView> vtkWriter(gridView, Dune::refinementLevels(subsamplingRefinement)); // Use VTK writer from dune-vtk - // Setup a DataCollector of order 4. - Dune::Vtk::LagrangeDataCollector<GridView, 4> lagrangeDataCollector(gridView); + // Setup a DataCollector of order 3. + Dune::Vtk::LagrangeDataCollector<GridView, 3> lagrangeDataCollector(gridView); Dune::Vtk::DiscontinuousDataCollector<GridView> discontinuousDataCollector(gridView); Dune::Vtk::UnstructuredGridWriter duneVTKwriter(lagrangeDataCollector, Dune::Vtk::FormatTypes::ASCII, Vtk::DataTypes::FLOAT32); // Dune::Vtk::UnstructuredGridWriter writer(discontinuousDataCollector, Dune::Vtk::FormatTypes::ASCII, Vtk::DataTypes::FLOAT32); @@ -671,19 +533,12 @@ int main(int argc, char *argv[]) /** * @brief Basis used to represent normal vector fields (deprecated) - * + * */ - // auto normalBasis = makeBasis(gridView, - // power<3>( - // lagrange<1>(), - // flatLexicographic())); - // Write discrete displacement duneVTKwriter.addPointData(displacementFunction, Dune::Vtk::FieldInfo{"Displacement dune-VTK",3, Vtk::RangeTypes::VECTOR}); - vtkWriter.addVertexData(displacementFunction, VTK::FieldInfo("Displacement", VTK::FieldInfo::Type::vector, 3)); - - + // vtkWriter.addVertexData(displacementFunction, VTK::FieldInfo("Displacement", VTK::FieldInfo::Type::vector, 3)); // ComposedGridFunction - approach: auto deformationGradientFunction = derivative(deformationFunction); @@ -694,14 +549,13 @@ int main(int argc, char *argv[]) FieldMatrix<double,2,2> I = ScaledIdentityMatrix<double,2>(1); auto isometryErrorFunction =[&](auto M)-> double { - return ((M.transposed()*M) - I).frobenius_norm(); - }; + return ((M.transposed()*M) - I).frobenius_norm(); + }; auto isometryErrorGridFunction = makeComposedGridFunction(isometryErrorFunction,deformationGradientFunction); - duneVTKwriter.addPointData(isometryErrorGridFunction, "IsometryErrorFunction"); - vtkWriter.addVertexData(isometryErrorGridFunction , VTK::FieldInfo("IsometryErrorFunction", VTK::FieldInfo::Type::scalar, 1)); - + // vtkWriter.addVertexData(isometryErrorGridFunction , VTK::FieldInfo("IsometryErrorFunction", VTK::FieldInfo::Type::scalar, 1)); + @@ -713,7 +567,7 @@ int main(int argc, char *argv[]) { // auto pythonAnalyticalSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("u"), pyModule.get("du")); auto pythonAnalyticalSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("displacement"), pyModule.get("displacementGradient")); - vtkWriter.addVertexData((pythonAnalyticalSolution), VTK::FieldInfo("Displacement_analytical", VTK::FieldInfo::Type::vector, 3)); + // vtkWriter.addVertexData((pythonAnalyticalSolution), VTK::FieldInfo("Displacement_analytical", VTK::FieldInfo::Type::vector, 3)); //dune-vtk: auto pythonAnalyticalSolutionGVF = Dune::Functions::makeAnalyticGridViewFunction(pythonAnalyticalSolution ,gridView); @@ -721,163 +575,108 @@ int main(int argc, char *argv[]) - + /** - * @brief Get the normal vector field of the surface parametrized + * @brief Get the normal vector field of the surface parametrized * by the analytical solution. * - We represent the normal vector in a first order Lagrange-Power basis ('normalBasis'). */ if (parameterSet.get<bool>("vtkWrite_analyticalSurfaceNormal", 0)) { - // Get the surface normal function. - auto pythonSurfaceNormal = Python::make_function<FieldVector<double,3>>(pyModule.get("surfaceNormal")); - vtkWriter.addVertexData(pythonSurfaceNormal, VTK::FieldInfo("SurfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); - + // Get the surface normal function. + auto pythonSurfaceNormal = Python::make_function<FieldVector<double,3> >(pyModule.get("surfaceNormal")); + // vtkWriter.addVertexData(pythonSurfaceNormal, VTK::FieldInfo("SurfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); - //dune-vtk - auto pythonSurfaceNormalGVF = Dune::Functions::makeAnalyticGridViewFunction(pythonSurfaceNormal ,gridView); - duneVTKwriter.addPointData(pythonSurfaceNormalGVF, Dune::Vtk::FieldInfo{"SurfaceNormal_analytical dune-VTK",3, Dune::Vtk::RangeTypes::VECTOR}); + //dune-vtk + auto pythonSurfaceNormalGVF = Dune::Functions::makeAnalyticGridViewFunction(pythonSurfaceNormal ,gridView); + duneVTKwriter.addPointData(pythonSurfaceNormalGVF, Dune::Vtk::FieldInfo{"SurfaceNormal_analytical dune-VTK",3, Dune::Vtk::RangeTypes::VECTOR}); } } - //------------------------------------------------------------------------------------- + //------------------------------------------------------------------------------------- // /** - // * @brief: Compute the discrete normal vector of the surface parametrized + // * @brief: Compute the discrete normal vector of the surface parametrized // * by the discrete solution. // */ auto discreteSurfaceNormalField = [](auto M) -> Dune::FieldVector<double,3> { - return {M[1][0]*M[2][1] - M[1][1]*M[2][0], - M[2][0]*M[0][1] - M[0][0]*M[2][1], - M[0][0]*M[1][1] - M[1][0]*M[0][1]}; - }; + return {M[1][0]*M[2][1] - M[1][1]*M[2][0], + M[2][0]*M[0][1] - M[0][0]*M[2][1], + M[0][0]*M[1][1] - M[1][0]*M[0][1]}; + }; auto discreteSurfaceNormalFieldGVF = makeComposedGridFunction(discreteSurfaceNormalField ,deformationGradientFunction); - - vtkWriter.addVertexData(discreteSurfaceNormalFieldGVF, VTK::FieldInfo("SurfaceNormalDiscrete", VTK::FieldInfo::Type::vector, 3)); + // vtkWriter.addVertexData(discreteSurfaceNormalFieldGVF, VTK::FieldInfo("SurfaceNormalDiscrete", VTK::FieldInfo::Type::vector, 3)); duneVTKwriter.addPointData(discreteSurfaceNormalFieldGVF, Dune::Vtk::FieldInfo{"SurfaceNormalDiscrete",3, Dune::Vtk::RangeTypes::VECTOR}); - - /** - * @brief deprecated version using interpolation: - * - */ - // auto surfaceNormalDiscreteCoefficients = computeDiscreteSurfaceNormal(localDKFunctionDouble, normalBasis); (deprecated) - // - - // // Create DiscreteGlobalBasisFunctions. - // auto surfaceNormalDiscrete = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(normalBasis, surfaceNormalDiscreteCoefficients); - - // vtkWriter.addVertexData(surfaceNormalDiscrete , VTK::FieldInfo("surfaceNormal_discrete", VTK::FieldInfo::Type::vector, 3)); - // vtkWriter.write(resultFileName); - - - - - // duneVTKwriter.addPointData(surfaceNormalDiscrete, Dune::Vtk::FieldInfo{"surfaceNormal_discrete dune-VTK",3, Vtk::RangeTypes::VECTOR}); - - // std::cout << "written discrete Surface Normal Old" << std::endl; //------------------------------------------------------------------------------------- - vtkWriter.write(resultFileName); - duneVTKwriter.write(resultFileName + "_DuneVTK"); + // vtkWriter.write(resultFileName); + // duneVTKwriter.write(resultFileName + "_DuneVTK"); + duneVTKwriter.write(resultFileName); } - /** - * @brief Measure errors. - * 1. Compute the Isometry-Error - * 2. Compute the L2-Error and H1-SemiError as well as the energy difference - * between the discrete deformation u_h and the analytical deformation u . - */ - if (parameterSet.get<bool>("measure_isometryError", 0)) - auto isometry_errors = isometryError(localDKFunctionDouble, gridView); - if (parameterSet.get<bool>("measure_analyticalError", 0)) - { - auto discretization_errors = measureAnalyticalError(localDKFunctionDouble,gridView,pyModule); - - - /** - * @brief Check Quantities - * - */ - // L2 - Discretization error - // if(discretization_errors[0] > 1.0) - // { - // std::cerr << std::setprecision(9); - // std::cerr << "L2-error is to large! " << std::endl; - // return 1; - // } - // // H1(semi) - Discretization error - // if(discretization_errors[1] > 1.0) - // { - // std::cerr << std::setprecision(9); - // std::cerr << "H1-error is to large! " << std::endl; - // return 1; - // } - } - + /** + * @brief Measure errors. + * 1. Compute the Isometry-Error + * 2. Compute the L2-Error and H1-SemiError as well as the energy difference + * between the discrete deformation u_h and the analytical deformation u . + */ + if (parameterSet.get<bool>("measure_isometryError", 0)) + auto isometry_errors = isometryError(localDKFunctionDouble, gridView); + if (parameterSet.get<bool>("measure_analyticalError", 0)) + { + auto discretization_errors = measureAnalyticalError(localDKFunctionDouble,gridView,pyModule); + + std::cout << "L2-Error: " << discretization_errors[0] << std::endl; + std::cout << "H1-Error: " << discretization_errors[1] << std::endl; /** - * @brief Write Energy values. - * + * @brief Check Quantities + * */ - - std::cout << "(Final) Energy of discrete solution: " << numerical_energy<< std::endl; - if (parameterSet.get<bool>("compare_EnergyValues", 0)) - { - auto analytical_energy = parameterSet.get<double>("analytical_energy"); - auto energy_difference = analytical_energy - numerical_energy; - std::cout << "Analytical energy: " << analytical_energy<< std::endl; - std::cout << "Energy difference: " << energy_difference << std::endl; - - // if(energy_difference > 1.0) - // { - // std::cerr << std::setprecision(9); - // std::cerr << "Energy difference: " << energy_difference << " is to large! " << std::endl; - // return 1; - // } - } - - // // Write the corresponding coefficient vector: verbatim in binary, to be completely lossless - // char iFilename[200]; - // sprintf(iFilename, (resultFileName + ".data").c_str()); - - // FILE* fpIterate = fopen(iFilename, "wb"); - // if (!fpIterate) - // DUNE_THROW(SolverError, "Couldn't open file " << iFilename << " for writing"); - - // for (size_t j=0; j<isometryCoefficients.size(); j++) - // fwrite(&isometryCoefficients[j], sizeof(Coefficient), 1, fpIterate); - - // fclose(fpIterate); - + // L2 - Discretization error + // if(discretization_errors[0] > 1.0) + // { + // std::cerr << std::setprecision(9); + // std::cerr << "L2-error is to large! " << std::endl; + // return 1; + // } + // // H1(semi) - Discretization error + // if(discretization_errors[1] > 1.0) + // { + // std::cerr << std::setprecision(9); + // std::cerr << "H1-error is to large! " << std::endl; + // return 1; + // } + } - #if 0 - // Write the corresponding coefficient vector: verbatim in binary, to be completely lossless - typedef BlockVector<typename Coefficient::CoordinateType> EmbeddedVectorType; - EmbeddedVectorType xEmbedded(isometryCoefficients.size()); - for (size_t i = 0; i<isometryCoefficients.size(); i++) - { - xEmbedded[i] = isometryCoefficients[i].globalCoordinates(); - std::cout << "isometryCoefficients[i].globalCoordinates():" << isometryCoefficients[i].globalCoordinates() << std::endl; - - } - std::ofstream outFile(resultFileName + ".data", std::ios_base::binary); - MatrixVector::Generic::writeBinary(outFile, xEmbedded); - outFile.close(); - /////////////////////////////////////////// - // (Option) write Solution(DOF)-vector and vertex coordinates to .txt-File - /////////////////////////////////////////// - if (parameterSet.get<bool>("writeDOFvector", 0)) - writeDOFVector(gridView,targetDim, x, "DOFVectorR" + std::to_string(dim) + "_R" + std::to_string(targetDim) + ".txt"); - #endif + /** + * @brief Write Energy values. + * + */ + std::cout << "(Final) Energy of discrete solution: " << numerical_energy<< std::endl; + if (parameterSet.get<bool>("compare_EnergyValues", 0)) + { + auto analytical_energy = parameterSet.get<double>("analytical_energy"); + auto energy_difference = analytical_energy - numerical_energy; + std::cout << "Analytical energy: " << analytical_energy<< std::endl; + std::cout << "Energy difference: " << energy_difference << std::endl; + + // if(energy_difference > 1.0) + // { + // std::cerr << std::setprecision(9); + // std::cerr << "Energy difference: " << energy_difference << " is to large! " << std::endl; + // return 1; + // } + } std::cout << "Total time elapsed: " << globalTimer.elapsed() << std::endl; return 0; - } \ No newline at end of file +} diff --git a/src/micro-problem.cc b/src/micro-problem.cc index ca4ccf85f0891da6ff6771c2cd02be38bf432f73..a5e5a55077e285c22f1d95e6fc0b9bbca743510e 100644 --- a/src/micro-problem.cc +++ b/src/micro-problem.cc @@ -12,7 +12,7 @@ #include <dune/common/float_cmp.hh> #include <dune/common/math.hh> #include <dune/common/fvector.hh> -#include <dune/common/fmatrix.hh> +#include <dune/common/fmatrix.hh> #include <dune/geometry/quadraturerules.hh> @@ -29,7 +29,7 @@ #include <dune/istl/spqr.hh> #include <dune/istl/preconditioners.hh> #include <dune/istl/io.hh> -#include <dune/istl/eigenvalue/test/matrixinfo.hh> // TEST: compute condition Number +#include <dune/istl/eigenvalue/test/matrixinfo.hh> // TEST: compute condition Number #include <dune/functions/functionspacebases/interpolate.hh> #include <dune/functions/backends/istlvectorbackend.hh> @@ -45,11 +45,11 @@ #include <dune/fufem/dunepython.hh> #include <dune/microstructure/matrix_operations.hh> -#include <dune/microstructure/CorrectorComputer.hh> -#include <dune/microstructure/EffectiveQuantitiesComputer.hh> -#include <dune/microstructure/prestrainedMaterial.hh> +#include <dune/microstructure/CorrectorComputer.hh> +#include <dune/microstructure/EffectiveQuantitiesComputer.hh> +#include <dune/microstructure/prestrainedMaterial.hh> -#include <dune/solvers/solvers/umfpacksolver.hh> //TEST +#include <dune/solvers/solvers/umfpacksolver.hh> //TEST #include <any> #include <variant> @@ -60,7 +60,7 @@ using namespace Dune; using namespace MatrixOperations; -using GridView = Dune::YaspGrid<3, Dune::EquidistantOffsetCoordinates<double, 3>>::LeafGridView; +using GridView = Dune::YaspGrid<3, Dune::EquidistantOffsetCoordinates<double, 3> >::LeafGridView; ////////////////////////////////////////////////////////////////////// // Helper functions for Table-Output @@ -68,28 +68,28 @@ using GridView = Dune::YaspGrid<3, Dune::EquidistantOffsetCoordinates<double, 3> /*! Center-aligns string within a field of width w. Pads with blank spaces to enforce alignment. */ std::string center(const std::string s, const int w) { - std::stringstream ss, spaces; - int padding = w - s.size(); // count excess room to pad - for(int i=0; i<padding/2; ++i) - spaces << " "; - ss << spaces.str() << s << spaces.str(); // format with padding - if(padding>0 && padding%2!=0) // if odd #, add 1 space - ss << " "; - return ss.str(); + std::stringstream ss, spaces; + int padding = w - s.size(); // count excess room to pad + for(int i=0; i<padding/2; ++i) + spaces << " "; + ss << spaces.str() << s << spaces.str(); // format with padding + if(padding>0 && padding%2!=0) // if odd #, add 1 space + ss << " "; + return ss.str(); } /* Convert double to string with specified number of places after the decimal and left padding. */ template<class type> std::string prd(const type x, const int decDigits, const int width) { - std::stringstream ss; -// ss << std::fixed << std::right; - ss << std::scientific << std::right; // Use scientific Output! - ss.fill(' '); // fill space around displayed # - ss.width(width); // set width around displayed # - ss.precision(decDigits); // set # places after decimal - ss << x; - return ss.str(); + std::stringstream ss; + // ss << std::fixed << std::right; + ss << std::scientific << std::right; // Use scientific Output! + ss.fill(' '); // fill space around displayed # + ss.width(width); // set width around displayed # + ss.precision(decDigits); // set # places after decimal + ss << x; + return ss.str(); } /** @@ -97,12 +97,12 @@ std::string prd(const type x, const int decDigits, const int width) { * Check whether two points are equal on R/Z x R/Z x R */ auto equivalent = [](const FieldVector<double,3>& x, const FieldVector<double,3>& y) - { + { return ( (FloatCmp::eq(x[0],y[0]) or FloatCmp::eq(x[0]+1,y[0]) or FloatCmp::eq(x[0]-1,y[0])) - and (FloatCmp::eq(x[1],y[1]) or FloatCmp::eq(x[1]+1,y[1]) or FloatCmp::eq(x[1]-1,y[1])) - and (FloatCmp::eq(x[2],y[2])) - ); - }; + and (FloatCmp::eq(x[1],y[1]) or FloatCmp::eq(x[1]+1,y[1]) or FloatCmp::eq(x[1]-1,y[1])) + and (FloatCmp::eq(x[2],y[2])) + ); + }; @@ -110,30 +110,30 @@ auto equivalent = [](const FieldVector<double,3>& x, const FieldVector<double,3> //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// int main(int argc, char *argv[]) { - feenableexcept(FE_INVALID); - MPIHelper::instance(argc, argv); - - Dune::Timer globalTimer; - - if (argc < 3) - DUNE_THROW(Exception, "Usage: ./Cell-Problem <python path> <python module without extension>"); - - // Start Python interpreter - Python::start(); - auto pyMain = Python::main(); - pyMain.runStream() - << std::endl << "import math" - << std::endl << "import sys" - << std::endl << "sys.path.append('" << argv[1] << "')" << std::endl; - auto pyModule = pyMain.import(argv[2]); - - ParameterTree parameterSet; - pyModule.get("parameterSet").toC(parameterSet); - // read possible further parameters from the command line - ParameterTreeParser::readOptions(argc, argv, parameterSet); - // Print all parameters, to make them appear in the log file - std::cout << "Input parameters:" << std::endl; - parameterSet.report(); + feenableexcept(FE_INVALID); + MPIHelper::instance(argc, argv); + + Dune::Timer globalTimer; + + if (argc < 3) + DUNE_THROW(Exception, "Usage: ./Cell-Problem <python path> <python module without extension>"); + + // Start Python interpreter + Python::start(); + auto pyMain = Python::main(); + pyMain.runStream() + << std::endl << "import math" + << std::endl << "import sys" + << std::endl << "sys.path.append('" << argv[1] << "')" << std::endl; + auto pyModule = pyMain.import(argv[2]); + + ParameterTree parameterSet; + pyModule.get("parameterSet").toC(parameterSet); + // read possible further parameters from the command line + ParameterTreeParser::readOptions(argc, argv, parameterSet); + // Print all parameters, to make them appear in the log file + std::cout << "Input parameters:" << std::endl; + parameterSet.report(); //--- Output setter std::string baseName = parameterSet.get("baseName", "CellProblem-result"); @@ -144,153 +144,153 @@ int main(int argc, char *argv[]) constexpr int dim = 3; - // Debug/Print Options + // Debug/Print Options bool print_debug = parameterSet.get<bool>("print_debug", false); // VTK-write options // bool write_prestrainFunctions = parameterSet.get<bool>("write_prestrainFunctions", false); //Not implemented yet. /** - * @brief Generate the grid. - * Corrector Problem Domain (-1/2,1/2)^3. - */ -// FieldVector<double,dim> lower({-1.0/2.0, -1.0/2.0, -1.0/2.0}); -// FieldVector<double,dim> upper({1.0/2.0, 1.0/2.0, 1.0/2.0}); - -// std::array<int,2> numLevels = parameterSet.get<std::array<int,2>>("numLevels", {3,3}); -// int levelCounter = 0; - -Dune::FieldVector<double,dim> lower({-1.0/2.0, -1.0/2.0, -1.0/2.0}); -Dune::FieldVector<double,dim> upper({1.0/2.0, 1.0/2.0, 1.0/2.0}); -int microGridLevel = parameterSet.get<int>("microGridLevel", 1); -std::array<int, dim> nElements = {(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel)}; -// std::cout << "Number of Grid-Elements in each direction: " << nElements << std::endl; -std::cout << "Number of Grid-Elements in each direction: " << (int)std::pow(2,microGridLevel) << std::endl; - - + * @brief Generate the grid. + * Corrector Problem Domain (-1/2,1/2)^3. + */ + // FieldVector<double,dim> lower({-1.0/2.0, -1.0/2.0, -1.0/2.0}); + // FieldVector<double,dim> upper({1.0/2.0, 1.0/2.0, 1.0/2.0}); + + // std::array<int,2> numLevels = parameterSet.get<std::array<int,2>>("numLevels", {3,3}); + // int levelCounter = 0; + + Dune::FieldVector<double,dim> lower({-1.0/2.0, -1.0/2.0, -1.0/2.0}); + Dune::FieldVector<double,dim> upper({1.0/2.0, 1.0/2.0, 1.0/2.0}); + int microGridLevel = parameterSet.get<int>("microGridLevel", 1); + std::array<int, dim> nElements = {(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel)}; + // std::cout << "Number of Grid-Elements in each direction: " << nElements << std::endl; + std::cout << "Number of Grid-Elements in each direction: " << (int)std::pow(2,microGridLevel) << std::endl; + + /////////////////////////////////// // Create Data Storage /////////////////////////////////// //--- Storage:: #1 level #2 L2SymError #3 L2SymErrorOrder #4 L2Norm(sym) #5 L2Norm(sym-analytic) #6 L2Norm(phi_1) - //std::vector<std::variant<std::string, size_t , double>> Storage_Error; - //--- Storage:: | level | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | -// std::vector<std::variant<std::string, size_t , double>> Storage_Quantities; + //std::vector<std::variant<std::string, size_t , double>> Storage_Error; + //--- Storage:: | level | q1 | q2 | q3 | q12 | q13 | q23 | b1 | b2 | b3 | + // std::vector<std::variant<std::string, size_t , double>> Storage_Quantities; //--- GridLevel-Loop: -// for(size_t level = numLevels[0] ; level <= numLevels[1]; level++) -// { -// std::cout << " ----------------------------------" << std::endl; -// std::cout << "GridLevel: " << level << std::endl; -// std::cout << " ----------------------------------" << std::endl; - -// // Storage_Error.push_back(level); -// Storage_Quantities.push_back(level); -// std::array<int, dim> nElements = {(int)std::pow(2,level) ,(int)std::pow(2,level) ,(int)std::pow(2,level)}; -// std::cout << "Number of Grid-Elements in each direction: " << nElements << std::endl; -// log << "Number of Grid-Elements in each direction: " << nElements << std::endl; - - using CellGridType = YaspGrid<dim, EquidistantOffsetCoordinates<double, dim> >; - CellGridType grid_CE(lower,upper,nElements); - using GridView = CellGridType::LeafGridView; - const GridView gridView_CE = grid_CE.leafGridView(); - if(print_debug) - std::cout << "Host grid has " << gridView_CE.size(dim) << " vertices." << std::endl; - - //--- Choose a finite element space for Cell Problem - using namespace Functions::BasisFactory; - Functions::BasisFactory::Experimental::PeriodicIndexSet periodicIndices; - - //--- Get PeriodicIndices for periodicBasis (Don't do the following in real life: It has quadratic run-time in the number of vertices.) - for (const auto& v1 : vertices(gridView_CE)) - for (const auto& v2 : vertices(gridView_CE)) - if (equivalent(v1.geometry().corner(0), v2.geometry().corner(0))) - { - periodicIndices.unifyIndexPair({gridView_CE.indexSet().index(v1)}, {gridView_CE.indexSet().index(v2)}); - } - - Dune::Timer basisSetupTimer; - //--- Setup first order periodic Lagrange-Basis - auto Basis_CE = makeBasis( - gridView_CE, - power<dim>( - Functions::BasisFactory::Experimental::periodic(lagrange<1>(), periodicIndices), - flatLexicographic() - //blockedInterleaved() // Not Implemented - )); - std::cout << "Basis setup took " << basisSetupTimer.elapsed() << " seconds " << std::endl; - - if(print_debug) - std::cout << "power<periodic> basis has " << Basis_CE.dimension() << " degrees of freedom" << std::endl; - - - - // ------------------------------------------------------- - // This needs to be declared as Callable otherwise Class(param) wont work. if _call__(self,x) is not implemented - Python::Callable MicrostructureClass = pyModule.get("Microstructure"); - - // Create instance of class - // This needs to be a 'Python::Reference' and not 'Python::Callable' since Callable only works if __call__(self,x) is implemented in the python module!!! - // Python::Reference microstructure = MicrostructureClass(2); - - //Setup for a constant microstructure. - Python::Reference microstructure = MicrostructureClass(); - - /////////////////////////////////// - // Create prestrained material object - /////////////////////////////////// - Dune::Timer materialSetupTimer; - - using MaterialType = prestrainedMaterial<GridView>; - - // auto material = prestrainedMaterial(gridView_CE,parameterSet,pyModule); - // auto material = prestrainedMaterial(gridView_CE,microstructure,parameterSet,pyModule); - std::shared_ptr<MaterialType> material = std::make_shared<MaterialType>(gridView_CE,microstructure,parameterSet,pyModule); - std::cout << "Material setup took " << materialSetupTimer.elapsed() << " seconds " << std::endl; - - // --- Get scale ratio - // double gamma = parameterSet.get<double>("gamma",1.0); - std::cout << "scale ratio (gamma) set to : " << material->gamma_ << std::endl; - - //--- Compute Correctors - // auto correctorComputer = CorrectorComputer(Basis_CE, material, log, parameterSet); - // auto correctorComputer = CorrectorComputer(Basis_CE, materialPointer, log, parameterSet); - std::shared_ptr<CorrectorComputer<decltype(Basis_CE),MaterialType> > correctorComputer = std::make_shared<CorrectorComputer<decltype(Basis_CE),MaterialType>>(Basis_CE, material, parameterSet); - correctorComputer->assemble(); - correctorComputer->solve(); - - //--- Check Correctors (options): - if(parameterSet.get<bool>("write_L2Error", false)) - correctorComputer->computeNorms(); - if(parameterSet.get<bool>("write_VTK", false)) - correctorComputer->writeCorrectorsVTK(microGridLevel); - //--- Additional Test: check orthogonality (75) from paper: - if(parameterSet.get<bool>("write_checkOrthogonality", false)) - correctorComputer->check_Orthogonality(); - //--- Check symmetry of stiffness matrix - if(print_debug) - correctorComputer->checkSymmetry(); - - //--- Compute effective quantities - // auto effectiveQuantitiesComputer = EffectiveQuantitiesComputer(correctorComputer,material); - auto effectiveQuantitiesComputer = EffectiveQuantitiesComputer(correctorComputer); - effectiveQuantitiesComputer.computeEffectiveQuantities(); - - //--- Write material indicator function to VTK - if (parameterSet.get<bool>("write_materialFunctions", false)) - material->writeVTKMaterialFunctions(microGridLevel); - - //--- Get effective quantities - auto Qeff = effectiveQuantitiesComputer.getQeff(); - auto Beff = effectiveQuantitiesComputer.getBeff(); - printmatrix(std::cout, Qeff, "Matrix Qeff", "--"); - printvector(std::cout, Beff, "Beff", "--"); - - - //--- Write effective quantities to matlab folder (for symbolic minimization) - if(parameterSet.get<bool>("write_EffectiveQuantitiesToTxt", true)) - effectiveQuantitiesComputer.writeEffectiveQuantitiesToTxt(resultPath); - - - - - std::cout << "Total time elapsed: " << globalTimer.elapsed() << std::endl; + // for(size_t level = numLevels[0] ; level <= numLevels[1]; level++) + // { + // std::cout << " ----------------------------------" << std::endl; + // std::cout << "GridLevel: " << level << std::endl; + // std::cout << " ----------------------------------" << std::endl; + + // // Storage_Error.push_back(level); + // Storage_Quantities.push_back(level); + // std::array<int, dim> nElements = {(int)std::pow(2,level) ,(int)std::pow(2,level) ,(int)std::pow(2,level)}; + // std::cout << "Number of Grid-Elements in each direction: " << nElements << std::endl; + // log << "Number of Grid-Elements in each direction: " << nElements << std::endl; + + using CellGridType = YaspGrid<dim, EquidistantOffsetCoordinates<double, dim> >; + CellGridType grid_CE(lower,upper,nElements); + using GridView = CellGridType::LeafGridView; + const GridView gridView_CE = grid_CE.leafGridView(); + if(print_debug) + std::cout << "Host grid has " << gridView_CE.size(dim) << " vertices." << std::endl; + + //--- Choose a finite element space for Cell Problem + using namespace Functions::BasisFactory; + Functions::BasisFactory::Experimental::PeriodicIndexSet periodicIndices; + + //--- Get PeriodicIndices for periodicBasis (Don't do the following in real life: It has quadratic run-time in the number of vertices.) + for (const auto& v1 : vertices(gridView_CE)) + for (const auto& v2 : vertices(gridView_CE)) + if (equivalent(v1.geometry().corner(0), v2.geometry().corner(0))) + { + periodicIndices.unifyIndexPair({gridView_CE.indexSet().index(v1)}, {gridView_CE.indexSet().index(v2)}); + } + + Dune::Timer basisSetupTimer; + //--- Setup first order periodic Lagrange-Basis + auto Basis_CE = makeBasis( + gridView_CE, + power<dim>( + Functions::BasisFactory::Experimental::periodic(lagrange<1>(), periodicIndices), + flatLexicographic() + //blockedInterleaved() // Not Implemented + )); + std::cout << "Basis setup took " << basisSetupTimer.elapsed() << " seconds " << std::endl; + + if(print_debug) + std::cout << "power<periodic> basis has " << Basis_CE.dimension() << " degrees of freedom" << std::endl; + + + + // ------------------------------------------------------- + // This needs to be declared as Callable otherwise Class(param) wont work. if _call__(self,x) is not implemented + Python::Callable MicrostructureClass = pyModule.get("Microstructure"); + + // Create instance of class + // This needs to be a 'Python::Reference' and not 'Python::Callable' since Callable only works if __call__(self,x) is implemented in the python module!!! + // Python::Reference microstructure = MicrostructureClass(2); + + //Setup for a constant microstructure. + Python::Reference microstructure = MicrostructureClass(); + + /////////////////////////////////// + // Create prestrained material object + /////////////////////////////////// + Dune::Timer materialSetupTimer; + + using MaterialType = prestrainedMaterial<GridView>; + + // auto material = prestrainedMaterial(gridView_CE,parameterSet,pyModule); + // auto material = prestrainedMaterial(gridView_CE,microstructure,parameterSet,pyModule); + std::shared_ptr<MaterialType> material = std::make_shared<MaterialType>(gridView_CE,microstructure,parameterSet,pyModule); + std::cout << "Material setup took " << materialSetupTimer.elapsed() << " seconds " << std::endl; + + // --- Get scale ratio + // double gamma = parameterSet.get<double>("gamma",1.0); + std::cout << "scale ratio (gamma) set to : " << material->gamma_ << std::endl; + + //--- Compute Correctors + // auto correctorComputer = CorrectorComputer(Basis_CE, material, log, parameterSet); + // auto correctorComputer = CorrectorComputer(Basis_CE, materialPointer, log, parameterSet); + std::shared_ptr<CorrectorComputer<decltype(Basis_CE),MaterialType> > correctorComputer = std::make_shared<CorrectorComputer<decltype(Basis_CE),MaterialType> >(Basis_CE, material, parameterSet); + correctorComputer->assemble(); + correctorComputer->solve(); + + //--- Check Correctors (options): + if(parameterSet.get<bool>("write_L2Error", false)) + correctorComputer->computeNorms(); + if(parameterSet.get<bool>("write_VTK", false)) + correctorComputer->writeCorrectorsVTK(microGridLevel); + //--- Additional Test: check orthogonality (75) from paper: + if(parameterSet.get<bool>("write_checkOrthogonality", false)) + correctorComputer->check_Orthogonality(); + //--- Check symmetry of stiffness matrix + if(print_debug) + correctorComputer->checkSymmetry(); + + //--- Compute effective quantities + // auto effectiveQuantitiesComputer = EffectiveQuantitiesComputer(correctorComputer,material); + auto effectiveQuantitiesComputer = EffectiveQuantitiesComputer(correctorComputer); + effectiveQuantitiesComputer.computeEffectiveQuantities(); + + //--- Write material indicator function to VTK + if (parameterSet.get<bool>("write_materialFunctions", false)) + material->writeVTKMaterialFunctions(microGridLevel); + + //--- Get effective quantities + auto Qeff = effectiveQuantitiesComputer.getQeff(); + auto Beff = effectiveQuantitiesComputer.getBeff(); + printmatrix(std::cout, Qeff, "Matrix Qeff", "--"); + printvector(std::cout, Beff, "Beff", "--"); + + + //--- Write effective quantities to matlab folder (for symbolic minimization) + if(parameterSet.get<bool>("write_EffectiveQuantitiesToTxt", true)) + effectiveQuantitiesComputer.writeEffectiveQuantitiesToTxt(resultPath); + + + + + std::cout << "Total time elapsed: " << globalTimer.elapsed() << std::endl; } diff --git a/test/analyticalcylindertest.cc b/test/analyticalcylindertest.cc index 4ced9ed89ae63d2b8d02f08e15b15a9e824f794d..70bb021aad20903e2cd175ab80c2bc3104f16a07 100644 --- a/test/analyticalcylindertest.cc +++ b/test/analyticalcylindertest.cc @@ -1,10 +1,8 @@ #include <config.h> #include <signal.h> #include <memory> - #include <fenv.h> #include <array> - #include <math.h> // Includes for the ADOL-C automatic differentiation library @@ -13,22 +11,21 @@ #include <dune/fufem/utilities/adolcnamespaceinjections.hh> #include <dune/common/typetraits.hh> - #include <dune/common/bitsetvector.hh> #include <dune/common/parametertree.hh> #include <dune/common/parametertreeparser.hh> #include <dune/grid/uggrid.hh> #include <dune/grid/utility/structuredgridfactory.hh> - #include <dune/grid/io/file/gmshreader.hh> #include <dune/grid/io/file/vtk.hh> #include <dune/functions/gridfunctions/discreteglobalbasisfunction.hh> +#include <dune/functions/gridfunctions/composedgridfunction.hh> +#include <dune/functions/functionspacebases/cubichermitebasis.hh> #include <dune/functions/functionspacebases/lagrangebasis.hh> #include <dune/functions/functionspacebases/powerbasis.hh> #include <dune/functions/functionspacebases/interpolate.hh> -#include <dune/functions/functionspacebases/reducedcubichermitetrianglebasis.hh> #include <dune/fufem/boundarypatch.hh> #include <dune/fufem/functiontools/boundarydofs.hh> @@ -42,25 +39,21 @@ #include <dune/gfe/spaces/productmanifold.hh> #include <dune/gfe/spaces/realtuple.hh> #include <dune/gfe/spaces/rotation.hh> -#include <dune/gfe/localdiscretekirchhoffbendingisometry.hh> +#include <dune/gfe/functions/discretekirchhoffbendingisometry.hh> +#include <dune/gfe/functions/embeddedglobalgfefunction.hh> +#include <dune/gfe/functions/localprojectedfefunction.hh> #include <dune/gfe/assemblers/localgeodesicfeadolcstiffness.hh> -#include <dune/gfe/assemblers/harmonicenergy.hh> #include <dune/gfe/assemblers/geodesicfeassembler.hh> +#include <dune/gfe/assemblers/discretekirchhoffbendingenergy.hh> +#include <dune/gfe/assemblers/forceenergy.hh> +#include <dune/gfe/assemblers/sumenergy.hh> #include <dune/gfe/bendingisometryhelper.hh> #include <dune/gfe/riemannianpnsolver.hh> -#include <dune/gfe/embeddedglobalgfefunction.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergy.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergyconforming.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergyzienkiewicz.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergyzienkiewiczprojected.hh> -// #include <dune/gfe/energies/discretekirchhoffbendingenergyprestrained.hh> +#include <dune/gfe/riemanniantrsolver.hh> +#include <dune/microstructure/bendingisometryaddons.hh> #include <dune/microstructure/energies/discretekirchhoffbendingenergyprestrained.hh> -#include <dune/gfe/spaces/stiefelmanifold.hh> -// #include <dune/gfe/spaces/stiefelmatrix.hh> - - #include <dune/gmsh4/gmsh4reader.hh> #include <dune/gmsh4/gridcreators/lagrangegridcreator.hh> @@ -68,363 +61,36 @@ const int dim = 2; using namespace Dune; - /** * @brief Test for the macroscopic simulation: * We consider the special case of a effective prestrain/spontaneous curvature Beff given by * Beff = [1.0 , 0.0] * [0.0 ,0.5] - * on a rectangular domain (0,2*pi)^2 with clampled boundary conditions. - * In this case there is a known exact solution (deformation) u(x,y) = (sin(x), y , 1-cos(x)) - * The analytical energy is given by E[u_ana] = (pi)^2/2.0 . - * That is used to validate the macroscopic minimization problem. + * on a rectangular domain (0,2*pi)^2 with clampled boundary conditions. + * In this case there is a known exact solution (deformation) u(x,y) = (sin(x), y , 1-cos(x)) + * The analytical energy is given by E[u_ana] = (pi)^2/2.0 . + * That is used to validate the macroscopic minimization problem. * (see Bartels,Bonito,Nochetto - Bilayer Plates: Model Reduction, Γ‐Convergent Finite Element Approximation, and Discrete Gradient Flow, p.25) * We measure/test the L2-error between the exact and discrete solution up to a certain tolerance. */ - - -// /** -// * @brief Comparison of different function definitions for debugging purposes. -// * TODO: remove later -// */ -// template<class LocalDiscreteKirchhoffFunction,class DeformationFunction, class GridView> -// auto compare(LocalDiscreteKirchhoffFunction& kirchhoffFunction, -// DeformationFunction& deformationFunction, -// GridView& gridView) -// { -// std::cout << "COMPARE:" << std::endl; -// auto localDeformation = localFunction(deformationFunction); -// auto rotation = derivative(deformationFunction); -// auto localRotation = localFunction(rotation); -// auto localRotation_2 = derivative(localDeformation); -// for (const auto &element : elements(gridView)) -// { -// auto geometry = element.geometry(); - -// kirchhoffFunction.bind(element); -// localDeformation.bind(element); -// localRotation.bind(element); -// localRotation_2.bind(element); - -// //evaluate at nodes: -// for (int i=0; i<geometry.corners(); i++) -// { -// auto kirchhoffOut = kirchhoffFunction.evaluate(geometry.local(geometry.corner(i))).globalCoordinates(); -// auto KirchhoffRot = kirchhoffFunction.evaluateDerivative(geometry.local(geometry.corner(i))); -// //Test -// const auto& jacobian = geometry.jacobian(geometry.corner(i)); -// printmatrix(std::cout, jacobian, "jacobianInverse:", "--"); - -// auto defOut = localDeformation(geometry.local(geometry.corner(i))); -// auto defRot = localRotation(geometry.local(geometry.corner(i))); -// auto defRot_2 = localRotation_2(geometry.local(geometry.corner(i))); - -// printvector(std::cout, kirchhoffOut, "kirchhoffOut:", "--"); -// printvector(std::cout, defOut, "defOut:", "--"); -// printmatrix(std::cout, KirchhoffRot, "KirchhoffRot:", "--"); -// printmatrix(std::cout, defRot, "defRot:", "--"); -// // printmatrix(std::cout, defRot*jacobian, "defRot*jacobian:", "--"); // deprecated: when ReducedCubicHermite returned values in globalCoordinates, this was actually neccessary to get the right values. -// } -// } -// } - - -// /** -// * @brief Test that checks the isometry constraint at the nodes of the Triangulation -// */ -// template<class LocalDiscreteKirchhoffFunction, class GridView> -// auto nodewiseIsometryTest(LocalDiscreteKirchhoffFunction& deformationFunction, -// GridView& gridView) -// { -// for (const auto &element : elements(gridView)) -// { -// auto geometry = element.geometry(); -// deformationFunction.bind(element); -// // evaluate at nodes: -// for (int i=0; i<geometry.corners(); i++) -// { -// // auto out = deformationFunction.evaluate(geometry.local(geometry.corner(i))).globalCoordinates(); -// auto rot = deformationFunction.evaluateDerivative(geometry.local(geometry.corner(i))); -// FieldMatrix<double,2,2> I = ScaledIdentityMatrix<double,2>(1); -// auto diff = (rot.transposed()*rot) - I; -// // std::cout << "diff.frobenius_norm():" << diff.frobenius_norm() << std::endl; -// if(diff.frobenius_norm()>1e-8) -// DUNE_THROW(Exception, "Nodewise Isometry Test failed! with error"<< diff.frobenius_norm()); -// } -// } -// std::cout << "nodewiseIsometryTest passed." << std::endl; -// } - - -// template<class DeformationFunction> -// auto nodewiseIsometryTest(DeformationFunction& deformationGridViewFunction) -// { -// auto localDeformation = localFunction(deformationGridViewFunction); -// auto localRotation = derivative(localDeformation); -// auto gridView = deformationGridViewFunction.basis().gridView(); -// for (const auto &element : elements(gridView)) -// { -// auto geometry = element.geometry(); -// localDeformation.bind(element); -// localRotation.bind(element); - -// // evaluate at nodes: -// for (int i=0; i<geometry.corners(); i++) -// { -// auto rot = localRotation(geometry.local(geometry.corner(i))); -// auto product = rot.transposed()*rot; - -// FieldMatrix<double,2,2> I = ScaledIdentityMatrix<double,2>(1); -// auto diff = (rot.transposed()*rot) - I; - -// if(diff.frobenius_norm()>1e-8) -// DUNE_THROW(Exception, "Nodewise Isometry Test failed! with error"<< diff.frobenius_norm()); -// } -// } -// std::cout << "nodewiseIsometryTest passed." << std::endl; -// } - - - -// /** \brief The identity function in R^d, and its derivative -// * -// * This is needed to compute the displacement from the deformation (for visualization). -// * Since we want to represent it in a Hermite finite element space, we need -// * the derivative as well. -// * -// * Is there no shorter way to implement this? -// */ -// template<class K> -// class IdentityGridEmbedding -// { -// public: -// //! Evaluate identity -// FieldVector<K,3> operator() (const FieldVector<K,2>& x) const -// { -// return {x[0], x[1], 0.0}; -// } - -// /** -// * \brief Obtain derivative of identity function -// */ -// friend auto derivative(const IdentityGridEmbedding& p) -// { -// return [](const FieldVector<K,dim>& x) { return FieldMatrix<K,3,2>({{1,0}, {0,1}, {0,0}}); }; -// } -// }; - -// /** \brief Project a vector field onto a product of ReducedHermiteTriangle spaces -// * -// * \todo This functionality should be provided by dune-functions. It currently isn't, -// * because ReducedHermiteTriangleBasis is not an affine finite element. -// */ -// template <class Basis, class Coefficients, class Function> -// void interpolate(const Basis& basis, Coefficients& coefficients, Function& f) -// { -// coefficients.resize(basis.size()); -// // coefficients.resize(basis.dimension()); -// auto localView = basis.localView(); - -// for (auto&& e : elements(basis.gridView())) -// { -// localView.bind(e); - -// // Loop over the corners -// for (std::size_t i=0; i<3; i++) -// { -// auto pos = e.geometry().corner(i); -// auto value = f(pos); -// auto der = derivative(f)(pos); - -// // printvector(std::cout, value, "value:", "--"); -// // printmatrix(std::cout, der, "der:", "--"); - -// // std::cout << "sin(x):" << sin(pos[0]) << std::endl; -// // std::cout << "cos(x):" << cos(pos[0]) << std::endl; -// // printvector(std::cout, pos, "pos: ", "--"); - -// // Loop over components of power basis -// for(std::size_t k=0; k<3 ; k++) -// { -// auto localIdx_0 = localView.tree().child(k).localIndex(i); // index for values -// auto localIdx_1 = localView.tree().child(k).localIndex(i+3); // index for partial derivatives w.r.t. x -// auto localIdx_2 = localView.tree().child(k).localIndex(i+6); // index for partial derivatives w.r.t. y -// // std::cout << "localIdx_0: " << localIdx_0 << std::endl; -// // std::cout << "localIdx_1: " << localIdx_1 << std::endl; -// // std::cout << "localIdx_2: " << localIdx_2 << std::endl; - -// auto globalIdx_0 = localView.index(localIdx_0); -// auto globalIdx_1 = localView.index(localIdx_1); -// auto globalIdx_2 = localView.index(localIdx_2); -// // std::cout << "globalIdx_0: " << globalIdx_0 << std::endl; -// // std::cout << "globalIdx_1: " << globalIdx_1 << std::endl; -// // std::cout << "globalIdx_2: " << globalIdx_2 << std::endl; - -// coefficients[globalIdx_0[0]][globalIdx_0[1]] = value[k]; -// coefficients[globalIdx_1[0]][globalIdx_1[1]] = der[k][0]; -// coefficients[globalIdx_2[0]][globalIdx_2[1]] = der[k][1]; -// } -// } - -// } -// } - -// /** -// * @brief Data structure conversion from 'VectorSpaceCoefficients' to 'IsometryCoefficients'. -// * TODO: Throw an error if rotation-part is not orthogonal? (expensive to check) -// */ -// template<class DiscreteKirchhoffBasis, class CoefficientBasis, class Coefficients, class IsometryCoefficients> -// void vectorToIsometryCoefficientMap(const DiscreteKirchhoffBasis& discreteKirchhoffBasis, -// const CoefficientBasis& coefficientBasis, -// const Coefficients& vectorCoefficients, -// IsometryCoefficients& isometryCoefficients) -// { -// std::cout << "calling vectorToIsometryCoefficientMap" << std::endl; -// auto localView = discreteKirchhoffBasis.localView(); -// auto localViewCoefficients = coefficientBasis.localView(); - -// using RT = typename IsometryCoefficients::value_type::ctype; - -// for (const auto &element : elements(coefficientBasis.gridView())) -// { -// localView.bind(element); -// localViewCoefficients.bind(element); - -// // Loop over the corners -// for (std::size_t c=0; c<3; c++) -// { -// size_t localIdxOut = localViewCoefficients.tree().localIndex(c); -// size_t globalIdxOut = localViewCoefficients.index(localIdxOut); - -// FieldVector<RT,3> currentDeformation(0); -// FieldVector<RT,3> currentDerivative_x(0); -// FieldVector<RT,3> currentDerivative_y(0); - -// // Loop over components of power basis -// for(std::size_t k=0; k<3 ; k++) -// { -// auto localIdx_0 = localView.tree().child(k).localIndex(c); // index for values -// auto localIdx_1 = localView.tree().child(k).localIndex(c+3); // index for partial derivatives w.r.t. x -// auto localIdx_2 = localView.tree().child(k).localIndex(c+6); // index for partial derivatives w.r.t. y -// // std::cout << "localIdx_0: " << localIdx_0 << std::endl; -// // std::cout << "localIdx_1: " << localIdx_1 << std::endl; -// // std::cout << "localIdx_2: " << localIdx_2 << std::endl; - -// auto globalIdx_0 = localView.index(localIdx_0); -// auto globalIdx_1 = localView.index(localIdx_1); -// auto globalIdx_2 = localView.index(localIdx_2); - -// // blockedInterleaved -- Version -// currentDeformation[k] = vectorCoefficients[globalIdx_0[0]][globalIdx_0[1]]; -// currentDerivative_x[k] = vectorCoefficients[globalIdx_1[0]][globalIdx_1[1]]; -// currentDerivative_y[k] = vectorCoefficients[globalIdx_2[0]][globalIdx_2[1]]; - -// } - -// //cross product to get last column of rotation matrix -// FieldVector<RT,3> cross = {currentDerivative_x[1]*currentDerivative_y[2] - currentDerivative_x[2]*currentDerivative_y[1], -// currentDerivative_x[2]*currentDerivative_y[0] - currentDerivative_x[0]*currentDerivative_y[2], -// currentDerivative_x[0]*currentDerivative_y[1] - currentDerivative_x[1]*currentDerivative_y[0]}; - -// FieldMatrix<RT,3,3> rotMatrix(0); -// for(std::size_t k=0; k<3 ; k++) -// { -// rotMatrix[k][0] = currentDerivative_x[k]; -// rotMatrix[k][1] = currentDerivative_y[k]; -// rotMatrix[k][2] = cross[k]; -// } -// // printmatrix(std::cout, rotMatrix, "rotMatrix:", "--"); -// using namespace Dune::Indices; -// isometryCoefficients[globalIdxOut][_1].set(rotMatrix); //TODO: Throw if matrix is not orthogonal? -// isometryCoefficients[globalIdxOut][_0] = (RealTuple<RT, 3>)currentDeformation; -// } -// } -// } - - -// /** -// * @brief Data structure conversion from 'IsometryCoefficients' to 'VectorSpaceCoefficients'. -// */ -// template<class DiscreteKirchhoffBasis, class CoefficientBasis, class Coefficients, class IsometryCoefficients> -// void isometryToVectorCoefficientMap(const DiscreteKirchhoffBasis& discreteKirchhoffBasis, -// const CoefficientBasis& coefficientBasis, -// Coefficients& coefficients, -// const IsometryCoefficients& isometryCoefficients) -// { -// std::cout << "calling isometryToVectorCoefficientMap" << std::endl; -// auto localView = discreteKirchhoffBasis.localView(); -// auto localViewCoefficients = coefficientBasis.localView(); - -// for (const auto &element : elements(coefficientBasis.gridView())) -// { -// localView.bind(element); -// localViewCoefficients.bind(element); - -// // Loop over the corners -// for (std::size_t c=0; c<3; c++) -// { -// size_t localIdx = localViewCoefficients.tree().localIndex(c); -// size_t globalIdx = localViewCoefficients.index(localIdx); - -// // Loop over components of power basis -// for(std::size_t k=0; k<3 ; k++) -// { -// auto localIdx_0 = localView.tree().child(k).localIndex(c); // index for values -// auto localIdx_1 = localView.tree().child(k).localIndex(c+3); // index for partial derivatives w.r.t. x -// auto localIdx_2 = localView.tree().child(k).localIndex(c+6); // index for partial derivatives w.r.t. y -// // std::cout << "localIdx_0: " << localIdx_0 << std::endl; -// // std::cout << "localIdx_1: " << localIdx_1 << std::endl; -// // std::cout << "localIdx_2: " << localIdx_2 << std::endl; - -// auto globalIdxOut_0 = localView.index(localIdx_0); -// auto globalIdxOut_1 = localView.index(localIdx_1); -// auto globalIdxOut_2 = localView.index(localIdx_2); - -// using namespace Dune::Indices; -// auto deformation = isometryCoefficients[globalIdx][_0].globalCoordinates(); -// auto rotation1 = isometryCoefficients[globalIdx][_1].director(0); -// auto rotation2 = isometryCoefficients[globalIdx][_1].director(1); - -// coefficients[globalIdxOut_0[0]][globalIdxOut_0[1]] = deformation[k]; -// coefficients[globalIdxOut_1[0]][globalIdxOut_1[1]] = rotation1[k]; -// coefficients[globalIdxOut_2[0]][globalIdxOut_2[1]] = rotation2[k]; -// } -// } -// } -// } - - int main(int argc, char *argv[]) { - /** - * @brief We use this to catch a 'Floating point exception' caused by the 'innerSolver' - * in RiemannianProximalNewton - */ - std::shared_ptr<void(int)> handler( - signal(SIGFPE, [](int signum) {throw std::logic_error("FPE"); }), - [](__sighandler_t f) { signal(SIGFPE, f); }); + std::shared_ptr<void(int)> handler( + signal(SIGFPE, [](int signum) { + throw std::logic_error("FPE"); + }), + [](__sighandler_t f) { + signal(SIGFPE, f); + }); - feenableexcept(FE_INVALID); + feenableexcept(FE_INVALID); MPIHelper::instance(argc, argv); Dune::Timer globalTimer; - // if (argc < 3) - // DUNE_THROW(Exception, "Usage: ./bending-isometries <python path> <python module without extension>"); - - // Start Python interpreter - // Python::start(); - // auto pyMain = Python::main(); - // pyMain.runStream() - // << std::endl << "import math" - // << std::endl << "import sys" - // << std::endl << "sys.path.append('" << argv[1] << "')" << std::endl; - // auto pyModule = pyMain.import(argv[2]); - - std::cout << "Current path is " << std::filesystem::current_path() << '\n'; std::filesystem::path file_path = (__FILE__); std::cout<< "File path: " << file_path<<std::endl; @@ -435,9 +101,9 @@ int main(int argc, char *argv[]) Python::start(); auto pyMain = Python::main(); pyMain.runStream() - << std::endl << "import math" - << std::endl << "import sys" - << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; + << std::endl << "import math" + << std::endl << "import sys" + << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; auto pyModule = pyMain.import("analyticalcylindertest"); // parse data file @@ -496,16 +162,16 @@ int main(int argc, char *argv[]) /////////////////////////////////////////////////////// // General coefficient vector of a Discrete Kirchhoff deformation function - using VectorSpaceCoefficients = BlockVector<FieldVector<double,3>>; + using VectorSpaceCoefficients = BlockVector<FieldVector<double,3> >; // Coefficient vector of a Discrete Kirchhoff deformation function that is constrained to be an isometry - using Coefficient = GFE::ProductManifold<RealTuple<double,3>, Rotation<double,3> >; + using Coefficient = GFE::ProductManifold<GFE::RealTuple<double,3>, GFE::Rotation<double,3> >; using IsometryCoefficients = std::vector<Coefficient>; using namespace Functions::BasisFactory; auto deformationBasis = makeBasis(gridView, - power<3>(reducedCubicHermiteTriangle(), + power<3>(reducedCubicHermite(), blockedInterleaved())); @@ -517,74 +183,33 @@ int main(int argc, char *argv[]) // A basis for the tangent space (used to set DirichletNodes) auto tangentBasis = makeBasis(gridView, power<Coefficient::TangentVector::dimension>( - lagrange<1>(), - blockedInterleaved())); - - - // /////////////////////////////////////////// - // // Read Dirichlet values - // /////////////////////////////////////////// - // BitSetVector<1> dirichletVertices(gridView.size(dim), false); - // const typename GridView::IndexSet &indexSet = gridView.indexSet(); - - // // Make Python function that computes which vertices are on the Dirichlet boundary, - // // based on the vertex positions. - // auto dirichletIndicatorFunction = Python::make_function<bool>(pyModule.get("dirichlet_indicator")); - - // for (auto &&vertex : vertices(gridView)) - // dirichletVertices[indexSet.index(vertex)] = dirichletIndicatorFunction(vertex.geometry().corner(0)); - - // BoundaryPatch<GridView> dirichletBoundary(gridView, dirichletVertices); - // BitSetVector<Coefficient::TangentVector::dimension> dirichletNodes(tangentBasis.size(), false); - // constructBoundaryDofs(dirichletBoundary, tangentBasis, dirichletNodes); - - /////////////////////////////////////////// - // Read Dirichlet values (NEW VERSION) - /////////////////////////////////////////// - BitSetVector<1> dirichletVertices(gridView.size(dim), false); - const typename GridView::IndexSet &indexSet = gridView.indexSet(); - + lagrange<1>(), + blockedInterleaved())); - BitSetVector<Coefficient::TangentVector::dimension> dirichletNodes(tangentBasis.size(), false); //tangentBasis.size()=coefficientBasis.size() - - /** - * @brief Make Python function that computes which vertices are on the Dirichlet boundary, - * based on the vertex positions. - */ - auto dirichletIndicatorFunction = Python::make_function<bool>(pyModule.get("dirichlet_indicator")); - - - - /** - * @brief If we want to clamp DOFs inside the domain, we connot use 'BoundaryPatch' - * and 'constructBoundaryDofs'. This is a workaround for now. - * - * - */ - for (auto &&vertex : vertices(gridView)) - { - dirichletVertices[indexSet.index(vertex)] = dirichletIndicatorFunction(vertex.geometry().corner(0)); - - if(dirichletIndicatorFunction(vertex.geometry().corner(0))) - { - dirichletNodes[indexSet.index(vertex)] = true; - } - - } - - // std::cout << "tangentBasis.size():" << tangentBasis.size() << std::endl; - // std::cout << "coefficientBasis.size():" << coefficientBasis.size() << std::endl; + /////////////////////////////////////////// + // Read Dirichlet values + /////////////////////////////////////////// + const typename GridView::IndexSet &indexSet = gridView.indexSet(); + BitSetVector<Coefficient::TangentVector::dimension> dirichletNodes(tangentBasis.size(), false); //tangentBasis.size()=coefficientBasis.size() - // // deprecated: - // // BoundaryPatch<GridView> dirichletBoundary(gridView, dirichletVertices); - // // constructBoundaryDofs(dirichletBoundary, tangentBasis, dirichletNodes); + /** + * @brief Make Python function that computes which vertices are on the Dirichlet boundary, + * based on the vertex positions. + */ + auto dirichletIndicatorFunction = Python::make_function<bool>(pyModule.get("dirichlet_indicator")); - // // TEST: print dirichletNodes - // std::cout << "print dirichletVertices:" << std::endl; - // std::cout << dirichletVertices << std::endl; + /** + * @brief If we want to clamp DOFs inside the domain, we connot use 'BoundaryPatch' + * and 'constructBoundaryDofs'. This is a workaround for now. + */ + for (auto &&vertex : vertices(gridView)) + { + if(dirichletIndicatorFunction(vertex.geometry().corner(0))) + { + dirichletNodes[indexSet.index(vertex)] = true; + } - // std::cout << "print dirichletNodes:" << std::endl; - // std::cout << dirichletNodes << std::endl; + } @@ -595,7 +220,7 @@ int main(int argc, char *argv[]) VectorSpaceCoefficients x(deformationBasis.size()); - IdentityGridEmbedding<double> identityGridEmbedding; + Dune::GFE::Impl::IdentityGridEmbedding<double> identityGridEmbedding; // interpolate(deformationBasis, x, identityGridEmbedding); interpolate(deformationBasis, x, pythonInitialIterate); // Interpolation on a python function @@ -607,10 +232,9 @@ int main(int argc, char *argv[]) using ACoefficient = typename Coefficient::template rebind<adouble>::other; using AIsometryCoefficients = std::vector<ACoefficient>; - /** - * @brief We need to setup LocalDiscreteKirchhoffBendingIsometry with a coefficient - * vector of ctype 'adouble' while the solver gets a coefficient vector + * @brief We need to setup LocalDiscreteKirchhoffBendingIsometry with a coefficient + * vector of ctype 'adouble' while the solver gets a coefficient vector * of ctype 'double'. */ IsometryCoefficients isometryCoefficients(coefficientBasis.size()); @@ -621,48 +245,19 @@ int main(int argc, char *argv[]) std::cout << "deformationBasis.size():" << deformationBasis.size() << std::endl; std::cout << "deformationBasis.dimension():" << deformationBasis.dimension() << std::endl; + // TEST: compute initial isometry error + auto initialDeformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(deformationBasis, x); + nodewiseIsometryTest(initialDeformationFunction); - // isometryToVectorCoefficientMap(deformationBasis,coefficientBasis,x,isometryCoefficients); - /** - * @brief Print coefficient vector: - */ - // for(int i=0; i<x.size(); i++) - // std::cout<< "x[i]:" << x[i] << std::endl; - - /** - * @brief TEST: compute isometry error - */ - auto initialDeformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, x); - // nodewiseIsometryTest(initialDeformationFunction); - - - + using namespace Dune::GFE::Impl; // Convert coefficient data structure from 'VectorSpaceCoefficients' to 'IsometryCoefficients' vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x,isometryCoefficients); vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x,isometryCoefficients_adouble); - - /** - * @brief TEST: conversion of coefficient vectors (back & forth) - */ - VectorSpaceCoefficients x_convert = x; - IsometryCoefficients isometryCoefficientsTMP(coefficientBasis.size()); - vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x_convert,isometryCoefficientsTMP); - isometryToVectorCoefficientMap(deformationBasis,coefficientBasis,x_convert,isometryCoefficientsTMP); - //Check difference - for(int i=0; i<x.size(); i++) - { - if((x[i]-x_convert[i]).two_norm() > 1e-4) - std::cout << "Coefficient conversion failed! with x[i]-x_convert[i]:" << x[i]-x_convert[i] << std::endl; - } - - - - using DeformationBasis = decltype(deformationBasis); - using LocalDKFunction = GFE::LocalDiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, AIsometryCoefficients>; + using LocalDKFunction = Dune::GFE::DiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, AIsometryCoefficients>; LocalDKFunction localDKFunction(deformationBasis, coefficientBasis, isometryCoefficients_adouble); nodewiseIsometryTest(localDKFunction, gridView); @@ -670,99 +265,69 @@ int main(int argc, char *argv[]) /** * @brief Get force term */ - auto pythonForce = Python::make_function<FieldVector<double,3>>(pyModule.get("force")); - // auto forceGVF = Dune::Functions::makeGridViewFunction(dummyForce, gridView); + auto pythonForce = Python::make_function<FieldVector<double,3> >(pyModule.get("force")); auto forceGVF = Dune::Functions::makeGridViewFunction(pythonForce, gridView); auto localForce = localFunction(forceGVF); - /** - * @brief Get effective prestrain Tensor - */ - // Dune::FieldVector<adouble,3> Beffvec = parameterSet.get<Dune::FieldVector<adouble,3>>("effectivePrestrain", {0.0, 0.0, 0.0}); - // Dune::FieldMatrix<adouble,2,2> effectivePrestrain = {{(adouble)Beffvec[0], (adouble)Beffvec[2]}, {(adouble)Beffvec[2],(adouble)Beffvec[1]} }; - // printmatrix(std::cout, effectivePrestrain, "effective prestrain (Beff): ", "--"); - - - // /** - // * @brief Get effective quadratic form - // */ - // Dune::FieldVector<adouble,6> Qhomvec = parameterSet.get<Dune::FieldVector<adouble,6>>("effectiveQuadraticForm", {1.0, 1.0, 1.0, 0.0, 0.0, 0.0}); - // Dune::FieldMatrix<adouble,3,3> Qhom = {{(adouble)Qhomvec[0], (adouble)Qhomvec[3], (adouble)Qhomvec[4]}, - // {(adouble)Qhomvec[3], (adouble)Qhomvec[1], (adouble)Qhomvec[5]}, - // {(adouble)Qhomvec[4], (adouble)Qhomvec[5], (adouble)Qhomvec[2]}}; - // printmatrix(std::cout, Qhom, "effective quadratic form (Qhom): ", "--"); //////////////////////////////////////////////////////////////////////// // Create an assembler for the Discrete Kirchhoff Energy Functional (using ADOL-C) //////////////////////////////////////////////////////////////////////// + // The energy consists of two parts: 1. A bending energy contribution and 2. Contribution from a force term. + auto sumEnergy = std::make_shared<GFE::SumEnergy<CoefficientBasis, GFE::RealTuple<adouble,3>, GFE::Rotation<adouble,3> > >(); - /** - * @brief Setup nonconforming energy - */ - // auto localEnergy_nonconforming = std::make_shared<GFE::DiscreteKirchhoffBendingEnergy<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce); - /** - * @brief Setup conforming energy (WIP) - */ - // auto localEnergy_conforming = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyZienkiewicz<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce); - // auto localEnergy_conforming = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyZienkiewiczProjected<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce); - /** - * @brief Setup energy featuring prestrain - */ - // auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce, Qhom, effectivePrestrain, parameterSet); - auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce, parameterSet, pyModule); - - // LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_conforming(localEnergy_conforming.get()); - // LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_nonconforming(localEnergy_nonconforming.get()); - LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_prestrain(localEnergy_prestrain.get()); - // GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_conforming(coefficientBasis, localGFEADOLCStiffness_conforming); - // GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_nonconforming(coefficientBasis, localGFEADOLCStiffness_nonconforming); - GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_prestrain(coefficientBasis, localGFEADOLCStiffness_prestrain); - - - - + // Setup prestrained bending energy. + auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, ACoefficient> >(localDKFunction, parameterSet, pyModule); + // Setup force energy. + auto forceEnergy = std::make_shared<GFE::ForceEnergy<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient> >(localDKFunction, localForce); + sumEnergy->addLocalEnergy(localEnergy_prestrain); + sumEnergy->addLocalEnergy(forceEnergy); + // Setup the assembler. + auto localGFEADOLCStiffness_prestrain = std::make_shared<Dune::GFE::LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> >(sumEnergy); + std::shared_ptr<Dune::GFE::GeodesicFEAssembler<CoefficientBasis, Coefficient> > assembler_prestrain; + assembler_prestrain = std::make_shared<Dune::GFE::GeodesicFEAssembler<CoefficientBasis, Coefficient> >(coefficientBasis, localGFEADOLCStiffness_prestrain); /** - * @brief Create a solver: - * - Riemannian Newton with Hessian modification - * - Riemannian Trust-region + * @brief Create a solver: + * - Riemannian Newton with Hessian modification + * - Riemannian Trust-region */ - RiemannianProximalNewtonSolver<CoefficientBasis, Coefficient> RNHMsolver; - RiemannianTrustRegionSolver<CoefficientBasis, Coefficient> RTRsolver; + Dune::GFE::RiemannianProximalNewtonSolver<CoefficientBasis, Coefficient> ARRNsolver; + Dune::GFE::RiemannianTrustRegionSolver<CoefficientBasis, Coefficient> RTRsolver; - std::string Solver_name = parameterSet.get<std::string>("Solver", "RNHM"); + std::string Solver_name = parameterSet.get<std::string>("Solver", "ARRN"); double numerical_energy; //final discrete energy - if(Solver_name == "RNHM") + if(Solver_name == "ARRN") { - RNHMsolver.setup(*grid, - &assembler_prestrain, - isometryCoefficients, - dirichletNodes, - parameterSet); + ARRNsolver.setup(*grid, + &(*assembler_prestrain), + isometryCoefficients, + dirichletNodes, + parameterSet); - RNHMsolver.solve(); - isometryCoefficients = RNHMsolver.getSol(); - numerical_energy = RNHMsolver.getStatistics().finalEnergy; + ARRNsolver.solve(); + isometryCoefficients = ARRNsolver.getSol(); + numerical_energy = ARRNsolver.getStatistics().finalEnergy; } else if (Solver_name =="RiemannianTR") { std::cout << "Using Riemannian Trust-region method for energy minimization." << std::endl; RTRsolver.setup(*grid, - &assembler_prestrain, - isometryCoefficients, - dirichletNodes, - parameterSet); + &(*assembler_prestrain), + isometryCoefficients, + dirichletNodes, + parameterSet); RTRsolver.solve(); isometryCoefficients = RTRsolver.getSol(); numerical_energy = RTRsolver.getStatistics().finalEnergy; - } else - DUNE_THROW(Dune::Exception, "Unknown Solver type for bending isometries."); + } else + DUNE_THROW(Dune::Exception, "Unknown Solver type for bending isometries."); // Convert coefficient data structure from 'IsometryCoefficients' to 'VectorSpaceCoefficients' @@ -775,75 +340,44 @@ int main(int argc, char *argv[]) std::string baseNameDefault = "bending-isometries-"; std::string baseName = parameterSet.get("baseName", baseNameDefault); std::string resultFileName = parameterSet.get("resultPath", "") - + "/" + baseName - + "_level" + std::to_string(parameterSet.get<int>("numLevels")); + + "/" + baseName + + "_level" + std::to_string(parameterSet.get<int>("numLevels")); if (parameterSet.get<bool>("conforming_DiscreteJacobian", 1)) resultFileName = resultFileName + "_C"; - else + else resultFileName = resultFileName + "_NC"; - // Create a deformation function but this time with double-types. - using LocalDKFunctionD = GFE::LocalDiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, IsometryCoefficients>; + // Create a deformation function but this time with double-types. + using LocalDKFunctionD = Dune::GFE::DiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, IsometryCoefficients>; LocalDKFunctionD localDKFunctionDouble(deformationBasis, coefficientBasis, isometryCoefficients); if (parameterSet.get<bool>("writeVTK", 1)) { - std::cout << "write VTK..." << std::endl; + std::cout << "write VTK to Filename: " << resultFileName << std::endl; /** * @brief Compute the displacement from the deformation. * interpolate the identity and substract from the coefficient vector. */ VectorSpaceCoefficients identity(deformationBasis.size()); - IdentityGridEmbedding<double> identityGridEmbedding; + Dune::GFE::Impl::IdentityGridEmbedding<double> identityGridEmbedding; interpolate(deformationBasis, identity, identityGridEmbedding); - // auto identity_tmp = identity; - // Compute the displacement auto displacement = x_out; displacement -= identity; // std::cout << "displacement.size():" << displacement.size() << std::endl; - auto deformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, x_out); - auto displacementFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, displacement); + auto deformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(deformationBasis, x_out); + auto displacementFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(deformationBasis, displacement); /** * @brief We need to subsample, because VTK cannot natively display real third-order functions */ int subsamplingRefinement = parameterSet.get<int>("subsamplingRefinement", 2); SubsamplingVTKWriter<GridView> vtkWriter(gridView, Dune::refinementLevels(subsamplingRefinement)); - // SubsamplingVTKWriter<GridView> vtkWriter(gridView, Dune::refinementLevels(2)); - - - - /** - * @brief Basis used to represent normal vector fields - * - */ - auto normalBasis = makeBasis(gridView, - power<3>( - lagrange<1>(), - flatLexicographic())); - // auto normalBasis = makeBasis(gridView, - // power<3>( - // lagrange<1>(), - // blockedInterleaved())); - - - // TEST Compute - - - // auto normalLambda = [deformationFunction](const FieldVector<double,2>& x) - // { - // // deformationfunction.derivative() ... //needs binding?! - - - // } - - /** @@ -851,195 +385,111 @@ int main(int argc, char *argv[]) */ if (parameterSet.get<bool>("vtkwrite_analyticalSolution", 0)) { - // auto pythonAnalyticalSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("u"), pyModule.get("du")); auto pythonAnalyticalSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("displacement"), pyModule.get("displacementGradient")); - - - // deprecated: interpolate ... - // VectorSpaceCoefficients y(deformationBasis.size()); - // interpolate(deformationBasis, y, pythonAnalyticalSolution); - // // Compute the displacement - // auto displacementAnalytical = y; - // // displacementAnalytical -= identity_tmp; - // displacementAnalytical -= identity; - - - // auto pythonIdentity = Python::make_function<FieldVector<double,3>>(IdentityGridEmbedding<double>::operator()) - - - // auto displacementFunctionAnalytical = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, displacementAnalytical); - // auto deformationFunctionAnalytical = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, y); - // vtkWriter.addVertexData(displacementFunctionAnalytical, VTK::FieldInfo("displacement_analytical", VTK::FieldInfo::Type::vector, 3)); - // vtkWriter.addVertexData(deformationFunctionAnalytical, VTK::FieldInfo("deformation_analytical", VTK::FieldInfo::Type::vector, 3)); - vtkWriter.addVertexData((pythonAnalyticalSolution), VTK::FieldInfo("displacement_analytical", VTK::FieldInfo::Type::vector, 3)); /** - * @brief Get the normal vector field of the surface parametrized + * @brief Get the normal vector field of the surface parametrized * by the analytical solution. - * - We represent the normal vector in a first order Lagrange-Power basis ('normalBasis'). */ if (parameterSet.get<bool>("vtkWrite_analyticalSurfaceNormal", 0)) { - // Get the surface normal function. - auto pythonSurfaceNormal = Python::make_function<FieldVector<double,3>>(pyModule.get("surfaceNormal")); - - - // deprecated: interpolate ... - // std::vector<FieldVector<double,3>> normalVectorCoefficients(normalBasis.size()); - // Dune::Functions::interpolate(normalBasis, normalVectorCoefficients, pythonSurfaceNormal); - // auto surfaceNormalAnalytical = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(normalBasis, normalVectorCoefficients); - // vtkWriter.addVertexData(surfaceNormalAnalytical, VTK::FieldInfo("surfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); - - vtkWriter.addVertexData(pythonSurfaceNormal, VTK::FieldInfo("surfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); + // Get the surface normal function. + auto pythonSurfaceNormal = Python::make_function<FieldVector<double,3> >(pyModule.get("surfaceNormal")); + vtkWriter.addVertexData(pythonSurfaceNormal, VTK::FieldInfo("surfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); } } - //------------------------------------------------------------------------------------- TODO: OUTSOURCE - /** - * @brief TEST: Compute the discrete normal vector of the surface parametrized - * by the discrete solution. - */ - auto surfaceNormalDiscreteCoefficients = computeDiscreteSurfaceNormal(localDKFunctionDouble, normalBasis); //------------------------------------------------------------------------------------- - - // Create DiscreteGlobalBasisFunctions. - auto surfaceNormalDiscrete = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(normalBasis, surfaceNormalDiscreteCoefficients); vtkWriter.addVertexData(displacementFunction, VTK::FieldInfo("displacement", VTK::FieldInfo::Type::vector, 3)); - vtkWriter.addVertexData(surfaceNormalDiscrete , VTK::FieldInfo("surfaceNormal_discrete", VTK::FieldInfo::Type::vector, 3)); vtkWriter.write(resultFileName); } - - /** * @brief Measure errors. - * Compute the L2-Error and H1-SemiError as well as the energy difference + * Compute the L2-Error and H1-SemiError as well as the energy difference * between the discrete deformation u_h and the analytical deformation u . */ + // Read reference solution and its derivative into a Python function + auto referenceSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("deformation"), pyModule.get("deformationGradient")); + auto referenceDerivative = derivative(referenceSolution); - // auto deformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, x_out); - // auto localNumericalSolution = localFunction(deformationFunction); - // auto localNumericalSolutionDerivative = derivative(localNumericalSolution); - + using LocalDKFunctionD = Dune::GFE::DiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, IsometryCoefficients>; + LocalDKFunctionD localDKFunctionD(deformationBasis, coefficientBasis, isometryCoefficients); + // QuadratureRule for the integral of the L^2 error + QuadratureRuleKey quadKey(dim,6); + // Trapezoidal-rule: + // std::vector<Dune::QuadraturePoint<double,2>> quadRule = { {{0.0,0.0}, 1.0/6.0}, {{1.0,0.0}, 1.0/6.0}, {{0.0,1.0}, 1.0/6.0} }; - // // Read reference solution and its derivative into a Python function - // using Domain = FieldVector<double, dim>; - // using Range = typename Coefficient::CoordinateType; - // using Range = typename FieldVector<double,3>; - // auto referenceSolution = Python::makeDifferentiableFunction<Range(Domain)>(pyModule.get("udu")); - // auto referenceSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(Domain)>(pyModule.get("udu")); - // auto referenceDerivative = derivative(referenceSolution); - // auto referenceSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("u"), pyModule.get("du")); - auto referenceSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("deformation"), pyModule.get("deformationGradient")); - auto referenceDerivative = derivative(referenceSolution); - - using LocalDKFunctionD = GFE::LocalDiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, IsometryCoefficients>; - LocalDKFunctionD localDKFunctionD(deformationBasis, coefficientBasis, isometryCoefficients); - - // typedef VirtualDifferentiableFunction<FieldVector<double, dim>, typename Coefficient::CoordinateType> FBase; - // auto referenceSolution = pyModule.get("udu").toC<std::shared_ptr<FBase>>(); - - // QuadratureRule for the integral of the L^2 error - QuadratureRuleKey quadKey(dim,6); + // The error to be computed + double l2ErrorSquared = 0; + double h1ErrorSquared = 0; + for (auto&& element : elements(gridView)) + { + localDKFunctionD.bind(element); - // Trapezoidal-rule: - // std::vector<Dune::QuadraturePoint<double,2>> quadRule = { {{0.0,0.0}, 1.0/6.0}, {{1.0,0.0}, 1.0/6.0}, {{0.0,1.0}, 1.0/6.0} }; - // std::cout << "Use Trapezoidal-rule." << std::endl; + // Get quadrature formula + quadKey.setGeometryType(element.type()); + const auto& quadRule = QuadratureRuleCache<double, dim>::rule(quadKey); - // The error to be computed - double l2ErrorSquared = 0; - double h1ErrorSquared = 0; - for (auto&& element : elements(gridView)) + for (auto quadPoint : quadRule) { + auto quadPos = quadPoint.position(); + const auto integrationElement = element.geometry().integrationElement(quadPos); + const auto weight = quadPoint.weight(); - // localNumericalSolution.bind(element); - - localDKFunctionD.bind(element); - - // Get quadrature formula - quadKey.setGeometryType(element.type()); - const auto& quadRule = QuadratureRuleCache<double, dim>::rule(quadKey); - - - for (auto quadPoint : quadRule) - { - auto quadPos = quadPoint.position(); - const auto integrationElement = element.geometry().integrationElement(quadPos); - const auto weight = quadPoint.weight(); - - // auto numValue = localNumericalSolution(quadPos); - auto refValue = referenceSolution(element.geometry().global(quadPos)); - auto numValue = localDKFunctionD.evaluate(quadPos).globalCoordinates(); - - - // printvector(std::cout, numValue, "numValue: ", "--"); - // printvector(std::cout, refValue, "refValue: ", "--"); + auto refValue = referenceSolution(element.geometry().global(quadPos)); + auto numValue = localDKFunctionD.evaluate(quadPos).globalCoordinates(); - auto numDir = localDKFunctionD.evaluateDerivative(quadPos); - auto refDir = referenceDerivative(element.geometry().global(quadPos)); - auto diff = numDir - refDir; + auto numDir = localDKFunctionD.evaluateDerivative(quadPos); + auto refDir = referenceDerivative(element.geometry().global(quadPos)); + auto diff = numDir - refDir; - - // constexpr int blocksize = Coefficient::CoordinateType::dimension; - - // FieldVector<double, blocksize> refValue; - // if (std::dynamic_pointer_cast<const VirtualGridViewFunction<GridView, FieldVector<double, blocksize>>>(referenceSolution)) - // std::dynamic_pointer_cast<const VirtualGridViewFunction<GridView, FieldVector<double, blocksize>>>(referenceSolution)->evaluateLocal(element, quadPos, refValue); - // else - // referenceSolution->evaluate(element.geometry().global(quadPos), refValue); - - // integrate error - l2ErrorSquared += (numValue - refValue)* (numValue - refValue) * weight * integrationElement; - h1ErrorSquared += diff.frobenius_norm2() * weight * integrationElement; - } + // integrate error + l2ErrorSquared += (numValue - refValue)* (numValue - refValue) * weight * integrationElement; + h1ErrorSquared += diff.frobenius_norm2() * weight * integrationElement; } - std::cout << "elements: " << gridView.size(0) - << " " - << "L^2 error: " << std::sqrt(l2ErrorSquared) - << " "; - std::cout << "h^1 error: " << std::sqrt(h1ErrorSquared) << std::endl; - - + } + std::cout << "elements: " << gridView.size(0) + << " " + << "L^2 error: " << std::sqrt(l2ErrorSquared) + << " "; + std::cout << "h^1 error: " << std::sqrt(h1ErrorSquared) << std::endl; + //Check Quantities + if(std::sqrt(l2ErrorSquared) > 1.0) + { + std::cerr << std::setprecision(9); + std::cerr << "L2-error is to large! " << std::endl; + return 1; + } + if(std::sqrt(h1ErrorSquared) > 1.0) + { + std::cerr << std::setprecision(9); + std::cerr << "H1-error is to large! " << std::endl; + return 1; + } + // Compare energy values. + std::cout << "(Final) Energy of discrete solution: " << numerical_energy<< std::endl; + if (parameterSet.get<bool>("compare_EnergyValues", 0)) + { + auto analytical_energy = parameterSet.get<double>("analytical_energy"); + auto energy_difference = std::abs(analytical_energy - numerical_energy); + std::cout << "Analytical energy:" << analytical_energy<< std::endl; // (pi^2)/2.0 + std::cout << "Energy difference: " << energy_difference << std::endl; - //Check Quantities - if(std::sqrt(l2ErrorSquared) > 1.0) - { - std::cerr << std::setprecision(9); - std::cerr << "L2-error is to large! " << std::endl; - return 1; - } - if(std::sqrt(h1ErrorSquared) > 1.0) - { - std::cerr << std::setprecision(9); - std::cerr << "H1-error is to large! " << std::endl; - return 1; - } - // Compare energy values. - // auto numerical_energy = solver.getStatistics().finalEnergy; - // auto analytical_energy = (M_PI*M_PI)/2.0 ; - // auto analytical_energy = (M_PI*M_PI); - std::cout << "(Final) Energy of discrete solution: " << numerical_energy<< std::endl; - if (parameterSet.get<bool>("compare_EnergyValues", 0)) + if(energy_difference > 1.0) { - auto analytical_energy = parameterSet.get<double>("analytical_energy"); - auto energy_difference = std::abs(analytical_energy - numerical_energy); - std::cout << "Analytical energy:" << analytical_energy<< std::endl; // (pi^2)/2.0 - std::cout << "Energy difference: " << energy_difference << std::endl; - - if(energy_difference > 1.0) - { - std::cerr << std::setprecision(9); - std::cerr << "Energy difference: " << energy_difference << " is to large! " << std::endl; - return 1; - } + std::cerr << std::setprecision(9); + std::cerr << "Energy difference: " << energy_difference << " is to large! " << std::endl; + return 1; } + } std::cout << "Total time elapsed: " << globalTimer.elapsed() << std::endl; std::cout << "Test: analyticalcylindertest passed." << std::endl; return 0; - } \ No newline at end of file +} diff --git a/test/hermitebasis-evaluation-test.cc b/test/hermitebasis-evaluation-test.cc index 96de70cbe1974dac9681c406d0c25c6d5939c861..3016ce176331c0f4b5e344aa91c81131db556c1c 100644 --- a/test/hermitebasis-evaluation-test.cc +++ b/test/hermitebasis-evaluation-test.cc @@ -64,7 +64,7 @@ using namespace Dune; /** * @brief Test the interpolation in deformation space. * A linear isometry can be represented exactly in that space. - * compare energy values / L2-error / H1-error + * compare energy values / L2-error / H1-error * for die difference | I_h[u] - u | where u is a given analytic linear isometry */ @@ -84,9 +84,9 @@ int main(int argc, char *argv[]) Python::start(); auto pyMain = Python::main(); pyMain.runStream() - << std::endl << "import math" - << std::endl << "import sys" - << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; + << std::endl << "import math" + << std::endl << "import sys" + << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; auto pyModule = pyMain.import("hermitebasis-evaluation-test"); // parse data file @@ -105,8 +105,8 @@ int main(int argc, char *argv[]) ///////////////////////////////////////// using GridType = UGGrid<dim>; std::shared_ptr<GridType> grid; -// FieldVector<double,dim> lower(0), upper(1); -// std::array<unsigned int,dim> elementsArray; + // FieldVector<double,dim> lower(0), upper(1); + // std::array<unsigned int,dim> elementsArray; // create unstructured grid. std::cout << "Read GMSH grid." << std::endl; @@ -128,7 +128,7 @@ int main(int argc, char *argv[]) /////////////////////////////////////////////////////// // General coefficient vector of a Discrete Kirchhoff deformation function - using VectorSpaceCoefficients = BlockVector<FieldVector<double,3>>; + using VectorSpaceCoefficients = BlockVector<FieldVector<double,3> >; using namespace Functions::BasisFactory; auto deformationBasis = makeBasis(gridView, @@ -157,18 +157,18 @@ int main(int argc, char *argv[]) std::string baseNameDefault = "bending-isometries-"; std::string baseName = parameterSet.get("baseName", baseNameDefault); std::string resultFileName = parameterSet.get("resultPath", "") - + "/" + baseName - + "_level" + std::to_string(parameterSet.get<int>("numLevels")); + + "/" + baseName + + "_level" + std::to_string(parameterSet.get<int>("numLevels")); if (parameterSet.get<bool>("conforming_DiscreteJacobian", 1)) resultFileName = resultFileName + "_C"; - else + else resultFileName = resultFileName + "_NC"; /** - * @brief Compute the displacement from the deformation. - * interpolate the identity and substract from the coefficient vector. - */ + * @brief Compute the displacement from the deformation. + * interpolate the identity and substract from the coefficient vector. + */ VectorSpaceCoefficients identity(deformationBasis.size()); IdentityGridEmbedding<double> identityGridEmbedding; interpolate(deformationBasis, identity, identityGridEmbedding); @@ -176,8 +176,8 @@ int main(int argc, char *argv[]) auto displacement = x; displacement -= identity; - auto deformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, x); - auto displacementFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, displacement); + auto deformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(deformationBasis, x); + auto displacementFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(deformationBasis, displacement); auto deformationFunctionLocal = localFunction(deformationFunction); auto deformationFunctionLocalDerivative = derivative(deformationFunctionLocal); @@ -211,77 +211,77 @@ int main(int argc, char *argv[]) /** - * @brief Compute the L2-Error and H1-SemiError between the discrete deformation u_h and the analytical deformation u - * + * @brief Compute the L2-Error and H1-SemiError between the discrete deformation u_h and the analytical deformation u + * */ - auto referenceSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("deformation"), pyModule.get("deformationGradient")); - auto referenceDerivative = derivative(referenceSolution); + auto referenceSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("deformation"), pyModule.get("deformationGradient")); + auto referenceDerivative = derivative(referenceSolution); - // QuadratureRule for the integral of the L^2 error - QuadratureRuleKey quadKey(dim,6); + // QuadratureRule for the integral of the L^2 error + QuadratureRuleKey quadKey(dim,6); - // The error to be computed - double l2ErrorSquared = 0; - double h1ErrorSquared = 0; + // The error to be computed + double l2ErrorSquared = 0; + double h1ErrorSquared = 0; - for (auto&& element : elements(gridView)) - { + for (auto&& element : elements(gridView)) + { - deformationFunctionLocal.bind(element); - deformationFunctionLocalDerivative.bind(element); + deformationFunctionLocal.bind(element); + deformationFunctionLocalDerivative.bind(element); - // Get quadrature formula - quadKey.setGeometryType(element.type()); - const auto& quad = QuadratureRuleCache<double, dim>::rule(quadKey); + // Get quadrature formula + quadKey.setGeometryType(element.type()); + const auto& quad = QuadratureRuleCache<double, dim>::rule(quadKey); - for (auto quadPoint : quad) - { - auto quadPos = quadPoint.position(); - const auto integrationElement = element.geometry().integrationElement(quadPos); - const auto weight = quadPoint.weight(); + for (auto quadPoint : quad) + { + auto quadPos = quadPoint.position(); + const auto integrationElement = element.geometry().integrationElement(quadPos); + const auto weight = quadPoint.weight(); - auto refValue = referenceSolution(element.geometry().global(quadPos)); - auto numValue = deformationFunctionLocal(quadPos); + auto refValue = referenceSolution(element.geometry().global(quadPos)); + auto numValue = deformationFunctionLocal(quadPos); - auto numDir = deformationFunctionLocalDerivative(quadPos); - auto refDir = referenceDerivative(element.geometry().global(quadPos)); - auto diff = numDir - refDir; + auto numDir = deformationFunctionLocalDerivative(quadPos); + auto refDir = referenceDerivative(element.geometry().global(quadPos)); + auto diff = numDir - refDir; - // // print evaluation difference - // std::cout << "Evaluation difference at quadPoint:(" << element.geometry().global(quadPos) << ") is : "<< numValue-refValue << std::endl; - std::cout << "Evaluation difference (of derivative) at quadPoint:(" << element.geometry().global(quadPos) << ") is : "<< diff << std::endl; - // print discrete function evaluation - // std::cout << "Evaluation of discreteGlobalBasisFunction at quadPoint:(" << element.geometry().global(quadPos) << ") is : "<< numValue << std::endl; - std::cout << "Evaluation of discreteGlobalBasisFunction-derivative at quadPoint:(" << element.geometry().global(quadPos) << ") is : "<< numDir << std::endl; + // // print evaluation difference + // std::cout << "Evaluation difference at quadPoint:(" << element.geometry().global(quadPos) << ") is : "<< numValue-refValue << std::endl; + std::cout << "Evaluation difference (of derivative) at quadPoint:(" << element.geometry().global(quadPos) << ") is : "<< diff << std::endl; + // print discrete function evaluation + // std::cout << "Evaluation of discreteGlobalBasisFunction at quadPoint:(" << element.geometry().global(quadPos) << ") is : "<< numValue << std::endl; + std::cout << "Evaluation of discreteGlobalBasisFunction-derivative at quadPoint:(" << element.geometry().global(quadPos) << ") is : "<< numDir << std::endl; - // integrate error - l2ErrorSquared += (numValue - refValue)* (numValue - refValue) * weight * integrationElement; - h1ErrorSquared += diff.frobenius_norm2() * weight * integrationElement; - } - } - std::cout << "elements: " << gridView.size(0) - << " " - << "L^2 error: " << std::sqrt(l2ErrorSquared) - << " "; - std::cout << "h^1 error: " << std::sqrt(h1ErrorSquared) << std::endl; - - - //Check Quantities - if( std::sqrt(l2ErrorSquared) > 1e-12) - { - std::cerr << std::setprecision(9); - std::cerr << "L2-error is to large! " << std::endl; - return 1; - } - if( std::sqrt(h1ErrorSquared) > 1e-12) - { - std::cerr << std::setprecision(9); - std::cerr << "H1-error is to large! " << std::endl; - return 1; + // integrate error + l2ErrorSquared += (numValue - refValue)* (numValue - refValue) * weight * integrationElement; + h1ErrorSquared += diff.frobenius_norm2() * weight * integrationElement; } + } + std::cout << "elements: " << gridView.size(0) + << " " + << "L^2 error: " << std::sqrt(l2ErrorSquared) + << " "; + std::cout << "h^1 error: " << std::sqrt(h1ErrorSquared) << std::endl; + + + //Check Quantities + if( std::sqrt(l2ErrorSquared) > 1e-12) + { + std::cerr << std::setprecision(9); + std::cerr << "L2-error is to large! " << std::endl; + return 1; + } + if( std::sqrt(h1ErrorSquared) > 1e-12) + { + std::cerr << std::setprecision(9); + std::cerr << "H1-error is to large! " << std::endl; + return 1; + } std::cout << "Total time elapsed: " << globalTimer.elapsed() << std::endl; std::cout << "Test: hermitebasis-evaluation-test passed." << std::endl; return 0; - } \ No newline at end of file +} diff --git a/test/linearisometrytest.cc b/test/linearisometrytest.cc index 905119b539397734ca1ea4da9cccf208396bf447..2d55b69846838221f37a53f495fcbdd8668ebc1c 100644 --- a/test/linearisometrytest.cc +++ b/test/linearisometrytest.cc @@ -13,27 +13,26 @@ #include <dune/fufem/utilities/adolcnamespaceinjections.hh> #include <dune/common/typetraits.hh> - #include <dune/common/bitsetvector.hh> #include <dune/common/parametertree.hh> #include <dune/common/parametertreeparser.hh> #include <dune/grid/uggrid.hh> #include <dune/grid/utility/structuredgridfactory.hh> - #include <dune/grid/io/file/gmshreader.hh> #include <dune/grid/io/file/vtk.hh> #include <dune/functions/gridfunctions/discreteglobalbasisfunction.hh> +#include <dune/functions/gridfunctions/composedgridfunction.hh> +#include <dune/functions/functionspacebases/cubichermitebasis.hh> #include <dune/functions/functionspacebases/lagrangebasis.hh> #include <dune/functions/functionspacebases/powerbasis.hh> #include <dune/functions/functionspacebases/interpolate.hh> -#include <dune/functions/functionspacebases/reducedcubichermitetrianglebasis.hh> + #include <dune/fufem/boundarypatch.hh> #include <dune/fufem/functiontools/boundarydofs.hh> #include <dune/fufem/dunepython.hh> - #include <dune/fufem/discretizationerror.hh> #include <dune/solvers/solvers/iterativesolver.hh> @@ -42,24 +41,21 @@ #include <dune/gfe/spaces/productmanifold.hh> #include <dune/gfe/spaces/realtuple.hh> #include <dune/gfe/spaces/rotation.hh> -#include <dune/gfe/localdiscretekirchhoffbendingisometry.hh> +#include <dune/gfe/functions/discretekirchhoffbendingisometry.hh> +#include <dune/gfe/functions/embeddedglobalgfefunction.hh> +#include <dune/gfe/functions/localprojectedfefunction.hh> #include <dune/gfe/assemblers/localgeodesicfeadolcstiffness.hh> -#include <dune/gfe/assemblers/harmonicenergy.hh> #include <dune/gfe/assemblers/geodesicfeassembler.hh> +#include <dune/gfe/assemblers/discretekirchhoffbendingenergy.hh> +#include <dune/gfe/assemblers/forceenergy.hh> +#include <dune/gfe/assemblers/sumenergy.hh> +#include <dune/gfe/bendingisometryhelper.hh> #include <dune/gfe/riemannianpnsolver.hh> -#include <dune/gfe/embeddedglobalgfefunction.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergy.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergyconforming.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergyzienkiewicz.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergyzienkiewiczprojected.hh> -// #include <dune/gfe/energies/discretekirchhoffbendingenergyprestrained.hh> +#include <dune/gfe/riemanniantrsolver.hh> +#include <dune/microstructure/bendingisometryaddons.hh> #include <dune/microstructure/energies/discretekirchhoffbendingenergyprestrained.hh> -#include <dune/gfe/spaces/stiefelmanifold.hh> -// #include <dune/gfe/spaces/stiefelmatrix.hh> - - #include <dune/gmsh4/gmsh4reader.hh> #include <dune/gmsh4/gridcreators/lagrangegridcreator.hh> @@ -67,341 +63,17 @@ const int dim = 2; using namespace Dune; - /** * @brief Test the interpolation in deformation space. * A linear isometry can be represented exactly in that space. - * compare energy values / L2-error / H1-error + * compare energy values / L2-error / H1-error * for die difference | I_h[u] - u | where u is a given analytic linear isometry */ -// /** -// * @brief Comparison of different function definitions for debugging purposes. -// * TODO: remove later -// */ -// template<class LocalDiscreteKirchhoffFunction,class DeformationFunction, class GridView> -// auto compare(LocalDiscreteKirchhoffFunction& kirchhoffFunction, -// DeformationFunction& deformationFunction, -// GridView& gridView) -// { -// std::cout << "COMPARE:" << std::endl; -// auto localDeformation = localFunction(deformationFunction); -// auto rotation = derivative(deformationFunction); -// auto localRotation = localFunction(rotation); -// auto localRotation_2 = derivative(localDeformation); -// for (const auto &element : elements(gridView)) -// { -// auto geometry = element.geometry(); - -// kirchhoffFunction.bind(element); -// localDeformation.bind(element); -// localRotation.bind(element); -// localRotation_2.bind(element); - -// //evaluate at nodes: -// for (int i=0; i<geometry.corners(); i++) -// { -// auto kirchhoffOut = kirchhoffFunction.evaluate(geometry.local(geometry.corner(i))).globalCoordinates(); -// auto KirchhoffRot = kirchhoffFunction.evaluateDerivative(geometry.local(geometry.corner(i))); -// //Test -// const auto& jacobian = geometry.jacobian(geometry.corner(i)); -// printmatrix(std::cout, jacobian, "jacobianInverse:", "--"); - -// auto defOut = localDeformation(geometry.local(geometry.corner(i))); -// auto defRot = localRotation(geometry.local(geometry.corner(i))); -// auto defRot_2 = localRotation_2(geometry.local(geometry.corner(i))); - -// printvector(std::cout, kirchhoffOut, "kirchhoffOut:", "--"); -// printvector(std::cout, defOut, "defOut:", "--"); -// printmatrix(std::cout, KirchhoffRot, "KirchhoffRot:", "--"); -// printmatrix(std::cout, defRot, "defRot:", "--"); -// // printmatrix(std::cout, defRot*jacobian, "defRot*jacobian:", "--"); // deprecated: when ReducedCubicHermite returned values in globalCoordinates, this was actually neccessary to get the right values. -// } -// } -// } - - -// /** -// * @brief Test that checks the isometry constraint at the nodes of the Triangulation -// */ -// template<class LocalDiscreteKirchhoffFunction, class GridView> -// auto nodewiseIsometryTest(LocalDiscreteKirchhoffFunction& deformationFunction, -// GridView& gridView) -// { -// for (const auto &element : elements(gridView)) -// { -// auto geometry = element.geometry(); -// deformationFunction.bind(element); -// // evaluate at nodes: -// for (int i=0; i<geometry.corners(); i++) -// { -// // auto out = deformationFunction.evaluate(geometry.local(geometry.corner(i))).globalCoordinates(); -// auto rot = deformationFunction.evaluateDerivative(geometry.local(geometry.corner(i))); -// FieldMatrix<double,2,2> I = ScaledIdentityMatrix<double,2>(1); -// auto diff = (rot.transposed()*rot) - I; -// // std::cout << "diff.frobenius_norm():" << diff.frobenius_norm() << std::endl; -// if(diff.frobenius_norm()>1e-8) -// DUNE_THROW(Exception, "Nodewise Isometry Test failed! with error"<< diff.frobenius_norm()); -// } -// } -// std::cout << "nodewiseIsometryTest passed." << std::endl; -// } - - -// template<class DeformationFunction> -// auto nodewiseIsometryTest(DeformationFunction& deformationGridViewFunction) -// { -// auto localDeformation = localFunction(deformationGridViewFunction); -// auto localRotation = derivative(localDeformation); -// auto gridView = deformationGridViewFunction.basis().gridView(); -// for (const auto &element : elements(gridView)) -// { -// auto geometry = element.geometry(); -// localDeformation.bind(element); -// localRotation.bind(element); - -// // evaluate at nodes: -// for (int i=0; i<geometry.corners(); i++) -// { -// auto rot = localRotation(geometry.local(geometry.corner(i))); -// auto product = rot.transposed()*rot; - -// FieldMatrix<double,2,2> I = ScaledIdentityMatrix<double,2>(1); -// auto diff = (rot.transposed()*rot) - I; - -// if(diff.frobenius_norm()>1e-8) -// DUNE_THROW(Exception, "Nodewise Isometry Test failed! with error"<< diff.frobenius_norm()); -// } -// } -// std::cout << "nodewiseIsometryTest passed." << std::endl; -// } - - - -// /** \brief The identity function in R^d, and its derivative -// * -// * This is needed to compute the displacement from the deformation (for visualization). -// * Since we want to represent it in a Hermite finite element space, we need -// * the derivative as well. -// * -// * Is there no shorter way to implement this? -// */ -// template<class K> -// class IdentityGridEmbedding -// { -// public: -// //! Evaluate identity -// FieldVector<K,3> operator() (const FieldVector<K,2>& x) const -// { -// return {x[0], x[1], 0.0}; -// } - -// /** -// * \brief Obtain derivative of identity function -// */ -// friend auto derivative(const IdentityGridEmbedding& p) -// { -// return [](const FieldVector<K,dim>& x) { return FieldMatrix<K,3,2>({{1,0}, {0,1}, {0,0}}); }; -// } -// }; - -// /** \brief Project a vector field onto a product of ReducedHermiteTriangle spaces -// * -// * \todo This functionality should be provided by dune-functions. It currently isn't, -// * because ReducedHermiteTriangleBasis is not an affine finite element. -// */ -// template <class Basis, class Coefficients, class Function> -// void interpolate(const Basis& basis, Coefficients& coefficients, Function& f) -// { -// coefficients.resize(basis.size()); -// // coefficients.resize(basis.dimension()); -// auto localView = basis.localView(); - -// for (auto&& e : elements(basis.gridView())) -// { -// localView.bind(e); - -// // Loop over the corners -// for (std::size_t i=0; i<3; i++) -// { -// auto pos = e.geometry().corner(i); -// auto value = f(pos); -// auto der = derivative(f)(pos); - -// // printvector(std::cout, value, "value:", "--"); -// // printmatrix(std::cout, der, "der:", "--"); - -// // std::cout << "sin(x):" << sin(pos[0]) << std::endl; -// // std::cout << "cos(x):" << cos(pos[0]) << std::endl; -// // printvector(std::cout, pos, "pos: ", "--"); - -// // Loop over components of power basis -// for(std::size_t k=0; k<3 ; k++) -// { -// auto localIdx_0 = localView.tree().child(k).localIndex(i); // index for values -// auto localIdx_1 = localView.tree().child(k).localIndex(i+3); // index for partial derivatives w.r.t. x -// auto localIdx_2 = localView.tree().child(k).localIndex(i+6); // index for partial derivatives w.r.t. y -// // std::cout << "localIdx_0: " << localIdx_0 << std::endl; -// // std::cout << "localIdx_1: " << localIdx_1 << std::endl; -// // std::cout << "localIdx_2: " << localIdx_2 << std::endl; - -// auto globalIdx_0 = localView.index(localIdx_0); -// auto globalIdx_1 = localView.index(localIdx_1); -// auto globalIdx_2 = localView.index(localIdx_2); -// // std::cout << "globalIdx_0: " << globalIdx_0 << std::endl; -// // std::cout << "globalIdx_1: " << globalIdx_1 << std::endl; -// // std::cout << "globalIdx_2: " << globalIdx_2 << std::endl; - -// coefficients[globalIdx_0[0]][globalIdx_0[1]] = value[k]; -// coefficients[globalIdx_1[0]][globalIdx_1[1]] = der[k][0]; -// coefficients[globalIdx_2[0]][globalIdx_2[1]] = der[k][1]; -// } -// } - -// } -// } - -// /** -// * @brief Data structure conversion from 'VectorSpaceCoefficients' to 'IsometryCoefficients'. -// * TODO: Throw an error if rotation-part is not orthogonal? (expensive to check) -// */ -// template<class DiscreteKirchhoffBasis, class CoefficientBasis, class Coefficients, class IsometryCoefficients> -// void vectorToIsometryCoefficientMap(const DiscreteKirchhoffBasis& discreteKirchhoffBasis, -// const CoefficientBasis& coefficientBasis, -// const Coefficients& vectorCoefficients, -// IsometryCoefficients& isometryCoefficients) -// { -// std::cout << "calling vectorToIsometryCoefficientMap" << std::endl; -// auto localView = discreteKirchhoffBasis.localView(); -// auto localViewCoefficients = coefficientBasis.localView(); - -// using RT = typename IsometryCoefficients::value_type::ctype; - -// for (const auto &element : elements(coefficientBasis.gridView())) -// { -// localView.bind(element); -// localViewCoefficients.bind(element); - -// // Loop over the corners -// for (std::size_t c=0; c<3; c++) -// { -// size_t localIdxOut = localViewCoefficients.tree().localIndex(c); -// size_t globalIdxOut = localViewCoefficients.index(localIdxOut); - -// FieldVector<RT,3> currentDeformation(0); -// FieldVector<RT,3> currentDerivative_x(0); -// FieldVector<RT,3> currentDerivative_y(0); - -// // Loop over components of power basis -// for(std::size_t k=0; k<3 ; k++) -// { -// auto localIdx_0 = localView.tree().child(k).localIndex(c); // index for values -// auto localIdx_1 = localView.tree().child(k).localIndex(c+3); // index for partial derivatives w.r.t. x -// auto localIdx_2 = localView.tree().child(k).localIndex(c+6); // index for partial derivatives w.r.t. y -// // std::cout << "localIdx_0: " << localIdx_0 << std::endl; -// // std::cout << "localIdx_1: " << localIdx_1 << std::endl; -// // std::cout << "localIdx_2: " << localIdx_2 << std::endl; - -// auto globalIdx_0 = localView.index(localIdx_0); -// auto globalIdx_1 = localView.index(localIdx_1); -// auto globalIdx_2 = localView.index(localIdx_2); - -// // blockedInterleaved -- Version -// currentDeformation[k] = vectorCoefficients[globalIdx_0[0]][globalIdx_0[1]]; -// currentDerivative_x[k] = vectorCoefficients[globalIdx_1[0]][globalIdx_1[1]]; -// currentDerivative_y[k] = vectorCoefficients[globalIdx_2[0]][globalIdx_2[1]]; - -// } - -// //cross product to get last column of rotation matrix -// FieldVector<RT,3> cross = {currentDerivative_x[1]*currentDerivative_y[2] - currentDerivative_x[2]*currentDerivative_y[1], -// currentDerivative_x[2]*currentDerivative_y[0] - currentDerivative_x[0]*currentDerivative_y[2], -// currentDerivative_x[0]*currentDerivative_y[1] - currentDerivative_x[1]*currentDerivative_y[0]}; - -// FieldMatrix<RT,3,3> rotMatrix(0); -// for(std::size_t k=0; k<3 ; k++) -// { -// rotMatrix[k][0] = currentDerivative_x[k]; -// rotMatrix[k][1] = currentDerivative_y[k]; -// rotMatrix[k][2] = cross[k]; -// } -// // printmatrix(std::cout, rotMatrix, "rotMatrix:", "--"); -// using namespace Dune::Indices; -// isometryCoefficients[globalIdxOut][_1].set(rotMatrix); //TODO: Throw if matrix is not orthogonal? -// isometryCoefficients[globalIdxOut][_0] = (RealTuple<RT, 3>)currentDeformation; -// } -// } -// } - - -// /** -// * @brief Data structure conversion from 'IsometryCoefficients' to 'VectorSpaceCoefficients'. -// */ -// template<class DiscreteKirchhoffBasis, class CoefficientBasis, class Coefficients, class IsometryCoefficients> -// void isometryToVectorCoefficientMap(const DiscreteKirchhoffBasis& discreteKirchhoffBasis, -// const CoefficientBasis& coefficientBasis, -// Coefficients& coefficients, -// const IsometryCoefficients& isometryCoefficients) -// { -// std::cout << "calling isometryToVectorCoefficientMap" << std::endl; -// auto localView = discreteKirchhoffBasis.localView(); -// auto localViewCoefficients = coefficientBasis.localView(); - -// for (const auto &element : elements(coefficientBasis.gridView())) -// { -// localView.bind(element); -// localViewCoefficients.bind(element); - -// // Loop over the corners -// for (std::size_t c=0; c<3; c++) -// { -// size_t localIdx = localViewCoefficients.tree().localIndex(c); -// size_t globalIdx = localViewCoefficients.index(localIdx); - -// // Loop over components of power basis -// for(std::size_t k=0; k<3 ; k++) -// { -// auto localIdx_0 = localView.tree().child(k).localIndex(c); // index for values -// auto localIdx_1 = localView.tree().child(k).localIndex(c+3); // index for partial derivatives w.r.t. x -// auto localIdx_2 = localView.tree().child(k).localIndex(c+6); // index for partial derivatives w.r.t. y -// // std::cout << "localIdx_0: " << localIdx_0 << std::endl; -// // std::cout << "localIdx_1: " << localIdx_1 << std::endl; -// // std::cout << "localIdx_2: " << localIdx_2 << std::endl; - -// auto globalIdxOut_0 = localView.index(localIdx_0); -// auto globalIdxOut_1 = localView.index(localIdx_1); -// auto globalIdxOut_2 = localView.index(localIdx_2); - -// using namespace Dune::Indices; -// auto deformation = isometryCoefficients[globalIdx][_0].globalCoordinates(); -// auto rotation1 = isometryCoefficients[globalIdx][_1].director(0); -// auto rotation2 = isometryCoefficients[globalIdx][_1].director(1); - -// coefficients[globalIdxOut_0[0]][globalIdxOut_0[1]] = deformation[k]; -// coefficients[globalIdxOut_1[0]][globalIdxOut_1[1]] = rotation1[k]; -// coefficients[globalIdxOut_2[0]][globalIdxOut_2[1]] = rotation2[k]; -// } -// } -// } -// } - - int main(int argc, char *argv[]) { - /** - * @brief We use this to catch a 'Floating point exception' caused by the 'innerSolver' - * in RiemannianProximalNewton - */ - std::shared_ptr<void(int)> handler( - signal(SIGFPE, [](int signum) {throw std::logic_error("FPE"); }), - [](__sighandler_t f) { signal(SIGFPE, f); }); - - - - feenableexcept(FE_INVALID); - MPIHelper::instance(argc, argv); Dune::Timer globalTimer; @@ -415,9 +87,9 @@ int main(int argc, char *argv[]) Python::start(); auto pyMain = Python::main(); pyMain.runStream() - << std::endl << "import math" - << std::endl << "import sys" - << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; + << std::endl << "import math" + << std::endl << "import sys" + << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; auto pyModule = pyMain.import("linearisometrytest"); // parse data file @@ -436,9 +108,6 @@ int main(int argc, char *argv[]) ///////////////////////////////////////// using GridType = UGGrid<dim>; std::shared_ptr<GridType> grid; -// FieldVector<double,dim> lower(0), upper(1); -// std::array<unsigned int,dim> elementsArray; - // create unstructured grid. std::cout << "Read GMSH grid." << std::endl; GridFactory<GridType> factory; @@ -459,16 +128,16 @@ int main(int argc, char *argv[]) /////////////////////////////////////////////////////// // General coefficient vector of a Discrete Kirchhoff deformation function - using VectorSpaceCoefficients = BlockVector<FieldVector<double,3>>; + using VectorSpaceCoefficients = BlockVector<FieldVector<double,3> >; // Coefficient vector of a Discrete Kirchhoff deformation function that is constrained to be an isometry - using Coefficient = GFE::ProductManifold<RealTuple<double,3>, Rotation<double,3> >; + using Coefficient = GFE::ProductManifold<GFE::RealTuple<double,3>, GFE::Rotation<double,3> >; using IsometryCoefficients = std::vector<Coefficient>; using namespace Functions::BasisFactory; auto deformationBasis = makeBasis(gridView, - power<3>(reducedCubicHermiteTriangle(), + power<3>(reducedCubicHermite(), blockedInterleaved())); @@ -480,36 +149,40 @@ int main(int argc, char *argv[]) // A basis for the tangent space (used to set DirichletNodes) auto tangentBasis = makeBasis(gridView, power<Coefficient::TangentVector::dimension>( - lagrange<1>(), - blockedInterleaved())); + lagrange<1>(), + blockedInterleaved())); /////////////////////////////////////////// - // Read Dirichlet values + // Read Dirichlet values /////////////////////////////////////////// - BitSetVector<1> dirichletVertices(gridView.size(dim), false); const typename GridView::IndexSet &indexSet = gridView.indexSet(); + BitSetVector<Coefficient::TangentVector::dimension> dirichletNodes(tangentBasis.size(), false); //tangentBasis.size()=coefficientBasis.size() // Make Python function that computes which vertices are on the Dirichlet boundary, // based on the vertex positions. auto dirichletIndicatorFunction = Python::make_function<bool>(pyModule.get("dirichlet_indicator")); + // If we want to clamp DOFs inside the domain, we cannot use 'BoundaryPatch' + // and 'constructBoundaryDofs'. This is a workaround for now. for (auto &&vertex : vertices(gridView)) - dirichletVertices[indexSet.index(vertex)] = dirichletIndicatorFunction(vertex.geometry().corner(0)); + { + if(dirichletIndicatorFunction(vertex.geometry().corner(0))) + { + dirichletNodes[indexSet.index(vertex)] = true; + } - BoundaryPatch<GridView> dirichletBoundary(gridView, dirichletVertices); - BitSetVector<Coefficient::TangentVector::dimension> dirichletNodes(tangentBasis.size(), false); - constructBoundaryDofs(dirichletBoundary, tangentBasis, dirichletNodes); + } + // deprecated: + // BoundaryPatch<GridView> dirichletBoundary(gridView, dirichletVertices); + // constructBoundaryDofs(dirichletBoundary, tangentBasis, dirichletNodes); /////////////////////////////////////////// // Get initial Iterate /////////////////////////////////////////// auto pythonInitialIterate = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("f"), pyModule.get("df")); - VectorSpaceCoefficients x(deformationBasis.size()); - - IdentityGridEmbedding<double> identityGridEmbedding; - // interpolate(deformationBasis, x, identityGridEmbedding); + Dune::GFE::Impl::IdentityGridEmbedding<double> identityGridEmbedding; interpolate(deformationBasis, x, pythonInitialIterate); // Interpolation on a python function //////////////////////////////////////////////////////////////////////// @@ -522,8 +195,8 @@ int main(int argc, char *argv[]) /** - * @brief We need to setup LocalDiscreteKirchhoffBendingIsometry with a coefficient - * vector of ctype 'adouble' while the solver gets a coefficient vector + * @brief We need to setup LocalDiscreteKirchhoffBendingIsometry with a coefficient + * vector of ctype 'adouble' while the solver gets a coefficient vector * of ctype 'double'. */ IsometryCoefficients isometryCoefficients(coefficientBasis.size()); @@ -535,40 +208,19 @@ int main(int argc, char *argv[]) std::cout << "deformationBasis.dimension():" << deformationBasis.dimension() << std::endl; - /** - * @brief TEST: compute isometry error - */ - auto initialDeformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, x); - // nodewiseIsometryTest(initialDeformationFunction); - + // Test TEST: compute isometry error + auto initialDeformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(deformationBasis, x); + nodewiseIsometryTest(initialDeformationFunction); + using namespace Dune::GFE::Impl; // Convert coefficient data structure from 'VectorSpaceCoefficients' to 'IsometryCoefficients' vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x,isometryCoefficients); vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x,isometryCoefficients_adouble); - - /** - * @brief TEST: conversion of coefficient vectors (back & forth) - */ - VectorSpaceCoefficients x_convert = x; - IsometryCoefficients isometryCoefficientsTMP(coefficientBasis.size()); - vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x_convert,isometryCoefficientsTMP); - isometryToVectorCoefficientMap(deformationBasis,coefficientBasis,x_convert,isometryCoefficientsTMP); - //Check difference - for(int i=0; i<x.size(); i++) - { - if((x[i]-x_convert[i]).two_norm() > 1e-4) - std::cout << "Coefficient conversion failed! with x[i]-x_convert[i]:" << x[i]-x_convert[i] << std::endl; - } - - - - - using DeformationBasis = decltype(deformationBasis); - using LocalDKFunction = GFE::LocalDiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, AIsometryCoefficients>; + using LocalDKFunction = Dune::GFE::DiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, AIsometryCoefficients>; LocalDKFunction localDKFunction(deformationBasis, coefficientBasis, isometryCoefficients_adouble); nodewiseIsometryTest(localDKFunction, gridView); @@ -577,7 +229,7 @@ int main(int argc, char *argv[]) /** * @brief Get force term */ - auto pythonForce = Python::make_function<FieldVector<double,3>>(pyModule.get("force")); + auto pythonForce = Python::make_function<FieldVector<double,3> >(pyModule.get("force")); // auto forceGVF = Dune::Functions::makeGridViewFunction(dummyForce, gridView); auto forceGVF = Dune::Functions::makeGridViewFunction(pythonForce, gridView); auto localForce = localFunction(forceGVF); @@ -586,7 +238,7 @@ int main(int argc, char *argv[]) /** * @brief Get effective prestrain Tensor */ - Dune::FieldVector<adouble,3> Beffvec = parameterSet.get<Dune::FieldVector<adouble,3>>("effectivePrestrain", {0.0, 0.0, 0.0}); + Dune::FieldVector<adouble,3> Beffvec = parameterSet.get<Dune::FieldVector<adouble,3> >("effectivePrestrain", {0.0, 0.0, 0.0}); Dune::FieldMatrix<adouble,2,2> effectivePrestrain = {{(adouble)Beffvec[0], (adouble)Beffvec[2]}, {(adouble)Beffvec[2],(adouble)Beffvec[1]} }; printmatrix(std::cout, effectivePrestrain, "effective prestrain (Beff): ", "--"); @@ -594,69 +246,51 @@ int main(int argc, char *argv[]) /** * @brief Get effective quadratic form */ - Dune::FieldVector<adouble,6> Qhomvec = parameterSet.get<Dune::FieldVector<adouble,6>>("effectiveQuadraticForm", {1.0, 1.0, 1.0, 0.0, 0.0, 0.0}); - Dune::FieldMatrix<adouble,3,3> Qhom = {{(adouble)Qhomvec[0], (adouble)Qhomvec[3], (adouble)Qhomvec[4]}, - {(adouble)Qhomvec[3], (adouble)Qhomvec[1], (adouble)Qhomvec[5]}, - {(adouble)Qhomvec[4], (adouble)Qhomvec[5], (adouble)Qhomvec[2]}}; + Dune::FieldVector<adouble,6> Qhomvec = parameterSet.get<Dune::FieldVector<adouble,6> >("effectiveQuadraticForm", {1.0, 1.0, 1.0, 0.0, 0.0, 0.0}); + Dune::FieldMatrix<adouble,3,3> Qhom = {{(adouble)Qhomvec[0], (adouble)Qhomvec[3], (adouble)Qhomvec[4]}, + {(adouble)Qhomvec[3], (adouble)Qhomvec[1], (adouble)Qhomvec[5]}, + {(adouble)Qhomvec[4], (adouble)Qhomvec[5], (adouble)Qhomvec[2]}}; printmatrix(std::cout, Qhom, "effective quadratic form (Qhom): ", "--"); - // Assembler using ADOL-C - /** - * @brief Setup nonconforming energy - */ - auto localEnergy_nonconforming = std::make_shared<GFE::DiscreteKirchhoffBendingEnergy<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce); - /** - * @brief Setup conforming energy (WIP) - */ - auto localEnergy_conforming = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyZienkiewicz<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce); - // auto localEnergy_conforming = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyZienkiewiczProjected<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce); - /** - * @brief Setup energy featuring prestrain - */ - // auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce, Qhom, effectivePrestrain); - auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce, parameterSet, pyModule); + // The energy consists of two parts: 1. A bending energy contribution and 2. Contribution from a force term. + auto sumEnergy = std::make_shared<GFE::SumEnergy<CoefficientBasis, GFE::RealTuple<adouble,3>, GFE::Rotation<adouble,3> > >(); + + // Setup prestrained bending energy. + auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, ACoefficient> >(localDKFunction, parameterSet, pyModule); + // Setup force energy. + auto forceEnergy = std::make_shared<GFE::ForceEnergy<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient> >(localDKFunction, localForce); + sumEnergy->addLocalEnergy(localEnergy_prestrain); + sumEnergy->addLocalEnergy(forceEnergy); + + // Setup the assembler. + auto localGFEADOLCStiffness_prestrain = std::make_shared<Dune::GFE::LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> >(sumEnergy); + std::shared_ptr<Dune::GFE::GeodesicFEAssembler<CoefficientBasis, Coefficient> > assembler_prestrain; + assembler_prestrain = std::make_shared<Dune::GFE::GeodesicFEAssembler<CoefficientBasis, Coefficient> >(coefficientBasis, localGFEADOLCStiffness_prestrain); - LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_conforming(localEnergy_conforming.get()); - LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_nonconforming(localEnergy_nonconforming.get()); - LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_prestrain(localEnergy_prestrain.get()); - GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_conforming(coefficientBasis, localGFEADOLCStiffness_conforming); - GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_nonconforming(coefficientBasis, localGFEADOLCStiffness_nonconforming); - GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_prestrain(coefficientBasis, localGFEADOLCStiffness_prestrain); // ///////////////////////////////////////////////// // Create a Riemannian trust-region solver // ///////////////////////////////////////////////// - RiemannianProximalNewtonSolver<CoefficientBasis, Coefficient> solver; - - - - if (parameterSet.get<bool>("prestrainFlag", 0)) - solver.setup(*grid, - &assembler_prestrain, - isometryCoefficients, - dirichletNodes, - parameterSet); - else if (parameterSet.get<bool>("conforming_DiscreteJacobian", 1)) - solver.setup(*grid, - &assembler_conforming, - isometryCoefficients, - dirichletNodes, - parameterSet); - else - solver.setup(*grid, - &assembler_nonconforming, - isometryCoefficients, - dirichletNodes, - parameterSet); + /** + * @brief Create a solver: + * - Adaptively Regularized Riemannian Newton (ARRN) [default] + */ + Dune::GFE::RiemannianProximalNewtonSolver<CoefficientBasis, Coefficient> ARRNsolver; + + + ARRNsolver.setup(*grid, + &(*assembler_prestrain), + isometryCoefficients, + dirichletNodes, + parameterSet); // ///////////////////////////////////////////////////// // Solve! // ///////////////////////////////////////////////////// - // solver.setInitialIterate(isometryCoefficients); - solver.solve(); - isometryCoefficients = solver.getSol(); + ARRNsolver.solve(); + isometryCoefficients = ARRNsolver.getSol(); // Convert coefficient data structure from 'IsometryCoefficients' to 'VectorSpaceCoefficients' VectorSpaceCoefficients x_out(deformationBasis.size()); @@ -668,16 +302,16 @@ int main(int argc, char *argv[]) std::string baseNameDefault = "bending-isometries-"; std::string baseName = parameterSet.get("baseName", baseNameDefault); std::string resultFileName = parameterSet.get("resultPath", "") - + "/" + baseName - + "_level" + std::to_string(parameterSet.get<int>("numLevels")); + + "/" + baseName + + "_level" + std::to_string(parameterSet.get<int>("numLevels")); if (parameterSet.get<bool>("conforming_DiscreteJacobian", 1)) resultFileName = resultFileName + "_C"; - else + else resultFileName = resultFileName + "_NC"; - // Create a deformation function but this time with double-types. - using LocalDKFunctionD = GFE::LocalDiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, IsometryCoefficients>; + // Create a deformation function but this time with double-types. + using LocalDKFunctionD = Dune::GFE::DiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, IsometryCoefficients>; LocalDKFunctionD localDKFunctionDouble(deformationBasis, coefficientBasis, isometryCoefficients); @@ -690,7 +324,7 @@ int main(int argc, char *argv[]) * interpolate the identity and substract from the coefficient vector. */ VectorSpaceCoefficients identity(deformationBasis.size()); - IdentityGridEmbedding<double> identityGridEmbedding; + Dune::GFE::Impl::IdentityGridEmbedding<double> identityGridEmbedding; interpolate(deformationBasis, identity, identityGridEmbedding); // auto identity_tmp = identity; @@ -700,8 +334,8 @@ int main(int argc, char *argv[]) displacement -= identity; // std::cout << "displacement.size():" << displacement.size() << std::endl; - auto deformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, x_out); - auto displacementFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, displacement); + auto deformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(deformationBasis, x_out); + auto displacementFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(deformationBasis, displacement); /** * @brief We need to subsample, because VTK cannot natively display real third-order functions @@ -712,31 +346,6 @@ int main(int argc, char *argv[]) - /** - * @brief Basis used to represent normal vector fields - * - */ - auto normalBasis = makeBasis(gridView, - power<3>( - lagrange<1>(), - flatLexicographic())); - // auto normalBasis = makeBasis(gridView, - // power<3>( - // lagrange<1>(), - // blockedInterleaved())); - - - // TEST Compute - - - // auto normalLambda = [deformationFunction](const FieldVector<double,2>& x) - // { - // // deformationfunction.derivative() ... //needs binding?! - - - // } - - /** @@ -744,147 +353,108 @@ int main(int argc, char *argv[]) */ if (parameterSet.get<bool>("vtkwrite_analyticalSolution", 0)) { - // auto pythonAnalyticalSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("u"), pyModule.get("du")); auto pythonAnalyticalSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("displacement"), pyModule.get("displacementGradient")); - - - // deprecated: interpolate ... - // VectorSpaceCoefficients y(deformationBasis.size()); - // interpolate(deformationBasis, y, pythonAnalyticalSolution); - // // Compute the displacement - // auto displacementAnalytical = y; - // // displacementAnalytical -= identity_tmp; - // displacementAnalytical -= identity; - - - // auto pythonIdentity = Python::make_function<FieldVector<double,3>>(IdentityGridEmbedding<double>::operator()) - - - // auto displacementFunctionAnalytical = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, displacementAnalytical); - // auto deformationFunctionAnalytical = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, y); - // vtkWriter.addVertexData(displacementFunctionAnalytical, VTK::FieldInfo("displacement_analytical", VTK::FieldInfo::Type::vector, 3)); - // vtkWriter.addVertexData(deformationFunctionAnalytical, VTK::FieldInfo("deformation_analytical", VTK::FieldInfo::Type::vector, 3)); - vtkWriter.addVertexData((pythonAnalyticalSolution), VTK::FieldInfo("displacement_analytical", VTK::FieldInfo::Type::vector, 3)); /** - * @brief Get the normal vector field of the surface parametrized + * @brief Get the normal vector field of the surface parametrized * by the analytical solution. - * - We represent the normal vector in a first order Lagrange-Power basis ('normalBasis'). */ if (parameterSet.get<bool>("vtkWrite_analyticalSurfaceNormal", 0)) { - // Get the surface normal function. - auto pythonSurfaceNormal = Python::make_function<FieldVector<double,3>>(pyModule.get("surfaceNormal")); - - - // deprecated: interpolate ... - // std::vector<FieldVector<double,3>> normalVectorCoefficients(normalBasis.size()); - // Dune::Functions::interpolate(normalBasis, normalVectorCoefficients, pythonSurfaceNormal); - // auto surfaceNormalAnalytical = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(normalBasis, normalVectorCoefficients); - // vtkWriter.addVertexData(surfaceNormalAnalytical, VTK::FieldInfo("surfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); - - vtkWriter.addVertexData(pythonSurfaceNormal, VTK::FieldInfo("surfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); + // Get the surface normal function. + auto pythonSurfaceNormal = Python::make_function<FieldVector<double,3> >(pyModule.get("surfaceNormal")); + vtkWriter.addVertexData(pythonSurfaceNormal, VTK::FieldInfo("surfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); } } - //------------------------------------------------------------------------------------- TODO: OUTSOURCE - /** - * @brief TEST: Compute the discrete normal vector of the surface parametrized - * by the discrete solution. - */ - auto surfaceNormalDiscreteCoefficients = computeDiscreteSurfaceNormal(localDKFunctionDouble, normalBasis); //------------------------------------------------------------------------------------- - // Create DiscreteGlobalBasisFunctions. - auto surfaceNormalDiscrete = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(normalBasis, surfaceNormalDiscreteCoefficients); + // auto surfaceNormalDiscrete = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(normalBasis, surfaceNormalDiscreteCoefficients); vtkWriter.addVertexData(displacementFunction, VTK::FieldInfo("displacement", VTK::FieldInfo::Type::vector, 3)); - vtkWriter.addVertexData(surfaceNormalDiscrete , VTK::FieldInfo("surfaceNormal_discrete", VTK::FieldInfo::Type::vector, 3)); vtkWriter.write(resultFileName); } /** - * @brief Compute the L2-Error and H1-SemiError between the discrete deformation u_h and the analytical deformation u - * + * @brief Compute the L2-Error and H1-SemiError between the discrete deformation u_h and the analytical deformation u + * */ - // Read reference solution and its derivative into a Python function - // auto referenceSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("u"), pyModule.get("du")); - // auto referenceSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("displacement"), pyModule.get("displacementGradient")); - auto referenceSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("deformation"), pyModule.get("deformationGradient")); - auto referenceDerivative = derivative(referenceSolution); + // Read reference solution and its derivative into a Python function + auto referenceSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("deformation"), pyModule.get("deformationGradient")); + auto referenceDerivative = derivative(referenceSolution); - using LocalDKFunctionD = GFE::LocalDiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, IsometryCoefficients>; - LocalDKFunctionD localDKFunctionD(deformationBasis, coefficientBasis, isometryCoefficients); + using LocalDKFunctionD = Dune::GFE::DiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, IsometryCoefficients>; + LocalDKFunctionD localDKFunctionD(deformationBasis, coefficientBasis, isometryCoefficients); - // QuadratureRule for the integral of the L^2 error - QuadratureRuleKey quadKey(dim,6); + // QuadratureRule for the integral of the L^2 error + QuadratureRuleKey quadKey(dim,6); - // The error to be computed - double l2ErrorSquared = 0; - double h1ErrorSquared = 0; + // The error to be computed + double l2ErrorSquared = 0; + double h1ErrorSquared = 0; - for (auto&& element : elements(gridView)) - { + for (auto&& element : elements(gridView)) + { // localNumericalSolution.bind(element); - localDKFunctionD.bind(element); + localDKFunctionD.bind(element); - // Get quadrature formula - quadKey.setGeometryType(element.type()); - const auto& quad = QuadratureRuleCache<double, dim>::rule(quadKey); + // Get quadrature formula + quadKey.setGeometryType(element.type()); + const auto& quad = QuadratureRuleCache<double, dim>::rule(quadKey); - for (auto quadPoint : quad) - { - auto quadPos = quadPoint.position(); - const auto integrationElement = element.geometry().integrationElement(quadPos); - const auto weight = quadPoint.weight(); + for (auto quadPoint : quad) + { + auto quadPos = quadPoint.position(); + const auto integrationElement = element.geometry().integrationElement(quadPos); + const auto weight = quadPoint.weight(); - // auto numValue = localNumericalSolution(quadPos); - auto refValue = referenceSolution(element.geometry().global(quadPos)); - auto numValue = localDKFunctionD.evaluate(quadPos).globalCoordinates(); + // auto numValue = localNumericalSolution(quadPos); + auto refValue = referenceSolution(element.geometry().global(quadPos)); + auto numValue = localDKFunctionD.evaluate(quadPos).globalCoordinates(); - auto numDir = localDKFunctionD.evaluateDerivative(quadPos); - auto refDir = referenceDerivative(element.geometry().global(quadPos)); - auto diff = numDir - refDir; + auto numDir = localDKFunctionD.evaluateDerivative(quadPos); + auto refDir = referenceDerivative(element.geometry().global(quadPos)); + auto diff = numDir - refDir; - // integrate error - l2ErrorSquared += (numValue - refValue)* (numValue - refValue) * weight * integrationElement; - h1ErrorSquared += diff.frobenius_norm2() * weight * integrationElement; - } - } - std::cout << "elements: " << gridView.size(0) - << " " - << "L^2 error: " << std::sqrt(l2ErrorSquared) - << " "; - std::cout << "h^1 error: " << std::sqrt(h1ErrorSquared) << std::endl; - - - //Check Quantities - if( std::sqrt(l2ErrorSquared) > 1e-12) - { - std::cerr << std::setprecision(9); - std::cerr << "L2-error is to large! " << std::endl; - return 1; - } - if( std::sqrt(h1ErrorSquared) > 1e-12) - { - std::cerr << std::setprecision(9); - std::cerr << "H1-error is to large! " << std::endl; - return 1; - } - // Compare energy values. - auto numerical_energy = solver.getStatistics().finalEnergy; - auto analytical_energy = 0.0; - std::cout << "Energy difference: " << std::abs(analytical_energy - numerical_energy) << std::endl; - if( std::abs(analytical_energy - numerical_energy) > 1e-12) - { - std::cerr << std::setprecision(9); - std::cerr << "Energy difference: " << std::abs(analytical_energy - numerical_energy) << " is to large! " << std::endl; - return 1; + // integrate error + l2ErrorSquared += (numValue - refValue)* (numValue - refValue) * weight * integrationElement; + h1ErrorSquared += diff.frobenius_norm2() * weight * integrationElement; } + } + std::cout << "elements: " << gridView.size(0) + << " " + << "L^2 error: " << std::sqrt(l2ErrorSquared) + << " "; + std::cout << "h^1 error: " << std::sqrt(h1ErrorSquared) << std::endl; + + + //Check Quantities + if( std::sqrt(l2ErrorSquared) > 1e-12) + { + std::cerr << std::setprecision(9); + std::cerr << "L2-error is to large! " << std::endl; + return 1; + } + if( std::sqrt(h1ErrorSquared) > 1e-12) + { + std::cerr << std::setprecision(9); + std::cerr << "H1-error is to large! " << std::endl; + return 1; + } + // Compare energy values. + auto numerical_energy = ARRNsolver.getStatistics().finalEnergy; + auto analytical_energy = 0.0; + std::cout << "Energy difference: " << std::abs(analytical_energy - numerical_energy) << std::endl; + if( std::abs(analytical_energy - numerical_energy) > 1e-12) + { + std::cerr << std::setprecision(9); + std::cerr << "Energy difference: " << std::abs(analytical_energy - numerical_energy) << " is to large! " << std::endl; + return 1; + } std::cout << "Total time elapsed: " << globalTimer.elapsed() << std::endl; std::cout << "Test: linearisometrytest passed." << std::endl; return 0; - } \ No newline at end of file +} diff --git a/test/orthotropicrotation_1.py b/test/orthotropicrotation_1.py index 40ec1a779524e1f01cf855720c45e6275cdb31b2..bf9503dcd6cde176a67954bd37fe23581b470171 100644 --- a/test/orthotropicrotation_1.py +++ b/test/orthotropicrotation_1.py @@ -103,3 +103,48 @@ class Microstructure: def prestrain_phase3(self,x): return [[0, 0, 0], [0,0,0], [0,0,0]] + +# parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + +############################################# +# Grid parameters +############################################# +parameterSet.microGridLevel = 3 + +############################################# +# Assembly options +############################################# +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices + +############################################# +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) +############################################# +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output + +############################################# +# Write/Output options #(default=false) +############################################# +# --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: +parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition +#parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) +parameterSet.MaterialSubsamplingRefinement= 2 +# --- Write Correctos to VTK-File: +parameterSet.writeCorrectorsVTK = 0 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = True + +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. + + diff --git a/test/orthotropicrotationtest.cc b/test/orthotropicrotationtest.cc index 9c99eb440abdc759e632c902274095ddd49cee7f..dabd68c40c90d79b516f4bc8dda1bb55bb803dd1 100644 --- a/test/orthotropicrotationtest.cc +++ b/test/orthotropicrotationtest.cc @@ -63,9 +63,9 @@ using namespace MatrixOperations; /** * @brief Compute effective quantities for a trilayer setup with 3 orthotropic phases: - * Once with a canonical orthonormal material frame and once with a material frame + * Once with a canonical orthonormal material frame and once with a material frame * that is rotated pi(180 degree) around different axes. - * Aim of the test is to check the correctness of the material frame transformation. + * Aim of the test is to check the correctness of the material frame transformation. */ @@ -87,7 +87,7 @@ int main(int argc, char *argv[]) MPIHelper::instance(argc, argv); Dune::Timer globalTimer; - //--- setup Log-File + //--- setup Log-File std::fstream log; std::cout << "Current path is " << std::filesystem::current_path() << '\n'; @@ -96,42 +96,22 @@ int main(int argc, char *argv[]) std::cout << "dir_path: " << file_path.parent_path() << std::endl; std::string dir_path = file_path.parent_path(); - // ParameterTree parameterSet; - // if (argc < 2) - // ParameterTreeParser::readINITree(dir_path + "/orthotropicrotation_1.parset", parameterSet); - // else - // { - // ParameterTreeParser::readINITree(argv[1], parameterSet); - // ParameterTreeParser::readOptions(argc, argv, parameterSet); - // } - - // //--- Start Python interpreter - // Python::start(); - // Python::Reference main = Python::import("__main__"); - // Python::run("import math"); - // Python::runStream() - // << std::endl << "import sys" - // << std::endl << "sys.path.append('" << dir_path << "')" - // << std::endl; - - - // Start Python interpreter - Python::start(); - auto pyMain = Python::main(); - pyMain.runStream() - << std::endl << "import math" - << std::endl << "import sys" - << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; - auto pyModule = pyMain.import("orthotropicrotation_1"); - - ParameterTree parameterSet; - pyModule.get("parameterSet").toC(parameterSet); - // read possible further parameters from the command line - ParameterTreeParser::readOptions(argc, argv, parameterSet); - // Print all parameters, to make them appear in the log file - std::cout << "Input parameters:" << std::endl; - parameterSet.report(); + // Start Python interpreter + Python::start(); + auto pyMain = Python::main(); + pyMain.runStream() + << std::endl << "import math" + << std::endl << "import sys" + << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; + auto pyModule = pyMain.import("orthotropicrotation_1"); + ParameterTree parameterSet; + pyModule.get("parameterSet").toC(parameterSet); + // read possible further parameters from the command line + ParameterTreeParser::readOptions(argc, argv, parameterSet); + // Print all parameters, to make them appear in the log file + std::cout << "Input parameters:" << std::endl; + parameterSet.report(); constexpr int dim = 3; @@ -143,10 +123,9 @@ int main(int argc, char *argv[]) FieldVector<double,dim> lower({-1.0/2.0, -1.0/2.0, -1.0/2.0}); FieldVector<double,dim> upper({1.0/2.0, 1.0/2.0, 1.0/2.0}); - int gridLevel = 3; - - std::array<int, dim> nElements = {(int)std::pow(2,gridLevel) ,(int)std::pow(2,gridLevel) ,(int)std::pow(2,gridLevel)}; - std::cout << "Number of Grid-Elements in each direction: " << nElements << std::endl; + int microGridLevel = parameterSet.get<int>("microGridLevel", 1); + std::array<int, dim> nElements = {(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel)}; + std::cout << "Number of Grid-Elements in each direction: " << (int)std::pow(2,microGridLevel) << std::endl; using CellGridType = YaspGrid<dim, EquidistantOffsetCoordinates<double, dim> >; CellGridType grid_CE(lower,upper,nElements); @@ -178,22 +157,12 @@ int main(int argc, char *argv[]) Python::Callable MicrostructureClass = pyModule.get("Microstructure"); Python::Reference microstructure = MicrostructureClass(); //Setup a constant microstructure - /////////////////////////////////// // Create prestrained material object - /////////////////////////////////// using MaterialType = prestrainedMaterial<GridView>; std::shared_ptr<MaterialType> material = std::make_shared<MaterialType>(gridView_CE,microstructure,parameterSet,pyModule); - // auto material_ = prestrainedMaterial(gridView_CE,microstructure,parameterSet,pyModule); - - // --- Get scale ratio - // double gamma = parameterSet.get<double>("gamma",1.0); - //------------------------------------------------------------------------------------------------ - //--- Compute Correctors - // auto correctorComputer = CorrectorComputer(Basis_CE, material_, log, parameterSet); - // correctorComputer.assemble(); - // correctorComputer.solve(); - std::shared_ptr<CorrectorComputer<decltype(Basis_CE),MaterialType> > correctorComputer = std::make_shared<CorrectorComputer<decltype(Basis_CE),MaterialType>>(Basis_CE, material, parameterSet); + // Compute Correctors + std::shared_ptr<CorrectorComputer<decltype(Basis_CE),MaterialType> > correctorComputer = std::make_shared<CorrectorComputer<decltype(Basis_CE),MaterialType> >(Basis_CE, material, parameterSet); correctorComputer->assemble(); correctorComputer->solve(); @@ -204,16 +173,12 @@ int main(int argc, char *argv[]) //--- get effective quantities auto Qeff = effectiveQuantitiesComputer.getQeff(); auto Beff = effectiveQuantitiesComputer.getBeff(); -// printmatrix(std::cout, Qeff, "Matrix Qeff", "--"); -// printvector(std::cout, Beff, "Beff", "--"); - + // printmatrix(std::cout, Qeff, "Matrix Qeff", "--"); + // printvector(std::cout, Beff, "Beff", "--"); /** * @brief Compute "rotated" effective quantitites - * */ -// ParameterTreeParser::readINITree("../test/orthotropicrotation_2.parset", parameterSet); -// ParameterTreeParser::readINITree(dir_path + "/orthotropicrotation_2.parset", parameterSet); pyModule = pyMain.import("orthotropicrotation_2"); pyModule.get("parameterSet").toC(parameterSet); @@ -221,10 +186,7 @@ int main(int argc, char *argv[]) Python::Callable MicrostructureClass_2 = pyModule.get("Microstructure"); Python::Reference microstructure_2 = MicrostructureClass_2(); //Setup a constant microstructure - - - - //-- Alternative: + //-- Alternative: material->updateMicrostructure(microstructure_2); correctorComputer->updateMaterial(material); effectiveQuantitiesComputer.updateCorrectorComputer(correctorComputer); @@ -237,34 +199,6 @@ int main(int argc, char *argv[]) // correctorComputer->updateMaterial(material_2); // effectiveQuantitiesComputer.updateCorrectorComputer(correctorComputer); - - - /** - * @brief Old way: - * - */ - // auto material_2 = prestrainedMaterial(gridView_CE,microstructure_2,parameterSet,pyModule); - // std::shared_ptr<MaterialType> material_2 = std::make_shared<MaterialType>(gridView_CE,microstructure_2,parameterSet,pyModule); - - - //--- Compute Correctors - // auto correctorComputer_2 = CorrectorComputer(Basis_CE, material_2, log, parameterSet); - // correctorComputer_2.assemble(); - // correctorComputer_2.solve(); - - - // std::shared_ptr<CorrectorComputer<decltype(Basis_CE),MaterialType> > correctorComputer_2 = std::make_shared<CorrectorComputer<decltype(Basis_CE),MaterialType>>(Basis_CE, material_2, parameterSet); - // correctorComputer_2->assemble(); - // correctorComputer_2->solve(); - - // //--- Compute effective quantities - // auto effectiveQuantitiesComputer_2 = EffectiveQuantitiesComputer(correctorComputer_2); - // effectiveQuantitiesComputer_2.computeEffectiveQuantities(); - - // //--- get effective quantities - // auto Qeff_2 = effectiveQuantitiesComputer_2.getQeff(); - // auto Beff_2 = effectiveQuantitiesComputer_2.getBeff(); - /** * @brief Compare results. * diff --git a/test/parametrizedlaminatetest.cc b/test/parametrizedlaminatetest.cc index 4aa89738903ec5711bebd995bf147db0165283e4..3bbeb3c22d87105155d8ac4b5e3d2b96cf1469a7 100644 --- a/test/parametrizedlaminatetest.cc +++ b/test/parametrizedlaminatetest.cc @@ -60,7 +60,6 @@ using namespace Dune; using namespace MatrixOperations; - /** * @brief In the special case of a parametrized laminate (Lemma 4.5) in * [Böhnlein,Neukamm,Padilla-Garza,Sander - A homogenized bending theory for prestrained plates] @@ -68,7 +67,6 @@ using namespace MatrixOperations; * This test compares the analytical quantities with numerical results. */ - ////////////////////////////////////////////////// // Infrastructure for handling periodicity ////////////////////////////////////////////////// @@ -87,7 +85,7 @@ int main(int argc, char *argv[]) MPIHelper::instance(argc, argv); Dune::Timer globalTimer; - //--- setup Log-File + //--- setup Log-File std::fstream log; std::cout << "Current path is " << std::filesystem::current_path() << '\n'; @@ -96,64 +94,22 @@ int main(int argc, char *argv[]) std::cout << "dir_path: " << file_path.parent_path() << std::endl; std::string dir_path = file_path.parent_path(); - // ParameterTree parameterSet; - // if (argc < 2) - // ParameterTreeParser::readINITree(dir_path + "/parametrizedlaminate.parset", parameterSet); - // else - // { - // ParameterTreeParser::readINITree(argv[1], parameterSet); - // ParameterTreeParser::readOptions(argc, argv, parameterSet); - // } - - // ParameterTree parameterSet; - // if (argc < 2) - // ParameterTreeParser::readINITree("parset/parametrizedlaminate.parset", parameterSet); - // else - // { - // ParameterTreeParser::readINITree(argv[1], parameterSet); - // ParameterTreeParser::readOptions(argc, argv, parameterSet); - // } - - // ParameterTree parameterSet; - // if (argc < 2) - // ParameterTreeParser::readINITree("/parset/parametrizedlaminate.parset", parameterSet); - // else - // { - // ParameterTreeParser::readINITree(argv[1], parameterSet); - // ParameterTreeParser::readOptions(argc, argv, parameterSet); - // } - - //--- Start Python interpreter - // Python::start(); - // Python::Reference main = Python::import("__main__"); - // Python::run("import math"); - // Python::runStream() - // << std::endl << "import sys" - // << std::endl << "sys.path.append('" << dir_path << "')" - // << std::endl; - - - - // Start Python interpreter - Python::start(); - auto pyMain = Python::main(); - pyMain.runStream() - << std::endl << "import math" - << std::endl << "import sys" - << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; - auto pyModule = pyMain.import("parametrized_laminate"); - - ParameterTree parameterSet; - pyModule.get("parameterSet").toC(parameterSet); - // read possible further parameters from the command line - ParameterTreeParser::readOptions(argc, argv, parameterSet); - // Print all parameters, to make them appear in the log file - std::cout << "Input parameters:" << std::endl; - parameterSet.report(); - - - + // Start Python interpreter + Python::start(); + auto pyMain = Python::main(); + pyMain.runStream() + << std::endl << "import math" + << std::endl << "import sys" + << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; + auto pyModule = pyMain.import("parametrizedlaminatetest"); + ParameterTree parameterSet; + pyModule.get("parameterSet").toC(parameterSet); + // read possible further parameters from the command line + ParameterTreeParser::readOptions(argc, argv, parameterSet); + // Print all parameters, to make them appear in the log file + std::cout << "Input parameters:" << std::endl; + parameterSet.report(); @@ -166,10 +122,9 @@ int main(int argc, char *argv[]) FieldVector<double,dim> lower({-1.0/2.0, -1.0/2.0, -1.0/2.0}); FieldVector<double,dim> upper({1.0/2.0, 1.0/2.0, 1.0/2.0}); - int gridLevel = 3; - - std::array<int, dim> nElements = {(int)std::pow(2,gridLevel) ,(int)std::pow(2,gridLevel) ,(int)std::pow(2,gridLevel)}; - std::cout << "Number of Grid-Elements in each direction: " << nElements << std::endl; + int microGridLevel = parameterSet.get<int>("microGridLevel", 1); + std::array<int, dim> nElements = {(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel)}; + std::cout << "Number of Grid-Elements in each direction: " << (int)std::pow(2,microGridLevel) << std::endl; using CellGridType = YaspGrid<dim, EquidistantOffsetCoordinates<double, dim> >; CellGridType grid_CE(lower,upper,nElements); @@ -197,30 +152,17 @@ int main(int argc, char *argv[]) )); - - - // Create Microstructure object. Python::Callable MicrostructureClass = pyModule.get("Microstructure"); Python::Reference microstructure = MicrostructureClass(); //Setup a constant microstructure - /////////////////////////////////// // Create prestrained material object - /////////////////////////////////// - // auto material = prestrainedMaterial(gridView_CE,microstructure,parameterSet,pyModule); - using MaterialType = prestrainedMaterial<GridView>; std::shared_ptr<MaterialType> material = std::make_shared<MaterialType>(gridView_CE,microstructure,parameterSet,pyModule); - - - //------------------------------------------------------------------------------------------------ - //--- Compute Correctors - // auto correctorComputer = CorrectorComputer(Basis_CE, material, log, parameterSet); - // correctorComputer.assemble(); - // correctorComputer.solve(); - std::shared_ptr<CorrectorComputer<decltype(Basis_CE),MaterialType> > correctorComputer = std::make_shared<CorrectorComputer<decltype(Basis_CE),MaterialType>>(Basis_CE, material, parameterSet); + //--- Compute correctors + std::shared_ptr<CorrectorComputer<decltype(Basis_CE),MaterialType> > correctorComputer = std::make_shared<CorrectorComputer<decltype(Basis_CE),MaterialType> >(Basis_CE, material, parameterSet); correctorComputer->assemble(); correctorComputer->solve(); diff --git a/test/parametrized_laminate.py b/test/parametrizedlaminatetest.py similarity index 67% rename from test/parametrized_laminate.py rename to test/parametrizedlaminatetest.py index 0260b8c391e8f44d08b5c9c067ed2916a395e551..008c5fc4f24c1fbe3272c54af9e3c75805c60db5 100644 --- a/test/parametrized_laminate.py +++ b/test/parametrizedlaminatetest.py @@ -24,7 +24,7 @@ parameterSet = ParameterSet() # Paths ############################################# # parameterSet.resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/outputs_parametrized_laminate' -parameterSet.baseName= 'parametrized_laminate' #(needed for Output-Filename) +parameterSet.baseName= 'parametrizedlaminatetest' #(needed for Output-Filename) ############################################# # Material Setup @@ -91,56 +91,45 @@ class Microstructure: return [[0, 0, 0], [0,0,0], [0,0,0]] +parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + ############################################# # Grid parameters ############################################# -## numLevels : Number of Levels on which solution is computed. starting with a 2x2x2 cube mesh. -## {start,finish} computes on all grid from 2^(start) to 2^finish refinement -#---------------------------------------------------- -parameterSet.numLevels= '3 3' # computes all levels from first to second entry +parameterSet.microGridLevel = 3 ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER (default), #4: UMFPACK - SOLVER +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 3 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output - +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) ############################################# # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: -parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition +parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition #parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - +parameterSet.MaterialSubsamplingRefinement= 2 # --- Write Correctos to VTK-File: -parameterSet.write_VTK = 0 - -# --- (Optional output) L2Error, integral mean: -#parameterSet.write_L2Error = 1 -#parameterSet.write_IntegralMean = 1 - -# --- check orthogonality (75) from paper: -parameterSet.write_checkOrthogonality = 1 - -# --- Write corrector-coefficients to log-File: -#parameterSet.write_corrector_phi1 = 1 -#parameterSet.write_corrector_phi2 = 1 -#parameterSet.write_corrector_phi3 = 1 - -# --- Print Condition number of matrix (can be expensive): -#parameterSet.print_conditionNumber= 1 #(default=false) - +parameterSet.writeCorrectorsVTK = 0 # --- write effective quantities (Qhom.Beff) to .txt-files -parameterSet.write_EffectiveQuantitiesToTxt = False +parameterSet.write_EffectiveQuantitiesToTxt = True + +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/test/properties-shape-test.cc b/test/properties-shape-test.cc index d7ea1b89c4278d0ffe27b05d40f00685574b976f..2cff3e6713cf8403980d214b260df33eaf9a0aed 100644 --- a/test/properties-shape-test.cc +++ b/test/properties-shape-test.cc @@ -1,10 +1,8 @@ #include <config.h> #include <signal.h> #include <memory> - #include <fenv.h> #include <array> - #include <math.h> // Includes for the ADOL-C automatic differentiation library @@ -13,22 +11,21 @@ #include <dune/fufem/utilities/adolcnamespaceinjections.hh> #include <dune/common/typetraits.hh> - #include <dune/common/bitsetvector.hh> #include <dune/common/parametertree.hh> #include <dune/common/parametertreeparser.hh> #include <dune/grid/uggrid.hh> #include <dune/grid/utility/structuredgridfactory.hh> - #include <dune/grid/io/file/gmshreader.hh> #include <dune/grid/io/file/vtk.hh> #include <dune/functions/gridfunctions/discreteglobalbasisfunction.hh> +#include <dune/functions/gridfunctions/composedgridfunction.hh> +#include <dune/functions/functionspacebases/cubichermitebasis.hh> #include <dune/functions/functionspacebases/lagrangebasis.hh> #include <dune/functions/functionspacebases/powerbasis.hh> #include <dune/functions/functionspacebases/interpolate.hh> -#include <dune/functions/functionspacebases/reducedcubichermitetrianglebasis.hh> #include <dune/fufem/boundarypatch.hh> #include <dune/fufem/functiontools/boundarydofs.hh> @@ -41,40 +38,35 @@ #include <dune/gfe/spaces/productmanifold.hh> #include <dune/gfe/spaces/realtuple.hh> #include <dune/gfe/spaces/rotation.hh> -#include <dune/gfe/localdiscretekirchhoffbendingisometry.hh> +#include <dune/gfe/functions/discretekirchhoffbendingisometry.hh> +#include <dune/gfe/functions/embeddedglobalgfefunction.hh> +#include <dune/gfe/functions/localprojectedfefunction.hh> #include <dune/gfe/assemblers/localgeodesicfeadolcstiffness.hh> -#include <dune/gfe/assemblers/harmonicenergy.hh> #include <dune/gfe/assemblers/geodesicfeassembler.hh> +#include <dune/gfe/assemblers/discretekirchhoffbendingenergy.hh> +#include <dune/gfe/assemblers/forceenergy.hh> +#include <dune/gfe/assemblers/sumenergy.hh> #include <dune/gfe/bendingisometryhelper.hh> #include <dune/gfe/riemannianpnsolver.hh> -#include <dune/gfe/embeddedglobalgfefunction.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergy.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergyconforming.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergyzienkiewicz.hh> -#include <dune/gfe/energies/discretekirchhoffbendingenergyzienkiewiczprojected.hh> -// #include <dune/gfe/energies/discretekirchhoffbendingenergyprestrained.hh> +#include <dune/gfe/riemanniantrsolver.hh> +#include <dune/microstructure/bendingisometryaddons.hh> #include <dune/microstructure/energies/discretekirchhoffbendingenergyprestrained.hh> -#include <dune/gfe/spaces/stiefelmanifold.hh> -// #include <dune/gfe/spaces/stiefelmatrix.hh> - #include <dune/gmsh4/gmsh4reader.hh> #include <dune/gmsh4/gridcreators/lagrangegridcreator.hh> - #include <filesystem> const int dim = 2; using namespace Dune; - int main(int argc, char *argv[]) { /** - * @brief We use this to catch a 'Floating point exception' caused by the 'innerSolver' + * @brief We use this to catch a 'Floating point exception' caused by the 'innerSolver' * in RiemannianProximalNewton */ // std::shared_ptr<void(int)> handler( @@ -82,7 +74,6 @@ int main(int argc, char *argv[]) // [](__sighandler_t f) { signal(SIGFPE, f); }); - // feenableexcept(FE_INVALID); std::vector<double> Energy_threshold = {1.0, 0.5, 2.0 }; @@ -94,617 +85,424 @@ int main(int argc, char *argv[]) for(size_t experimentNumber = 1; experimentNumber<4; experimentNumber++) { - MPIHelper::instance(argc, argv); - Dune::Timer globalTimer; - - // if (argc < 3) - // DUNE_THROW(Exception, "Usage: ./bending-isometries <python path> <python module without extension>"); - - // Start Python interpreter - // Python::start(); - // auto pyMain = Python::main(); - // pyMain.runStream() - // << std::endl << "import math" - // << std::endl << "import sys" - // << std::endl << "sys.path.append('" << argv[1] << "')" << std::endl; - // auto pyModule = pyMain.import(argv[2]); - + MPIHelper::instance(argc, argv); + Dune::Timer globalTimer; - std::cout << "Current path is " << std::filesystem::current_path() << '\n'; - std::filesystem::path file_path = (__FILE__); - std::cout<< "File path: " << file_path<<std::endl; - std::cout << "dir_path: " << file_path.parent_path() << std::endl; - std::string dir_path = file_path.parent_path(); + std::cout << "Current path is " << std::filesystem::current_path() << '\n'; + std::filesystem::path file_path = (__FILE__); + std::cout<< "File path: " << file_path<<std::endl; + std::cout << "dir_path: " << file_path.parent_path() << std::endl; + std::string dir_path = file_path.parent_path(); - std::string experiment = "properties-shape-test-" + std::to_string(experimentNumber); + std::string experiment = "properties-shape-test-" + std::to_string(experimentNumber); - // Start Python interpreter - Python::start(); - auto pyMain = Python::main(); - pyMain.runStream() - << std::endl << "import math" - << std::endl << "import sys" - << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; - // auto pyModule = pyMain.import("properties-shape-test-2"); - auto pyModule = pyMain.import(experiment); + // Start Python interpreter + Python::start(); + auto pyMain = Python::main(); + pyMain.runStream() + << std::endl << "import math" + << std::endl << "import sys" + << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; + // auto pyModule = pyMain.import("properties-shape-test-2"); + auto pyModule = pyMain.import(experiment); - // parse data file - ParameterTree parameterSet; - pyModule.get("parameterSet").toC(parameterSet); + // parse data file + ParameterTree parameterSet; + pyModule.get("parameterSet").toC(parameterSet); - // read possible further parameters from the command line - ParameterTreeParser::readOptions(argc, argv, parameterSet); + // read possible further parameters from the command line + ParameterTreeParser::readOptions(argc, argv, parameterSet); - // Print all parameters, to make them appear in the log file - std::cout << "Executable: bending-isometries, with parameters:" << std::endl; - parameterSet.report(); + // Print all parameters, to make them appear in the log file + std::cout << "Executable: bending-isometries, with parameters:" << std::endl; + parameterSet.report(); - ///////////////////////////////////////// - // Create the grid - ///////////////////////////////////////// - using GridType = UGGrid<dim>; + ///////////////////////////////////////// + // Create the grid + ///////////////////////////////////////// + using GridType = UGGrid<dim>; - std::shared_ptr<GridType> grid; - FieldVector<double,dim> lower(0), upper(1); - std::array<unsigned int,dim> elementsArray; + std::shared_ptr<GridType> grid; + FieldVector<double,dim> lower(0), upper(1); + std::array<unsigned int,dim> elementsArray; - std::string structuredGridType = parameterSet["structuredGrid"]; - if (structuredGridType != "false" ) - { - lower = parameterSet.get<FieldVector<double,dim> >("lower"); - upper = parameterSet.get<FieldVector<double,dim> >("upper"); - elementsArray = parameterSet.get<std::array<unsigned int,dim> >("elements"); - - if (structuredGridType == "simplex") - grid = StructuredGridFactory<GridType>::createSimplexGrid(lower, upper, elementsArray); - else if (structuredGridType == "cube") - grid = StructuredGridFactory<GridType>::createCubeGrid(lower, upper, elementsArray); - else - DUNE_THROW(Exception, "Unknown structured grid type '" << structuredGridType << "' found!"); - } else { - std::cout << "Read GMSH grid." << std::endl; - std::string gridPath = parameterSet.get<std::string>("gridPath"); - std::string gridFile = parameterSet.get<std::string>("gridFile"); - GridFactory<GridType> factory; - Gmsh4::LagrangeGridCreator creator{factory}; - Gmsh4Reader reader{creator}; - reader.read(gridPath + "/" + gridFile); - grid = factory.createGrid(); - } + std::string structuredGridType = parameterSet["structuredGrid"]; + if (structuredGridType != "false" ) + { + lower = parameterSet.get<FieldVector<double,dim> >("lower"); + upper = parameterSet.get<FieldVector<double,dim> >("upper"); + elementsArray = parameterSet.get<std::array<unsigned int,dim> >("elements"); + + if (structuredGridType == "simplex") + grid = StructuredGridFactory<GridType>::createSimplexGrid(lower, upper, elementsArray); + else if (structuredGridType == "cube") + grid = StructuredGridFactory<GridType>::createCubeGrid(lower, upper, elementsArray); + else + DUNE_THROW(Exception, "Unknown structured grid type '" << structuredGridType << "' found!"); + } else { + std::cout << "Read GMSH grid." << std::endl; + std::string gridPath = parameterSet.get<std::string>("gridPath"); + std::string gridFile = parameterSet.get<std::string>("gridFile"); + GridFactory<GridType> factory; + Gmsh4::LagrangeGridCreator creator{factory}; + Gmsh4Reader reader{creator}; + reader.read(gridPath + "/" + gridFile); + grid = factory.createGrid(); + } - const int macroGridLevel = parameterSet.get<int>("macroGridLevel"); - grid->globalRefine(macroGridLevel-1); + const int macroGridLevel = parameterSet.get<int>("macroGridLevel"); + grid->globalRefine(macroGridLevel-1); - using GridView = typename GridType::LeafGridView; - GridView gridView = grid->leafGridView(); + using GridView = typename GridType::LeafGridView; + GridView gridView = grid->leafGridView(); - /////////////////////////////////////////////////////// - // Set up the function spaces - /////////////////////////////////////////////////////// + /////////////////////////////////////////////////////// + // Set up the function spaces + /////////////////////////////////////////////////////// - // General coefficient vector of a Discrete Kirchhoff deformation function - using VectorSpaceCoefficients = BlockVector<FieldVector<double,3>>; + // General coefficient vector of a Discrete Kirchhoff deformation function + using VectorSpaceCoefficients = BlockVector<FieldVector<double,3> >; - /** - * @brief Coefficient vector of a Discrete Kirchhoff deformation function that is constrained to be an isometry. - * we need both 'double' and 'adouble' versions. - */ - using Coefficient = GFE::ProductManifold<RealTuple<double,3>, Rotation<double,3> >; - using IsometryCoefficients = std::vector<Coefficient>; - using ACoefficient = typename Coefficient::template rebind<adouble>::other; - using AIsometryCoefficients = std::vector<ACoefficient>; + /** + * @brief Coefficient vector of a Discrete Kirchhoff deformation function that is constrained to be an isometry. + * we need both 'double' and 'adouble' versions. + */ + using Coefficient = GFE::ProductManifold<GFE::RealTuple<double,3>, GFE::Rotation<double,3> >; + using IsometryCoefficients = std::vector<Coefficient>; + using ACoefficient = typename Coefficient::template rebind<adouble>::other; + using AIsometryCoefficients = std::vector<ACoefficient>; - using namespace Functions::BasisFactory; - auto deformationBasis = makeBasis(gridView, - power<3>(reducedCubicHermiteTriangle(), - blockedInterleaved())); + using namespace Functions::BasisFactory; + auto deformationBasis = makeBasis(gridView, + power<3>(reducedCubicHermite(), + blockedInterleaved())); - using DeformationBasis = decltype(deformationBasis); + using DeformationBasis = decltype(deformationBasis); - /** - * @brief The next basis is used to assign (nonlinear) degrees of freedom to the grid vertices. - * The actual basis function values are never used. - */ - using CoefficientBasis = Functions::LagrangeBasis<GridView, 1>; - CoefficientBasis coefficientBasis(gridView); + /** + * @brief The next basis is used to assign (nonlinear) degrees of freedom to the grid vertices. + * The actual basis function values are never used. + */ + using CoefficientBasis = Functions::LagrangeBasis<GridView, 1>; + CoefficientBasis coefficientBasis(gridView); - // A basis for the tangent space (used to set DirichletNodes) - auto tangentBasis = makeBasis(gridView, - power<Coefficient::TangentVector::dimension>( + // A basis for the tangent space (used to set DirichletNodes) + auto tangentBasis = makeBasis(gridView, + power<Coefficient::TangentVector::dimension>( lagrange<1>(), blockedInterleaved())); - // Print some information on the grid and degrees of freedom. - std::cout << "Number of Elements in the grid: " << gridView.size(0)<< std::endl; - std::cout << "Number of Nodes in the grid: " << gridView.size(dim)<< std::endl; - std::cout << "deformationBasis.size(): " << deformationBasis.size() << std::endl; - std::cout << "deformationBasis.dimension(): " << deformationBasis.dimension() << std::endl; - std::cout << "Degrees of Freedom: " << deformationBasis.dimension() << std::endl; + // Print some information on the grid and degrees of freedom. + std::cout << "Number of Elements in the grid: " << gridView.size(0)<< std::endl; + std::cout << "Number of Nodes in the grid: " << gridView.size(dim)<< std::endl; + std::cout << "deformationBasis.size(): " << deformationBasis.size() << std::endl; + std::cout << "deformationBasis.dimension(): " << deformationBasis.dimension() << std::endl; + std::cout << "Degrees of Freedom: " << deformationBasis.dimension() << std::endl; - /////////////////////////////////////////// - // Read Dirichlet values (NEW VERSION) - /////////////////////////////////////////// - BitSetVector<1> dirichletVertices(gridView.size(dim), false); - const typename GridView::IndexSet &indexSet = gridView.indexSet(); + /////////////////////////////////////////// + // Read Dirichlet values (NEW VERSION) + /////////////////////////////////////////// + const typename GridView::IndexSet &indexSet = gridView.indexSet(); + BitSetVector<Coefficient::TangentVector::dimension> dirichletNodes(tangentBasis.size(), false); //tangentBasis.size()=coefficientBasis.size() + // Make Python function that computes which vertices are on the Dirichlet boundary, based on the vertex positions. + auto dirichletIndicatorFunction = Python::make_function<bool>(pyModule.get("dirichlet_indicator")); - BitSetVector<Coefficient::TangentVector::dimension> dirichletNodes(tangentBasis.size(), false); //tangentBasis.size()=coefficientBasis.size() + /** + * @brief If we want to clamp DOFs inside the domain, we connot use 'BoundaryPatch' + * and 'constructBoundaryDofs'. This is a workaround for now. + */ + for (auto &&vertex : vertices(gridView)) + { + if(dirichletIndicatorFunction(vertex.geometry().corner(0))) + { + dirichletNodes[indexSet.index(vertex)] = true; + } + } - /** - * @brief Make Python function that computes which vertices are on the Dirichlet boundary, - * based on the vertex positions. - */ - auto dirichletIndicatorFunction = Python::make_function<bool>(pyModule.get("dirichlet_indicator")); + /////////////////////////////////////////// + // Get initial Iterate + /////////////////////////////////////////// + auto pythonInitialIterate = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("f"), pyModule.get("df")); + VectorSpaceCoefficients x(deformationBasis.size()); + interpolate(deformationBasis, x, pythonInitialIterate); + /** + * @brief We need to setup LocalDiscreteKirchhoffBendingIsometry with a coefficient + * vector of ctype 'adouble' while the solver gets a coefficient vector + * of ctype 'double'. + */ + IsometryCoefficients isometryCoefficients(coefficientBasis.size()); + AIsometryCoefficients isometryCoefficients_adouble(coefficientBasis.size()); - /** - * @brief If we want to clamp DOFs inside the domain, we connot use 'BoundaryPatch' - * and 'constructBoundaryDofs'. This is a workaround for now. - * - * - */ - for (auto &&vertex : vertices(gridView)) - { - dirichletVertices[indexSet.index(vertex)] = dirichletIndicatorFunction(vertex.geometry().corner(0)); - if(dirichletIndicatorFunction(vertex.geometry().corner(0))) - { - dirichletNodes[indexSet.index(vertex)] = true; - } - - } - - // std::cout << "tangentBasis.size():" << tangentBasis.size() << std::endl; - // std::cout << "coefficientBasis.size():" << coefficientBasis.size() << std::endl; + /** + * @brief Copy the current iterate into a data type that encapsulates the isometry constraint + * i. e. convert coefficient data structure from 'VectorSpaceCoefficients' to 'IsometryCoefficients' + */ + using namespace Dune::GFE::Impl; + vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x,isometryCoefficients); + vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x,isometryCoefficients_adouble); + + /** + * @brief TEST: conversion of coefficient vectors (back & forth) + */ + coefficientConversionTest<VectorSpaceCoefficients, DeformationBasis, CoefficientBasis, IsometryCoefficients>(x, deformationBasis, coefficientBasis); - // // deprecated: - // // BoundaryPatch<GridView> dirichletBoundary(gridView, dirichletVertices); - // // constructBoundaryDofs(dirichletBoundary, tangentBasis, dirichletNodes); - // // TEST: print dirichletNodes - // std::cout << "print dirichletVertices:" << std::endl; - // std::cout << dirichletVertices << std::endl; + using LocalDKFunction = Dune::GFE::DiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, AIsometryCoefficients>; + LocalDKFunction localDKFunction(deformationBasis, coefficientBasis, isometryCoefficients_adouble); - // std::cout << "print dirichletNodes:" << std::endl; - // std::cout << dirichletNodes << std::endl; + /** + * @brief TEST: check isometry condition on the nodes of the grid for initial deformation. + */ + // auto initialDeformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, x); + // nodewiseIsometryTest(initialDeformationFunction); + nodewiseIsometryTest(localDKFunction, gridView); + /** + * @brief Read force term. + */ + auto pythonForce = Python::make_function<FieldVector<double,3> >(pyModule.get("force")); + auto forceGVF = Dune::Functions::makeGridViewFunction(pythonForce, gridView); + auto localForce = localFunction(forceGVF); - // /////////////////////////////////////////// - // // Read Dirichlet values (OLD VERSION) - // /////////////////////////////////////////// - // BitSetVector<1> dirichletVertices(gridView.size(dim), false); - // const typename GridView::IndexSet &indexSet = gridView.indexSet(); - // /** - // * @brief Make Python function that computes which vertices are on the Dirichlet boundary, - // * based on the vertex positions. - // */ - // auto dirichletIndicatorFunction = Python::make_function<bool>(pyModule.get("dirichlet_indicator")); + /** + * @brief Read effective prestrain Tensor + */ + // Dune::FieldVector<adouble,3> Beffvec = parameterSet.get<Dune::FieldVector<adouble,3>>("effectivePrestrain", {0.0, 0.0, 0.0}); + // Dune::FieldMatrix<adouble,2,2> effectivePrestrain = {{(adouble)Beffvec[0], (adouble)Beffvec[2]}, {(adouble)Beffvec[2],(adouble)Beffvec[1]} }; + // printmatrix(std::cout, effectivePrestrain, "effective prestrain (Beff): ", "--"); - // for (auto &&vertex : vertices(gridView)) - // { - // dirichletVertices[indexSet.index(vertex)] = dirichletIndicatorFunction(vertex.geometry().corner(0)); - // // if(dirichletIndicatorFunction(vertex.geometry().corner(0))) - // // { - // // std::cout << "Dirichlet Vertex with coordinates:" << vertex.geometry().corner(0) << std::endl; - // // } - // } - // BoundaryPatch<GridView> dirichletBoundary(gridView, dirichletVertices); - // BitSetVector<Coefficient::TangentVector::dimension> dirichletNodes(tangentBasis.size(), false); - // constructBoundaryDofs(dirichletBoundary, tangentBasis, dirichletNodes); + /** + * @brief Get effective quadratic form Qhom + * + * input-vector: [q_1,q_2,q_3,q_12,q_13,q_23] + * is assembled into a matrix where the off-diagonal entries are divided by 2 (compare with definition in the paper) + * ( q_1 , 0.5*q_12 , 0.5*q_13 ) + * Q = ( 0.5*q_12 , q_2 , 0.5*q_23 ) + * ( 0.5*q_13 , 0.5*q_23 , q_3 ) + */ + // Dune::FieldVector<adouble,6> Qhomvec = parameterSet.get<Dune::FieldVector<adouble,6>>("effectiveQuadraticForm", {1.0, 1.0, 1.0, 0.0, 0.0, 0.0}); + // Dune::FieldMatrix<adouble,3,3> Qhom = {{(adouble)Qhomvec[0], (adouble)0.5*Qhomvec[3], (adouble)0.5*Qhomvec[4]}, + // {(adouble)0.5*Qhomvec[3], (adouble)Qhomvec[1], (adouble)0.5*Qhomvec[5]}, + // {(adouble)0.5*Qhomvec[4], (adouble)0.5*Qhomvec[5], (adouble)Qhomvec[2]}}; + // printmatrix(std::cout, Qhom, "effective quadratic form (Qhom): ", "--"); - /////////////////////////////////////////// - // Get initial Iterate - /////////////////////////////////////////// - auto pythonInitialIterate = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("f"), pyModule.get("df")); + //////////////////////////////////////////////////////////////////////// + // Create an assembler for the Discrete Kirchhoff Energy Functional (using ADOL-C) + //////////////////////////////////////////////////////////////////////// + // The energy consists of two parts: 1. A bending energy contribution and 2. Contribution from a force term. + auto sumEnergy = std::make_shared<GFE::SumEnergy<CoefficientBasis, GFE::RealTuple<adouble,3>, GFE::Rotation<adouble,3> > >(); - VectorSpaceCoefficients x(deformationBasis.size()); - interpolate(deformationBasis, x, pythonInitialIterate); + // Setup prestrained bending energy. + auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, ACoefficient> >(localDKFunction, parameterSet, pyModule); + // Setup force energy. + auto forceEnergy = std::make_shared<GFE::ForceEnergy<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient> >(localDKFunction, localForce); + sumEnergy->addLocalEnergy(localEnergy_prestrain); + sumEnergy->addLocalEnergy(forceEnergy); + // Setup the assembler. + auto localGFEADOLCStiffness_prestrain = std::make_shared<Dune::GFE::LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> >(sumEnergy); + std::shared_ptr<Dune::GFE::GeodesicFEAssembler<CoefficientBasis, Coefficient> > assembler_prestrain; + assembler_prestrain = std::make_shared<Dune::GFE::GeodesicFEAssembler<CoefficientBasis, Coefficient> >(coefficientBasis, localGFEADOLCStiffness_prestrain); + /** + * @brief Create a solver: + * - Riemannian Newton with Hessian modification + * - Riemannian Trust-region + */ + Dune::GFE::RiemannianProximalNewtonSolver<CoefficientBasis, Coefficient> ARRNsolver; + Dune::GFE::RiemannianTrustRegionSolver<CoefficientBasis, Coefficient> RTRsolver; - /** - * @brief We need to setup LocalDiscreteKirchhoffBendingIsometry with a coefficient - * vector of ctype 'adouble' while the solver gets a coefficient vector - * of ctype 'double'. - */ - IsometryCoefficients isometryCoefficients(coefficientBasis.size()); - AIsometryCoefficients isometryCoefficients_adouble(coefficientBasis.size()); + std::string Solver_name = parameterSet.get<std::string>("Solver", "ARRN"); + double numerical_energy; //final discrete energy + if(Solver_name == "ARRN") + { - /** - * @brief Copy the current iterate into a data type that encapsulates the isometry constraint - * i. e. convert coefficient data structure from 'VectorSpaceCoefficients' to 'IsometryCoefficients' - */ - vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x,isometryCoefficients); - vectorToIsometryCoefficientMap(deformationBasis,coefficientBasis,x,isometryCoefficients_adouble); + ARRNsolver.setup(*grid, + &(*assembler_prestrain), + isometryCoefficients, + dirichletNodes, + parameterSet); - /** - * @brief TEST: conversion of coefficient vectors (back & forth) - */ - coefficientConversionTest<VectorSpaceCoefficients, DeformationBasis, CoefficientBasis, IsometryCoefficients>(x, deformationBasis, coefficientBasis); + ARRNsolver.solve(); + isometryCoefficients = ARRNsolver.getSol(); + numerical_energy = ARRNsolver.getStatistics().finalEnergy; + } else if (Solver_name =="RiemannianTR") + { + std::cout << "Using Riemannian Trust-region method for energy minimization." << std::endl; + RTRsolver.setup(*grid, + &(*assembler_prestrain), + isometryCoefficients, + dirichletNodes, + parameterSet); + RTRsolver.solve(); + isometryCoefficients = RTRsolver.getSol(); + numerical_energy = RTRsolver.getStatistics().finalEnergy; + } else + DUNE_THROW(Dune::Exception, "Unknown Solver type for bending isometries."); - - using LocalDKFunction = GFE::LocalDiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, AIsometryCoefficients>; - LocalDKFunction localDKFunction(deformationBasis, coefficientBasis, isometryCoefficients_adouble); + // Convert coefficient data structure from 'IsometryCoefficients' to 'VectorSpaceCoefficients' + VectorSpaceCoefficients x_out(deformationBasis.size()); + isometryToVectorCoefficientMap(deformationBasis,coefficientBasis,x_out,isometryCoefficients); + //////////////////////////////// + // Output result + //////////////////////////////// + std::string baseNameDefault = "bending-isometries-"; + std::string baseName = parameterSet.get("baseName", baseNameDefault); + std::string resultFileName = parameterSet.get("resultPath", "") + + "/" + baseName + + "_level" + std::to_string(parameterSet.get<int>("macroGridLevel")); - /** - * @brief TEST: check isometry condition on the nodes of the grid for initial deformation. - */ - // auto initialDeformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, x); - // nodewiseIsometryTest(initialDeformationFunction); - nodewiseIsometryTest(localDKFunction, gridView); + if (parameterSet.get<bool>("conforming_DiscreteJacobian", 1)) + resultFileName = resultFileName + "_C"; + else + resultFileName = resultFileName + "_NC"; - /** - * @brief Read force term. - */ - auto pythonForce = Python::make_function<FieldVector<double,3>>(pyModule.get("force")); - auto forceGVF = Dune::Functions::makeGridViewFunction(pythonForce, gridView); - auto localForce = localFunction(forceGVF); + // Create a deformation function but this time with double-types. + using LocalDKFunctionD = Dune::GFE::DiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, IsometryCoefficients>; + LocalDKFunctionD localDKFunctionDouble(deformationBasis, coefficientBasis, isometryCoefficients); - /** - * @brief Read effective prestrain Tensor - */ - // Dune::FieldVector<adouble,3> Beffvec = parameterSet.get<Dune::FieldVector<adouble,3>>("effectivePrestrain", {0.0, 0.0, 0.0}); - // Dune::FieldMatrix<adouble,2,2> effectivePrestrain = {{(adouble)Beffvec[0], (adouble)Beffvec[2]}, {(adouble)Beffvec[2],(adouble)Beffvec[1]} }; - // printmatrix(std::cout, effectivePrestrain, "effective prestrain (Beff): ", "--"); + if (parameterSet.get<bool>("writeVTK", 1)) + { + std::cout << "write VTK..." << std::endl; /** - * @brief Get effective quadratic form Qhom - * - * input-vector: [q_1,q_2,q_3,q_12,q_13,q_23] - * is assembled into a matrix where the off-diagonal entries are divided by 2 (compare with definition in the paper) - * ( q_1 , 0.5*q_12 , 0.5*q_13 ) - * Q = ( 0.5*q_12 , q_2 , 0.5*q_23 ) - * ( 0.5*q_13 , 0.5*q_23 , q_3 ) + * @brief Compute the displacement from the deformation. + * interpolate the identity and substract from the coefficient vector. */ - // Dune::FieldVector<adouble,6> Qhomvec = parameterSet.get<Dune::FieldVector<adouble,6>>("effectiveQuadraticForm", {1.0, 1.0, 1.0, 0.0, 0.0, 0.0}); - // Dune::FieldMatrix<adouble,3,3> Qhom = {{(adouble)Qhomvec[0], (adouble)0.5*Qhomvec[3], (adouble)0.5*Qhomvec[4]}, - // {(adouble)0.5*Qhomvec[3], (adouble)Qhomvec[1], (adouble)0.5*Qhomvec[5]}, - // {(adouble)0.5*Qhomvec[4], (adouble)0.5*Qhomvec[5], (adouble)Qhomvec[2]}}; - // printmatrix(std::cout, Qhom, "effective quadratic form (Qhom): ", "--"); + VectorSpaceCoefficients identity(deformationBasis.size()); + IdentityGridEmbedding<double> identityGridEmbedding; + interpolate(deformationBasis, identity, identityGridEmbedding); - //////////////////////////////////////////////////////////////////////// - // Create an assembler for the Discrete Kirchhoff Energy Functional (using ADOL-C) - //////////////////////////////////////////////////////////////////////// + // Compute the displacement + auto displacement = x_out; + displacement -= identity; + + // std::cout << "displacement.size():" << displacement.size() << std::endl; + auto deformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(deformationBasis, x_out); + auto displacementFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(deformationBasis, displacement); /** - * @brief Setup nonconforming energy + * @brief We need to subsample, because VTK cannot natively display real third-order functions */ - // auto localEnergy_nonconforming = std::make_shared<GFE::DiscreteKirchhoffBendingEnergy<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce); + int subsamplingRefinement = parameterSet.get<int>("subsamplingRefinement", 2); + SubsamplingVTKWriter<GridView> vtkWriter(gridView, Dune::refinementLevels(subsamplingRefinement)); + /** - * @brief Setup conforming energy (WIP) + * @brief Interpolate and VTK-write analytical solution "u" from ParamterFile. */ - // auto localEnergy_conforming = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyZienkiewicz<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce); - // auto localEnergy_conforming = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyZienkiewiczProjected<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce); + if (parameterSet.get<bool>("vtkwrite_analyticalSolution", 0)) + { + auto pythonAnalyticalSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("displacement"), pyModule.get("displacementGradient")); + vtkWriter.addVertexData((pythonAnalyticalSolution), VTK::FieldInfo("displacement_analytical", VTK::FieldInfo::Type::vector, 3)); + /** + * @brief Get the normal vector field of the surface parametrized + * by the analytical solution. + */ + if (parameterSet.get<bool>("vtkWrite_analyticalSurfaceNormal", 0)) + { + // Get the surface normal function. + auto pythonSurfaceNormal = Python::make_function<FieldVector<double,3> >(pyModule.get("surfaceNormal")); + vtkWriter.addVertexData(pythonSurfaceNormal, VTK::FieldInfo("surfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); + } + } + //------------------------------------------------------------------------------------- TODO: OUTSOURCE /** - * @brief Setup energy featuring prestrain + * @brief TEST: Compute the discrete normal vector of the surface parametrized + * by the discrete solution. */ - // auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce, Qhom, effectivePrestrain, parameterSet); - auto localEnergy_prestrain = std::make_shared<GFE::DiscreteKirchhoffBendingEnergyPrestrained<CoefficientBasis, LocalDKFunction, decltype(localForce), ACoefficient>>(localDKFunction, localForce, parameterSet, pyModule); - - // LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_conforming(localEnergy_conforming.get()); - // LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_nonconforming(localEnergy_nonconforming.get()); - LocalGeodesicFEADOLCStiffness<CoefficientBasis, Coefficient> localGFEADOLCStiffness_prestrain(localEnergy_prestrain.get()); - // GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_conforming(coefficientBasis, localGFEADOLCStiffness_conforming); - // GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_nonconforming(coefficientBasis, localGFEADOLCStiffness_nonconforming); - GeodesicFEAssembler<CoefficientBasis, Coefficient> assembler_prestrain(coefficientBasis, localGFEADOLCStiffness_prestrain); - - - - + // auto surfaceNormalDiscreteCoefficients = computeDiscreteSurfaceNormal(localDKFunctionDouble, normalBasis); + //------------------------------------------------------------------------------------- + // auto surfaceNormalDiscrete = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3> >(normalBasis, surfaceNormalDiscreteCoefficients); + vtkWriter.addVertexData(displacementFunction, VTK::FieldInfo("displacement", VTK::FieldInfo::Type::vector, 3)); + // vtkWriter.addVertexData(surfaceNormalDiscrete , VTK::FieldInfo("surfaceNormal_discrete", VTK::FieldInfo::Type::vector, 3)); + vtkWriter.write(resultFileName); + } + /** + * @brief Measure errors. + * 1. Compute the Isometry-Error + * 2. Compute the L2-Error and H1-SemiError as well as the energy difference + * between the discrete deformation u_h and the analytical deformation u . + */ + if (parameterSet.get<bool>("measure_isometryError", 0)) + { + auto isometry_errors = isometryError(localDKFunctionDouble, gridView); + if(isometry_errors[1] > Isometry_threshold[experimentNumber-1]) // Isometry-L2-error + { + std::cerr << std::setprecision(9); + std::cerr << "Isometry-L2-error is to large! " << std::endl; + std::cerr << "Isometry-L2-error is to large: "<< isometry_errors[1] << " but threshold is " << Isometry_threshold[experimentNumber-1] << std::endl; + return 1; + } + } + if (parameterSet.get<bool>("measure_analyticalError", 0)) + { + auto discretization_errors = measureAnalyticalError(localDKFunctionDouble,gridView,pyModule); /** - * @brief Create a solver: - * - Riemannian Newton with Hessian modification - * - Riemannian Trust-region + * @brief Check Quantities + * */ - RiemannianProximalNewtonSolver<CoefficientBasis, Coefficient> RNHMsolver; - RiemannianTrustRegionSolver<CoefficientBasis, Coefficient> RTRsolver; - - - std::string Solver_name = parameterSet.get<std::string>("Solver", "RNHM"); - double numerical_energy; //final discrete energy - - if(Solver_name == "RNHM") + // L2 - Discretization error + if(discretization_errors[0] > L2_threshold[experimentNumber-1]) { - - RNHMsolver.setup(*grid, - &assembler_prestrain, - isometryCoefficients, - dirichletNodes, - parameterSet); - - RNHMsolver.solve(); - isometryCoefficients = RNHMsolver.getSol(); - numerical_energy = RNHMsolver.getStatistics().finalEnergy; - } else if (Solver_name =="RiemannianTR") + std::cerr << std::setprecision(9); + std::cerr << "L2-error is to large: "<<discretization_errors[0] << " but threshold is " << L2_threshold[experimentNumber-1] << std::endl; + return 1; + } + // H1(semi) - Discretization error + if(discretization_errors[1] > H1_threshold[experimentNumber-1]) { - std::cout << "Using Riemannian Trust-region method for energy minimization." << std::endl; - RTRsolver.setup(*grid, - &assembler_prestrain, - isometryCoefficients, - dirichletNodes, - parameterSet); - RTRsolver.solve(); - isometryCoefficients = RTRsolver.getSol(); - numerical_energy = RTRsolver.getStatistics().finalEnergy; - } else - DUNE_THROW(Dune::Exception, "Unknown Solver type for bending isometries."); - - - - // Convert coefficient data structure from 'IsometryCoefficients' to 'VectorSpaceCoefficients' - VectorSpaceCoefficients x_out(deformationBasis.size()); - isometryToVectorCoefficientMap(deformationBasis,coefficientBasis,x_out,isometryCoefficients); - - //////////////////////////////// - // Output result - //////////////////////////////// - std::string baseNameDefault = "bending-isometries-"; - std::string baseName = parameterSet.get("baseName", baseNameDefault); - std::string resultFileName = parameterSet.get("resultPath", "") - + "/" + baseName - + "_level" + std::to_string(parameterSet.get<int>("macroGridLevel")); - - if (parameterSet.get<bool>("conforming_DiscreteJacobian", 1)) - resultFileName = resultFileName + "_C"; - else - resultFileName = resultFileName + "_NC"; - - - // Create a deformation function but this time with double-types. - using LocalDKFunctionD = GFE::LocalDiscreteKirchhoffBendingIsometry<DeformationBasis, CoefficientBasis, IsometryCoefficients>; - LocalDKFunctionD localDKFunctionDouble(deformationBasis, coefficientBasis, isometryCoefficients); - - - - - - if (parameterSet.get<bool>("writeVTK", 1)) - { - std::cout << "write VTK..." << std::endl; - - /** - * @brief Compute the displacement from the deformation. - * interpolate the identity and substract from the coefficient vector. - */ - VectorSpaceCoefficients identity(deformationBasis.size()); - IdentityGridEmbedding<double> identityGridEmbedding; - interpolate(deformationBasis, identity, identityGridEmbedding); - - // auto identity_tmp = identity; - - // Compute the displacement - auto displacement = x_out; - displacement -= identity; - - // std::cout << "displacement.size():" << displacement.size() << std::endl; - auto deformationFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, x_out); - auto displacementFunction = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, displacement); - - /** - * @brief We need to subsample, because VTK cannot natively display real third-order functions - */ - int subsamplingRefinement = parameterSet.get<int>("subsamplingRefinement", 2); - SubsamplingVTKWriter<GridView> vtkWriter(gridView, Dune::refinementLevels(subsamplingRefinement)); - // SubsamplingVTKWriter<GridView> vtkWriter(gridView, Dune::refinementLevels(2)); - - - - /** - * @brief Basis used to represent normal vector fields - * - */ - auto normalBasis = makeBasis(gridView, - power<3>( - lagrange<1>(), - flatLexicographic())); - // auto normalBasis = makeBasis(gridView, - // power<3>( - // lagrange<1>(), - // blockedInterleaved())); - - - // TEST Compute - - - // auto normalLambda = [deformationFunction](const FieldVector<double,2>& x) - // { - // // deformationfunction.derivative() ... //needs binding?! - - - // } - - - + std::cerr << std::setprecision(9); + std::cerr << "H1-error is to large: "<< discretization_errors[1] << " but threshold is " << H1_threshold[experimentNumber-1] << std::endl; + return 1; + } + } /** - * @brief Interpolate and VTK-write analytical solution "u" from ParamterFile. + * @brief Write Energy values. + * */ - if (parameterSet.get<bool>("vtkwrite_analyticalSolution", 0)) + // auto numerical_energy = solver.getStatistics().finalEnergy; + std::cout << "(Final) Energy of discrete solution: " << numerical_energy<< std::endl; + if (parameterSet.get<bool>("compare_EnergyValues", 0)) { - // auto pythonAnalyticalSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("u"), pyModule.get("du")); - auto pythonAnalyticalSolution = Python::makeDifferentiableFunction<FieldVector<double,3>(FieldVector<double,2>)>(pyModule.get("displacement"), pyModule.get("displacementGradient")); - - - // deprecated: interpolate ... - // VectorSpaceCoefficients y(deformationBasis.size()); - // interpolate(deformationBasis, y, pythonAnalyticalSolution); - // // Compute the displacement - // auto displacementAnalytical = y; - // // displacementAnalytical -= identity_tmp; - // displacementAnalytical -= identity; - + auto analytical_energy = parameterSet.get<double>("analytical_energy"); + auto energy_difference = analytical_energy - numerical_energy; + std::cout << "Analytical energy: " << analytical_energy<< std::endl; + std::cout << "Energy difference: " << energy_difference << std::endl; - // auto pythonIdentity = Python::make_function<FieldVector<double,3>>(IdentityGridEmbedding<double>::operator()) - - - // auto displacementFunctionAnalytical = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, displacementAnalytical); - // auto deformationFunctionAnalytical = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(deformationBasis, y); - // vtkWriter.addVertexData(displacementFunctionAnalytical, VTK::FieldInfo("displacement_analytical", VTK::FieldInfo::Type::vector, 3)); - // vtkWriter.addVertexData(deformationFunctionAnalytical, VTK::FieldInfo("deformation_analytical", VTK::FieldInfo::Type::vector, 3)); - - vtkWriter.addVertexData((pythonAnalyticalSolution), VTK::FieldInfo("displacement_analytical", VTK::FieldInfo::Type::vector, 3)); - /** - * @brief Get the normal vector field of the surface parametrized - * by the analytical solution. - * - We represent the normal vector in a first order Lagrange-Power basis ('normalBasis'). - */ - if (parameterSet.get<bool>("vtkWrite_analyticalSurfaceNormal", 0)) + if(energy_difference > Energy_threshold[experimentNumber-1] ) { - // Get the surface normal function. - auto pythonSurfaceNormal = Python::make_function<FieldVector<double,3>>(pyModule.get("surfaceNormal")); - - - // deprecated: interpolate ... - // std::vector<FieldVector<double,3>> normalVectorCoefficients(normalBasis.size()); - // Dune::Functions::interpolate(normalBasis, normalVectorCoefficients, pythonSurfaceNormal); - // auto surfaceNormalAnalytical = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(normalBasis, normalVectorCoefficients); - // vtkWriter.addVertexData(surfaceNormalAnalytical, VTK::FieldInfo("surfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); - - vtkWriter.addVertexData(pythonSurfaceNormal, VTK::FieldInfo("surfaceNormal_analytical", VTK::FieldInfo::Type::vector, 3)); + std::cerr << std::setprecision(9); + std::cerr << "Energy difference is to large:" << energy_difference << " but threshold is " << Energy_threshold[experimentNumber-1] << std::endl; + return 1; } } - //------------------------------------------------------------------------------------- TODO: OUTSOURCE - /** - * @brief TEST: Compute the discrete normal vector of the surface parametrized - * by the discrete solution. - */ - auto surfaceNormalDiscreteCoefficients = computeDiscreteSurfaceNormal(localDKFunctionDouble, normalBasis); - //------------------------------------------------------------------------------------- - - // Create DiscreteGlobalBasisFunctions. - auto surfaceNormalDiscrete = Functions::makeDiscreteGlobalBasisFunction<FieldVector<double,3>>(normalBasis, surfaceNormalDiscreteCoefficients); - vtkWriter.addVertexData(displacementFunction, VTK::FieldInfo("displacement", VTK::FieldInfo::Type::vector, 3)); - vtkWriter.addVertexData(surfaceNormalDiscrete , VTK::FieldInfo("surfaceNormal_discrete", VTK::FieldInfo::Type::vector, 3)); - vtkWriter.write(resultFileName); - } - - - /** - * @brief Measure errors. - * 1. Compute the Isometry-Error - * 2. Compute the L2-Error and H1-SemiError as well as the energy difference - * between the discrete deformation u_h and the analytical deformation u . - */ - if (parameterSet.get<bool>("measure_isometryError", 0)) - { - auto isometry_errors = isometryError(localDKFunctionDouble, gridView); - if(isometry_errors[1] > Isometry_threshold[experimentNumber-1]) // Isometry-L2-error - { - std::cerr << std::setprecision(9); - std::cerr << "Isometry-L2-error is to large! " << std::endl; - std::cerr << "Isometry-L2-error is to large: "<< isometry_errors[1] << " but threshold is " << Isometry_threshold[experimentNumber-1] << std::endl; - return 1; - } - - } - - if (parameterSet.get<bool>("measure_analyticalError", 0)) - { - auto discretization_errors = measureAnalyticalError(localDKFunctionDouble,gridView,pyModule); - - - /** - * @brief Check Quantities - * - */ - // L2 - Discretization error - if(discretization_errors[0] > L2_threshold[experimentNumber-1]) - { - std::cerr << std::setprecision(9); - std::cerr << "L2-error is to large: "<<discretization_errors[0] << " but threshold is " << L2_threshold[experimentNumber-1] << std::endl; - return 1; - } - // H1(semi) - Discretization error - if(discretization_errors[1] > H1_threshold[experimentNumber-1]) - { - std::cerr << std::setprecision(9); - std::cerr << "H1-error is to large: "<< discretization_errors[1] << " but threshold is " << H1_threshold[experimentNumber-1] << std::endl; - return 1; - } - } - - - - /** - * @brief Write Energy values. - * - */ - // auto numerical_energy = solver.getStatistics().finalEnergy; - std::cout << "(Final) Energy of discrete solution: " << numerical_energy<< std::endl; - if (parameterSet.get<bool>("compare_EnergyValues", 0)) - { - auto analytical_energy = parameterSet.get<double>("analytical_energy"); - auto energy_difference = analytical_energy - numerical_energy; - std::cout << "Analytical energy: " << analytical_energy<< std::endl; - std::cout << "Energy difference: " << energy_difference << std::endl; - - if(energy_difference > Energy_threshold[experimentNumber-1] ) - { - std::cerr << std::setprecision(9); - std::cerr << "Energy difference is to large:" << energy_difference << " but threshold is " << Energy_threshold[experimentNumber-1] << std::endl; - return 1; - } - } - - // // Write the corresponding coefficient vector: verbatim in binary, to be completely lossless - // char iFilename[200]; - // sprintf(iFilename, (resultFileName + ".data").c_str()); - - // FILE* fpIterate = fopen(iFilename, "wb"); - // if (!fpIterate) - // DUNE_THROW(SolverError, "Couldn't open file " << iFilename << " for writing"); - - // for (size_t j=0; j<isometryCoefficients.size(); j++) - // fwrite(&isometryCoefficients[j], sizeof(Coefficient), 1, fpIterate); - - // fclose(fpIterate); - - - #if 0 - // Write the corresponding coefficient vector: verbatim in binary, to be completely lossless - typedef BlockVector<typename Coefficient::CoordinateType> EmbeddedVectorType; - EmbeddedVectorType xEmbedded(isometryCoefficients.size()); - for (size_t i = 0; i<isometryCoefficients.size(); i++) - { - xEmbedded[i] = isometryCoefficients[i].globalCoordinates(); - std::cout << "isometryCoefficients[i].globalCoordinates():" << isometryCoefficients[i].globalCoordinates() << std::endl; - - } - std::ofstream outFile(resultFileName + ".data", std::ios_base::binary); - MatrixVector::Generic::writeBinary(outFile, xEmbedded); - outFile.close(); - /////////////////////////////////////////// - // (Option) write Solution(DOF)-vector and vertex coordinates to .txt-File - /////////////////////////////////////////// - if (parameterSet.get<bool>("writeDOFvector", 0)) - writeDOFVector(gridView,targetDim, x, "DOFVectorR" + std::to_string(dim) + "_R" + std::to_string(targetDim) + ".txt"); - #endif - - - - std::cout << "TEST - " << experiment << "passed." << std::endl; - std::cout << "Total time elapsed: " << globalTimer.elapsed() << std::endl; + std::cout << "TEST - " << experiment << "passed." << std::endl; + std::cout << "Total time elapsed: " << globalTimer.elapsed() << std::endl; } std::cout << "Properties-shape-test passed." << std::endl; return 0; - } \ No newline at end of file +} diff --git a/test/readmicrostructuretest.cc b/test/readmicrostructuretest.cc index 0e728264ed1c943b9e2180e5fe12bedacadd7235..54ede70707107292a4913526de07a9d273355859 100644 --- a/test/readmicrostructuretest.cc +++ b/test/readmicrostructuretest.cc @@ -85,7 +85,7 @@ int main(int argc, char *argv[]) MPIHelper::instance(argc, argv); Dune::Timer globalTimer; - //--- setup Log-File + //--- setup Log-File std::fstream log; std::cout << "Current path is " << std::filesystem::current_path() << '\n'; @@ -94,26 +94,13 @@ int main(int argc, char *argv[]) std::cout << "dir_path: " << file_path.parent_path() << std::endl; std::string dir_path = file_path.parent_path(); - // if (argc < 3) - // DUNE_THROW(Exception, "Usage: ./Cell-Problem <python path> <python module without extension>"); - - // Start Python interpreter - // Python::start(); - // auto pyMain = Python::main(); - // pyMain.runStream() - // << std::endl << "import math" - // << std::endl << "import sys" - // << std::endl << "sys.path.append('" << argv[1] << "')" << std::endl; - // auto pyModule = pyMain.import(argv[2]); - - // Relative path/Test version: Python::start(); auto pyMain = Python::main(); pyMain.runStream() - << std::endl << "import math" - << std::endl << "import sys" - << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; + << std::endl << "import math" + << std::endl << "import sys" + << std::endl << "sys.path.append('" << dir_path << "')" << std::endl; auto pyModule = pyMain.import("readmicrostructuretest"); ParameterTree parameterSet; @@ -135,10 +122,9 @@ int main(int argc, char *argv[]) FieldVector<double,dim> lower({-1.0/2.0, -1.0/2.0, -1.0/2.0}); FieldVector<double,dim> upper({1.0/2.0, 1.0/2.0, 1.0/2.0}); - int gridLevel = 3; - - std::array<int, dim> nElements = {(int)std::pow(2,gridLevel) ,(int)std::pow(2,gridLevel) ,(int)std::pow(2,gridLevel)}; - std::cout << "Number of Grid-Elements in each direction: " << nElements << std::endl; + int microGridLevel = parameterSet.get<int>("microGridLevel", 1); + std::array<int, dim> nElements = {(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel) ,(int)std::pow(2,microGridLevel)}; + std::cout << "Number of Grid-Elements in each direction: " << (int)std::pow(2,microGridLevel) << std::endl; using CellGridType = YaspGrid<dim, EquidistantOffsetCoordinates<double, dim> >; CellGridType grid_CE(lower,upper,nElements); @@ -175,9 +161,9 @@ int main(int argc, char *argv[]) /** * @brief Create instance of class - * This needs to be a 'Python::Reference' and not 'Python::Callable' + * This needs to be a 'Python::Reference' and not 'Python::Callable' * since Callable only works if __call__(self,x) is implemented in the python module!!! - * + * */ Python::Reference microstructure = MicrostructureClass(); //Setup a constant microstructure @@ -200,7 +186,7 @@ int main(int argc, char *argv[]) std::cout << "microstructure phaseType:" << phaseType << std::endl; Dune::FieldVector<double,2> materialParameters(0); - microstructure.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,2>>(materialParameters); + microstructure.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,2> >(materialParameters); std::cout << "Lame-Parameters (mu,lambda): (" << materialParameters[0] << "," << materialParameters[1] << ") " << std::endl; @@ -219,24 +205,24 @@ int main(int argc, char *argv[]) std::cout << "orthotropic material with material rotation axis: " << axis << std::endl; std::cout << "orthotropic material with material rotation angle: " << angle << std::endl; - - microstructure.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,9>>(materialParameters_orthotropic); + + microstructure.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldVector<double,9> >(materialParameters_orthotropic); printvector(std::cout, materialParameters_orthotropic, "materialParameters_orthotropic: ", "--"); // anisotropic material setup - Dune::FieldMatrix<double,6,6> materialParameters_anisotropic(0); + Dune::FieldMatrix<double,6,6> materialParameters_anisotropic(0); phase = 4; microstructure.get("phase" + std::to_string(phase) + "_type").toC<std::string>(phaseType); std::cout << "microstructure phaseType:" << phaseType << std::endl; - microstructure.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldMatrix<double,6,6>>(materialParameters_anisotropic); + microstructure.get("materialParameters_phase" + std::to_string(phase)).toC<Dune::FieldMatrix<double,6,6> >(materialParameters_anisotropic); printmatrix(std::cout, materialParameters_anisotropic, "materialParameters_anisotropic: ", "--"); - //Get prestrain of phase - auto prestrain1 = Python::make_function<Dune::FieldMatrix<double,3,3>>(Python::Callable(microstructure.get("prestrain_phase" + std::to_string(phase)))); + //Get prestrain of phase + auto prestrain1 = Python::make_function<Dune::FieldMatrix<double,3,3> >(Python::Callable(microstructure.get("prestrain_phase" + std::to_string(phase)))); auto localPrestrain1 = localFunction(Dune::Functions::makeGridViewFunction(prestrain1, gridView_CE)); @@ -275,7 +261,7 @@ int main(int argc, char *argv[]) // auto correctorComputer = CorrectorComputer(Basis_CE, material, log, parameterSet); // correctorComputer.assemble(); // correctorComputer.solve(); - std::shared_ptr<CorrectorComputer<decltype(Basis_CE),MaterialType> > correctorComputer = std::make_shared<CorrectorComputer<decltype(Basis_CE),MaterialType>>(Basis_CE, material, parameterSet); + std::shared_ptr<CorrectorComputer<decltype(Basis_CE),MaterialType> > correctorComputer = std::make_shared<CorrectorComputer<decltype(Basis_CE),MaterialType> >(Basis_CE, material, parameterSet); correctorComputer->assemble(); correctorComputer->solve(); diff --git a/test/readmicrostructuretest.py b/test/readmicrostructuretest.py index 68899911c22b20570598a0e8b5b8087a6d114c26..0b6295b80826ec019ae5b9cbb2a128cccae1da3f 100644 --- a/test/readmicrostructuretest.py +++ b/test/readmicrostructuretest.py @@ -74,35 +74,45 @@ class Microstructure: +# parameterSet.printMicroOutput = 1 # Flag that allows to supress the output of the micro-problem. + +############################################# +# Grid parameters +############################################# +# parameterSet.microGridLevel = 2 + ############################################# # Assembly options ############################################# -parameterSet.set_IntegralZero = 1 #(default = false) -parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) -#parameterSet.arbitraryLocalIndex = 7 #(default = 0) -#parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.set_IntegralZero = 1 #(default = false, This overwrites the option 'set_oneBasisFunction_Zero') +parameterSet.set_oneBasisFunction_Zero = 1 #(default = false) +# parameterSet.arbitraryLocalIndex = 7 #(default = 0) +# parameterSet.arbitraryElementNumber = 3 #(default = 0) +parameterSet.cacheElementMatrices = 1 # Use caching of element matrices ############################################# -# Solver Options, Type: #1: CG - SOLVER , #2: GMRES - SOLVER, #3: QR - SOLVER (default), #4: UMFPACK - SOLVER +# Solver Options, Type: #1: CHOLMOD (default) | #2: UMFPACK | #3: GMRES | #4 CG | #5 QR: +# (maybe switch to an iterative solver (e.g. GMRES) if direct solver (CHOLMOD/UMFPACK) runs out of memory for too fine grids) ############################################# -parameterSet.Solvertype = 3 # recommended to use iterative solver (e.g GMRES) for finer grid-levels -parameterSet.Solver_verbosity = 0 #(default = 2) degree of information for solver output +parameterSet.Solvertype = 1 +parameterSet.Solver_verbosity = 0 # (default = 2) degree of information for solver output ############################################# # Write/Output options #(default=false) ############################################# # --- (Optional output) write Material / prestrain / Corrector functions to .vtk-Files: parameterSet.write_materialFunctions = 0 # VTK indicator function for material/prestrain definition - -# --- (Additional debug output) -parameterSet.print_debug = 0 #(default=false) - +#parameterSet.write_prestrainFunctions = 1 # VTK norm of B (currently not implemented) +parameterSet.MaterialSubsamplingRefinement= 2 # --- Write Correctos to VTK-File: -parameterSet.write_VTK = 0 - -# --- Use caching of element matrices: -parameterSet.cacheElementMatrices = 1 - -# The grid can be refined several times for a higher resolution in the VTK-file. -parameterSet.subsamplingRefinement = 0 +parameterSet.writeCorrectorsVTK = 0 +# --- write effective quantities (Qhom.Beff) to .txt-files +parameterSet.write_EffectiveQuantitiesToTxt = False +############################################# +# Debug options +############################################# +parameterSet.print_debug = 0 #(default=false) +parameterSet.print_conditionNumber = 0 +parameterSet.print_corrector_matrices = 0 +parameterSet.write_checkOrthogonality = 0 #Check orthogonality (75) from the paper. diff --git a/testsuite/energylandscape.mplstyle b/testsuite/energylandscape.mplstyle new file mode 100644 index 0000000000000000000000000000000000000000..9d9b7d454224b815c1c283d2733cf1fa66349558 --- /dev/null +++ b/testsuite/energylandscape.mplstyle @@ -0,0 +1,62 @@ +text.usetex : True +#text.latex.preamble = r'\usepackage{amsfonts}' # Makes Use of \mathbb possible. + + +font.family : "serif" +font.size : 9 + + +xtick.bottom : True +xtick.major.size : 2 +xtick.minor.size : 1.5 +xtick.major.width : 0.75 +xtick.labelsize : 9 +xtick.major.pad : 1 + + +ytick.left : True +ytick.major.size : 1 +ytick.minor.size : 1.5 +ytick.major.width : 0.2 +ytick.labelsize : 9 +ytick.major.pad : 1 +ytick.labelcolor : white + +#axes.tick_params.grid_alpha : 0.1 + + +axes.titlesize : 9 +axes.titlepad : 1 +axes.labelsize : 9 +axes.labelpad : 0.5 +axes.autolimit_mode : round_numbers + + +axes.grid.axis : y + + +#Adjust Legend: +legend.frameon : True # Use frame for legend +legend.framealpha : 0.5 +legend.fontsize : 9 # fontsize of legend +#Adjust grid: +axes.grid : True +#axes.grid : False + +#axes.Axis.grid : True + + + +#axes.axisbelow : False + + + + +grid.linewidth : 0.7 +grid.alpha : 1.0 + +#grid.color : 'lightgray' +grid.color : 'black' + + + diff --git a/testsuite/macro-problem-testsuite.py b/testsuite/macro-problem-testsuite.py index 52e1dd45335ad589d9e19ffe6f00fc5318454745..9e3ef8de32880fca72b286dced5603d6c9724695 100644 --- a/testsuite/macro-problem-testsuite.py +++ b/testsuite/macro-problem-testsuite.py @@ -4,356 +4,275 @@ import sys import re import numpy as np from prettytable import PrettyTable -# import latextable -# from texttable import Texttable from tabulate import tabulate -# import time import importlib -# import fileinput - - -#################################################################### -# Usage: -# -# python3 macro-problem-testsuite.py CONTAINER_PATH_Flag <slurm_array_task_id> -# -# e.g. python3 /home/klaus/Desktop/Dune_master/dune-gfe/bending-isometries-testsuite/bending-isometries-testsuite.py 0 2 -# -#################################################################### - +import shutil +from microstructure_PythonAddons import* +# import time -def SetParameterMaterialFunction(inputFunction, parameterName, parameterValue): - with open(inputFunction+'.py', 'r') as file: - filedata = file.read() - filedata = re.sub('(?m)'+str(parameterName)+'\s?=.*',str(parameterName)+' = '+str(parameterValue),filedata) - f = open(inputFunction+'.py','w') - f.write(filedata) - f.close() - +""" + Usage: -# parameterArray=np.array([ ["rho", np.array([0, 1,2])], ["parameterSet.maxProximalNewtonSteps", [0, 10, 100]] ], dtype=object) + python3 macro-problem-testsuite.py CONTAINER_PATH_Flag <slurm_array_task_id> -# Python list version: -# parameterArray=[ ["rho", [0, 1,2]], ["parameterSet.maxProximalNewtonSteps", [0, 10, 100]] ] + For example: + python3 /home/klaus/Desktop/Dune_microsim/dune-microstructure/testsuite/macro-problem-testsuite 0 2 -# parameterArray=[ ["rho", [0,1,2,5]]] + 0: running on local machine (as opposed to a Container 1) + 2: run the second experiment in the 'scenarios' list. +""" -# ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -# ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ -compute_BendingIsometry = True +solve_MacroProblem = True create_outputTable = False - # 1. Experiment 2. ExperimentPathExtension 3. MacroGridLevels, 4. Executable 5.(additional) parameterArray: [["ParameterName", ParameterValue], ...] scenarios = [ - # ["buckling_experiment" , "/buckling_experiment", [3,3], "/macro-problem" , [["rho", [0,1,2,3,4,5]]] ], - ["cylindrical_2variableBC" , "/macro-problem/variableBC", [3,3], "/macro-problem" , [["delta", [0.75]]] ], - ["cylindrical_2variableBC" , "/macro-problem/variableBC", [3,3], "/macro-problem" , [["delta", [0.0]]] ], - ["cylindrical_2variableBC_wood" , "/macro-problem/variableBC", [3,3], "/macro-problem" , [["delta", [0.1,0.25,0.5,1.0,1.5,2.0]]] ], - ["buckling_experiment" , "/macro-problem/buckling_experiment", [3,3], "/macro-problem" , [["rho", [1.0]]] ], - ["buckling_experiment_Top" , "/macro-problem/buckling_experiment", [3,3], "/macro-problem" , [["rho", [3,4,5]]] ], - ["buckling_experiment_xAlignedTop" , "/macro-problem/buckling_experiment", [3,3], "/macro-problem" , [["rho", [5]]] ], - ["buckling_experiment_xAlignedLow" , "/macro-problem/buckling_experiment", [3,3], "/macro-problem" , [["rho", [5]]] ], - ["self-folding-box", "/macro-problem/self-folding-box", [5,5], "/macro-problem" , [["rho", [500]]] ], - ["twisted-valley", "/macro-problem/Rumpf-Experiments", [2,2], "/macro-problem" , [["test", [1.0]]] ], - ["diagonal-trusses", "/macro-problem/Rumpf-Experiments", [2,2], "/macro-problem" , [["test", [1.0]]] ], - ["cylindrical_1", "", [0,0], "/micro-problem" , [["mu_phase1", [90,100,110]]] ], - ["parametrized_laminate", "", [0,0], "/micro-problem" , [] ], + ["buckling_experiment" , "/macro-problem/buckling_experiment", [3,4,5], [["rho", [5.0]]] ], + ["cylindrical_2variableBC" , "/macro-problem/variableBC", [2], [["delta", [1.5]]] ], + ["buckling_experiment" , "/macro-problem/buckling_experiment", [3,4,5,6], [] ], + ["cylindrical_2variableBC" , "/macro-problem/variableBC", [2], [["delta", [0.25,0.5,1.0,1.5,2.0]]] ], + ["fibreRotation", "/macro-problem", [1,2,3], [] ], + ["MVM_infinitynorm", "/macro-problem", [3], [] ], + ["MVM_onenorm", "/macro-problem", [2], [] ], + ["MVM_infinitynorm", "/macro-problem", [2], [] ], + ["validation", "/macro-problem/validation", list(range(1,13,1)), [] ], + ["buckling_experiment_rho_0" , "/macro-problem/buckling_experiment", list(range(3,7,1)), [] ], + ["buckling_experiment_rho_1" , "/macro-problem/buckling_experiment", list(range(3,7,1)), [] ], + ["cylindrical_2variableBC_delta025" , "/macro-problem/variableBC", [2], [] ], #4 + ["cylindrical_2variableBC_delta20" , "/macro-problem/variableBC", [2], [] ], #4 + ["buckling_experiment" , "/macro-problem/buckling_experiment", [1,3], [["rho", [0.0]]] ], + ["buckling_experiment" , "/macro-problem/buckling_experiment", list(range(3,7,1)), [["rho", [1.0]]] ], + ["buckling_experiment" , "/macro-problem/buckling_experiment", [3], [["rho", [0.805,0.81,0.8105]]] ], #3 + ["cylindrical_2variableBC" , "/macro-problem/variableBC", [3], [["delta", [1.3,1.35,1.4,1.45]]] ], + ["cylindrical_2variableBC" , "/macro-problem/variableBC", [3], [["delta", [0.1,0.25,0.5,0.75,1.0,1.5,2.0]]] ], #4 + ["buckling_experiment" , "/macro-problem/buckling_experiment", [3], [["rho", [0.1,0.25,0.5,0.75,1.0,1.5]]] ], + ["cylindrical_2variableBC" , "/macro-problem/variableBC", [3], [["delta", [2.0]]] ], + ["cylindrical_2variableBC" , "/macro-problem/variableBC", [3], [["delta", [0.25]]] ], + ["cylindrical_2variableBC_wood" , "/macro-problem/variableBC", [3], [["delta", [0.1,0.25,0.5,1.0,1.5,2.0]]] ], + ["buckling_experiment_Top" , "/macro-problem/buckling_experiment", [3], [["rho", [3,4,5]]] ], + ["buckling_experiment_xAlignedTop" , "/macro-problem/buckling_experiment", [3], [["rho", [5]]] ], + ["buckling_experiment_xAlignedLow" , "/macro-problem/buckling_experiment", [3], [["rho", [5]]] ], + ["self-folding-box", "/macro-problem/self-folding-box", [5], [["rho", [500]]] ], + ["twisted-valley", "/macro-problem/Rumpf-Experiments", [2], [["test", [1.0]]] ], + ["diagonal-trusses", "/macro-problem/Rumpf-Experiments", [2], [["test", [1.0]]] ] ] -print('sys.argv[0]', sys.argv[0]) -print('sys.argv[1]', sys.argv[1]) -print('sys.argv[2]', sys.argv[2]) - +# print('sys.argv[0]', sys.argv[0]) +# print('sys.argv[1]', sys.argv[1]) +# print('sys.argv[2]', sys.argv[2]) +# print('list(range(3,7,1)):',list(range(3,7,1))) CONTAINER = int(sys.argv[1]) slurm_array_task_id = int(sys.argv[2]) - parameterFile = scenarios[slurm_array_task_id][0] pathExtension = scenarios[slurm_array_task_id][1] gridLevels = scenarios[slurm_array_task_id][2] -executable = scenarios[slurm_array_task_id][3] -parameterArray = scenarios[slurm_array_task_id][4] - -#Test -# parameterArray = [[" -rho ", [4.0]]] - - +executable = "/macro-problem" +# executable = scenarios[slurm_array_task_id][3] +parameterArray = scenarios[slurm_array_task_id][3] +#Get current working directory: +cwd = os.getcwd() +modulePath = os.path.abspath(os.path.join(cwd, os.pardir)) print('pathExtension: ', pathExtension) +print("Parent Directory is: ", modulePath) +#gridLevels = [1] - - - -# conforming_DiscreteJacobian = scenarios[slurm_array_task_id][1] -# INSTRUMENTED = scenarios[slurm_array_task_id][3] - - -#Todo conforming option. +#--- (Todo) conforming/Instrumented option. conformity = "" INSTRUMENTED = 0 conforming_DiscreteJacobian = 0 - # if conforming_DiscreteJacobian: # conformity = "_conforming" # else: # conformity = "_nonconforming" -#Get current working directory: -cwd = os.getcwd() - -modulePath = os.path.abspath(os.path.join(cwd, os.pardir)) -print("Parent Directory is: ", modulePath) - - -# for experiment in scenarios: .. - -#Path for parameterFile +""" + Define relevant paths. +""" if CONTAINER: - + #--- Container version # Barnard_Workspace = "/data/horse/ws/s7603593-microstructure/" - #--- Barnard/CONTAINER version + pythonPath = "/dune/dune-microstructure/experiment" + pathExtension - # resultPath = "outputs" + "_" + scenarios[slurm_array_task_id][0] - # resultPath = Barnard_Workspace + "outputs" + "_" + scenarios[slurm_array_task_id][0] - + # resultPath = Barnard_Workspace + "outputs" + "_" + scenarios[slurm_array_task_id][0] resultPath = "outputs" + "_" + scenarios[slurm_array_task_id][0] - - instrumentedPath = resultPath + "/instrumented" executablePath = "/dune/dune-microstructure/build-cmake/src" - # try: - # os.mkdir(resultPath) - # os.mkdir(instrumentedPath) - # except OSError as error: - # print(error) - - # resultPath = "/" + resultPath - # instrumentedPath = "/" + + # Path used for copying experiment parameter files (for safe modification) + new_ParameterPath = "tmp_experiments" + original_ParameterPath = pythonPath + "/" + parameterFile +'.py' + else : #--- Local version - # pythonPath = "/home/klaus/Desktop/Dune_bendIso/dune-microstructure/experiment" + pathExtension - # resultPath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/outputs' + "_" + scenarios[slurm_array_task_id][0] - # instrumentedPath = resultPath + "/instrumented" - # executablePath = '/home/klaus/Desktop/Dune_bendIso/dune-microstructure/build-cmake/src' pythonPath = modulePath + "/experiment" + pathExtension resultPath = modulePath + "/outputs" + "_" + scenarios[slurm_array_task_id][0] instrumentedPath = resultPath + "/instrumented" executablePath = modulePath + '/build-cmake/src' - # try: - # os.mkdir(resultPath) - # os.mkdir(instrumentedPath) - # except OSError as error: - # print(error) - -try: - os.mkdir(resultPath) - os.mkdir(instrumentedPath) -except OSError as error: - print(error) - + # Path used for copying experiment parameter files (for safe modification) + # tmp_ExpPath = "/home/klaus" + new_ParameterPath = "/home/klaus" + original_ParameterPath = pythonPath + "/" + parameterFile +'.py' + +# Create output directories if non existent +os.makedirs(resultPath, exist_ok=True) +os.makedirs(instrumentedPath, exist_ok=True) + +executable = executablePath + executable +path = os.getcwd() +# print("Path: ", path) +# print('new_ParameterPath : ', new_ParameterPath) +# print('pythonPath: ', pythonPath) -print('pythonPath: ', pythonPath) +""" + Create a copy of the parameter-file. +""" +CreateParameterCopy(original_ParameterPath,new_ParameterPath,parameterFile) -### Access ParameterFile variables. + +""" + Access ParameterFile variables. +""" sys.path.insert(0, pythonPath) __import__(parameterFile, fromlist=['parameterSet']) imported_module = importlib.import_module(parameterFile) parameterSet = getattr(imported_module, "parameterSet") - - -#--- Set update grid path if unstructured/GMSH-grid is used. +# Check if unstructured grid is used & Update grid-path. if( parameterSet.structuredGrid == 'false'): - print('Update gridPath') - SetParameterMaterialFunction(pythonPath + "/" + scenarios[slurm_array_task_id][0], 'gridPath' , "'" + str(pythonPath) + "'") + print('Update unstructured grid-Path.') + ModifyParameterFile(os.path.join(new_ParameterPath, parameterFile), 'gridPath' , "'" + str(pythonPath) + "'") -# dim = parameterSet.dim -# maxSolverSteps = parameterSet.maxProximalNewtonSteps +# pathArray = [resultPath,instrumentedPath,new_ParameterPath,pythonPath] -# executable = executablePath + "/macro-problem" -executable = executablePath + executable +""" + Solve the macroscopic minimization problem + for the given parameters. +""" +if solve_MacroProblem: + SolveMacroProblem(executable,parameterFile,gridLevels,parameterArray,conforming_DiscreteJacobian,resultPath,instrumentedPath,new_ParameterPath,pythonPath,INSTRUMENTED) -path = os.getcwd() -print("Path: ", path) -############################################ - -print('parameterArray:', parameterArray) -print('len(parameterArray):', len(parameterArray)) -print('len(parameterArray[0][1]): ', len(parameterArray[0][1])) -print('Number of different additional parameters:', len(parameterArray)) -# print('len(parameterArray)[1]:', len(parameterArray[1])) -# print('len(parameterArray[0][1]):', len(parameterArray[0][1])) -# print('parameterArray[0][1][1]:', parameterArray[0][1][1]) - -# print('np.shape(parameterArray)[1]:', np.shape(parameterArray)[1]) -# print('np.shape(parameterArray[0][1]):', np.shape(parameterArray[0][1])) -# print('np.shape(parameterArray[0][1])[1]:', np.shape(parameterArray[0][1])[1]) - - - -# if len(parameterArray) == 0: -# nParams = 1 -# else: -# nParams = len(parameterArray) - - # if len(parameterArray) == 0: - # paramValues = 1 - # else: - # paramValues = len(parameterArray[i][1]) - -# ------ Loops through Parameters for Material Function ----------- -# for i in range(0, np.shape(parameterArray)[1]): -# for v in range(0,np.shape(parameterArray[i][1])[1]): -for i in range(0, len(parameterArray)): - for v in range(0,len(parameterArray[i][1])): - print("------------------") - print("New Loop") - print("------------------") - print('i:', i) - print('v:', v) - print('len(parameterArray[i][1]):', len(parameterArray[i][1])) - # print('parameterArray[i][v]:', parameterArray[i][v]) - - print('parameterName:' , parameterArray[i][0]) - print('parameterValue: ', parameterArray[i][1][v]) - # print('np.shape(parameterArray)[1]:', np.shape(parameterArray)[1]) - # print('np.shape(parameterArray[i][1]):', np.shape(parameterArray[i][1])) - # print('np.shape(parameterArray[i][1])[1]:', np.shape(parameterArray[i][1])[1]) - parameterName = parameterArray[i][0] - parameterValue = parameterArray[i][1][v] - - - - - ## Alternative version: actually changing the parset file.. - # Change Parameters: - print('...change input parameter:' , parameterName) - SetParameterMaterialFunction(pythonPath + "/" + scenarios[slurm_array_task_id][0], parameterName , parameterValue) - - - - baseName = scenarios[slurm_array_task_id][0] + "_" + parameterArray[i][0] + str(parameterArray[i][1][v]) - - #--- Compute discrete bending isometries - if compute_BendingIsometry: - processList = [] - for macroGridLevel in range(gridLevels[0],gridLevels[1]+1): - # if conforming_DiscreteJacobian: - # conformity = "_conforming" - # else: - # conformity = "_nonconforming" - - # LOGFILE = resultPath + "/" + parameterFile + conformity + "_macroGridLevel" + str(macroGridLevel) + parameterName + ".log" - LOGFILE = resultPath + "/" + parameterFile + "_macroGridLevel" + str(macroGridLevel) + "_" + parameterName + "_" + str(parameterValue) + ".log" - - print('LOGFILE:', LOGFILE) - print('executable:', executable) - print('parameterFile:', parameterFile) - print('resultPath:', resultPath) - - # testArray = [ " -rho " + str(8.0), " -beta " + str(0.10) ] - - # start_time = time.time() - p = subprocess.Popen(executable + " " + pythonPath + " " + parameterFile - + " -macroGridLevel " + str(macroGridLevel) - + " -resultPath " + str(resultPath) - + " -baseName " + str(baseName) - + " -instrumentedPath " + str(instrumentedPath) - + " -conforming_DiscreteJacobian " + str(conforming_DiscreteJacobian) - + " -instrumented " + str(INSTRUMENTED) - # + " -" + parameterName + " " + str(parameterValue) - + " | tee " + LOGFILE, shell=True) - - p.wait() # wait - # print("--- %s seconds ---" % (time.time() - start_time)) - print('------FINISHED PROGRAM on macroGridLevel:' + str(macroGridLevel)) - processList.append(p) - - # Wait for all simulation subprocesses before proceeding to the error measurement step - exit_codes = [p.wait() for p in processList] - - -# ------------ Create Output Table ----------------------------------------------------------------------------- + +""" + Create Table with computational results. +""" if create_outputTable: - #Setup Output-Table: - x = PrettyTable() - constraintError = 0.0 - - x.title = parameterFile - x.field_names = ["r", "#Triang/#DOF", "#Steps", "Energy difference", "discrete energy", "L2-Error" , "H1-Error", "L2-Isometry-Error", "wall-time" ] - x.align["k"] = "l" # Left align - x.padding_width = 1 # One space between column edges and contents (default) - - rows = [] - rows.append(["r", "#Triang/#DOF", "#Steps",r"$\lvert \cI(u) - \cI^h(u_h) \rvert$", "$\cI^h(u_h)$", r"$\lVert u - u_h_{L^2}\rVert_0$" , "wall-time" ]) - - for macroGridLevel in range(gridLevels[0],gridLevels[1]+1): - - LOGFILE = resultPath + "/" + parameterFile + conformity + "_macroGridLevel" + str(macroGridLevel) + ".log" - # Read Energy Values: - with open(LOGFILE, 'r') as file: - output = file.read() - - - tmp_energyDiff = re.findall(r'(?m)Energy difference: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) - tmp_energyAnalytical = re.findall(r'(?m)Analytical energy: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) - tmp_energyDiscrete = re.findall(r'(?m)Energy of discrete solution: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) - tmp_step = re.findall(r'(?m)Step Number: (\d+)',output) - tmp_reg = re.findall(r'(?m)regularization parameter: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)' ,output) - tmp_dofs = re.findall(r'(?m)Degrees of Freedom: (\d+)',output) - tmp_time = re.findall(r'(?m)Total time elapsed: (-?\d+\.?\d+\d?)',output) - tmp_isoErrorL2 = re.findall(r'(?m)L2-Isometry-error: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) - tmp_isoErrorL1 = re.findall(r'(?m)L1-Isometry-error: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) - tmp_L2Error = re.findall(r'(?m)L2-error: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) - tmp_H1Error = re.findall(r'(?m)H1-error: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) - tmp_elements = re.findall(r'(?m)elements: (\d+)',output) - - # print('tmp_step:',tmp_step) - print('tmp_step last:', int(tmp_step[-1])) - print('tmp_dofs:',tmp_dofs) - print('tmp_dofs last:', int(tmp_dofs[-1])) - # print('type tmp_energy:', type(tmp_energy)) - print('tmp_energyDiscrete:', tmp_energyDiscrete) - print('tmp_energyDiff:', tmp_energyDiff) - print('tmp_energyAnalytical:', tmp_energyAnalytical) - # print('tmp_energy last:', tmp_energy[-1]) - print('tmp_time:', tmp_time) - print('tmp_isoErrorL2 :', tmp_isoErrorL2 ) - print('tmp_isoErrorL1 :', tmp_isoErrorL1 ) - print('tmp_L2Error :', tmp_L2Error ) - print('tmp_H1Error :', tmp_H1Error ) - print('tmp_elements :', tmp_elements ) - - - x.add_row([macroGridLevel, tmp_elements[-1], int(tmp_step[-1]), tmp_energyDiff[-1], tmp_energyDiscrete[-1], tmp_L2Error[-1],tmp_H1Error[-1], tmp_isoErrorL2[-1], tmp_time[-1]]) - # rows.append.([macroGridLevel, tmp_elements[-1], int(tmp_step[-1]), tmp_energyDiff[-1], tmp_energyDiscrete[-1], tmp_L2Error[-1],tmp_H1Error[-1], tmp_isoErrorL2[-1], tmp_time[-1]]) - - - - # Write Table to text-file. - tablefile = open(resultPath + "/" + parameterFile + conformity + "_table" + ".txt", "w") - tablefile.write(str(x)) - tablefile.write('\n') - # tablefile.write(str(tabulate(rows, headers='firstrow', tablefmt='latex_raw'))) - # tablefile.write(str(tabulate(rows, headers='firstrow'))) - tablefile.close() - - - # Print Table - print(x) - # print(tabulate(rows, headers='firstrow', tablefmt='latex_raw')) - # print(tabulate(rows, headers='firstrow')) + """ + Create Table for each parameter in 'parameterArray' unless none is given + - Then create just one. + """ + # ------ Loops through Parameters ----------- + for i in range(0, len(parameterArray)) if len(parameterArray)>0 else [1]: + for v in range(0,len(parameterArray[i][1])) if len(parameterArray)>0 else [1]: + + #Setup Output-Table: + prettyTable = PrettyTable() + constraintError = 0.0 + + parameterName = parameterArray[i][0] + parameterValue = parameterArray[i][1][v] + + if len(parameterArray)>0: + prettyTable.title = parameterFile + "_" + parameterName + "_" + str(parameterValue) + else: + prettyTable.title = parameterFile + + + prettyTable.field_names = ["r", r"#Triang/#DOF", r"#Steps", r"discrete energy", r"Energy difference", r"L2-Error" , r"H1-Error", r"L2-Isometry-Error", r"wall-time" ] + prettyTable.align["k"] = "l" # Left align + prettyTable.padding_width = 1 # One space between column edges and contents (default) + + # Create another Table which outputs Latex-Synthax. + latexTable = [] + latexTable.append(["r", r"#Triang/#DOF", r"#Steps", r"$\cI^h(u_h)$", r"$\lvert \cI(u) - \cI^h(u_h) \rvert$", r"$\lVert u - u_h_{L^2}\rVert_0$" , r"wall-time" ]) + + for macroGridLevel in gridLevels: + + + if len(parameterArray)>0: + LOGFILE = resultPath + "/" + parameterFile + "_macroGridLevel" + str(macroGridLevel) + "_" + parameterName + "_" + str(parameterValue) + ".log" + else: + LOGFILE = resultPath + "/" + parameterFile + "_macroGridLevel" + str(macroGridLevel) + ".log" + + print('LOGFILE usef for Table:', LOGFILE) + # Read Energy Values: + with open(LOGFILE, 'r') as file: + output = file.read() + + + tmp_energyAnalytical = re.findall(r'(?m)Analytical energy: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) + tmp_energyDiscrete = re.findall(r'(?m)Energy of discrete solution: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) + tmp_step = re.findall(r'(?m)Step Number: (\d+)',output) + tmp_reg = re.findall(r'(?m)regularization parameter: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)' ,output) + tmp_dofs = re.findall(r'(?m)Degrees of Freedom: (\d+)',output) + tmp_time = re.findall(r'(?m)Total time elapsed: (-?\d+\.?\d+\d?)',output) + tmp_elements = re.findall(r'(?m)Number of Elements in the grid:\s*(\d+)',output) + tmp_isoErrorL2 = ['-'] + tmp_isoErrorL1 = ['-'] + tmp_L2Error = ['-'] + tmp_H1Error = ['-'] + tmp_energyDiff = ['-'] + + """ + Check is isometry-error is measured. + """ + if( parameterSet.measure_isometryError == 'true'): + tmp_isoErrorL2 = re.findall(r'(?m)L2-Isometry-error: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) + tmp_isoErrorL1 = re.findall(r'(?m)L1-Isometry-error: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) + + + if( parameterSet.measure_analyticalError == 'true'): + tmp_L2Error = re.findall(r'(?m)L2-error: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) + tmp_H1Error = re.findall(r'(?m)H1-error: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) + tmp_energyDiff = re.findall(r'(?m)Energy difference: (-?\d?\d?\d?\.?\d+[Ee]?[+\-]?\d?\d?)',output) + + + # print('LOGFILE:',LOGFILE) + # print('tmp_step:',tmp_step) + print('tmp_step last:', int(tmp_step[-1])) + print('tmp_dofs:',tmp_dofs) + print('tmp_dofs last:', int(tmp_dofs[-1])) + # print('type tmp_energy:', type(tmp_energy)) + print('tmp_energyDiscrete:', tmp_energyDiscrete) + print('tmp_energyDiff:', tmp_energyDiff) + print('tmp_energyAnalytical:', tmp_energyAnalytical) + # print('tmp_energy last:', tmp_energy[-1]) + print('tmp_time:', tmp_time) + print('tmp_isoErrorL2 :', tmp_isoErrorL2 ) + print('tmp_isoErrorL1 :', tmp_isoErrorL1 ) + print('tmp_L2Error :', tmp_L2Error ) + print('tmp_H1Error :', tmp_H1Error ) + print('tmp_elements :', tmp_elements ) + + # Add Table rows. + prettyTable.add_row([macroGridLevel, tmp_elements[-1], int(tmp_step[-1]),tmp_energyDiscrete[-1], tmp_energyDiff[-1], tmp_L2Error[-1],tmp_H1Error[-1], tmp_isoErrorL2[-1], tmp_time[-1]]) + latexTable.append([macroGridLevel, tmp_elements[-1], int(tmp_step[-1]) ,tmp_energyDiscrete[-1], tmp_energyDiff[-1], tmp_L2Error[-1],tmp_H1Error[-1], tmp_isoErrorL2[-1], tmp_time[-1]]) + + + # Write Tables to text-file. + tablefile = open(resultPath + "/" + parameterFile + conformity + "_table" + ".txt", "w") + tablefile.write(str(prettyTable)) + tablefile.write('\n') + # Write Latex-Table + tablefile.write(str(tabulate(latexTable, headers='firstrow', tablefmt='latex_raw'))) + tablefile.close() + + # Print Table + print(prettyTable) + print(tabulate(latexTable, headers='firstrow', tablefmt='latex_raw')) + # print(tabulate(latexTable, headers='firstrow',tablefmt='pipe')) + # print(tabulate(latexTable, headers='firstrow',tablefmt='grid')) diff --git a/testsuite/microstructure-testsuite.py b/testsuite/microstructure-testsuite.py index 2cab32f5cea24463efff70a17b6bbdd5d692d0e1..3aa58e7cbd8345119c9cb426979a6b26d2a453ba 100644 --- a/testsuite/microstructure-testsuite.py +++ b/testsuite/microstructure-testsuite.py @@ -6,12 +6,11 @@ import matplotlib as mpl import matplotlib.pyplot as plt import matplotlib.colors as colors from matplotlib import cm +from matplotlib.cm import get_cmap from matplotlib.colors import ListedColormap, LinearSegmentedColormap - - from matplotlib.ticker import LogLocator +from scipy.interpolate import CubicSpline #Test import codecs - import json import math import subprocess @@ -19,537 +18,66 @@ import fileinput from matplotlib.ticker import MultipleLocator,FormatStrFormatter,MaxNLocator from scipy.optimize import minimize_scalar import importlib - from microstructure_PythonAddons import * - - - - -# --------------------- Helper functions---------------------------------------------------------- -# def energy(kappa,alpha,Q,B) : -# """ -# Energy evaluation for given effective quantities Q and B -# with input: -# * curvature: kappa -# * angle: alpha -# """ -# # --- TEST (This energy should be zero): -# # B = np.array([1.0,0.0,0]) -# # kappa = 1.0 -# # alpha = 0 - -# # print('Q:', Q) -# # print('B:',B) -# # print('kappa*np.array([[np.cos(alpha)**2],[np.sin(alpha)**2],[np.sqrt(2)*np.cos(alpha)*np.sin(alpha)]]):', kappa*np.array([[np.cos(alpha)**2],[np.sin(alpha)**2],[np.sqrt(2)*np.cos(alpha)*np.sin(alpha)]])) - -# # # G=(kappa*np.array([[np.cos(alpha)**2],[np.sin(alpha)**2],[np.sqrt(2)*np.cos(alpha)*np.sin(alpha)]]))-B -# # G=kappa*np.array([[np.cos(alpha)**2],[np.sin(alpha)**2],[np.sqrt(2)*np.cos(alpha)*np.sin(alpha)]])-B -# # print('G:',G) -# # print('np.transpose(G):',np.transpose(G)) -# # print('np.matmul(Q,G)',np.matmul(Q,G)) -# # print('QUANTITY:', np.matmul(np.transpose(G),np.matmul(Q,G))) -# # print('energy:', np.matmul(np.transpose(G),np.matmul(Q,G))[0,0]) -# # # return np.matmul(np.transpose(G),np.matmul(Q,G))[0,0] #BUG: This is wrong! - - - -# #--- New Version (13-5-24) -# # write kappa/alpha as minimizer which is a symmetric 2x2 matrix -# # expressed in the canonical basis: -# # G = np.array(kappa*np.array([np.cos(alpha)**2, np.sin(alpha)**2, np.sqrt(2)*np.cos(alpha)*np.sin(alpha)])) -# G = kappa*np.array([np.cos(alpha)**2, np.sin(alpha)**2, np.sqrt(2)*np.cos(alpha)*np.sin(alpha)]) -# print('G:',G) -# G = G - B; - - -# G_transposed = np.transpose(G); -# # print('G:',G) -# # print('G - B', G-B) -# # print('G tranposed:', G_transposed) -# # energyValue = G_transposed.dot((Q.dot(G))) -# # # print('G_transposed.dot((Q.dot(G))): ', G_transposed.dot((Q.dot(G)))) -# # print('type(energyValue)', type(energyValue[0])) - -# return G_transposed.dot((Q.dot(G))); - - -#alternative version: -# def energy(kappa,alpha,Q,B) : -# G = np.array(kappa*np.array([np.cos(alpha)**2, np.sin(alpha)**2, np.sqrt(2)*np.cos(alpha)*np.sin(alpha)])) -# G = G - B; - -# energy = 0.0 - -# for i in range(0,2): -# for j in range (0,2): -# energy += Q[i][j]*G[i]*G[j] - -# print('energy: ', energy) -# print('energy[0]: ', energy[0]) -# # print('type new: ', type(energy[0])) -# return energy[0] - - - - - -# def energy(kappa,alpha,Q,B) : -# """ -# Energy evaluation for given effective quantities Q and B -# with input: -# * curvature: kappa -# * angle: alpha -# """ -# # Compute cylindrical minimizer coefficients from angle & curvature -# G = kappa*np.array([np.cos(alpha)**2, np.sin(alpha)**2, np.sqrt(2)*np.cos(alpha)*np.sin(alpha)]) -# # Subtract the effective prestrain -# G = G - B; -# # Compute the energy -# energy = (np.transpose(G)).dot((Q.dot(G))); -# return energy - -# def xytokappaalpha(x,y): - -# if y>0: -# return [np.sqrt(x**2+y**2), np.abs(np.arctan2(y,x))] -# else: -# return [-np.sqrt(x**2+y**2), np.abs(np.arctan2(y,x))] - -# # Read effective quantites -# def ReadEffectiveQuantities(QFilePath, BFilePath): -# # Read Output Matrices (effective quantities) -# # From Cell-Problem output Files : ../outputs/Qmatrix.txt , ../outputs/Bmatrix.txt -# # -- Read Matrix Qhom -# X = [] -# # with codecs.open(path + '/outputs/QMatrix.txt', encoding='utf-8-sig') as f: -# with codecs.open(QFilePath, encoding='utf-8-sig') as f: -# for line in f: -# s = line.split() -# X.append([float(s[i]) for i in range(len(s))]) -# Q = np.array([[X[0][2], X[1][2], X[2][2]], -# [X[3][2], X[4][2], X[5][2]], -# [X[6][2], X[7][2], X[8][2]] ]) - -# # -- Read Beff (as Vector) -# X = [] -# # with codecs.open(path + '/outputs/BMatrix.txt', encoding='utf-8-sig') as f: -# with codecs.open(BFilePath, encoding='utf-8-sig') as f: -# for line in f: -# s = line.split() -# X.append([float(s[i]) for i in range(len(s))]) -# B = np.array([X[0][2], X[1][2], X[2][2]]) # Beff is written as Coefficients to .txt-file -# return Q, B - - - -# #--- Select specific experiment [x, y] with date from results_x/y -# def get_Q_B(basePath, index,perforation=False, perforatedLayer='upper'): -# # results_index[0]/index[1]/... -# #DataPath = './experiment/wood-bilayer_PLOS/results_' + str(data[0]) + '/' +str(data[1]) -# # DataPath = './results_' + str(index[0]) + '/' +str(index[1]) -# # DataPath = '.' + dirname + orientation + gridLevel + '/results_' + str(index[0]) + '/' +str(index[1]) -# # DataPath = dirname + orientation + gridLevel + '/results_' + str(index[0]) + '/' +str(index[1]) -# if perforation: -# DataPath = basePath + '/results_' + perforatedLayer + '_' + str(index[0]) + '/' +str(index[1]) -# else : -# DataPath = basePath + '/results_' + str(index[0]) + '/' +str(index[1]) - -# QFilePath = DataPath + '/QMatrix.txt' -# BFilePath = DataPath + '/BMatrix.txt' -# # Read Q and B -# Q, B = ReadEffectiveQuantities(QFilePath,BFilePath) -# Q=0.5*(np.transpose(Q)+Q) # symmetrize -# B=np.transpose([B]) -# return (Q,B) - - - - -# def SetParameterMaterialFunction(inputFunction, parameterName, parameterValue): -# with open(inputFunction+'.py', 'r') as file: -# filedata = file.read() -# filedata = re.sub('(?m)'+str(parameterName)+'\s?=.*',str(parameterName)+' = '+str(parameterValue),filedata) -# f = open(inputFunction+'.py','w') -# f.write(filedata) -# f.close() - - - - - - - -# def createEnergyValues(r,theta,Q,B): -# """ -# Compute energy values for a given meshgrid of curvature(r) and angle(theta) values -# associated to the effective quantities Q and B. - -# the curvature array 'r' only features positive values. However the energy is also -# evaluated for the corresponding negative values. -# """ - -# # Get number of sample points. -# N = r.shape[0] - -# E=np.zeros(np.shape(r)) -# for k in range(0,N): -# for l in range(0,N): -# if theta[k,l]<np.pi: -# E[k,l]=energy(r[k,l],theta[k,l],Q,B) -# else: -# E[k,l]=energy(-r[k,l],theta[k,l],Q,B) - -# return E - - -# def getMinimizers(r,theta,E): -# """" -# Compute global minimizer (by Sampling method) -# as well as the minimizer on the opposite sign - curvature scale - -# E: meshgrid evaluation of energy. -# """ -# kappa=0 -# kappa_pos=0 -# kappa_neg=0 - - -# N = E.shape[0] -# # Compute global Minimizer -# [kmin,lmin]=np.unravel_index(E.argmin(),(N,N)) -# kappamin=r[kmin,lmin] -# alphamin=theta[kmin,lmin] -# Emin = E[kmin,lmin] - -# # Get minimizer in Positive curvature region -# N_mid=int(N/2) -# [kmin,lmin]=np.unravel_index(E[:N_mid,:].argmin(),(N_mid,N)) -# kappamin_pos=r[kmin,lmin] -# alphamin_pos=theta[kmin,lmin] -# Emin_pos=E[kmin,lmin] -# # Get minimizer in Negative curvature region -# [kmin,lmin]=np.unravel_index(E[N_mid:,:].argmin(),(N_mid,N)) -# kappamin_neg=r[kmin+N_mid,lmin] -# alphamin_neg=theta[kmin+N_mid,lmin] -# Emin_neg=E[kmin+N_mid,lmin] - -# print('Emin:', Emin) -# print('Emin_pos:', Emin_pos) -# print('Emin_neg:', Emin_neg) -# print('energy in origin (0,0):' ,energy(0,0,Q,B)) -# print('E.min(): ',E.min()) -# print('E.max(): ',E.max()) - -# minimizer_sign = 'positive' - -# if(abs(Emin_pos - Emin_neg)<1e-5): -# print('Both minimizers have nearly the same energy - likely two minimizers.') -# elif(Emin_pos < Emin_neg): -# print('Global Minimizer has positive curvature.') -# energyDifference = Emin_neg-Emin_pos -# else: -# print('Global Minimizer has negative curvature.') -# minimizer_sign = 'negative' -# energyDifference = Emin_pos-Emin_neg - - -# if (minimizer_sign == 'positive'): -# alpha_globalmin = alphamin -# kappa_globalmin = kappamin -# kappa_localmin = (-1)*kappamin_neg -# alpha_localmin = alphamin_neg -# else : -# alpha_globalmin = alphamin -# kappa_globalmin = (-1)*kappamin -# kappa_localmin = kappamin_pos -# alpha_localmin = alphamin_pos - -# print('kappa_globalmin: ', kappa_globalmin) -# print('alpha_globalmin: ', alpha_globalmin) -# print('kappa_localmin: ', kappa_localmin) -# print('alpha_localmin: ', alpha_localmin) -# print('energy (global minimizer)', energy(kappa_globalmin,alpha_globalmin,Q,B)) -# print('energy (local minimizer)', energy(kappa_localmin,alpha_localmin,Q,B)) - -# return [kappa_globalmin,alpha_globalmin,kappa_localmin,alpha_localmin,energyDifference,minimizer_sign]; - - - - -# def createEnergyLandscapeFigure(r,theta,E,title_string='',normalize=True): -# """ -# Create an energy landscape plot. -# """ -# print('create energy landscape ...') - -# #Get Minimzers from sampled energy values. -# [kappa_globalmin,alpha_globalmin,kappa_localmin,alpha_localmin,energyDifference,minimizer_sign] = getMinimizers(E) - -# # Normalize minimum energy to zero: -# if normalize: -# E=E-E.min() -# print('E.min(): (after normalization): ',E.min()) -# print('E.max(): (after normalization): ',E.max()) - -# levs=np.geomspace(0.01,E.max(),300) # Return numbers spaced evenly on a log scale (a geometric progression). - -# fig, ax1 = plt.subplots(ncols=1,nrows=1, figsize=(width,height), subplot_kw=dict(polar=True),gridspec_kw={'hspace': 0.4}, zorder=1) -# fig.subplots_adjust(left=.1, bottom=0.01, right=.9, top=0.9) #adjust placement inside figure - -# """ -# Define new custom colormap (Test) -# define top and bottom colormaps -# """ -# # top = cm.get_cmap('Oranges_r', 128) # r means reversed version -# # bottom = cm.get_cmap('Blues', 128)# combine it all -# # newcolors = np.vstack((top(np.linspace(0, 1, 128)), -# # bottom(np.linspace(0, 1, 128)))) -# # orange_blue = colors.ListedColormap(newcolors, name='OrangeBlue') -# # bi_pride = LinearSegmentedColormap.from_list("", ["#D60270", "#9B4F96", "#0038A8"]) -# # testColor = LinearSegmentedColormap.from_list("", ["#380282","#0343DF","#FF7F50", "#FE420F"]) - -# """ -# Plot with 'contourf': -# Its important to hide the Contour LineStroke (remove white lines between contour levels) using set_edgecolor("face") -# """ -# # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.5,vmin=E.min(),vmax=E.max()), cmap='brg', zorder=0) -# # for c in pcm.collections: -# # c.set_edgecolor("face") - -# """ -# Plot with 'pcolormesh' -# * Reducing the image-quality/file-size by using rasterized option: -# * Looks much smoother without 'rasterize' option however file-size gets out of hand..: -# * Together with the 'dpi=..' option of figsave we can control the file-size -# * Advantage: Text etc. is still vectorized without having too large files. - -# Problem: How to get the Colorbarticks in a uniform spacing when using PowerNorm (unclear) -# """ -# pcm=ax1.pcolormesh(theta, r, E, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()) ,cmap='plasma', edgecolors='face', zorder=0, rasterized=True, alpha=0.8) - - - -# print('0.025*E.max():',0.025*E.max()) -# print('energyDifference: ', energyDifference) - -# """" -# Create additional contour-line plot in the range between -# zero and the energyDifference between both minimizers. -# """ -# contour_levs = np.linspace(0.0001,energyDifference*1.0,6) # contour only from zero (Minimizer) to energyDifference between global/local Minimizer. -# print('contour_levs:', contour_levs) -# contours = plt.contour(theta, r, E, contour_levs, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), colors='ivory',linewidths=0.65, linestyles="dashed", alpha=0.8, zorder=2) -# contours_min = plt.contour(theta, r, E, [contour_levs[1]], norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), colors='yellow',linewidths=0.65, linestyles="solid", alpha=0.9, zorder=2) - -# # Set Title. -# ax1.set_title(title_string,pad=6) -# # ax1.set_title(r"ratio $r=0.12$",pad=6) -# # ax1.set_title(r""+parameterName + ": " + str(parameterValue),pad=20) - - -# # Create a string if the minimal angle,curvature values used to label the global minimizer. -# Minimizer_string = ': (' + str(np.round(np.rad2deg(alpha_globalmin),decimals=1)) + '°,' + str(np.round(abs(kappa_globalmin),decimals=2))+ ')' - - -# # Mark Global Minimizer. -# gmin = ax1.plot(alpha_globalmin, abs(kappa_globalmin), -# markerfacecolor='cornflowerblue', -# markeredgecolor='white', # marker edgecolor -# marker='o', # each marker will be rendered as a circle -# markersize=6, # marker size -# markeredgewidth=1.0, # marker edge width -# linewidth=0, -# zorder=3, -# alpha=1, # Change opacity -# label = Minimizer_string) - - -# plot_minimizerInOppositeCurvatureRegion = False #Note: this is not necessarily a local minimizer! - - -# if plot_minimizerInOppositeCurvatureRegion: -# ax1.plot(alpha_localmin, abs(kappa_localmin), # We need to take abs(kappa) since negative curvatures are still plotted with a positive kappa! -# markerfacecolor='green', -# markeredgecolor='white', # marker edgecolor -# marker='D', # each marker will be rendered as a circle -# markersize=4, # marker size -# markeredgewidth=0.5, # marker edge width -# linewidth=0, # line width -# zorder=3, -# alpha=1) - - -# # #--- annotate local minimizer -# # ax1.annotate( '('+ str(np.round(360-np.rad2deg(alpha_localmin),decimals=1)) + '°' + ',' + str(np.round(kappa_localmin,decimals=2))+ ')' , -# # xy = (alpha_localmin,abs(kappa_localmin)), -# # # xytext=(-1.6, np.round(kappa_localmin,decimals=2)+0.9), -# # # xytext=(-1.6, np.round(kappa_localmin,decimals=2)), -# # xytext=(alpha_localmin,abs(kappa_localmin)), -# # color='ivory', -# # # zorder=5, -# # fontsize='8') - -# print('Global Minimizer (alphamin, kappamin):' , '('+ str(np.round(np.rad2deg(alpha_globalmin),decimals=1)) + ',' + str(np.round(abs(kappa_globalmin),decimals=2))+ ')' ) -# print('Local Minimizer opposite curvature (alphamin, kappamin):' , '('+ str(np.round(360-np.rad2deg(alpha_localmin),decimals=1)) + ',' + str(np.round(abs(kappa_localmin),decimals=2))+ ')' ) - -# #### Colorbar for Contourf-Plot: -# # colorbarticks=np.geomspace(0.00001,E.max(),10) -# # cbar = plt.colorbar(pcm, ax=[ax1], extend='max', ticks=colorbarticks, pad=0.1, orientation="horizontal") - -# # Colorbar for pcolormesh-Plot: -# cbar = fig.colorbar(pcm, ax=ax1, pad=0.1, orientation="horizontal") - - -# """ -# Set Tick labels -# x: Angle -# y: Radius - -# """ -# anglelabel=["0°","45°", "90°", "135°", "180°","-135°","-90°","-45°"] -# # anglelabel=["0°","45°", "90°", "135°",r"$\pm180$° ","-135°","-90°","-45°"] -# ax1.set_xticks(np.array([.0,1/4,2/4,3/4,1,5/4,6/4,7/4])*np.pi) -# ax1.set_xticklabels(anglelabel) -# # ax1.xaxis.grid(True, color='white') -# ax1.xaxis.grid(True) -# # We want to grid-axis to be on top of the contour lines to hide confusing contours on the grid-axis. -# ax1.set_axisbelow(False) - -# # Adjust pad of xticklabels: -# ax1.tick_params(pad=0.5) - -# # rotate radius axis labels. -# ax1.set_rlabel_position(225) - -# # Adjust radial ticks. -# radiusTickLength = 0.5 -# ax1.yaxis.set_major_locator(plt.FixedLocator(np.arange(radiusTickLength,curvatureLength,radiusTickLength))) -# # (Alternative used fixed values) -# # ax1.set_yticks(np.array([1,2,3])) -# # ax1.set_yticklabels(["1","2","3"], zorder=20, color="white") -# ax1.yaxis.set_tick_params(color='white', pad = 1.0) -# ax1.yaxis.grid(True) - -# # Create Minor ticks manually as polar coordinates does not have the option. -# tick = [ax1.get_rmax(),ax1.get_rmax()*0.97] -# for t in np.deg2rad(np.arange(0,360,5)): -# ax1.plot([t,t], tick, lw=0.1, color="k") - - -# # Create a Legend. -# legend = ax1.legend(bbox_to_anchor=[0.75, 0.15],loc='lower center',borderaxespad=0.1,frameon=True,bbox_transform=fig.transFigure,handletextpad=0.1) -# frame = legend.get_frame() -# frame.set_edgecolor('black') - -# # Save Figure as png. -# # fig.savefig(resultPath + '/energy_landscape_'+ parameterName + '_' +str(parameterValue) + '.png', dpi=100) -# # Save Figure as pdf. -# fig.set_size_inches(width, height) -# fig.savefig(resultPath + '/energy_landscape_'+ parameterName + '_' +str(parameterValue) + '.pdf', dpi=500) #dpi on -# return - - -# -------------------------- Matplotlib - parameters.-------------------------------------------------------------- -# plt.style.use("seaborn") -# plt.style.use('paperstyle.mplstyle') - -#reset to default style-sheet_ -# plt.style.use('default') - - -# plt.style.use("seaborn") - -# mpl.rcParams['text.usetex'] = True -# mpl.rcParams["font.family"] = "serif" -# mpl.rcParams["font.size"] = "8" -# mpl.rcParams['xtick.bottom'] = True -# mpl.rcParams['xtick.major.size'] = 2 -# mpl.rcParams['xtick.minor.size'] = 1.5 -# mpl.rcParams['xtick.major.width'] = 0.75 -# # mpl.rcParams['xtick.labelsize'] = 8 -# mpl.rcParams['xtick.major.pad'] = 0.1 -# mpl.rcParams['ytick.left'] = True -# mpl.rcParams['ytick.major.size'] = 2 -# mpl.rcParams['ytick.minor.size'] = 1.5 -# mpl.rcParams['ytick.major.width'] = 0.75 -# mpl.rcParams['ytick.labelsize'] = 8 -# mpl.rcParams['ytick.major.pad'] = 1 -# mpl.rcParams['axes.titlesize'] = 8 -# mpl.rcParams['axes.titlepad'] = 1 -# # mpl.rcParams['axes.labelsize'] = 8 -# #Adjust Legend: -# mpl.rcParams['legend.frameon'] = True # Use frame for legend -# # mpl.rcParams['legend.framealpha'] = 0.5 -# mpl.rcParams['legend.fontsize'] = 8 # fontsize of legend -# #Adjust grid: -# # mpl.rcParams.update({"axes.grid" : True}) # Add grid -# mpl.rcParams.update({"axes.grid" : False}) # Add grid -# mpl.rcParams['axes.labelpad'] = 3 -# mpl.rcParams['grid.linewidth'] = 0.25 -# mpl.rcParams['grid.alpha'] = 0.75 # 0.75 -# mpl.rcParams['grid.linestyle'] = '-' -# mpl.rcParams['grid.color'] = 'lightgray'#'black' -# mpl.rcParams['text.latex.preamble'] = r'\usepackage{amsfonts}' # Makes Use of \mathbb possible. - - -# plt.style.use("seaborn") -# plt.style.use('paperstyle.mplstyle') -# textwidth = 6.26894 #textwidth in inch -# width = textwidth * 0.5 -# # width = textwidth * 0.33 -# # width = textwidth -# # height = width/1.618 # The golden ratio. -# height = textwidth/1.618 # The golden ratio. -# # height = width -# # height = width*1.618 -# ------------------------------------------------------------------------------------------------------------------ - - -# ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ # ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ + computeEffectiveQuantities = True -computeEffectiveQuantities = False +# computeEffectiveQuantities = False plotEnergyLandscape_flag = True plotEnergyLandscape_flag = False displayMinimizer = False displayMinimizer = True plotContourLines = True -# plotContourLines = False - +plotContourLines = False plotCurvatureAngleParameterDependence_flag = True -# plotCurvatureAngleParameterDependence_flag = False +plotCurvatureAngleParameterDependence_flag = False + plotPrestrainParameterDependence_flag = True plotPrestrainParameterDependence_flag = False +plotEffectiveQuantitiesParameterDependence_flag = True +plotEffectiveQuantitiesParameterDependence_flag = False + + N=2000 #Number of Sampling Points curvatureLength=2.5 # N=1000 #Number of Sampling Points N=500 #Number of Sampling Points +# N=100 #Number of Sampling Points # curvatureLength=5 # 1. Experiment 2. ExperimentPathExtension 3. MicroGridLevels, 4. Executable 5.(additional) parameterArray: [["ParameterName", ParameterValue], ...] scenarios = [ - ["prestrainedFibre", "/micro-problem", [3,3], "/micro-problem" , [["verticalMidpointPosition", [0,0.05,0.1,0.15,0.2,0.25]]] ], #0 - ["prestrainedFibre", "/micro-problem", [3,3], "/micro-problem" , [["fibreRadius", [0,0.05,0.1,0.15,0.2,0.25]]] ], #1 - ["prestrainedFibre_anisotropicB","/micro-problem", [3,3], "/micro-problem" , [["mu_phase1", [100]]] ], #2 - ["prestrainedFibre_anisotropicQ","/micro-problem", [3,3], "/micro-problem" , [["mu_phase1", [100]]] ], #3 - ["prestrainedFibre", "/micro-problem", [3,3], "/micro-problem" , [["mu_phase1", [100]]] ], #4 - ["prestrainedFibre", "/micro-problem", [3,3], "/micro-problem" , [["mu_phase1", [50,150]]] ], #5 - ["prestrainedFibre", "/micro-problem", [3,3], "/micro-problem" , [["mu_phase1", [75]]] ], #6 - # ["three-phase-composite", "", [3,3], "/micro-problem" , [["mu_phase1", [0.1,1,63.89,200]]] ], - ["three-phase-composite", "/micro-problem", [3,3], "/micro-problem" , [["rho", [0,0.25,0.5,0.75,1.0,2.0]]] ], #Figure:... #7 - ["three-phase-composite", "/micro-problem", [3,3], "/micro-problem" , [["rho", [0.95]]] ], #Figure:... #8 - ["three-phase-composite", "/micro-problem", [3,3], "/micro-problem" , [["rho", [1.0]]] ], #Figure:... #9 - ["two-phase-composite", "/micro-problem", [3,3], "/micro-problem" , [["rho", [0.5]]] ], #Figure:... #10 - ["buckling_microproblem", "/micro-problem", [3,3], "/micro-problem" , [["rho", [0.0]]] ], #Figure:... #11 - ["buckling_microproblem", "/micro-problem", [3,3], "/micro-problem" , [["rho", [x/10.0 for x in range(1,11,1)]]] ], #Figure:... #12 - # ["three-phase-composite", "", [4,4], "/micro-problem" , [["rho", [1.0]]] ], - ["parametrized_laminate", "/micro-problem", [3,3], "/micro-problem" , [["theta_mu", [0.5,1.0,10.0]]] ], - ["parametrized_laminate", "/micro-problem", [3,3], "/micro-problem" , [["theta_rho", [0.1,0.2,0.25,0.5,1.0,2.0,10.0]]]], - ["parametrized_laminate", "/micro-problem", [3,3], "/micro-problem" , [["theta_rho", [0.1]]] ] + ["prestrainedFibre", "/micro-problem", [3], [["mu_phase1", [0.9,1.2,1.5,2.0,3.0]]] ], + ["MVM_infinitynorm_microproblem", "/micro-problem", [1], [] ], + ["fibreRotation_microproblem", "/micro-problem", [4], [["alpha", [(np.pi/12.0)+ (x/10.0)*(np.pi/3.0-np.pi/12.0) for x in range(0,11,1)]]] ], + ["fibreRotation_microproblem", "/micro-problem", [4], [["theta", [x/10.0 for x in range(1,6,1)]]] ], #0 + ["fibreRotation_microproblem", "/micro-problem", [3], [["alpha", [np.pi/12.0]]] ], #0 + ["prestrainedFibre", "/micro-problem", [3], [["verticalMidpointPosition", [0,0.05,0.1,0.15,0.2,0.25]]] ], + ["prestrainedFibre", "/micro-problem", [3], [["fibreRadius", [0,0.05,0.1,0.15,0.2,0.25]]] ], + ["prestrainedFibre_anisotropicB", "/micro-problem", [3], [] ], + ["prestrainedFibre_anisotropicQ", "/micro-problem", [3], [] ], + ["prestrainedFibre", "/micro-problem", [3], [["mu_phase1", [0.9,1.5]]] ], + ["prestrainedFibre", "/micro-problem", [1,3], [] ], + ["prestrainedFibre", "/micro-problem", list(range(1,3,1)), [] ], + ["three-phase-composite", "/micro-problem", [3], [["rho", [0,0.25,0.5,0.75,1.0,2.0]]] ], #Figure:... + ["three-phase-composite", "/micro-problem", [3], [["rho", [0.95]]] ], #Figure:... + ["three-phase-composite", "/micro-problem", [3], [["rho", [1.0]]] ], #Figure:... + ["two-phase-composite", "/micro-problem", [3], [["rho", [0.5]]] ], #Figure:... + ["buckling_microproblem", "/micro-problem", [3], [["rho", [0.0]]] ], #Figure:... + ["buckling_microproblem", "/micro-problem", [3], [["rho", [x/10.0 for x in range(0,11,1)]]] ], #Figure:... + ["parametrized_laminate", "/micro-problem", [3], [["theta_mu", [0.5,1.0,10.0]]] ], + ["parametrized_laminate", "/micro-problem", [3], [["theta_rho", [0.1,0.2,0.25,0.5,1.0,2.0,10.0]]]], + ["parametrized_laminate", "/micro-problem", [3], [["theta_rho", [0.1]]]], + ["validation_microproblem", "/micro-problem", [3], [["theta_rho", [0.1]]]] + # ["prestrainedFibre", "/micro-problem", [3], [["mu_phase1", [1.2]]] ], + # ["prestrainedFibre", "/micro-problem", [3], [["mu_phase1", [0.9,1.2,1.5]]] ], + # ["prestrainedFibre", "/micro-problem", [3], [["mu_phase1", [20]]] ], + # ["prestrainedFibre", "/micro-problem", [3], [["mu_phase1", [20,27.8,35]]] ], + # ["three-phase-composite", "", [3], [["mu_phase1", [0.1,1,63.89,200]]] ], ] @@ -557,10 +85,8 @@ print('sys.argv[0]', sys.argv[0]) print('sys.argv[1]', sys.argv[1]) print('sys.argv[2]', sys.argv[2]) - -print('list(range(0,1,0.1)):',[x/10.0 for x in range(0,11,1)]) - - +# print('list(range(0,1,0.1)):',[x/10.0 for x in range(0,11,1)]) +# print('list(range(0,2,0.1)):',[x/10.0 for x in range(0,6,1)]) CONTAINER = int(sys.argv[1]) slurm_array_task_id = int(sys.argv[2]) @@ -568,14 +94,12 @@ slurm_array_task_id = int(sys.argv[2]) parameterFile = scenarios[slurm_array_task_id][0] pathExtension = scenarios[slurm_array_task_id][1] gridLevels = scenarios[slurm_array_task_id][2] -executable = scenarios[slurm_array_task_id][3] -parameterArray = scenarios[slurm_array_task_id][4] +executable = "/micro-problem" +# executable = scenarios[slurm_array_task_id][3] +parameterArray = scenarios[slurm_array_task_id][3] +print('len(parameterArray)',len(parameterArray)) +print('parameterArray:',parameterArray) -#Test -# parameterArray = [[" -rho ", [4.0]]] - - -print('pathExtension: ', pathExtension) @@ -583,7 +107,7 @@ print('pathExtension: ', pathExtension) # cwd = os.getcwd() modulePath = os.path.abspath(os.path.join(os.getcwd(), os.pardir)) print("Parent Directory is: ", modulePath) - +print('pathExtension: ', pathExtension) #Path for parameterFile if CONTAINER: @@ -592,124 +116,54 @@ if CONTAINER: resultPath = "outputs" + "_" + scenarios[slurm_array_task_id][0] instrumentedPath = resultPath + "/instrumented" executablePath = "/dune/dune-microstructure/build-cmake/src" + # Path used for copying experiment parameter files (for safe modification) + + new_ParameterPath = "tmp_experiments" + original_ParameterPath = pythonPath + "/" + parameterFile +'.py' else : #--- Local version pythonPath = modulePath + "/experiment" + pathExtension resultPath = modulePath + "/outputs" + "_" + scenarios[slurm_array_task_id][0] instrumentedPath = resultPath + "/instrumented" executablePath = modulePath + '/build-cmake/src' + # Path used for copying experiment parameter files (for safe modification) + new_ParameterPath = "/home/klaus" + original_ParameterPath = pythonPath + "/" + parameterFile +'.py' -try: - os.mkdir(resultPath) - os.mkdir(instrumentedPath) -except OSError as error: - print(error) - -print('pythonPath: ', pythonPath) - - -### Access ParameterFile variables. -sys.path.insert(0, pythonPath) -__import__(parameterFile, fromlist=['parameterSet']) -imported_module = importlib.import_module(parameterFile) -parameterSet = getattr(imported_module, "parameterSet") + +# Create output directories if non existent +os.makedirs(resultPath, exist_ok=True) +os.makedirs(instrumentedPath, exist_ok=True) executable = executablePath + executable - resultPathBase = resultPath +# print('pythonPath: ', pythonPath) +""" + Access ParameterFile variables. +""" +# sys.path.insert(0, pythonPath) +# __import__(parameterFile, fromlist=['parameterSet']) +# imported_module = importlib.import_module(parameterFile) +# parameterSet = getattr(imported_module, "parameterSet") -#---------------------------------------------------------------------------------------------------------------------- -if computeEffectiveQuantities: - print('Computing effective quantities... ') - for i in range(0, len(parameterArray)): - for v in range(0,len(parameterArray[i][1])): - print("------------------") - print("New Loop") - print("------------------") - print('i:', i) - print('v:', v) - print('len(parameterArray[i][1]):', len(parameterArray[i][1])) - # print('parameterArray[i][v]:', parameterArray[i][v]) - print('parameterName:' , parameterArray[i][0]) - print('parameterValue: ', parameterArray[i][1][v]) - # print('np.shape(parameterArray)[1]:', np.shape(parameterArray)[1]) - # print('np.shape(parameterArray[i][1]):', np.shape(parameterArray[i][1])) - # print('np.shape(parameterArray[i][1])[1]:', np.shape(parameterArray[i][1])[1]) - parameterName = parameterArray[i][0] - parameterValue = parameterArray[i][1][v] - resultPath_parent = resultPathBase + "/" + parameterName - resultPath = resultPath_parent + "/value_" + str(parameterValue) - try: - os.mkdir(resultPath_parent) - except OSError as error: - print("") - # print(error) - try: - os.mkdir(resultPath) - except OSError as error: - print("") - # print(error) - - - - - ## Alternative version: actually changing the parset file.. - # Change Parameters: - print('...change input parameter:' , parameterName) - SetParameterMaterialFunction(pythonPath + "/" + scenarios[slurm_array_task_id][0], parameterName , parameterValue) - - - baseName = scenarios[slurm_array_task_id][0] + "_" + parameterArray[i][0] + "_" + str(parameterArray[i][1][v]) - - #--- Compute - processList = [] - for microGridLevel in range(gridLevels[0],gridLevels[1]+1): - # if conforming_DiscreteJacobian: - # conformity = "_conforming" - # else: - # conformity = "_nonconforming" - - # LOGFILE = resultPath + "/" + parameterFile + conformity + "_macroGridLevel" + str(macroGridLevel) + parameterName + ".log" - LOGFILE = resultPath + "/" + parameterFile + "_microGridLevel" + str(microGridLevel) + "_" + parameterName + "_" + str(parameterValue) + ".log" - - print('LOGFILE:', LOGFILE) - print('executable:', executable) - print('parameterFile:', parameterFile) - print('resultPath:', resultPath) - - # testArray = [ " -rho " + str(8.0), " -beta " + str(0.10) ] - - # start_time = time.time() - p = subprocess.Popen(executable + " " + pythonPath + " " + parameterFile - + " -microGridLevel " + str(microGridLevel) - + " -resultPath " + str(resultPath) - + " -baseName " + str(baseName) - # + " -" + parameterName + " " + str(parameterValue) - + " | tee " + LOGFILE, shell=True) - - p.wait() # wait - # print("--- %s seconds ---" % (time.time() - start_time)) - print('------FINISHED PROGRAM on macroGridLevel:' + str(microGridLevel)) - processList.append(p) - - # Wait for all simulation subprocesses before proceeding to the error measurement step - exit_codes = [p.wait() for p in processList] - +if computeEffectiveQuantities: + """ + Create a copy of the parameter-file. + """ + CreateParameterCopy(original_ParameterPath,new_ParameterPath,parameterFile) + print('Parameter copying done.') + SolveMicroProblem(executable,parameterFile,gridLevels,parameterArray,resultPath,new_ParameterPath,pythonPath) -# print('parameterArray:', parameterArray) -# print('len(parameterArray):', len(parameterArray)) -# print('len(parameterArray[0][1]): ', len(parameterArray[0][1])) -# print('Number of different additional parameters:', len(parameterArray)) #---------------------------------------------------------------------------------------------------------------------- if plotPrestrainParameterDependence_flag: @@ -733,7 +187,7 @@ if plotPrestrainParameterDependence_flag: parameterValue = parameterArray[i][1][v] resultPath_parent = resultPathBase + "/" + parameterName - resultPath = resultPath_parent + "/value_" + str(parameterValue) + resultPath = resultPath_parent + "/value_" + str(np.round(parameterValue,3)) try: @@ -758,59 +212,21 @@ if plotPrestrainParameterDependence_flag: # Test: symmetrize Qhom # Q=0.5*(np.transpose(Q)+Q) # symmetrize - - # N=1000 #Number of Sampling Points - # curvatureLength=1 - # r, theta = np.meshgrid(np.linspace(0,curvatureLength,N),np.radians(np.linspace(0, 360, N))) - - # E = createEnergyValues(r,theta,Q,B) - - # """" - # Create the energy landscape from the dataset E. - # If 'Normalize' is set to true the energy is normalized via - # E=E-E.min() - # """ - # # title_string = r"ratio $r=0.12$" - # # title_string = r""+parameterName + ": " + str(parameterValue) - # # title_string = '' - # # createEnergyLandscapeFigure(r,theta,E,curvatureLength,Q,B,resultPath,parameterName,parameterValue,title_string,True) - # # createEnergyLandscapeFigure(r,theta,E,resultPath,parameterName,parameterValue,title_string,True) - # # createEnergyLandscapeFigure(r,theta,E,resultPath,parameterName,parameterValue,title_string,True,displayMinimizer) - - # [kappa_globalmin,alpha_globalmin,kappa_localmin,alpha_localmin,energyDifference,minimizer_sign] = getMinimizers(r,theta,E) - inputValues.append(parameterValue) - outputValues_b1.append(B[0]) outputValues_b2.append(B[1]) outputValues_b3.append(B[2]) # --------------------------------------------------------------------------------------------------------- - - #--- Create Plot ... - # Setup Plot style. - plt.style.use("seaborn") - # plt.style.use('paperstyle.mplstyle') # Set correct Figure size (width/height) to make the figure fit the text without scaling. textwidth = 6.26894 # textwidth in inch width = textwidth * 0.5 - # height = textwidth/1.618 # The golden ratio. - # height = width/1.618 # The golden ratio. - height = width - + height = width/1.618 # The golden ratio. - #---------TEST # Styling - plt.style.use("seaborn-darkgrid") - # plt.style.use("seaborn-whitegrid") - # plt.style.use("seaborn") - # plt.style.use("seaborn-paper") - # plt.style.use('ggplot') - # plt.rcParams["font.family"] = "Avenir" - # plt.rcParams["font.size"] = 16 + plt.style.use("seaborn-v0_8-darkgrid") - # plt.style.use("seaborn-darkgrid") mpl.rcParams['text.usetex'] = True mpl.rcParams["font.family"] = "serif" mpl.rcParams["font.size"] = "10" @@ -825,20 +241,101 @@ if plotPrestrainParameterDependence_flag: mpl.rcParams['ytick.major.size'] = 3 mpl.rcParams['ytick.minor.size'] = 1.5 mpl.rcParams['ytick.major.width'] = 0.75 - mpl.rcParams.update({'font.size': 10}) mpl.rcParams['axes.labelpad'] = 3 #--------------------- + # fig, axs = plt.subplots(ncols=2,nrows=1, figsize=(width,height), constrained_layout=True) + + # # title_string = r"$B_1$" + "-" r""+parameterName + # title_string = '' + + + # print('plot curvature over parameter : '+ parameterName) + # print('inputValues:', inputValues) + + + # dataSets = [(outputValues_b1, r"$\widehat{B}^h_1$", r"$\widehat{B}^h_1$"), + # (outputValues_b2, r"$\widehat{B}^h_2$", r"$\widehat{B}^h_2$"), + # # (outputValues_b3, r"$\widehat{B}^h_3$", r"$\widehat{B}^h_3$") + # ] + + # # Get a color map with distinct colors + # cmap = get_cmap('tab10') # Using matplotlib's qualitative color map + + + + # """ + # Plot each function in its own subplot with different colors. + # axs is a 2x3 grid of subplots (from plt.subplots(2, 3)). + # '.flat': converts this 2D grid into a 1D iterator, allowing you to loop through subplots sequentially (row-wise order): + # Subplot order: [axs[0,0], axs[0,1], axs[0,2], axs[1,0], axs[1,1], axs[1,2]] + # 'zip': pairs elements from two iterables: + # The first iterable: subplots (axs.flat) + # The second iterable: dataSet list + # This creates tuples of matched pairs: (axs[0,0], functions[0]), (axs[0,1], functions[1]), ..., (axs[1,2], functions[5]) + # 'enumerate': Wraps around the zip result to add an index counter i. + # for each iteration it returns (index, (subplot, function_data)) + # """ + # for i, (ax, (y, title, label)) in enumerate(zip(axs.flat, dataSets)): + # color = cmap(i / len(dataSets)) # Get unique color from colormap + # ax.plot(inputValues, y, label=label, lw=1.5, color=color, marker='o', markersize=5 ) + + # ax.set_ylabel('') + # ax.set_xlabel(r"$\rho$",labelpad=4) + + # # ax.xticks(np.arange(0, 1, step=0.2)) + # ax.set_yticks(np.arange(0, 1.2, step=0.2)) + # ax.set_xticks(np.arange(0, 1.2, step=0.5)) + + + + # # #TEST (Spline interpolation) + # # # Create cubic spline interpolation + # # interp_function = CubicSpline(inputValues, y) + + # # #create "continuous" values + # # x_continuous = np.linspace(min(inputValues), max(inputValues), 100) + # # y_interp = interp_function(x_continuous) + + + # # ax.scatter(inputValues, y, color=color, s=35, zorder=5, edgecolor='black') + # # ax.plot(x_continuous, y_interp, color=color, lw=2, label=label) + + # ax.legend() + + # # Set square aspect ratio + # ax.set_aspect(1/1.618) + + # ax.set_ylim(-0.1, 1.1) + # ax.set_xlim(-0.1, 1.1) + + # # # Set axis limits with padding + # # # ax.set_xlim(min(inputValues)-0.01, max(inputValues)+0.01) + # # ax.set_xlim(min(inputValues)-0.05, max(inputValues)+0.05) + # # y_min, y_max = np.nanmin(y), np.nanmax(y) + # # # x_min, x_max = np.nanmin(y), np.nanmax(y) + # # ax.set_ylim(y_min - 0.1*(y_max - y_min), + # # y_max + 0.1*(y_max - y_min)) + + + + + + # Single Plot: # Create a figure & axes object # fig, ax1 = plt.subplots(ncols=1,nrows=1, figsize=(width,height),gridspec_kw={'hspace': 0.4}, zorder=1) fig, ax1 = plt.subplots(ncols=1,nrows=1, figsize=(width,height), zorder=1) # title_string = r"$B_1$" + "-" r""+parameterName title_string = '' - # ax1.set_title(title_string,pad=6) + x_label = r"$\rho$" + ax1.set_xlabel(x_label, labelpad=4) + + ax1.set_ylim(-0.1, 1.0) - print('plot curvature over parameter -'+ parameterName) + + print('plot curvature over parameter :'+ parameterName) print('inputValues:', inputValues) print('outputValues:', outputValues_b1) print('outputValues:', outputValues_b2) @@ -847,27 +344,27 @@ if plotPrestrainParameterDependence_flag: l1 = ax1.plot(inputValues,outputValues_b1 , label=r"$\widehat{B}^h_1$" , markerfacecolor='orange', - markeredgecolor='white', # marker edgecolor + markeredgecolor='gray', # marker edgecolor marker='o', # each marker will be rendered as a circle - markersize=6, # marker size + markersize=4, # marker size markeredgewidth=1.0, # marker edge width) linewidth=1.5 ) l2 = ax1.plot(inputValues,outputValues_b2 , label=r"$\widehat{B}^h_2$", # markerfacecolor='orange', - markeredgecolor='white', # marker edgecolor + markeredgecolor='gray', # marker edgecolor marker='s', # each marker will be rendered as a circle - markersize=6, # marker size + markersize=4, # marker size markeredgewidth=1.0, # marker edge width) linewidth=1.5 ) l3 = ax1.plot(inputValues,outputValues_b3 , label=r"$\widehat{B}^h_3$", # markerfacecolor='orange', - markeredgecolor='white', # marker edgecolor + markeredgecolor='gray', # marker edgecolor marker='^', # each marker will be rendered as a circle - markersize=6, # marker size + markersize=4, # marker size markeredgewidth=1.0, # marker edge width) linewidth=1.5 ) @@ -925,7 +422,7 @@ if plotCurvatureAngleParameterDependence_flag: parameterValue = parameterArray[i][1][v] resultPath_parent = resultPathBase + "/" + parameterName - resultPath = resultPath_parent + "/value_" + str(parameterValue) + resultPath = resultPath_parent + "/value_" + str(np.round(parameterValue,3)) try: @@ -991,19 +488,21 @@ if plotCurvatureAngleParameterDependence_flag: #--- Create Plot ... # Setup Plot style. - plt.style.use("seaborn") + # plt.style.use("seaborn") + # plt.style.use("seaborn-v0_8") # plt.style.use('paperstyle.mplstyle') # Set correct Figure size (width/height) to make the figure fit the text without scaling. textwidth = 6.26894 # textwidth in inch width = textwidth * 0.5 # height = textwidth/1.618 # The golden ratio. - # height = width/1.618 # The golden ratio. - height = width + height = width/1.618 # The golden ratio. + # height = width #---------TEST # Styling - plt.style.use("seaborn-darkgrid") + # plt.style.use("seaborn-darkgrid") + plt.style.use("seaborn-v0_8-darkgrid") # plt.style.use("seaborn-whitegrid") # plt.style.use("seaborn") # plt.style.use("seaborn-paper") @@ -1041,12 +540,30 @@ if plotCurvatureAngleParameterDependence_flag: # plt.subplots_adjust(wspace=0.4, hspace=0) # title_string = outputQuantity + "-" r""+parameterName - title_string = "curvature" + "-" r""+parameterName - # title_string = '' + # title_string = "curvature" + "-" r""+parameterName + title_string = '' ax1.set_title(title_string,pad=6) + if parameterName == "verticalMidpointPosition": + x_label = r"Vertical position $\ell$" + else : + x_label = r"Fibre width $r$" + + # ax1.set_xlabel(r"Vertical position $\ell$", labelpad=4) + # # ax1.set_xlabel(r"Cross section radius $r$", labelpad=4) + ax1.set_xlabel(x_label, labelpad=4) + ax1.set_ylabel(r"Curvature $\kappa$", labelpad=4) + + ax1.set_ylim(-0.03, 0.6) + ax1.set_xlim(-0.03, 0.3) + + + ax1.xaxis.set_major_locator(MultipleLocator(0.1)) + # ax.xaxis.set_minor_locator(MultipleLocator(0.5)) + ax1.yaxis.set_major_locator(MultipleLocator(0.2)) - print('plot curvature over parameter -'+ parameterName) + + print('plot curvature over parameter : '+ parameterName) print('inputValues:', inputValues) print('outputValues_curvature:', outputValues_curvature) @@ -1071,12 +588,15 @@ if plotCurvatureAngleParameterDependence_flag: # plt.subplots_adjust(wspace=0.4, hspace=0) # title_string = outputQuantity + "-" r""+parameterName - title_string = "angle" + "-" r""+parameterName - # title_string = '' + # title_string = "angle" + "-" r""+parameterName + title_string = '' ax1.set_title(title_string,pad=6) + ax1.set_xlabel(r"Vertical position $\ell$", labelpad=4) + # ax1.set_xlabel(r"Cross section radius $r$", labelpad=4) + ax1.set_ylabel(r"Bending angle $\alpha$", labelpad=4) - print('plot curvature over parameter -'+ parameterName) + print('plot curvature over parameter : '+ parameterName) print('inputValues:', inputValues) print('outputValues_angle:', outputValues_angle) @@ -1095,6 +615,132 @@ if plotCurvatureAngleParameterDependence_flag: #---------------------------------------------------------------------------------------------------------------------- if plotEnergyLandscape_flag: print('Plot Energy landscape ...') + + #Check if parameterArray is empty. + if not parameterArray: + print("parameterArray is empty") + resultPath_parent = resultPathBase + resultPath = resultPath_parent + try: + os.mkdir(resultPath_parent) + except OSError as error: + print("") + try: + os.mkdir(resultPath) + except OSError as error: + print("") + + plot_minimizerInOppositeCurvatureRegion = False #this is not necessarily a local minimizer... + # Set Path for effective quantitites. + QFilePath = resultPath + "/QMatrix.txt" + BFilePath = resultPath + "/BMatrix.txt" + + # Read the effective quantities from .txt-File + Q, B = ReadEffectiveQuantities(QFilePath,BFilePath) + print('Qhom: \n', Q) + print('Beff: \n', B) + # Test: symmetrize Qhom + # Q=0.5*(np.transpose(Q)+Q) # symmetrize + + + r, theta = np.meshgrid(np.linspace(0,curvatureLength,N),np.radians(np.linspace(0, 360, N))) + E = createEnergyValues(r,theta,Q,B) + + """" + Create the energy landscape from the dataset E. + If 'Normalize' is set to true the energy is normalized via + E=E-E.min() + """ + # title_string = r"ratio $r=0.12$" + title_string = '' + + createEnergyLandscapeFigure(r,theta,E,resultPath,'','',title_string,True,displayMinimizer,plotContourLines) + else: + for i in range(0, len(parameterArray)): + for v in range(0,len(parameterArray[i][1])): + print("------------------") + print("New Loop") + print("------------------") + print('i:', i) + print('v:', v) + print('len(parameterArray[i][1]):', len(parameterArray[i][1])) + # print('parameterArray[i][v]:', parameterArray[i][v]) + print('parameterName:' , parameterArray[i][0]) + print('parameterValue: ', parameterArray[i][1][v]) + + parameterName = parameterArray[i][0] + parameterValue = parameterArray[i][1][v] + + resultPath_parent = resultPathBase + "/" + parameterName + resultPath = resultPath_parent + "/value_" + str(np.round(parameterValue,3)) + try: + os.mkdir(resultPath_parent) + except OSError as error: + print("") + # print(error) + try: + os.mkdir(resultPath) + except OSError as error: + print("") + # print(error) + + + plot_minimizerInOppositeCurvatureRegion = False #this is not necessarily a local minimizer... + + + # Set Path for effective quantitites. + QFilePath = resultPath + "/QMatrix.txt" + BFilePath = resultPath + "/BMatrix.txt" + + # Read the effective quantities from .txt-File + Q, B = ReadEffectiveQuantities(QFilePath,BFilePath) + print('Qhom: \n', Q) + print('Beff: \n', B) + # Test: symmetrize Qhom + # Q=0.5*(np.transpose(Q)+Q) # symmetrize + + + # N=2000 #Number of Sampling Points + + # curvatureLength=2 + + r, theta = np.meshgrid(np.linspace(0,curvatureLength,N),np.radians(np.linspace(0, 360, N))) + + E = createEnergyValues(r,theta,Q,B) + + """" + Create the energy landscape from the dataset E. + If 'Normalize' is set to true the energy is normalized via + E=E-E.min() + """ + # title_string = r"ratio $r=0.12$" + title_string = r""+parameterName + ": " + str(parameterValue) + title_string = '' + # createEnergyLandscapeFigure(r,theta,E,curvatureLength,Q,B,resultPath,parameterName,parameterValue,title_string,True) + # createEnergyLandscapeFigure(r,theta,E,resultPath,parameterName,parameterValue,title_string,True) + + + createEnergyLandscapeFigure(r,theta,E,resultPath,parameterName,parameterValue,title_string,True,displayMinimizer,plotContourLines) + #-------------------------------------------------------------------------- + +#---------------------------------------------------------------------------------------------------------------------- +if plotEffectiveQuantitiesParameterDependence_flag: + print('Plot Prestrain - Parameter dependence ...') + + + reduced = False + + inputValues = [] + outputValues_q1 = [] + outputValues_q2 = [] + outputValues_q3 = [] + outputValues_q12 = [] + outputValues_q23 = [] + outputValues_q13 = [] + outputValues_b1 = [] + outputValues_b2 = [] + outputValues_b3 = [] + # outputValues_b3 = [] for i in range(0, len(parameterArray)): for v in range(0,len(parameterArray[i][1])): print("------------------") @@ -1103,16 +749,16 @@ if plotEnergyLandscape_flag: print('i:', i) print('v:', v) print('len(parameterArray[i][1]):', len(parameterArray[i][1])) - # print('parameterArray[i][v]:', parameterArray[i][v]) print('parameterName:' , parameterArray[i][0]) print('parameterValue: ', parameterArray[i][1][v]) - parameterName = parameterArray[i][0] parameterValue = parameterArray[i][1][v] resultPath_parent = resultPathBase + "/" + parameterName - resultPath = resultPath_parent + "/value_" + str(parameterValue) + resultPath = resultPath_parent + "/value_" + str(np.round(parameterValue,3)) + + try: os.mkdir(resultPath_parent) except OSError as error: @@ -1124,10 +770,6 @@ if plotEnergyLandscape_flag: print("") # print(error) - - plot_minimizerInOppositeCurvatureRegion = False #this is not necessarily a local minimizer... - - # Set Path for effective quantitites. QFilePath = resultPath + "/QMatrix.txt" BFilePath = resultPath + "/BMatrix.txt" @@ -1140,848 +782,257 @@ if plotEnergyLandscape_flag: # Q=0.5*(np.transpose(Q)+Q) # symmetrize - # N=2000 #Number of Sampling Points - - # curvatureLength=2 - - r, theta = np.meshgrid(np.linspace(0,curvatureLength,N),np.radians(np.linspace(0, 360, N))) - - E = createEnergyValues(r,theta,Q,B) - - """" - Create the energy landscape from the dataset E. - If 'Normalize' is set to true the energy is normalized via - E=E-E.min() - """ - # title_string = r"ratio $r=0.12$" - title_string = r""+parameterName + ": " + str(parameterValue) - title_string = '' - # createEnergyLandscapeFigure(r,theta,E,curvatureLength,Q,B,resultPath,parameterName,parameterValue,title_string,True) - # createEnergyLandscapeFigure(r,theta,E,resultPath,parameterName,parameterValue,title_string,True) - - - createEnergyLandscapeFigure(r,theta,E,resultPath,parameterName,parameterValue,title_string,True,displayMinimizer,plotContourLines) - - - - - #-------------------------------------------------------------------------- - - # (Test): eff quantities with x-axial minimizer. - # B = np.array([1.0, 1.0, 0.0]); - - # Q = np.array([[3.0, 0.5, 0.0], - # [0.5, 0.33, 0.0], - # [0.0, 0.0, 1.0]]); - - # Q = np.array([[1.0, 0.0, 0.0], - # [0.0, 2.0, 0.0], - # [0.0, 0.0, 1.0]]); - - # B = np.array([0.0, 0.5, 0.0]); - - - # (TEST) y-axial minimizer - # Q = np.array([[1.0, 0.0, 0.0], - # [0.0, 1.0, 0.0], - # [0.0, 0.0, 1.0]]); - - # B = np.array([0.0, 5.0, 0.0]); - - - # (TEST) pi/4 minimizer (NPG1 - Fig10) - # Q = np.array([[1.0, 0.0, 0.0], - # [0.0, 2.0, 0.0], - # [0.0, 0.0, 1.0]]); - - # B = np.array([2.0, 1.5, 0.0]); - - - - - - - # Compute local and global minimizer (by Sampling method) - # kappa=0 - # kappa_pos=0 - # kappa_neg=0 - # - # N=500 #Number of Sampling Points - # # N=1500 - # # length=5 - # curvatureLength=2 + # N=1000 #Number of Sampling Points + # curvatureLength=1 # r, theta = np.meshgrid(np.linspace(0,curvatureLength,N),np.radians(np.linspace(0, 360, N))) - # # ---------------------------------------------------- - # # print('r.shape[0]', r.shape[0]) - # # # r, theta = np.meshgrid(np.linspace(0,curvatureLength,N),np.radians(np.linspace(0, 360, N, endpoint=False))) - # # E=np.zeros(np.shape(r)) - # # for k in range(0,N): - # # for l in range(0,N): - # # if theta[k,l]<np.pi: - # # E[k,l]=energy(r[k,l],theta[k,l],Q,B) - # # else: - # # E[k,l]=energy(-r[k,l],theta[k,l],Q,B) - # # ---------------------------------------------------- - - # E = createEnergyValues(r,theta,Q,B) - # # [kappa_globalmin,alpha_globalmin,kappa_localmin,alpha_localmin,energyDifference,minimizer_sign] = getMinimizers(E) - - # """" # Create the energy landscape from the dataset E. # If 'Normalize' is set to true the energy is normalized via # E=E-E.min() # """ # # title_string = r"ratio $r=0.12$" - # title_string = r""+parameterName + ": " + str(parameterValue) - # # createEnergyLandscapeFigure(r,theta,E,title_string,True); + # # title_string = r""+parameterName + ": " + str(parameterValue) + # # title_string = '' # # createEnergyLandscapeFigure(r,theta,E,curvatureLength,Q,B,resultPath,parameterName,parameterValue,title_string,True) - # createEnergyLandscapeFigure(r,theta,E,resultPath,parameterName,parameterValue,title_string,True) - - - - - - # print('E.argmin():',E.argmin()) - # Compute local and global minimizer (by Sampling method) - - # print('E.shape[0]', E.shape[0]) - - # ---------------------------------------------------- - # Compute Minimizer - # [kmin,lmin]=np.unravel_index(E.argmin(),(N,N)) - # kappamin=r[kmin,lmin] - # alphamin=theta[kmin,lmin] - - # Emin = E[kmin,lmin] - - # # Positive curvature region - # N_mid=int(N/2) - # [kmin,lmin]=np.unravel_index(E[:N_mid,:].argmin(),(N_mid,N)) - # kappamin_pos=r[kmin,lmin] - # alphamin_pos=theta[kmin,lmin] - # Emin_pos=E[kmin,lmin] - # # Negative curvature region - # [kmin,lmin]=np.unravel_index(E[N_mid:,:].argmin(),(N_mid,N)) - # kappamin_neg=r[kmin+N_mid,lmin] - # alphamin_neg=theta[kmin+N_mid,lmin] - # Emin_neg=E[kmin+N_mid,lmin] - # # - - # # print('r:', r) - # # print('theta:', theta) - # # print('E:', E) - - - # print('Emin:', Emin) - # print('Emin_pos:', Emin_pos) - # print('Emin_neg:', Emin_neg) - - # print('energy in origin (0,0):' ,energy(0,0,Q,B)) - - # if(abs(Emin_pos - Emin_neg)<1e-5): - # print('Both minimizers have nearly the same energy - likely two minimizers.') - - # if(Emin_pos < Emin_neg): - # print('Global Minimizer has positive curvature.') - # minimizer = 'positive' - # energyDifference = Emin_neg-Emin_pos - # else: - # print('Global Minimizer has negative curvature.') - # minimizer = 'negative' - # energyDifference = Emin_pos-Emin_neg - - # print('E.min(): ',E.min()) - # print('E.max(): ',E.max()) - - # # Normalize minimum energy to zero: - # E=E-E.min() - - - # print('E.min(): (after normalization): ',E.min()) - # print('E.max(): (after normalization): ',E.max()) - - - # if (minimizer == 'positive'): - # alpha_globalmin = alphamin - # kappa_globalmin = kappamin - # kappa_localmin = (-1)*kappamin_neg - # alpha_localmin = alphamin_neg - # else : - # alpha_globalmin = alphamin - # kappa_globalmin = (-1)*kappamin - # kappa_localmin = kappamin_pos - # alpha_localmin = alphamin_pos - - # # print('kappamin_pos: ', kappamin_pos) - # # print('alphamin_pos: ', alphamin_pos) - # # print('kappamin_neg: ', kappamin_neg) - # # print('alphamin_neg: ', alphamin_neg) - - # print('kappa_globalmin: ', kappa_globalmin) - # print('alpha_globalmin: ', alpha_globalmin) - # print('kappa_localmin: ', kappa_localmin) - # print('alpha_localmin: ', alpha_localmin) - - - # #evaluate energy on minimizers - # # print('energy (kappa_pos)', energy(kappamin_pos,alphamin_pos,Q,B)) - # # print('energy (kappa_neg)', energy(-kappamin_neg,alphamin_neg,Q,B)) - - # print('energy (global minimizer)', energy(kappa_globalmin,alpha_globalmin,Q,B)) - # print('energy (local minimizer)', energy(kappa_localmin,alpha_localmin,Q,B)) - - # ---------------------------------------------------- - -#-------------------------------------------------------------------------------------------------------------- - - - # # Emax=100 - # Emax = E.max() - # # levs=np.geomspace(1,E.max()*0.5,50) - # # levs=np.geomspace(1,Emax,50) - # # levs=np.geomspace(0.1,Emax,100) - # # print('np.round(E.min(),decimals=2):', np.round(E.min(),decimals=2)) - # # levs=np.geomspace(0.01,Emax,100) - - # levs=np.geomspace(0.01,E.max(),300) # Return numbers spaced evenly on a log scale (a geometric progression). - - - # # print('levs:', levs) - - # # levs=np.geomspace(E.min(),E.max(),400) #(np.geomspace: Return numbers spaced evenly on a log scale) - # # levs=np.geomspace(0,E.max(),400) - # # levs=np.geomspace(1,Emax,400) - - # ## Create Figure - # # fig, (ax1) = plt.subplots( nrows=1,figsize=(3,3.5),subplot_kw=dict(projection='polar'), gridspec_kw={'hspace': 0.4}) - - # # fig, ax1 = plt.subplots( figsize=(width,height),subplot_kw=dict(projection='polar'), gridspec_kw={'hspace': 0.4}) - # # fig, ax1 = plt.subplots(ncols=1,nrows=1, figsize=(width,height),subplot_kw=dict(projection='polar')) - # fig, ax1 = plt.subplots(ncols=1,nrows=1, figsize=(width,height), subplot_kw=dict(polar=True),gridspec_kw={'hspace': 0.4}, zorder=1) - # fig.subplots_adjust(left=.1, bottom=0.01, right=.9, top=0.9) #adjust placement inside figure - - # # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.75), cmap='brg', zorder=0) - # # pcm=ax1.contourf(theta, r, E,100 , norm=colors.PowerNorm(gamma=0.4), cmap='brg', zorder=0) - # # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=1.0), cmap='brg', zorder=0) - # # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.5), cmap='brg', zorder=0) - # # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.4,vmin=E.mins(),vmax=E.max()), cmap='brg', zorder=0) - - - - # """ - # ---Test: Define new custom colormap - # define top and bottom colormaps - # """ - # top = cm.get_cmap('Oranges_r', 128) # r means reversed version - # bottom = cm.get_cmap('Blues', 128)# combine it all - # newcolors = np.vstack((top(np.linspace(0, 1, 128)), - # bottom(np.linspace(0, 1, 128))))# create a new colormaps with a name of OrangeBlue - # orange_blue = colors.ListedColormap(newcolors, name='OrangeBlue') - - - # # bi_pride = LinearSegmentedColormap.from_list("", ["#D60270", "#9B4F96", "#0038A8"]) - # # testColor = LinearSegmentedColormap.from_list("", ["#4B0082", "#FF7F50"]) - # testColor = LinearSegmentedColormap.from_list("", ["#380282","#0343DF","#FF7F50", "#FE420F"]) - - # """ - # Plot with Contourf: - # """ - # # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.5,vmin=E.min(),vmax=E.max()), cmap='brg', zorder=0) - # # # # # # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), cmap=mpl.cm.magma, zorder=0) - # # # # # ###--- Hide Contour LineStroke (remove white lines between contour levels) - # # for c in pcm.collections: - # # c.set_edgecolor("face") - # # pcm.collections.set_edgecolor("face") - - # #Test imshow - # # pcm=ax1.imshow(E,extent=[r.min(), r.max(), np.degrees(theta.min()),np.degrees(theta.max())], norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), cmap=mpl.cm.magma, origin='lower') - - # ### - # """ - # Test Pcolormesh - # * Reducing the image-quality/file-size by using rasterized option: - # * Looks much smoother without 'rasterize' option however file-size gets out of hand..: - # * Together with the 'dpi=..' option of figsave we can control the file-size - # * Advantage: Text etc. is still vectorized without having too large files. - - # Problem: How to get the Colorbarticks right (uniform spacing) when using PowerNorm (unclear) - # """ - # pcm=ax1.pcolormesh(theta, r, E, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()) ,cmap='plasma', edgecolors='face', zorder=0, rasterized=True, alpha=0.8) - - # # pcm=ax1.pcolormesh(theta, r, E, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()) ,cmap=testColor, edgecolors='face', zorder=0, rasterized=True, alpha=0.7) - # # pcm=ax1.pcolormesh(theta, r, E, norm=colors.PowerNorm(gamma=0.2,vmin=E.min(),vmax=E.max()) ,cmap='gray', edgecolors='face', zorder=0, rasterized=True, alpha=0.8) - # # pcm=ax1.pcolormesh(theta, r, E, norm=colors.PowerNorm(gamma=0.5,vmin=E.min(),vmax=E.max()) ,cmap=orange_blue, edgecolors='face', zorder=0, rasterized=True, alpha=0.8) - - - # # colormaptest=mpl.cm.get_cmap('viridis') - # # colormaptest.set_under("k") - - # # pcm=ax1.pcolormesh(theta, r, E, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()) ,cmap=colormaptest, edgecolors='face', zorder=0, rasterized=True, shading='auto') - - - # #--Test Approach from : https://stackoverflow.com/questions/61897393/unevenly-irregularly-spaced-data-for-colorbar-with-evenly-spaced-colors - # # energyRange=np.linspace(E.min(),E.max(),10) - # # cmap_vir = plt.get_cmap('viridis') - # # colors = cmap_vir(np.linspace(0, 1, len(energyRange) - 1)) - # # cmap, norm = mpl.colors.from_levels_and_colors(energyRange, colors) - # # pcm=ax1.pcolormesh(theta, r, E, cmap=cmap, norm=norm, rasterized=True) - - - # # ColorNorm = colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()) - - - # # pcm=ax1.pcolormesh(theta, r, E, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), cmap='viridis', edgecolors='face') - # # pcm=ax1.pcolormesh(theta, r, E, norm=ColorNorm ,cmap='brg', edgecolors='face', zorder=0, rasterized=True, shading='auto') - - # # mpl.rcParams.update({"axes.grid" : False}) # Add grid - - # # pcm=ax1.pcolormesh(theta, r, E, norm=ColorNorm ,cmap='brg', edgecolors='face', zorder=0, rasterized=True) - # #Test tricontour: - # # pcm=ax1.tricontourf(theta, r, E) - - # # print('ColorNorm:', ColorNorm) - # # print('ColorNorm(E.min()):',ColorNorm(E.min())) - # # print('ColorNorm(E.max()/2.0):',ColorNorm(E.max()/2.0)) - # # print('ColorNorm(E.max()):',ColorNorm(E.max())) - - - # print('0.025*E.max():',0.025*E.max()) - # print('energyDifference: ', energyDifference) - # ### Create additional contour-line plot: - # contour_levs=np.geomspace(0.01,E.max(),1) # levels used for an additional contour-plot - # contour_levs = [0.1] - # # contour_levs = np.linspace(0.001,0.5,4) - # # contour_levs = np.linspace(0.001,0.25*E.max(),10) - # # contour_levs = np.linspace(0.001,energyDifference*1.0,10) # contour only from zero (Minimizer) to energyDifference between global/local Minimizer. - - # # contour_levs_minimizer = np.linspace(0.001,energyDifference*0.5,6) - # # contour_levs = np.linspace(0.0001,energyDifference*0.75,6) # contour only from zero (Minimizer) to energyDifference between global/local Minimizer. - # contour_levs = np.linspace(0.0001,energyDifference*1.0,6) # contour only from zero (Minimizer) to energyDifference between global/local Minimizer. - # print('contour_levs:', contour_levs) - # contours = plt.contour(theta, r, E, contour_levs, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), colors='ivory',linewidths=0.65, linestyles="dashed", alpha=0.8, zorder=2) - # contours_min = plt.contour(theta, r, E, [contour_levs[1]], norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), colors='yellow',linewidths=0.65, linestyles="solid", alpha=0.9, zorder=2) - # # contours = plt.contour(theta, r, E, contour_levs, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), ,linewidths=0.1, linestyles="dashdot") - # # contours = plt.contour(theta, r, E, contour_levs, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), cmap='plasma',linewidths=0.1, linestyles="dashdot") - # # ax1.clabel(contours, inline=True, fontsize=4) - # # contours = plt.contour(theta, r, E, contour_levs, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), colors='black',linewidths=0.1, linestyles="dashed") - # # contours = plt.contour(theta, r, E, levs,norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), linewidths=0.1, linestyles="dashed", locator=mpl.ticker.LogLocator()) - # # plt.clabel(contours, inline=True, fontsize=4) - - - # # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), cmap='terrain', zorder=0) - # # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.5,vmin=E.min(),vmax=E.max()), cmap=plt.cm.bone, zorder=0) - - - # ###--- Set Title - # ax1.set_title(r"ratio $r=0.12$",pad=6) - # # ax1.set_title(r"ratio $r=0.12$",pad=10) - # # ax1.set_title(r""+parameterName + ": " + str(parameterValue),pad=20) - - - - - - - - - # # # Plot global minimizer - # # ax1.plot(alpha_globalmin, abs(kappa_globalmin), - # # markerfacecolor='blue', - # # markeredgecolor='white', # marker edgecolor - # # marker='s', # each marker will be rendered as a circle - # # markersize=4, # marker size - # # markeredgewidth=0.5, # marker edge width - # # linewidth=0, - # # zorder=3, - # # alpha=1, # Change opacity - # # label = r"$\kappa_{0^\circ}(m^{-1})$") - # # Plot global minimizer - - - # Minimizer_string = ': ('+ str(np.round(np.rad2deg(alpha_globalmin),decimals=1)) + '°' + ',' + str(np.round(abs(kappa_globalmin),decimals=2))+ ')' - - - # # Mark Global Minimizer with a dot. - # gmin = ax1.plot(alpha_globalmin, abs(kappa_globalmin), - # markerfacecolor='cornflowerblue', - # markeredgecolor='white', # marker edgecolor - # marker='o', # each marker will be rendered as a circle - # markersize=6, # marker size - # markeredgewidth=1.0, # marker edge width - # linewidth=0, - # zorder=3, - # alpha=1, # Change opacity - # label = Minimizer_string) - # # label = r"$\kappa_{0^\circ}(m^{-1})$") - - - # # # #TEST: For Annotation - # # ax1.plot(np.deg2rad(290), curvatureLength+1, - # # markerfacecolor='cornflowerblue', - # # markeredgecolor='white', # marker edgecolor - # # marker='o', # each marker will be rendered as a circle - # # markersize=6, # marker size - # # markeredgewidth=1.0, # marker edge width - # # linewidth=0, - # # zorder=3, - # # alpha=1 # Change opacity - # # ) - - # if (minimizer_sign == 'positive'): - # horizontal_annotation_alignment = 'left' - # # kappa_sign_string = "" - # else : - # horizontal_annotation_alignment = 'right' - # # kappa_sign_string = "-" - # #--- annotate global minimizer - - # # ax1.annotate( '('+ str(np.round(np.rad2deg(alpha_globalmin),decimals=1)) + '°' + ',' + str(np.round(abs(kappa_globalmin),decimals=2))+ ')' , - # # # ax1.annotate( r'$(\theta_{m}, \kappa_m)=$' + '('+ str(np.round(np.rad2deg(alphamin),decimals=1)) + '°' + ',' + str(np.round(kappamin,decimals=1))+ ')' , - # # # xycoords='polar', - # # # xy = (alpha_globalmin-0.15,abs(kappa_globalmin)+0.25), - # # # xy = (alpha_globalmin-0.10,abs(kappa_globalmin)+0.1), - # # xy = (alpha_globalmin,abs(kappa_globalmin)), - # # # xytext=(0.10, np.round(kappa_globalmin,decimals=2)-0.25), - # # # textcoords='polar', - # # # textcoords='offset points', - # # # xytext = (alpha_globalmin-0.10,abs(kappa_globalmin)+0.1), - # # # textcoords='figure fraction', - # # xycoords=ax1.get_xaxis_transform(), - # # # xytext = (0.5,0.5), - # # # xytext=(alpha_globalmin-0.25,abs(kappa_globalmin)+0.15), #Position of Text-annotation - # # # rotation=np.rad2deg(alpha_globalmin), - # # horizontalalignment=horizontal_annotation_alignment, - # # verticalalignment="bottom", - # # color='ivory', - # # zorder=4, - # # fontsize='9') - - - - - # if plot_minimizerInOppositeCurvatureRegion: - # # Plot local minimizer - # # ax1.plot(alphamin_neg, kappamin_neg, - # ax1.plot(alpha_localmin, abs(kappa_localmin), # We need to take abs(kappa) since negative curvatures are still plotted with a positive kappa! - # markerfacecolor='green', - # markeredgecolor='white', # marker edgecolor - # marker='D', # each marker will be rendered as a circle - # markersize=4, # marker size - # markeredgewidth=0.5, # marker edge width - # linewidth=0, # line width - # zorder=3, - # alpha=1) - - - # #--- annotate local minimizer - # ax1.annotate( '('+ str(np.round(360-np.rad2deg(alpha_localmin),decimals=1)) + '°' + ',' + str(np.round(kappa_localmin,decimals=2))+ ')' , - # xy = (alpha_localmin,abs(kappa_localmin)), - # # xytext=(-1.6, np.round(kappa_localmin,decimals=2)+0.9), - # # xytext=(-1.6, np.round(kappa_localmin,decimals=2)), - # xytext=(alpha_localmin,abs(kappa_localmin)), - # color='ivory', - # # zorder=5, - # fontsize='8') - - - # # print('alphamin: ' , alphamin ) - # # print('kappamin: ' , kappamin ) - # # print('Global Minimizer (alphamin, kappamin):' , '('+ str(np.round(np.rad2deg(alphamin),decimals=1)) + ',' + str(np.round(kappamin,decimals=1))+ ')' ) - # print('Global Minimizer (alphamin, kappamin):' , '('+ str(np.round(np.rad2deg(alpha_globalmin),decimals=1)) + ',' + str(np.round(abs(kappa_globalmin),decimals=2))+ ')' ) - # # print('Local Minimizer (alphamin, kappamin):' , '('+ str(np.round(360-np.rad2deg(alphamin_neg),decimals=1)) + ',' + str(np.round(-kappamin_neg,decimals=1))+ ')' ) - - - # print('Local Minimizer opposite curvature (alphamin, kappamin):' , '('+ str(np.round(360-np.rad2deg(alpha_localmin),decimals=1)) + ',' + str(np.round(abs(kappa_localmin),decimals=2))+ ')' ) - # # ax1.annotate(alphamin, (alphamin,kappamin)) - - - - - # # rotate radius axis labels. - # # ax1.set_rlabel_position(135) - - # colorbarticks=np.geomspace(0.00001,E.max(),10) - # # # colorbarticks=np.geomspace(0.00001,Emax,4) - # # colorbarticks=np.linspace(E.min(),E.max(),10) - # # # colorbarticks=np.geomspace(0.00001,E.max(),14) - - # # linSeq = np.linspace(E.min(),E.max(),10) - # # linSeq = np.geomspace(0.00001,Emax,10) - - # # colorbarticks = ColorNorm.inverse(((linSeq - E.min())/(E.max()-E.min()))**0.4) - - - # # colorbarticks=ColorNorm(np.linspace(E.min(),E.max(),4)) * E.max() - - - - # #TEST: evenly sample values from E: - # # numElems = 3 - # # idx = np.round(np.linspace(0, len(E) - 1, numElems)).astype(int) - # # colorbarticks = E[0][idx] - # print('colorbarticks:', colorbarticks) - - - - # # We need to map those colorbarticks to the colorbar. - - # #---Test - # # axins = inset_axes( ax1, - # # width="100%", - # # height="5%", - # # loc='lower center', - # # borderpad=-5 - # # ) - - - # #------------------- - - - # # cbar = fig.colorbar(pcm,ticks=energyRange) - - - # # Colorbar for Contourf-Plot: - # # cbar = plt.colorbar(pcm, ax=[ax1], extend='max', ticks=colorbarticks, pad=0.1, orientation="horizontal") - - # # Colorbar for pcolormesh-Plot: - # # cbar = fig.colorbar(pcm, ax=ax1, pad=0.075, orientation="horizontal") # so far best with pcolormesh. - # cbar = fig.colorbar(pcm, ax=ax1, pad=0.1, orientation="horizontal") # so far best with pcolormesh. - - # # cbar = plt.colorbar(pcm, ax=[ax1], extend='max', pad=0.1, orientation="horizontal") - - # # cbar = plt.colorbar(pcm, ax=[ax1], norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), extend='max', ticks=colorbarticks, pad=0.1, orientation="horizontal") - # # fig.colorbar(pcm, ax=ax1, pad=0.1, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), ticks=colorbarticks, orientation="horizontal") - # # cbar = plt.colorbar(pcm, ax=[ax1], extend='max', pad=0.2, orientation="horizontal") - # # cbar = plt.colorbar(pcm, ax=[ax1], extend='max',norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), ticks=colorbarticks, pad=0.2, orientation="horizontal") - # # fig.colorbar(pcm, ax=ax1, pad=0.1, ticks=colorbarticks, orientation="horizontal", spacing='proportional') - - # # fig.colorbar(pcm, ax=ax1, pad=0.1, orientation="horizontal", spacing='proportional') - - + # # createEnergyLandscapeFigure(r,theta,E,resultPath,parameterName,parameterValue,title_string,True) + # # createEnergyLandscapeFigure(r,theta,E,resultPath,parameterName,parameterValue,title_string,True,displayMinimizer) + # [kappa_globalmin,alpha_globalmin,kappa_localmin,alpha_localmin,energyDifference,minimizer_sign] = getMinimizers(r,theta,E) - # # cbar = fig.colorbar(pcm, ax=ax1, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()),ticks=colorbarticks, pad=0.1, orientation="horizontal") - # # cbar.ax.set_xscale('linear') - # # cbar.ax.set_xscale('log') + inputValues.append(parameterValue) + # outputValues_b1.append(B[0]) + # outputValues_b2.append(B[1]) + # outputValues_b3.append(B[2]) + outputValues_q1.append(Q[0][0]) + outputValues_q2.append(Q[1][1]) + outputValues_q3.append(Q[2][2]) + outputValues_q12.append(Q[0][1]) + outputValues_q23.append(Q[1][2]) + outputValues_q13.append(Q[0][2]) + outputValues_b1.append(B[0]) + outputValues_b2.append(B[1]) + outputValues_b3.append(B[2]) + # --------------------------------------------------------------------------------------------------------- - # # cbar = mpl.colorbar.ColorbarBase() - # # fig.colorbar(pcm, ax=[ax1], extend='max', ticks=colorbarticks, pad=0.1, orientation="horizontal", cax=axins) - # # cbar = plt.colorbar(pcm, ax=[ax1], ticks=colorbarticks, pad=0.2, orientation="horizontal", location = 'bottom', fraction=0.1) - # # cbar.ax.tick_params(labelsize=8) - # """ - # Set Tick labels - # x: Angle - # y: Radius - - # """ + #--- Create Plot ... + # Setup Plot style. + # plt.style.use("seaborn") + # plt.style.use("seaborn-v0_8") + # plt.style.use('paperstyle.mplstyle') + # Set correct Figure size (width/height) to make the figure fit the text without scaling. + textwidth = 6.26894 # textwidth in inch + width = textwidth + # height = textwidth/1.618 # The golden ratio. + height = width/1.618 # The golden ratio. + # height = width - # # plt.rcParams["axes.axisbelow"] = False + plt.style.use("seaborn-v0_8-darkgrid") + # plt.style.use("seaborn-darkgrid") + mpl.rcParams['text.usetex'] = True + mpl.rcParams["font.family"] = "serif" + mpl.rcParams["font.size"] = "10" + mpl.rcParams['xtick.bottom'] = True + mpl.rcParams['xtick.major.size'] = 3 + mpl.rcParams['xtick.minor.size'] = 1.5 + mpl.rcParams['xtick.major.width'] = 0.75 + mpl.rcParams['ytick.left'] = True + mpl.rcParams['ytick.major.size'] = 3 + mpl.rcParams['ytick.minor.size'] = 1.5 + mpl.rcParams['ytick.major.width'] = 0.75 + mpl.rcParams.update({'font.size': 10}) + mpl.rcParams['axes.labelpad'] = 3 + #--------------------- - # anglelabel=["0°","45°", "90°", "135°", "180°","-135°","-90°","-45°"] - # # anglelabel=["0°","45°", "90°", "135°",r"$\pm180$° ","-135°","-90°","-45°"] - # ax1.set_xticks(np.array([.0,1/4,2/4,3/4,1,5/4,6/4,7/4])*np.pi) - # # ax1.set_xticks(np.pi/180. * np.linspace(180, -180, 8, endpoint=False)) - # ax1.set_xticklabels(anglelabel) - # # ax1.xaxis.grid(True, color='white') - # ax1.xaxis.grid(True) - # # ax1.zorder=4 - # # ax1.set_zorder(ax1.get_zorder()+4); - # # ax1.grid(zorder=10) - # # ax1.patch.set_visible(False) + # Create a figure & axes object + # fig, ax1 = plt.subplots(ncols=1,nrows=1, figsize=(width,height),gridspec_kw={'hspace': 0.4}, zorder=1) + # fig, ax1 = plt.subplots(ncols=1,nrows=1, figsize=(width,height), zorder=1) + # fig, axs = plt.subplots(ncols=2,nrows=3, figsize=(width,height), zorder=1) - # # We want to grid-axis to be on top of the contour lines to hide confusing contours on the grid-axis. - # ax1.set_axisbelow(False) + if reduced: + fig, axs = plt.subplots(ncols=2,nrows=3, figsize=(width,height), constrained_layout=True) + else : + fig, axs = plt.subplots(ncols=3,nrows=3, figsize=(width,height), constrained_layout=True) + + # title_string = r"$B_1$" + "-" r""+parameterName + title_string = '' - # # tick locations - # # thetaticks = np.arange(0,360,45) - # # # set ticklabels location at 1.3 times the axes' radius - # # ax1.set_thetagrids(thetaticks, frac=1.3) + # x_label = r"$\rho$" + # x_label = r"$\theta$" + # axs.set_xlabel(x_label, labelpad=4) - # # Adjust pad of xticklabels: - # ax1.tick_params(pad=0.5) + # ax1.set_ylim(-0.1, 1.0) - # #rotate radius axis labels. - # # ax1.set_rlabel_position(135) - # ax1.set_rlabel_position(225) - # # ax1.set_rlabel_position(235) - # # ax1.set_rticks([0.5, 1, 1.5, 2]) # Less radial ticks + print('plot curvature over parameter : '+ parameterName) + print('inputValues:', inputValues) + # print('outputValues:', outputValues_q1) + # print('outputValues:', outputValues_q2) + # print('outputValues:', outputValues_q3) + # print('outputValues:', outputValues_q12) + + if reduced: + dataSets = [ + (outputValues_q1, r"$\widehat{Q}^h_{11}$", r"$\widehat{Q}^h_{11}$"), + (outputValues_q2, r"$\widehat{Q}^h_{22}$", r"$\widehat{Q}^h_{22}$"), + (outputValues_q3, r"$\widehat{Q}^h_{33}$", r"$\widehat{Q}^h_{33}$"), + (outputValues_q12, r"$\widehat{Q}^h_{12}$", r"$\widehat{Q}^h_{12}$"), + (outputValues_b1, r"$\widehat{B}^h_1$", r"$\widehat{B}^h_1$"), + (outputValues_b2, r"$\widehat{B}^h_2$", r"$\widehat{B}^h_2$"), + ] + else : + dataSets = [ + (outputValues_q1, r"$\widehat{Q}^h_{11}$", r"$\widehat{Q}^h_{11}$"), + (outputValues_q2, r"$\widehat{Q}^h_{22}$", r"$\widehat{Q}^h_{22}$"), + (outputValues_q3, r"$\widehat{Q}^h_{33}$", r"$\widehat{Q}^h_{33}$"), + (outputValues_q12, r"$\widehat{Q}^h_{12}$", r"$\widehat{Q}^h_{12}$"), + (outputValues_q23, r"$\widehat{Q}^h_{23}$", r"$\widehat{Q}^h_{23}$"), + (outputValues_q13, r"$\widehat{Q}^h_{13}$", r"$\widehat{Q}^h_{13}$"), + (outputValues_b1, r"$\widehat{B}^h_1$", r"$\widehat{B}^h_1$"), + (outputValues_b2, r"$\widehat{B}^h_2$", r"$\widehat{B}^h_2$"), + (outputValues_b3, r"$\widehat{B}^h_3$", r"$\widehat{B}^h_3$") + ] + + # Get a color map with distinct colors + cmap = get_cmap('tab10') # Using matplotlib's qualitative color map + + + + """ + Plot each function in its own subplot with different colors. + axs is a 2x3 grid of subplots (from plt.subplots(2, 3)). + '.flat': converts this 2D grid into a 1D iterator, allowing you to loop through subplots sequentially (row-wise order): + Subplot order: [axs[0,0], axs[0,1], axs[0,2], axs[1,0], axs[1,1], axs[1,2]] + 'zip': pairs elements from two iterables: + The first iterable: subplots (axs.flat) + The second iterable: dataSet list + This creates tuples of matched pairs: (axs[0,0], functions[0]), (axs[0,1], functions[1]), ..., (axs[1,2], functions[5]) + 'enumerate': Wraps around the zip result to add an index counter i. + for each iteration it returns (index, (subplot, function_data)) + """ + for i, (ax, (y, title, label)) in enumerate(zip(axs.flat, dataSets)): + color = cmap(i / len(dataSets)) # Get unique color from colormap + # ax.plot(inputValues, y, label=label, lw=1.5, color=color, marker='o', markersize=5 ) + + # ax.set_title(title,fontsize=10) - - - # # ax1.axis.set_major_locator(MultipleLocator(0.5)) - # # ax1.yaxis.set_major_locator(MultipleLocator(0.5)) - - # radiusTickLength = 0.5 - # ax1.yaxis.set_major_locator(plt.FixedLocator(np.arange(radiusTickLength,curvatureLength,radiusTickLength))) - - # # ax1.set_yticks(np.array([1,2,3,4])) - # # ax1.set_yticklabels(["1","2","3","4"], zorder=20, color="white") - # # ax1.yxis.set_major_locator - # # ax1.set_yticks(np.array([1,2])) - # # ax1.set_yticklabels(["1","2"], zorder=20, color="white") - # # ax1.set_yticks(np.array([1,1.5])) - # # ax1.set_yticklabels(["1","1.5"], zorder=20, color="white") - # # ax1.set_yticks(np.array([1,2,3])) - # # ax1.set_yticklabels(["1","2","3"], zorder=20, color="white") - # ax1.yaxis.set_tick_params(color='white', pad = 1.0) - # # ax1.yaxis.grid(True, color='white', alpha=0.75) - # ax1.yaxis.grid(True) - - # # ax1.spines['polar'].set_visible(True) - # # Create Minor ticks manually as polar coordinates does not have the option. - # tick = [ax1.get_rmax(),ax1.get_rmax()*0.97] - # for t in np.deg2rad(np.arange(0,360,5)): - # ax1.plot([t,t], tick, lw=0.1, color="k") - - - # #Test:tight Layout - # # plt.tight_layout() - - - # #TEST: Legend - # # ax1.legend(loc="lower center") - # # ax1.legend(loc="lower right",bbox_to_anchor=[1.0, 0.01],frameon=True) - - # # ax1.legend(bbox_to_anchor=[0.8, -0.05],loc='center',borderaxespad=0.1,frameon=True) - # # ax1.legend(bbox_to_anchor=[0.8, -0.1],loc='lower center',borderaxespad=0.1,frameon=True) - # # ax1.legend(bbox_to_anchor=[0.8, 0.2],borderaxespad=0.1,frameon=True,bbox_transform=fig.transFigure) - # # ax1.legend(loc='best') - # legend = ax1.legend(bbox_to_anchor=[0.75, 0.15],loc='lower center',borderaxespad=0.1,frameon=True,bbox_transform=fig.transFigure,handletextpad=0.1) - # frame = legend.get_frame() - # # frame.set_color('white') - # frame.set_edgecolor('black') - - - - # # axbox = ax1.get_position() - # # legend = fig.legend([gmin], [Minimizer_string], loc='center',bbox_to_anchor=[axbox.x0+0.5*axbox.width, axbox.y0-0.05], bbox_transform=fig.transFigure) - # # fig.legend(gmin, r""+Minimizer_string) - # # labels=line_labels, # The labels for each line - # # loc="center right", # Position of legend - # # bbox_to_anchor=[1.35, 0.55], - # # borderaxespad=0.15, # Small spacing around legend box - # # frameon=True - # # # title="Legend Title" # Title for the legend - # # ) - - # # Save Figure as png. - # # fig.savefig(resultPath + '/energy_landscape_'+ parameterName + '_' +str(parameterValue) + '.png', dpi=100) - # # Save Figure as pdf. - # fig.set_size_inches(width, height) - # fig.savefig(resultPath + '/energy_landscape_'+ parameterName + '_' +str(parameterValue) + '.pdf', dpi=500) #dpi only has an effect if "rasterize" option is used. - # # fig.savefig(resultPath + '/energy_landscape_'+ parameterName + '_' +str(parameterValue) + 'noDPI' + '.pdf') - - - # #Plot Colorbar separately: - - - - # # fig.savefig(resultPath + '/energy_landscape_'+ parameterName + '_' +str(parameterValue) + 'Legend' + '.pdf', - # # dpi=300, - # # bbox_inches='tight') - -# -------------------------------------------------------------------------------------------------------------- - - - - - -# OLD VERSION: -# plt.style.use("seaborn") -# plt.style.use('paperstyle.mplstyle') - - -# # plt.style.use("seaborn") - -# # mpl.rcParams['text.usetex'] = True -# # mpl.rcParams["font.family"] = "serif" -# # mpl.rcParams["font.size"] = "8" -# # mpl.rcParams['xtick.bottom'] = True -# # mpl.rcParams['xtick.major.size'] = 2 -# # mpl.rcParams['xtick.minor.size'] = 1.5 -# # mpl.rcParams['xtick.major.width'] = 0.75 -# # # mpl.rcParams['xtick.labelsize'] = 8 -# # mpl.rcParams['xtick.major.pad'] = 1 -# # mpl.rcParams['ytick.left'] = True -# # mpl.rcParams['ytick.major.size'] = 2 -# # mpl.rcParams['ytick.minor.size'] = 1.5 -# # mpl.rcParams['ytick.major.width'] = 0.75 -# # mpl.rcParams['ytick.labelsize'] = 8 -# # mpl.rcParams['ytick.major.pad'] = 1 -# # mpl.rcParams['axes.titlesize'] = 8 -# # mpl.rcParams['axes.titlepad'] = 1 -# # # mpl.rcParams['axes.labelsize'] = 8 -# # #Adjust Legend: -# # mpl.rcParams['legend.frameon'] = True # Use frame for legend -# # # mpl.rcParams['legend.framealpha'] = 0.5 -# # mpl.rcParams['legend.fontsize'] = 8 # fontsize of legend -# # #Adjust grid: -# # # mpl.rcParams.update({"axes.grid" : True}) # Add grid -# # mpl.rcParams.update({"axes.grid" : False}) # Add grid -# # mpl.rcParams['axes.labelpad'] = 3 -# # mpl.rcParams['grid.linewidth'] = 0.25 -# # mpl.rcParams['grid.alpha'] = 0.75 # 0.75 -# # mpl.rcParams['grid.linestyle'] = '-' -# # mpl.rcParams['grid.color'] = 'lightgray'#'black' -# # mpl.rcParams['text.latex.preamble'] = r'\usepackage{amsfonts}' # Makes Use of \mathbb possible. - - - -# textwidth = 6.26894 #textwidth in inch -# # width = textwidth * 0.5 -# width = textwidth * 0.33 -# # width = textwidth -# height = width/1.618 # The golden ratio. - - -# # Emax=100 -# Emax = E.max() -# # levs=np.geomspace(1,E.max()*0.5,50) -# # levs=np.geomspace(1,Emax,50) -# # levs=np.geomspace(0.1,Emax,100) -# # print('np.round(E.min(),decimals=2):', np.round(E.min(),decimals=2)) -# # levs=np.geomspace(0.01,Emax,100) -# levs=np.geomspace(0.01,Emax,200) -# # print('levs:', levs) - -# # levs=np.geomspace(E.min(),E.max(),400) #(np.geomspace: Return numbers spaced evenly on a log scale) -# # levs=np.geomspace(0,E.max(),400) -# # levs=np.geomspace(1,Emax,400) - -# ## Create Figure -# # fig, (ax1) = plt.subplots( nrows=1,figsize=(3,3.5),subplot_kw=dict(projection='polar'), gridspec_kw={'hspace': 0.4}) - -# # fig, ax1 = plt.subplots( figsize=(width,height),subplot_kw=dict(projection='polar'), gridspec_kw={'hspace': 0.4}) -# fig, ax1 = plt.subplots(ncols=1,nrows=1, figsize=(width,height),subplot_kw=dict(projection='polar')) -# fig.subplots_adjust(left=.1, bottom=.1, right=.95, top=.95) #adjust placement inside figure - -# # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.75), cmap='brg', zorder=0) -# # pcm=ax1.contourf(theta, r, E,100 , norm=colors.PowerNorm(gamma=0.4), cmap='brg', zorder=0) -# # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=1.0), cmap='brg', zorder=0) -# # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.5), cmap='brg', zorder=0) -# pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), cmap='brg', zorder=0) -# # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.4,vmin=E.min(),vmax=E.max()), cmap='terrain', zorder=0) -# # pcm=ax1.contourf(theta, r, E, levs, norm=colors.PowerNorm(gamma=0.5,vmin=E.min(),vmax=E.max()), cmap=plt.cm.bone, zorder=0) - - -# ###--- Set Title -# # ax1.set_title(r"ratio $r=0.12$",pad=20) -# # ax1.set_title(r""+parameterName + ": " + str(parameterValue),pad=20) - - - - - - + ax.set_ylabel('') -# # Plot global minimizer -# ax1.plot(alpha_globalmin, abs(kappa_globalmin), -# markerfacecolor='blue', -# markeredgecolor='white', # marker edgecolor -# marker='s', # each marker will be rendered as a circle -# markersize=6, # marker size -# markeredgewidth=1, # marker edge width -# linewidth=0, -# zorder=3, -# alpha=1, # Change opacity -# label = r"$\kappa_{0^\circ}(m^{-1})$") - -# if (minimizer == 'positive'): -# horizontal_annotation_alignment = 'left' -# # kappa_sign_string = "" -# else : -# horizontal_annotation_alignment = 'right' -# # kappa_sign_string = "-" -# #--- annotate global minimizer - -# ax1.annotate( '('+ str(np.round(np.rad2deg(alpha_globalmin),decimals=1)) + '°' + ',' + str(np.round(kappa_globalmin,decimals=2))+ ')' , -# # ax1.annotate( r'$(\theta_{m}, \kappa_m)=$' + '('+ str(np.round(np.rad2deg(alphamin),decimals=1)) + '°' + ',' + str(np.round(kappamin,decimals=1))+ ')' , -# # xycoords='polar', -# # xy = (alpha_globalmin-0.15,abs(kappa_globalmin)+0.25), -# xy = (alpha_globalmin-0.10,abs(kappa_globalmin)+0.1), -# # xytext=(0.10, np.round(kappa_globalmin,decimals=2)-0.25), -# # textcoords='figure fraction', -# # xytext = (0.5,0.5), -# # xytext=(alpha_globalmin-0.25,abs(kappa_globalmin)+0.15), #Position of Text-annotation -# # rotation=np.rad2deg(alpha_globalmin), -# ha=horizontal_annotation_alignment, va="bottom", -# color='ivory', -# zorder=4, -# fontsize='8') - + # x_labelString = "$\" + ParameterName + "$" + # print('x_labelString:', x_labelString) + ax.set_xlabel(r"$\alpha$",labelpad=4) + if parameterName == "alpha": + ax.set_xlabel(r"$\alpha$",labelpad=4) + else : + ax.set_xlabel(r"$\theta$",labelpad=4) -# if plot_minimizerInOppositeCurvatureRegion: -# # Plot local minimizer -# # ax1.plot(alphamin_neg, kappamin_neg, -# ax1.plot(alpha_localmin, abs(kappa_localmin), # We need to take abs(kappa) since negative curvatures are still plotted with a positive kappa! -# markerfacecolor='green', -# markeredgecolor='white', # marker edgecolor -# marker='D', # each marker will be rendered as a circle -# markersize=6, # marker size -# markeredgewidth=1, # marker edge width -# linewidth=0, # line width -# zorder=3, -# alpha=1) - - -# #--- annotate local minimizer -# ax1.annotate( '('+ str(np.round(360-np.rad2deg(alpha_localmin),decimals=1)) + '°' + ',' + str(np.round(kappa_localmin,decimals=2))+ ')' , -# xy = (alpha_localmin,abs(kappa_localmin)), -# # xytext=(-1.6, np.round(kappa_localmin,decimals=2)+0.9), -# # xytext=(-1.6, np.round(kappa_localmin,decimals=2)), -# xytext=(alpha_localmin,abs(kappa_localmin)), -# color='ivory', -# # zorder=5, -# fontsize='8') -# # print('alphamin: ' , alphamin ) -# # print('kappamin: ' , kappamin ) -# # print('Global Minimizer (alphamin, kappamin):' , '('+ str(np.round(np.rad2deg(alphamin),decimals=1)) + ',' + str(np.round(kappamin,decimals=1))+ ')' ) -# print('Global Minimizer (alphamin, kappamin):' , '('+ str(np.round(np.rad2deg(alpha_globalmin),decimals=1)) + ',' + str(np.round(abs(kappa_globalmin),decimals=2))+ ')' ) -# # print('Local Minimizer (alphamin, kappamin):' , '('+ str(np.round(360-np.rad2deg(alphamin_neg),decimals=1)) + ',' + str(np.round(-kappamin_neg,decimals=1))+ ')' ) - + #TEST (Spline interpolation) + # Create cubic spline interpolation + interp_function = CubicSpline(inputValues, y) + + #create "continuous" values + x_continuous = np.linspace(min(inputValues), max(inputValues), 100) + y_interp = interp_function(x_continuous) + + + ax.scatter(inputValues, y, color=color, s=35, zorder=5, edgecolor='black') + ax.plot(x_continuous, y_interp, color=color, lw=2, label=label) + + ax.legend() + + # Set square aspect ratio + # ax.set_aspect(1/4) + + # Set axis limits with padding + # ax.set_xlim(min(inputValues)-0.01, max(inputValues)+0.01) + ax.set_xlim(min(inputValues)-0.05, max(inputValues)+0.05) + y_min, y_max = np.nanmin(y), np.nanmax(y) + # x_min, x_max = np.nanmin(y), np.nanmax(y) + ax.set_ylim(y_min - 0.1*(y_max - y_min), + y_max + 0.1*(y_max - y_min)) + + + + + # l1 = ax1.plot(inputValues,outputValues_q1 , + # label=r"$\widehat{Q}^h_{11}$" , + # markerfacecolor='orange', + # markeredgecolor='gray', # marker edgecolor + # marker='o', # each marker will be rendered as a circle + # markersize=5, # marker size + # markeredgewidth=1.0, # marker edge width) + # linewidth=1.5 + # ) + # l2 = ax1.plot(inputValues,outputValues_q2 , + # label=r"$\widehat{Q}^h_{22}$", + # # markerfacecolor='orange', + # markeredgecolor='gray', # marker edgecolor + # marker='s', # each marker will be rendered as a circle + # markersize=5, # marker size + # markeredgewidth=1.0, # marker edge width) + # linewidth=1.5 + # ) + # l3 = ax1.plot(inputValues,outputValues_q3 , + # label=r"$\widehat{Q}^h_{33}$", + # # markerfacecolor='orange', + # markeredgecolor='gray', # marker edgecolor + # marker='^', # each marker will be rendered as a circle + # markersize=5, # marker size + # markeredgewidth=1.0, # marker edge width) + # linewidth=1.5 + # ) + + # l3 = ax1.plot(inputValues,outputValues_q12 , + # label=r"$\widehat{Q}^h_{12}$", + # # markerfacecolor='orange', + # markeredgecolor='gray', # marker edgecolor + # marker='^', # each marker will be rendered as a circle + # markersize=5, # marker size + # markeredgewidth=1.0, # marker edge width) + # linewidth=1.5 + # ) -# print('Local Minimizer opposite curvature (alphamin, kappamin):' , '('+ str(np.round(360-np.rad2deg(alpha_localmin),decimals=1)) + ',' + str(np.round(abs(kappa_localmin),decimals=2))+ ')' ) -# # ax1.annotate(alphamin, (alphamin,kappamin)) + # legend = ax1.legend() -# # rotate radius axis labels. -# # ax1.set_rlabel_position(135) + # legend = ax1.legend(bbox_to_anchor=[0.75, 0.15],loc='lower center',borderaxespad=0.1,frameon=True,bbox_transform=fig.transFigure,handletextpad=0.1) + # frame = legend.get_frame() + # frame.set_edgecolor('black') -# colorbarticks=np.geomspace(0.00001,Emax,10) + ## PUT LEGEND ON BOTTOM /TOP + # legend = fig.legend([l1, l2, l3], # The line objects + # # labels=line_labels, # The labels for each line + # loc="lower left", # Position of legend + # # bbox_to_anchor=[1.0, 0.55], + # # bbox_to_anchor=[0.1, 1.0], # TOP + # # bbox_to_anchor=[0.1, -0.15], # BOTTOM + # bbox_to_anchor=[0.125, -0.15], # BOTTOM + # borderaxespad=0.15, # Small spacing around legend box + # frameon=True, + # ncol = 4 + # # title="Legend Title" # Title for the legend + # ) - -# cbar = plt.colorbar(pcm, ax=[ax1], extend='max', ticks=colorbarticks, pad=0.1, orientation="horizontal") -# cbar.ax.tick_params(labelsize=8) - -# anglelabel=["0°","45°", "90°", "135°","180°","135°","90°","45°"] -# ax1.set_xticks(np.array([.0,1/4,2/4,3/4,1,5/4,6/4,7/4])*np.pi) -# ax1.set_xticklabels(anglelabel) -# ax1.xaxis.grid(True, color='white') -# # ax1.set_yticks(np.array([1,2,3,4])) -# # ax1.set_yticklabels(["1","2","3","4"], zorder=20, color="white") -# ax1.set_yticks(np.array([1,2,3])) -# ax1.set_yticklabels(["1","2","3"], zorder=20, color="white") -# ax1.yaxis.set_tick_params(color='white') -# ax1.yaxis.grid(True, color='white', alpha=0.75) -# # Save Figure as pdf. -# fig.savefig(resultPath + '/energy_landscape_'+ parameterName + '_' +str(parameterValue) + '.png', dpi=100) - -# fig.set_size_inches(width, height) -# fig.savefig(resultPath + '/energy_landscape_'+ parameterName + '_' +str(parameterValue) + '.pdf') + # frame = legend.get_frame() + # # frame.set_color('white') + # frame.set_edgecolor('gray') + #Test:tight Layout + # plt.tight_layout() + # plt.tight_layout(pad=3, w_pad=4, h_pad=4) + fig.set_size_inches(width, height) + fig.savefig(resultPath_parent + '/ElasticModuliDependence_' + '_' + parameterName + '.pdf', dpi=1500) #dpi on +#---------------------------------------------------------------------------------------------------------------------- \ No newline at end of file diff --git a/testsuite/microstructure_PythonAddons.py b/testsuite/microstructure_PythonAddons.py index 1e1e993bc4e034707ec3e5bf45f844c91707eac3..ee512da09551728af31ac07600c137ff3a3f7227 100644 --- a/testsuite/microstructure_PythonAddons.py +++ b/testsuite/microstructure_PythonAddons.py @@ -8,11 +8,219 @@ import matplotlib.pyplot as plt import matplotlib.colors as colors from matplotlib import cm from matplotlib.colors import ListedColormap, LinearSegmentedColormap - +import shutil from scipy.optimize import minimize_scalar import importlib +import subprocess #--------------------------------------------------------------------------- + +def SolveMacroProblem(executable,parameterFile,gridLevels,parameterArray,conforming_DiscreteJacobian,resultPath,instrumentedPath,new_ParameterPath,pythonPath,INSTRUMENTED): + print('Solve Macro Problem.') + + """ + Run for each parameter in 'parameterArray' unless none is given + - Then run once. + """ + if len(parameterArray)>0: + print("Compute for a given parameterArray:", parameterArray) + + # ------ Loops through Parameters ----------- + for i in range(0, len(parameterArray)) if len(parameterArray)>0 else [1]: + for v in range(0,len(parameterArray[i][1])) if len(parameterArray)>0 else [1]: + + + if len(parameterArray)>0: + print("------------------") + print("New Parameter iteration") + print("------------------") + # print('[i,v]:', [i,v]) + print('parameterName:' , parameterArray[i][0]) + print('parameterValue: ', parameterArray[i][1][v]) + parameterName = parameterArray[i][0] + parameterValue = parameterArray[i][1][v] + + """" + remove decimal points from the parameterArray entries. + As the decimal points cause problems with the output name of dune-vtk. + """ + parameterValueString = (str(parameterArray[i][1][v])).replace('.', '') + # print('parameterValueString',parameterValueString) + + """ + UPDATE PARAMETERS + """ + # ModifyInputParameters(original_ParameterPath,new_ParameterPath,parameterName,parameterValue) + ModifyParameterFile(os.path.join(new_ParameterPath, parameterFile), parameterName , parameterValue) + print('Parameter modification done.') + + baseName = parameterFile + "_" + parameterArray[i][0]+ "_" + parameterValueString + + else : + print("------------------") + print("Empty parameterArray - run once for default parameter set.") + print("------------------") + parameterName = '' + parameterValue = '' + parameterValueString = '' + baseName = parameterFile + + processList = [] + for macroGridLevel in gridLevels: + + if len(parameterArray)>0: + LOGFILE = resultPath + "/" + parameterFile + "_macroGridLevel" + str(macroGridLevel) + "_" + parameterName + "_" + str(parameterValue) + ".log" + else: + LOGFILE = resultPath + "/" + parameterFile + "_macroGridLevel" + str(macroGridLevel) + ".log" + print('LOGFILE:', LOGFILE) + print('executable:', executable) + print('parameterFile:', parameterFile) + print('resultPath:', resultPath) + + # start_time = time.time() + p = subprocess.Popen(executable + " " + new_ParameterPath + " " + parameterFile + + " -macroGridLevel " + str(macroGridLevel) + + " -resultPath " + str(resultPath) + + " -baseName " + str(baseName) + + " -instrumentedPath " + str(instrumentedPath) + + " -conforming_DiscreteJacobian " + str(conforming_DiscreteJacobian) + + " -instrumented " + str(INSTRUMENTED) + # + " -" + parameterName + " " + str(parameterValue) + + " | tee " + LOGFILE, shell=True) + + p.wait() # wait + # print("--- %s seconds ---" % (time.time() - start_time)) + print('------FINISHED PROGRAM on macroGridLevel:' + str(macroGridLevel)) + processList.append(p) + # Wait for all simulation subprocesses before proceeding to the error measurement step + exit_codes = [p.wait() for p in processList] +# --------------------------------------------------------------------------------------------------------- + +def SolveMicroProblem(executable,parameterFile,gridLevels,parameterArray,resultPathBase,new_ParameterPath,pythonPath): + print('Solve Micro Problem.') + + """ + Run for each parameter in 'parameterArray' unless none is given + - Then run once. + """ + if len(parameterArray)>0: + print("Compute for a given parameterArray:", parameterArray) + + # ------ Loops through Parameters ----------- + for i in range(0, len(parameterArray)) if len(parameterArray)>0 else [1]: + for v in range(0,len(parameterArray[i][1])) if len(parameterArray)>0 else [1]: + + + if len(parameterArray)>0: + print("------------------") + print("New Parameter iteration") + print("------------------") + # print('[i,v]:', [i,v]) + print('parameterName:' , parameterArray[i][0]) + print('parameterValue: ', parameterArray[i][1][v]) + parameterName = parameterArray[i][0] + parameterValue = parameterArray[i][1][v] + + """" + remove decimal points from the parameterArray entries. + As the decimal points cause problems with the output name of dune-vtk. + """ + parameterValueString = (str(parameterArray[i][1][v])).replace('.', '') + # print('parameterValueString',parameterValueString) + + """ + UPDATE PARAMETERS + """ + # ModifyInputParameters(original_ParameterPath,new_ParameterPath,parameterName,parameterValue) + ModifyParameterFile(os.path.join(new_ParameterPath, parameterFile), parameterName , parameterValue) + print('Parameter modification done.') + + baseName = parameterFile + "_" + parameterArray[i][0]+ "_" + parameterValueString + + resultPath_parent = resultPathBase + "/" + parameterName + resultPath = resultPath_parent + "/value_" + str(np.round(parameterValue,3)) # round parameter value to three decimals. + + # Create output directories if non existent + os.makedirs(resultPath_parent , exist_ok=True) + os.makedirs(resultPath, exist_ok=True) + + else : + print("------------------") + print("Empty parameterArray - run once for default parameter set.") + print("------------------") + parameterName = '' + parameterValue = '' + parameterValueString = '' + baseName = parameterFile + resultPath = resultPathBase + + processList = [] + for microGridLevel in gridLevels: + + if len(parameterArray)>0: + LOGFILE = resultPath + "/" + parameterFile + "_microGridLevel" + str(microGridLevel) + "_" + parameterName + "_" + str(parameterValue) + ".log" + else: + LOGFILE = resultPath + "/" + parameterFile + "_microGridLevel" + str(microGridLevel) + ".log" + print('LOGFILE:', LOGFILE) + print('executable:', executable) + print('parameterFile:', parameterFile) + print('resultPath:', resultPath) + + # start_time = time.time() + p = subprocess.Popen(executable + " " + new_ParameterPath + " " + parameterFile + + " -microGridLevel " + str(microGridLevel) + + " -resultPath " + str(resultPath) + + " -baseName " + str(baseName) + # + " -" + parameterName + " " + str(parameterValue) + + " | tee " + LOGFILE, shell=True) + + p.wait() # wait + # print("--- %s seconds ---" % (time.time() - start_time)) + print('------FINISHED PROGRAM on microGridLevel:' + str(microGridLevel)) + processList.append(p) + # Wait for all simulation subprocesses before proceeding to the error measurement step + exit_codes = [p.wait() for p in processList] +# --------------------------------------------------------------------------------------------------------- + + +# """ +# This method creates a copy of a given (.py) parameter-file +# and overwrites the parameter values given by (parameterName,parameterValue) +# """ +# def ModifyInputParameters(inputParameterFilePath,outputParameterFilePath, parameterName, parameterValue): +# print(' --- Copy python parameter-file to new location. --- ') +# # Create writable output directory if it doesn't exist +# os.makedirs(outputParameterFilePath, exist_ok=True) + +# # Copy original file to writable location +# shutil.copy2(inputParameterFilePath, outputParameterFilePath + '.py') + +# # Update parameters. +# ModifyParameterFile(outputParameterFilePath, parameterName , parameterValue) + + +""" + This method creates a copy of a given (.py) parameter-file + * Can be used to modify a copy of the parameter-file on + * Read-only file systems. +""" +def CreateParameterCopy(inputParameterFilePath,outputParameterFilePath,parameterFile): + print(' --- Copy python parameter-file to new location. --- ') + # Create writable output directory if it doesn't exist + # ParentPath = os.path.abspath(os.path.join(outputParameterFilePath, os.pardir)) + # os.makedirs(ParentPath, exist_ok=True) + os.makedirs(outputParameterFilePath, exist_ok=True) + + # Copy original file to writable location + shutil.copy2(inputParameterFilePath, os.path.join(outputParameterFilePath, parameterFile) + '.py') + + print('Copied Parameter-File to location:', os.path.join(outputParameterFilePath, parameterFile) + '.py') + + + + + + def xytokappaalpha(x,y): """ Convert 2-dimensional cartesian coordinates [x,y] @@ -31,7 +239,7 @@ def ReadEffectiveQuantities(QFilePath, BFilePath): (default): '../outputs/Qmatrix.txt' , '../outputs/Bmatrix.txt' Note: These correspond to the coefficients of Qhom,Beff - so Qhom is a 3x3-matrix while Beff is a Vector os size 3 + so Qhom is a 3x3-matrix while Beff is a Vector of size 3 """ # -- Read Matrix Qhom X = [] @@ -55,14 +263,14 @@ def ReadEffectiveQuantities(QFilePath, BFilePath): -def SetParameterMaterialFunction(parameterFile, parameterName, parameterValue): +def ModifyParameterFile(parameterFile, parameterName, parameterValue): """" Overwrite parameter 'parameterName' in the 'parameterFile' with new value: 'parameterValue. """ with open(parameterFile +'.py', 'r') as file: filedata = file.read() - filedata = re.sub('(?m)'+str(parameterName)+'\s?=.*',str(parameterName)+' = '+str(parameterValue),filedata) + filedata = re.sub('(?m)'+str(parameterName)+r'\s?=.*',str(parameterName)+' = '+str(parameterValue),filedata) f = open(parameterFile +'.py','w') f.write(filedata) f.close() @@ -218,6 +426,7 @@ def createEnergyLandscapeFigure(r,theta,E,resultPath , parameterName='',paramete # Set correct Figure size (width/height) to make the figure fit the text without scaling. textwidth = 6.26894 # textwidth in inch width = textwidth * 0.5 + # width = textwidth * 0.33 height = textwidth/1.618 # The golden ratio. #Get Minimzers from sampled energy values. @@ -282,7 +491,7 @@ def createEnergyLandscapeFigure(r,theta,E,resultPath , parameterName='',paramete """ if plotContourLines: contour_levs = np.linspace(0.0001,energyDifference*1.0,6) # contour only from zero (Minimizer) to energyDifference between global/local Minimizer. - contour_levs = np.linspace(0.0001,1,3) # contour only from zero (Minimizer) to energyDifference between global/local Minimizer. + contour_levs = np.linspace(0.0001,1,6) # contour only from zero (Minimizer) to energyDifference between global/local Minimizer. # contour_levs = np.linspace(0.0001,energyDifference*1.0,2) # contour only from zero (Minimizer) to energyDifference between global/local Minimizer. print('contour_levs:', contour_levs) contour_levs = np.sort(contour_levs, axis=None) @@ -397,5 +606,5 @@ def createEnergyLandscapeFigure(r,theta,E,resultPath , parameterName='',paramete # fig.savefig(resultPath + '/energy_landscape_'+ parameterName + '_' +str(parameterValue) + '.png', dpi=100) # Save Figure as pdf. fig.set_size_inches(width, height) - fig.savefig(resultPath + '/energy_landscape_'+ parameterName + '_' +str(parameterValue) + '.pdf', dpi=1500) #dpi on + fig.savefig(resultPath + '/energy_landscape_'+ parameterName + '_' +str(np.round(parameterValue,3)) + '.pdf', dpi=1500) #dpi on return \ No newline at end of file diff --git a/testsuite/runMacroExperiments.sh b/testsuite/runMacroExperiments.sh new file mode 100755 index 0000000000000000000000000000000000000000..0e6bef51c3c2a8e53899bd1805a34f1c4a2085e0 --- /dev/null +++ b/testsuite/runMacroExperiments.sh @@ -0,0 +1,17 @@ +echo "run macro experiments :" + +# echo "first arg: $1" +# echo "second arg: $2" +# a=$(($1)) +# b=$(($2)) + +# echo "a: $a" +# echo "b: $b" +# echo "$(seq $1 $2)" + +for i in $(seq $1 $2); + do python3 macro-problem-testsuite.py 0 $i; + +done + # do echo "i: $i"; done + diff --git a/testsuite/runMicroExperiments.sh b/testsuite/runMicroExperiments.sh new file mode 100755 index 0000000000000000000000000000000000000000..ef32a28cfd6fad738f5e3cf79d6eb0b04179cc5b --- /dev/null +++ b/testsuite/runMicroExperiments.sh @@ -0,0 +1,17 @@ +echo "run micro experiments :" + +# echo "first arg: $1" +# echo "second arg: $2" +# a=$(($1)) +# b=$(($2)) + +# echo "a: $a" +# echo "b: $b" +# echo "sequence: $(seq $1 $2)" + +for i in $(seq $1 $2); + do python3 microstructure-testsuite.py 0 $i; + +done + # do echo "i: $i"; done +