Skip to content
Closed
10 changes: 7 additions & 3 deletions src/common/include/parallel_macros.fpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,21 +63,25 @@
& extraAccArgs=extraAccArgs)
#:set omp_directive = OMP_ROUTINE(function_name=function_name, nohost=nohost, extraOmpArgs=extraOmpArgs)

#:set cray_noinline_directive = ''
#:set cray_directive = ''

#:if cray_noinline == True
#:if not isinstance(function_name, str)
#:stop "When using cray_noinline, function name must be given and given as a string"
#:endif
#:set cray_noinline_directive = ('!DIR$ NOINLINE ' + function_name).strip('\n')
#ifdef _CRAYFTN
$:cray_noinline_directive
#if MFC_OpenACC
$:acc_directive
#elif MFC_OpenMP
$:omp_directive
#else
$:cray_noinline_directive
#endif
#! On non-Cray CPU builds (no _CRAYFTN, no MFC_OpenACC, no MFC_OpenMP), nothing is
#! emitted — intentional, since !DIR$ NOINLINE is a Cray-specific directive.
#endif

#elif MFC_OpenACC
$:acc_directive
#elif MFC_OpenMP
Expand All @@ -89,12 +93,12 @@
#:endif
#:set cray_directive = ('!DIR$ INLINEALWAYS ' + function_name).strip('\n')
#ifdef _CRAYFTN
$:cray_directive
#if MFC_OpenACC
$:acc_directive
#elif MFC_OpenMP
$:omp_directive
#else
$:cray_directive
#endif
#elif MFC_OpenACC
$:acc_directive
Expand Down
24 changes: 24 additions & 0 deletions toolchain/mfc/case_validator.py
Original file line number Diff line number Diff line change
Expand Up @@ -333,6 +333,9 @@ def check_weno(self):
if recon_type != 1:
return

for param in ["muscl_order", "muscl_lim"]:
self.prohibit(self.is_set(param), f"recon_type = 1 (WENO) is not compatible with {param}")

weno_order = self.get("weno_order")
m = self.get("m", 0)
n = self.get("n", 0)
Expand All @@ -357,6 +360,17 @@ def check_muscl(self):
if recon_type != 2:
return

weno_log_params = ["mapped_weno", "wenoz", "teno", "mp_weno", "weno_avg", "null_weights", "weno_Re_flux"]
for param in weno_log_params:
self.prohibit(self.get(param) == "T", f"recon_type = 2 (MUSCL) is not compatible with {param} = T")

weno_numeric_params = ["wenoz_q", "teno_CT", "weno_eps"]
for param in weno_numeric_params:
self.prohibit(self.is_set(param), f"recon_type = 2 (MUSCL) is not compatible with {param}")

weno_order = self.get("weno_order")
self.prohibit(weno_order is not None and weno_order != 0, f"recon_type = 2 (MUSCL) requires weno_order unset or 0, but got {weno_order}")

muscl_order = self.get("muscl_order")
m = self.get("m", 0)
n = self.get("n", 0)
Expand Down Expand Up @@ -717,6 +731,11 @@ def check_finite_difference(self):

def check_weno_simulation(self):
"""Checks WENO-specific constraints for simulation"""
recon_type = self.get("recon_type", 1)
# WENO_TYPE = 1
if recon_type != 1:
return

weno_order = self.get("weno_order")
weno_eps = self.get("weno_eps")
wenoz = self.get("wenoz", "F") == "T"
Expand Down Expand Up @@ -751,6 +770,11 @@ def check_weno_simulation(self):

def check_muscl_simulation(self):
"""Checks MUSCL-specific constraints for simulation"""
recon_type = self.get("recon_type", 1)
# MUSCL_TYPE = 2
if recon_type != 2:
return

muscl_order = self.get("muscl_order")
muscl_lim = self.get("muscl_lim")

Expand Down
4 changes: 3 additions & 1 deletion toolchain/mfc/test/case.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,9 @@ def __init__(self, trace: str, mods: dict, ppn: int = None, override_tol: float
self.ppn = ppn or 1
self.override_tol = override_tol
self.restart_check = restart_check
super().__init__({**BASE_CFG.copy(), **mods})
merge = {**BASE_CFG.copy(), **mods}
merge = {key: val for key, val in merge.items() if val is not None}
super().__init__(merge)

def run(self, targets: List[Union[str, MFCTarget]], gpus: Set[int]) -> subprocess.CompletedProcess:
if gpus is not None and len(gpus) != 0:
Expand Down
6 changes: 5 additions & 1 deletion toolchain/mfc/test/cases.py
Original file line number Diff line number Diff line change
Expand Up @@ -300,7 +300,7 @@ def alter_igr():

def alter_muscl():
for muscl_order in [1, 2]:
stack.push(f"muscl_order={muscl_order}", {"muscl_order": muscl_order, "recon_type": 2, "weno_order": 0})
stack.push(f"muscl_order={muscl_order}", {"muscl_order": muscl_order, "recon_type": 2, "weno_order": 0, "weno_eps": None, "wenoz_q": None, "teno_CT": None})

if muscl_order == 1:
for int_comp in ["T", "F"]:
Expand Down Expand Up @@ -1558,6 +1558,10 @@ def modify_example_case(case: dict):
case["t_step_stop"] = 50
case["t_step_save"] = 50

if case.get("recon_type") == 2:
for k in ("weno_order", "weno_eps", "wenoz_q", "teno_CT"):
case[k] = None

caseSize = case["m"] * max(case["n"], 1) * max(case["p"], 1)
if caseSize > 25 * 25:
if case["n"] == 0 and case["p"] == 0:
Expand Down
Loading