MoDeNa  1.0
Software framework facilitating sequential multi-scale modelling
fullerEtAlDiffusion.py
1 
31 
32 
39 
40 from modena import CFunction, IndexSet, ForwardMappingModel
41 import modena.Strategy as Strategy
42 
43 species = IndexSet(
44  name= 'species',
45  names= [ 'H2O', 'N2', 'SO2' ]
46 )
47 
48 
49 f = CFunction(
50  inputs={
51  'T': { 'min': 0, 'max': 9e99 },
52  'p': { 'min': 0, 'max': 9e99 },
53  },
54  outputs={
55  'D[A]': { 'min': 0, 'max': 9e99, 'argPos': 0 },
56  },
57  parameters={
58  'W[A]': { 'min': 0, 'max': 9e99, 'argPos': 0 },
59  'V[A]': { 'min': 0, 'max': 9e99, 'argPos': 1 },
60  'W[B]': { 'min': 0, 'max': 9e99, 'argPos': 2 },
61  'V[B]': { 'min': 0, 'max': 9e99, 'argPos': 3 },
62  },
63  indices={
64  'A': species,
65  'B': species,
66  },
67  Ccode= '''
68 #include "modena.h"
69 #include "math.h"
70 
71 void fullerEtAlDiffusion
72 (
73  const modena_model_t* model,
74  const double* inputs,
75  double *outputs
76 )
77 {
78  {% block variables %}{% endblock %}
79 
80  const double WA = parameters[0];
81  const double VA = parameters[1];
82  const double WB = parameters[2];
83  const double VB = parameters[3];
84 
85  outputs[0] = 1.011e-4*pow(T, 1.75)*pow(1.0/WA + 1.0/WB, 1.0/2.0);
86  outputs[0] /= p*(pow(pow(VA, 1.0/3.0) + pow(VB, 1.0/3.0), 2.0));
87 }
88 ''',
89 )
90 
91 m = ForwardMappingModel(
92  _id= 'fullerEtAlDiffusion[A=H2O,B=N2]',
93  surrogateFunction= f,
94  substituteModels= [ ],
95  parameters= [ 16, 9.44, 14, 11.38 ],
96 )