Figure 8¶

Imports¶

In [ ]:
import dolfin
import numpy

import dolfin_mech                    as dmech
import matplotlib.pyplot              as plt
import micro_poro_structure_generator as gen

Loading¶

In [ ]:
qois_filename     = "Fig8-qois.dat"
res_basename      = "Fig8"
seeds_filename    = "ch8.dat"
mesh_filebasename = "ch8-mesh"


load_params = {}
load_params["pf"] = 4
load_params["sigma_bar_00"] = 0.0
load_params["sigma_bar_11"] = 0.0
load_params["sigma_bar_01"] = 0.0
load_params["sigma_bar_10"] = 0.0

Printing function¶

In [ ]:
def graph_printer(thickness, params, linestyle):
    
    domain_y = 1
    domain_x = domain_y * numpy.sqrt(3)/1.5/2
    # thickness = 0.12

    gen.generate_seeds_semi_regular(
        DoI = 0.,
        row = 1,
        domain_y = domain_y,
        seeds_filename = seeds_filename)
    phi = gen.generate_mesh_2D_rectangle_w_voronoi_inclusions(
        mesh_filename = mesh_filebasename,
        seeds_filename = seeds_filename,
        h = thickness,
        lcar = thickness/5,
        domain_x = domain_x,
        domain_y = domain_y,
        shift_y = 0.,
        remove_seeds = True)

    mesh = dolfin.Mesh()
    dolfin.XDMFFile(mesh_filebasename+".xdmf").read(mesh)
    dV = dolfin.Measure("dx",domain=mesh)

    coord = mesh.coordinates()
    xmax = max(coord[:,0]); xmin = min(coord[:,0])
    ymax = max(coord[:,1]); ymin = min(coord[:,1])

    V = (xmax - xmin)*(ymax - ymin)
    VS0 = dolfin.assemble(dolfin.Constant(1) * dV)
    Vf0 = V - VS0

    mat_params = {"model":"exponentialneoHookean", "parameters":{"beta1":params[0], "beta2":params[1], "beta3":params[2], "beta4":100*params[0], "alpha":params[3]}}  
    dmech.run_HollowBox_MicroPoroHyperelasticity(
        dim=2,
        mesh=mesh,
        mat_params=mat_params,
        load_params=load_params,
        step_params={"Deltat":1., "dt_ini":0.1, "dt_min":0.001, "dt_max":0.005},
        res_basename=res_basename,
        write_qois_limited_precision=False,
        verbose=1
    )

    qois_vals = numpy.loadtxt(qois_filename)
    qois_name_list = open(qois_filename).readline().split()
    pf_lst = qois_vals[:, qois_name_list.index("p_f") - 1]*10.20
    vf_lst = qois_vals[:, qois_name_list.index("vf") - 1]

    for i in range(1, len(vf_lst)):
        slope = (vf_lst[i] - vf_lst[i - 1])/(pf_lst[i] - pf_lst[i - 1])
        if slope < 0.0005:
            break

    vf_asym = vf_lst[i]
    vf_lst = [vf_/vf_asym *100 for vf_ in vf_lst]

    print("pf_asym: {:.2f} cmH2O".format(pf_lst[i]))

    

    plt.plot(pf_lst, vf_lst, '#084594', label='$\Phi_{f0} = '+str('{:.2f}'.format(phi * 100))+'\%$', linestyle=linestyle)

    plt.xlim(0, 25)
    plt.legend(loc = 'lower right', fontsize=12, shadow=True)

Running the printing function for different porosities¶

In [ ]:
plt.rc('xtick' , labelsize=14)
plt.rc('ytick' , labelsize=14)
plt.rc('legend', fontsize=12)
plt.xlabel(r'$p_f~(cm H_2O)$'  , fontsize=16)
plt.ylabel(r'$Volume~(\% TLC)$', fontsize=16)

params = [0.08855929243285596, 0.011039510924095856, 0.6281487879627474, 3.409513378002055]
graph_printer(0.18, params, 'dashdot')
graph_printer(0.12, params, None)
graph_printer(0.09, params, 'dashed')
plt.savefig('Porosity_compare.pdf',bbox_inches='tight')
plt.savefig("Porosity_compare.tif", format="tiff", dpi=300, bbox_inches="tight")
plt.show()