In order to create the data file for a secondary simulation (Monte Carlo), I would like to output information about the surface facets of my 3D mesh into a txt file. Specifically, I would like to create a four column file with the following:
- center of mass coordinate (x,y,z) of the surface element, rather than the coordinates of its corresponding vertices.
- normal vector coordinates of the surface element itself, rather than the normal to the Facet edges that is output from using
- average value of my solution,
Ton the given surface element.
- area of the corresponding surface element
I have seen that there is an inbuilt function called
FacetArea but I am unsure how this can be used to list the corresponding values of the surface area. How can I accomplish this?
The code I currently have to output the spatial coordinates, values of
T and the normal vectors of the vertices as output from
FacetNormal(mesh) is given below:
from dolfin import * import numpy as np from mpi4py import MPI mesh = UnitCubeMesh(1,1,1) Space = FunctionSpace(mesh,'P', 1) Temperature = project(Expression("x+0.1*x + 0.1*x", degree=3), Space) x_Space = Space.tabulate_dof_coordinates().reshape((-1,mesh.geometry().dim())) T_values = abs(Temperature.vector().get_local().reshape((-1,1))) n = FacetNormal(mesh) V = VectorFunctionSpace(mesh, "CG", 1) u = TrialFunction(V) v = TestFunction(V) a = inner(u,v)*ds l = inner(n, v)*ds A = assemble(a, keep_diagonal=True) L = assemble(l) num_dofs_per_component = int(V.dim()/V.num_sub_spaces()) num_sub_spaces = V.num_sub_spaces() vector = np.zeros((num_sub_spaces, num_dofs_per_component)) A.ident_zeros() nh = Function(V) solve(A, nh.vector(), L) x = V.sub(0).collapse().tabulate_dof_coordinates() for i in range(num_sub_spaces): vector[i] = nh.sub(i, deepcopy=True).vector().get_local() vector = vector.T for coord, vec, temp in zip(x_Space, vector, T_values): print(coord, vec, temp)
Thank you in advance