print('\nWriting predicted eigenvec to OpenFOAM format...')
header_tensor = headerTensorOF(time, fieldname, len(mask))
fh = open(result_dir + fieldname, 'w')
fh.write(header_tensor)
np.savetxt(fh,
           eigvec_pred_all,
           fmt="(%.10f %.10f %.10f %.10f %.10f %.10f %.10f %.10f %.10f)")
fh.write(footer_tensor)
fh.close()
print('\nFinished writing predicted eigenvec to OpenFOAM format')
del eigvec_pred_all
"""
Calculate Barycentric Map
"""
t0 = t.time()
xy_bary, rgb_bary = getBarycentricMapData(eigval_test)
del eigval_test
xy_bary_pred, rgb_bary_pred = getBarycentricMapData(eigval_pred)
del eigvec_pred
t1 = t.time()
print('\nFinished getting Barycentric map data in {:.4f} s'.format(t1 - t0))

# Limit RGB values to max of 1
rgb_bary[rgb_bary > 1.] = 1.
rgb_bary_pred[rgb_bary_pred > 1.] = 1.
"""
Write Barycentric RGB back to OpenFOAM File
"""
print(
    '\nAssigning true RGB values of confined domain to the whole domain, with out-of confinement RGB being (0, 0, 0)...'
)
    # anomaly_idx_test4 = outliers4['anomaly_idx_test']
    # anomaly_idx_train5 = outliers5['anomalyIdxTrains']
    # anomaly_idx_test5 = outliers5['anomaly_idx_test']
    """
    Postprocess Machine Learning Predictions
    """
    t0 = t.time()
    _, eigval_test, _ = processReynoldsStress(y_test,
                                              make_anisotropic=False,
                                              realization_iter=0)
    # _, eigval_train, _ = processReynoldsStress(y_train, make_anisotropic=False, realization_iter=0)
    t1 = t.time()
    print('\nFinished processing Reynolds stress in {:.4f} s'.format(t1 - t0))

    t0 = t.time()
    xy_bary_test, rgb_bary_test = getBarycentricMapData(eigval_test)
    # Limit RGB value to [0, 1]
    rgb_bary_test[rgb_bary_test > 1.] = 1.
    # xy_bary_train, rgb_bary_train = getBarycentricMapData(eigval_train)
    rgb_bary_test_out = rgb_bary_test.copy()
    rgb_bary_test_out[anomaly_idx_test] = gray
    # rgb_bary_train_out = rgb_bary_train.copy()
    # rgb_bary_train_out[anomaly_idx_train], rgb_bary_train_out[anomaly_idx_train2], rgb_bary_train_out[anomaly_idx_train3], \
    # rgb_bary_train_out[anomaly_idx_train4], rgb_bary_train_out[anomaly_idx_train5] \
    #     = (0.4,)*3, (0.3,)*3, (0.2,)*3, (0.1,)*3, (0,)*3
    t1 = t.time()
    print('\nFinished getting Barycentric map data in {:.4f} s'.format(t1 -
                                                                       t0))

    t0 = t.time()
    ccx_test_mesh, ccy_test_mesh, _, rgb_bary_test_mesh = interpolateGridData(
Esempio n. 3
0
"""
Postprocess Machine Learning Predictions
"""
t0 = t.time()
# _, eigval_test, _ = processReynoldsStress(y_test, make_anisotropic=False, realization_iter=0)
# _, eigval_train, _ = processReynoldsStress(y_train, make_anisotropic=False, realization_iter=0)
y_pred_test3, eigval_pred_test, _ = processReynoldsStress(y_pred_test, make_anisotropic=False, realization_iter=realize_iter)
y_pred_train3, eigval_pred_train, _ = processReynoldsStress(y_pred_train, make_anisotropic=False, realization_iter=realize_iter)
t1 = t.time()
print('\nFinished processing Reynolds stress in {:.4f} s'.format(t1 - t0))

t0 = t.time()
# xy_bary_test, rgb_bary_test = getBarycentricMapData(eigval_test)
# xy_bary_train, rgb_bary_train = getBarycentricMapData(eigval_train)
xy_bary_pred_test, rgb_bary_pred_test = getBarycentricMapData(eigval_pred_test)
xy_bary_pred_train, rgb_bary_pred_train = getBarycentricMapData(eigval_pred_train)
t1 = t.time()
print('\nFinished getting Barycentric map data in {:.4f} s'.format(t1 - t0))

t0 = t.time()
# ccx_test_mesh, ccy_test_mesh, _, rgb_bary_test_mesh = interpolateGridData(ccx_test, ccy_test, rgb_bary_test, mesh_target=uniform_mesh_size, interp=interp_method, fill_val=0.3)
# ccx_train_mesh, ccy_train_mesh, _, rgb_bary_train_mesh = interpolateGridData(ccx_train, ccy_train, rgb_bary_train, mesh_target=uniform_mesh_size, interp=interp_method, fill_val=0.3)
ccx_test_mesh, ccy_test_mesh, _, rgb_bary_pred_test_mesh = interpolateGridData(ccx_test, ccy_test, rgb_bary_pred_test, mesh_target=uniform_mesh_size, interp=interp_method, fill_val=0.3)
ccx_train_mesh, ccy_train_mesh, _, rgb_bary_pred_train_mesh = interpolateGridData(ccx_train, ccy_train, rgb_bary_pred_train, mesh_target=uniform_mesh_size, interp=interp_method, fill_val=0.3)
t1 = t.time()
print('\nFinished interpolating mesh data for barycentric map in {:.4f} s'.format(t1 - t0))

t0 = t.time()
_, _, _, y_pred_test_mesh = interpolateGridData(ccx_test, ccy_test, y_pred_test, mesh_target=uniform_mesh_size, interp=interp_method, fill_val=0.3)
_, _, _, y_pred_train_mesh = interpolateGridData(ccx_train, ccy_train, y_pred_train, mesh_target=uniform_mesh_size, interp=interp_method, fill_val=0.3)
Esempio n. 4
0
    t0 = t.time()
    _, eigval_test, _ = processReynoldsStress(y_test,
                                              make_anisotropic=False,
                                              realization_iter=0,
                                              to_old_grid_shape=False)
    # If filter was True, eigval_pred_test is a mesh grid
    _, eigval_pred_test, _ = processReynoldsStress(y_pred_test,
                                                   make_anisotropic=False,
                                                   realization_iter=0,
                                                   to_old_grid_shape=False)
    t1 = t.time()
    print('\nFinished processing Reynolds stress in {:.4f} s'.format(t1 - t0))

    t0 = t.time()
    xy_bary_test, rgb_bary_test = getBarycentricMapData(eigval_test)
    # If filter was True, both xy_bary_pred_test and rgb_bary_pred_test are mesh grids
    xy_bary_pred_test, rgb_bary_pred_test = getBarycentricMapData(
        eigval_pred_test, to_old_grid_shape=True)
    t1 = t.time()
    print('\nFinished getting Barycentric map data in {:.4f} s'.format(t1 -
                                                                       t0))

    t0 = t.time()
    # Interpolate to desired uniform mesh
    if 'bary' in plot_property or '*' in plot_property:
        ccx_test_mesh, ccy_test_mesh, ccz_test_mesh, rgb_pred_test_mesh = case_slice.interpolateDecomposedSliceData_Fast(
            ccx_test,
            ccy_test,
            ccz_test,
            rgb_bary_pred_test,
    """
    Process Uninterpolated Anisotropy Tensor
    """
    # Retrieve Rij of this slice
    rij = case.slices_val[slicename]
    rij = expandSymmetricTensor(rij).reshape((-1, 3, 3))
    # Rotate Rij if requested, rotateData only accept full matrix form
    if rotate_data: rij = rotateData(rij, anglez=rot_z)
    rij = contractSymmetricTensor(rij)
    rij_tmp = rij.copy()
    # Get bij from Rij and its corresponding eigenval and eigenvec
    bij, eig_val, eig_vec = processReynoldsStress(rij_tmp, realization_iter=0, make_anisotropic=make_anisotropic, to_old_grid_shape=False)
    # bij was (n_samples, 3, 3) contract it
    bij = contractSymmetricTensor(bij)
    # Get barycentric map coor and normalized RGB
    xy_bary, rgb = getBarycentricMapData(eig_val, c_offset=c_offset, c_exp=c_exp)


    """
    Interpolation
    """
    # 1st coor is always x not matter vertical or horizontal slice
    # 2nd coor is y if horizontal slice otherwise z, take appropriate confinebox limit
    coor2_lim = confinebox[i][2:4] if case.slices_orient[slicename] == 'horizontal' else confinebox[i][4:]
    # Selective interpolation upon request
    if 'bary' in plot_property or '*' in plot_property:
        x_mesh, y_mesh, z_mesh, rgb_mesh = case.interpolateDecomposedSliceData_Fast(case.slices_coor[slicename][:, 0], case.slices_coor[slicename][:, 1], case.slices_coor[slicename][:, 2], rgb,
                                                                                    slice_orient=case.slices_orient[slicename], target_meshsize=target_meshsize,
                                                                                    # No interpolation as it gives undefined colors in my barycentric map
                                                                                    interp_method='nearest', confinebox=confinebox[i])
        if plot_type in ('3D', '*'): list_rgb.append(rgb_mesh)