#1595: Is *) allowed as upper boundary for a parameter range? -----------------------+---------------------------------------------------- Reporter: eschnett | Owner: sbrandt Type: defect | Status: assigned Priority: minor | Milestone: ET_2015_05 Component: Cactus | Version: development version Resolution: | Keywords: postrelease -----------------------+----------------------------------------------------
Comment (by rhaas):
Sorry Roland, I meant to say quoted ranges not quoted strings.
GaugeWave, KerrSchild, ML_BSSN, ML_CCZ4, ML_WaveToy, Minkowski, etc. all use "*:*" repeatedly in their param.ccl files. Even producing a warning for quoted ranges creates a lot of noise (nearly 350 messages from the ET).
These still exist? As Frank said we had a ticket about them and I had assumed (incorrectly apparently :-) ) that this had been removed since they were all Kranc thorns (and I would expect Kranc to produce "nice" thorns).
My experiments indicate that "1::2" gives a range starting with 1 and a
step of 2. That is very strange. I just tried {{{ REAL xmin "Coordinate minimum in x-direction" { 1::2 :: "Anything" } -1.0 }}} myself with 0158f72 of the flesh and it fails with this error {{{ CST error 1: -> Descrip0158f72tion of range for parameter xmin has misplaced quotes (2 :: "Anything") in param.ccl for thorn CartGrid3D }}}
It also fails if I try to introduce the regex like this: {{{ --- a/lib/sbin/parameter_parser.pl +++ b/lib/sbin/parameter_parser.pl @@ -396,7 +396,7 @@ sub parse_param_ccl if ($type eq 'REAL' && ! ( $new_ranges eq '*' || $new_ranges =~ /^$real$/ || - $new_ranges =~ /^["(]?(*|(?$real)?:(*|$real)?)?(:$real)?[)"]?$/)) { + $new_ranges =~ /("|)[([]?(*|$real)?:(*|$real)?(:$real)?[)]]?\1$/)) { # this will become a level 0 error in the fture &CST_error(1, "Invalid range '$new_ranges' for real " . "parameter '$variable' of thorn '$thorn'. ". }}}
Whatever we decide to do in the end (I don't really care very much what we do) we need to make sure that the C code parses the range string (unfortunately it is passed the string, the perl code does not pass the result of its own parsing to C) in the very same way.
The only reason "*:*" works is that Cactus removes all quotes from ranges when creating the parameter C code in line 534 of lib/sbin/CreateParameterBindings.pl even though that line 381 of parameter_parser.pl would seem to only allow quotes for string parameters (also note that integer parameters never allowed "*:*" or any quotes around the range for that matter so we have some work to do to make this all consistent between parameter types).