Modules

NONMEM uses FORTRAN module to share values. They supplement the subroutine arguments.

NONMEM-PRED modules

These modules contain values that are (for the most part) communicated from PRED to NONMEM. Prior to NONMEM 7 these values were COMMON blocks. Following is a list of the MODULE, the (old) COMMON, and a description of the variables.

  • NMPRD_INT (NMPRD1) PRED return code and user message count (IERPRD,NETEXT)
  • NMPRD_CHAR (NMPRD2) PRED user message (ETEXT)
  • NMPRD_INT (NMPRD3) "Copying pass" flag and SAVE region size for NMPRD4 (COMACT,COMSAV)
  • NMPRD4P (NMPRD4) PRED-defined items for tables and scatterplots
  • NMPRD_REAL (NMPRD5) Correlation matrix for epsilon's.
  • NMPRD_INT (NMPRD6) Return code from routine SIMEPS.
  • NMPRD_REAL (NMPRD7) Simulated ETAs for tables and scatterplots.
  • NMPRD_REAL (NMPRD8) PRED's "recursive" flag
  • NMPRD_REAL (NMPRD9) Data record at ICALL 0, 1 and 3
  • NMPR_INT (NMPR10) Control information for PRED repetition feature.
  • NMPR_INT (NMPR11) Flags to override effect of NEW option on $SIMULATION record.
  • NMPR_REAL (NMPR12) Conditional limits on observation.
  • NMPR_REAL (NMPR13) Lower limits defining interval datum, and their derivatives.
  • NMPR_REAL (NMPR14) Upper limits defining interval datum, and their derivatives.
  • NMPR_INT (NMPR15) Skip control variable.
  • NMPR_REAL (NMPR16) Parameter values produced during Simulation Step.
  • NMPR_INT (NMPR17) Flag indicating character of PRED variable F.

NONMEM read-only modules

These modules contain read-only values that are communicated from NONMEM to PRED and other user-supplied routines.

  • ROCM_REAL (ROCM0) Current theta (THETA)
  • ROCM_REAL (ROCM1) DV, data items in current L1 record
  • ROCM_INT (ROCM1C) Size of current L1 record (prior to NONMEN 7, this was combined with ROCM1).
  • ROCM_INT (ROCM2) Number of L2 records and length of L2 record
  • ROCM_REAL (ROCM3) Predictions and derivatives with current L1 record
  • ROCM_REAL (ROCM4) Selected data from an individual record
  • ROCM_INT (ROCM4) Selected data from an individual record
  • ROCM_REAL (ROCM5) Predictions and derivatives with current L2 record
  • ROCM_REAL (ROCM6) Initial/final theta, omega, sigma
  • ROCM_REAL (ROCM7) Standard errors of estimates of theta, omega, sigma
  • ROCM_REAL (ROCM8) Final value of the objective function
  • ROCM_INT (ROCM9) Return codes from Estimation and Covariance Steps
  • ROCM_INT (ROCM10) Simulation: no. of replications (total and current)
  • ROCM_INT (ROCM11) Mixture: index of subpopulation (current and most probable)
  • ROCM_INT (ROCM12) Second and first derivative flags for PRED
  • ROCM_INT (ROCM13) Simulation: Final pass flag for PRED and CONTR
  • NMPRD_INT (ROCM14) Problem and subproblem counters.
  • NMPRD_INT (ROCM15) List of inactive ETAs.
  • ROCM_REAL (ROCM16) The number of significant digits in the the vector of final estimates.
  • ROCM_INT (ROCM17) New level 2 record flag
  • ROCM_REAL (ROCM18) Nonparametric estimates: height and heights of cumulative marginals
  • ROCM_REAL (ROCM22) Current value of omega.
  • ROCM_REAL (ROCM25) Mixing probabilities
  • ROCM_REAL (ROCM28) Superproblem printing indicator
  • NMPRD_INT (ROCM29) Population vs. single-subject data flag.
  • ROCM_REAL (ROCM31) Template record at ICALL=6.
  • ROCM_INT (ROCM32) Number of the individual record and of the data record.
  • ROCM_INT (ROCM34) NEWIND at ICALL 0, 1 and 3.
  • ROCM_INT (ROCM35) Numbers of THETAs, ETAs and EPSILONs in the problem.
  • ROCM_REAL (ROCM36) Individual's posterior variance-covariance matrix. No help entry.
  • ROCM_INT (ROCM37) Indicator that Estimation Step is omitted and obj. func. is being evaluated for first time. No help entry.
  • ROCM_REAL (ROCM38) Conditional limits for observations in individual record. No help entry.
  • ROCM_REAL (ROCM39) Conditional limits for observation. No help entry.
  • ROCM_REAL (ROCM40) Lower Limits defining interval datum, and their derivatives in individual record. No help entry.
  • ROCM_REAL (ROCM41) Upper Limits defining interval datum, and their derivatives in individual record. No help entry.
  • ROCM_REAL (ROCM42) Lower Limits defining interval datum, and their derivatives. No help entry.
  • ROCM_REAL (ROCM43) Upper Limits defining interval datum, and their derivatives. No help entry.
  • ROCM_REAL (ROCM44) Probability that observation is within (outside) limits.
  • ROCM_REAL (ROCM45) Probability that category occurs.
  • ROCM_INT (ROCM46) Number of individual records with observations, and indices of first and last such record.
  • ROCM_REAL (ROCM47) Mixture probabilities with individual record containing template record.
  • ROCM_INT (ROCM48) Length of individual record.
  • ROCM_REAL (ROCM49) Prediction, residual, and weighted residual values for all methods, as well as normalized probability distribution error.
  • ROCM_INT (ROCM50) ID data item for the individual contributions to the objective function.
  • ROCM_REAL (ROCM50) Individual contributions to the objective function.

Module variables

