From 1875b7b5419926e6e58a6bbc1c166efd6e8aac3b Mon Sep 17 00:00:00 2001 From: "jacques.morice" Date: Fri, 22 Nov 2024 09:39:49 +0100 Subject: [PATCH 1/5] fix #19, update ex10 --- README.md | 49 +++++++++++++++++++++++++++---------------- ex10.c | 52 +++++++++++++++++++++++++++------------------- ex10.yml | 31 ++++++++++++++------------- solutions/ex10.yml | 9 +++++--- 4 files changed, 85 insertions(+), 56 deletions(-) diff --git a/README.md b/README.md index fba05c2..ef60fda 100644 --- a/README.md +++ b/README.md @@ -379,6 +379,9 @@ of processes used. You can easily check if the files are the same by running: ### Ex10. Post-processing the data in python +\attention +You need to have a version %PDI with the \ref pycall_plugin "Pycall plugin" to do this exercise. + In this exercise, you will once again modify the YAML file only and use python to post-process the data in situ before writing it to HDF5. Here, you will write the square root of the raw data to HDF5 instead of the @@ -386,35 +389,45 @@ data itself. * Examine the YAML file and compile the code. +* Load the \ref pycall_plugin "Pycall plugin" and enable this plugin when the `loop` event is triggered. + +Some variables of the python script inside `ex10.yml` are not defined. +The `with` directive of this plugin allows to specify input variables (parameters) to pass to Python as a set of "$-expressions". +These parameters can be given as multiple blocks. + +* Add a `with` block with the missing parameter to let the Python code process + the data exposed in `main_field` for event `loop`. + +* Use the keyword `exec` of \ref pycall_plugin "Pycall plugin" and decomment the python script. + Notice that the Decl'HDF5 configuration was simplified, no memory selection is -applied, the when condition disappeared. +applied, the `when` condition disappeared because it is done in the python script: +```python + if 0 < iter_id < 4: + transformed_field = np.sqrt(source_field[1:-1,1:-1]) + pdi.expose('transformed_field', transformed_field, pdi.OUT) +``` +The last line of the python script allows to expose the transformed field to %PDI. Moreover, this data is known to %PDI in this call. + +* Modify the Decl'HDF5 configuration to write the new data `transformed_field` exposed from Python. + +\attention The dataset name is however explicitly specified now because it does not match the %PDI variable name anymore, you will instead write a new variable exposed from python. -The `pycall` section has been added to load the -\ref pycall_plugin "Pycall plugin". -It executes the provided code when the "loop" event is triggered. -The `with` section specifies the variables (parameters) to pass to Python as a -set of "$-expressions". -The provided code again exposes its result to %PDI and multiple blocks can be -chained this way. - -* Add the missing parameter to the `with` block to let the Python code process - the data exposed in `main_field`. - -* Modify the Decl'HDF5 configuration to write the new data exposed from Python. - -* Match the output from `ex10.h5dump`. You can easily check if the files are the - same by running: +You should be able to match the expected output described in `ex10.h5dump`. You can easily check if the files are the same by running: ```bash diff ex10.h5dump <(h5dump ex10*.h5) ``` +To see your `h5` file in readable file format, you can check the section [Comparison with the `h5dump` command](#h5comparison). + +\warning +If you relaunch the executable, remember to delete your old `ex10.h5` file before, otherwise the data will not be changed. \attention In a more realistic setup, one would typically not write much code in the YAML -file directly, but would instead call functions specified in a `.py` file on -the side. +file directly, but would instead call functions specified in a `.py` file on the side. ## What next ? diff --git a/ex10.c b/ex10.c index 64bbe73..b5d1b79 100644 --- a/ex10.c +++ b/ex10.c @@ -29,7 +29,6 @@ #include #include -// load the PDI header #include /// size of the local data as [HEIGHT, WIDTH] including ghosts & boundary constants @@ -44,13 +43,32 @@ int pcoord[2]; /// the alpha coefficient used in the computation double alpha; +double L=1.0; +double source1[4]={0.4, 0.4, 0.2, 100}; +double source2[4]={0.7, 0.8, 0.1, 200}; + /** Initialize the data all to 0 except for the left border (XX==0) initialized to 1 million * \param[out] dat the local data to initialize */ void init(double dat[dsize[0]][dsize[1]]) { for (int yy=0; yy Date: Tue, 21 Jan 2025 12:01:31 +0100 Subject: [PATCH 2/5] fix visibility --- README.md | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index ef60fda..cef6103 100644 --- a/README.md +++ b/README.md @@ -380,7 +380,8 @@ of processes used. You can easily check if the files are the same by running: ### Ex10. Post-processing the data in python \attention -You need to have a version %PDI with the \ref pycall_plugin "Pycall plugin" to do this exercise. +You need to have a version %PDI with the \ref pycall_plugin "Pycall plugin" +to do this exercise. In this exercise, you will once again modify the YAML file only and use python to post-process the data in situ before writing it to HDF5. @@ -389,16 +390,19 @@ data itself. * Examine the YAML file and compile the code. -* Load the \ref pycall_plugin "Pycall plugin" and enable this plugin when the `loop` event is triggered. +* Load the \ref pycall_plugin "Pycall plugin" and enable this plugin + when the `loop` event is triggered. Some variables of the python script inside `ex10.yml` are not defined. -The `with` directive of this plugin allows to specify input variables (parameters) to pass to Python as a set of "$-expressions". +The `with` directive of this plugin allows to specify input variables (parameters) +to pass to Python as a set of "$-expressions". These parameters can be given as multiple blocks. * Add a `with` block with the missing parameter to let the Python code process the data exposed in `main_field` for event `loop`. -* Use the keyword `exec` of \ref pycall_plugin "Pycall plugin" and decomment the python script. +* Use the keyword `exec` of \ref pycall_plugin "Pycall plugin" and decomment + the python script. Notice that the Decl'HDF5 configuration was simplified, no memory selection is applied, the `when` condition disappeared because it is done in the python script: @@ -407,23 +411,28 @@ applied, the `when` condition disappeared because it is done in the python scrip transformed_field = np.sqrt(source_field[1:-1,1:-1]) pdi.expose('transformed_field', transformed_field, pdi.OUT) ``` -The last line of the python script allows to expose the transformed field to %PDI. Moreover, this data is known to %PDI in this call. +The last line of the python script allows to expose the transformed field to %PDI. +Moreover, this data is known to %PDI in this call. -* Modify the Decl'HDF5 configuration to write the new data `transformed_field` exposed from Python. +* Modify the Decl'HDF5 configuration to write the new data `transformed_field` +exposed from Python. \attention The dataset name is however explicitly specified now because it does not match the %PDI variable name anymore, you will instead write a new variable exposed from python. -You should be able to match the expected output described in `ex10.h5dump`. You can easily check if the files are the same by running: +You should be able to match the expected output described in `ex10.h5dump`. +You can easily check if the files are the same by running: ```bash diff ex10.h5dump <(h5dump ex10*.h5) ``` -To see your `h5` file in readable file format, you can check the section [Comparison with the `h5dump` command](#h5comparison). +To see your `h5` file in readable file format, +you can check the section [Comparison with the `h5dump` command](#h5comparison). \warning -If you relaunch the executable, remember to delete your old `ex10.h5` file before, otherwise the data will not be changed. +If you relaunch the executable, remember to delete your old `ex10.h5` file before, +otherwise the data will not be changed. \attention In a more realistic setup, one would typically not write much code in the YAML From 9c80f6556de327f2d78dc921ba22186907741549 Mon Sep 17 00:00:00 2001 From: "jacques.morice" Date: Tue, 21 Jan 2025 15:48:29 +0100 Subject: [PATCH 3/5] small fix --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index cef6103..da7b61d 100644 --- a/README.md +++ b/README.md @@ -379,7 +379,7 @@ of processes used. You can easily check if the files are the same by running: ### Ex10. Post-processing the data in python -\attention +\attention You need to have a version %PDI with the \ref pycall_plugin "Pycall plugin" to do this exercise. @@ -393,10 +393,10 @@ data itself. * Load the \ref pycall_plugin "Pycall plugin" and enable this plugin when the `loop` event is triggered. -Some variables of the python script inside `ex10.yml` are not defined. +Some variables of the python script inside `ex10.yml` are not defined. The `with` directive of this plugin allows to specify input variables (parameters) -to pass to Python as a set of "$-expressions". -These parameters can be given as multiple blocks. +to pass to Python as a set of "$-expressions". +These parameters can be given as multiple blocks. * Add a `with` block with the missing parameter to let the Python code process the data exposed in `main_field` for event `loop`. @@ -407,9 +407,9 @@ These parameters can be given as multiple blocks. Notice that the Decl'HDF5 configuration was simplified, no memory selection is applied, the `when` condition disappeared because it is done in the python script: ```python - if 0 < iter_id < 4: + if 0 < iter_id < 4: transformed_field = np.sqrt(source_field[1:-1,1:-1]) - pdi.expose('transformed_field', transformed_field, pdi.OUT) + pdi.expose('transformed_field', transformed_field, pdi.OUT) ``` The last line of the python script allows to expose the transformed field to %PDI. Moreover, this data is known to %PDI in this call. From 03ae546dd771d6636249188e89bc00e814f7ab78 Mon Sep 17 00:00:00 2001 From: "jacques.morice" Date: Tue, 21 Jan 2025 15:51:46 +0100 Subject: [PATCH 4/5] add comment header PDI --- ex10.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ex10.c b/ex10.c index b5d1b79..6a7b948 100644 --- a/ex10.c +++ b/ex10.c @@ -29,6 +29,7 @@ #include #include +// load the PDI header #include /// size of the local data as [HEIGHT, WIDTH] including ghosts & boundary constants From 1c4e8a8f22aa3a8384eada54e4343cc438309975 Mon Sep 17 00:00:00 2001 From: "jacques.morice" Date: Thu, 23 Jan 2025 13:20:40 +0100 Subject: [PATCH 5/5] fix h5dump file + indent + text --- README.md | 5 +- ex10.c | 2 +- ex10.h5dump | 440 ++++++++++++++++++++++++++------------------- ex10.yml | 27 +-- solutions/ex10.yml | 13 +- 5 files changed, 286 insertions(+), 201 deletions(-) diff --git a/README.md b/README.md index da7b61d..03583bf 100644 --- a/README.md +++ b/README.md @@ -401,8 +401,9 @@ These parameters can be given as multiple blocks. * Add a `with` block with the missing parameter to let the Python code process the data exposed in `main_field` for event `loop`. -* Use the keyword `exec` of \ref pycall_plugin "Pycall plugin" and decomment - the python script. +* Use the keyword `exec` of \ref pycall_plugin "Pycall plugin". + After the colon (":"), add a space and a vertical bar (" |"). + Uncomment the python script. Notice that the Decl'HDF5 configuration was simplified, no memory selection is applied, the `when` condition disappeared because it is done in the python script: diff --git a/ex10.c b/ex10.c index 6a7b948..76ed4e4 100644 --- a/ex10.c +++ b/ex10.c @@ -129,7 +129,7 @@ void exchange(MPI_Comm cart_comm, double cur[dsize[0]][dsize[1]]) // send to the left MPI_Cart_shift(cart_comm, 1, -1, &rank_source, &rank_dest); - MPI_Sendrecv(&cur[1][1], 1, column, rank_dest, 100, // send column after ghost + MPI_Sendrecv(&cur[1][1], 1, column, rank_dest, 100, // send column after ghost &cur[1][dsize[1]-1], 1, column, rank_source, 100, // receive last column (ghost) cart_comm, &status); } diff --git a/ex10.h5dump b/ex10.h5dump index 6a1f848..630df6a 100644 --- a/ex10.h5dump +++ b/ex10.h5dump @@ -4,186 +4,266 @@ GROUP "/" { DATATYPE H5T_IEEE_F64LE DATASPACE SIMPLE { ( 3, 60, 12 ) / ( 3, 60, 12 ) } DATA { - (0,0,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,1,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,2,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,3,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,4,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,5,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,6,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,7,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,8,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,9,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,10,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,11,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,12,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,13,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,14,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,15,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,16,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,17,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,18,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,19,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,20,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,21,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,22,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,23,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,24,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,25,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,26,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,27,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,28,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,29,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,30,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,31,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,32,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,33,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,34,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,35,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,36,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,37,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,38,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,39,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,40,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,41,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,42,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,43,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,44,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,45,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,46,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,47,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,48,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,49,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,50,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,51,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,52,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,53,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,54,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,55,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,56,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,57,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,58,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (0,59,0): 353.553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,0,0): 450.694, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,1,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,2,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,3,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,4,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,5,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,6,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,7,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,8,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,9,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,10,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,11,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,12,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,13,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,14,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,15,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,16,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,17,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,18,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,19,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,20,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,21,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,22,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,23,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,24,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,25,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,26,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,27,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,28,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,29,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,30,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,31,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,32,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,33,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,34,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,35,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,36,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,37,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,38,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,39,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,40,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,41,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,42,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,43,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,44,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,45,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,46,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,47,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,48,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,49,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,50,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,51,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,52,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,53,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,54,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,55,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,56,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,57,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,58,0): 467.707, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (1,59,0): 450.694, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,0,0): 505.825, 187.5, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,1,0): 537.645, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,2,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,3,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,4,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,5,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,6,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,7,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,8,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,9,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,10,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,11,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,12,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,13,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,14,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,15,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,16,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,17,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,18,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,19,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,20,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,21,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,22,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,23,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,24,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,25,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,26,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,27,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,28,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,29,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,30,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,31,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,32,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,33,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,34,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,35,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,36,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,37,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,38,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,39,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,40,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,41,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,42,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,43,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,44,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,45,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,46,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,47,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,48,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,49,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,50,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,51,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,52,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,53,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,54,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,55,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,56,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,57,0): 539.459, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,58,0): 537.645, 197.642, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0, - (2,59,0): 505.825, 187.5, 44.1942, 0, 0, 0, 0, 0, 0, 0, 0, 0 + (0,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,10,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,11,0): 0, 0, 0, 0, 3.53553, 0, 0, 0, 0, 0, 0, 0, + (0,12,0): 0, 0, 0, 3.53553, 7.90569, 5, 0, 0, 0, 0, 0, 0, + (0,13,0): 0, 0, 0, 5, 9.35414, 8.66025, 3.53553, 0, 0, 0, 0, 0, + (0,14,0): 0, 0, 3.53553, 8.66025, 10, 9.35414, 3.53553, 0, 0, 0, 0, 0, + (0,15,0): 0, 0, 3.53553, 9.35414, 10, 9.35414, 5, 0, 0, 0, 0, 0, + (0,16,0): 0, 0, 3.53553, 9.35414, 10, 10, 8.66025, 3.53553, 0, 0, 0, 0, + (0,17,0): 0, 0, 3.53553, 9.35414, 10, 10, 9.35414, 3.53553, 0, 0, 0, 0, + (0,18,0): 0, 0, 3.53553, 9.35414, 10, 10, 9.35414, 3.53553, 0, 0, 0, 0, + (0,19,0): 0, 0, 3.53553, 9.35414, 10, 10, 9.35414, 3.53553, 0, 0, 0, 0, + (0,20,0): 0, 0, 5, 9.35414, 10, 10, 9.35414, 3.53553, 0, 0, 0, 0, + (0,21,0): 0, 3.53553, 8.66025, 10, 10, 10, 9.35414, 3.53553, 0, 0, 0, + (0,21,11): 0, + (0,22,0): 0, 3.53553, 9.35414, 10, 10, 10, 9.35414, 3.53553, 0, 0, 0, + (0,22,11): 0, + (0,23,0): 0, 3.53553, 9.35414, 10, 10, 10, 9.35414, 3.53553, 0, 0, 0, + (0,23,11): 0, + (0,24,0): 0, 3.53553, 9.35414, 10, 10, 10, 9.35414, 3.53553, 0, 0, 0, + (0,24,11): 0, + (0,25,0): 0, 3.53553, 9.35414, 10, 10, 10, 9.35414, 3.53553, 0, 0, 0, + (0,25,11): 0, + (0,26,0): 0, 3.53553, 8.66025, 10, 10, 10, 9.35414, 3.53553, 0, 0, 0, + (0,26,11): 0, + (0,27,0): 0, 0, 5, 9.35414, 10, 10, 9.35414, 3.53553, 0, 0, 0, 0, + (0,28,0): 0, 0, 3.53553, 9.35414, 10, 10, 9.35414, 3.53553, 0, 0, 0, 0, + (0,29,0): 0, 0, 3.53553, 9.35414, 10, 10, 9.35414, 3.53553, 0, 0, 0, 0, + (0,30,0): 0, 0, 3.53553, 9.35414, 10, 10, 9.35414, 3.53553, 0, 0, 0, 0, + (0,31,0): 0, 0, 3.53553, 9.35414, 10, 10, 8.66025, 3.53553, 0, 0, 0, 0, + (0,32,0): 0, 0, 3.53553, 9.35414, 10, 9.35414, 5, 0, 0, 0, 0, 0, + (0,33,0): 0, 0, 3.53553, 8.66025, 10, 9.35414, 3.53553, 0, 0, 0, 0, 0, + (0,34,0): 0, 0, 0, 5, 9.35414, 8.66025, 3.53553, 0, 0, 0, 0, 0, + (0,35,0): 0, 0, 0, 3.53553, 7.90569, 5, 0, 0, 0, 5, 0, 0, + (0,36,0): 0, 0, 0, 0, 3.53553, 0, 0, 0, 5, 11.1803, 5, 0, + (0,37,0): 0, 0, 0, 0, 0, 0, 0, 0, 5, 12.2474, 7.07107, 0, + (0,38,0): 0, 0, 0, 0, 0, 0, 0, 0, 5, 13.2288, 12.2474, 5, + (0,39,0): 0, 0, 0, 0, 0, 0, 0, 0, 7.07107, 13.2288, 13.2288, 5, + (0,40,0): 0, 0, 0, 0, 0, 0, 0, 5, 12.2474, 14.1421, 13.2288, 5, + (0,41,0): 0, 0, 0, 0, 0, 0, 0, 5, 13.2288, 14.1421, 13.2288, 5, + (0,42,0): 0, 0, 0, 0, 0, 0, 0, 5, 13.2288, 14.1421, 13.2288, 5, + (0,43,0): 0, 0, 0, 0, 0, 0, 0, 5, 12.2474, 14.1421, 13.2288, 5, + (0,44,0): 0, 0, 0, 0, 0, 0, 0, 0, 7.07107, 13.2288, 13.2288, 5, + (0,45,0): 0, 0, 0, 0, 0, 0, 0, 0, 5, 13.2288, 12.2474, 5, + (0,46,0): 0, 0, 0, 0, 0, 0, 0, 0, 5, 12.2474, 7.07107, 0, + (0,47,0): 0, 0, 0, 0, 0, 0, 0, 0, 5, 11.1803, 5, 0, + (0,48,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, + (0,49,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,50,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,51,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,52,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,53,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,54,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,55,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,56,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,57,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,58,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (0,59,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,9,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,10,0): 0, 0, 0, 0, 1.25, 0, 0, 0, 0, 0, 0, 0, + (1,11,0): 0, 0, 0, 1.76777, 3.75, 2.16506, 0, 0, 0, 0, 0, 0, + (1,12,0): 0, 0, 1.25, 4.14578, 6.95971, 5.44862, 2.16506, 0, 0, 0, 0, + (1,12,11): 0, + (1,13,0): 0, 0, 2.16506, 5.86302, 8.75, 8.00391, 4.14578, 1.25, 0, 0, + (1,13,10): 0, 0, + (1,14,0): 0, 1.25, 4.14578, 8.10093, 9.68246, 8.83883, 4.67707, 1.25, + (1,14,8): 0, 0, 0, 0, + (1,15,0): 0, 1.25, 4.50694, 8.83883, 9.84251, 9.10014, 5.86302, + (1,15,7): 2.16506, 0, 0, 0, 0, + (1,16,0): 0, 1.25, 4.50694, 8.92679, 9.92157, 9.76281, 8.10093, + (1,16,7): 4.14578, 1.25, 0, 0, 0, + (1,17,0): 0, 1.25, 4.50694, 8.92679, 9.92157, 9.92157, 8.83883, + (1,17,7): 4.50694, 1.25, 0, 0, 0, + (1,18,0): 0, 1.25, 4.50694, 8.92679, 9.92157, 9.92157, 8.92679, + (1,18,7): 4.50694, 1.25, 0, 0, 0, + (1,19,0): 0, 1.25, 4.67707, 8.92679, 9.92157, 9.92157, 8.92679, + (1,19,7): 4.50694, 1.25, 0, 0, 0, + (1,20,0): 0, 2.16506, 5.86302, 9.10014, 9.92157, 9.92157, 8.92679, + (1,20,7): 4.50694, 1.25, 0, 0, 0, + (1,21,0): 1.25, 4.14578, 8.10093, 9.76281, 10, 9.92157, 8.92679, + (1,21,7): 4.50694, 1.25, 0, 0, 0, + (1,22,0): 1.25, 4.50694, 8.83883, 9.92157, 10, 9.92157, 8.92679, + (1,22,7): 4.50694, 1.25, 0, 0, 0, + (1,23,0): 1.25, 4.50694, 8.92679, 9.92157, 10, 9.92157, 8.92679, + (1,23,7): 4.50694, 1.25, 0, 0, 0, + (1,24,0): 1.25, 4.50694, 8.92679, 9.92157, 10, 9.92157, 8.92679, + (1,24,7): 4.50694, 1.25, 0, 0, 0, + (1,25,0): 1.25, 4.50694, 8.83883, 9.92157, 10, 9.92157, 8.92679, + (1,25,7): 4.50694, 1.25, 0, 0, 0, + (1,26,0): 1.25, 4.14578, 8.10093, 9.76281, 10, 9.92157, 8.92679, + (1,26,7): 4.50694, 1.25, 0, 0, 0, + (1,27,0): 0, 2.16506, 5.86302, 9.10014, 9.92157, 9.92157, 8.92679, + (1,27,7): 4.50694, 1.25, 0, 0, 0, + (1,28,0): 0, 1.25, 4.67707, 8.92679, 9.92157, 9.92157, 8.92679, + (1,28,7): 4.50694, 1.25, 0, 0, 0, + (1,29,0): 0, 1.25, 4.50694, 8.92679, 9.92157, 9.92157, 8.92679, + (1,29,7): 4.50694, 1.25, 0, 0, 0, + (1,30,0): 0, 1.25, 4.50694, 8.92679, 9.92157, 9.92157, 8.83883, + (1,30,7): 4.50694, 1.25, 0, 0, 0, + (1,31,0): 0, 1.25, 4.50694, 8.92679, 9.92157, 9.76281, 8.10093, + (1,31,7): 4.14578, 1.25, 0, 0, 0, + (1,32,0): 0, 1.25, 4.50694, 8.83883, 9.84251, 9.10014, 5.86302, + (1,32,7): 2.16506, 0, 0, 0, 0, + (1,33,0): 0, 1.25, 4.14578, 8.10093, 9.68246, 8.83883, 4.67707, 1.25, + (1,33,8): 0, 0, 0, 0, + (1,34,0): 0, 0, 2.16506, 5.86302, 8.75, 8.00391, 4.14578, 1.25, 0, + (1,34,9): 1.76777, 0, 0, + (1,35,0): 0, 0, 1.25, 4.14578, 6.95971, 5.44862, 2.16506, 0, 2.5, + (1,35,9): 5.3033, 2.5, 0, + (1,36,0): 0, 0, 0, 1.76777, 3.75, 2.16506, 0, 1.76777, 5.59017, + (1,36,9): 9.51972, 5.86302, 1.76777, + (1,37,0): 0, 0, 0, 0, 1.25, 0, 0, 1.76777, 6.12372, 11.0397, 8.10093, + (1,37,11): 3.06186, + (1,38,0): 1.76777, 0, 0, 0, 0, 0, 0, 1.76777, 6.61438, 12.2474, + (1,38,10): 11.3192, 5.86302, + (1,39,0): 1.76777, 0, 0, 0, 0, 0, 0, 3.06186, 8.29156, 12.7475, + (1,39,10): 12.3744, 6.37377, + (1,40,0): 1.76777, 0, 0, 0, 0, 0, 1.76777, 5.86302, 11.4564, 13.6931, + (1,40,10): 12.6244, 6.37377, + (1,41,0): 1.76777, 0, 0, 0, 0, 0, 1.76777, 6.37377, 12.5, 13.9194, + (1,41,10): 12.6244, 6.37377, + (1,42,0): 1.76777, 0, 0, 0, 0, 0, 1.76777, 6.37377, 12.5, 13.9194, + (1,42,10): 12.6244, 6.37377, + (1,43,0): 1.76777, 0, 0, 0, 0, 0, 1.76777, 5.86302, 11.4564, 13.6931, + (1,43,10): 12.6244, 6.37377, + (1,44,0): 1.76777, 0, 0, 0, 0, 0, 0, 3.06186, 8.29156, 12.7475, + (1,44,10): 12.3744, 6.37377, + (1,45,0): 1.76777, 0, 0, 0, 0, 0, 0, 1.76777, 6.61438, 12.2474, + (1,45,10): 11.3192, 5.86302, + (1,46,0): 0, 0, 0, 0, 0, 0, 0, 1.76777, 6.12372, 11.0397, 8.10093, + (1,46,11): 3.06186, + (1,47,0): 0, 0, 0, 0, 0, 0, 0, 1.76777, 5.59017, 9.51972, 5.86302, + (1,47,11): 1.76777, + (1,48,0): 0, 0, 0, 0, 0, 0, 0, 0, 2.5, 5.3033, 2.5, 0, + (1,49,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 1.76777, 0, 0, + (1,50,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,51,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,52,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,53,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,54,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,55,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,56,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,57,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,58,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (1,59,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,0,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,1,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,2,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,3,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,4,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,5,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,6,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,7,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,8,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,9,0): 0, 0, 0, 0, 0.441942, 0, 0, 0, 0, 0, 0, 0, + (2,10,0): 0, 0, 0, 0.765466, 1.59344, 0.883883, 0, 0, 0, 0, 0, 0, + (2,11,0): 0, 0, 0.765466, 2.33854, 3.77595, 2.79508, 1.08253, 0, 0, 0, + (2,11,10): 0, 0, + (2,12,0): 0, 0.441942, 1.875, 4.41942, 6.43477, 5.48435, 2.86411, + (2,12,7): 0.883883, 0, 0, 0, 0, + (2,13,0): 0, 0.883883, 2.99739, 6.13965, 8.26797, 7.56482, 4.48522, + (2,13,7): 1.76777, 0.441942, 0, 0, 0, + (2,14,0): 0.441942, 1.76777, 4.48522, 7.79373, 9.3018, 8.47791, + (2,14,6): 5.22913, 2.07289, 0.441942, 0, 0, 0, + (2,15,0): 0.441942, 1.92638, 4.98043, 8.47791, 9.62175, 8.91584, 6.25, + (2,15,7): 2.99739, 0.883883, 0, 0, 0, + (2,16,0): 0.441942, 1.92638, 5.03891, 8.62636, 9.77281, 9.52997, + (2,16,6): 7.80625, 4.48522, 1.76777, 0.441942, 0, 0, + (2,17,0): 0.441942, 1.92638, 5.03891, 8.63767, 9.80274, 9.77281, + (2,17,6): 8.48942, 4.98043, 1.92638, 0.441942, 0, 0, + (2,18,0): 0.441942, 1.92638, 5.05825, 8.63767, 9.80274, 9.80274, + (2,18,6): 8.62636, 5.03891, 1.92638, 0.441942, 0, 0, + (2,19,0): 0.441942, 2.07289, 5.28485, 8.67152, 9.80274, 9.80274, + (2,19,6): 8.63767, 5.03891, 1.92638, 0.441942, 0, 0, + (2,20,0): 0.883883, 2.99739, 6.25, 8.93772, 9.83258, 9.80274, 8.63767, + (2,20,7): 5.03891, 1.92638, 0.441942, 0, 0, + (2,21,0): 1.76777, 4.48522, 7.80625, 9.54021, 9.95105, 9.8127, 8.63767, + (2,21,7): 5.03891, 1.92638, 0.441942, 0, 0.441942, + (2,22,0): 1.92638, 4.98043, 8.48942, 9.7828, 9.98045, 9.8127, 8.63767, + (2,22,7): 5.03891, 1.92638, 0.441942, 0, 0.441942, + (2,23,0): 1.92638, 5.03891, 8.62636, 9.8127, 9.98045, 9.8127, 8.63767, + (2,23,7): 5.03891, 1.92638, 0.441942, 0, 0.441942, + (2,24,0): 1.92638, 5.03891, 8.62636, 9.8127, 9.98045, 9.8127, 8.63767, + (2,24,7): 5.03891, 1.92638, 0.441942, 0, 0.441942, + (2,25,0): 1.92638, 4.98043, 8.48942, 9.7828, 9.98045, 9.8127, 8.63767, + (2,25,7): 5.03891, 1.92638, 0.441942, 0, 0.441942, + (2,26,0): 1.76777, 4.48522, 7.80625, 9.54021, 9.95105, 9.8127, 8.63767, + (2,26,7): 5.03891, 1.92638, 0.441942, 0, 0.441942, + (2,27,0): 0.883883, 2.99739, 6.25, 8.93772, 9.83258, 9.80274, 8.63767, + (2,27,7): 5.03891, 1.92638, 0.441942, 0, 0, + (2,28,0): 0.441942, 2.07289, 5.28485, 8.67152, 9.80274, 9.80274, + (2,28,6): 8.63767, 5.03891, 1.92638, 0.441942, 0, 0, + (2,29,0): 0.441942, 1.92638, 5.05825, 8.63767, 9.80274, 9.80274, + (2,29,6): 8.62636, 5.03891, 1.92638, 0.441942, 0, 0, + (2,30,0): 0.441942, 1.92638, 5.03891, 8.63767, 9.80274, 9.77281, + (2,30,6): 8.48942, 4.98043, 1.92638, 0.441942, 0, 0, + (2,31,0): 0.441942, 1.92638, 5.03891, 8.62636, 9.77281, 9.52997, + (2,31,6): 7.80625, 4.48522, 1.76777, 0.441942, 0, 0, + (2,32,0): 0.441942, 1.92638, 4.98043, 8.47791, 9.62175, 8.91584, 6.25, + (2,32,7): 2.99739, 0.883883, 0, 0, 0, + (2,33,0): 0.441942, 1.76777, 4.48522, 7.79373, 9.3018, 8.47791, + (2,33,6): 5.22913, 2.07289, 0.441942, 0.625, 0, 0, + (2,34,0): 0, 0.883883, 2.99739, 6.13965, 8.26797, 7.56482, 4.48522, + (2,34,7): 1.76777, 1.16927, 2.25347, 1.08253, 0, + (2,35,0): 0, 0.441942, 1.875, 4.41942, 6.43477, 5.48435, 2.86411, + (2,35,7): 1.39754, 3.2476, 5.22913, 3.30719, 1.08253, + (2,36,0): 0.625, 0, 0.765466, 2.33854, 3.77595, 2.79508, 1.25, 2.42061, + (2,36,8): 5.72822, 8.50092, 6.15554, 2.65165, + (2,37,0): 1.25, 0, 0, 0.765466, 1.59344, 0.883883, 0.625, 2.65165, + (2,37,8): 6.61438, 10.1934, 8.33854, 4.19263, + (2,38,0): 2.5, 0.625, 0, 0, 0.441942, 0, 0.625, 2.93151, 7.36864, + (2,38,9): 11.4905, 10.6983, 6.31219, + (2,39,0): 2.72431, 0.625, 0, 0, 0, 0, 1.25, 4.23896, 8.81671, 12.2952, + (2,39,10): 11.7427, 7.01561, + (2,40,0): 2.72431, 0.625, 0, 0, 0, 0.625, 2.5, 6.34306, 11.022, 13.214, + (2,40,10): 12.1353, 7.1261, + (2,41,0): 2.72431, 0.625, 0, 0, 0, 0.625, 2.72431, 7.04339, 11.9733, + (2,41,9): 13.5641, 12.1995, 7.1261, + (2,42,0): 2.72431, 0.625, 0, 0, 0, 0.625, 2.72431, 7.04339, 11.9733, + (2,42,9): 13.5641, 12.1995, 7.1261, + (2,43,0): 2.72431, 0.625, 0, 0, 0, 0.625, 2.5, 6.34306, 11.022, 13.214, + (2,43,10): 12.1353, 7.1261, + (2,44,0): 2.72431, 0.625, 0, 0, 0, 0, 1.25, 4.23896, 8.81671, 12.2952, + (2,44,10): 11.7427, 7.01561, + (2,45,0): 2.5, 0.625, 0, 0, 0, 0, 0.625, 2.93151, 7.36864, 11.4905, + (2,45,10): 10.6983, 6.31219, + (2,46,0): 1.25, 0, 0, 0, 0, 0, 0.625, 2.65165, 6.61438, 10.1934, + (2,46,10): 8.33854, 4.19263, + (2,47,0): 0.625, 0, 0, 0, 0, 0, 0.625, 2.42061, 5.72822, 8.50092, + (2,47,10): 6.15554, 2.65165, + (2,48,0): 0, 0, 0, 0, 0, 0, 0, 1.08253, 3.2476, 5.22913, 3.30719, + (2,48,11): 1.08253, + (2,49,0): 0, 0, 0, 0, 0, 0, 0, 0, 1.08253, 2.25347, 1.08253, 0, + (2,50,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.625, 0, 0, + (2,51,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,52,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,53,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,54,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,55,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,56,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,57,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,58,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + (2,59,0): 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } diff --git a/ex10.yml b/ex10.yml index 853bbbd..0183e42 100644 --- a/ex10.yml +++ b/ex10.yml @@ -18,23 +18,24 @@ pdi: decl_hdf5: file: ex10.h5 communicator: $MPI_COMM_WORLD - datasets: + datasets: # list the name of the dataset in the file ex10.h5 main_field: { type: array, subtype: double, size: [ 3, '$psize[0]*($dsize[0]-2)', '$psize[1]*($dsize[1]-2)' ] } write: - #*** the name of the PDI variable to write. + #*** the name of the PDI variable to write #... - dataset: main_field # name of the dataset in "ex10.h5" - dataset_selection: - size: [1, '$dsize[0]-2', '$dsize[1]-2'] - start: ['$ii-1', '$pcoord[0]*($dsize[0]-2)', '$pcoord[1]*($dsize[1]-2)'] - #*** load the pycall plugin and enable this plugin for event loop. - #... - #*** Specifies the input parameters (variables) to pass to Python as a set of "$-expressions" (expressions must be defined in .yml script) - #... - #*** add exec keyword of pycall plugin. Decomment and the following python script - #... + dataset: main_field # name of the dataset in the h5 file (defined in the directive datasets) that we want to fill + dataset_selection: + size: [1, '$dsize[0]-2', '$dsize[1]-2'] + start: ['$ii-1', '$pcoord[0]*($dsize[0]-2)', '$pcoord[1]*($dsize[1]-2)'] + #*** load the pycall plugin and enable this plugin for event loop + #... + #*** specifies the input parameters (variables) to pass to Python as a set of "$-expressions" (expressions must be defined in .yml script) + #... + #*** add exec keyword of pycall plugin and after the colon, add a space and a vertical bar + #... + # uncomment the following python script # import numpy as np # if 0 < iter_id < 4: # iter_id: time iteration # transformed_field = np.sqrt(source_field[1:-1,1:-1]) # pdi.expose('transformed_field', transformed_field, pdi.OUT) -## Comment: The last line allows to expose transformed field to PDI. Hence, the data is known by PDI in this call. +## the last line allows to expose transformed field to PDI (hence, the data is known by PDI in this call) diff --git a/solutions/ex10.yml b/solutions/ex10.yml index 920ac97..49b3b46 100644 --- a/solutions/ex10.yml +++ b/solutions/ex10.yml @@ -18,23 +18,26 @@ pdi: decl_hdf5: file: ex10.h5 communicator: $MPI_COMM_WORLD - datasets: # List the name of the dataset in the file ex10.h5 + datasets: # list the name of the dataset in the file ex10.h5 main_field: { type: array, subtype: double, size: [ 3, '$psize[0]*($dsize[0]-2)', '$psize[1]*($dsize[1]-2)' ] } write: - #*** the name of the PDI data to write + #*** give the name of the PDI data to write transformed_field: dataset: main_field # name of the dataset in the h5 file (defined in the directive datasets) that we want to fill dataset_selection: size: [1, '$dsize[0]-2', '$dsize[1]-2'] start: ['$ii-1', '$pcoord[0]*($dsize[0]-2)', '$pcoord[1]*($dsize[1]-2)'] - #*** load the pycall plugin + #*** load the pycall plugin and enable this plugin for event loop pycall: on_event: loop: + #*** specifies the input parameters (variables) to pass to Python as a set of "$-expressions" (expressions must be defined in .yml script) with: { iter_id: $ii, source_field: $main_field } + #*** add exec keyword of pycall plugin and after the colon, add a space and a vertical bar exec: | + # uncomment the following python script import numpy as np if 0 < iter_id < 4: transformed_field = np.sqrt(source_field[1:-1,1:-1]) - pdi.expose('transformed_field', transformed_field, pdi.OUT) -# The last line allows to expose transformed field to PDI. Hence, the data is known by PDI in this call. \ No newline at end of file + pdi.expose('transformed_field', transformed_field, pdi.OUT) +# the last line allows to expose transformed field to PDI (hence, the data is known by PDI in this call)