- ... driverpart11
- For help with unfamiliar terms, please consult the glossary, Appendix E1.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... <config>part21
- A note on the Cactus make system--if at any point it prompts you
to enter something, the default value, which will be assumed if you
simply press enter, is shown in parentheses.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... messagepart31
- Cactus imposes the constraint,
8#8,
so any fatal-error message will always be printed (first).
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... linespart71
- The beginning brace ({) must sit on a line by
itself; the ending brace (}) must be preceded by a carriage return.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... thresholdpart131
- As discussed in Section A3.1
of this manual, the Cactus warning level threshold is
set with the -W or -warning-level
command-line option when running Cactus; see
Section A3.1.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...part132
- In calling CCTK_VWarn(), you need to
provide this information yourself. Cactus
provides the macro CCTK_THORNSTRING,
which is the character-string name of the
current thorn. In C, you can get the source
file name and line number from the predefined
preprocessor macros __FILE__ and
__LINE__, respectively. In Fortran
you're out of luck. :(
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... produced.part133
- For the moment, these
functions can only be used from C.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... ARRAY.part141
- Unfortunately, neither CCTK_FPOINTER ARRAY,
nor CCTK_STRING ARRAY will work.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... differentpart142
- This is only a theoretical possibility, in practice, they
have to be the same type for Cactus to work at all.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...part171
- However, the present Cactus tables implementation
is optimized for a relatively small number of
distinct keys in any one table. It will still
work OK for huge numbers of keys, but it will be
slow.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...part172
- Think of hierarchical tables for storing
tree-like data structures.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...part173
- All (or almost all) of the table routines
are also usable from Fortran. See the full
descriptions in the Reference Manual
for details.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...part174
- Often (as in the examples here) you don't care
about the details of which error occurred. But if
you do, there are various error codes defined in
util_Table.h and util_ErrorCodes.h;
the detailed function descriptions in
the Reference Manual
say which error codes each function can return.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...part175
- Note that the table makes (stores) a copy of the array
you pass in, so it's somewhat inefficient to store a large array
(e.g. a grid function) this way. If this is a problem, consider
storing a CCTK_POINTER (pointing to the array) in the table
instead. (Of course, this requires that you ensure that the array still exists whenever that CCTK_POINTER is used.)
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...part176
- In fact, actually all table values are
arrays--setting or getting a single value is
just the special case where the array length is 1.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...part177
- C automatically concatenates
adjacent character string constants separated only by whitespace.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...part178
- For example, if tables were implemented by hashing,
the internal order could be that of the hash buckets,
and the hash function could depend on the internal
table address.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ... known.part281
- http://en.wikipedia.org/wiki/Cactus
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
- ...part282
- Note that if you have an expression which
has the value zero, but which isn't an
integer constant, converting this to a
pointer type is not guaranteed to
give a NULL pointer, e.g.:
int i = 0;
int* ptr = i; /* ptr is NOT guaranteed to be a NULL pointer! */
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
|