The following names are reserved in all abbreviated code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
  GETETA
  SIMETA
  SIMEPS
  COMSAV
  NWIND
  ETEXT
  IERPRD
  IERPRDU
  MSEC
  MFIRST
  NETEXT
  ETA1, ETA2, ...ETA9
  ETA10, ETA11, ...ETA99
  Annnnn !! nnnnn is numeric 00000-99999, and nnnn is numeric 0000 -9999
  ! Similarly
  Bnnnnn,Cnnnnn,Dnnnnn,Ennnnn,Fnnnnn,Pnnnnn,Qnnnnn,MCnnnn,MEnnnn,MGnnnn,MTnnnn

Names of modules and of variables in the modules are also reserved. 1 Below is a list of blocks of abbreviated code and the modules and variables that may be used. Second is a list of modules, the variables in the modules, and the blocks of abbreviated code in which these variables may be used.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
  $AES
  NMPRD_INT:  COMACT,COMSAV
  NMPRD_INT:  NPROB,IPROB
  NMPRD_INT:  S1IT,S1NIT,S1NUM,S2IT,S2NIT,S2NUM
  NMPRD_INT:  NTHES_,NETAS_,NEPSS_
  NMPR_INT:   RPTI,RPTO,RPTON,PRDFL
  PKERR_REAL: MTIME
  PRMOD_INT:  ICALL,IDEFD,IDEFA
  PRMOD_INT:  MTDIFF
  PROCM_INT:  ISFINL
  PROCM_INT:  MNOW,MPAST,MNEXT
  PROCM_INT:  NVNT
  PROCM_REAL: DOSREC
  PROCM_REAL: DOSTIM
  PROCM_REAL: EVTREC
  PROCM_REAL: THETA
  ROCM_INT:   MIXNUM,MIXEST
  ROCM_INT:   NIREC,NDREC
  ROCM_INT:   NREP,IREP
  ROCM_REAL:  MIXP

  $DES
  NMPRD_INT:  COMACT,COMSAV
  NMPRD_INT:  MSEC,MFIRST,IFIRSTEM
  NMPRD_INT:  NPROB,IPROB
  NMPRD_INT:  S1IT,S1NIT,S1NUM,S2IT,S2NIT,S2NUM
  NMPRD_INT:  NTHES_,NETAS_,NEPSS_
  NMPR_INT:   RPTI,RPTO,RPTON,PRDFL
  PKERR_REAL: MTIME
  PRMOD_INT:  ICALL,IDEFD,IDEFA
  PRMOD_INT:  MTDIFF
  PROCM_INT:  ISFINL
  PROCM_INT:  MNOW,MPAST,MNEXT
  PROCM_INT:  NVNT
  PROCM_REAL: DOSREC
  PROCM_REAL: DOSTIM
  PROCM_REAL: EVTREC
  PROCM_REAL: THETA
  ROCM_INT:   MIXNUM,MIXEST
  ROCM_INT:   NIREC,NDREC
  ROCM_INT:   NREP,IREP
  ROCM_REAL:  MIXP

  $ERROR
  CMNM1_INT:  NIND_7
  NMPRD_INT:  COMACT,COMSAV
  NMPRD_INT:  MSEC,MFIRST,IFIRSTEM
  NMPRD_INT:  NEWL2
  NMPRD_INT:  NPROB,IPROB
  NMPRD_INT:  S1IT,S1NIT,S1NUM,S2IT,S2NIT,S2NUM
  NMPRD_INT:  NTHES_,NETAS_,NEPSS_
  NMPRD_INT:  MDVRES
  NMPRD_INT:  NPDE_MODE
  NMPRD_INT:  ETASXI
  NMPRD_INT:  NOFIRSTDERCODE
  NMPRD_REAL: CORRL2
  NMPRD_REAL: ETA,EPS
  NMPR_INT:   F_FLAG
  NMPR_INT:   RPTI,RPTO,RPTON,PRDFL
  NMPR_REAL:  CTLO
  NMPR_REAL:  CTUP
  NMPR_REAL:  YLO,YUP
  NMPR_REAL:  THSIMP,OMSIMP,SGSIMP,THSIMPR
  PKERR_REAL: MTIME
  PRMOD_INT:  MTDIFF
  PROCM_INT:  MNOW,MPAST,MNEXT
  PROCM_INT:  NEWIND
  PROCM_REAL: A
  ROCM_INT:   LIREC
  ROCM_INT:   MIXNUM,MIXEST
  ROCM_INT:   NINDR,INDR1,INDR2
  ROCM_INT:   NIREC,NDREC
  ROCM_INT:   NREP,IREP
  ROCM_REAL:  CNTID
  ROCM_REAL:  CDEN_,DEN_
  ROCM_REAL:  IIDX
  ROCM_REAL:  MIXP
  ROCM_REAL:  OMEGA
  ROCM_REAL:  PR_CT
  ROCM_REAL:  PR_Y
  ROCM_REAL:  TEMPLT

  $INFN
  CMNM1_INT:  NIND_7
  NMPRD_INT:  NEWL2
  NMPRD_INT:  NPROB,IPROB
  NMPRD_INT:  S1IT,S1NIT,S1NUM,S2IT,S2NIT,S2NUM
  NMPRD_INT:  NWIND
  NMPRD_INT:  PRED_IGNORE_DATA,PRED_IGNORE_DATA_TEST
  NMPRD_REAL: CORRL2
  NMPRD_REAL: ETA,EPS
  NMPRD_REAL: PASSRC
  NMPR_INT:   F_FLAG
  NMPR_INT:   RPTI,RPTO,RPTON,PRDFL
  NMPR_INT:   SKIP_
  NMPR_REAL:  THSIMP,OMSIMP,SGSIMP,THSIMPR
  PRMOD_INT:  I_SS,ISSMOD
  ROCM_INT:   IERE,IERC
  ROCM_INT:   LIREC
  ROCM_INT:   MIXNUM,MIXEST
  ROCM_INT:   NINDR,INDR1,INDR2
  ROCM_INT:   NIREC,NDREC
  ROCM_INT:   NREP,IREP
  ROCM_REAL:  CDEN_,DEN_
  ROCM_REAL:  CNTID
  ROCM_REAL:  IIDX
  ROCM_REAL:  MIXP
  ROCM_REAL:  OBJECT
  ROCM_REAL:  PR_CT
  ROCM_REAL:  PR_Y
  ROCM_REAL:  SETHET,SEOMEG,SESIGM,SETHETR
  ROCM_REAL:  THETAF,OMEGAF,SIGMAF,THETAFR
  ROCM_REAL:  PRED_,RES_,WRES_,NPRED_,NRES_,NWRES_
  ROCM_REAL:  CPRED_,CRES_,CWRES_,PREDI_,RESI_,WRESI_,
  ROCM_REAL:  CPREDI_,CRESI_,CWRESI_,EPRED_,ERES_,EWRES_
  ROCM_REAL:  NPDE_,ECWRES_

  $MIX
  NMPRD_INT:  NPROB,IPROB
  NMPRD_INT:  S1IT,S1NIT,S1NUM,S2IT,S2NIT,S2NUM
  NMPRD_INT:  NTHES_,NETAS_,NEPSS_
  ROCM_INT:   NINDR,INDR1,INDR2
  ROCM_INT:   NIREC,NDREC
  ROCM_INT:   NREP,IREP
  ROCM_REAL:  TEMPLT
  ROCM_REAL:  THETA,DATA

  $PK
  CMNM1_INT:  NIND_7
  NMPRD_INT:  COMACT,COMSAV
  NMPRD_INT:  MSEC,MFIRST,IFIRSTEM
  NMPRD_INT:  NPROB,IPROB
  NMPRD_INT:  S1IT,S1NIT,S1NUM,S2IT,S2NIT,S2NUM
  NMPRD_INT:  NTHES_,NETAS_,NEPSS_
  NMPRD_INT:  MDVRES
  NMPRD_INT:  NPDE_MODE
  NMPRD_INT:  ETASXI
  NMPRD_INT:  NOFIRSTDERCODE
  NMPRD_REAL: CORRL2
  NMPRD_REAL: ETA,EPS
  NMPR_INT:   RPTI,RPTO,RPTON,PRDFL
  NMPR_REAL:  THSIMP,OMSIMP,SGSIMP,THSIMPR
  PKERR_REAL: MTIME
  PRMOD_INT:  I_SS,ISSMOD
  PRMOD_INT:  MTDIFF
  PRMOD_REAL: A_0
  PROCM_INT:  A_0FLG
  PROCM_INT:  MNOW,MPAST,MNEXT
  PROCM_INT:  NEWIND
  PROCM_REAL: A
  PROCM_REAL: DOSREC
  PROCM_REAL: DOSTIM
  PROCM_REAL: TSTATE
  ROCM_INT:   LIREC
  ROCM_INT:   MIXNUM,MIXEST
  ROCM_INT:   NINDR,INDR1,INDR2
  ROCM_INT:   NIREC,NDREC
  ROCM_INT:   NREP,IREP
  ROCM_REAL:  CNTID
  ROCM_REAL:  CDEN_,DEN_
  ROCM_REAL:  IIDX
  ROCM_REAL:  MIXP
  ROCM_REAL:  OMEGA
  ROCM_REAL:  PR_CT
  ROCM_REAL:  PR_Y

  $PRED
  CMNM1_INT:  NIND_7
  NMPRD_INT:  COMACT,COMSAV
  NMPRD_INT:  I_REC
  NMPRD_INT:  MSEC,MFIRST,IFIRSTEM
  NMPRD_INT:  NEWL2
  NMPRD_INT:  NPROB,IPROB
  NMPRD_INT:  S1IT,S1NIT,S1NUM,S2IT,S2NIT,S2NUM
  NMPRD_INT:  NTHES_,NETAS_,NEPSS_
  NMPRD_INT:  MDVRES
  NMPRD_INT:  NPDE_MODE
  NMPRD_INT:  ETASXI
  NMPRD_INT:  NOFIRSTDERCODE
  NMPRD_INT:  PRED_IGNORE_DATA,PRED_IGNORE_DATA_TEST
  NMPRD_REAL: CORRL2
  NMPRD_REAL: ETA,EPS
  NMPR_INT:   F_FLAG
  NMPR_INT:   RPTI,RPTO,RPTON,PRDFL
  NMPR_INT:   SKIP_
  NMPR_REAL:  CTLO
  NMPR_REAL:  CTUP
  NMPR_REAL:  THSIMP,OMSIMP,SGSIMP,THSIMPR
  NMPR_REAL:  YLO,YUP
  ROCM_INT:   IERE,IERC
  ROCM_INT:   LIREC
  ROCM_INT:   MIXNUM,MIXEST
  ROCM_INT:   NINDR,INDR1,INDR2
  ROCM_INT:   NIREC,NDREC
  ROCM_INT:   NREP,IREP
  ROCM_REAL:  CNTID
  ROCM_REAL:  CDEN_,DEN_
  ROCM_REAL:  IIDX
  ROCM_REAL:  MIXP
  ROCM_REAL:  OBJECT
  ROCM_REAL:  OMEGA
  ROCM_REAL:  PR_CT
  ROCM_REAL:  PR_Y
  ROCM_REAL:  SETHET,SEOMEG,SESIGM,SETHETR
  ROCM_REAL:  TEMPLT
  ROCM_REAL:  THETAF,OMEGAF,SIGMAF,THETAFR
  ROCM_REAL:  PRED_,RES_,WRES_,NPRED_,NRES_,NWRES_
  ROCM_REAL:  CPRED_,CRES_,CWRES_,PREDI_,RESI_,WRESI_,
  ROCM_REAL:  CPREDI_,CRESI_,CWRESI_,EPRED_,ERES_,EWRES_
  ROCM_REAL:  NPDE_,ECWRES_

