from ngsolve import *


def Create2DMesh(hmax, thicknesses, name=""):

    geo = unit_square
    ngmsh = geo.GenerateMesh(maxh=hmax)
    ngmsh.BoundaryLayer2(domain=1, 
                         thicknesses=thicknesses, 
                         make_new_domain=False,
                         boundaries=[2, 3])

    ngmsh.Split2Tets()
    ngmsh.Export(name+".stl", "STL Format")
    return Mesh(ngmsh)


if __name__ == '__main__':


    for i in range(5):

        mesh_name = f"Mesh_0{i}"
        hmax = 0.5*2.0**(-i)

        # Set layer parameters
        layer_thickness = 0.03
        n_layers = 2*(i+1) + 1
        growth_ratio = 1.1
        h0 = layer_thickness*(1 - growth_ratio)/(1 - growth_ratio**n_layers)
        thicknesses = [h0*growth_ratio**j for j in range(n_layers)]

        mesh = Create2DMesh(hmax=hmax, thicknesses=thicknesses, name=mesh_name)


    pass