xref: /libCEED/examples/fluids/conv_plot.py (revision 25878d731ec1d76dfcb265836bbb0ff82e7138ef)
150c0860bSLeila Ghaffari#!/usr/bin/env python3
219c46194SLeila Ghaffari
377841947SLeila Ghaffari# Copyright (c) 2017, Lawrence Livermore National Security, LLC.
450c0860bSLeila Ghaffari# Produced at the Lawrence Livermore National Laboratory. LLNL-CODE-734707.
550c0860bSLeila Ghaffari# All Rights reserved. See files LICENSE and NOTICE for details.
650c0860bSLeila Ghaffari#
750c0860bSLeila Ghaffari# This file is part of CEED, a collection of benchmarks, miniapps, software
850c0860bSLeila Ghaffari# libraries and APIs for efficient high-order finite element and spectral
950c0860bSLeila Ghaffari# element discretizations for exascale applications. For more information and
10*3d8e8822SJeremy L Thompson# source code availability see http://github.com/ceed
1150c0860bSLeila Ghaffari#
1250c0860bSLeila Ghaffari# The CEED research is supported by the Exascale Computing Project 17-SC-20-SC,
1350c0860bSLeila Ghaffari# a collaborative effort of two U.S. Department of Energy organizations (Office
1450c0860bSLeila Ghaffari# of Science and the National Nuclear Security Administration) responsible for
1550c0860bSLeila Ghaffari# the planning and preparation of a capable exascale ecosystem, including
1650c0860bSLeila Ghaffari# software, applications, hardware, advanced system engineering and early
1750c0860bSLeila Ghaffari# testbed platforms, in support of the nation's exascale computing imperative.
1850c0860bSLeila Ghaffari
1950c0860bSLeila Ghaffariimport pandas as pd
204b32fe0cSLeila Ghaffariimport argparse
2150c0860bSLeila Ghaffarifrom pylab import *
2250c0860bSLeila Ghaffarifrom matplotlib import use
2350c0860bSLeila Ghaffari
2450c0860bSLeila Ghaffari
2550c0860bSLeila Ghaffaridef plot():
264b32fe0cSLeila Ghaffari    # Define argparse for the input variables
274b32fe0cSLeila Ghaffari    parser = argparse.ArgumentParser(description='Get input arguments')
2819c46194SLeila Ghaffari    parser.add_argument('-f',
294b32fe0cSLeila Ghaffari                        dest='conv_result_file',
304b32fe0cSLeila Ghaffari                        type=str,
314b32fe0cSLeila Ghaffari                        required=True,
324b32fe0cSLeila Ghaffari                        help='Path to the CSV file')
334b32fe0cSLeila Ghaffari    args = parser.parse_args()
344b32fe0cSLeila Ghaffari    conv_result_file = args.conv_result_file
354b32fe0cSLeila Ghaffari
3650c0860bSLeila Ghaffari    # Load the data
374b32fe0cSLeila Ghaffari    runs = pd.read_csv(conv_result_file)
3850c0860bSLeila Ghaffari    colors = ['orange', 'red', 'navy', 'green', 'magenta',
3950c0860bSLeila Ghaffari              'gray', 'blue', 'purple', 'pink', 'black']
4050c0860bSLeila Ghaffari    res = 'mesh_res'
4150c0860bSLeila Ghaffari    fig, ax = plt.subplots()
4219c46194SLeila Ghaffari
4350c0860bSLeila Ghaffari    i = 0
4450c0860bSLeila Ghaffari    for group in runs.groupby('degree'):
4550c0860bSLeila Ghaffari        data = group[1]
4650c0860bSLeila Ghaffari        data = data.sort_values('rel_error')
4750c0860bSLeila Ghaffari        p = data['degree'].values[0]
4850c0860bSLeila Ghaffari        h = 1 / data[res]
4950c0860bSLeila Ghaffari        E = data['rel_error']
50888e399fSLeila Ghaffari        H = amin(E) * (h / amin(h))**p
511f814bfdSLeila Ghaffari        ax.loglog(h, E, 'o', color=colors[i])
5219c46194SLeila Ghaffari        ax.loglog(h, H, '--', color=colors[i], label='O(h$^' + str(p) + '$)')
5350c0860bSLeila Ghaffari        i = i + 1
5450c0860bSLeila Ghaffari
5550c0860bSLeila Ghaffari    ax.legend(loc='best')
5650c0860bSLeila Ghaffari    ax.set_xlabel('h')
5750c0860bSLeila Ghaffari    ax.set_ylabel('Relative Error')
5850c0860bSLeila Ghaffari    ax.set_title('Convergence by h Refinement')
5919c46194SLeila Ghaffari    plt.savefig('conv_plt_h.png')
6050c0860bSLeila Ghaffari
6150c0860bSLeila Ghaffari
6250c0860bSLeila Ghaffariif __name__ == "__main__":
6350c0860bSLeila Ghaffari    plot()
64