xref: /libCEED/examples/fluids/conv_plot.py (revision 4b32fe0cfd1ca0b1372a370a2254a43aa4339e83)
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
20*4b32fe0cSLeila Ghaffariimport argparse
2150c0860bSLeila Ghaffarifrom pylab import *
2250c0860bSLeila Ghaffarifrom matplotlib import use
2350c0860bSLeila Ghaffari
2450c0860bSLeila Ghaffari
2550c0860bSLeila Ghaffaridef plot():
26*4b32fe0cSLeila Ghaffari    # Define argparse for the input variables
27*4b32fe0cSLeila Ghaffari    parser = argparse.ArgumentParser(description='Get input arguments')
28*4b32fe0cSLeila Ghaffari    parser.add_argument('--conv_result_file',
29*4b32fe0cSLeila Ghaffari                        dest='conv_result_file',
30*4b32fe0cSLeila Ghaffari                        type=str,
31*4b32fe0cSLeila Ghaffari                        required=True,
32*4b32fe0cSLeila Ghaffari                        help='Path to the CSV file')
33*4b32fe0cSLeila Ghaffari    args = parser.parse_args()
34*4b32fe0cSLeila Ghaffari    conv_result_file = args.conv_result_file
35*4b32fe0cSLeila Ghaffari
3650c0860bSLeila Ghaffari    # Load the data
37*4b32fe0cSLeila 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)
5550c0860bSLeila Ghaffari        ax.loglog(h, E, 'o', color=colors[i])
5650c0860bSLeila Ghaffari        m, b = np.polyfit(log_h, log_H, 1)
5750c0860bSLeila 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