def _calc_taud(w, aod700, p):
<EOL>if np.isscalar(w) and np.isscalar(aod700):<EOL><INDENT>w = np.array([w])<EOL>aod700 = np.array([aod700])<EOL><DEDENT>elif np.isscalar(w):<EOL><INDENT>w = np.full_like(aod700, w)<EOL><DEDENT>elif np.isscalar(aod700):<EOL><INDENT>aod700 = np.full_like(w, aod700)<EOL><DEDENT>aod700_lt_0p05 = np.full_like(aod700, False, dtype='<STR_LIT:bool>')<EOL>np.less(aod700, <NUM_LIT>, where=~np.isnan(aod700), out=aod700_lt_0p05)<EOL>aod700_mask = np.array([aod700_lt_0p05, ~aod700_lt_0p05], dtype=np.int)<EOL>td4 = <NUM_LIT>*w - <NUM_LIT>, -<NUM_LIT>*w + <NUM_LIT><EOL>td3 = -<NUM_LIT>*w + <NUM_LIT>, <NUM_LIT>*w - <NUM_LIT><EOL>td2 = -<NUM_LIT>*w + <NUM_LIT>, -<NUM_LIT>*w + <NUM_LIT><EOL>td1 = <NUM_LIT>*w - <NUM_LIT>, <NUM_LIT>*w - <NUM_LIT><EOL>td0 = <NUM_LIT>*w + <NUM_LIT>, <NUM_LIT>*w + <NUM_LIT><EOL>tdp = -<NUM_LIT>*(<NUM_LIT:1>+aod700)**(-<NUM_LIT>), -<NUM_LIT>*(<NUM_LIT:1>+aod700)**(-<NUM_LIT>)<EOL>tds = (np.array([td0, td1, td2, td3, td4, tdp]) * aod700_mask).sum(axis=<NUM_LIT:1>)<EOL>p0 = <NUM_LIT><EOL>taud = (tds[<NUM_LIT:4>]*aod700**<NUM_LIT:4> + tds[<NUM_LIT:3>]*aod700**<NUM_LIT:3> + tds[<NUM_LIT:2>]*aod700**<NUM_LIT:2> +<EOL>tds[<NUM_LIT:1>]*aod700 + tds[<NUM_LIT:0>] + tds[<NUM_LIT:5>]*np.log(p/p0))<EOL>if len(taud) == <NUM_LIT:1>:<EOL><INDENT>taud = taud[<NUM_LIT:0>]<EOL><DEDENT>return taud<EOL>
Calculate the taud coefficient.