150c0860bSLeila Ghaffari#!/usr/bin/env python3 2*19c46194SLeila Ghaffari 350c0860bSLeila Ghaffari# Copyright (c) 2017-2018, 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 1050c0860bSLeila Ghaffari# 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') 28*19c46194SLeila 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() 42*19c46194SLeila 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'] 50*19c46194SLeila Ghaffari h_min = amin(h) 51*19c46194SLeila Ghaffari E_min = amin(E) 52*19c46194SLeila Ghaffari H = E_min * (h/h_min)**p 531f814bfdSLeila Ghaffari ax.loglog(h, E, 'o', color=colors[i]) 54*19c46194SLeila Ghaffari ax.loglog(h, H, '--', color=colors[i], label='O(h$^' + str(p) + '$)') 5550c0860bSLeila Ghaffari i = i + 1 5650c0860bSLeila Ghaffari 5750c0860bSLeila Ghaffari ax.legend(loc='best') 5850c0860bSLeila Ghaffari ax.set_xlabel('h') 5950c0860bSLeila Ghaffari ax.set_ylabel('Relative Error') 6050c0860bSLeila Ghaffari ax.set_title('Convergence by h Refinement') 61*19c46194SLeila Ghaffari plt.savefig('conv_plt_h.png') 6250c0860bSLeila Ghaffari 6350c0860bSLeila Ghaffari 6450c0860bSLeila Ghaffariif __name__ == "__main__": 6550c0860bSLeila Ghaffari plot() 66