source: sans/XOP_Dev/MonteCarlo/MonteCarlo.r @ 623

Last change on this file since 623 was 623, checked in by srkline, 13 years ago

Updated the MonteCarlo? code to allow 4 processors, but simply copying the function 4 times, and defining 4 different random number generators. Still can't figure out what the problem is with threading a single version, but not worth the effort. Copy/paste is way faster.

Also added some simple (non-optimized) calculations for using Debye's sphere method. These are largely undocumented at this point - so see the code. These are XOP versions of the old ipf code I've used in the past, and stripped of the now-obsolete AltiVec? code (I now lose the 4x speedup from the vectorization...)

File size: 3.0 KB
RevLine 
[435]1#include "XOPStandardHeaders.r"
2
3resource 'vers' (1) {                                           /* XOP version info */
4        0x01, 0x00, final, 0x00, 0,                             /* version bytes and country integer */
5        "1.00",
6        "1.00, © 1993 WaveMetrics, Inc., all rights reserved."
7};
8
9resource 'vers' (2) {                                           /* Igor version info */
10        0x05, 0x00, release, 0x00, 0,                   /* version bytes and country integer */
11        "5.00",
12        "(for Igor 5.00 or later)"
13};
14
15resource 'STR#' (1100) {                                        /* custom error messages */
16        {
17                /* [1] */
18                "WaveAccess requires Igor Pro 5.0 or later.",
19                /* [2] */
20                "Wave does not exist.",
21                /* [3] */
22                "This function requires a 3D wave.",
23        }
24};
25
26/* no menu item */
27
28resource 'XOPI' (1100) {
29        XOP_VERSION,                                                    // XOP protocol version.
30        DEV_SYS_CODE,                                                   // Development system information.
31        0,                                                                              // Obsolete - set to zero.
32        0,                                                                              // Obsolete - set to zero.
33        XOP_TOOLKIT_VERSION,                                    // XOP Toolkit version.
34};
35
36resource 'XOPF' (1100) {
37        {
38                "Monte_SANSX",          /* function name */
39                F_UTIL | F_THREADSAFE | F_EXTERNAL,                                     /* function category == UTILITY */
40                NT_FP64,                                                        /* return value type */                 
41                {
42                        NT_FP64 + WAVE_TYPE,
43                        NT_FP64 + WAVE_TYPE,
44                        NT_FP64 + WAVE_TYPE,
45                        NT_FP64 + WAVE_TYPE,
46                        NT_FP64 + WAVE_TYPE,
47                        NT_FP64 + WAVE_TYPE,
48                        NT_FP64 + WAVE_TYPE,
49                        NT_FP64 + WAVE_TYPE,
50                },
[458]51                "Monte_SANSX2",         /* function name */
52                F_UTIL | F_THREADSAFE | F_EXTERNAL,                                     /* function category == UTILITY */
53                NT_FP64,                                                        /* return value type */                 
54                {
55                        NT_FP64 + WAVE_TYPE,
56                        NT_FP64 + WAVE_TYPE,
57                        NT_FP64 + WAVE_TYPE,
58                        NT_FP64 + WAVE_TYPE,
59                        NT_FP64 + WAVE_TYPE,
60                        NT_FP64 + WAVE_TYPE,
61                        NT_FP64 + WAVE_TYPE,
62                        NT_FP64 + WAVE_TYPE,
63                },
[435]64               
[623]65                "DebyeSpheresX",                                                /* function name */
66                F_UTIL | F_THREADSAFE | F_EXTERNAL,                             /* function category == Utility */
67                NT_FP64,                                                        /* return value type */ 
68                {
69                                                NT_FP64,                        /* single precision wave (q-wave) */
70                        NT_FP32 + WAVE_TYPE,                            /* single precision wave (x coordinates) */
71                        NT_FP32 + WAVE_TYPE,                            /* single precision wave (y coordinates) */
72                        NT_FP32 + WAVE_TYPE,                            /* single precision wave (z coordinates) */
73                        NT_FP32 + WAVE_TYPE,                            /* single precision wave (rho at xyz) */
74                        NT_FP64,                                // Rprimary, the primary sphere radius
75                        NT_FP64,                                // grid, should be passed as 0.62*Rprimary
76                },
77               
78                "Monte_SANSX3",         /* function name */
79                F_UTIL | F_THREADSAFE | F_EXTERNAL,                                     /* function category == UTILITY */
80                NT_FP64,                                                        /* return value type */                 
81                {
82                        NT_FP64 + WAVE_TYPE,
83                        NT_FP64 + WAVE_TYPE,
84                        NT_FP64 + WAVE_TYPE,
85                        NT_FP64 + WAVE_TYPE,
86                        NT_FP64 + WAVE_TYPE,
87                        NT_FP64 + WAVE_TYPE,
88                        NT_FP64 + WAVE_TYPE,
89                        NT_FP64 + WAVE_TYPE,
90                },
91               
92                "Monte_SANSX4",         /* function name */
93                F_UTIL | F_THREADSAFE | F_EXTERNAL,                                     /* function category == UTILITY */
94                NT_FP64,                                                        /* return value type */                 
95                {
96                        NT_FP64 + WAVE_TYPE,
97                        NT_FP64 + WAVE_TYPE,
98                        NT_FP64 + WAVE_TYPE,
99                        NT_FP64 + WAVE_TYPE,
100                        NT_FP64 + WAVE_TYPE,
101                        NT_FP64 + WAVE_TYPE,
102                        NT_FP64 + WAVE_TYPE,
103                        NT_FP64 + WAVE_TYPE,
104                },
105               
[435]106        }
107};
Note: See TracBrowser for help on using the repository browser.