transformed_io¶
Three models, A, B, & C, pass messages which are transformed based on YAML parameters. Model A receives input from a tab delimited table and sends output to both models B & C. The output to each model is transformed in different ways controlled by the transform comm model parameter. Models B & C both send output to tables.
C Version¶
Model Code:
1#include <stdio.h>
2
3int modelA_function(float in_val, float* out_val) {
4 out_val[0] = in_val;
5 printf("modelA_function(%f) = %f\n", in_val, *out_val);
6 return 0;
7}
1#include <stdio.h>
2#include <math.h>
3
4int modelB_function(float in_val, float* in_val_copy, float* out_val) {
5 in_val_copy[0] = in_val;
6 out_val[0] = 3 * in_val;
7 printf("modelB_function(%f) = %f\n", in_val, *out_val);
8 return 0;
9}
1#include <stdio.h>
2#include <math.h>
3
4int modelC_function(float in_val, float* in_val_copy, float* out_val) {
5 in_val_copy[0] = in_val;
6 out_val[0] = 2 * in_val;
7 printf("modelC_function(%f) = %f\n", in_val, *out_val);
8 return 0;
9}
Model YAML:
1models:
2 - name: c_modelA
3 language: c
4 args: ./src/transformed_io_modelA.c
5 function: modelA_function
6 outputs:
7 - name: c_modelA:output
8 vars:
9 - out_val
10
11 - name: c_modelB
12 language: c
13 args: ./src/transformed_io_modelB.c
14 function: modelB_function
15 outputs:
16 - name: c_modelB:output
17 vars:
18 - in_val_copy
19 - out_val
20
21 - name: c_modelC
22 language: c
23 args: ./src/transformed_io_modelC.c
24 function: modelC_function
25 outputs:
26 - name: c_modelC:output
27 vars:
28 - in_val_copy
29 - out_val
30
31connections:
32 - input: ./Input/input.txt # Connection between file and model A input
33 output: c_modelA:input
34 filetype: table
35 - input: c_modelA:output # Connection between model A output & model B input
36 outputs:
37 - name: c_modelB:input
38 transform:
39 statement: "%x%*5"
40 - name: c_modelC:input
41 transform:
42 function: ./src/transformed_io_modelC.py:transform_function
43 - inputs: c_modelB:output # Connection between model B output and file
44 output: ./outputB.txt
45 filetype: table
46 field_names: InputMassRate,OuputMassRate
47 field_units: g/s,g/s
48 format_str: "%.1lf\t%.1lf\n"
49 - inputs: c_modelC:output # Connection between model C output and file
50 output: ./outputC.txt
51 filetype: table
52 field_names: InputMassRate,OuputMassRateDensity
53 field_units: g/(s*(cm**2)),g/(s*(cm**2))
54 format_str: "%.1lf\t%.1lf\n"
C++ Version¶
Model Code:
1#include <iostream>
2
3int modelA_function(float in_val, float &out_val) {
4 out_val = in_val;
5 std::cout << "modelA_function(" << in_val << ") = " << out_val << std::endl;
6 return 0;
7}
1#include <iostream>
2#include <math.h>
3
4int modelB_function(float in_val, float &in_val_copy, float &out_val) {
5 in_val_copy = in_val;
6 out_val = 3 * in_val;
7 std::cout << "modelB_function(" << in_val << ") = " << out_val << std::endl;
8 return 0;
9}
1#include <iostream>
2#include <math.h>
3
4int modelC_function(float in_val, float &in_val_copy, float &out_val) {
5 in_val_copy = in_val;
6 out_val = 2 * in_val;
7 std::cout << "modelC_function(" << in_val << ") = " << out_val << std::endl;
8 return 0;
9}
Model YAML:
1models:
2 - name: cpp_modelA
3 language: cpp
4 args: ./src/transformed_io_modelA.cpp
5 function: modelA_function
6 outputs:
7 - name: cpp_modelA:output
8 vars:
9 - out_val
10
11 - name: cpp_modelB
12 language: cpp
13 args: ./src/transformed_io_modelB.cpp
14 function: modelB_function
15 outputs:
16 - name: cpp_modelB:output
17 vars:
18 - in_val_copy
19 - out_val
20
21 - name: cpp_modelC
22 language: cpp
23 args: ./src/transformed_io_modelC.cpp
24 function: modelC_function
25 outputs:
26 - name: cpp_modelC:output
27 vars:
28 - in_val_copy
29 - out_val
30
31connections:
32 - input: ./Input/input.txt # Connection between file and model A input
33 output: cpp_modelA:input
34 filetype: table
35 - input: cpp_modelA:output # Connection between model A output & model B input
36 outputs:
37 - name: cpp_modelB:input
38 transform:
39 statement: "%x%*5"
40 - name: cpp_modelC:input
41 transform:
42 function: ./src/transformed_io_modelC.py:transform_function
43 - inputs: cpp_modelB:output # Connection between model B output and file
44 output: ./outputB.txt
45 filetype: table
46 field_names: InputMassRate,OuputMassRate
47 field_units: g/s,g/s
48 format_str: "%.1lf\t%.1lf\n"
49 - inputs: cpp_modelC:output # Connection between model C output and file
50 output: ./outputC.txt
51 filetype: table
52 field_names: InputMassRate,OuputMassRateDensity
53 field_units: g/(s*(cm**2)),g/(s*(cm**2))
54 format_str: "%.1lf\t%.1lf\n"
Fortran Version¶
Model Code:
1function modelA_function(in_val) result(out_val)
2 real(kind=4), intent(in) :: in_val
3 real(kind=4) :: out_val
4 out_val = in_val
5 write(*, '("modelA_function(",F10.5,") = ",F10.5)') in_val, out_val
6end function modelA_function
1subroutine modelB_function(in_val, in_val_copy, out_val)
2 real(kind=4), intent(in) :: in_val
3 real(kind=4), intent(out) :: in_val_copy
4 real(kind=4), intent(out) :: out_val
5 in_val_copy = in_val
6 out_val = 3 * in_val
7 write(*, '("modelB_function(",F10.5,") = ",F10.5)') in_val, out_val
8end subroutine modelB_function
1subroutine modelC_function(in_val, in_val_copy, out_val)
2 real(kind=4), intent(in) :: in_val
3 real(kind=4), intent(out) :: in_val_copy
4 real(kind=4), intent(out) :: out_val
5 in_val_copy = in_val
6 out_val = 2 * in_val
7 write(*, '("modelC_function(",F10.5,") = ",F10.5)') in_val, out_val
8end subroutine modelC_function
Model YAML:
1models:
2 - name: fortran_modelA
3 language: fortran
4 args: ./src/transformed_io_modelA.f90
5 function: modelA_function
6
7 - name: fortran_modelB
8 language: fortran
9 args: ./src/transformed_io_modelB.f90
10 function: modelB_function
11
12 - name: fortran_modelC
13 language: fortran
14 args: ./src/transformed_io_modelC.f90
15 function: modelC_function
16
17connections:
18 - input: ./Input/input.txt # Connection between file and model A input
19 output: fortran_modelA:input
20 filetype: table
21 - input: fortran_modelA:output # Connection between model A output & model B input
22 outputs:
23 - name: fortran_modelB:input
24 transform:
25 statement: "%x%*5"
26 - name: fortran_modelC:input
27 transform:
28 function: ./src/transformed_io_modelC.py:transform_function
29 - input: fortran_modelB:output # Connection between model B, function 1 output and file
30 output: ./outputB.txt
31 filetype: table
32 field_names: InputMassRate,OuputMassRate
33 field_units: g/s,g/s
34 format_str: "%.1lf\t%.1lf\n"
35 - input: fortran_modelC:output # Connection between model C, function 1 output and file
36 output: ./outputC.txt
37 filetype: table
38 field_names: InputMassRate,OuputMassRateDensity
39 field_units: g/(s*(cm**2)),g/(s*(cm**2))
40 format_str: "%.1lf\t%.1lf\n"
Julia Version¶
Model Code:
1using Printf
2function modelA_function(in_val)
3 out_val = in_val
4 @printf("modelA_function(%s) = %s\n", in_val, out_val)
5 return out_val
6end
1using Printf
2function modelB_function(in_val)
3 out_val = 3 * in_val
4 @printf("modelB_function(%s) = %s\n", in_val, out_val)
5 return in_val, out_val
6end
1using Printf
2function modelC_function(in_val)
3 out_val = 2 * in_val
4 @printf("modelC_function(%s) = %s\n", in_val, out_val)
5 return in_val, out_val
6end
Model YAML:
1models:
2 - name: julia_modelA
3 language: julia
4 args: ./src/transformed_io_modelA.jl
5 function: modelA_function
6
7 - name: julia_modelB
8 language: julia
9 args: ./src/transformed_io_modelB.jl
10 function: modelB_function
11
12 - name: julia_modelC
13 language: julia
14 args: ./src/transformed_io_modelC.jl
15 function: modelC_function
16
17connections:
18 - input: ./Input/input.txt # Connection between file and model A input
19 output: julia_modelA:input
20 filetype: table
21 - input: julia_modelA:output # Connection between model A output & model B input
22 outputs:
23 - name: julia_modelB:input
24 transform:
25 statement: "%x%*5"
26 - name: julia_modelC:input
27 transform:
28 function: ./src/transformed_io_modelC.py:transform_function
29 - input: julia_modelB:output # Connection between model B, function 1 output and file
30 output: ./outputB.txt
31 filetype: table
32 field_names: InputMassRate,OuputMassRate
33 field_units: g/s,g/s
34 format_str: "%.1lf\t%.1lf\n"
35 - input: julia_modelC:output # Connection between model C, function 1 output and file
36 output: ./outputC.txt
37 filetype: table
38 field_names: InputMassRate,OuputMassRateDensity
39 field_units: g/(s*(cm**2)),g/(s*(cm**2))
40 format_str: "%.1lf\t%.1lf\n"
Matlab Version¶
Model Code:
1function out_val = transformed_io_modelA(in_val)
2 out_val = in_val;
3 disp(sprintf('modelA_function(%f) = %f', in_val, out_val));
4end
1function [in_val, out_val] = transformed_io_modelB(in_val)
2 out_val = 3 * in_val;
3 disp(sprintf('modelB_function(%f) = %f', in_val, out_val));
4end
1function [in_val, out_val] = transformed_io_modelC(in_val)
2 out_val = 2 * in_val;
3 disp(sprintf('modelC_function(%f) = %f', in_val, out_val));
4end
Model YAML:
1models:
2 - name: matlab_modelA
3 language: matlab
4 args: ./src/transformed_io_modelA.m
5 function: transformed_io_modelA
6
7 - name: matlab_modelB
8 language: matlab
9 args: ./src/transformed_io_modelB.m
10 function: transformed_io_modelB
11
12 - name: matlab_modelC
13 language: matlab
14 args: ./src/transformed_io_modelC.m
15 function: transformed_io_modelC
16
17connections:
18 - input: ./Input/input.txt # Connection between file and model A input
19 output: matlab_modelA:input
20 filetype: table
21 - input: matlab_modelA:output # Connection between model A output & model B input
22 outputs:
23 - name: matlab_modelB:input
24 transform:
25 statement: "%x%*5"
26 - name: matlab_modelC:input
27 transform:
28 function: ./src/transformed_io_modelC.py:transform_function
29 - input: matlab_modelB:output # Connection between model B, function 1 output and file
30 output: ./outputB.txt
31 filetype: table
32 field_names: InputMassRate,OuputMassRate
33 field_units: g/s,g/s
34 format_str: "%.1lf\t%.1lf\n"
35 - input: matlab_modelC:output # Connection between model C, function 1 output and file
36 output: ./outputC.txt
37 filetype: table
38 field_names: InputMassRate,OuputMassRateDensity
39 field_units: g/(s*(cm**2)),g/(s*(cm**2))
40 format_str: "%.1lf\t%.1lf\n"
Python Version¶
Model Code:
1def modelA_function(in_val):
2 out_val = in_val
3 print("modelA_function(%s) = %s" % (in_val, out_val))
4 return out_val
1def modelB_function(in_val):
2 out_val = 3 * in_val
3 print("modelB_function(%s) = %s" % (in_val, out_val))
4 return in_val, out_val
1from yggdrasil import units
2
3
4def modelC_function(in_val):
5 out_val = 2 * in_val
6 print("modelC_function(%s) = %s" % (in_val, out_val))
7 return in_val, out_val
8
9
10def transform_function(in_val):
11 return (in_val / units.add_units(10, 'cm**2'))
Model YAML:
1models:
2 - name: python_modelA
3 language: python
4 args: ./src/transformed_io_modelA.py
5 function: modelA_function
6
7 - name: python_modelB
8 language: python
9 args: ./src/transformed_io_modelB.py
10 function: modelB_function
11
12 - name: python_modelC
13 language: python
14 args: ./src/transformed_io_modelC.py
15 function: modelC_function
16
17connections:
18 - input: ./Input/input.txt # Connection between file and model A input
19 output: python_modelA:input
20 filetype: table
21 - input: python_modelA:output # Connection between model A output & model B input
22 outputs:
23 - name: python_modelB:input
24 transform:
25 statement: "%x%*5"
26 - name: python_modelC:input
27 transform:
28 function: ./src/transformed_io_modelC.py:transform_function
29 - input: python_modelB:output # Connection between model B, function 1 output and file
30 output: ./outputB.txt
31 filetype: table
32 field_names: InputMassRate,OuputMassRate
33 field_units: g/s,g/s
34 format_str: "%.1lf\t%.1lf\n"
35 - input: python_modelC:output # Connection between model C, function 1 output and file
36 output: ./outputC.txt
37 filetype: table
38 field_names: InputMassRate,OuputMassRateDensity
39 field_units: g/(s*(cm**2)),g/(s*(cm**2))
40 format_str: "%.1lf\t%.1lf\n"
R Version¶
Model Code:
1modelA_function <- function(in_val) {
2 out_val <- in_val
3 print(sprintf("modelA_function(%f) = %f", in_val, out_val))
4 return(out_val)
5}
1modelB_function <- function(in_val) {
2 out_val <- 3 * in_val
3 print(sprintf("modelB_function(%f) = %f", in_val, out_val))
4 return(list(in_val, out_val))
5}
1modelC_function <- function(in_val) {
2 out_val <- 2 * in_val
3 print(sprintf("modelC_function(%f) = %f", in_val, out_val))
4 return(list(in_val, out_val))
5}
Model YAML:
1models:
2 - name: R_modelA
3 language: R
4 args: ./src/transformed_io_modelA.R
5 function: modelA_function
6
7 - name: R_modelB
8 language: R
9 args: ./src/transformed_io_modelB.R
10 function: modelB_function
11
12 - name: R_modelC
13 language: R
14 args: ./src/transformed_io_modelC.R
15 function: modelC_function
16
17connections:
18 - input: ./Input/input.txt # Connection between file and model A input
19 output: R_modelA:input
20 filetype: table
21 - input: R_modelA:output # Connection between model A output & model B input
22 outputs:
23 - name: R_modelB:input
24 transform:
25 statement: "%x%*5"
26 - name: R_modelC:input
27 transform:
28 function: ./src/transformed_io_modelC.py:transform_function
29 - input: R_modelB:output # Connection between model B, function 1 output and file
30 output: ./outputB.txt
31 filetype: table
32 field_names: InputMassRate,OuputMassRate
33 field_units: g/s,g/s
34 format_str: "%.1lf\t%.1lf\n"
35 - input: R_modelC:output # Connection between model C, function 1 output and file
36 output: ./outputC.txt
37 filetype: table
38 field_names: InputMassRate,OuputMassRateDensity
39 field_units: g/(s*(cm**2)),g/(s*(cm**2))
40 format_str: "%.1lf\t%.1lf\n"