Salome HOME
Update copyrights
[samples/genericsolver.git] / resources / yacsgen_example.py
1 #!/usr/bin/env python
2 #
3 #  Copyright (C) 2009-2015 EDF R&D
4 #
5 #  This library is free software; you can redistribute it and/or
6 #  modify it under the terms of the GNU Lesser General Public
7 #  License as published by the Free Software Foundation; either
8 #  version 2.1 of the License.
9 #
10 #  This library is distributed in the hope that it will be useful,
11 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 #  Lesser General Public License for more details.
14 #
15 #  You should have received a copy of the GNU Lesser General Public
16 #  License along with this library; if not, write to the Free Software
17 #  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
18 #
19 #  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #
21 #  $Id$
22 #
23
24 from module_generator import *
25
26 # This example shows how to create a component used as a calculation code for OpenTURNS
27 # with YACSGEN tool. This example is very basic. See YACSGEN documentation and DEVIATION
28 # component for more advanced features.
29
30 # edit those values to reflect your environment:
31 prerequisites_script_path = "/path/to/prerequisites.sh"
32 kernel_path = "/path/to/KERNEL_install" 
33 openturns_module_path = "/path/to/OPENTURNS_install" 
34 eficas_module_path = "/path/to/EFICAS_install" 
35
36 c1 = PYComponent("EXAMPLE_COMPONENT",
37                  services=[
38                            Service("Init",
39                                    inport=[("studyID", "long"),
40                                            ("detCaseEntry", "string")],
41                                    body="""
42 # Those values should be initialized from the deterministic case in the study
43 # (see component DEVIATION for an example)
44 self.deterministicValues = {'E' : 210.e9,
45                             'F' : 1000.,
46                             'L' : 1.5,
47                             'I' : 2.e-6}
48 """,
49                                   ),
50                            Service("Exec",
51                                    inport=[("paramInput", "SALOME_TYPES/ParametricInput"),],
52                                    outport=[("paramOutput", "SALOME_TYPES/ParametricOutput")],
53                                    defs = "from salome.kernel.parametric.compo_utils import \
54     create_input_dict, create_normal_parametric_output, create_error_parametric_output",
55                                    body="""
56 # This section creates the point to evaluate "inputDict" 
57 inputDict = create_input_dict(self.deterministicValues, paramInput)
58
59 # This section should be modified according to your needs (it's the evaluation itself)
60 if inputDict["L"] <= 0: # Test for an invalid parameter and return an error in this case
61     paramOutput = create_error_parametric_output("Invalid value: L must be positive")
62 else:
63     outputDict = {}
64     outputDict["dev"] = (inputDict["F"] * inputDict["L"] * inputDict["L"] * inputDict["L"]) / \
65                         (3. * inputDict["E"] * inputDict["I"])
66
67 # This section builds the returned object
68     paramOutput = create_normal_parametric_output(outputDict, paramInput)
69 """,
70                                   ),
71                            Service("Finalize"),
72                            Service("GetFilesToTransfer",
73                                    inport=[("studyID", "long"),
74                                            ("detCaseEntry", "string")],
75                                    outport=[("inputFiles", "stringvec"),
76                                             ("outputFiles", "stringvec")],
77                                    body="""
78 inputFiles = []
79 outputFiles = []
80 return (inputFiles, outputFiles)
81 """,
82                                   ),
83                           ]
84                 )
85
86 m = Module("EXAMPLE_MODULE",components=[c1],prefix="./EXAMPLE_MODULE_INSTALL")
87
88 context={'update':1,
89          "prerequisites":prerequisites_script_path,
90          "kernel":kernel_path
91          }
92 g=Generator(m,context)
93 g.generate()
94 g.bootstrap()
95 g.configure()
96 g.make()
97 g.install()
98 g.make_appli("example_appli",
99              altmodules={"OPENTURNS":openturns_module_path,
100                          "EFICAS":eficas_module_path})