For another view the list below shows the code blocks that have access to given variables.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#MODULES:   #VARIABLES                                 # CONTROL RECORD BLOCKS
CMNM1_INT:  NIND_7                                     $ERROR $PK $PRED $INFN
NMPRD_INT:  COMACT,COMSAV                              $DES $AES $ERROR $PK $PRED
NMPRD_INT:  I_REC                                      $PRED
NMPRD_INT:  MSEC,MFIRST,IFIRSTEM                       $DES $ERROR $PK $PRED
NMPRD_INT:  NEWL2                                      $ERROR $PRED $INFN
NMPRD_INT:  NPROB,IPROB                                $DES $AES $ERROR $MIX $PK $PRED $INFN
NMPRD_INT:  NTHES_,NETAS_,NEPSS_                       $DES $AES $ERROR $MIX $PK $PRED
NMPRD_INT:  NWIND                                      $INFN
NMPRD_INT:  S1IT,S1NIT,S1NUM,S2IT,S2NIT,S2NUM          $DES $AES $ERROR $MIX $PK $PRED $INFN
NMPRD_REAL: CORRL2                                     $ERROR $PK $PRED $INFN
NMPRD_REAL: ETA,EPS                                    $ERROR $PK $PRED $INFN
NMPRD_REAL: PASSRC                                     $INFN
NMPR_INT:   F_FLAG                                     $ERROR $PRED $INFN
NMPR_INT:   RPTI,RPTO,RPTON,PRDFL                      $DES $AES $ERROR $PK $PRED $INFN
NMPR_INT:   SKIP_                                      $PRED $INFN
NMPR_REAL:  CTLO                                       $ERROR $PRED $ERROR $PRED
NMPR_REAL:  THSIMP,OMSIMP,SGSIMP,THSIMPR               $PK $PRED $INFN
NMPR_REAL:  YLO,YUP                                    $ERROR $PRED
NMPR_REAL:  THSIMP,OMSIMP,SGSIMP,THSIMPR               $ERROR
PKERR_REAL: MTIME                                      $DES $AES $ERROR $PK
PRMOD_INT:  ICALL,IDEFD,IDEFA                          $DES $AES
PRMOD_INT:  I_SS,ISSMOD                                $PK $INFN
PRMOD_INT:  MTDIFF                                     $DES $AES $ERROR $PK
PRMOD_REAL: A_0                                        $PK
PROCM_INT:  A_0FLG                                     $PK
PROCM_INT:  ISFINL                                     $DES $AES
PROCM_INT:  MNOW,MPAST,MNEXT                           $DES $AES $ERROR $PK
PROCM_INT:  NEWIND                                     $ERROR $PK
PROCM_INT:  NVNT                                       $DES $AES
PROCM_REAL: A                                          $ERROR $PK
PROCM_REAL: DOSREC                                     $DES $AES $PK
PROCM_REAL: DOSTIM                                     $DES $AES $PK
PROCM_REAL: EVTREC                                     $DES $AES
PROCM_REAL: THETA                                      $DES $AES
PROCM_REAL: TSTATE                                     $PK
ROCM_INT:   IERE,IERC                                  $PRED $INFN
ROCM_INT:   LIREC                                      $ERROR $PK $PRED $INFN
ROCM_INT:   MIXNUM,MIXEST                              $DES $AES $ERROR $PK $PRED $INFN
ROCM_INT:   NINDR,INDR1,INDR2                          $ERROR $MIX $PK $PRED $INFN
ROCM_INT:   NIREC,NDREC                                $DES $AES $ERROR $MIX $PK $PRED $INFN
ROCM_INT:   NREP,IREP                                  $DES $AES $ERROR $MIX $PK $PRED $INFN
ROCM_REAL:  CDEN_,DEN_                                 $ERROR $PK $PRED $INFN
ROCM_REAL:  CNTID                                      $ERROR $PK $PRED $INFN
ROCM_REAL:  CPREDI_,CRESI_,CWRESI_,EPRED_,ERES_,EWRES_ $PRED $INFN
ROCM_REAL:  CPRED_,CRES_,CWRES_,PREDI_,RESI_,WRESI_    $PRED $INFN
ROCM_REAL:  IIDX                                       $ERROR $PK $PRED $INFN
ROCM_REAL:  MIXP                                       $DES $AES $ERROR $PK $PRED $INFN
ROCM_REAL:  NPDE_,ECWRES_                              $PRED $INFN
ROCM_REAL:  OBJECT                                     $PRED $INFN
ROCM_REAL:  OMEGA                                      $ERROR $PK $PRED
ROCM_REAL:  PRED_,RES_,WRES_,NPRED_,NRES_,NWRES_       $PRED $INFN
ROCM_REAL:  PR_CT                                      $ERROR $PK $PRED $INFN
ROCM_REAL:  PR_Y                                       $ERROR $PK $PRED $INFN
ROCM_REAL:  SETHET,SEOMEG,SESIGM,SETHETR               $PRED $INFN
ROCM_REAL:  TEMPLT                                     $ERROR $MIX $PRED
ROCM_REAL:  THETA,DATA                                 $MIX $PRED $INFN

