;****************************************************************************** ;+ ; NAME: ; RANDOMCOVAR ; ; PURPOSE: ; Generates correlated multivariate random deviates using ; RANDLIB 1.3 (University of Texas MD Anderson Cancer Center) ; ; CALLING SEQUENCE: ; Result = RANDOMCOVAR(Mean, Covar, Ndeviates) ; ; INPUTS: ; Mean: Array of mean parameter values ; Covar: Covariance matrix ; Ndeviates: Number of deviates to return for each parameter ; ; OUTPUTS: ; Result: Ndeviates x Npar array where Npar = N_ELEMENTS(Mean) ; ; EXAMPLE: ; deviates = RANDOMCOVAR([10., 10.], [10., 5., 5., 10.], 1000) ; ; COMMENTS: ; This routine calls the shared library randomcovar.so, which ; must be located in the current directory. In future updates ; this library will be moved to a standard directory and grabbed ; via an environment variable. ; ; MODIFICATION HISTORY: ; Written by: R. Marzke, 11/16/2006 ;- ;****************************************************************************** function randomcovar, mean, covar, ndeviates np = long(n_elements(mean)) np2 = np^2 ndevarr = np * ndeviates ccovar = fltarr(np2) ccovar[*] = covar work = fltarr(np) temp = fltarr(np) nparam = 1 + np + np2 param = fltarr(nparam) deviates = fltarr(ndevarr) success = call_external('randomcovar.so', 'randomcovar', $ float(mean), ccovar, long(np), long(ndeviates), $ work, temp, param, deviates, $ /AUTO_GLUE) dev2d = fltarr(np, ndeviates) dev2d[*] = deviates return, transpose(dev2d) end