Compadre  1.5.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
GMLS_Staggered_Manifold.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 
8 parser = argparse.ArgumentParser(description='convert files by adding cell centroids and ID (for cubed-sphere)')
9 parser.add_argument('--porder', dest='porder', type=int, default=3, help='polynomial degree for basis')
10 parser.add_argument('--grids', dest='grids', type=int, default=2, help='number of grids for refinement sequence')
11 parser.add_argument('--in-trilinos', dest='in_trilinos', type=str, default='false', help='whether being called from inside of Trilinos')
12 args = parser.parse_args()
13 
14 def check_bounds(porder, rate):
15  if (porder=="1"):
16  if rate<3 and rate>.9:
17  return True
18  else:
19  return False
20  else:
21  if rate>float(porder)-1.2:
22  return True
23  else:
24  return False
25 
26 num_target_sites = 100
27 porder = args.porder
28 grids = args.grids
29 
30 errors = []
31 
32 target_operators=("Staggered Laplace-Beltrami \(VectorBasis\)", "Staggered Laplace-Beltrami \(ScalarBasis\)", "Surface Staggered Divergence \(VectorSamples\)", "Surface Staggered Divergence \(ScalarSamples\)")#, "Surface Staggered Gradient \(VectorBasis\)", "Surface Staggered Gradient \(ScalarBasis\)")
33 for operator in target_operators:
34  errors.append([])
35 
36 for grid_num in range(grids):
37  with open(os.devnull, 'w') as devnull:
38  exe_name=""
39  if args.in_trilinos.lower()=="true":
40  exe_name = "@CMAKE_CURRENT_BINARY_DIR@/Compadre_GMLS_Staggered_Manifold_Test.exe"
41  else:
42  exe_name = "@CMAKE_CURRENT_BINARY_DIR@/GMLS_Staggered_Manifold_Test"
43  output_commands = [exe_name,"--p","%d"%porder,"--nt","%d"%num_target_sites,"--d","3","--ns","%d"%(20*num_target_sites*pow(4,grid_num)),"--solver","QR","--problem","MANIFOLD","@KOKKOS_THREADS_ARG@=4"]
44  print(output_commands)
45  output = subprocess.check_output(output_commands, stderr=devnull)
46  #print(output)
47  for key, operator in enumerate(target_operators):
48  m = re.search('(?<=%s Error: )[0-9]+\.?[0-9]*(?:[Ee]\ *-?\ *[0-9]+)?'%operator, output.decode('utf-8'))
49  try:
50  errors[key].append(float(m.group(0)))
51  except:
52  print("Program exited early. Regular expression search for error failed.")
53  exit(-1)
54 
55 print(errors)
56 
57 for key, operator in enumerate(target_operators):
58  print("\n\n%s rates: porder:%s\n============="%(operator.replace('\\',''), porder))
59  for i in range(1,len(errors[key])):
60  if (errors[key][i]!=0):
61  rate = math.log(errors[key][i]/errors[key][i-1])/math.log(.5)
62  print(str(rate) + ", " + str(errors[key][i]) + ", " + str(errors[key][i-1]))
63  assert(check_bounds(porder, rate))
64  else:
65  print("NaN - Division by zero")
66 
67 print("Passed.")
68 sys.exit(0)
import subprocess import os import re import math import sys import argparse parser
import subprocess import os import re import math import sys import argparse d d num_target_sites
if(some_conditions_for_a_user_defined_operation)
import subprocess import os import re import math import sys import argparse d porder
import subprocess import os import re import math import sys import argparse d d str(solver_type)
staggered TIMEOUT REQUIRED_FILES< TARGET_FILE:GMLS_Staggered_Manifold_Test > exit(1)