NONMEM_RESERVED

Some internal NONMEM variables are not directly available in NM-TRAN abbreviated code and normally require verbatim code. A way around this is to put their MODULE definitions in an include file whose name starts with NONMEM_RESERVED (case-insensitive), then include that file at the start of any abbreviated-code block that needs them. After that, NM-TRAN treats those variables as allowed in abbreviated code, so they can be used without verbatim sections.

A list of variables has been compiled. They require judicious use.

The NONMEM_RESERVED_GENERAL file in the ..\util directory has a few of the quite useful variables listed. It needs to be copied to the present run directory so that NM-TRAN has access to it. Note that there may be user-defined variable names in the control stream that inadvertently have the same names as variables in NONMEM_RESERVED_GENERAL, which may cause compiler errors. If so, make a smaller version of NONMEM_RESERVED_GENERAL with a name also starting with "NONMEM_RESERVED" that contains only those reserved variables of interest.

For example, NONMEM_RESERVED_GENERAL contains

1
USE NMBAYES_INT, ONLY: ITER_REPORT,BAYES_EXTRA_REQUEST,BAYES_EXTRA

These variables can be used as shown in example 8:

1
2
3
4
5
6
7
$PK
include nonmem_reserved_general
BAYES_EXTRA_REQUEST=1
 ....
