From 8703d95aa27624d97a3cbcbb65bfd5f4145faa06 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Tue, 10 Oct 2023 22:09:09 +0100 Subject: [PATCH] Adding fpm support (#16) * Changes to make compatible with fpm * Adding fpm support * Adding clarification that you don't need to pre-install BMI binding if using fpm * Updating example dir in GitHub workflow --- .github/workflows/conda-and-cmake.yml | 2 +- .gitignore | 4 + CMakeLists.txt | 4 +- README.md | 62 +- {examples => example}/CMakeLists.txt | 14 +- .../change_diffusivity_ex.f90 | 6 +- .../conflicting_instances_ex.f90 | 6 + {examples => example}/get_value_ex.f90 | 0 {examples => example}/info_ex.f90 | 0 {examples => example}/irf_ex.f90 | 0 {examples => example}/set_value_ex.f90 | 0 {examples => example}/test1.cfg | 0 {examples => example}/test2.cfg | 0 {examples => example}/testing_helpers.f90 | 0 {examples => example}/vargrid_ex.f90 | 0 examples/bmiheatf.out | 1113 ----------------- fpm.toml | 24 + heat/fpm.toml | 19 + sample.cfg | 0 {tests => test}/CMakeLists.txt | 6 +- {tests => test}/fixtures.f90 | 0 test/fixtures.mod | Bin 0 -> 618 bytes {tests => test}/sample.cfg | 0 test/sample1.cfg | 0 test/samplel.cfg | 0 {tests => test}/test_by_reference.f90 | 7 +- {tests => test}/test_finalize.f90 | 0 {tests => test}/test_get_component_name.f90 | 0 {tests => test}/test_get_current_time.f90 | 0 {tests => test}/test_get_end_time.f90 | 0 {tests => test}/test_get_grid_edge_count.f90 | 0 {tests => test}/test_get_grid_edge_nodes.f90 | 0 {tests => test}/test_get_grid_face_count.f90 | 0 {tests => test}/test_get_grid_face_edges.f90 | 0 {tests => test}/test_get_grid_face_nodes.f90 | 0 {tests => test}/test_get_grid_node_count.f90 | 0 .../test_get_grid_nodes_per_face.f90 | 0 {tests => test}/test_get_grid_origin.f90 | 0 {tests => test}/test_get_grid_rank.f90 | 0 {tests => test}/test_get_grid_shape.f90 | 0 {tests => test}/test_get_grid_size.f90 | 0 {tests => test}/test_get_grid_spacing.f90 | 0 {tests => test}/test_get_grid_type.f90 | 0 {tests => test}/test_get_grid_x.f90 | 0 {tests => test}/test_get_grid_y.f90 | 0 {tests => test}/test_get_grid_z.f90 | 0 {tests => test}/test_get_input_item_count.f90 | 0 {tests => test}/test_get_input_var_names.f90 | 0 .../test_get_output_item_count.f90 | 0 {tests => test}/test_get_output_var_names.f90 | 0 {tests => test}/test_get_start_time.f90 | 0 {tests => test}/test_get_time_step.f90 | 0 {tests => test}/test_get_time_units.f90 | 0 {tests => test}/test_get_value.f90 | 7 +- {tests => test}/test_get_value_at_indices.f90 | 7 +- {tests => test}/test_get_value_ptr.f90 | 7 +- {tests => test}/test_get_var_grid.f90 | 0 {tests => test}/test_get_var_itemsize.f90 | 0 {tests => test}/test_get_var_location.f90 | 0 {tests => test}/test_get_var_nbytes.f90 | 0 {tests => test}/test_get_var_type.f90 | 0 {tests => test}/test_get_var_units.f90 | 0 {tests => test}/test_initialize.f90 | 7 +- {tests => test}/test_set_value.f90 | 11 +- {tests => test}/test_set_value_at_indices.f90 | 7 +- {tests => test}/test_update.f90 | 0 {tests => test}/test_update_until.f90 | 0 67 files changed, 161 insertions(+), 1152 deletions(-) rename {examples => example}/CMakeLists.txt (61%) rename {examples => example}/change_diffusivity_ex.f90 (87%) rename {examples => example}/conflicting_instances_ex.f90 (90%) rename {examples => example}/get_value_ex.f90 (100%) rename {examples => example}/info_ex.f90 (100%) rename {examples => example}/irf_ex.f90 (100%) rename {examples => example}/set_value_ex.f90 (100%) rename {examples => example}/test1.cfg (100%) rename {examples => example}/test2.cfg (100%) rename {examples => example}/testing_helpers.f90 (100%) rename {examples => example}/vargrid_ex.f90 (100%) delete mode 100644 examples/bmiheatf.out create mode 100644 fpm.toml create mode 100644 heat/fpm.toml create mode 100644 sample.cfg rename {tests => test}/CMakeLists.txt (91%) rename {tests => test}/fixtures.f90 (100%) create mode 100644 test/fixtures.mod rename {tests => test}/sample.cfg (100%) create mode 100644 test/sample1.cfg create mode 100644 test/samplel.cfg rename {tests => test}/test_by_reference.f90 (89%) rename {tests => test}/test_finalize.f90 (100%) rename {tests => test}/test_get_component_name.f90 (100%) rename {tests => test}/test_get_current_time.f90 (100%) rename {tests => test}/test_get_end_time.f90 (100%) rename {tests => test}/test_get_grid_edge_count.f90 (100%) rename {tests => test}/test_get_grid_edge_nodes.f90 (100%) rename {tests => test}/test_get_grid_face_count.f90 (100%) rename {tests => test}/test_get_grid_face_edges.f90 (100%) rename {tests => test}/test_get_grid_face_nodes.f90 (100%) rename {tests => test}/test_get_grid_node_count.f90 (100%) rename {tests => test}/test_get_grid_nodes_per_face.f90 (100%) rename {tests => test}/test_get_grid_origin.f90 (100%) rename {tests => test}/test_get_grid_rank.f90 (100%) rename {tests => test}/test_get_grid_shape.f90 (100%) rename {tests => test}/test_get_grid_size.f90 (100%) rename {tests => test}/test_get_grid_spacing.f90 (100%) rename {tests => test}/test_get_grid_type.f90 (100%) rename {tests => test}/test_get_grid_x.f90 (100%) rename {tests => test}/test_get_grid_y.f90 (100%) rename {tests => test}/test_get_grid_z.f90 (100%) rename {tests => test}/test_get_input_item_count.f90 (100%) rename {tests => test}/test_get_input_var_names.f90 (100%) rename {tests => test}/test_get_output_item_count.f90 (100%) rename {tests => test}/test_get_output_var_names.f90 (100%) rename {tests => test}/test_get_start_time.f90 (100%) rename {tests => test}/test_get_time_step.f90 (100%) rename {tests => test}/test_get_time_units.f90 (100%) rename {tests => test}/test_get_value.f90 (93%) rename {tests => test}/test_get_value_at_indices.f90 (86%) rename {tests => test}/test_get_value_ptr.f90 (85%) rename {tests => test}/test_get_var_grid.f90 (100%) rename {tests => test}/test_get_var_itemsize.f90 (100%) rename {tests => test}/test_get_var_location.f90 (100%) rename {tests => test}/test_get_var_nbytes.f90 (100%) rename {tests => test}/test_get_var_type.f90 (100%) rename {tests => test}/test_get_var_units.f90 (100%) rename {tests => test}/test_initialize.f90 (70%) rename {tests => test}/test_set_value.f90 (90%) rename {tests => test}/test_set_value_at_indices.f90 (86%) rename {tests => test}/test_update.f90 (100%) rename {tests => test}/test_update_until.f90 (100%) diff --git a/.github/workflows/conda-and-cmake.yml b/.github/workflows/conda-and-cmake.yml index c8a206d..8274798 100644 --- a/.github/workflows/conda-and-cmake.yml +++ b/.github/workflows/conda-and-cmake.yml @@ -60,7 +60,7 @@ jobs: - name: Memcheck if: matrix.os == 'ubuntu-latest' - working-directory: ${{ github.workspace }}/examples + working-directory: ${{ github.workspace }}/example run: | sudo apt-get install -y valgrind valgrind \ diff --git a/.gitignore b/.gitignore index 0eeb01b..f3bd268 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ *.lo *.o *.obj +*.mod # Precompiled Headers *.gch @@ -32,5 +33,8 @@ # Build and install directories for testing _build +build _install +# IDEs +.vscode/ diff --git a/CMakeLists.txt b/CMakeLists.txt index 075e9ec..8f0f520 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,7 +29,7 @@ message("-- bmif_inc - ${bmif_inc}") add_subdirectory(heat) add_subdirectory(bmi_heat) -add_subdirectory(tests) -add_subdirectory(examples) +add_subdirectory(test) +add_subdirectory(example) include(CTest) diff --git a/README.md b/README.md index 17bf3bf..1909266 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ This repository is organized with the following directories:
bmi_heat
Holds the BMI for the model and a main program to run the model through its BMI
-
tests
+
test
Unit tests for the BMI-ed model
examples
Examples of controlling the model through its BMI
@@ -41,14 +41,15 @@ This example can be built on Linux, macOS, and Windows. **Prerequisites:** * A Fortran compiler -* CMake -* The Fortran BMI bindings. Follow the build and install directions - given in the +* CMake or [Fortran Package Manager](https://fpm.fortran-lang.org/) +* If using CMake, the Fortran BMI bindings. Follow the build and + install directions given in the [README](https://github.com/csdms/bmi-fortran/blob/master/README.md) in that repository. You can choose to build them from source or - install them through a conda binary. + install them through a conda binary. If using fpm, the binding + will be automatically downloaded and built for you. -### Linux and macOS +### CMake - Linux and macOS To build this example from source with cmake, using the current Fortran BMI version, run @@ -98,7 +99,7 @@ run unit tests and examples of using the sample implementation with ctest -### Windows +### CMake - Windows An additional prerequisite is needed for Windows: @@ -132,6 +133,48 @@ run unit tests and examples of using the sample implementation with ctest +### Fortran Package Manager (fpm) + +If you don't already have fpm installed, you can do so via Conda: + + conda install fpm -c conda-forge + +Then, to build and install: + + fpm build --profile release + fpm install --prefix + +where `` is the base directory in which to +install the model. Installation is optional. + +To run the tests: + + fpm test -- test/sample.cfg + +Here, `test/sample.cfg` is passed as a command line parameter to the +run executables, and tells the tests where to find the test config +file. + +To run all of the examples: + + fpm run --example --all -- example + +Similarly, `example` tells the example executables to look in the +`example` directory for config files. To run individual tests: + + fpm run --example -- example + +Where `` is the name of the example to run. To see +a list of available examples, run `fpm run --example`. Note that the +non-BMI heat model executable is not built by default when using fpm. +If you want to build and install this too, you can do so from the +heat directory: + + cd heat + fpm build --profile release + fpm install --prefix + + ## Use Run the heat model through its BMI with the `run_bmiheatf` program, @@ -144,3 +187,8 @@ If `run_bmiheatf` is in your path, run it with Output from the model is written to the file **bmiheatf.out** in the current directory. + +If you built the model using fpm, you can alternatively run the +program using + + fpm run -- test.cfg \ No newline at end of file diff --git a/examples/CMakeLists.txt b/example/CMakeLists.txt similarity index 61% rename from examples/CMakeLists.txt rename to example/CMakeLists.txt index a641009..2d76316 100644 --- a/examples/CMakeLists.txt +++ b/example/CMakeLists.txt @@ -3,7 +3,7 @@ include(CTest) include_directories(${CMAKE_Fortran_MODULE_DIRECTORY}) function(make_example example_name) - add_test(NAME ${example_name} COMMAND ${example_name}) + add_test(NAME ${example_name} COMMAND ${example_name} ${CMAKE_CURRENT_SOURCE_DIR}) add_executable(${example_name} ${example_name}.f90 testing_helpers.f90) target_link_libraries(${example_name} ${bmi_name}) endfunction(make_example) @@ -16,9 +16,9 @@ make_example(set_value_ex) make_example(conflicting_instances_ex) make_example(change_diffusivity_ex) -file( - COPY ${CMAKE_CURRENT_SOURCE_DIR}/test1.cfg - DESTINATION ${CMAKE_BINARY_DIR}/examples) -file( - COPY ${CMAKE_CURRENT_SOURCE_DIR}/test2.cfg - DESTINATION ${CMAKE_BINARY_DIR}/examples) +# file( +# COPY ${CMAKE_CURRENT_SOURCE_DIR}/test1.cfg +# DESTINATION ${CMAKE_BINARY_DIR}/example) +# file( +# COPY ${CMAKE_CURRENT_SOURCE_DIR}/test2.cfg +# DESTINATION ${CMAKE_BINARY_DIR}/example) diff --git a/examples/change_diffusivity_ex.f90 b/example/change_diffusivity_ex.f90 similarity index 87% rename from examples/change_diffusivity_ex.f90 rename to example/change_diffusivity_ex.f90 index 0f5e703..56c4be4 100644 --- a/examples/change_diffusivity_ex.f90 +++ b/example/change_diffusivity_ex.f90 @@ -5,7 +5,7 @@ program change_diffusivity use testing_helpers, only: print_array implicit none - character (len=*), parameter :: config_file = "test1.cfg" + character (len=256) :: config_file character (len=*), parameter :: & dname = "plate_surface__thermal_diffusivity" character (len=*), parameter :: & @@ -17,6 +17,10 @@ program change_diffusivity integer, dimension(2) :: tdims real :: diffusivity(1), temperature(50) integer :: status + + ! Get the config file directory and create the path based on this + call get_command_argument(1, config_file) + config_file = trim(config_file) // "/test1.cfg" ! Run model to the end with alpha=1.0 (from cfg file). status = m%initialize(config_file) diff --git a/examples/conflicting_instances_ex.f90 b/example/conflicting_instances_ex.f90 similarity index 90% rename from examples/conflicting_instances_ex.f90 rename to example/conflicting_instances_ex.f90 index 898dd75..6bf6eda 100644 --- a/examples/conflicting_instances_ex.f90 +++ b/example/conflicting_instances_ex.f90 @@ -8,6 +8,7 @@ program conflicting_instances_ex type (bmi_heat) :: m1 type (bmi_heat) :: m2 + character (len=256) :: cfg_dir character (len=BMI_MAX_VAR_NAME) :: & cfg_file1 = "test1.cfg", cfg_file2 = "test2.cfg" integer :: s @@ -17,6 +18,11 @@ program conflicting_instances_ex real, allocatable :: z1(:), z2(:) character(len=30) :: rowfmt1, rowfmt2 + ! Prepend the config file paths with the correct directory + call get_command_argument(1, cfg_dir) + cfg_file1 = trim(cfg_dir) // "/" // trim(cfg_file1) + cfg_file2 = trim(cfg_dir) // "/" // trim(cfg_file2) + write(*, "(a, a10, a10)") "Configuration files: ", cfg_file1, cfg_file2 write (*,"(a)",advance="no") "Initializing..." diff --git a/examples/get_value_ex.f90 b/example/get_value_ex.f90 similarity index 100% rename from examples/get_value_ex.f90 rename to example/get_value_ex.f90 diff --git a/examples/info_ex.f90 b/example/info_ex.f90 similarity index 100% rename from examples/info_ex.f90 rename to example/info_ex.f90 diff --git a/examples/irf_ex.f90 b/example/irf_ex.f90 similarity index 100% rename from examples/irf_ex.f90 rename to example/irf_ex.f90 diff --git a/examples/set_value_ex.f90 b/example/set_value_ex.f90 similarity index 100% rename from examples/set_value_ex.f90 rename to example/set_value_ex.f90 diff --git a/examples/test1.cfg b/example/test1.cfg similarity index 100% rename from examples/test1.cfg rename to example/test1.cfg diff --git a/examples/test2.cfg b/example/test2.cfg similarity index 100% rename from examples/test2.cfg rename to example/test2.cfg diff --git a/examples/testing_helpers.f90 b/example/testing_helpers.f90 similarity index 100% rename from examples/testing_helpers.f90 rename to example/testing_helpers.f90 diff --git a/examples/vargrid_ex.f90 b/example/vargrid_ex.f90 similarity index 100% rename from examples/vargrid_ex.f90 rename to example/vargrid_ex.f90 diff --git a/examples/bmiheatf.out b/examples/bmiheatf.out deleted file mode 100644 index 09304d4..0000000 --- a/examples/bmiheatf.out +++ /dev/null @@ -1,1113 +0,0 @@ -Initialize model. -Model values at time = 0.0 - 0.0 3.0 4.0 3.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 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.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 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 1.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 0.8 1.0 0.8 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.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 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.0 0.0 0.0 0.0 -Model values at time = 2.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.0 1.4 1.0 0.0 - 0.0 0.2 0.2 0.2 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.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 0.0 - 0.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 3.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.1 1.6 1.1 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.0 0.1 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.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 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 4.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.2 1.7 1.2 0.0 - 0.0 0.4 0.6 0.4 0.0 - 0.0 0.1 0.1 0.1 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.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 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 5.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.3 1.8 1.3 0.0 - 0.0 0.5 0.7 0.5 0.0 - 0.0 0.1 0.2 0.1 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.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 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 6.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.3 1.8 1.3 0.0 - 0.0 0.5 0.7 0.5 0.0 - 0.0 0.2 0.2 0.2 0.0 - 0.0 0.0 0.1 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.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 0.0 0.0 -Model values at time = 7.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.3 1.8 1.3 0.0 - 0.0 0.5 0.8 0.5 0.0 - 0.0 0.2 0.3 0.2 0.0 - 0.0 0.1 0.1 0.1 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.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 0.0 -Model values at time = 8.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.3 1.9 1.3 0.0 - 0.0 0.6 0.8 0.6 0.0 - 0.0 0.2 0.3 0.2 0.0 - 0.0 0.1 0.1 0.1 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.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 0.0 -Model values at time = 9.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.6 0.8 0.6 0.0 - 0.0 0.2 0.3 0.2 0.0 - 0.0 0.1 0.1 0.1 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.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 0.0 -Model values at time = 10.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.6 0.8 0.6 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.1 0.1 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.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 0.0 -Model values at time = 11.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.6 0.9 0.6 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.0 0.1 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.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 12.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.6 0.9 0.6 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.0 0.1 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.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 13.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.6 0.9 0.6 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.0 0.1 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.0 0.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 14.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.6 0.9 0.6 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 15.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.6 0.9 0.6 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 16.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.6 0.9 0.6 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 17.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.6 0.9 0.6 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 18.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.6 0.9 0.6 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 19.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.6 0.9 0.6 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 20.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 21.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 22.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 23.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 24.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 25.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 26.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 27.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 28.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 29.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 30.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 31.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 32.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 33.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 34.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 35.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 36.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 37.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 38.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 39.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 40.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 41.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 42.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 43.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 44.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 45.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 46.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 47.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 48.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 49.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 50.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 51.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 52.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 53.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 54.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 55.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 56.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 57.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 58.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 59.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 60.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 61.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 62.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 63.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 64.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 65.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 66.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 67.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 68.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 69.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 70.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 71.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 72.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 73.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 74.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 75.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 76.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 77.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 78.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 79.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 80.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 81.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 82.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 83.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 84.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 85.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 86.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 87.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 88.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 89.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 90.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 91.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 92.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 93.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 94.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 95.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 96.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 97.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 98.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 99.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Model values at time = 100.0 - 0.0 3.0 4.0 3.0 0.0 - 0.0 1.4 1.9 1.4 0.0 - 0.0 0.7 0.9 0.7 0.0 - 0.0 0.3 0.4 0.3 0.0 - 0.0 0.1 0.2 0.1 0.0 - 0.0 0.1 0.1 0.1 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.0 0.0 0.0 0.0 - 0.0 0.0 0.0 0.0 0.0 -Finalize model. diff --git a/fpm.toml b/fpm.toml new file mode 100644 index 0000000..1f0a0cb --- /dev/null +++ b/fpm.toml @@ -0,0 +1,24 @@ +name = "bmiheatf" +version = "1.0" +license = "MIT" +homepage = "https://bmi.readthedocs.io/" + +[library] +source-dir = "bmi_heat" + +[[executable]] +name = "run_bmiheatf" +source-dir = "bmi_heat" +main = "bmi_main.f90" + +[install] +library = true + +[build] +auto-executables = false +auto-examples = true +auto-tests = true + +[dependencies] +heatf = { path = "heat" } +bmif = { git = "https://github.com/csdms/bmi-fortran" } diff --git a/heat/fpm.toml b/heat/fpm.toml new file mode 100644 index 0000000..22c9564 --- /dev/null +++ b/heat/fpm.toml @@ -0,0 +1,19 @@ +name = "heatf" +version = "1.0" +license = "MIT" + +[library] +source-dir = "./" + +[[executable]] +name = "run_heatf" +source-dir = "./" +main = "main.f90" + +[install] +library = true + +[build] +auto-executables = false +auto-examples = false +auto-tests = false diff --git a/sample.cfg b/sample.cfg new file mode 100644 index 0000000..e69de29 diff --git a/tests/CMakeLists.txt b/test/CMakeLists.txt similarity index 91% rename from tests/CMakeLists.txt rename to test/CMakeLists.txt index 60c4a6f..463b8e4 100644 --- a/tests/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -3,7 +3,7 @@ include(CTest) include_directories(${CMAKE_Fortran_MODULE_DIRECTORY}) function(make_test test_name) - add_test(NAME ${test_name} COMMAND ${test_name}) + add_test(NAME ${test_name} COMMAND ${test_name} "${CMAKE_CURRENT_SOURCE_DIR}/sample.cfg") add_executable(${test_name} ${test_name}.f90 fixtures.f90) target_link_libraries(${test_name} ${bmi_name}) endfunction(make_test) @@ -50,7 +50,3 @@ make_test(test_get_value_at_indices) make_test(test_by_reference) make_test(test_set_value) make_test(test_set_value_at_indices) - -file( - COPY ${CMAKE_CURRENT_SOURCE_DIR}/sample.cfg - DESTINATION ${CMAKE_BINARY_DIR}/tests) diff --git a/tests/fixtures.f90 b/test/fixtures.f90 similarity index 100% rename from tests/fixtures.f90 rename to test/fixtures.f90 diff --git a/test/fixtures.mod b/test/fixtures.mod new file mode 100644 index 0000000000000000000000000000000000000000..e741f488b854a1676248fc7422fed7f816980849 GIT binary patch literal 618 zcmV-w0+szAiwFP!000001GQDlj+-zP-TN!<&alYHdD3vGmr_t#tUJ#@xD*TTdRSgx1X2&xG93BsG@*c#=F2aB-7@~@S zopXI1xV}IUm~=^*Ntv-O5;w=mtBjG-sP7i%81P4$9I{}Orkg*VJ0`$T)8{v6iy8{B zCN=CUq$~fK3!E0CchTkaO(d!*%yNmf0nP!RvQ2jGr14GXmj3)8kv(FnG%@bfNRv0z zfVBXe9d}W>IfS35b53=;)@~jsonl3O12K6TYxBiuHvSn-H?x?084PcAipOM z5)3V+=BLH99LiRf%fR#7N1KCi~OpvHytBrP*Ef;Gegk!+LvW40~7*n{(j_E5ezCJDrkHtx4(gBbkv~qH3d) zmmEYbk$Xmp?s?V45wtdR`2)QE{Sg>8t%1O(<+eo7Q`;MXIck~;frX0x0*XEV*YXDd E06Lu`5&!@I literal 0 HcmV?d00001 diff --git a/tests/sample.cfg b/test/sample.cfg similarity index 100% rename from tests/sample.cfg rename to test/sample.cfg diff --git a/test/sample1.cfg b/test/sample1.cfg new file mode 100644 index 0000000..e69de29 diff --git a/test/samplel.cfg b/test/samplel.cfg new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_by_reference.f90 b/test/test_by_reference.f90 similarity index 89% rename from tests/test_by_reference.f90 rename to test/test_by_reference.f90 index ae0f99c..d954a3e 100644 --- a/tests/test_by_reference.f90 +++ b/test/test_by_reference.f90 @@ -6,12 +6,15 @@ program test_by_reference implicit none - character (len=*), parameter :: config_file = "sample.cfg" + character (len=256) :: config_file character (len=*), parameter :: var_name = "plate_surface__temperature" integer, parameter :: grid_id = 0 integer, parameter :: rank = 2 integer :: retcode + ! Get the path to the config file from command line params + call get_command_argument(1, config_file) + retcode = run_test() if (retcode.ne.BMI_SUCCESS) then stop BMI_FAILURE @@ -27,7 +30,7 @@ function run_test() result(code) real, pointer :: tref(:) integer :: code - status = m%initialize(config_file) + status = m%initialize(trim(config_file)) status = m%get_grid_shape(grid_id, shape) status = m%get_grid_size(grid_id, size) diff --git a/tests/test_finalize.f90 b/test/test_finalize.f90 similarity index 100% rename from tests/test_finalize.f90 rename to test/test_finalize.f90 diff --git a/tests/test_get_component_name.f90 b/test/test_get_component_name.f90 similarity index 100% rename from tests/test_get_component_name.f90 rename to test/test_get_component_name.f90 diff --git a/tests/test_get_current_time.f90 b/test/test_get_current_time.f90 similarity index 100% rename from tests/test_get_current_time.f90 rename to test/test_get_current_time.f90 diff --git a/tests/test_get_end_time.f90 b/test/test_get_end_time.f90 similarity index 100% rename from tests/test_get_end_time.f90 rename to test/test_get_end_time.f90 diff --git a/tests/test_get_grid_edge_count.f90 b/test/test_get_grid_edge_count.f90 similarity index 100% rename from tests/test_get_grid_edge_count.f90 rename to test/test_get_grid_edge_count.f90 diff --git a/tests/test_get_grid_edge_nodes.f90 b/test/test_get_grid_edge_nodes.f90 similarity index 100% rename from tests/test_get_grid_edge_nodes.f90 rename to test/test_get_grid_edge_nodes.f90 diff --git a/tests/test_get_grid_face_count.f90 b/test/test_get_grid_face_count.f90 similarity index 100% rename from tests/test_get_grid_face_count.f90 rename to test/test_get_grid_face_count.f90 diff --git a/tests/test_get_grid_face_edges.f90 b/test/test_get_grid_face_edges.f90 similarity index 100% rename from tests/test_get_grid_face_edges.f90 rename to test/test_get_grid_face_edges.f90 diff --git a/tests/test_get_grid_face_nodes.f90 b/test/test_get_grid_face_nodes.f90 similarity index 100% rename from tests/test_get_grid_face_nodes.f90 rename to test/test_get_grid_face_nodes.f90 diff --git a/tests/test_get_grid_node_count.f90 b/test/test_get_grid_node_count.f90 similarity index 100% rename from tests/test_get_grid_node_count.f90 rename to test/test_get_grid_node_count.f90 diff --git a/tests/test_get_grid_nodes_per_face.f90 b/test/test_get_grid_nodes_per_face.f90 similarity index 100% rename from tests/test_get_grid_nodes_per_face.f90 rename to test/test_get_grid_nodes_per_face.f90 diff --git a/tests/test_get_grid_origin.f90 b/test/test_get_grid_origin.f90 similarity index 100% rename from tests/test_get_grid_origin.f90 rename to test/test_get_grid_origin.f90 diff --git a/tests/test_get_grid_rank.f90 b/test/test_get_grid_rank.f90 similarity index 100% rename from tests/test_get_grid_rank.f90 rename to test/test_get_grid_rank.f90 diff --git a/tests/test_get_grid_shape.f90 b/test/test_get_grid_shape.f90 similarity index 100% rename from tests/test_get_grid_shape.f90 rename to test/test_get_grid_shape.f90 diff --git a/tests/test_get_grid_size.f90 b/test/test_get_grid_size.f90 similarity index 100% rename from tests/test_get_grid_size.f90 rename to test/test_get_grid_size.f90 diff --git a/tests/test_get_grid_spacing.f90 b/test/test_get_grid_spacing.f90 similarity index 100% rename from tests/test_get_grid_spacing.f90 rename to test/test_get_grid_spacing.f90 diff --git a/tests/test_get_grid_type.f90 b/test/test_get_grid_type.f90 similarity index 100% rename from tests/test_get_grid_type.f90 rename to test/test_get_grid_type.f90 diff --git a/tests/test_get_grid_x.f90 b/test/test_get_grid_x.f90 similarity index 100% rename from tests/test_get_grid_x.f90 rename to test/test_get_grid_x.f90 diff --git a/tests/test_get_grid_y.f90 b/test/test_get_grid_y.f90 similarity index 100% rename from tests/test_get_grid_y.f90 rename to test/test_get_grid_y.f90 diff --git a/tests/test_get_grid_z.f90 b/test/test_get_grid_z.f90 similarity index 100% rename from tests/test_get_grid_z.f90 rename to test/test_get_grid_z.f90 diff --git a/tests/test_get_input_item_count.f90 b/test/test_get_input_item_count.f90 similarity index 100% rename from tests/test_get_input_item_count.f90 rename to test/test_get_input_item_count.f90 diff --git a/tests/test_get_input_var_names.f90 b/test/test_get_input_var_names.f90 similarity index 100% rename from tests/test_get_input_var_names.f90 rename to test/test_get_input_var_names.f90 diff --git a/tests/test_get_output_item_count.f90 b/test/test_get_output_item_count.f90 similarity index 100% rename from tests/test_get_output_item_count.f90 rename to test/test_get_output_item_count.f90 diff --git a/tests/test_get_output_var_names.f90 b/test/test_get_output_var_names.f90 similarity index 100% rename from tests/test_get_output_var_names.f90 rename to test/test_get_output_var_names.f90 diff --git a/tests/test_get_start_time.f90 b/test/test_get_start_time.f90 similarity index 100% rename from tests/test_get_start_time.f90 rename to test/test_get_start_time.f90 diff --git a/tests/test_get_time_step.f90 b/test/test_get_time_step.f90 similarity index 100% rename from tests/test_get_time_step.f90 rename to test/test_get_time_step.f90 diff --git a/tests/test_get_time_units.f90 b/test/test_get_time_units.f90 similarity index 100% rename from tests/test_get_time_units.f90 rename to test/test_get_time_units.f90 diff --git a/tests/test_get_value.f90 b/test/test_get_value.f90 similarity index 93% rename from tests/test_get_value.f90 rename to test/test_get_value.f90 index d869b83..cc1a132 100644 --- a/tests/test_get_value.f90 +++ b/test/test_get_value.f90 @@ -6,10 +6,13 @@ program test_get_value implicit none - character (len=*), parameter :: config_file = "sample.cfg" + character (len=256) :: config_file type (bmi_heat) :: m integer :: retcode + ! Get the path to the config file from command line params + call get_command_argument(1, config_file) + retcode = test1() if (retcode.ne.BMI_SUCCESS) then stop BMI_FAILURE @@ -39,7 +42,7 @@ function test1() result(code) real :: tval(size) integer :: i, code - status = m%initialize(config_file) + status = m%initialize(trim(config_file)) status = m%get_value(var_name, tval) status = m%finalize() diff --git a/tests/test_get_value_at_indices.f90 b/test/test_get_value_at_indices.f90 similarity index 86% rename from tests/test_get_value_at_indices.f90 rename to test/test_get_value_at_indices.f90 index 5c0d9c9..915b6cf 100644 --- a/tests/test_get_value_at_indices.f90 +++ b/test/test_get_value_at_indices.f90 @@ -6,7 +6,7 @@ program test_get_value_at_indices implicit none - character (len=*), parameter :: config_file = "sample.cfg" + character (len=256) :: config_file character (len=*), parameter :: var_name = "plate_surface__temperature" integer, parameter :: rank = 2 integer, parameter, dimension(rank) :: shape = (/ 10, 5 /) @@ -16,6 +16,9 @@ program test_get_value_at_indices expected = (/ 0.0, 0.0, 0.0, 0.0, 0.0 /) integer :: retcode + ! Get the path to the config file from command line params + call get_command_argument(1, config_file) + retcode = run_test() if (retcode.ne.BMI_SUCCESS) then stop BMI_FAILURE @@ -31,7 +34,7 @@ function run_test() result(code) allocate(tval(size(indices))) - status = m%initialize(config_file) + status = m%initialize(trim(config_file)) status = m%get_value_at_indices(var_name, tval, indices) status = m%finalize() diff --git a/tests/test_get_value_ptr.f90 b/test/test_get_value_ptr.f90 similarity index 85% rename from tests/test_get_value_ptr.f90 rename to test/test_get_value_ptr.f90 index 9cab3ca..b925fc9 100644 --- a/tests/test_get_value_ptr.f90 +++ b/test/test_get_value_ptr.f90 @@ -6,7 +6,7 @@ program test_get_value_ptr implicit none - character (len=*), parameter :: config_file = "sample.cfg" + character (len=256) :: config_file character (len=*), parameter :: var_name = "plate_surface__temperature" integer, parameter :: rank = 2 integer, parameter, dimension(rank) :: shape = (/ 10, 5 /) @@ -14,6 +14,9 @@ program test_get_value_ptr expected = (/ 0.0, 0.0, 0.0, 0.0, 0.0 /) integer :: retcode + ! Get the path to the config file from command line params + call get_command_argument(1, config_file) + retcode = run_test() if (retcode.ne.BMI_SUCCESS) then stop BMI_FAILURE @@ -27,7 +30,7 @@ function run_test() result(code) integer :: i, j integer :: code - status = m%initialize(config_file) + status = m%initialize(trim(config_file)) status = m%get_value_ptr(var_name, tref) ! Visual inspection. diff --git a/tests/test_get_var_grid.f90 b/test/test_get_var_grid.f90 similarity index 100% rename from tests/test_get_var_grid.f90 rename to test/test_get_var_grid.f90 diff --git a/tests/test_get_var_itemsize.f90 b/test/test_get_var_itemsize.f90 similarity index 100% rename from tests/test_get_var_itemsize.f90 rename to test/test_get_var_itemsize.f90 diff --git a/tests/test_get_var_location.f90 b/test/test_get_var_location.f90 similarity index 100% rename from tests/test_get_var_location.f90 rename to test/test_get_var_location.f90 diff --git a/tests/test_get_var_nbytes.f90 b/test/test_get_var_nbytes.f90 similarity index 100% rename from tests/test_get_var_nbytes.f90 rename to test/test_get_var_nbytes.f90 diff --git a/tests/test_get_var_type.f90 b/test/test_get_var_type.f90 similarity index 100% rename from tests/test_get_var_type.f90 rename to test/test_get_var_type.f90 diff --git a/tests/test_get_var_units.f90 b/test/test_get_var_units.f90 similarity index 100% rename from tests/test_get_var_units.f90 rename to test/test_get_var_units.f90 diff --git a/tests/test_initialize.f90 b/test/test_initialize.f90 similarity index 70% rename from tests/test_initialize.f90 rename to test/test_initialize.f90 index 457d742..b1ace7f 100644 --- a/tests/test_initialize.f90 +++ b/test/test_initialize.f90 @@ -7,18 +7,21 @@ program test_initialize implicit none character (len=*), parameter :: config_file1 = "" - character (len=*), parameter :: config_file2 = "sample.cfg" + character (len=256) :: config_file2 type (bmi_heat) :: m integer :: status1, status2 + ! Get the path to the config file from command line params + call get_command_argument(1, config_file2) + status1 = m%initialize(config_file1) status = m%finalize() if (status1.ne.BMI_SUCCESS) then stop 1 end if - status2 = m%initialize(config_file2) + status2 = m%initialize(trim(config_file2)) status = m%finalize() if (status2.ne.BMI_SUCCESS) then stop 2 diff --git a/tests/test_set_value.f90 b/test/test_set_value.f90 similarity index 90% rename from tests/test_set_value.f90 rename to test/test_set_value.f90 index 68fad52..d29b7cb 100644 --- a/tests/test_set_value.f90 +++ b/test/test_set_value.f90 @@ -6,10 +6,13 @@ program test_set_value implicit none - character (len=*), parameter :: config_file = "sample.cfg" + character (len=256) :: config_file type (bmi_heat) :: m integer :: retcode + ! Get the path to the config file from command line params + call get_command_argument(1, config_file) + retcode = test1() if (retcode.ne.BMI_SUCCESS) then stop BMI_FAILURE @@ -36,7 +39,7 @@ function test1() result(code) real :: x(size), y(size) integer :: i, code - status = m%initialize(config_file) + status = m%initialize(trim(config_file)) status = m%get_value(var_name, x) x = 42.0 status = m%set_value(var_name, x) @@ -65,7 +68,7 @@ function test2() result(code) real :: x(size), y(size) integer :: i, code - status = m%initialize(config_file) + status = m%initialize(trim(config_file)) status = m%get_value(var_name, x) status = m%set_value(var_name, expected) status = m%get_value(var_name, y) @@ -93,7 +96,7 @@ function test3() result(code) integer :: x(size), y(size) integer :: i, code - status = m%initialize(config_file) + status = m%initialize(trim(config_file)) status = m%get_value(var_name, x) status = m%set_value(var_name, expected) status = m%get_value(var_name, y) diff --git a/tests/test_set_value_at_indices.f90 b/test/test_set_value_at_indices.f90 similarity index 86% rename from tests/test_set_value_at_indices.f90 rename to test/test_set_value_at_indices.f90 index 7bd3e8f..c538a73 100644 --- a/tests/test_set_value_at_indices.f90 +++ b/test/test_set_value_at_indices.f90 @@ -6,7 +6,7 @@ program test_set_value_at_indices implicit none - character (len=*), parameter :: config_file = "sample.cfg" + character (len=256) :: config_file character (len=*), parameter :: var_name = "plate_surface__temperature" integer, parameter :: rank = 2 integer, parameter :: size = 50 @@ -17,6 +17,9 @@ program test_set_value_at_indices expected = (/ 17.0, 42.0, 88.0, 42.0, 17.0 /) integer :: retcode + ! Get the path to the config file from command line params + call get_command_argument(1, config_file) + retcode = run_test() if (retcode.ne.BMI_SUCCESS) then stop BMI_FAILURE @@ -29,7 +32,7 @@ function run_test() result(code) real :: x(size) integer :: i, code - status = m%initialize(config_file) + status = m%initialize(trim(config_file)) status = m%set_value_at_indices(var_name, indices, expected) status = m%get_value(var_name, x) status = m%finalize() diff --git a/tests/test_update.f90 b/test/test_update.f90 similarity index 100% rename from tests/test_update.f90 rename to test/test_update.f90 diff --git a/tests/test_update_until.f90 b/test/test_update_until.f90 similarity index 100% rename from tests/test_update_until.f90 rename to test/test_update_until.f90