Beispiel #1
0
"""
Computes, plots, and saves the 2D vorticity field from a cuIBM simulation at
saved time-steps.
"""

from snake.cuibm.simulation import CuIBMSimulation


simulation = CuIBMSimulation()
simulation.read_grid()

for time_step in simulation.get_time_steps():
  simulation.read_fields('vorticity', time_step)
  simulation.plot_contour('vorticity',
                          field_range=(-5.0, 5.0, 101),
                          view=(-1.0, -5.0, 15.0, 5.0),
                          cmap='viridis',
                          style='seaborn-dark',
                          width=8.0)
Beispiel #2
0
"""
Plots the vorticity field of a 2D cuIBM simulation.
"""

import os
from snake.cuibm.simulation import CuIBMSimulation
from snake.body import Body

simulation = CuIBMSimulation()
simulation.read_grid()

for time_step in simulation.get_time_steps():
    all_bodies = Body(
        file_path=os.path.join('{:0>7}'.format(time_step), 'bodies'))
    n_total = all_bodies.x.size
    bodies = [Body(), Body()]
    bodies[0].x = all_bodies.x[:n_total // 2]
    bodies[0].y = all_bodies.y[:n_total // 2]
    bodies[1].x = all_bodies.x[n_total // 2:]
    bodies[1].y = all_bodies.y[n_total // 2:]
    simulation.read_fields('vorticity', time_step)
    simulation.plot_contour('vorticity',
                            field_range=(-2.0, 2.0, 40),
                            filled_contour=True,
                            bodies=bodies,
                            view=(-3.0, -5.0, 15.0, 5.0),
                            style='seaborn-dark',
                            cmap='viridis',
                            width=8.0)
Beispiel #3
0
if snake.__version__ != '0.1.2':
    warnings.warn('The figures were originally created with snake-0.1.2, ' +
                  'you are using snake-{}'.format(snake.__version__))

atol_min, atol_max = 5, 16
time_step = 1500

main_directory = os.path.dirname(__file__)

reference_directory = os.path.join(main_directory, 'atol16')
reference = CuIBMSimulation(directory=reference_directory,
                            description='atol=1.0E-16')
reference.read_forces()
fx_reference = reference.forces[0].values[-1]
fy_reference = reference.forces[1].values[-1]
reference.read_grid()
p_reference = reference.read_pressure(time_step)
qx_reference, qy_reference = reference.read_fluxes(time_step)

fx_errors, fy_errors = [], []
p_errors = []
qx_errors, qy_errors = [], []

for atol in range(atol_min, atol_max):
    directory = os.path.join(main_directory, 'atol{}'.format(atol))
    simu = CuIBMSimulation(directory=directory,
                           description='1.0E-{}'.format(atol))
    simu.read_forces()
    fx = simu.forces[0].values[-1]
    fy = simu.forces[1].values[-1]
    simu.read_grid()
  warnings.warn('The figures were originally created with snake-0.1.2, '+
                'you are using snake-{}'.format(snake.__version__))

atol_min, atol_max = 5, 16
time_step = 1500

main_directory = os.path.dirname(__file__)

reference_directory = os.path.join(main_directory,
                                   'atol16')
reference = CuIBMSimulation(directory=reference_directory,
                            description='atol=1.0E-16')
reference.read_forces()
fx_reference = reference.forces[0].values[-1]
fy_reference = reference.forces[1].values[-1]
reference.read_grid()
p_reference = reference.read_pressure(time_step)
qx_reference, qy_reference = reference.read_fluxes(time_step)

fx_errors, fy_errors = [], []
p_errors = []
qx_errors, qy_errors = [], []

for atol in range(atol_min, atol_max):
  directory = os.path.join(main_directory,
                           'atol{}'.format(atol))
  simu = CuIBMSimulation(directory=directory,
                         description='1.0E-{}'.format(atol))
  simu.read_forces()
  fx = simu.forces[0].values[-1]
  fy = simu.forces[1].values[-1]
"""

import os

from matplotlib import pyplot

from snake.cuibm.simulation import CuIBMSimulation
from snake.solutions.ghiaEtAl1982 import GhiaEtAl1982


directory = os.getcwd()

# Reads the velocity fields from files.
simulation = CuIBMSimulation(directory=directory,
                             description='cuIBM')
simulation.read_grid(file_path=os.path.join(directory, 'grid'))
time_step = simulation.get_time_steps()[-1]
simulation.read_fields(['x-velocity', 'y-velocity'], time_step)
# Grabs the mid-cavity velocity values.
y, u = simulation.fields['x-velocity'].get_vertical_gridline_values(0.5)
x, v = simulation.fields['y-velocity'].get_horizontal_gridline_values(0.5)

# Gets the centerline velocities at Re=100 reported in Ghia et al. (1982).
file_path = os.path.join(os.environ['CUIBM_DIR'],
                         'data',
                         'ghia_et_al_1982_lid_driven_cavity.dat')
ghia = GhiaEtAl1982(file_path=file_path, Re=100)

# Plots the instantaneous drag coefficients.
images_directory = os.path.join(directory, 'images')
if not os.path.isdir(images_directory):
final_time_steps = [2000, 1500, 1250]
refinement_ratio = 2.0

fx, fy = [], []
p = []
qx, qy = [], []

main_directory = os.path.dirname(__file__)

for time_increment, final_time_step in zip(time_increments, final_time_steps):
    directory = os.path.join(main_directory, time_increment.replace('=', ''))
    simu = CuIBMSimulation(directory=directory, description=time_increment)
    simu.read_forces()
    fx.append(simu.forces[0].values[-1])
    fy.append(simu.forces[1].values[-1])
    simu.read_grid()
    p_simu = simu.read_pressure(final_time_step)
    p.append(p_simu.values)
    qx_simu, qy_simu = simu.read_fluxes(final_time_step)
    qx.append(qx_simu.values)
    qy.append(qy_simu.values)

file_path = os.path.join(os.path.dirname(__file__), 'temporalConvergence.txt')
with open(file_path, 'w') as outfile:
    outfile.write('\n* Drag force:\n')
    outfile.write(
        'Value and relative difference with the reference value (smallest dt)\n'
    )
    outfile.write('\t{}: {}\n'.format(time_increments[0], fx[0]))
    for i in (1, 2):
        outfile.write('\t{}: {} ({}%)\n'.format(
Beispiel #7
0
  and a multigrid method.
  Journal of computational physics, 48(3), 387-411.
"""

import os

from matplotlib import pyplot

from snake.cuibm.simulation import CuIBMSimulation
from snake.solutions.ghiaEtAl1982 import GhiaEtAl1982

directory = os.getcwd()

# Reads the velocity fields from files.
simulation = CuIBMSimulation(directory=directory, description='cuIBM')
simulation.read_grid(file_path=os.path.join(directory, 'grid'))
time_step = simulation.get_time_steps()[-1]
simulation.read_fields(['x-velocity', 'y-velocity'], time_step)
# Grabs the mid-cavity velocity values.
y, u = simulation.fields['x-velocity'].get_vertical_gridline_values(0.5)
x, v = simulation.fields['y-velocity'].get_horizontal_gridline_values(0.5)

# Gets the centerline velocities at Re=1000 reported in Ghia et al. (1982).
file_path = os.path.join(os.environ['CUIBM_DIR'], 'data',
                         'ghia_et_al_1982_lid_driven_cavity.dat')
ghia = GhiaEtAl1982(file_path=file_path, Re=1000)

# Plots the instantaneous drag coefficients.
images_directory = os.path.join(directory, 'images')
if not os.path.isdir(images_directory):
    os.makedirs(images_directory)
Beispiel #8
0
        'uquad': {'directory': os.path.join('uquad_T00.25_20_0.00050',
                                            'linear'),
                  'folders': ['20', '60', '180', '540']},
        'vquad': {'directory': os.path.join('vquad_T00.25_20_0.00050',
                                            'linear'),
                  'folders': ['20', '60', '180', '540']}}

time_step = 500
field_names = ['x-velocity', 'y-velocity']

for key, series in data.items():
  series['cases'] = []
  for folder in series['folders']:
    case = CuIBMSimulation(directory=os.path.join(series['directory'], folder),
                           description=folder)
    case.read_grid()
    case.read_fields(field_names, time_step)
    nx, ny = case.grid[0].size - 1, case.grid[1].size - 1
    masks = read_mask(os.path.join(case.directory, 'mask.txt'), nx, ny)
    for i, name in enumerate(field_names):
      case.fields[name].values = numpy.multiply(case.fields[name].values,
                                                masks[i])

    series['cases'].append(case)
  series['first'] = get_observed_orders(series['cases'][:-1],
                                        field_names,
                                        series['cases'][0],
                                        save_name=None)
  series['last'] = get_observed_orders(series['cases'][1:],
                                       field_names,
                                       series['cases'][0],
final_time_steps = [2000, 1500, 1250]
refinement_ratio = 2.0

fx, fy = [], []
p = []
qx, qy = [], []

main_directory = os.path.dirname(__file__)

for time_increment, final_time_step in zip(time_increments, final_time_steps):
    directory = os.path.join(main_directory, time_increment.replace("=", ""))
    simu = CuIBMSimulation(directory=directory, description=time_increment)
    simu.read_forces()
    fx.append(simu.forces[0].values[-1])
    fy.append(simu.forces[1].values[-1])
    simu.read_grid()
    p_simu = simu.read_pressure(final_time_step)
    p.append(p_simu.values)
    qx_simu, qy_simu = simu.read_fluxes(final_time_step)
    qx.append(qx_simu.values)
    qy.append(qy_simu.values)


file_path = os.path.join(os.path.dirname(__file__), "temporalConvergence.txt")
with open(file_path, "w") as outfile:
    outfile.write("\n* Drag force:\n")
    outfile.write("Value and relative difference with the reference value (smallest dt)\n")
    outfile.write("\t{}: {}\n".format(time_increments[0], fx[0]))
    for i in (1, 2):
        outfile.write("\t{}: {} ({}%)\n".format(time_increments[i], fx[i], (fx[i] - fx[0]) / fx[0] * 100.0))
    outfile.write(