WinNonmix code

1 messages 1 people Latest: Feb 10, 2005

WinNonmix code

From: Nele Mueller-Plock Date: February 10, 2005 technical
From: "Nele Plock" nplock@zedat.fu-berlin.de Subject: [NMusers] WinNonmix code Date: Thu, February 10, 2005 10:24 am Dear all of you, Im using WinNonmix for population analysis and although this is a discussion group for NONMEM users I hope theres somebody around who can help me with my problem. I have been trying to write a model in WinNonmix for oral dosing with zero order input and first order elimination from the central and peripheral compartment. Every time I try to run the model I get the error message "Unable to calculate the first derivative matrix of the model". Changing the initials does not help. Ive attached the code below. Can somebody tell me if there is an error in the model? Any help would be highly appreciated! Thanks for your help Nele _______________________________ Nele Plock Freie Universitaet Berlin Institute of Pharmacy Dept. Clinical Pharmacy Kelchstr. 31 D-12169 Berlin Germany tel: +49 (0) 30 838-50625 fax: +49 (0) 30 838-50711 email: nplock@zedat.fu-berlin.de ________________________________ The used model is as follows: !****************************************************************************** !* !* PK3.f90 !* !* DESCRIPTION: !* !* This subroutine describes an two compartment model with zero order !* input, first-order output, elimination from a peripheral cmt and lag time. !* !* !* REQUIRED FORTRAN COMPILERS !* !* 1) DIGITAL VISUAL FORTRAN !* 2) MICROSOFT FORTRAN POWERSTATION 4.0 !* !* INPUT: !* !* 1) mode: index describing the type of calculation to be performed. !* !* mode = 2 for predicted values !* mode = 3 for differential equations !* mode = 4 for starting values of differential equations !* mode = 5 for secondary parameters !* !* 2) p: vector containing structural model parameters, where !* !* p(1) = V !* p(2) = cl !* p(3) = ti !* p(4) = tlag !* p(5) = q !* p(6) = v2 !* p(7) = cl2 !* !* 3) con: vector containing constants requried in the model, where !* !* con(1) = # doses !* con(2) = dose 1 !* con(3) = time of dose 1 !* etc. !* subroutine usrmod(mode, funcno, dta, f, p, dz, s, con, x, z, wt, y, objfn) implicit none integer mode, funcno real*8 p(1), con(1), x, f, s(1), z(1), dz(1), dta(1), wt(1), y, objfn real*8 v, cl, k10, t, sum, dose, auc, cmax, tmax, k0, ti, tlag, k12, k21 real*8 k20, INP, q, v2, cl2 integer nn, ndose, k, i v = p(1) cl = p(2) ti = p(3) tlag = p(4) q = p(5) v2 = p(6) cl2 = p(7) if (mode == 2) then f = z(1)/v else if (mode == 5) then else if (mode == 4) then z(1) = 0.0d0 z(2) = 0.0d0 else if (mode == 3) then nn = idint(con(1) + 1.0d-4) call n_dose(nn, x, con, 3, 2, ndose) if (ndose == 0) then f = 0.0d0 else sum = 0.0d0 end if k = 3 k10 = cl / v k12 = q / v k21 = q / v2 k20 = cl2 / v2 do i = 1, ndose t = x - con(k) dose = con(k-1) k0 = dose / ti INP = 0.0d0 if (t < ti) then INP = k0 endif dz(1) = INP - k10 * z(1) - k12 * z(1) + k21 * z(2) dz(2) = k12 * z(1) - k21 * z(2) - k20 * z(2) k = k + 2 end do end if contains subroutine n_dose(nn, t, con, fst, inc, ndose) implicit none integer nn, fst, inc, ndose real*8 t, con(:) integer i, k k = fst do i = 1, nn if (con(k) > t) exit k = k + inc end do ndose = i - 1 end subroutine n_dose end subroutine usrmod _______________________________________________________