I don't know if this is in-line with what you're looking for, but I adjusted the Proportional area to do what I think might be what you're looking for. If I'm off the mark, baybe it'll give you some ideas, if I'm on the mark, great. I also took the liberty to adjust your first initget. You can set it back if you prefer. Here:
(defun calc_neck () ;/ ans total branch main neck wid dep area tally)
(initget "Proportional Cfms")
(setq
ans (getkword
"\nSelect which method to use [<C>fms/Proportional]:"
)
)
(cond
((or (= ans "Cfms") (= ans nil))
(setq total (getreal "\nEnter total CFMS:")
branch (getreal "\nEnter CFMS for this branch:")
main (getreal "\nEnter duct size of main:")
)
(setq neck (* (/ branch total) main))
(prompt (strcat "\nThe neck will be " (rtos neck 5 4) "\""))
)
((= ans "Proportional")
(setq main (getreal "\nEnter Width of Main:")
wid (getreal "\nEnter target branch Width:")
dep (getreal "\nEnter target branch Depth:")
target (* wid dep)
loop t
)
(while loop
(initget 2)
(setq wid (getreal "\nEnter next branch Width:"))
(if (= wid nil)
(setq loop nil)
(progn
(initget 2)
(setq dep (getreal "\nEnter next branch Depth:"))
(if (= dep nil)
(setq loop nil)
(setq area (* wid dep)
tally (+ target area)
neck (* (/ target tally) main)
)
)
)
)
(prompt (strcat "\nThe neck will be " (rtos neck 5 4) "\""))
)
)
)
(princ)
)