A computer-implemented method for simulating a fracture of a downhole fracture network, the method comprising: generating the fracture using a triangle mesh formed by a plurality of triangles, each triangle having a triangle size, wherein the triangle size is based on a size of the fracture so that the triangle size is smaller for smaller fractures than for larger fractures of the downhole fracture network, the fracture having an X, Y, and Z direction, wherein the Z direction is perpendicular to an X-Y plane of the fracture; and forming an undulating surface on the fracture using a Z value in the Z direction by: determining vertices of the triangles which form a fracture surface area; assigning white noise to each vertex, the white noise being an initial Z value; averaging the initial Z values of adjacent vertices to determine an averaged Z value, wherein the adjacent vertices are comprised of a central vertex and a plurality of surrounding neighbor vertices; and assigning the averaged Z value to the central vertex, wherein the averaging is performed for each vertex forming the fracture surface area for a defined number of iterations, wherein the number of iterations is given by a maximum number of iterations multiplied by a smoothness factor, wherein the maximum number of iterations is given by a maximum length of the fracture divided by the triangle size. generating the fracture using a triangle mesh formed by a plurality of triangles, each triangle having a triangle size, wherein the triangle size is based on a size of the fracture so that the triangle size is smaller for smaller fractures than for larger fractures of the downhole fracture network, the fracture having an X, Y, and Z direction, wherein the Z direction is perpendicular to an X-Y plane of the fracture; and forming an undulating surface on the fracture using a Z value in the Z direction by: determining vertices of the triangles which form a fracture surface area; assigning white noise to each vertex, the white noise being an initial Z value; averaging the initial Z values of adjacent vertices to determine an averaged Z value, wherein the adjacent vertices are comprised of a central vertex and a plurality of surrounding neighbor vertices; and assigning the averaged Z value to the central vertex, wherein the averaging is performed for each vertex forming the fracture surface area for a defined number of iterations, wherein the number of iterations is given by a maximum number of iterations multiplied by a smoothness factor, wherein the maximum number of iterations is given by a maximum length of the fracture divided by the triangle size. determining vertices of the triangles which form a fracture surface area; assigning white noise to each vertex, the white noise being an initial Z value; averaging the initial Z values of adjacent vertices to determine an averaged Z value, wherein the adjacent vertices are comprised of a central vertex and a plurality of surrounding neighbor vertices; and assigning the averaged Z value to the central vertex, wherein the averaging is performed for each vertex forming the fracture surface area for a defined number of iterations, wherein the number of iterations is given by a maximum number of iterations multiplied by a smoothness factor, wherein the maximum number of iterations is given by a maximum length of the fracture divided by the triangle size.