Changeset e44432d in sasmodels for sasmodels/generate.py
- Timestamp:
- Oct 19, 2018 5:46:26 PM (6 years ago)
- Branches:
- master, core_shell_microgels, magnetic_model, ticket-1257-vesicle-product, ticket_1156, ticket_1265_superball, ticket_822_more_unit_tests
- Children:
- be43e39
- Parents:
- 2586ab72
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
sasmodels/generate.py
r2773c66 re44432d 715 715 return False 716 716 717 _SHELL_VOLUME_PATTERN = re.compile(r"(^|\s)double\s+shell_volume[(]", flags=re.MULTILINE) 718 def contains_shell_volume(source): 719 # type: (List[str]) -> bool 720 """ 721 Return True if C source defines "void Fq(". 722 """ 723 for code in source: 724 m = _SHELL_VOLUME_PATTERN.search(code) 725 if m is not None: 726 return True 727 return False 728 717 729 def _add_source(source, code, path, lineno=1): 718 730 """ … … 767 779 pars = partable.form_volume_parameters 768 780 source.append(_gen_fn(model_info, 'form_volume', pars)) 781 if isinstance(model_info.shell_volume, str): 782 pars = partable.form_volume_parameters 783 source.append(_gen_fn(model_info, 'shell_volume', pars)) 769 784 if isinstance(model_info.Iq, str): 770 785 pars = [q] + partable.iq_parameters … … 779 794 pars = [qa, qb, qc] + partable.iq_parameters 780 795 source.append(_gen_fn(model_info, 'Iqabc', pars)) 796 797 # Check for shell_volume in source 798 is_hollow = contains_shell_volume(source) 781 799 782 800 # What kind of 2D model do we need? Is it consistent with the parameters? … … 802 820 for p in partable.kernel_parameters)) 803 821 # Define the function calls 804 call_effective_radius = "#define CALL_EFFECTIVE_RADIUS( mode,v) 0.0"822 call_effective_radius = "#define CALL_EFFECTIVE_RADIUS(_mode, _v) 0.0" 805 823 if partable.form_volume_parameters: 806 824 refs = _call_pars("_v.", partable.form_volume_parameters) 807 call_volume = "#define CALL_VOLUME(_v) form_volume(%s)"%(",".join(refs)) 825 if is_hollow: 826 call_volume = "#define CALL_VOLUME(_form, _shell, _v) do { _form = form_volume(%s); _shell = shell_volume(%s); } while (0)"%((",".join(refs),)*2) 827 else: 828 call_volume = "#define CALL_VOLUME(_form, _shell, _v) do { _form = _shell = form_volume(%s); } while (0)"%(",".join(refs)) 808 829 if model_info.effective_radius_type: 809 call_effective_radius = "#define CALL_EFFECTIVE_RADIUS( mode, _v) effective_radius(mode, %s)"%(",".join(refs))830 call_effective_radius = "#define CALL_EFFECTIVE_RADIUS(_mode, _v) effective_radius(_mode, %s)"%(",".join(refs)) 810 831 else: 811 832 # Model doesn't have volume. We could make the kernel run a little 812 833 # faster by not using/transferring the volume normalizations, but 813 834 # the ifdef's reduce readability more than is worthwhile. 814 call_volume = "#define CALL_VOLUME( v) 1.0"835 call_volume = "#define CALL_VOLUME(_form, _shell, _v) do { _form = _shell = 1.0; } while (0)" 815 836 source.append(call_volume) 816 837 source.append(call_effective_radius)
Note: See TracChangeset
for help on using the changeset viewer.