ESRL Global Systems Division
SMS Run-Time Error Messages
An example of a run-time error message in SMS is shown below. The lines prefaced with "SMS::" indicate normal operating information by the SMS run-time system. Error messages are generally output / handled by process 0. The file name and line number where the error occured will be given followed by the SMS numeric error code and message. A longer description of error codes is given in Section II of this document.
SMS:: Program started: 2002:04:08::14:34:51 (SMS Version: 2.6)
SMS: BITWISE EXACT reductions will be used when requested.
SMS: For processor layout of decomposition decomp, using config file : config.4
Process: 0 Error at: ./main_cpp_sms.f:78.1
Process: 0 Error status= -2202 MSG IS: User declared static array is too small.
Process: 0 Aborting...
-2202 "User declared static array is too small."
The SMS directive "CSMS$DECLARE_DECOMP" is used to declare the process local size of the decomposed arrays. This error will occur when the declared sizes of the decomposition are not large enough to store all elements of the declared data arrays. Re-define the declared sizes in csms$declare_decomp to be large enough to store the local sub-portion of the decomposed arrays that will be required for the number of processes you plan to run.
-6005 "Decomposition invalid. Has a CREATE_DECOMP directive been executed?"
While the user has defined a data decomposition (using csms$declare_decomp), no corresponding csms$create_decomp has been executed by the time this code segment required it. Either add csms$create_decomp to the code, or move it to the beginning of the program.
-6007 "Internal memory allocation failed. Corrupted memory? Memory limit exceeded?"
SMS allocates and deallocates memory for its internal tables during some points in execution of the user code. Two areas where memory allocation can be significant is (1) to support the output of decomposed arrays, and (2) in serial regions (csms$serial begin / end) to implement the gather and scatter of decomposed arrays to/from global arrays. If memory allocation errors appear within a serial region, the user can either break up large serial regions into multiple shorter sections of code. When the allocation error appears within a single output statement (write, print) that appears in a serial region, the user must break up these statements into write statements containing fewer variables.
-6008 "Internal memory deallocation failed. Could memory have been corrupted?"
This problem could have been caused by problems in the serial code where heap and stack space was corrupted. Try recompiling without SMS or and SMS code translation. Run in serial mode and see if the program dumps core.
-6009 "Nest level invalid. Has a SET_NEST_LEVELS directive been executed?"
This error occurs when the user forgets to insert a SET_NEST_LEVELS directive prior to the call to a subroutine that references a nested decomposition. For example, if a directive in the subroutine code references dh($1) then the nest level $1 must have been set by a previously executed SET_NEST_LEVELS directive.
-6016 "User has specified too many variables to exchange or transfer."
Too many variables are listed in the exchange or transfer directive. Break up the list into two or more exchange / transfer directives.
-6042 "Improperly specified numbers of processors per decomposed dimension in a config file."
The process configuration file, given on the smsRun line (-cf <filename>) is inconsistent.
-6043 "Process config file decomposed dimensions is more than in correcponding CREATE_DECOMP
The number of decomposed dimensions specified in the configuration file does not match the number given in the CREATE_DECOMP directive.
-6044 "Improperly specified sizes of decomposed dimensions in process configuration file."
The number of data points in each decomposed dimension must be specified and match the number of processors given in the configuration file.
-6044 "Decomp name in process configuration file doesn't match DECLARE_DECOMP directive."
The names must match or SMS cannot properly assign resources.