IF(BAYES_EXTRA==1 .AND. ITER_REPORT>=0 .AND. TIME==0.0) THEN
WRITE(50,*) ITER_REPORT,ID,CL,V1,Q,V2
ENDIF

ITER_REPORT contains the present iteration number as reported to the console or NONMEM report file. BAYES_EXTRA and BAYES_EXTRA_REQUEST are described in example8.ctl.

SIZES, FSIZES, PRSIZES

The three modules are used in NONMEM to customize variables' sizes.

File SIZES in the resources directory contains FORTRAN PARAMETER statements giving the default values of symbolic parameters used in source code. Constants from SIZES may be incorporated into the source code by means of the FORTRAN USE statement. Some of these constants describe array sizes.

Size parameters

See below the parameters, default values, and their purpose.

NLUSER=100 Maximum number of logical I/O units user may use.
LTH=100 MAX. NO. OF THETA'S. Dynamically sized, or set by user via $SIZES record
LVR=30 MAX. NO. OF ETA'S + EPS'S. Dynamically sized, or set by user via $SIZES record
LVR2=20 MAX. NO. OF ETA'S PERMITTED WHEN LAPLACIAN METHOD IS USED. Value may be over-ridden by user via $SIZES record Value may be overridden by user via $SIZES record
NO=250 MAX NO. OF OBSERVATION RECORDS / INDIVIDUAL RECORD
MMX=10 MAX NO. OF MIXTURE SUBPOPULATIONS. Dynamically sized, or set by user via $SIZES record
LNP4=4000 SIZE OF COMMON NMPRD4. Value may be over-ridden by user via $SIZES record
LSUPP=4050 MAX. NO. OF POINTS OF SUPPORT WITH NONPARAMETRIC ESTIMATE. Value may be over-ridden by user via $SIZES record
LIM7=2 SIZE OF BUFFER 7. DO NOT GO LOWER THAN 2. Value may be overridden by user via $SIZES record
LWS3=9000 SIZE OF WORKING SPACE 3 AT LEAST AS LARGE AS: NS*NOETAS**2, Where NS is the No. of directions used with the Stieltjes method, and NOETAS is the number of ETA's. Value may be over-ridden by user via $SIZES record
MAXIDS=10000 MAX. NO. OF INDIVIDUALS IN DATA SET. Dynamically sized, or set by user via $SIZES record
LIM1=10000 SIZE OF BUFFER 1. Value may be over-ridden by user via $SIZES record
LIM2=100000 SIZE OF BUFFER 2. Value may be over-ridden by user via $SIZES record
LIM3=10000 SIZE OF BUFFER 3. DO NOT GO LOWER THAN 2. Value may be over-ridden by user via $SIZES record
LIM4=1000 SIZE OF BUFFER 4: LIM4=NUMBER OF SUBJECTS. Value may be overridden by user via $SIZES record
LIM5=200 SIZE OF BUFFER 5. Value may be over-ridden by user via $SIZES record
LIM6=400 SIZE OF BUFFER 6. Value may be over-ridden by user via $SIZES record
LIM8=200 SIZE OF BUFFER 8. Value may be over-ridden by user via $SIZES record
LIM10=100000 SIZE OF BUFFER 10. Value may be over-ridden by user via $SIZES record
LIM11=25 SIZE OF BUFFER 11. Value may be over-ridden by user via $SIZES record
LIM13=1000 SIZE OF BUFFER 13: LIM13=NUMBER OF SUBJECTS. Value may be overridden by user via $SIZES record
LIM15=1000 SIZE OF BUFFER 15: LIM15=NUMBER OF SUBJECTS. Value may be overridden by user via $SIZES record
LIM16=400 SIZE OF BUFFER 16. Value may be over-ridden by user via $SIZES record
LSTEXT=70000 AT LEAST (MAXOMEG*(MAXOMEG+1)/2+MAXPHETA+5)*NUMTEXT. LSTEXT is maximun number of characters to a single line of the raw output file specified by $EST FILE=. where NUMTEXT is number of characters needed to represent a number and its delimiter. For example, FORMAT=,1PE12.5 takes up NUMTEXT=13 characters.
LSFORM=2048 LSFORM is the character length of FORMAT TFORMATL,RFORMATL, pertaining to the full length of LFORMAT, RFORMAT for the $TABLE record.
MAXRECID=200 Maximum number of records in any individual record. For use by PREDPP. Value may be over-ridden by user via $SIZES record
PC=30 MAX. NO. OF COMPARTMENTS MAXIMUM IS 99. Value may be over-ridden by user via $SIZES record
PCT=30 MAX. NO. OF MODEL EVENT TIMES. Value may be over-ridden by user via $SIZES record
MAXNRDS=PC MAXNRDS: MAX. NO. OF DELAY COMPARTMENTS FOR ADVAN16, ADVAN17, and ADVAN18. YOU MAY WANT TO MAKE IT LOWER THAN PC AND SAVE MEMORY Value may be over-ridden by user via $SIZES record
PAST_SIZE=4000 RESOLUTION (NUMBER OF DETAILED POINTS) FOR DELAY COMPARTMENTS STORAGE FOR ADVAN16 AND ADVAN17. Value may be over-ridden by user via $SIZES record
PCT_BIG=10000 MAX. NO. OF MODEL EVENT TIMES THAT NMTRAN CAN PROCESS. PG: SIZE OF GG; MAX. NO. OF BASIC+ADDITIONAL PK PARAMS.^M ! (MAXIMUM IS PCT+99)
PIR=700 SIZE OF COMPACT DA/DP/DT ARRAYS. Value may be over-ridden by user via $SIZES record
PD=50 CHANGED TO INCREASE DATA ITEMS PER DATA RECORD FROM 20 TO 50 IT IS ALSO SIZE OF VDATREC DATA ARRAY. THIS IS DONE TO SEPARATE VDATREC AND VRESWRES VARIABLES/ Dynamically sized, or set by user via $SIZES record.
MAXIC=90 MAXIC: MAXIMUM NUMBER OF ACTIVE INFUSIONS FOR PREDPP. Value may be over-ridden by user via $SIZES record
PDT=500 MAXIMUM NUMBER OF TABLE ITEMS/PRED-DEFINED ITEMS. Value may be over-ridden by user via $SIZES record
PAL=50 NO. OF ADDITIONAL AND LAGGED DOSES. Value may be over-ridden by user via $SIZES record
MAXFCN=1000000 MAX. NO. OF CALLS IN GENERAL NON-LINEAR MODELS IMAX IN MODULE PRCOM_INT OVERRIDES. Value may be over-ridden by user via $SIZES record
STIELTJ_SIZE=101 The next four are for internal use, pertaining to various additional weighted residual diagnostics
MAXXNAME=40
MAXVRESWRES=39
MAXVRESN=9
MXNAME=40
DIMTMP=500 RELATED TO THE NUMBER OF USER-DEFINED VARIABLES. Value may be over-ridden by user via $SIZES record
DIMCNS=500 RELATED TO THE TOTAL NUMBER OF CONSTANTS. Value may be over-ridden by user via $SIZES record
DIMNEW=1000 RELATED TO THE TOTAL NUMBER OF INTERMEDIATE VARIABLES. Value may be over-ridden by user via $SIZES record
DIMQ=99999 ARRAY SIZE FOR LOGICAL CONDITIONS
FL=49 LOGICAL UNIT NUMBER FOR FLIB
DIMVRB=1000 MAX. NO. OF LINES OF VERBATIM CODE
PL=10 MAXIMUM DEPTH OF NESTED IF STATEMENTS
NFUNCX=100 MAXIMUM NUMBER OF USER FUNCTIONS.
NVECX=100 MAXIMUM NUMBER OF USER VECTORS.
MAXOTHER=1000 Maximum number of filenames listed on $SUBROUTINE OTHER=filename
SD=30 LENGTH OF DATA LABEL
FSD=67000 LENGTH OF CONTROL STREAM FILE STRING (ALSO, MULTIPLE LINES CONCATENATED WITH & MAY NOT EXCEED FSD)
FSD1=67001 LENGTH OF CONTROL STREAM FILE STRING
SCO=30 STRING LENGTH OF NUMBER IN $THETA, $OMEGA, $SGIGMA RECORDS.
SDF=24 LENGTH OF DATA ITEM
NFSIZES=50 NUMBER OF ITEMS LISTED IN FSIZES FILE
NPRSIZES=14 NUMBER OF PREDPP ITEMS IN PRSIZES.F90
CONSTANTS FOR Monte Carlo, EM methods
MAX_EXTRA=20 Numer of $EST statements allowed per problem
NPOPMIXMAX=10 Now dynamically sized to MAXIMUM NUMBER OF SUB-POPULATIONS FOR MIXTURE MODELS MMX. Or, set by user via $SIZES record
MAXOMEG=70 Now dynamically sizes to LVR, OR MAXIMUM OMEGA DIMENSION ETAS. Or, set by user via $SIZES record (but should be left alone)
MAXPTHETA=90 Now dynamically sized to LTH, MAXIMUM NUMBER OF THETA, PLUS LOWER TRIANGLE OF SIGMA. THUS, IF NUMBER OF THETAS IS N, AND DIMENSION OF SIGMAS IS M, THEN NEED MAXPTHETA=N + M*(M+1)/2. OR, may be set by user via $SIZES record (but should be left alone).
MAXITER=210 Maximum number of previous iterations to incorporate into Monte Carlo convergence tests Effective CITER is <=MAXITER
ISAMPLEMAX=10 FOR SAEM METHOD, EFFECTIVE ISAMPLE<=ISAMPLEMAX
MAXSIDS=100 MAXIMUM NUMER OF SUPER ID ITEMS IN DATA SET
MAXSIDL=0 MAXIMUM LEVEL OF SUPER IDS. MAXSIDL=0 MEANS NO SUPER IDS. Default 0, until $LEVEL is used, in which case it will be dynamically sized.
MAXFTEXT=100 Maximum of PRDERR message lines
PNM_MAXNODES=100 MAXIMUM NUMBER OF PARALLELIZATION NODES
PNM_BUFFER_SIZE=100000 Internal buffer size, for efficient packaging and sending between processes

