xref: /libCEED/examples/fluids/conv_plot.py (revision 1f814bfddc5363a01c33fc7166b9ab66f1decae9)
150c0860bSLeila Ghaffari#!/usr/bin/env python3
250c0860bSLeila Ghaffari# Copyright (c) 2017-2018, Lawrence Livermore National Security, LLC.
350c0860bSLeila Ghaffari# Produced at the Lawrence Livermore National Laboratory. LLNL-CODE-734707.
450c0860bSLeila Ghaffari# All Rights reserved. See files LICENSE and NOTICE for details.
550c0860bSLeila Ghaffari#
650c0860bSLeila Ghaffari# This file is part of CEED, a collection of benchmarks, miniapps, software
750c0860bSLeila Ghaffari# libraries and APIs for efficient high-order finite element and spectral
850c0860bSLeila Ghaffari# element discretizations for exascale applications. For more information and
950c0860bSLeila Ghaffari# source code availability see http://github.com/ceed.
1050c0860bSLeila Ghaffari#
1150c0860bSLeila Ghaffari# The CEED research is supported by the Exascale Computing Project 17-SC-20-SC,
1250c0860bSLeila Ghaffari# a collaborative effort of two U.S. Department of Energy organizations (Office
1350c0860bSLeila Ghaffari# of Science and the National Nuclear Security Administration) responsible for
1450c0860bSLeila Ghaffari# the planning and preparation of a capable exascale ecosystem, including
1550c0860bSLeila Ghaffari# software, applications, hardware, advanced system engineering and early
1650c0860bSLeila Ghaffari# testbed platforms, in support of the nation's exascale computing imperative.
1750c0860bSLeila Ghaffari
1850c0860bSLeila Ghaffariimport numpy as np
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')
284b32fe0cSLeila Ghaffari    parser.add_argument('--conv_result_file',
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()
4250c0860bSLeila Ghaffari    # Arbitrary coefficients
4350c0860bSLeila Ghaffari    C = [2.2e-2, .24e0, .22e0, .7e0, 2.5e0,
4450c0860bSLeila Ghaffari        3e0, 3.5e0, 4e0, 4.5e0, 5e0]
4550c0860bSLeila Ghaffari    i = 0
4650c0860bSLeila Ghaffari    for group in runs.groupby('degree'):
4750c0860bSLeila Ghaffari        data = group[1]
4850c0860bSLeila Ghaffari        data = data.sort_values('rel_error')
4950c0860bSLeila Ghaffari        p = data['degree'].values[0]
5050c0860bSLeila Ghaffari        h = 1/data[res]
5150c0860bSLeila Ghaffari        H = C[i] * h**p # H = C h^p
5250c0860bSLeila Ghaffari        E = data['rel_error']
5350c0860bSLeila Ghaffari        log_h = np.log10(h)
5450c0860bSLeila Ghaffari        log_H = np.log10(H)
55*1f814bfdSLeila Ghaffari        ax.loglog(h, E, 'o', color=colors[i])
5650c0860bSLeila Ghaffari        m, b = np.polyfit(log_h, log_H, 1)
57*1f814bfdSLeila Ghaffari        ax.loglog(h, 10**b * h**m, '--', color=colors[i], label='O(h^' + str(p) + ')')
5850c0860bSLeila Ghaffari        i = i + 1
5950c0860bSLeila Ghaffari
6050c0860bSLeila Ghaffari    ax.legend(loc='best')
6150c0860bSLeila Ghaffari    ax.set_xlabel('h')
6250c0860bSLeila Ghaffari    ax.set_ylabel('Relative Error')
6350c0860bSLeila Ghaffari    ax.set_title('Convergence by h Refinement')
6450c0860bSLeila Ghaffari    xlim(.03, .3)
6550c0860bSLeila Ghaffari    fig.tight_layout()
6650c0860bSLeila Ghaffari    plt.savefig('conv_plt_h.png', bbox_inches='tight')
6750c0860bSLeila Ghaffari
6850c0860bSLeila Ghaffari
6950c0860bSLeila Ghaffariif __name__ == "__main__":
7050c0860bSLeila Ghaffari    plot()
71