___________________________________________________________________
 |                                                                 |
 |                   COMPARTMENT INITIALIZATION BLOCK              |
 |_________________________________________________________________|

 MEANING: Abbreviated code for compartment initialization
 CONTEXT: $PK abbreviated code

 SAMPLE:
 $PK
 IF (A_0FLG.EQ.1) THEN
  ... compartment initialization block ...
 ENDIF

 DISCUSSION:
 A "compartment initialization block" is a block  of  abbreviated  code
 that  sets  the initial state of the kinetic system.  It is to be exe-
 cuted only when A_0FLG=1.  Such a block may be present  only  in  $PK.
 PREDPP sets A_0FLG to 1 at a call to PK with the first event record of
 an individual record (if the data are population data), with the first
 event  record  of  the data set (if the data are single-subject data),
 and with a reset record.  The flag A_0FLAG may  be  found  in  NONMEM-
 PREDPP common PROCMC.

 Special rules apply to such a block.

 1)   Values may be assigned to reserved variables A_0(n), but only  in
      a  compartment  initialization block.  The value of the amount in
      the nth compartment (the nth element of the state vector) is  set
      to  the  value  assigned to A_0(n).   If PK is called with a dose
      record or a dose-reset record where the dose is  input  into  the
      nth  compartment,  this amount is then increased by the amount of
      the (bioavailable) dose.  If a value is assigned to A_0(n),  then
      it is not necessary that values be assigned to any of the remain-
      ing variables A_0(m).  A value to the output  compartment  cannot
      be assigned.  A_INITIAL(n) is a synonym for A_0(n).

 2)   The statement "IF (A_0FLG.EQ.1)" and  the  corresponding  "ENDIF"
      statement  may  be  included explicitly in abbreviated code, thus
      defining an  explicit  compartment  initialization  block.   (See
      example 1 below.)

 3)   A_0(n) may be assigned a value with an  unconditional  statement.
      This defines an implicit compartment initialization block; NMTRAN
      inserts "IF (A_0FLG.EQ.1) ..." before the statement  and  "ENDIF"
      after it.  (See example 2 below.)

 4)   An IF statement testing ICALL and A_0FLG together is not  permit-
      ted.   Instead,  two  separate nested IF statements must be used:
      an IF statement testing ICALL must occur as the outermost  state-
      ment, and an IF statement testing A_0FLG must occur as the inner-
      most statement.  The latter may  be  supplied  by  NM-TRAN  as  a
      result of using an implicit initialization block.  (See example 4
      below.)

 5)   Within an explicit compartment initialization block,  A_0(n)  may
      be  assigned conditionally.  The usual rules apply if A_0(n) is a
      random variable. E.g., A_0(n) cannot be assigned within a  nested
      IF,  and  it  defaults  to  0 if it is assigned conditionally but
      incompletely.  However, in checking for a  nested  IF,  tests  of
      A_0FLG and of ICALL are ignored.  (See example 3 below.)

 6)   User-defined variables may be defined in compartment  initializa-
      tion  blocks,  but  not reserved variables such as basic or addi-
      tional PK parameters.

 EXAMPLES OF USAGE:

 The following two fragments of code yield identical results:

 (1) Explicit compartment initialization block:

 IF (A_0FLG.EQ.1) THEN
  A_0(1)=THETA(1)*(1+ETA(1))
 ENDIF

 (2) Implicit compartment initialization block:

 A_0(1)=THETA(1)*(1+ETA(1))

 (3) This is an example of conditional assignment of  A_0(n)  (X  is  a
 data item or user-defined variable):

 IF (A_0FLG.EQ.1) THEN
     IF (X.EQ.1) THEN
     A_0(1)=THETA(1)*(1+ETA(1))
     ELSE
     A_0(1)=THETA(2)*(1+ETA(2))
     ENDIF
 ENDIF

 (4) Suppose compartment initialization should occur  only  during  the
 Simulation step.  The following is not permitted:

 IF (ICALL.EQ.4.AND.A_0FLG.EQ.1) A_0(1)=THETA(1)*(1+ETA(1))

 Instead, use:

 IF (ICALL.EQ.4) THEN
   IF (A_0FLG.EQ.1) A_0(1)=THETA(1)*(1+ETA(1))
 ENDIF

 or simply

 IF (ICALL.EQ.4) THEN
    A_0(1)=THETA(1)*(1+ETA(1))
 ENDIF

 or even more simply

 IF (ICALL.EQ.4) A_0(1)=THETA(1)*(1+ETA(1))

 (See prdpk3, procmc, pk).

 REFERENCES: None.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     


  
Go to main index.
  
Created by nmhelp2html v. 1.0 written by Niclas Jonsson (Modified by AJB 5/2006,11/2007)