Compadre  1.6.0
GMLS_Manifold_Multiple_Evaluation_Sites.py.in
Go to the documentation of this file.
1 import subprocess
2 import os
3 import re
4 import math
5 import sys
6 import argparse
7 import time
8 
9 parser = argparse.ArgumentParser(description='convert files by adding cell centroids and ID (for cubed-sphere)')
10 parser.add_argument('--porder', dest='porder', type=int, default=3, help='polynomial degree for basis')
11 parser.add_argument('--grids', dest='grids', type=int, default=2, help='number of grids for refinement sequence')
12 parser.add_argument('--in-trilinos', dest='in_trilinos', type=str, default='false', help='whether being called from inside of Trilinos')
13 args = parser.parse_args()
14 
15 def check_bounds(porder, rate):
16  if (porder=="1"):
17  if rate<3 and rate>.9:
18  return True
19  else:
20  return False
21  else:
22  if rate>float(porder)-2.3:
23  return True
24  else:
25  return False
26 
27 num_target_sites = 100
28 porder = args.porder
29 grids = args.grids
30 
31 errors = []
32 
33 target_operators=("Tangent Bundle", "Point Value", "Gaussian Curvature", "Surface Vector \‍(VectorBasis\‍)", "Surface Vector \‍(ScalarClones\‍)", "Surface Curl \‍(Ambient\‍)")#, "","Surface Gradient (Manifold)",
34 for operator in target_operators:
35  errors.append([])
36 
37 for grid_num in range(grids):
38  with open(os.devnull, 'w') as devnull:
39  exe_name=""
40  if args.in_trilinos.lower()=="true":
41  exe_name = "@CMAKE_CURRENT_BINARY_DIR@/Compadre_GMLS_Manifold_MultiSite_Test.exe"
42  else:
43  exe_name = "@CMAKE_CURRENT_BINARY_DIR@/GMLS_Manifold_MultiSite_Test"
44  output_commands = [exe_name,"--p","%d"%porder,"--nt","%d"%num_target_sites,"--d","3","--ns","%d"%(20*num_target_sites*pow(4,grid_num)),"--problem","MANIFOLD","@KOKKOS_THREADS_ARG@=1"]
45  print(output_commands)
46  output = subprocess.check_output(output_commands, stderr=devnull)
47  #print(output)
48  for key, operator in enumerate(target_operators):
49  m = re.search('(?<=%s Error: )[0-9]+\.?[0-9]*(?:[Ee]\ *-?\ *[0-9]+)?'%operator, output.decode('utf-8'))
50  try:
51  errors[key].append(float(m.group(0)))
52  except:
53  print("Program exited early. Regular expression search for error failed.")
54  exit(-1)
55 
56 print(errors)
57 
58 for key, operator in enumerate(target_operators):
59  print("\n\n%s rates: porder:%s\n============="%(operator.replace('\\',''), porder))
60  for i in range(1,len(errors[key])):
61  if (errors[key][i]!=0):
62  rate = math.log(errors[key][i]/errors[key][i-1])/math.log(.5)
63  print(str(rate) + ", " + str(errors[key][i]) + ", " + str(errors[key][i-1]))
64  assert(check_bounds(porder, rate))
65  else:
66  print("NaN - Division by zero")
67 
68 print("Passed.")
69 sys.exit(0)