more information including descriptions of the buffers may be found in the INTRODUCTION TO NONMEM 7.

Changes with NONMEM v7.2+

There is only one version of SIZES (i.e., there is no longer a SIZES_reg or SIZES_big).

Many NONMEM and NM-TRAN arrays are allocated dynamically at run time.

NM-TRAN creates a subroutine FSIZESR for NONMEM. FSIZESR contains values for some parameters (e.g., LVR) that are exactly what is needed for the current problem, and contains 0's for parameters that NM-TRAN cannot assess. Default values for parameters that are 0 in FSIZESR are obtained by NONMEM from the file SIZES.f90.

Note that file FSIZES is a convenient reference for users but not used by NONMEM. SUBROUTINE FSIZESR in FSUBS is what is actually used during the NONMEM run.

NM-TRAN creates a file PRSIZES.f90 for PREDPP. PREDPP arrays are allocated statically but may be re-compiled at run time using parameters defined in prsizes.f90. Some constants in prsizes are assessed for the current problem; others are copied from default values in SIZES.f90.

The user may override many of the parameter values in FSIZES and prsizes with the $SIZES record. Any value specified by $SIZES will override both the default in SIZES.f90 and the value that NM-TRAN would have specified.

As of NONMEM 7.3, NMTRAN determines the maximum number of observation records (MDV=0) that occur in any subject, among all data files used in the entire control stream file. If this value is greater than the NO value listed in SIZES.f90, it will set NO to this larger size. Thus, users no longer have to be conscientious of sizing the NO parameter. However, there is no guarantee that NMTRAN will correctly assess NO for the entire scope of the control stream file for all types of problems. Should this occur, NONMEM may issue an error, and the user will need to set the NO value with a $SIZES record.

