Beispiel #1
0
    vol_frac_WC_1 = phase_volumes_1[1]/np.float(M**3)
    vol_frac_Co_1 = 1 - vol_frac_WC_1
    mass_frac_WC_1 = ccb.mass_fraction(vol_frac_WC_1)
    d_eq_1 = ccb.volume_to_eq_d(grain_volumes_1*delta_x**3)
    
    sum_gb_voxels_1 = np.sum(gb_voxels_1)
    contiguity_1 = sum_gb_voxels_1 / np.float(sum_gb_voxels_1 + np.sum(interface_voxels_1))
    
    ccb.write_hdf5('testfile_1.hdf5', 3*[M], 3*[delta_x], trunc_triangles, grain_ids_1, phases_1, good_voxels_1, euler_angles_1, surface_voxels_1, gb_voxels_1, interface_voxels_1, overlaps_0)
    
# Make new copies to play with the bounded monte carlo potts simulation.
grain_ids_2 = grain_ids_0.copy()
gb_voxels_2 = gb_voxels_0.copy()

start_time = time.time()
ccb_c.make_mcp_bound(M, grain_ids_2, gb_voxels_2, voxel_indices_0, mc_steps, kBT)
print np.str(time.time() - start_time) + " seconds"
    
surface_voxels_2, gb_voxels_2_1, interface_voxels_2 = ccb_c.calc_surface_prop(M, grain_ids_2)
phases_2, good_voxels_2, euler_angles_2, phase_volumes_2, grain_volumes_2 = ccb_c.calc_grain_prop(M, grain_ids_2, trunc_triangles)
    
vol_frac_WC_2 = phase_volumes_2[1]/np.float(M**3)
vol_frac_Co_2 = 1 - vol_frac_WC_2
mass_frac_WC_2 = ccb.mass_fraction(vol_frac_WC_2)
d_eq_2 = ccb.volume_to_eq_d(grain_volumes_2*delta_x**3)
    
sum_gb_voxels_2 = np.sum(gb_voxels_2)
contiguity_2 = sum_gb_voxels_2 / np.float(sum_gb_voxels_2 + np.sum(interface_voxels_2))

ccb.write_hdf5('testfile_2.hdf5', 3*[M], 3*[delta_x], trunc_triangles, grain_ids_2, phases_2, good_voxels_2, euler_angles_2, surface_voxels_2, gb_voxels_2, interface_voxels_2, overlaps_0)
ccb.write_oofem('testfile_2', 3*[M], 3*[delta_x], trunc_triangles, grain_ids_2)
Beispiel #2
0
# Compute actual volume fraction:
print("Generated volume fraction of Co (before tweaks):", vol_frac_Co_0)
print("Contiguity (before tweaks)", contiguity_0)

# Make new copies to play with the monte carlo potts simulation.
grain_ids_2 = grain_ids_0.copy()
gb_voxels_2 = gb_voxels_0.copy()

if mc_steps > 0:
    start_time = time.time()
    # Do Potts on coarse grid first for an improved initial guess.
    M_coarseMC = M//2
    grain_ids_coarse, overlaps_coarse, voxel_indices_coarse = ccb_c.populate_voxels(M_coarseMC, L, trunc_triangles, 0, M_coarseMC,  1.0)
    surface_voxels_coarse, gb_voxels_coarse, interface_voxels_coarse = ccb_c.calc_surface_prop(M_coarseMC, grain_ids_coarse)
    ccb_c.make_mcp_bound(M_coarseMC, grain_ids_coarse, gb_voxels_coarse, overlaps_coarse, voxel_indices_coarse, np.int(mc_steps*M_coarseMC**4), tau)
    #
    # Copy over that solution to the overlap regions of the fine grid as a starting point
    M2 = M**2
    i = np.nonzero(overlaps_0)[0]
    iz = i // M2
    iy = (i - iz*M2) // M
    ix = i - iz*M2 - iy*M
    cix = ix * M_coarseMC // M
    ciy = iy * M_coarseMC // M
    ciz = iz * M_coarseMC // M
    ci = cix + ciy*M_coarseMC + ciz*M_coarseMC**2
    gid = grain_ids_coarse[ci]
    # Could use a Cython implementation for efficiency.
    for ii, g in zip(i, gid):
        if g != grain_ids_2[ii] and np.searchsorted(voxel_indices_0[g-2], ii) < len(voxel_indices_0[g-2]):