Constants that may be changed with $SIZES record:

1
 LTH LVR LVR2 LPAR MMX MAXIDS NO PD MAXOMEG MAXPTHETA

Consants that are also in prsizes:

1
 PC PCT PIR PD PAL MAXFCN

REFERENCES: Guide Introduction_7

Change buffer sizes

The entire data set is not necessarily stored in memory at one time. It may be stored in a temporary disk file, and parts of it are brought into a memory buffer as needed. Some other large arrays are also stored on disk files. Of course, memory-file swapping of data set information leads to increased computer run-time. So the bigger the buffer size, the shorter may be the run time. The sizes of the NONMEM buffers are set by constants LIM1 to LIM16. The default settings of these constants are set in SIZES.f90. If these constants are not adequate, NONMEM will produce error messages such as the following.

1
2
TOT NO. OF DATA RECS IN BUFFER 1 IS LESS THAN
NO. OF DATA RECS IN INDIVIDUAL REC NO. 1 (IN INDIVIDUAL REC ORDERING)

Unlike most of the other dynamically changeable parameters, NMTRAN does not determine the most appropriate LIM value for the problem, but instructs NONMEM to use the default value specified in resource§IZES.f90 by default. For many problems, the default LIM values are high enough that all of the data may reside in memory without resorting to the buffer files. For large data sets, buffer files are likely to be used. The user may, however, select a LIM value that is different from that specified in sizes.f90, via the $SIZES record in the control stream file, e.g.:

1
$SIZES LIM1=20000

It is not necessary to recompile NONMEM, just rerun the nmfe script, and the appropriate arrays will be allocated according to the user specified LIM value.

It is most desirable to set the LIM value that is the proper size for the run, so that the buffer file does not have to be used. With today’s very large memory computers, this should usually be alright to do without running out of memory. Below is a table describing the minimal allowable value for each LIM, and the value needed to prevent using the buffer file for a particular problem:

LIM Minimum Value In-memory buffer size Buffer file
1 MAXDREC TOTDREC 10,13,20,33
2 MAXDREC TOTDREC 39,14
3 2 MAXIDS 12
4 2 MAXIDS 15,16
5 2 MAXIDS 17,18
6 MAXDREC TOTDREC 7,19
7 2 MAXDREC 21,22
8 2 MAXIDS 23,24
9 (nm74, uses LIM1) MAXDREC TOTDREC For simulation REWIND: 41,42,43,44
10 (nm74) 10 MAXIDS*(NPNIND+1) 45,46
11 2 NPROB 31,32
12 (nm74, uses LIM6) MAXDREC TOTDREC 47,48
13 2 MAXIDS 11
14 NOT USED
15 2 MAXIDS 26,27
16 MAXDREC TOTDREC 26,27

with

  • MAXDREC= Largest number of data records in any one individual record (in any one subject)
  • TOTDREC=total number of data records (lines) in largest data set to be used.
  • NPNIND=Larger of MAXIDS and NPSUPP/NPSUPPE given on $NONP record.
  • NPROB=Total number of problems in the control stream.
  • LVR=Largest number of ETAs in any problem (including those listed in $PRIOR)

As of NM73, the values for MAXDREC and TOTDREC are assessed by NMTRAN, and the user may take advantage of NMTRAN’s evaluation by using the –maxlim option to the nmfe75 script (see below). But NMTRAN may not always correctly assess these values. Thus, it is best if the user ascertains these values ahead of time by inspection of his largest data set among all of the problems to be used by the control stream file, and the largest number of parameters to be used. Then set the LIM values accordingly via the $SIZES record.

One can alternatively assess empirically whether file buffers are used, by beginning the run, allowing perhaps one iteration to transpire, then from another command window do a directory search for FILE*, (or WK* for worker files in parallelization problems, section I.76 Parallel Computing (NM72) If any of the FILExx do not have 0 size, then they are being used. Interrupt the analysis, then increase the appropriate LIM value with the $SIZES record, delete the FILE* in case some remain due to a ctrl-C interrupt, rerun the problem, and look again for any non-zero sized FILE* again. Repeat as needed.

By default (-maxlim=0), NMTRAN will set the LIM values to those listed in sizes.f90, or to the minimum required, whichever is larger. As of NM73, if you set –maxlim=1 on the command line, then LIM1, LIM3, LIM4, LIM13, and LIM15 (those used during estimation, and therefore by workers in a parallelization problem), will be set to the size needed to assure no buffer files are used, and everything is stored in memory, for the particular prolem. If you set –maxlim=2, then LIM1, LIM2, LIM3, LIM4, LIM5, LIM6, LIM7, LIM8, LIM10, LIM11, LIM13, LIM15, and LIM16 are also sized to what is needed to assure that buffer files are not needed.

If you set -maxlim=3, then MAXRECID will also be sized, to MAXDREC, the largest number of records in any individual. MAXRECID sizes arrays involved in storing state variables during partial derivative estimates of SIGMAs and sigma like THETAs, to improve efficiency of the EM and Monte Carlo methods. When setting -maxlim=3, it is preferred to also use –tprdefault, or –prcompile, but not –prdefault, as NMTRAN’s optional resizing of the PREDPP size parameter MAXRECID may conflict with the –prdefault option.

To specify only a subset of LIM’s to be sized by NMTRAN, set –maxlim to a number list enclosed within parantheses, such as –maxlim=(1,2,3,11-16), which will have NMTRAN find size requirements for LIM1, LIM2, LIM3, LIM11, LIM13, LIM15, and LIM16 (LIM12 and LIM14 are not used). Enclosing the option in quotes “–maxlim=(1,2,3,11-16)” is required for some operating systems. For sizing MAXRECID, use the number 17. Setting maxlim=(1-17) is equivalent to –maxlim=3, whereas –maxlim=(3) means to have NMTRAN size only LIM3.

Buffers

A number of contiguous data records are stored in memory at any one time in buffers. If a large enough memory area can be made available for this purpose, then the entire data set can be stored in memory throughout the NONMEM run, and computing costs can be decreased. The following discussion of NONMEM buffers should not be confused with I/O buffers which are used by the operating system.

The size of buffer 1 is related to the number, LIM1, of data records stored in memory at any one time. A large proportion of data sets will consist of no more than 10000 data records. Consequently, the size of buffer 1 has been set to allow LIM1=10000 data records. The least number of data records allowable must exceed the largest number of data records used with any one subject, which rarely will be as large as 10000. Each data record consists of PD 8 byte double precision computer words, and the allocation of memory for buffer 1 is PD*(LIM1+3)*8 bytes.

Buffer 2 holds a number of contiguous residual records. For each data record, NONMEM generates prediction, residual and weighted residual data items, NPDE, EWRES, etc.; these data items comprise the residual record. The default size of buffer 2 is related to the number, LIM2, of residual records, stored in memory at any one time. The size of buffer 2 has been set to allow LIM2=100,000 residual records, for up to 100,000 data records. The least number of residual records allowable must exceed the largest number of data records used with any one subject. Each residual data record consists of 19 eight byte double precision computer words. The allocation of memory for buffer 2 is 19*(LIM2+3)*8 bytes.

Buffer 3 holds a number of contiguous subject header records for input data. The size of buffer 3 is related to the number, LIM3, of subject header records stored in memory at any one time. The default size of buffer 3 has been set to allow LIM3=1000 subject header records. Each subject header record consists of four 8 byte computer words. The allocation of memory for buffer 3 is 4*(LIM3+1)*8 bytes.

Buffer 4 holds a number of contiguous ETA records. For each subject, NONMEM generates values for ETA variables. The size of buffer 4 is related to the number, LIM4, of ETA records stored in memory at any one time. The size of buffer 4 has been set to allow LIM4=1000 ETA records. Each ETA record consists of MMX*LVR 8 byte double precision computer words. The allocation of memory for buffer 4 is MMX*LVR*(LIM4+3)*8.

Buffer 5 holds a number of contiguous mixture model records. For each subject record, NONMEM generates information about the component models of a mixture model; this information constitutes the mixture model record. The size of buffer 5 is related to the number, LIM5, of mixture model records stored in memory at any one time. The default size of buffer 5 has been set to allow LIM5=200 mixture model records. Each mixture model record consists of five 8 byte single precision computer words. The allocation of memory for buffer 5 is (MMX+1)*(LIM5+3)*8 bytes.

Buffer 6 holds a number of contiguous PRED-defined records. For each data record of a given subject record, NONMEM stores the values found in module NMPRD4; these values comprise the NMPRD4 record. The size of buffer 6 is related to the number, LIM6, of PRED-defined records stored in memory at any one time. The size of buffer 6 has been set to allow LIM6=400 PRED-defined records. The least number of PRED-defined records allowable must exceed the largest number of data records used with any one subject, which rarely will be as large as 400. Each PRED-defined record consists of PDT 8 byte double precision computer words. The allocation of memory for buffer 6 is PDT*(LIM6+3)*8 bytes.

Buffer 7 holds a number of contiguous NMPRD4 records for a single individual only. For each problem in a NONMEM run, NONMEM generates information about the problem; this constitutes the problem header record. The size of buffer 7 is related to the number, LIM7, of NMPRD4 records stored in memory at any one time. The size of buffer 7 has been set to allow LIM7=2 NMPRD4 records, which is generally fewer than the number of NMPRD4 records existing for any given subject. Each NMPRD4 record consists of (LIM7+2)*LNP4 8 byte double precision computer words. The default allocation of memory for buffer 7 is 4*LNP4*8 bytes.

The memory allocation of Buffer 8 is (LVR+1)*(LIM8+3) double precision values. The memory allocation of Buffer 10 is (LIM10+3) double precision values.

Buffer 11 holds a number of contiguous problem header records. The size of buffer 11 is related to the number, LIM11, of problem header records stored in memory at any one time. The size of buffer 11 has been set to allow LIM11=25 problem header records. Each problem header record consists of forty-two 8 byte integer computer words. The allocation of memory for buffer 11 is 42*(LIM11+3)*8= 9408 bytes.

The memory allocation of Buffer 13 is 404*(LIM13+3) double precision values.

After NONMEM VI, there are also buffers 15 and 16. The sizes of these buffers are related to constants LIM15 and LIM16. These buffers are used in DAT15 and DAT16. If LIM16 is , not adequate, NONMEM will produce error messages such as the following. TOT NO. OF RESIDUAL RECS IN BUFFER 16 IS LESS THAN NO. OF DATA RECS WITH SOME INDIVIDUAL

The memory allocation of Buffer 15 is LCM110*(LIM15+3) double precision values. The memory allocation of Buffer 16 is MMX*4*(LIM16+3) double precision values.

Buffers 1, 3, 4, 13, and 15 are used during an estimation step. To obtain the fastest analysis, even when the estimation is parallelized, you may want to optimize their LIM sizes.


1

With NONMEM 7.2 and higher, either upper or lower case may be used. Variables in modules whose names start ROCM or PROCM may be used only on the right. Variables in modules whose names start NMPR or PRDPK may always be used on the right and may sometimes be used on the left. Names of modules are reserved and may not be used in any block of abbreviated code.